Гид по технологиям

Установка и настройка Fail2ban на Rocky Linux с firewalld

7 min read Безопасность Обновлено 26 Nov 2025
Fail2ban на Rocky Linux — настройка с firewalld
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 и совместимым веткам).

Общий вид сервера и логов для Fail2ban

Подготовка firewalld

firewalld — стандартный менеджер зон и правил в Rocky Linux. Он может быть установлен, но не всегда включён по умолчанию.

  1. Убедитесь, что пакет доступен:
sudo dnf info firewalld

Вывод информации о пакете firewalld

Если в выводе пакет помечен как Installed, он уже есть в системе.

  1. Запустите сервис firewalld:
sudo systemctl start firewalld
  1. Включите автозапуск при загрузке:
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.
  1. Проверьте статус сервиса:
sudo systemctl status firewalld

Статус сервиса firewalld активен и запущен

Вывод показывает, что firewalld активен и работает.

  1. Быстрая проверка через команду firewall-cmd:
sudo firewall-cmd --state

Если сервис активен, команда вернёт “running”. Чтобы увидеть применяемые правила:

sudo firewall-cmd --list-all

Вывод firewall-cmd --list-all с текущими зонами и правилами

Совет: держите открытыми только нужные сервисы в зонах (ssh/https) и проверяйте правила после интеграции с Fail2ban.

Добавление репозитория EPEL

Fail2ban доступен в EPEL (Extra Packages for Enterprise Linux). Установите репозиторий перед установкой.

  1. Установите пакет epel-release:
sudo dnf install epel-release

Подтвердите установку, введя y.

Процесс добавления репозитория EPEL на Rocky Linux

  1. Проверьте список репозиториев:
sudo dnf repolist

Убедитесь, что EPEL присутствует и включён.

Установка Fail2ban

  1. Установите fail2ban и адаптер для firewalld:
sudo dnf install fail2ban fail2ban-firewalld

Подтвердите установку.

Установка fail2ban и fail2ban-firewalld

Пакет fail2ban-firewalld добавляет готовые действия для создания rich-rule в firewalld.

  1. Запустите и включите сервис fail2ban:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
  1. Проверьте статус:
sudo systemctl status fail2ban

Статус сервиса fail2ban активен и запущен

Если сервис active (running), всё в порядке.

Базовая конфигурация Fail2ban

Важно: никогда не правьте файлы, поставляемые в пакетах. Скопируйте их в локальные файлы для переопределения.

  1. Создайте локальную конфигурацию на основе системной:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. Откройте для правки:
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.

  1. Создайте файл:
sudo nano /etc/fail2ban/jail.d/sshd.local

Вставьте:

[sshd]
enabled = true

# Переопределяем глобальные настройки для sshd
bantime = 1d
maxretry = 3

Сохраните и перезапустите сервис:

sudo systemctl restart fail2ban
  1. Проверка статуса 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 должен попасть в список заблокированных адресов.

Подключение по SSH прерывается после превышения maxretry 3 попыток

Просмотр статуса конкретной тюрьмы:

sudo fail2ban-client status sshd

Статус jail sshd с одним заблокированным IP

Проверка правил, сгенерированных 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 sshd

IP исчезнет из секции 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 и проверить статус.
  • Тестировать с безопасной машины, не являющейся рабочей, чтобы не заблокировать себя.

Инцидентный план и откат

Если после настроек вы случайно заблокировали себя или сервисы:

  1. Подключитесь через консоль провайдера (или KVM).
  2. Откройте /etc/fail2ban/jail.local и добавьте ваш IP в ignoreip.
  3. Выполните:
sudo fail2ban-client unban <ваш_IP>
sudo systemctl restart fail2ban
  1. Если проблема в правилах 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 и firewall-cmd –list-rich-rules.

Резюме

  • Установите EPEL, затем fail2ban и fail2ban-firewalld.
  • Скопируйте конфигурацию в локальные файлы и включите sshd jail.
  • Тестируйте и настройте bantime/maxretry/findtime под нагрузку и бизнес-потребности.

Ключевые рекомендации: настройте мониторинг, не блокируйте служебные IP и регулярно проверяйте логи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Приложения‑аутентификаторы: настройка и использование
Безопасность

Приложения‑аутентификаторы: настройка и использование

Private Lock — защита смартфона от кражи
Безопасность

Private Lock — защита смартфона от кражи

Исправить WHEA UNCORRECTABLE ERROR в Windows 11
Windows

Исправить WHEA UNCORRECTABLE ERROR в Windows 11

Лучшие бесплатные инструменты для ландшафтного дизайна
Ландшафтный дизайн

Лучшие бесплатные инструменты для ландшафтного дизайна

Удалить вирус без антивируса через командную строку
Безопасность

Удалить вирус без антивируса через командную строку

Репозиторные шаблоны GitHub: быстро запускать проекты
Developer

Репозиторные шаблоны GitHub: быстро запускать проекты