Fail2Ban (ошибка-в бан) — простой и эффективный инструмент для автоматической защиты сервера от брут-форс атак. Он анализирует логи, отслеживает неудачные попытки входа и блокирует подозрительные IP-адреса через брандмауэр. Ниже — понятная схема настройки Fail2Ban, подходящая даже для минимальной базовой конфигурации.
Что делает Fail2Ban
FailtoBan следит за файлами журналов и ищет в них повторяющиеся ошибки авторизации. Если один и тот же IP провалил вход слишком много раз за короткий период — адрес автоматически блокируется. Важное преимущество Fail2Ban: блокировка временная. Это снижает риск случайно отрезать доступ легитимному пользователю.
Установка
На популярных системах Fail2Ban доступен из репозиториев:
код
# Debian / Ubuntu apt install fail2ban # CentOS / Rocky Linux dnf install epel-release dnf install fail2ban
После установки сервис готов к настройке.
Где находятся настройки
Fail2Ban использует два типа файлов конфигурации:
jail.conf— общий шаблон (его не трогаем)jail.localили файлы вjail.d/— локальные настройки, которые переопределяют нужные параметры
Такой подход позволяет безопасно обновлять Fail2Ban без потери своих конфигов.
Основные параметры
- ignoreip — список IP, которые никогда не попадут под бан. Указываются свои белые адреса.
- bantime — длительность блокировки.
- findtime — период, в течение которого считаются попытки.
- maxretry — сколько раз можно ошибиться перед баном.
- banaction — что делать при блокировке (обычно правило в iptables).
Пример минимальной конфигурации для SSH
Создаём файл /etc/fail2ban/jail.local:
код
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 findtime = 300 bantime = 600 banaction = iptables-multiport
Теперь, если за 5 минут будет 5 неудачных попыток входа — IP заблокируется на 10 минут. Это базовый, но уже рабочий уровень безопасности.
Советы по безопасной настройке
- Укажи свои IP в
ignoreip, чтобы случайно не забанить себя. - Не ставь слишком жёсткие параметры — ложные блокировки никому не нужны.
- Можно создавать собственные фильтры под нужные сервисы: SSH, почта, веб-интерфейсы, панели управления.
- Fail2Ban — это не единственный слой защиты. Используй его вместе с ключами SSH, сложными паролями и ограничением доступа по сети.
Дополнительные примеры конфигураций Fail2Ban
Ниже — готовые jail-блоки, которые чаще всего ищут: защита SSH, Nginx, WordPress, Apache, панели управления и даже защита от слишком любопытных ботов.
Все примеры добавляются в jail.local или файлы внутри jail.d/*.conf.
Защита SSH с более жёсткими правилами
(для серверов, где никто не должен промахиваться)
код
[sshd-strict] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 findtime = 120 bantime = 3600 banaction = iptables-multiport
Защита Nginx: перебор URL, 404-сканирование
(классическая защита от «пауков-лазутчиков»)
код
[nginx-req-limit] enabled = true port = http,https filter = nginx-req-limit logpath = /var/log/nginx/access.log maxretry = 20 findtime = 60 bantime = 600
Фильтр (/etc/fail2ban/filter.d/nginx-req-limit.conf):
код
[Definition] failregex = ^<HOST> - .* "(GET|POST) .
WordPress: защита от wp-login.php
(одна из самых популярных задач)
код
[wordpress-auth] enabled = true port = http,https logpath = /var/log/nginx/access.log filter = wordpress-auth maxretry = 5 findtime = 300 bantime = 900
Фильтр wordpress-auth.conf:
код
[Definition] failregex = <HOST> - .* "POST /wp-login.php
WordPress: защита от xmlrpc.php
(потому что 90% атак идут именно туда)
код
[wordpress-xmlrpc] enabled = true port = http,https filter = wordpress-xmlrpc logpath = /var/log/nginx/access.log maxretry = 5 findtime = 120 bantime = 1800
Фильтр:
код
[Definition] failregex = <HOST> .* "POST /xmlrpc.php
Защита от перебора FTP (vsftpd)
код
[vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log maxretry = 5 findtime = 300 bantime = 1200
Apache: защита от слишком частых запросов
(полезно против сканеров)
код
[apache-limit] enabled = true filter = apache-limit port = http,https logpath = /var/log/apache2/access.log maxretry = 50 findtime = 60 bantime = 600
Фильтр:
код
[Definition] failregex = ^<HOST> -.*"(GET|POST).*
Fail2Ban для защиты от ботов, пытающихся найти админки
(популярные директории)
код
[admin-scanner] enabled = true port = http,https filter = admin-scanner logpath = /var/log/nginx/access.log maxretry = 3 findtime = 300 bantime = 3600
Фильтр:
код
[Definition] failregex = <HOST> - .* "(GET|POST) /(admin|administrator|wp-admin|login|cpanel)
Fail2Ban для защиты панелей:
ISPmanager
код
[ispmanager] enabled = true port = 1500,1501 filter = ispmanager logpath = /usr/local/mgr5/var/ispmanager.log maxretry = 4 findtime = 300 bantime = 3600
Защита от DoS на уровень HTTP-флудов
( Fail2Ban ≠ анти-DDoS, но мелких флудеров вполне останавливает)
код
[nginx-noscan] enabled = true filter = nginx-noscan logpath = /var/log/nginx/access.log maxretry = 300 findtime = 60 bantime = 600
Фильтр:
(блокируем IP, делающий >300 запросов за минуту)
код
[Definition] failregex = ^<HOST> .*
Полезные ссылки
- fail2ban для RDP 3389: https://adminotes.ru/fail2ban-dlya-rdp-za-nat-nadyozhnaya-zashhita-terminalnogo-servera/
- Официальная документация Fail2Ban https://fail2ban.readthedocs.io/en/latest/
- Репозиторий Fail2Ban на GitHub https://github.com/fail2ban/fail2ban
- Список готовых jail-примеров (jail.conf и jail.d) https://github.com/fail2ban/fail2ban/tree/master/config
- Документация по iptables (для понимания banaction) https://wiki.archlinux.org/title/iptables
Итог
Fail2Ban — один из самых простых способов закрыть сервер от автоматизированных переборов. Настраивается за несколько минут, работает стабильно и прозрачно, а при необходимости легко расширяется своими фильтрами.


