#!/bin/bash

# Цвета
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${GREEN}===============================${NC}"
echo -e "${GREEN}     SSH Blocker Installer     ${NC}"
echo -e "${GREEN}===============================${NC}"

# Проверка прав
if [ "$EUID" -ne 0 ]; then
    echo -e "${RED}Ошибка: Запустите скрипт с правами root (sudo).${NC}"
    exit 1
fi

# Запрос интервала
echo -e "${YELLOW}Как часто проверять попытки входа?${NC}"
echo "1) Каждую минуту (рекомендуется)"
echo "2) Каждые 5 минут"
echo "3) Каждые 15 минут"
read -p "Выберите (1-3): " choice

case $choice in
    1)
        CRON_TIME="* * * * *"
        PERIOD="каждую минуту"
        ;;
    2)
        CRON_TIME="*/5 * * * *"
        PERIOD="каждые 5 минут"
        ;;
    3)
        CRON_TIME="*/15 * * * *"
        PERIOD="каждые 15 минут"
        ;;
    *)
        echo -e "${RED}Неверный выбор. Использую каждую минуту.${NC}"
        CRON_TIME="* * * * *"
        PERIOD="каждую минуту"
        ;;
esac

# Установка iptables-persistent
echo -e "${GREEN}Устанавливаю iptables-persistent...${NC}"
DEBIAN_FRONTEND=noninteractive apt install iptables-persistent -y

# Создание основного скрипта
echo -e "${GREEN}Создаю основной скрипт защиты...${NC}"
cat > /usr/local/bin/ssh-blocker.sh << 'EOF'
#!/bin/bash

LIMIT=3
BLOCK_TIME=3600
BLOCKED_FILE="/var/log/ssh-blocked.txt"
LOG_FILE="/var/log/ssh-blocker.log"

journalctl -u ssh -S "30 minutes ago" 2>/dev/null | grep "Failed password" | awk '{print $(NF-3)}' | sort | uniq -c | while read count ip; do
    if [ $count -ge $LIMIT ]; then
        if ! grep -q "$ip" $BLOCKED_FILE 2>/dev/null; then
            /sbin/iptables -A INPUT -s $ip -j DROP
            echo "$ip:$(date +%s)" >> $BLOCKED_FILE
            echo "$(date): Блокирован IP $ip (попыток: $count)" >> $LOG_FILE
        fi
    fi
done

current_time=$(date +%s)
temp_file=$(mktemp)
if [ -f $BLOCKED_FILE ]; then
    while IFS=: read ip timestamp; do
        if [ $((current_time - timestamp)) -lt $BLOCK_TIME ]; then
            echo "$ip:$timestamp" >> $temp_file
        else
            /sbin/iptables -D INPUT -s $ip -j DROP 2>/dev/null
            echo "$(date): Разблокирован IP $ip" >> $LOG_FILE
        fi
    done < $BLOCKED_FILE
    mv $temp_file $BLOCKED_FILE
fi
EOF

chmod +x /usr/local/bin/ssh-blocker.sh

# Создание логов
touch /var/log/ssh-blocked.txt
touch /var/log/ssh-blocker.log

# Добавление в cron
echo -e "${GREEN}Настраиваю cron...${NC}"
(crontab -l 2>/dev/null | grep -v "ssh-blocker.sh"; echo "$CRON_TIME /usr/local/bin/ssh-blocker.sh") | crontab -

# Первый запуск
echo -e "${GREEN}Первый запуск...${NC}"
/usr/local/bin/ssh-blocker.sh

# Сохранение правил iptables
iptables-save > /etc/iptables/rules.v4

# Финальный отчёт
echo ""
echo -e "${GREEN}================================${NC}"
echo -e "${GREEN}Установка завершена!${NC}"
echo -e "${GREEN}================================${NC}"
echo -e "Скрипт будет запускаться ${YELLOW}$PERIOD${NC}"
echo -e "Лог: ${YELLOW}/var/log/ssh-blocker.log${NC}"
echo -e "Список блокировок: ${YELLOW}/var/log/ssh-blocked.txt${NC}"
