Определение простыми словами
fail2ban — сторож логов. Демон сканирует /var/log/auth.log, журналы Nginx, Postfix, Dovecot и других сервисов, сопоставляет строки с регулярными выражениями (filters) и при превышении порога ошибок добавляет IP в правила фаервола (jails). Через заданное время бан снимается автоматически.
Базовая защита от перебора паролей по SSH, FTP, веб-формам и почтовым протоколам. Не заменяет полноценный WAF, но отбивает 95% автоматических ботов. Работает поверх iptables, nftables или firewalld.
Сравнение
| Параметр | fail2ban | CrowdSec | WAF облачный |
|---|---|---|---|
| Установка | Один пакет | Демон + бучеры | Подмена DNS |
| База IP | Локальная | Краудсорсинг | Своя |
| Цена | Бесплатно | Бесплатно | От $20/мес |
| Защита L7 | По логам | Сценарии | Полная |
| Нагрузка на сервер | Минимальная | Средняя | Нулевая |
Кейсы использования
- Защита SSH-порта от брутфорса — после 5 неудачных попыток IP уходит в бан на час.
- Снижение нагрузки от ботов на wp-login.php — фильтр по 401/403 в access.log Nginx.
- Блокировка спам-рассылок через Postfix — реакция на rejected для несуществующих адресатов.
- Негативный сценарий: ошибка в фильтре банит весь свой офис — IP попадает в jail из-за легитимных ошибок ввода пароля. Важно держать
ignoreipс белым списком и тестироватьfail2ban-regex.
Технические детали
apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
cat > /etc/fail2ban/jail.d/sshd.local << EOF
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 1.2.3.4
EOF
systemctl restart fail2ban
fail2ban-client status sshd
Файл jail.local переопределяет дефолты, не трогая основной конфиг при обновлении пакета. Команда fail2ban-client status sshd покажет список текущих банов. Тест регулярных выражений: fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf.
🔥 Где это применяется
Частые вопросы
fail2ban защищает от DDoS?
Только от слабых L7-атак с одних IP. Против объёмных DDoS не помогает — для этого нужны облачная защита и фильтрация на уровне провайдера.
Как разбанить себя?
Если есть второй IP или KVM-консоль: fail2ban-client unban 1.2.3.4. Заранее добавьте свой IP в ignoreip, чтобы не залочиться.
На сколько банить IP?
Для боевого SSH — час-сутки. Для wp-login на сайте можно ставить bantime неделями. После 3-4 банов одного IP включают permanent через recidive jail.