Эффективное использование Fail2Ban: руководство по оптимизации безопасности на реальных примерах

1. Введение

При управлении сервером на Linux вы столкнетесь с огромным количеством попыток входа в систему, даже если просто открыли порт SSH. Для предотвращения этого многие используют инструмент под названием Fail2Ban. Однако просто установка и настройка не достаточно. Со временем список заблокированных адресов может расти до сотен или тысяч, что может негативно повлиять на производительность сервера.

В этой статье я поделюсь своим опытом работы с сервером и расскажу, как использовать Fail2Ban более эффективно.

Тем, кто хочет узнать, как установить и настроить Fail2Ban, рекомендую обратиться к предыдущей статье! Защитник Linux-сервера, Fail2Ban


2. Практический опыт: 1,113 IP были заблокированы за 3 недели

После настройки fail2ban на тестовом Linux-сервере прошло примерно 3 недели, и однажды я выполнил следующую команду:

sudo fail2ban-client status sshd

Результаты были следующими:

Текущие неудачные: 1
Всего неудачных: 5330
Текущие заблокированные: 1110
Всего заблокированных: 1113

За 3 недели было заблокировано 1,113 IP, из которых 1,110 все еще оставались заблокированными. Это произошло из-за настройки bantime = -1 для постоянной блокировки.

Сначала я думал: "Не прощу ни одного, кто хоть раз пытался!", но когда тысячи заблокированных IP накопились в iptables, я начал беспокоиться о расходах системных ресурсов и эффективности управления.

В конце концов, я начал размышлять о устойчивом и стратегическом подходе к эксплуатации Fail2Ban.


Tux защищает recidive jail

3. Стратегии улучшения настройки Fail2Ban

✅ Динамическая настройка bantime

  • Вместо постоянной блокировки, блокировка на основе времени более практична.
  • Пример:
  • bantime = 86400        # блокировка на 1 день
    findtime = 600         # в течение 10 минут
    maxretry = 3           # при 3 неудачных попытках

Схема блокировки Fail2Ban

✅ Использование recidive jail

🔎 Что такое recidive jail?

Это продвинутая функция, которая отслеживает файл fail2ban.log, управляемый fail2ban, и если определенный IP несколько раз блокируется в разных тюрьмах, то он долгосрочно снова блокируется. Проще говоря, это система надзора за рецидивистами, дающая более суровые наказания.

Обычно индивидуальные тюрьмы, такие как sshd, nginx, ftp, блокируют только на короткий срок, но recidive jail делает выборку только тех IP, у которых есть "накопленная история преступлений", и блокирует их на более долгий срок.

  • Долгосрочная блокировка применяется только к постоянно блокируемым IP
  • Обычные атакующие исчезнут в течение дня, но рецидивисты могут быть отфильтрованы
  • Пример настройки:
  • [recidive]
    enabled = true
    logpath = /var/log/fail2ban.log
    bantime = 604800        # 1 неделя
    findtime = 86400
    maxretry = 5

✅ Автоматизация управления логами

  • Автоматическая очистка /var/log/fail2ban.log с помощью настройки logrotate, прежде чем файл станет слишком большим
  • Сводка результата fail2ban-client status и отправка по электронной почте с помощью cron или systemd timer

4. Пример вспомогательного скрипта

#!/bin/bash
fail2ban-client status sshd > /tmp/sshd-status.log
echo "Текущая сумма блокировок: $(grep 'Currently banned' /tmp/sshd-status.log)" | mail -s "Статус Fail2Ban SSHD" your@email.com

5. Заключение: Fail2Ban — это инструмент, а не оружие

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

Создавая реалистичную политику блокировки и автоматизированные инструменты управления, Fail2Ban становится надежным партнером по безопасности.


Анонс следующей статьи

В следующей статье мы рассмотрим настройки logrotate для предотвращения увеличения файла журнала /var/log/fail2ban.log. Заинтересованные подписывайтесь!