На типичном 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 настраивал опытный администратор, это не «голые» серверы.
Что нашлось на серверах:
| Сервис | Серверов |
|---|---|
| SSH | 13 |
| nginx | 7 |
| MySQL | 5 |
| PostgreSQL | 5 |
| Apache | 3 |
| Exim, Dovecot | 3 |
| FTP (Pure-FTPd, ProFTPD) | 2 |
| Postfix | 1 |
Что нашли шаблоны за сутки
| Шаблон | Срабатываний | Адресов | Не заблокировано | Серверов |
|---|---|---|---|---|
| Агрессивные SEO-боты | 20 007 | 638 | 636 | 4 |
| SSH: перебор и сканеры | 18 678 | 886 | 0 | 13 |
| Exim: перебор паролей SMTP | 4 932 | 160 | 7 | 3 |
| Краулеры для обучения ИИ | 3 458 | 401 | 399 | 5 |
| Мусор вместо HTTP-запроса | 3 319 | 160 | 155 | 7 |
| Поиск секретов и бэкапов | 1 972 | 105 | 67 | 6 |
| Поиск WordPress и веб-шеллов | 321 | 107 | 81 | 5 |
| Эксплойты в запросах | 130 | 16 | 7 | 6 |
| Инструменты взлома и сканеры | 90 | 84 | 76 | 6 |
| WordPress: перебор паролей | 60 | 9 | 0 | 2 |
| phpMyAdmin: поиск и перебор | 18 | 3 | 2 | 2 |
«Адресов» — сумма по журналам: если один адрес атаковал два сайта, он посчитан дважды. «Не заблокировано» — адреса, которые набрали порог шаблона, но сервер их не блокирует ни своим 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.