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

Установка и настройка 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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство