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 сегодня, а завтра будете благодарны за спокойный сон!