Хостинг SpaceWeb
Серверы Дизайн Сайты Безопасность Домены PHP Кейсы клиентов

Настройка Fail2Ban для защиты SSH и веб-сервисов

Настройка 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 — правила для отдельных служб.

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

Изменять параметры напрямую в файле 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

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

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

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

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

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

Защита 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

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

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

Заключение

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

Перейти на оригинал