Роботы пауки атакуют серверную стойку со светящимся логотипом NGINX

Защита VDS от спам-ботов: боевая настройка Nginx, Fail2ban и Cloudflare

Спам-боты и сканеры уязвимостей — главная причина беспричинного роста нагрузки на VDS. На сайтах под управлением WordPress они чаще всего атакуют три точки: форму авторизации (wp-login.php), файл удаленного управления (xmlrpc.php) и формы комментариев.

Если не фильтровать этот трафик, сервер начнет тратить ресурсы процессора и базы данных на обработку мусорных запросов, что приведет к падению сайта. В этой инструкции мы настроим трехуровневую защиту сервера.

1. Фильтрация на уровне веб-сервера Nginx

Зачем загружать интерпретатор PHP и базу данных MySQL обработкой запросов от ботов? Отсечем их на самом раннем этапе с помощью модулей Nginx.

Ограничение частоты запросов (Rate Limiting)

Откройте конфигурационный файл Nginx (обычно /etc/nginx/nginx.conf) и в секцию http добавьте зону для ограничения запросов:

nginx

limit_req_zone $binary_remote_addr zone=wp_auth:10m rate=3r/s;

Эта строка выделяет 10 мегабайт памяти под хранение IP-адресов и разрешает им делать не более 3 запросов в секунду.

Теперь применим это правило для защиты критических файлов WordPress. Откройте конфиг вашего сайта в Nginx (в блоке server) и добавьте:

nginx

# Защита формы входа и xmlrpc
location ~* /(wp-login\.php|xmlrpc\.php) {
    limit_req zone=wp_auth burst=5 nodelay;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Укажите вашу версию PHP
}

Блокировка плохих User-Agent

Многие простые боты используют стандартные или устаревшие заголовки. Добавьте в блок server для моментального сброса соединения:

nginx

if ($http_user_agent ~* (AhrefsBot|DotBot|SemrushBot|MJ12bot|backdoor|netcrawler|zoomeye)) {
    return 444;
}

Код ответа 444 — это уникальная фишка Nginx. Он мгновенно закрывает соединение, не возвращая боту вообще ничего, экономя ваш исходящий трафик.

2. Автоматический бан через Fail2ban

Nginx умеет ограничивать запросы, но он не блокирует нарушителей на уровне системы. Для этого мы свяжем логи Nginx с утилитой Fail2ban, которая будет отправлять IP-адреса агрессивных ботов в бан через системный файрвол (iptables/nftables).

Настройка фильтра

Создайте файл фильтра для WordPress:

bash

sudo nano /etc/fail2ban/filter.d/nginx-wp-attack.conf

Вставьте в него регулярное выражение для поиска частых запросов к wp-login.php и xmlrpc.php:

ini

[Definition]
failregex = ^<HOST> -.*"POST.*/(wp-login\.php|xmlrpc\.php).*HTTP/.*" (200|401|403|499|503)
ignoreregex =

Активация тюрьмы (Jail)

Откройте локальный конфигурационный файл Fail2ban:

bash

sudo nano /etc/fail2ban/jail.local

Добавьте в конец правила для активации блокировки:

ini

[nginx-wp-attack]
enabled = true
port    = http,https
filter  = nginx-wp-attack
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 60
bantime  = 3600

Логика простая: если один и тот же IP-адрес за 60 секунд (findtime) совершил 5 подозрительных запросов (maxretry) к файлам авторизации, он отправляется в полный бан на 1 час (bantime).

Перезапустите службу, чтобы настройки вступили в силу:

bash

sudo systemctl restart fail2ban

3. Делегирование защиты на уровень Cloudflare (WAF)

Самый эффективный способ защиты VDS — сделать так, чтобы спам-боты вообще не долетали до вашего IP-адреса. С этим отлично справляется бесплатный тариф Cloudflare.

  1. Подключите ваш домен webindex.su к Cloudflare, изменив NS-серверы у регистратора.
  2. В панели Cloudflare перейдите в раздел Security -> WAF (Web Application Firewall).
  3. Создайте правило (Firewall Rule) для защиты админки:
    • Field: URI Path
    • Operator: contains
    • Value: /wp-login.php
  4. В качестве действия (Action) выберите Managed Challenge (интерактивная проверка/капча).

Теперь каждый раз, когда бот попытается постучаться в форму входа, Cloudflare перехватит его, выдаст невидимую проверку, и до вашего VDS дойдут только реальные пользователи.

Заключение

Комбинация из Cloudflare (принимает на себя основной удар), Nginx Rate Limiting (сглаживает всплески) и Fail2ban (изолирует упорных нарушителей) снижает нагрузку на VDS практически до нуля. Сервер перестанет тратить ресурсы на обслуживание ботов, а ваш сайт на WordPress начнет работать быстрее и стабильнее.

Стандартные плагины капчи защищают только формы (комментарии, авторизацию), но не снижают нагрузку на сервер. Спам-боты все равно отправляют тысячи запросов, которые перегружают базу данных и процессор VDS. Настройка защиты на уровне Nginx и Fail2ban отсекает мусорный трафик еще до того, как он дойдет до WordPress.

Нет, если конфигурация выполнена правильно. Поисковые пауки (Googlebot, YandexBot) обходят сайты с умеренной скоростью и не создают аномальной плотности запросов. Ограничения limit_req в Nginx настраиваются таким образом, чтобы обычные пользователи и легитимные роботы беспрепятственно получали доступ к страницам.

Не обязательно, но крайне рекомендуется. Cloudflare выступает в роли первого щита (WAF), который фильтрует явный спам, плохие прокси и мелкие DDoS-атаки на своих серверах. Комбинация Cloudflare на внешнем контуре и Fail2ban внутри VDS создает надежную двухслойную защиту блога.

Чтобы избежать случайной блокировки, обязательно добавьте свой статический IP-адрес (или локальную подсеть) в исключения Fail2ban. Для этого в файле jail.local в строке ignoreip через пробел укажите свои адреса. Если бан уже случился, разблокировать себя можно командой fail2ban-client unban <ваш_IP>.

Прокрутить вверх