Установка и настройка Fail2ban на Rocky Linux с firewalld
Что такое Fail2ban и зачем он нужен
Fail2ban — это демон для защиты серверов от брутфорс-атак и повторных попыток неудачной аутентификации. Это OSS-фреймворк на Python, который читает системные логи (SystemD journal и лог-файлы) и при превышении порога неудачных попыток автоматически блокирует IP с помощью брандмауэра.
Короткое определение: Fail2ban наблюдает логи, считает неудачные логины и добавляет правила в брандмауэр для временной блокировки атакующих IP.
Важно: Fail2ban не заменяет комплексную систему безопасности. Он закрывает массовые автоматизированные попытки доступа, но не решает проблемы уязвимого ПО или плохих паролей.
Основные преимущества
- Автоматическое временное блокирование источников атак.
- Простая интеграция с firewalld, iptables или nftables.
- Гибкая настройка по сервисам (ssh, ftp, web-приложения и др.).
- Локальные конфигурации, которые не перезаписываются при обновлении.
Предварительные требования
- Учетная запись с правами sudo.
- Rocky Linux (инструкции применимы к Rocky Linux 8.x и совместимым веткам).

Подготовка firewalld
firewalld — стандартный менеджер зон и правил в Rocky Linux. Он может быть установлен, но не всегда включён по умолчанию.
- Убедитесь, что пакет доступен:
sudo dnf info firewalld
Если в выводе пакет помечен как Installed, он уже есть в системе.
- Запустите сервис firewalld:
sudo systemctl start firewalld- Включите автозапуск при загрузке:
sudo systemctl enable firewalldПример вывода при включении автозапуска:
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.- Проверьте статус сервиса:
sudo systemctl status firewalld
Вывод показывает, что firewalld активен и работает.
- Быстрая проверка через команду firewall-cmd:
sudo firewall-cmd --stateЕсли сервис активен, команда вернёт “running”. Чтобы увидеть применяемые правила:
sudo firewall-cmd --list-all
Совет: держите открытыми только нужные сервисы в зонах (ssh/https) и проверяйте правила после интеграции с Fail2ban.
Добавление репозитория EPEL
Fail2ban доступен в EPEL (Extra Packages for Enterprise Linux). Установите репозиторий перед установкой.
- Установите пакет epel-release:
sudo dnf install epel-releaseПодтвердите установку, введя y.

- Проверьте список репозиториев:
sudo dnf repolistУбедитесь, что EPEL присутствует и включён.
Установка Fail2ban
- Установите fail2ban и адаптер для firewalld:
sudo dnf install fail2ban fail2ban-firewalldПодтвердите установку.

Пакет fail2ban-firewalld добавляет готовые действия для создания rich-rule в firewalld.
- Запустите и включите сервис fail2ban:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban- Проверьте статус:
sudo systemctl status fail2ban
Если сервис active (running), всё в порядке.
Базовая конфигурация Fail2ban
Важно: никогда не правьте файлы, поставляемые в пакетах. Скопируйте их в локальные файлы для переопределения.
- Создайте локальную конфигурацию на основе системной:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local- Откройте для правки:
sudo nano /etc/fail2ban/jail.localВ секции [DEFAULT] обратите внимание на эти параметры:
[DEFAULT]
....
bantime = 1h
findtime = 1h
maxretry = 5Объяснение опций:
- bantime — время блокировки IP. Поддерживает форматы: s, m, h, d (секунды, минуты, часы, дни). Пример: 1h = 1 час, 1d = 1 день.
- findtime — окно наблюдения, в течение которого считаются неудачные попытки.
- maxretry — число неудачных попыток для срабатывания блокировки.
Совет по настройке: для публичных SSH-серверов разумно ставить maxretry = 3 и bantime ≥ 1h. Для внутренних сервисов можно ослабить ограничения.
Сохраните изменения: Ctrl+X, Y, Enter.
Переключение на firewalld для блокировок
По умолчанию Fail2ban использует iptables. Мы хотим использовать firewalld.
sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.localЭтот файл доставляется пакетом fail2ban-firewalld и содержит действия, использующие firewall-cmd rich-rules.
Перезапустите сервис, чтобы применить изменения:
sudo systemctl restart fail2banВажно: после каждой правки конфигурации перезапускайте fail2ban.
Защита SSH сервисов
По умолчанию ни одна «тюрьма» (jail) не включена. Нужно создать локальную конфигурацию для sshd.
- Создайте файл:
sudo nano /etc/fail2ban/jail.d/sshd.localВставьте:
[sshd]
enabled = true
# Переопределяем глобальные настройки для sshd
bantime = 1d
maxretry = 3Сохраните и перезапустите сервис:
sudo systemctl restart fail2ban- Проверка статуса fail2ban и активных jail:
sudo fail2ban-client statusВы увидите список активных jail, например sshd.
Проверка конкретной опции для jail sshd:
sudo fail2ban-client get sshd maxretryПроверка действия (action) для sshd:
sudo fail2ban-client get sshd actionsВывод должен содержать “firewallcmd-rich-rules” если используется firewalld.
Тестирование и подтверждение работы
Попробуйте подключиться к SSH с неверным паролем несколько раз. При достижении maxretry IP должен попасть в список заблокированных адресов.

Просмотр статуса конкретной тюрьмы:
sudo fail2ban-client status sshd
Проверка правил, сгенерированных Fail2ban в firewalld:
firewall-cmd --list-rich-rulesВы увидите rich-rule с источником (source) для заблокированного IP и действием drop или reject.
Разблокировка IP
Чтобы убрать IP из списка заблокированных:
sudo fail2ban-client unban 192.168.1.10Проверьте, что IP удалён:
sudo fail2ban-client status sshdIP исчезнет из секции Banned IP List.
Частые ошибки и устранение неисправностей
- Fail2ban не видит попытки в логах: проверьте, что регистрируются события входа (sshd в журнале systemd) и что paths/фильтры верны.
- Сообщение “action ‘firewallcmd-rich-rules’ not found”: убедитесь, что установлен пакет fail2ban-firewalld и файл 00-firewalld.local присутствует.
- Заблокирован легитимный IP: используйте fail2ban-client unban и добавьте IP в ignoreip в /etc/fail2ban/jail.local.
- Изменения не применяются: перезапустите сервис и просмотрите лог /var/log/fail2ban.log или вывод journalctl -u fail2ban.
Полезные команды диагностики
sudo journalctl -u fail2ban -e
sudo tail -n 200 /var/log/fail2ban.log
sudo fail2ban-client status
sudo fail2ban-client status sshd
firewall-cmd --list-rich-rulesБезопасность и жёсткая настройка
- Ограничьте доступ по SSH через AllowUsers/AllowGroups и ключи, отключив вход по паролю.
- Включите двухфакторную аутентификацию для удалённых панелей управления.
- Настройте alert-уведомления на основе логов Fail2ban (syslog/SMTP/webhook) при массовых блокировках.
- Регулярно просматривайте ignoreip и whitelist для сервисных IP.
Важно: Fail2ban блокирует IP на уровне сети. Если у вас динамические IP (например, NAT-провайдеры), будьте осторожны с длительным bantime.
Альтернативы и когда Fail2ban не подходит
Когда Fail2ban полезен:
- Автоматические брутфорс-атаки с малым количеством запросов.
- Защита SSH, FTP, панелей управления, простых HTTP-форм.
Когда Fail2ban не поможет:
- Распределённые DDoS-атаки с большим числом источников.
- Атаки на уязвимости приложений (внедрение SQL/XSS).
- Сложные целевые атаки при наличии у атакующего учётных данных.
Альтернативы или дополнения:
- Использовать сетевые фильтры на уровне провайдера или CDN (Cloudflare, Akamai).
- Внедрить WAF для защиты web-приложений.
- SSHGuard как облегчённая альтернатива для низких ресурсов.
Быстрый SOP для развертывания (чеклист)
- Убедиться в правах sudo.
- Установить epel-release.
- Установить fail2ban и fail2ban-firewalld.
- Создать /etc/fail2ban/jail.local из jail.conf.
- Переместить 00-firewalld.conf в 00-firewalld.local.
- Создать /etc/fail2ban/jail.d/sshd.local и включить sshd.
- Перезапустить fail2ban и проверить статус.
- Тестировать с безопасной машины, не являющейся рабочей, чтобы не заблокировать себя.
Инцидентный план и откат
Если после настроек вы случайно заблокировали себя или сервисы:
- Подключитесь через консоль провайдера (или KVM).
- Откройте /etc/fail2ban/jail.local и добавьте ваш IP в ignoreip.
- Выполните:
sudo fail2ban-client unban <ваш_IP>
sudo systemctl restart fail2ban- Если проблема в правилах firewalld, временно очистите правила:
sudo firewall-cmd --reloadПри откате к предыдущей конфигурации восстановите резервную копию файлов /etc/fail2ban/* и перезапустите сервис.
Модель принятия решений и дерево
Используйте простое правило:
- Если число попыток превышает maxretry в findtime — блокировать на bantime.
- Если IP в белом списке (ignoreip) — не блокировать.
Принятие решения (диаграмма):
flowchart TD
A[Входящий логин] --> B{Есть запись о неудачной попытке?}
B -- Нет --> Z[Игнорировать]
B -- Да --> C[Увеличить счётчик IP]
C --> D{Счётчик >= maxretry в findtime?}
D -- Нет --> Z
D -- Да --> E{IP в ignoreip?}
E -- Да --> Z
E -- Нет --> F[Добавить rich-rule в firewalld]
F --> G[IP заблокирован на bantime]Критерии приёмки
- Fail2ban запущен и активен: systemctl status показывает active (running).
- sshd jail включён и отображается в sudo fail2ban-client status.
- При эмуляции 3 неудачных логинов IP появляется в Banned IP List.
- rich-rule для соответствующего IP видна в firewall-cmd –list-rich-rules.
- Возможность разбанить IP через fail2ban-client unban.
Краткий глоссарий
- jail — конфигурация защиты для конкретного сервиса.
- bantime — время блокировки.
- findtime — окно подсчёта неудач.
- maxretry — число неудачных попыток.
Тест-кейсы для валидации установки
- Установка: dnf install без ошибок.
- Сервис: systemctl start|enable|status — fail2ban и firewalld активны.
- Логика: три неудачных попытки приводят к бану.
- Разблокировка: fail2ban-client unban убирает IP.
- Перезагрузка: после reboot служба стартует и правила восстанавливаются.
Локальные нюансы и советы для России и соседних регионов
- Если у хоста динамический IP, ставьте короткий bantime или используйте белые списки провайдерских IP.
- При использовании облачных провайдеров (VPS) проверьте, не блокирует ли провайдер порт 22, и используйте консоль провайдера для доступа.
Часто задаваемые вопросы
Q: Что будет, если Fail2ban отключится?
A: Все созданные ранее правила останутся в firewalld до перезагрузки или явного удаления. После перезапуска fail2ban они могут не управляться автоматически.
Q: Как добавить IP в белый список?
A: В /etc/fail2ban/jail.local добавьте строку ignoreip = 127.0.0.1/8 192.0.2.0/24 <ваш_IP> и перезапустите сервис.
Q: Можно ли использовать nftables вместо firewalld?
A: Да. Fail2ban поддерживает nftables/iptables через соответствующие action-скрипты. При использовании nftables нужен соответствующий action-файл.
Q: Как мониторить количество заблокированных IP?
A: Используйте fail2ban-client status
Резюме
- Установите EPEL, затем fail2ban и fail2ban-firewalld.
- Скопируйте конфигурацию в локальные файлы и включите sshd jail.
- Тестируйте и настройте bantime/maxretry/findtime под нагрузку и бизнес-потребности.
Ключевые рекомендации: настройте мониторинг, не блокируйте служебные IP и регулярно проверяйте логи.
Похожие материалы
Приложения‑аутентификаторы: настройка и использование
Private Lock — защита смартфона от кражи
Исправить WHEA UNCORRECTABLE ERROR в Windows 11
Лучшие бесплатные инструменты для ландшафтного дизайна
Удалить вирус без антивируса через командную строку