Fail2Ban-мания: как превратить плохие IP‑и в несуществующие

Введение

В мире кибербезопасности каждый сервер – это целая арена битвы с ботами, скриптами‑сканерами и взломщиками. Самый простой способ дать им «сделать вид, что они не существуют» — это настроить Fail2Ban. Это инструмент, который автоматически блокирует IP‑адреса после серии неудачных попыток входа в систему. В этой статье мы разберём, как превратить «плохие» IP‑и в простые «неexistent» с помощью Fail2Ban: от базовой установки до продвинутой конфигурации и мониторинга.


Основная часть

1️⃣ Установка и первичная настройка

Fail2Ban поставляется в большинстве репозиториев Linux. На Debian/Ubuntu:

sudo apt update
sudo apt install fail2ban

На CentOS/RHEL:

sudo yum install epel-release
sudo yum install fail2ban

После установки проверьте статус сервиса:

sudo systemctl status fail2ban

Если всё в порядке, включите автозапуск:

sudo systemctl enable fail2ban

2️⃣ Понимание «Jail» и «Filter»

Fail2Ban состоит из двух ключевых компонентов: - Filter – регулярные выражения, которые ищут подозрительные строки в логах. - Jail – правила, связывающие фильтры с сервисами и определяющие пороги блокировки.

Файлы находятся в /etc/fail2ban/. Основной конфиг fail2ban.conf, но большинство настроек меняется в файле jail.local.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Пример простого фильтра (ssh)

Файл /etc/fail2ban/filter.d/sshd.conf уже существует, но вы можете добавить собственные правила. Например:

[Definition]
failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port \d+ ssh2$
ignoreregex =

3️⃣ Настройка стандартного «ssh» jail

В jail.local добавьте или отредактируйте раздел:

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600      # 1 час
findtime = 600     # 10 минут

Что означает каждый параметр?

Параметр Значение Описание
maxretry 5 Количество неудачных попыток, после которых IP блокируется.
bantime 3600 Время блокировки в секундах.
findtime 600 Период времени, в течение которого учитываются попытки.

4️⃣ Добавление кастомных Jail для Nginx

Если вы хотите защитить веб‑сервер, создайте новый файл /etc/fail2ban/jail.d/nginx.local:

[nginx-http-auth]
enabled  = true
port     = http,https
filter   = nginx-http-auth
logpath  = /var/log/nginx/access.log
maxretry = 3
bantime  = 7200      # 2 часа

Файл фильтра /etc/fail2ban/filter.d/nginx-http-auth.conf:

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP/1.[01]" (401|403)
ignoreregex =

5️⃣ Тестирование и мониторинг

После изменений перезапустите сервис:

sudo systemctl restart fail2ban

Проверка статуса конкретного jail:

sudo fail2ban-client status sshd

Вывод покажет количество заблокированных IP‑ов и их список.

Мониторинг в реальном времени

Для непрерывного наблюдения можно использовать fail2ban-client с опцией log:

sudo fail2ban-client log

6️⃣ Расширенные возможности: интеграция с iptables / nftables

Fail2Ban автоматически добавляет правила в iptables. Если вы используете nftables, включите поддержку:

[DEFAULT]
banaction = nftables-multiport

Создайте файл nftables-multiport в /etc/fail2ban/action.d/, если его нет.

7️⃣ Удаление IP‑ов вручную

Если вы случайно заблокировали доверенный IP, разблокируйте его:

sudo fail2ban-client set sshd unbanip <IP-адрес>

Заключение

Fail2Ban — это простое и мощное решение для защиты серверов от массовых атак. Правильно настроенные «jail» и фильтры позволяют автоматически превращать агрессивные IP‑адреса в несуществующие: они просто остаются заблокированными, пока злоумышленник не сдастся.

С учётом гибкости конфигурации, интеграции с различными системами фильтрации (iptables, nftables) и возможности расширения через собственные правила, Fail2Ban становится незаменимым инструментом в арсенале любого администратора.

Готовы к защите? Настройте Fail2Ban сегодня, а завтра будете благодарны за спокойный сон!

Метки: