Fail2ban для Debian и Ubuntu: готовые rules и защита сервера от ботов и перебора
Fail2ban — это один из базовых инструментов защиты Linux-сервера от перебора паролей, автоматических сканеров и слишком настойчивых ботов.
Особенно полезен Fail2ban на серверах Debian и Ubuntu, где открыты SSH, Nginx, панели управления, формы авторизации или сайты на PHP и 1С-Битрикс.
Принцип работы простой: Fail2ban читает логи, ищет подозрительные события по правилам и временно блокирует IP-адрес через firewall.
Что такое jail и filter в Fail2ban
В Fail2ban есть два важных понятия:
- filter — правило поиска подозрительных строк в логах;
- jail — настройка, которая указывает, какой фильтр использовать, какой лог читать и на сколько банить IP.
Фильтры обычно лежат в директории:
/etc/fail2ban/filter.d/
А локальные настройки jail лучше хранить здесь:
/etc/fail2ban/jail.d/
Файл jail.conf лучше не редактировать напрямую, потому что при обновлении пакета он может быть изменён. Правильнее создавать свои файлы с расширением .local.
Установка Fail2ban на Debian и Ubuntu
sudo apt update
sudo apt install fail2ban -y
После установки включаем сервис:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Проверить статус можно командой:
sudo systemctl status fail2ban В своих проектах я использую серверную инфраструктуру Timeweb
Хостинг, VPS и облачные решения для стабильной работы сайтов на PHP и 1С-Битрикс — от корпоративных сайтов до интернет-магазинов и высоконагруженных веб-проектов.
Перейти на TimewebБазовая настройка Fail2ban
Создадим отдельный файл с базовыми настройками:
sudo nano /etc/fail2ban/jail.d/default.local
Пример содержимого:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = iptables-multiport
Что здесь важно:
ignoreip— IP-адреса, которые нельзя банить;bantime— время блокировки;findtime— период, за который считаются ошибки;maxretry— количество ошибок до блокировки;backend— откуда читать события;banaction— каким способом блокировать IP.
Правило Fail2ban для SSH
SSH — первый сервис, который нужно защищать. Боты постоянно перебирают логины и пароли, особенно если SSH доступен на стандартном порту 22.
Создадим jail для SSH:
sudo nano /etc/fail2ban/jail.d/sshd.local
Добавим:
[sshd]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
Если SSH работает на нестандартном порту, например 2222, укажите его:
port = 2222
Правило для Nginx: защита от частых 404
Частые 404-запросы могут говорить о сканировании сайта. Например, бот ищет старые админки, резервные копии, phpMyAdmin, wp-login.php или другие типовые уязвимости.
Создадим jail:
sudo nano /etc/fail2ban/jail.d/nginx-404.local [nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 5m
bantime = 1h
Теперь создадим фильтр:
sudo nano /etc/fail2ban/filter.d/nginx-404.conf [Definition]
failregex = ^<HOST> - .* "(GET|POST|HEAD) .*" 404 .*$
ignoreregex =
Это правило банит IP, если за 5 минут он получил 20 ответов 404.
Правило для Nginx: защита от поиска php-файлов
Часто в логах можно увидеть запросы к файлам:
/wp-login.php/xmlrpc.php/phpmyadmin//.env/shell.php
Если на сервере нет WordPress или phpMyAdmin в публичном доступе, такие запросы можно считать подозрительными.
Создадим jail:
sudo nano /etc/fail2ban/jail.d/nginx-badbots.local [nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 3
findtime = 10m
bantime = 12h
Фильтр:
sudo nano /etc/fail2ban/filter.d/nginx-badbots.conf [Definition]
failregex = ^<HOST> - .* "(GET|POST|HEAD) .*(wp-login\.php|xmlrpc\.php|phpmyadmin|\.env|shell\.php|cmd\.php|adminer\.php).*" .*$
ignoreregex =
Правило для защиты админки Битрикс
Для сайтов на 1С-Битрикс можно отдельно отслеживать частые обращения к админке. Полностью закрывать /bitrix/admin/ через Fail2ban не всегда удобно, но можно банить IP, которые слишком часто получают ошибки авторизации или активно сканируют админку.
Пример jail:
sudo nano /etc/fail2ban/jail.d/bitrix-admin.local [bitrix-admin]
enabled = true
port = http,https
filter = bitrix-admin
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 5m
bantime = 2h
Фильтр:
sudo nano /etc/fail2ban/filter.d/bitrix-admin.conf [Definition]
failregex = ^<HOST> - .* "(GET|POST) /bitrix/admin/.*" (401|403|404|444) .*$
ignoreregex =
Такой фильтр нужно использовать аккуратно. Если в админке работают сотрудники с одного IP, лучше добавить этот IP в ignoreip.
Проверка правил Fail2ban
После добавления новых правил перезапустите Fail2ban:
sudo systemctl restart fail2ban
Проверить список активных jail:
sudo fail2ban-client status
Проверить конкретный jail:
sudo fail2ban-client status sshd
Для проверки своего фильтра удобно использовать команду:
sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-badbots.conf
Она покажет, какие строки из лога подходят под правило.
Как вручную забанить или разбанить IP
Забанить IP вручную:
sudo fail2ban-client set sshd banip 123.123.123.123
Разбанить IP:
sudo fail2ban-client set sshd unbanip 123.123.123.123
Посмотреть забаненные IP по jail:
sudo fail2ban-client status sshd
Что важно учитывать
Fail2ban не заменяет нормальную настройку безопасности сервера. Он только снижает количество автоматических атак и ограничивает перебор.
Дополнительно желательно:
- отключить вход по SSH для root;
- использовать SSH-ключи вместо паролей;
- закрыть лишние порты;
- регулярно обновлять систему;
- не держать phpMyAdmin и похожие инструменты в открытом доступе;
- проверять логи Nginx, auth.log и syslog.
Типичные ошибки при настройке Fail2ban
- Редактирование jail.conf напрямую.
Лучше создавать отдельные файлы в/etc/fail2ban/jail.d/. - Слишком жёсткие правила.
Можно случайно забанить себя или сотрудников. - Неправильный logpath.
Если Fail2ban читает не тот лог, правило просто не будет работать. - Фильтр не проверен через fail2ban-regex.
Регулярное выражение может не совпадать с реальным форматом логов. - Не добавлен свой IP в ignoreip.
При активной работе с сервером можно случайно заблокировать собственный доступ.
Вывод
Fail2ban — простой и полезный инструмент для защиты серверов Debian и Ubuntu. Его стоит ставить почти на каждый публичный VPS, особенно если на сервере открыты SSH, Nginx, сайты на PHP, панели управления или админки CMS.
Минимальный набор — включить защиту SSH. Более продвинутый вариант — добавить отдельные правила для Nginx, частых 404, подозрительных php-запросов и админки сайта.
Главное — не копировать правила вслепую, а проверять их на реальных логах своего сервера. Тогда Fail2ban будет не просто установлен, а действительно полезен.
Комментарии