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

Установка и настройка Fail2Ban с firewalld на CentOS 7

• 4 min read • Linux • Обновлено 27 Nov 2025
Fail2Ban + firewalld: CentOS 7 — установка и настройка
Fail2Ban + firewalld: CentOS 7 — установка и настройка

Иллюстрация: терминал с логами и Fail2Ban

Введение

Большинство Linux‑серверов открывают SSH на порту 22 для удалённого администрирования. Этот порт хорошо известен и часто подвергается перебору паролей (brute force). Fail2Ban — это фоновая утилита, которая в реальном времени сканирует журналы и блокирует IP‑адреса, демонстрирующие признаки атак, с помощью firewalld или iptables.

Коротко: Fail2Ban распознаёт нежелательные попытки доступа в заданном периоде и автоматически банит атакующих, что уменьшает шум в логах и снижает вероятность компрометации.

Важно: Fail2Ban — это средство защиты по поведению (behavioral). Оно не заменяет надёжные пароли, двухфакторную аутентификацию и ограничение доступа по сети.

Что нужно знать заранее

  • Требования: CentOS 7, root‑доступ или sudo.
  • Влияние на пользователей: неверная конфигурация может заблокировать администратора. Всегда добавляйте свой IP в ignoreip.
  • Термин «jail» — правило защиты, объединяющее фильтр логов и действие (бан).

Установка Fail2Ban

Сначала установим репозиторий EPEL (Extra Packages for Enterprise Linux). Затем установим пакеты Fail2Ban.

Выполните команды от root:

yum install epel-release
yum install fail2ban fail2ban-systemd

Если у вас включён SELinux, обновите политики:

yum update -y selinux-policy*

Примечание: пакеты устанавливают systemd unit для управления сервисом.

Настройка Fail2Ban — базовое понимание

Файл /etc/fail2ban/jail.conf — системный. Не редактируйте его напрямую. Создайте /etc/fail2ban/jail.local и поместите туда ваши изменения: файл jail.local переопределяет значения из jail.conf и сохраняется при обновлениях.

Создайте копию и откройте её в редакторе:

cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

nano /etc/fail2ban/jail.local

Типичный фрагмент конфигурации в jail.local и пояснения:

[DEFAULT]

# ignoreip — IP, CIDR или DNS-хосты, которые НЕ будут баниться
ignoreip = 127.0.0.1/8

# ignorecommand — произвольная команда, которая вернёт true для игнорируемого IP
ignorecommand =

# bantime — время бана в секундах (600 = 10 минут)
bantime = 600

# findtime — окно времени в секундах для подсчёта попыток (600 = 10 минут)
findtime = 600

# maxretry — число неудачных попыток до бана
maxretry = 5

Краткие определения:

  • ignoreip — список IP, которые исключены из блокировок (разделитель — пробел). Добавьте сюда свой фиксированный IP.
  • bantime — длительность бана в секундах; указывайте в секундах или используйте понятные величины в комментарии (например, 86400 = 1 день).
  • findtime — окно наблюдения в секундах; если за этот период IP превысил maxretry, он будет заблокирован.
  • maxretry — число неудачных попыток входа, после которого следует бан.

Совет по локализации времени: при указании больших значений полезно оставлять комментарий с переводом в минуты/часы/дни.

Добавление правила (jail) для защиты SSH

Создайте файл конфигурации для sshd:

nano /etc/fail2ban/jail.d/sshd.local

Добавьте в него:

[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400

Пояснения:

  • enabled = true — включить правило. Поставьте false, чтобы отключить.
  • port = ssh — можно указать номер порта, например port = 1212, если SSH работает на нестандартном порту.
  • action — действие; по умолчанию Fail2Ban использует action.d/* для коммутации с firewalld/iptables. Комментарий показывает альтернативу.
  • logpath — путь к журналу SSH; шаблон %(sshd_log)s берётся из /etc/fail2ban/jail.conf или системных путей.
  • bantime = 86400 — бан на 86400 секунд (1 день).

Фильтр sshd находится в /etc/fail2ban/filter.d/sshd.conf и определяет, какие строки логов считать неудачными попытками.

Запуск и автозапуск firewalld и Fail2Ban

Если firewalld ещё не включён, запустите и добавьте в автозагрузку:

systemctl enable firewalld
systemctl start firewalld

Затем включите Fail2Ban:

systemctl enable fail2ban
systemctl start fail2ban

Проверка состояния служб:

systemctl status firewalld
systemctl status fail2ban

Отслеживание неудачных попыток входа

Чтобы просмотреть строки с неудачными попытками через SSH:

cat /var/log/secure | grep 'Failed password'

Пример вывода (формат):

Apr 4 17:05:12 htf sshd[4287]: Failed password for root from 108.61.157.25 port 23121 ssh2
Apr 4 17:05:15 htf sshd[3154]: Failed password for root from 108.61.157.25 port 14486 ssh2
Apr 4 17:05:16 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
Apr 4 17:05:18 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2

Совет: используйте journalctl для systemd-логов, если ваш SSH логируется через systemd: journalctl -u sshd.

Просмотр заблокированных IP

Если используется iptables, можно увидеть правила так:

iptables -L -n

Если Fail2Ban использует firewalld, смотрите зоны и ipset:

firewall-cmd --list-all
firewall-cmd --permanent --zone=trusted --list-sources

Проверка статуса Fail2Ban и списка jails

fail2ban-client status

Ожидаемый вывод:

[root@htf ]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

Чтобы получить статус конкретного jails, выполните:

fail2ban-client status sshd

Разбан IP

Чтобы убрать IP из бана, замените IPADDRESS на адрес:

fail2ban-client set sshd unbanip IPADDRESS

Альтернатива при использовании iptables: удалять правило вручную, но предпочтительнее пользоваться fail2ban-client.

Чек‑лист для внедрения (роли)

  • Сисадмин:

    • Добавить свой публичный IP в ignoreip.
    • Настроить bantime/findtime/maxretry под требования бизнеса.
    • Тестировать на отдельном тестовом сервере перед продом.
  • DevOps:

    • Интегрировать правила в автоматизацию (Ansible/Chef/Puppet).
    • Мониторить логи и оповещения при массовых блокировках.
  • Инженер безопасности:

    • Согласовать политику блокировок и процедуру разблокировки.
    • Проверить совместимость с IDS/IPS и SIEM.

Лучшие практики и полезные советы

  • Всегда добавляйте свои административные IP в ignoreip.
  • Используйте нестандартный порт SSH + ключи вместо паролей + 2FA — это снижает нагрузку на Fail2Ban.
  • Настройте оповещения при превышении порога заблокированных IP (интеграция с SIEM/ELK/Prometheus).
  • Не ставьте слишком маленький findtime при большом числе легитимных попыток доступа: это может привести к ложным срабатываниям.

Отладка и распространённые проблемы

  1. Ничего не банится:

    • Проверьте, правильно ли Fail2Ban читает логи: убедитесь, что logpath указывает на актуальный файл.
    • Посмотрите /var/log/fail2ban.log на предмет ошибок фильтра.
  2. Вы случайно заблокировали себя:

    • Если у вас есть доступ к консоли сервера (KVM/VM), выполните unban через fail2ban-client.
    • Если доступ утерян, временно остановите fail2ban: systemctl stop fail2ban, затем исправьте конфигурацию.
  3. Конфликт с firewalld:

    • Убедитесь, что action в /etc/fail2ban/action.d/ выбран корректно для firewalld.
    • При использовании ipset убедитесь, что ipset установлен и доступен.

Когда Fail2Ban может не помочь (ограничения)

  • Массовые распределённые атаки (DDoS) с большого числа IP: Fail2Ban на хосте не справится с сетевыми атаками уровня провайдера.
  • Атаки на приложенческом уровне, использующие легитимные учётные данные: Fail2Ban блокирует только по шаблону логов.
  • Сложные шаблоны логов могут требовать кастомных фильтров в /etc/fail2ban/filter.d/.

В таких случаях используйте дополнительные средства: WAF, rate‑limiting на уровне балансировщика, сетевые решения DDoS‑провайдера.

Альтернативы и дополнения

  • Конфигурация SSH: запрет входа по паролю (PasswordAuthentication no), разрешить только по ключам.
  • Port knocking или TCP Wrappers для дополнительной защиты.
  • Централизованные правила блокировки: использовать ipset + синхронизацию списков между серверами.
  • Коммерческие/облачные решения: WAF, облачные брандмауэры, DDoS mitigation.

Мини‑методология внедрения (быстрый план)

  1. Подготовка: добавить admin IP в ignoreip и сделать бекап jail.local.
  2. Установка: epel-release + fail2ban + fail2ban-systemd.
  3. Настройка: отредактировать /etc/fail2ban/jail.local и создать /etc/fail2ban/jail.d/sshd.local.
  4. Тестирование: принудительно сгенерировать неудачные попытки (на тестовой системе) и проверить бан.
  5. Мониторинг: настроить оповещения и периодический аудит.

Быстрый справочник (cheat sheet)

  • Установить: yum install epel-release; yum install fail2ban fail2ban-systemd
  • Запустить firewalld: systemctl enable –now firewalld
  • Запустить Fail2Ban: systemctl enable –now fail2ban
  • Проверить статус: fail2ban-client status
  • Статус jail: fail2ban-client status sshd
  • Снять бан: fail2ban-client set sshd unbanip 1.2.3.4
  • Просмотреть логи: tail -f /var/log/fail2ban.log

Пример диаграммы принятия решения

graph TD
  A[Обнаружена неудачная попытка входа] --> B{Кол-во попыток за findtime > maxretry?}
  B -- Да --> C[Заблокировать IP 'bantime']
  B -- Нет --> D[Продолжать мониторинг]
  C --> E{Используется firewalld?}
  E -- Да --> F[Добавить в ipset / zone]
  E -- Нет --> G[Добавить правило iptables]
  F --> H[Оповестить администратора]
  G --> H

Критерии приёмки

  • Fail2Ban успешно запускается и активен после перезагрузки.
  • SSH‑jail отображается в списке: fail2ban-client status.
  • При моделировании превышения maxretry IP попадает в блокируеющие правила.
  • Администратор способен снять бан без просмотра low‑level iptables при помощи fail2ban-client.

Итог

Fail2Ban — простой и эффективный инструмент для снижения шума от перебора паролей и уменьшения числа автоматизированных атак на SSH. Он легко интегрируется с firewalld и iptables, но не заменяет надёжных практик безопасности: ключи SSH, 2FA, ограничение доступа по сети и мониторинг.

Важно: тестируйте на стенде, корректно указывайте ignoreip и документируйте политику банов для команды.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро