Что fail2ban на вашем сервере не видит

6 мин чтения · обновлено 9 октября 2026

На типичном Linux-сервере fail2ban защищает SSH, и на этом всё. Jail sshd включён по умолчанию почти в любом дистрибутиве, а веб-сервер, почта и FTP продолжают принимать атаки без всякой защиты. Чтобы понять, что именно проходит мимо, нужно знать, где лежат журналы, какие фильтры к ним подходят, и вручную гонять fail2ban-regex. Мы сделали это на 13 боевых серверах и посчитали, что fail2ban за сутки не видит.

Почему fail2ban видит только то, что ему показали

fail2ban не ищет атаки сам. Он читает ровно те журналы, которые указаны в включённых jail, и сравнивает строки с регулярными выражениями из фильтров. Нет jail для nginx — запросы к /.env и /wp-login.php в его журнале никто не читает. Нет jail для Exim — перебор паролей SMTP идёт неделями.

Включить jail тоже не так просто, как кажется:

  • Журналы лежат где угодно. Панели управления вроде ISPmanager кладут журналы каждого сайта в свою папку, почтовые серверы пишут в journald или в /var/log/maillog, FTP-серверы — каждый по-своему.
  • Готовых фильтров мало. В поставке fail2ban есть фильтры для перебора паролей, но нет фильтров для охотников за бэкапами, сканеров уязвимостей и мусорных запросов.
  • Страшно забанить своих. Фильтр для веба, написанный на глаз, легко ловит мониторинг, платёжные уведомления или собственный офис.

Что мы проверили

Мы взяли последние отчёты анализа журналов KIPBan с 13 серверов Linux на 9 октября 2026 года. Среди них сайты на WordPress, 1С-Битрикс и Django, почтовые серверы, стриминг и CDN. Всего около 1,47 млн строк журналов, примерно сутки работы каждого сервера. На многих из них fail2ban настраивал опытный администратор, это не «голые» серверы.

Что нашлось на серверах:

СервисСерверов
SSH13
nginx7
MySQL5
PostgreSQL5
Apache3
Exim, Dovecot3
FTP (Pure-FTPd, ProFTPD)2
Postfix1

Что нашли шаблоны за сутки

ШаблонСрабатыванийАдресовНе заблокированоСерверов
Агрессивные SEO-боты20 0076386364
SSH: перебор и сканеры18 678886013
Exim: перебор паролей SMTP4 93216073
Краулеры для обучения ИИ3 4584013995
Мусор вместо HTTP-запроса3 3191601557
Поиск секретов и бэкапов1 972105676
Поиск WordPress и веб-шеллов321107815
Эксплойты в запросах1301676
Инструменты взлома и сканеры9084766
WordPress: перебор паролей60902
phpMyAdmin: поиск и перебор18322

«Адресов» — сумма по журналам: если один адрес атаковал два сайта, он посчитан дважды. «Не заблокировано» — адреса, которые набрали порог шаблона, но сервер их не блокирует ни своим jail, ни из общей базы. Шаблоны 1С-Битрикса, HTTP-авторизации nginx, Dovecot и FTP за эти сутки ничего не нашли.

Что видно из этих цифр

SSH закрыт везде

Перебор паролей SSH есть на всех 13 серверах: почти 19 тысяч попыток от 886 адресов за сутки. Все они заблокированы, потому что jail SSH работает везде. Это та часть, которую fail2ban делает хорошо. Хотя и здесь стандартный jail sshd пропускает часть сканеров, об этом в статье «Почему стандартный jail sshd пропускает сканеры».

Веб закрыт плохо

Даже там, где fail2ban настраивали с умом, за одни сутки не были закрыты:

  • 155 адресов, которые слали мусор вместо HTTP: TLS на HTTP-порт, пробы SMB, RDP и SOCKS. Что это за строки в журнале, разобрано в статье «Что значит \x16\x03 в access.log»;
  • 81 сканер WordPress и веб-шеллов, в том числе на сайтах, где WordPress никогда не было;
  • 76 сканеров уязвимостей: sqlmap, Nuclei, zgrab и подобные;
  • 67 охотников за .env, .git и дампами баз.

Сканеры приходят почти всегда с отдельного адреса: 90 запросов от 84 адресов. Классический подход «забанить после пяти ошибок» против них не работает, каждый адрес делает одну-две попытки и уходит. Для таких шаблонов достаточно одного срабатывания: запрос к /.git/config или строка sqlmap в User-Agent не бывают случайными.

Почта — середина

Exim атакуют на всех трёх почтовых серверах: почти 5 тысяч попыток подобрать пароль SMTP от 160 адресов. Почти все заблокированы, но 7 адресов прошли: jail есть, но смотрит не во все журналы или ждёт больше попыток, чем делают эти адреса.

Больше всего «трафика» дают боты

Боты SEO-сервисов и краулеры, собирающие данные для обучения ИИ, дали около 23,5 тысячи запросов от тысячи адресов за сутки. Это не атаки, и блокировать их или нет — решение владельца сайта. Плюсы и минусы разобраны в статье «Блокировать ли ИИ-краулеры и SEO-ботов».

Как проверить свой сервер вручную

Без всяких сервисов это делается утилитой fail2ban-regex, которая прогоняет журнал через фильтр и ничего не блокирует:

# какие jail сейчас работают
fail2ban-client status

# сколько строк журнала nginx ловит стандартный фильтр nginx-botsearch
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-botsearch.conf

# то же для Exim
fail2ban-regex /var/log/exim4/mainlog /etc/fail2ban/filter.d/exim.conf

Порядок такой: найти все сервисы, которые слушают наружу (ss -tlnp), найти их журналы, подобрать фильтр, проверить его через fail2ban-regex, посмотреть, не попали ли в совпадения свои адреса, и только потом включать jail. На сервере с панелью и десятком сайтов это несколько часов работы, и её придётся повторять, когда появится новый сайт.

Как это делает KIPBan

Анализ журналов в KIPBan делает ту же работу автоматически:

  • Находит сервисы и журналы сам: по открытым процессами файлам, по конфигурации nginx, по journald и известным путям почтовых и FTP-серверов. Нестандартные пути, панели управления и несколько сайтов на сервере поддерживаются.
  • Проверяет 16 шаблонов KIPBan на последних 150 тысячах строк каждого журнала, примерно за сутки, раз в сутки ночью с самым низким приоритетом.
  • Сверяет найденных с тем, что сервер уже блокирует, и показывает итог: «включён», «уже блокируются», «не закрыто: 35 из 58» или «единичные».
  • Включает jail кнопкой. Новый jail сначала работает в режиме наблюдения и ничего не блокирует. Подробнее в статье «Режим наблюдения: как включить jail и не забанить своих».

Журналы при этом не покидают сервер: в кабинет приходят только счётчики, без строк журналов и IP-адресов. Как это устроено, описано в статье «Анализ логов без передачи логов».

Ограничения: только Linux (агент 21.5 и новее), журналы внутри Docker-контейнеров не анализируются, а свои фильтры в кабинет пока не загрузить. Ваши jail в jail.local агент, как и раньше, подключает к KIPBan сам.

Вопросы

Какие jail fail2ban включены по умолчанию?

В большинстве дистрибутивов после установки fail2ban включён только jail sshd. Остальные jail из jail.conf выключены, пока вы не включите их в jail.local или в файлах jail.d.

Как проверить фильтр fail2ban, ничего не блокируя?

Утилитой fail2ban-regex: она прогоняет журнал через фильтр и показывает, сколько строк совпало и какие именно. Блокировок она не делает.

Почему сканеры не попадают в бан с maxretry 5?

Сканер обычно делает с одного адреса один-два запроса и переходит на другой адрес. До порога в пять ошибок он не доходит, поэтому для однозначных признаков сканирования, вроде запроса к .git/config, порог должен быть 1.