Fail2Ban — инструмент, который анализирует лог-файлы сервисов и автоматически блокирует IP-адреса, которые совершают слишком много неудачных попыток. Эффективен против brute-force атак на SSH, веб-панели, почтовые серверы.
Установка
sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
Создание конфига jail.local
Никогда не редактируйте jail.conf — он перезаписывается при обновлении. Создайте jail.local:
# /etc/fail2ban/jail.local
[DEFAULT]
# Время бана в секундах (3600 = 1 час, -1 = навсегда)
bantime = 3600
# Время поиска попыток (10 минут)
findtime = 600
# Максимум попыток до бана
maxretry = 5
# Исключить свои IP из бана!
ignoreip = 127.0.0.1/8 YOUR.TRUSTED.IP
[sshd]
enabled = true
port = 22
logpath = %(sshd_log)s
maxretry = 3
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[postfix-sasl]
enabled = true
port = smtp,submission
logpath = /var/log/mail.log
maxretry = 5
sudo systemctl restart fail2ban
Управление и мониторинг
# Общий статус
sudo fail2ban-client status
# Статус конкретного jail
sudo fail2ban-client status sshd
# Ручной бан IP
sudo fail2ban-client set sshd banip 192.168.1.100
# Разбанить IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
# Посмотреть забаненные IP в iptables
sudo iptables -L f2b-sshd -n -v
# Логи Fail2Ban
sudo journalctl -u fail2ban -f
Мониторинг атак в реальном времени
# Следить за банами SSH в реальном времени
sudo tail -f /var/log/auth.log | grep "Failed password"
# Топ атакующих IP
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20
💡 ignoreip — ОБЯЗАТЕЛЬНО: Добавьте свой домашний/офисный IP в ignoreip ПЕРЕД первым запуском. Иначе рискуете забанить себя при отладке. Всегда проверяйте правило дважды.
⚠️ Fail2Ban ≠ полная защита: Брутфорс с тысяч разных IP (botnet) обойдёт Fail2Ban. Дополнительно ограничивайте доступ к SSH по белому списку IP через UFW, или используйте VPN для доступа к серверу.