Что такое Fail2ban и как защитить сервер от брутфорс-атак
Брутфорс-атаки — одна из самых распространённых угроз для серверов, доступных из интернета. Злоумышленники запускают автоматизированные скрипты, которые в течение часов и даже дней подбирают пароли к SSH, почтовым сервисам, панелям администрирования. Даже если пароль достаточно сложный и взлом в итоге не удался, десятки тысяч попыток авторизации способны сильно нагружать систему и засорять логи.
Надёжным и при этом лёгким способом защиты от таких атак уже много лет остаётся утилита Fail2ban.
Что такое Fail2ban
Fail2ban — это демон на Python, который анализирует логи сервисов (SSH, Apache, Postfix и др.) и при обнаружении подозрительной активности временно блокирует IP-адрес нарушителя с помощью фаервола (обычно iptables или nftables).
Принцип работы прост:
- Fail2ban следит за указанными лог-файлами.
- Когда количество неудачных попыток входа за заданный промежуток превышает порог, срабатывает правило.
- 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.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний