Nginx Ultimate Bad Bot Blocker: боты, referrer spam и лимиты

nginx-ultimate-bad-bot-blocker – набор include-файлов и скриптов для Nginx: чёрные списки User-Agent, referrer spam, подозрительные IP и простые rate-limit сценарии. Не замена CDN/WAF, но на самом сервере срезает мусорный трафик до приложения.

От чего защищает

Плохие боты

Автоматизированные клиенты, которые не нужны сайту:

  • спам-боты (регистрации, комментарии, формы);
  • сканеры уязвимостей и «широкие» краулеры по wp-login, .env, phpmyadmin;
  • перебор паролей и credential stuffing по admin-путям;
  • поддельные Googlebot и прочие «уважаемые» UA без реальной проверки.

Referrer spam

Поддельный заголовок Referer, чтобы засветиться в аналитике или дёрнуть сервер. Статистика «плывёт», в access.log шум, иногда лишняя нагрузка на динамику.

DDoS: реалистичные ожидания

Лимиты запросов и отсечение известных ботов помогают против «мелкого» flood и сканеров. Полноценный объёмный DDoS (L3/L4 или огромный L7) решается на сети, у хостера или через CDN/WAF. Блокировщик – слой на origin, не серебряная пуля.

Почему именно на Nginx

Nginx хорошо держит много соединений и отдаёт статику. Блокировку по UA/IP/referer и limit_req удобно вешать на edge-конфиг: плохой клиент не доходит до PHP/Node и БД. Плюс конфиги декларативные – проще версионировать и обновлять списки скриптом.

Что умеет Ultimate Bad Bot Blocker

Проект mitchellkrogza/nginx-ultimate-bad-bot-blocker поставляет актуальные списки bad bots / bad referers, include-фрагменты для conf.d и conf.d/bots.d, скрипты установки и обновления. В описании проекта фигурируют тысячи записей по referer и сотни User-Agent (в т.ч. fake crawlers) – точные цифры меняются с обновлениями, смотрите README репозитория.

Установка (базовый сценарий)

Перед правками – бэкап конфигов Nginx. Пути зависят от дистрибутива (/etc/nginx vs layout WordOps/EasyEngine). Ниже типичный bootstrap из официального install-скрипта:

sudo wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker \
  -O /usr/local/sbin/install-ngxblocker
sudo chmod +x /usr/local/sbin/install-ngxblocker
sudo /usr/local/sbin/install-ngxblocker -x

Скрипт кладёт include-файлы и подсказки, куда вписать директивы. Дальше обычно:

  1. подключить глобальные include в nginx.conf / http {} (как указано в README после установки);
  2. в server-блоке сайта включить bot blocker includes;
  3. nginx -t и reload;
  4. настроить update-ngxblocker по cron, чтобы списки не протухали.

Актуальные флаги и пути – только из README репозитория: дистрибутивы и кастомные layout (WordOps, Plesk, ручной multi-site) отличаются.

Как это устроено технически

В ход идут стандартные возможности Nginx: map/if по $http_user_agent и referer, ngx_http_access_module, limit_req / limit_conn, иногда закрытие соединения кодом 444 (Nginx «закрыть без ответа»). Упрощённый ручной пример идеи (сам blocker даёт готовые include, их не обязательно писать с нуля):

if ($http_user_agent ~* (BadBot|EvilScraper)) {
    return 403;
}

В боевом наборе правила сложнее: whitelist хороших ботов, отдельные списки, rate limit. Не копируйте куски вслепую поверх уже установленных include – получите дубли и сюрпризы.

Проверка

После reload можно дёрнуть сайт с заведомо «плохим» User-Agent:

curl -I -A "BadBot" https://yourdomain.com

Ожидаемый ответ зависит от политики в ваших include: часто 403 или 444 (соединение рвётся, curl покажет ошибку). Смотрите access/error log и то, что реально прописано в conf.d/bots.d. Параллельно проверьте нормальный браузерный UA и известных краулеров из whitelist – Googlebot резать нельзя.

Эффект на практике

Типичный результат после адекватной настройки: меньше сканов в логах, ниже фоновая нагрузка на PHP-FPM, чище отчёты аналитики без referrer spam. Это не маркетинг-кейс «сайт ускорился в 10 раз», а снижение шума. Если приложение само дырявое, одних UA-фильтров мало – нужен патчинг, WAF, fail2ban/CSF, нормальные лимиты.

Альтернативы и дополнения

  • Cloudflare / аналог CDN+WAF – фильтр на edge, bot fight, rate limit до origin. Блокировщик на Nginx хорошо дополняет, если origin всё равно торчит или CDN нет.
  • fail2ban, crowdsec, ModSecurity – другие слои: бан по логам, сигнатуры WAF.
  • WordOps – стек с Nginx; в экосистеме есть поддержка/установка bot blocker. Команды стека: документация WordOps stack, сайт проекта wordops.net.

Короткий FAQ

Что такое Nginx? Веб-сервер и reverse proxy. Часто стоит перед PHP-FPM, Node, статикой.

Кто такие «плохие» боты? Автоматика, которая вредит или шумит: спам, сканы, брутфорс, fake crawlers. Не путать с легитимными поисковиками и мониторингом.

Как блокировать на Nginx? Списки UA/IP/referer + limit_req, либо готовый пакет вроде Ultimate Bad Bot Blocker, плюс обновление списков и тест whitelist.

Итог

Ultimate Bad Bot Blocker – практичный слой защиты origin на Nginx: режет известный мусор, referrer spam и часть агрессивных сканеров. Ставьте с бэкапом конфигов, подключайте include по README, обновляйте списки, проверяйте легитимных ботов. Для серьёзного DDoS и application-атак комбинируйте с CDN/WAF и hardening приложения.

Источники и ссылки


Комментарии загружаются…