Облачное хранилище
Fail2Ban — защита сервера от brute-force и блокировка IP
Fail2Ban: как работает защита от перебора паролей на сервере

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 — один из самых простых способов закрыть сервер от автоматизированных переборов. Настраивается за несколько минут, работает стабильно и прозрачно, а при необходимости легко расширяется своими фильтрами.