Установка и базовая настройка Fail2Ban на Fedora/CentOS

Что такое Fail2Ban
Fail2Ban — утилита для анализа логов и временной или постоянной блокировки IP-адресов, совершивших слишком много неудачных попыток аутентификации. Она добавляет правила в iptables (или другой брандмауэр), чтобы блокировать злоумышленников, и может отправлять оповещения по почте.
Короткое определение: средство защиты по сигнатурам в логах — ищет шаблоны неудачных подключений и применяет блокировки.
Важно: Fail2Ban ориентирован на службы с логами (SSH, веб‑серверы и др.). Он не защищает от всех типов атак, например, от уязвимостей приложения.
Требования
- Сервер на базе Fedora 33 или CentOS 8.
- Непривилегированный пользователь с sudo.
- Редактор nano (в примерах используется он).
Установите nano, если нужно:
$ sudo dnf install nano -yУстановка Fail2Ban
На CentOS 8 сначала включите репозиторий EPEL:
$ sudo dnf install epel-releaseFedora 33 уже содержит пакет Fail2Ban.
Установите Fail2Ban на обе системы:
$ sudo dnf install fail2banВключите и запустите сервис:
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2banПроверьте статус сервиса:
$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
Docs: man:fail2ban(1)
Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 19032 (f2b/server)
Tasks: 3 (limit: 1125)
Memory: 11.0M
CPU: 96ms
CGroup: /system.slice/fail2ban.service
??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server readyОсновы конфигурации
Файлы конфигурации лежат в каталоге /etc/fail2ban. В нём находится jail.conf — файл поставщика, который обновляется при апгрейдах и не должен редактироваться напрямую.
Правильный подход: создать /etc/fail2ban/jail.local и туда вносить ваши изменения. Также можно добавлять файлы в /etc/fail2ban/jail.d/ для отдельных настроек.
Порядок применения конфигураций (от базового к верхнему):
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf (по алфавиту)
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local (по алфавиту)
jail.conf содержит секцию [DEFAULT] и секции для сервисов. Любую секцию можно переопределить через .local.
Пример: создание jail.local
Создадим базовый конфиг:
$ sudo nano /etc/fail2ban/jail.localВставьте:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd
[sshd]
enabled = trueСохраните (Ctrl+X, Y) и перезапустите Fail2Ban:
$ sudo systemctl restart fail2banПроверка статуса через fail2ban-client:
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdПодробный статус конкретной тюрьмы (jail):
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:Важно: после изменения конфигов всегда перезапускайте сервис и проверяйте логи.
Частые настройки
Белый список IP
Чтобы игнорировать доверенные адреса, добавьте в [DEFAULT]:
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89Или динамически для конкретной jail:
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89Замените JAIL на имя тюрьмы (например, sshd).
bantime, findtime, maxretry
- bantime — время бана в секундах. Отрицательное значение = вечный бан. По умолчанию 600.
- findtime — интервал (в секундах), за который считаются попытки для срабатывания правила.
- maxretry — число неудачных попыток до бана.
Пример в /etc/fail2ban/jail.local:
bantime = 3600
findtime = 300
maxretry = 4Оповещения по e‑mail
Требуется MTA. В примере используем sendmail:
$ sudo dnf install sendmailДобавьте в [DEFAULT]:
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)sПояснение: action может быть %(action_)s (только бан), %(action_mw)s (бан + mail с whois), %(action_mwl)s (бан + mail + лог‑фрагменты).
Если используете Postfix, укажите mta = mail.
Настройки для отдельных jails
SSHD
Пример расширенной секции для SSH:
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)sЕсли SSH слушает нестандартный порт, укажите порт числом. %(ssh_log)s берётся из /etc/fail2ban/paths-common.conf.
Nginx
Fail2Ban включает некоторые фильтры для Nginx. Пример для проверки авторизации:
[nginx-http-auth]
enabled = trueДля ботов, запрашивающих несуществующие пути, можно включить nginx‑badbots:
[nginx-badbots]
enabled = trueМногие Nginx‑jail придётся создать вручную, используя примеры из filter.d.
Фильтры и failregex
Фильтры лежат в /etc/fail2ban/filter.d и описывают регулярные выражения (failregex), по которым парсятся логи.
Посмотреть доступные фильтры:
$ ls /etc/fail2ban/filter.dФайлы, например nginx-badbots.conf и nginx-http-auth.conf, содержат регулярные выражения. Создавать и отлаживать регулярки — отдельная задача; здесь мы даём основу.
Мониторинг и отладка
- Проверить сервис systemd:
$ sudo systemctl status fail2ban- Просмотреть логи systemd для unit:
$ sudo journalctl -b -u fail2ban- Узнать список jails и их статус:
$ sudo fail2ban-client status
$ sudo fail2ban-client status - Смотреть лог Fail2Ban:
$ sudo tail -F /var/log/fail2ban.log- Посмотреть правила iptables:
$ sudo iptables -L
$ sudo iptables -SВажно: на современных системах может использоваться nftables вместо iptables. Убедитесь, что action в конфиге совместим с вашей системой.
Когда Fail2Ban не срабатывает
- Логи пишутся не в тот файл, который вы отслеживаете. Проверьте logpath.
- Регулярные выражения в фильтре не покрывают формат лога — отладьте failregex.
- Backend (journal/syslog) указан неверно; для systemd используйте backend = systemd.
- Фаервол управляется внешним менеджером (firewalld, nftables) — настройте соответствующий action или совместимый модуль.
Быстрый SOP — проверка и восстановление работы
- Проверить, активен ли fail2ban: sudo systemctl status fail2ban
- Просмотреть последние строки лога: sudo tail -n 200 /var/log/fail2ban.log
- Убедиться в правильности logpath и backend в /etc/fail2ban/jail.local
- Перезапустить сервис: sudo systemctl restart fail2ban
- Проверить список забаненных IP: sudo fail2ban-client status
- Если нужно снять бан: sudo fail2ban-client set
unbanip
Чеклист ролей
Администратор:
- Установить пакет и MTA
- Настроить jail.local
- Настроить whitelist
- Настроить мониторинг логов
Команда безопасности:
- Проверить и адаптировать failregex для критичных приложений
- Настроить оповещения и процедуру реагирования
Критерии приёмки
- Fail2Ban установлен и запущен
- sshd‑jail активен и появляется в списке jails
- После N неудачных попыток IP попадает в список забаненных
- Оповещения по e‑mail приходят при срабатывании (если настроено)
- Логи и правила firewall отражают блокировки
Итоги
Fail2Ban — эффективный инструмент для блокировки автоматизированных попыток входа через анализ логов. Правильная конфигурация jail.local, корректные filter.d и тестирование — ключ к надёжной защите. Используйте белые списки для доверенных адресов, настраивайте время бана по риск‑модели и подключайте оповещения при необходимости.
Важно: Fail2Ban — часть стратегии защиты. Комбинируйте с обновлениями ПО, настройкой SSH (ключи, нестандартный порт, отключение root) и мониторингом сетевой активности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента