Fail2ban – это инструмент для защиты серверов Linux от bruteforce атак путем мониторинга лог-файлов и автоматического блокирования IP-адресов, которые демонстрируют подозрительную активность. Администратор системы настраивает jailконфигурации, определяя, какие службы защищать и какие пороги срабатывания применять.
Система состоит из следующих элементов:
В большинстве дистрибутивов Linux пакет fail2ban доступен в официальных репозиториях. Администратор выполняет следующие шаги:
sudo apt update (Debian/Ubuntu) или sudo dnf check-update (Fedora/RHEL)sudo apt install fail2ban или sudo dnf install fail2bansudo systemctl status fail2banФайл /etc/fail2ban/jail.local используется для переопределения значений, заданных в jail.conf. Администратор создаёт или редактирует его, следуя рекомендациям:
[DEFAULT] секцию для глобальных параметров (bantime, findtime, maxretry);enabled = true;sudo systemctl restart fail2banДля удобства ссылка на дополнительные материалы размещена здесь: Администрирование Linux fail2ban.
После настройки администратор регулярно проверяет работу fail2ban:
sudo fail2ban-client statussudo fail2ban-client status sshd для конкретного jailsudo tail -f /var/log/fail2ban.logfail2ban-regex:sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.confДля обеспечения актуальной защиты администратор следует этим практикам:
fail2ban-client -d для вывода дебагинформации;jail.local и пользовательские фильтры перед проведением значительных изменений.Для защиты Nginx администратор создаёт отдельный jail, который мониторит логфайл доступа и блокирует IP, совершающие множество неудачных попыток входа на защищённый путь. Ниже приведён подробный порядок действий, включающий пять абзацев и практический чеклист.
Первым шагом необходимо определить, какой логфайл Nginx содержит информацию о запросах к скрипту логина. Обычно это /var/log/nginx/access.log. В этом файле ищутся строки с кодом состояния 401 или 403, либо специфические URLпути, например, /login.php или /wp-login.php. Администратор формирует регулярное выражение, которое будет соответствовать таким записям.
Далее создаётся пользовательский фильтр в директории /etc/fail2ban/filter.d/. Файл может называться, например, nginx-login.conf и содержать следующее содержимое:
[Definition] failregex = ^-.*\"(?:POST|GET) .*login.*\" 401 ignoreregex = Это выражение ловит любые POST/GET запросы к пути, содержащему слово login, завершившиеся кодом 401. При необходимости можно добавить варианты для 403 или собственных скриптов.
Следующий этап – добавление jailконфигурации в файл
/etc/fail2ban/jail.local. Администратор вставляет блок:[nginx-login] enabled = true filter = nginx-login action = iptables[name=NGINX-LOGIN, port=http, protocol=tcp] logpath = /var/log/nginx/access.log maxretry = 5 bantime = 3600 findtime = 600Здесь указано, что после пяти неудачных попыток в течение десяти минут IP будет заблокирован на один час через iptables.
Наконец, администратор перезапускает fail2ban и проверяет работу нового jail:
sudo systemctl restart fail2bansudo fail2ban-client status nginx-login– должно показывать активный jail и текущие счётчики;- Выполнить тестовые попытки входа с неверными учётными данными и убедиться, что после пятой попытки IP появляется в списке заблокированных (
sudo iptables -L NGINX-LOGIN -v -n).Практический чеклист по реализации защиты Nginx через fail2ban
- Определить путь к логфайлу Nginx и шаблон строки, указывающий наfailed login attempt.
- Создать файл фильтра
/etc/fail2ban/filter.d/nginx-login.confс подходящимfailregex.- Проверить фильтр командой
sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-login.conf– должен совпадать с ожидаемыми строками.- Добавить блок jail в
/etc/fail2ban/jail.local(см. пример выше), установив нужные значенияmaxretry,bantimeиfindtime.- Перезапустить демон:
sudo systemctl restart fail2ban.- Убедиться, что jail активен:
sudo fail2ban-client status nginx-login.- Выполнить тестовые неудачные запросы к скрипту логина и проверить, что IP попадает в блокировку через iptables (
sudo iptables -L NGINX-LOGIN -v -n).- При ложных срабатываниях отрегулировать
failregexили параметрыmaxretry/findtimeи повторить шаги 46.- Записать изменения в систему контроля версий или сделать резервную копию файлов
jail.localи пользовательских фильтров.