Главная Технологии Услуги и цены Кейсы Блог Контакты
К списку статей DevOps и Инфраструктура

Построение эшелонированной защиты сервера: Настройка Cloudflare WAF и Fail2ban

Опубликовано: 23.09.2026 в 12:08

Как остановить ботнеты и сканеры уязвимостей до того, как они нагрузят процессор

Каждый открытый в сеть Linux-сервер ежедневно подвергается тысячам автоматических атак. Боты ищут открытые порты, сканируют уязвимости в скриптах, перебирают пароли к SSH и пытаются завалить бэкенд паразитными HTTP-запросами (DDoS-атаки). Защищаться от этого только силами веб-сервера неэффективно: обработка каждого запроса тратит RAM и ресурсы процессора. Нам необходима эшелонированная защита: фильтрация трафика на внешнем периметре и моментальная блокировка нарушителей внутри операционной системы.

Два рубежа обороны: Cloudflare на границе сети и Fail2ban на сервере

Первый эшелон — это Cloudflare. Он скрывает реальный IP-адрес вашего сервера (активное проксирование), берет на себя удар при L7-атаках и фильтрует трафик через правила WAF. Второй эшелон — локальный демон Fail2ban. Если бот или злоумышленник пытается обойти защиту, сканирует несуществующие страницы или подбирает пароли, Fail2ban анализирует логи Nginx/SSH и жестко блокирует IP-адрес атакующего на уровне брандмауэра iptables.

Иллюстрация

Шаг 1: Конфигурация локального фильтра Fail2ban для защиты Nginx

Создаем кастомную конфигурацию для защиты от агрессивного сканирования сайта. Файл /etc/fail2ban/jail.d/nginx-noscript.conf указывает парсить логи и банить IP на 24 часа при повторении подозрительных запросов.

f2b
[nginx-noscript]
enabled  = true
port     = http,https
filter   = nginx-noscript
logpath  = /var/log/nginx/access.log
maxretry = 3
findtime = 60
bantime  = 86400
action   = ufw[name=NoScript, port="http,https", protocol=tcp]

Шаг 2: Написание регулярного выражения для отлова хакерских сканеров

Чтобы Fail2ban понял, какие строки в логах access.log являются вредоносными, мы описываем правила фильтрации во вспомогательном файле /etc/fail2ban/filter.d/nginx-noscript.conf

php

[Definition]
failregex = ^<HOST> - - \[.*\] "GET .*(wp-login|setup\.php|admin|phpmyadmin|xmlrpc) HTTP/.*" 404 .*
ignoreregex =

Итоги и резюме

Результат настройки безопасности

Связка Cloudflare WAF и Fail2ban снижает паразитную нагрузку на бэкенд на 90–95%. Cloudflare отсекает массовый автоматизированный спам и распределенные атаки, а Fail2ban изолирует единичных целевых сканеров. Сервер работает стабильно, базы данных не перегружаются ложными соединениями, а в логах остаются только чистые запросы реальных клиентов.

Была ли полезна статья?

Оценки помогают мне понимать, какие темы вам наиболее интересны.

Чтобы оценить, войдите или зарегистрируйтесь.