fail2ban
fail2ban это широко используемый инструмент предотвращения вторжений, который следит за логами на предмет паттернов вроде повторных неудачных входов и временно или постоянно банит IP адрес источника через firewall сервера.
Как он на самом деле решает забанить адрес
fail2ban отслеживает конкретные лог-файлы на паттерны, соответствующие неудачным попыткам входа, и как только исходный IP превышает настроенный порог неудач за заданное время, он даёт команду firewall сервера блокировать этот адрес, временно или постоянно.
Почему он дополняет, а не заменяет другие меры
fail2ban снижает объём попыток подбора, которые вообще доходят до момента проверки против вашей системы входа, но никак не усиливает сам вход, поэтому его обычно сочетают с аутентификацией по ключу, а не используют отдельно.
Установку, настройку jail и проверку работы смотрите здесь: руководство по настройке fail2ban.
Проверьте фильтр на реальных логах
Включённый jail всё равно может «не видеть» атак. Обычная причина в том, что фильтр не совпадает с форматом логов вашего дистрибутива, а fail2ban позволяет проверить это, никого не блокируя. Страница руководства fail2ban-regex(1) описывает инструмент, который читает лог (имя файла или systemd-journal) и фильтр, а затем сообщает, какие строки совпали. Запускайте его вместе с проверкой конфигурации:
sudo fail2ban-client -t
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
sudo fail2ban-regex systemd-journal /etc/fail2ban/filter.d/sshd.conf
Первая команда проверяет конфигурацию, как сказано на странице fail2ban-client(1). Если фильтр ничего не находит в логе, где явно есть неудачные входы, добавьте --print-all-missed, чтобы увидеть пропущенные строки: именно это несовпадение и есть причина, по которой jail никогда не забанит адрес. Страница jail.conf(5) добавляет две важные детали. Шаблон в logpath охватывает только файлы, существующие на момент запуска fail2ban, а backend auto переключается на журнал, только если лог-файлы не найдены и задан journalmatch. После любого изменения расположения логов перезагрузите конфигурацию и проверьте снова.
Проведите тестовый бан от начала до конца
Единственное доказательство работы бана: адрес, который вы видите в firewall. Забаньте вручную зарезервированный документационный адрес, убедитесь, что он появился, и снимите бан:
sudo fail2ban-client set sshd banip 203.0.113.9
sudo fail2ban-client get sshd banip --with-time
sudo nft list ruleset
sudo iptables -S
sudo fail2ban-client set sshd unbanip 203.0.113.9
Используйте ту из двух команд просмотра firewall, которая подходит вашему серверу. Согласно jail.conf(5), действие бана по умолчанию называется iptables-multiport, поэтому на сервере, где firewall управляется через nftables или другой инструмент, убедитесь, что выбранный дистрибутивом banaction действительно создаёт правило, которое вы видите. Если fail2ban считает адрес забаненным, а в firewall ничего нет, jail работает лишь для вида. Помните также, что ignoreself по умолчанию равен true, поэтому неудачные входы с собственных адресов сервера бан не вызывают, и это может исказить тест, запущенный с самой машины.
Когда изменение прошло проверку, примените его командой sudo fail2ban-client reload: она перечитывает конфигурацию без перезапуска сервера. Полную схему jail смотрите в руководстве по настройке, а SSH-часть той же защиты разобрана в руководстве по укреплению SSH.
Связанные термины: Jail в fail2ban, Intrusion prevention, Атака подбором, Rate limiting, MaxAuthTries, journalctl (просмотр журнала systemd).
Часто задаваемые вопросы
Работает ли fail2ban для сервисов, кроме SSH?
Да. Он поставляется с готовыми конфигурациями jail для многих распространённых сервисов, включая аутентификацию веб-серверов и почтовые серверы, и может быть расширен кастомными фильтрами для других логов.
Как долго обычно длится бан в fail2ban?
Это настраивается, от нескольких минут до постоянной блокировки, и во многих настройках используется нарастающее время бана, которое увеличивается для повторных нарушителей.
Может ли легитимный пользователь случайно попасть под бан fail2ban?
Да, если он достаточно раз ошибётся с учётными данными в заданном окне времени. Большинство настроек включают понятный способ запросить разблокировку или достаточно щедрый порог, чтобы избежать этого при обычном использовании.
Как проверить фильтр fail2ban, никого не блокируя?
Запустите fail2ban-regex с лог-файлом или systemd-journal и файлом фильтра. Инструмент покажет, какие строки совпали, а опция --print-all-missed выведет те, что не совпали.
Можно ли применить изменения fail2ban без перезапуска службы?
Да. Команда fail2ban-client reload перечитывает конфигурацию без перезапуска сервера, а fail2ban-client -t предварительно проверяет конфигурацию на ошибки.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab