Что такое Fail2ban и как защитить сервер от брутфорс-атак

9 минут чтения
Средний рейтинг статьи — 4.9

Брутфорс-атаки — одна из самых распространённых угроз для серверов, доступных из интернета. Злоумышленники запускают автоматизированные скрипты, которые в течение часов и даже дней подбирают пароли к SSH, почтовым сервисам, панелям администрирования. Даже если пароль достаточно сложный и взлом в итоге не удался, десятки тысяч попыток авторизации способны сильно нагружать систему и засорять логи.
Надёжным и при этом лёгким способом защиты от таких атак уже много лет остаётся утилита Fail2ban.

Что такое Fail2ban

Fail2ban — это демон на Python, который анализирует логи сервисов (SSH, Apache, Postfix и др.) и при обнаружении подозрительной активности временно блокирует IP-адрес нарушителя с помощью фаервола (обычно iptables или nftables).
Принцип работы прост:

  1. Fail2ban следит за указанными лог-файлами.
  2. Когда количество неудачных попыток входа за заданный промежуток превышает порог, срабатывает правило.
  3. IP-адрес попадает в «чёрный список» на определённое время (или навсегда, если так настроено).

В результате злоумышленник теряет доступ к целевому сервису, а нагрузка на систему снижается.

Установка

В большинстве дистрибутивов Linux пакет уже есть в репозиториях.
Пример для Ubuntu/Debian:

sudo apt update
sudo apt install fail2ban

Для CentOS/RHEL:

sudo yum install epel-release
sudo yum install fail2ban

После установки сервис можно запустить и включить автозагрузку:

sudo systemctl enable --now fail2ban

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

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

Минимальный пример /etc/fail2ban/jail.local для защиты SSH:

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime  = 3600
findtime = 600

Разберём ключевые параметры:

  • enabled — включение фильтра.
  • port — порт сервиса (по умолчанию ssh).
  • filter — название фильтра (шаблон поиска в логах).
  • logpath — путь к лог-файлу, где ищутся неудачные попытки.
  • maxretry — сколько ошибок допускается до бана.
  • findtime — период (в секундах), в течение которого эти попытки учитываются.
  • bantime — время блокировки IP в секундах (3600 = 1 час).

После изменения конфигов перезапустите сервис:

sudo systemctl restart fail2ban

Работа с банами

Проверить текущий статус можно командой:

sudo fail2ban-client status sshd

Чтобы разблокировать конкретный IP:

sudo fail2ban-client set sshd unbanip 192.0.2.15

Расширенные возможности

Fail2ban поддерживает десятки готовых фильтров: для Apache, Nginx, Postfix, Dovecot и многих других сервисов.
Можно создавать собственные фильтры — достаточно задать регулярные выражения, по которым в логах ищутся подозрительные события.

Кроме iptables/nftables, утилита умеет использовать другие действия: например, отправлять уведомления на e-mail, вызывать скрипты или редактировать hosts.deny.

Рекомендации по настройке

  • Не ставьте слишком короткий bantime. Час — разумный минимум: иначе боты быстро вернутся.
  • Не делайте findtime слишком длинным. Сутки учёта могут привести к ложным срабатываниям.
  • Используйте whitelist. В /etc/fail2ban/jail.local можно задать ignoreip = 127.0.0.1 203.0.113.10, чтобы не забанить собственный офис или VPN.
  • Логи ротации. Убедитесь, что logrotate не мешает анализу — обычно Fail2ban корректно работает и с ротацией.

Альтернативы и дополнения

Fail2ban — удобное решение для точечной защиты. Но для более масштабных инфраструктур можно дополнить его:

  • firewalld/nftables — для централизованного управления правилами фаервола.
  • Cloudflare/Reverse Proxy — для фильтрации трафика на уровне CDN.
  • IDS/IPS системы (например, Suricata, Snort) — для более глубокой сетевой аналитики.
  • CrowdSec — для распределенных систем с более гибкими сценариями работы. На CrowdSec остановимся поподробнее.

Сравнение Fail2ban и CrowdSec

За последние годы появился новый игрок в той же нише, что и Fail2ban — CrowdSec. На первый взгляд это тоже инструмент для автоматической блокировки подозрительных IP-адресов, но подход у него несколько иной.

В отличие от классического Fail2ban, который блокирует атакующих локально, CrowdSec строит «коллективную оборону»: агенты на серверах делятся информацией о подозрительных IP в общую базу и получают актуальные списки «плохих» адресов. Это даёт проактивную защиту сразу для всех участников сети, но требует подключения к облачному сервису и чуть более сложной настройки. Fail2ban проще и полностью автономен, а CrowdSec — современное решение для крупных инфраструктур, где важна масштабируемость и обмен данными об угрозах.

Когда выбрать Fail2ban

  • Нужна быстрая точечная защита одного-двух серверов.
  • Не хочется или нельзя делиться информацией об атакующих с внешним сервисом.
  • Требуется максимально простая установка без дополнительных компонентов.

Когда выбрать CrowdSec

  • Есть парк серверов или кластер, где важно централизованно защищаться и обмениваться информацией о новых угрозах.
  • Хотите «коллективный иммунитет» — блокировать адреса атакующих ещё до того, как они дойдут до вашего сервера.
  • Интересна гибкая система сценариев для разных типов атак, а не только брутфорс.

Итоги

Fail2ban — лёгкий, но мощный инструмент, который за несколько минут помогает снизить риск успешного брутфорса и уменьшить «шум» в логах.

Регулярно обновляйте систему, используйте сложные пароли или SSH-ключи, но в качестве дополнительного барьера Fail2ban остаётся классическим и надёжным средством защиты Linux-серверов.

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

Выбор зависит от масштаба: для одиночных VPS Fail2ban более чем достаточен, а для распределённых систем с множеством узлов всё чаще выбирают CrowdSec.

9 минут чтения
Средний рейтинг статьи — 4.9

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний