Настройка fail2ban для защиты Битрикс от брутфорса: конфигурация с нуля

Встроенный стоп-лист Битрикс блокирует IP на уровне PHP — то есть сервер всё равно принимает запрос, запускает интерпретатор и тратит ресурсы. fail2ban блокирует IP на уровне iptables, до того как запрос попадает в приложение. Разберём, как настроить его для Битрикс на CentOS/Alma Linux (BitrixVM).

Установка fail2ban

yum install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban

Как это работает

fail2ban читает лог-файлы, ищет в них паттерны (например, неудачные попытки авторизации), и при превышении порога — добавляет IP в iptables. Через заданное время блокировка снимается.

Настройка для Битрикс

1. Создаём jail для Битрикс

# /etc/fail2ban/jail.d/bitrix.conf

[bitrix-admin]
enabled  = true
port     = http,https
filter   = bitrix-admin
logpath  = /home/bitrix/www/bitrix/modules/main/admin/auth.log
maxretry = 5
findtime = 300
bantime  = 3600
action   = iptables-multiport[name=bitrix, port="http,https", protocol=tcp]

2. Создаём фильтр

# /etc/fail2ban/filter.d/bitrix-admin.conf

[Definition]
failregex = ^.* - .* \[.*\] "POST /bitrix/admin/index.php.* 200
            ^.* - .* \[.*\] "POST /login/.* 200
ignoreregex =

3. Для Apache/Nginx логов

# /etc/fail2ban/jail.d/nginx-http-auth.conf

[nginx-http-auth]
enabled  = true
filter   = nginx-http-auth
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 5
bantime  = 3600

Блокировка по количеству 404-ошибок

Сканеры уязвимостей генерируют множество 404-ответов. Блокируем их:

# /etc/fail2ban/jail.d/nginx-404.conf

[nginx-404]
enabled  = true
filter   = nginx-404
port     = http,https
logpath  = /var/log/nginx/access.log
maxretry = 30
findtime = 60
bantime  = 86400
# /etc/fail2ban/filter.d/nginx-404.conf

[Definition]
failregex = ^ .* "(GET|POST|HEAD) .*" 404
ignoreregex = \.css|\.js|\.png|\.jpg|\.ico|\.woff

Полезные команды

# Статус всех jail
fail2ban-client status

# Статус конкретного jail
fail2ban-client status bitrix-admin

# Заблокированные IP
fail2ban-client status bitrix-admin | grep "Banned IP"

# Разблокировать IP вручную
fail2ban-client set bitrix-admin unbanip 192.168.1.100

# Проверить фильтр
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-404.conf

# Перезагрузить конфигурацию
fail2ban-client reload

Белый список IP

Добавьте свои IP в /etc/fail2ban/jail.local, чтобы не заблокировать себя:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 ВАШ.IP.АДРЕС

Итог

fail2ban + стоп-лист Битрикс дают двухуровневую защиту: Битрикс блокирует на уровне приложения и ведёт историю, fail2ban блокирует на уровне сети и снижает нагрузку на сервер. Установка занимает 15–20 минут и не требует изменений в самом Битриксе.