Что такое Fail2ban?
Fail2ban – это система предотвращения вторжений, которая анализирует логи сервисов и автоматически блокирует IP-адреса, проявляющие подозрительную активность: множественные неудачные попытки входа (брутфорс), подбор паролей, сканирование уязвимостей, DoS-атаки на уровне приложений и другие аномалии. Блокировка выполняется на уровне межсетевого экрана (iptables, nftables, ufw и др.) на заданное администратором время.
Fail2ban работает по принципу «тюрем» (jails) – для каждой защищаемой службы создаётся своя тюрьма с набором правил обнаружения атак и действий. Он поддерживает как IPv4, так и IPv6, а также позволяет гибко настраивать эскалацию бана для злостных нарушителей.
Инструмент незаменим для защиты SSH, веб-серверов (nginx, Apache), почтовых сервисов (Postfix, Dovecot), VoIP-серверов (Asterisk) и многих других служб.
Установка Fail2ban
В зависимости от вашего дистрибутива используйте соответствующий менеджер пакетов.
Для Ubuntu / Debian
apt update apt install fail2ban
После установки запустите службу и добавьте в автозагрузку:
systemctl start fail2ban systemctl enable fail2ban
Проверьте, что служба работает:
systemctl status fail2ban
Основные файлы конфигурации
Все настройки хранятся в каталоге /etc/fail2ban/.
- jail.conf – основной конфигурационный файл, поставляемый с пакетом. Не рекомендуется редактировать его напрямую, так как при обновлении пакета он может быть перезаписан.
- jail.local – пользовательский файл, в котором вы переопределяете настройки из jail.conf. Именно его нужно создавать и редактировать.
- filter.d/ – каталог с фильтрами (регулярными выражениями), которые определяют, какие записи в логах считать признаками атаки.
- action.d/ – каталог со скриптами действий (например, блокировка через iptables, отправка уведомлений на email и т.д.).
Для начала скопируйте пример конфигурации, если хотите взять за основу:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Общие параметры настройки (jail.local)
В секции [DEFAULT] задаются глобальные параметры, которые будут применяться ко всем тюрьмам, если не переопределены индивидуально.
[DEFAULT] # IP-адреса, которые никогда не блокируются (свои доверенные адреса) ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 # Время бана (в секундах) bantime = 600 # Время, за которое учитываются неудачные попытки (в секундах) findtime = 600 # Количество неудачных попыток, после которых следует бан maxretry = 3 banaction = iptables-multiport # Файл лога самого Fail2ban logtarget = /var/log/fail2ban.log
Важно: обязательно добавьте в ignoreip свой внешний IP-адрес, под которым вы сами подключаетесь к серверу, чтобы случайно не заблокировать себя.
Примеры настройки защиты различных служб
Все тюрьмы включаются в том же файле jail.local. По умолчанию они уже могут быть включены. Ниже приведены готовые блоки для популярных служб с некоторыми дополнениями.
1. Защита SSH
Стандартная тюрьма для SSH уже предопределена в jail.conf. Достаточно её активировать.
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 21600 # 6 часов findtime = 600
2. Защита веб-сервера nginx от избыточных запросов к определённому URL
Создадим тюрьму, которая будет блокировать IP, слишком часто запрашивающие несуществующие скрипты или вызывающие ошибки. Для этого используем готовый фильтр nginx-req-limit.
[nginx-req-limit] enabled = true filter = nginx-req-limit action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 600 bantime = 7200 maxretry = 10
Этот фильтр срабатывает, когда в логах nginx появляются сообщения о превышении лимита запросов (обычно настраивается модулем ngx_http_limit_req_module). При 10 срабатываниях за 10 минут IP блокируется на 2 часа.
3. Защита Asterisk (VoIP сервер)
Asterisk часто подвергается атакам на регистрацию и подбор паролей SIP-аккаунтов. Включим для него тюрьму.
ini
[asterisk] enabled = true filter = asterisk action = iptables-allports[name=asterisk, protocol=all] logpath = /var/log/asterisk/messages bantime = 86400 # сутки findtime = 600 maxretry = 3
Управление Fail2ban: просмотр, разблокировка, перезагрузка
После внесения изменений в jail.local необходимо перезапустить службу или перечитать конфигурацию.
Основные команды
Просмотр списка активных тюрем:
fail2ban-client status
Просмотр статуса конкретной тюрьмы (например, sshd):
fail2ban-client status sshd
В выводе вы увидите количество заблокированных IP и их список.
Разблокировка IP-адреса вручную:
fail2ban-client set sshd unbanip 192.168.1.100
Замените sshd на имя тюрьмы, а IP — на нужный.
Перезагрузка конфигурации (без полного останова службы):
fail2ban-client reload
Полный перезапуск службы:
systemctl restart fail2ban
Просмотр логов Fail2ban:
tail -f /var/log/fail2ban.log
Пример работы Fail2ban
Рассмотрим типичный сценарий: атака на SSH.
Злоумышленник пытается подключиться к серверу по SSH и трижды ошибается при вводе пароля.
Каждая неудачная попытка фиксируется в логе /var/log/auth.log (или /var/log/secure).
Fail2ban, мониторя этот лог, видит три ошибки от одного IP за последние 10 минут (параметр findtime).
Срабатывает тюрьма sshd, и Fail2ban выполняет действие iptables-multiport, добавляя правило в цепочку f2b-sshd, которое блокирует весь трафик с этого IP на порт SSH.
На время бана (например, 6 часов) любые попытки подключения с этого адреса будут отклоняться на уровне ядра.
По истечении времени бан снимается автоматически.
Если злоумышленник повторяет попытки после разблокировки, можно настроить эскалацию бана (увеличение времени блокировки при повторных нарушениях).
Пример проверки заблокированных IP
Заключение
Fail2ban – простой, но мощный инструмент для защиты сервера от автоматизированных атак. Его гибкость позволяет адаптировать защиту под любые службы, а минимальные требования к ресурсам делают его незаменимым даже на самых скромных серверах.
Основные рекомендации:
- Всегда добавляйте свои IP-адреса в ignoreip.
- Настраивайте время бана разумно: слишком короткое – неэффективно, слишком длинное – может заблокировать легитимного пользователя при временном сбое.
- Регулярно просматривайте логи fail2ban, чтобы убедиться в корректной работе и отсутствии ложных срабатываний.
- Используйте готовые фильтры из каталога filter.d – они покрывают большинство типовых атак.