Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Security Security
27.05.2026

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
Реклама · ERID: CQH36pWzJqVJ4YD9t5y227AkMQdhpG2THarwRmX2g9tS8x

Базовая настройка 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 будет не просто установлен, а действительно полезен.

Не получается самостоятельно?

Помогу разобраться с настройкой, исправить ошибки и реализовать решение под ваш проект.
27 просмотров
Где заказы?

Почему один сайт стабильно приносит заявки, а другой годами просто «висит в интернете»?

В телеграм-канале «Где заказы?» я разбираю реальные ошибки бизнеса, SEO, сайты, рекламу, воронки продаж и показываю, почему компании теряют клиентов и как это исправить.

Без инфоцыганства и мотивационных цитат — только практика, кейсы и рабочие решения для бизнеса и веб-разработки.

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться