Nginx Ultimate Bad Bot Blocker: защита от ботов и referrer spam

Nginx Ultimate Bad Bot Blocker: защита от ботов и referrer spam

Nginx Ultimate Bad Bot Blocker от Митчелла Крога это набор конфигов и скриптов для Nginx, который отсекает плохих ботов, спам в заголовке Referer, сканеры уязвимостей, поддельных Googlebot и подозрительные IP. Проект живой: на 8 октября 2026 года свежая версия V4.2026.10.6183, списки обновляются почти каждый день, у репозитория около 4,8 тысячи звёзд.

Это не замена CDN и WAF, а слой на самом сервере. Мусорный запрос отбивается ещё в Nginx и не доходит до PHP-FPM, Node и базы. Для сайта на VPS это меньше шума в логах и меньше лишней нагрузки.

Что блокирует: 7116 рефереров, 700 User-Agent, 218 поддельных Googlebot

  • Плохие боты: спамеры форм и комментариев, сканеры по wp-login, .env и phpMyAdmin, агрессивные SEO-краулеры и скраперы.
  • Referrer spam: запросы с поддельным Referer, которые засоряют аналитику и логи. По README в списках 7116 таких доменов.
  • Поддельные поисковики: клиенты, которые представляются Googlebot, но приходят не из сетей Google. Их в списке 218.
  • Плохие IP и диапазоны, плюс встроенные лимиты запросов для ботов, которых не хочется банить совсем.

Совпавший запрос получает код 444: Nginx просто закрывает соединение без ответа, и для бота сервер выглядит выключенным. Свои IP и домены добавляются в белые списки whitelist-ips.conf и whitelist-domains.conf, а Google, Bing и другие нормальные поисковики пропускаются по умолчанию.

Установка через install-ngxblocker и setup-ngxblocker

Перед правками сделайте бэкап /etc/nginx. Сначала скачиваем установщик:

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

Каждый скрипт по умолчанию работает вхолостую и только показывает, что сделает. Реальные изменения идут с ключом -x. Установщик кладёт конфиги в /etc/nginx/conf.d и /etc/nginx/bots.d и скачивает ещё два скрипта, setup-ngxblocker и update-ngxblocker:

cd /usr/local/sbin
sudo ./install-ngxblocker
sudo ./install-ngxblocker -x
sudo chmod +x /usr/local/sbin/setup-ngxblocker /usr/local/sbin/update-ngxblocker

Дальше setup-ngxblocker прописывает include в nginx.conf и в конфиги сайтов и добавляет ваш IP в белый список. Он ищет конфиги в /etc/nginx/sites-available с расширением .vhost. Если у вас файлы на .conf, расширение задаётся ключом -e:

sudo ./setup-ngxblocker -e conf
sudo ./setup-ngxblocker -x -e conf

В каждом server-блоке сайта в итоге появляются две строки:

include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;

Если Nginx собран с нестандартными путями, у всех трёх скриптов есть ключи -c и -b для каталогов conf.d и bots.d, а полный список опций выводит --help. Для ручной настройки есть отдельная инструкция. Проверяем конфиг и перезагружаем Nginx:

sudo nginx -t && sudo nginx -s reload

Как проверить, что блокировщик работает

Проверять нужно с другой машины, подставив свой домен. Нормальные поисковики должны получить 200:

curl -A "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" -I https://example.com

А плохой бот и спам-реферер должны получить обрыв соединения: curl покажет «Empty reply from server», «Connection reset by peer» или ошибку HTTP/2:

curl -A "Xenu Link Sleuth/1.3.8" -I https://example.com
curl -I https://example.com -e http://100dollars-seo.com

Если сайт за Cloudflare или другим CDN, на время теста CDN лучше отключить. Иначе CDN закэширует первый обрыв и на повторный запрос отдаст ошибку 520, и по такому ответу сложно понять, что происходит на самом сервере.

Обновление списков по cron

Списки устаревают быстро, поэтому обновление ставим в crontab root (sudo crontab -e). Ключ -e присылает отчёт на почту, -n отключает письма:

00 22 * * * /usr/local/sbin/update-ngxblocker -e admin@example.com

В репозитории есть ещё фильтр и jail для Fail2Ban: он смотрит в логах, кто набирает много ответов 444, и банит повторных нарушителей уже на файрволе. Для Apache есть отдельный проект, Apache Ultimate Bad Bot Blocker.

WordOps: включается одним ключом

Если сайты подняты на WordOps, блокировщик встроен в стек. По документации WordOps он включается при создании сайта ключом --ngxblocker, а на существующем сайте через wo site update с тем же ключом. Выключается --ngxblocker=off.

wo site create example.com --wp --ngxblocker
wo site update example.com --ngxblocker
wo site update example.com --ngxblocker=off

Чего от него не ждать

Лимиты и отсечение известных ботов помогают против мелкого флуда и сканеров. Объёмный DDoS на уровне сети или большой L7-флуд решаются у хостера, в CDN или WAF. Дырявое приложение блокировщик тоже не спасёт: нужны обновления, нормальные limit_req, Fail2Ban или CrowdSec. Бонус после настройки обычно скромный, но заметный: меньше сканов в логах, ниже фоновая нагрузка на PHP-FPM и чище аналитика.

В итоге Ultimate Bad Bot Blocker это бесплатный и живой проект, который быстро ставится на обычный Nginx: три скрипта, две строки include в сайте и обновление списков по cron. Он хорошо дополняет CDN и WAF, но не заменяет их.

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


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