Бортовой журнал
Бортовой журнал

Настройка Fail2Ban — важный шаг для повышения безопасности SSH‑подключений и веб‑сервисов. Правильная конфигурация инструмента позволяет эффективно противодействовать попыткам несанкционированного доступа: автоматически блокировать IP‑адреса при превышении заданного числа неудачных попыток аутентификации или подозрительной активности.

Что такое Fail2Ban, и как работает

Fail2Ban — это инструмент для защиты серверов от перебора паролей и автоматизированных атак. Чаще всего его используют для защиты SSH, FTP, почтовых сервисов и веб-приложений, но он может работать с любыми службами, которые ведут журналы событий. Программа анализирует логи и автоматически блокирует IP-адреса, с которых фиксируется подозрительная активность.

Fail2Ban:

  1. Отслеживает файлы журналов (например, /var/log/auth.log или /var/log/secure).
  2. Ищет в логах строки, соответствующие заданным шаблонам (например, «Failed password»).
  3. Считает количество срабатываний с одного IP за определённый промежуток времени.
  4. При превышении порога добавляет правило блокировки в файрвол.
  5. По истечении заданного времени автоматически снимает блокировку.

Fail2Ban не фильтрует трафик сам — он работает через системный файервол. Когда нужно заблокировать IP, программа просто добавляет соответствующее правило в файервол. Это экономит ресурсы сервера и не требует постоянного внимания администратора.

Fail2Ban особенно эффективен против брутфорс‑атак на SSH, массовых попыток подбора пароля к FTP, перебора авторизации в почтовых сервисах, а также атак на веб‑приложения с формами входа.

Но важно учитывать, что Fail2Ban реагирует уже на зафиксированные события в логах — он не предотвращает саму попытку подключения, а ограничивает повторные действия злоумышленника. В сочетании с аутентификацией по ключам, ограничением доступа по IP и корректной настройкой прав доступа этот инструмент значительно повышает уровень безопасности сервера без сложной инфраструктуры.

Установка Fail2Ban

Fail2Ban распространяется через стандартные репозитории большинства популярных дистрибутивов Linux.

Debian / Ubuntu

В системах на базе Debian установка выполняется стандартной командой:

sudo apt update
sudo apt install fail2ban

Служба добавляется в автозагрузку автоматически. Проверить её статус можно так:

sudo systemctl status fail2ban

CentOS / AlmaLinux / Rocky Linux

В дистрибутивах семейства RHEL используется менеджер пакетов dnf (или yum в более старых версиях):

sudo dnf install epel-release
sudo dnf install fail2ban

Далее службу нужно запустить и добавить в автозапуск:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Проверить состояние можно, прописав:

sudo systemctl status fail2ban

Arch Linux

В Arch Linux пакет устанавливается через pacman:

sudo pacman -S fail2ban

Далее активируйте сервис:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Чтобы убедиться, что программа установлена корректно, можно проверить версию:

fail2ban-client -V

Если команда выводит номер версии, установка прошла успешно, и служба готова к дальнейшей настройке.

Конфигурационный файл Fail2Ban

Основные настройки Fail2Ban хранятся в конфигурационном файле /etc/fail2ban/jail.conf. В нём описаны параметры работы сервиса, фильтры и так называемые jail — правила для отдельных служб.

Конфигурация разделена на секции:

  • В блоке [DEFAULT] задаются глобальные параметры: время блокировки (bantime), период наблюдения (findtime), количество допустимых попыток (maxretry), используемое действие (action) и другие общие настройки. Эти значения применяются ко всем службам, если для них не указано иное.
  • В отдельных секциях, например [sshd], [apache-auth], [nginx-http-auth], [vsftpd], прописываются параметры для конкретных сервисов. Здесь можно включить или отключить защиту, указать порт, лог-файл и переопределить значения по умолчанию.

Изменять параметры напрямую в файле jail.conf не рекомендуется. Этот файл может быть перезаписан при обновлении пакета, из-за чего внесённые изменения будут потеряны.

Корректный способ — создать собственный файл jail.local в той же директории. В jail.local достаточно указать только те параметры, которые требуется изменить. Все остальные значения Fail2Ban автоматически возьмёт из jail.conf.

Базовая настройка Fail2Ban

Создайте собственный файл jail.local:

sudo touch /etc/fail2ban/jail.local

В секции [DEFAULT] задаются ключевые параметры, которые будут применяться ко всем jail, если для них не указаны индивидуальные значения.

Минимальный базовый шаблон:

[DEFAULT]
bantime = 15m
findtime = 10m
maxretry = 5
banaction = iptables-multiport
backend = auto
usedns = warn

Разберём основные параметры подробнее:

  • bantime — время блокировки IP-адреса. Можно указывать в секундах или в формате m (минуты), h (часы), d (дни). Примеры: 600, 10m, 1h, 1d. Обычно достаточно 10–30 минут.
  • findtime — временной интервал, в течение которого учитываются неудачные попытки. Если за этот период превышен лимит maxretry, IP будет заблокирован.
  • maxretry — допустимое количество нарушений за период findtime. Оптимальное значение для большинства серверов — 3–5 попыток.
  • banaction — механизм блокировки. Возможные варианты зависят от используемого файрвола: iptables-multiport, nftables-multiport и firewallcmd-ipset. Если система современная (например, Debian 12 или AlmaLinux 9), чаще используется nftables.
  • backend — способ взаимодействия с системой журналирования. Значение auto позволяет Fail2Ban автоматически определить подходящий режим.
  • usedns — определяет, будет ли выполняться DNS-резолвинг IP-адресов. Для большинства серверов рекомендуется warn или no, чтобы избежать лишней нагрузки.

Важно сразу указать доверенные IP-адреса, которые не должны блокироваться.

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.10

Сюда добавляют:

  • локальные адреса;
  • IP администратора;
  • адреса мониторинга или резервных систем.

Без этого есть риск заблокировать самого себя при ошибке авторизации.

Защита SSH

Доступ по SSH — одна из самых частых целей для перебора паролей, поэтому включение соответствующего jail в Fail2Ban считается обязательным шагом для любого сервера с публичным доступом.

Настройка выполняется в файле /etc/fail2ban/jail.local. Для активации достаточно добавить секцию:

[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 30m
findtime = 10m

Параметр enabled = true активирует правило. port можно оставить значением ssh, если используется стандартный порт 22, либо указать номер вручную, если он был изменён. Значения maxretry, bantime и findtime можно переопределить именно для SSH — даже если в [DEFAULT] заданы другие параметры.

Практически это означает следующее: если за 10 минут с одного IP произойдёт более трёх неудачных попыток входа, адрес будет заблокирован на 30 минут. При повторных попытках после разблокировки срок может увеличиваться, если включена эскалация в глобальных настройках.

После внесения изменений службу необходимо перезапустить:

sudo systemctl restart fail2ban

Проверить, активен ли jail для SSH, можно командой:

sudo fail2ban-client status sshd

В ответ отобразится информация о текущем состоянии, количестве заблокированных адресов и списке активных банов.

Даже при использовании аутентификации по ключам такая настройка остаётся актуальной: она снижает нагрузку на сервер, автоматически блокируя источники массовых попыток подключения, и избавляет администратора от необходимости вручную отслеживать атаки перебора.

Защита веб-сервисов

Веб-серверы и приложения с формами авторизации регулярно подвергаются автоматическим атакам: перебору паролей, попыткам подбора административных панелей, сканированию уязвимых URL. Fail2Ban позволяет ограничить такую активность, блокируя IP-адреса, с которых фиксируются повторяющиеся подозрительные запросы.

Активация выполняется через соответствующие jail в файле /etc/fail2ban/jail.local. В зависимости от используемого сервера добавляется нужная секция.

Для Apache:

[apache-auth]
enabled = true
port = http,https

Для Nginx:

[nginx-http-auth]
enabled = true
port = http,https

Параметр enabled = true включает защиту. Значение port указывает, что блокировка применяется к HTTP и HTTPS. Остальные параметры — время блокировки, количество попыток и период анализа — берутся из секции [DEFAULT], если не переопределены отдельно.

При необходимости можно сделать политику строже именно для веб-служб, указав собственные значения maxretry, findtime или bantime внутри соответствующей секции. Это позволяет, например, быстрее блокировать агрессивные сканеры, не затрагивая другие сервисы.

После изменения конфигурации службу нужно перезапустить:

sudo systemctl restart fail2ban

Проверка состояния выполняется командой:

sudo fail2ban-client status

Fail2Ban не заменяет полноценный веб-файрвол (WAF), но эффективно снижает нагрузку от массовых автоматизированных запросов и ограничивает повторяющиеся попытки несанкционированного доступа к веб-приложениям.

Мониторинг и улучшения

Базовая настройка Fail2Ban — лишь первый шаг. Чтобы система работала корректно, нужно постоянно контролировать её функционирование и адаптировать параметры. Так вы обеспечите надёжную защиту от атак без риска заблокировать добросовестных пользователей.

Чтобы проверить общее состояние системы, выполните:

sudo fail2ban-client status

В результате вы увидите список активных jail — настроенных правил блокировки для разных сервисов.

Для детального анализа конкретного правила (например, чтобы узнать число текущих блокировок и перечень забаненных IP‑адресов) используйте команду с указанием имени jail:

sudo fail2ban-client status <имя_jail>

Здесь можно увидеть количество текущих блокировок и список забаненных IP-адресов. Если потребуется вручную разблокировать определённый IP‑адрес, примените команду:

sudo fail2ban-client set <имя_jail> unbanip 1.2.3.4

Для повышения эффективности защиты со временем обычно:

  • корректируют значения bantime, findtime и maxretry в зависимости от характера атак;
  • включают увеличение времени блокировки при повторных нарушениях;
  • добавляют доверенные IP в список исключений — ignoreip, — чтобы исключить ложные блокировки;
  • активируют дополнительные jail для новых служб по мере расширения инфраструктуры.

Если сервер подвергается постоянным автоматизированным атакам, разумно увеличить срок блокировки или включить постепенную эскалацию времени бана. Это снижает нагрузку на систему и ограничивает повторные подключения с одного источника.

Заключение

Настроив Fail2Ban для SSH и веб‑сервисов, вы существенно снижаете риски несанкционированного доступа. Система автоматически отслеживает подозрительную активность и блокирует злоумышленников, экономя ваше время и повышая уровень защиты сервера. Регулярная проверка логов и корректировка правил помогут поддерживать безопасность на должном уровне.