Vlad__ писал(а): 14.06.2026 1:37
Нужно ли так однозначно? Заголовки запрашивают не только боты.
Спасибо. Замечание переосмысленно и всё переделано заново. Теперь так:
/home/USER/conf/web/DOMAIN.COM/nginx.ssl.conf_extra * У каждого свой путь
Код: Выделить всё
# 1. Легальным, но нежелательным ботам запрещено только сейчас
if ($http_user_agent ~* "Mediapartners") { return 403; }
# 2. Поведенческая блокировка наглых ботов без cookies
# 2a. Помечаем точки входа
set $bot_check "";
if ($http_user_agent ~* "keys-so|python|Firefox/72") { set $bot_check "A"; }
if ($request_uri ~* "/adm/|ucp\.php|author=|posting\.php|profile\.php|\.env|\.git|\.aws|\.terraform") { set $bot_check "A"; }
if ($server_protocol ~ "HTTP/1") { set $bot_check "A"; }
if ($request_method = HEAD) { set $bot_check "A"; }
# 2b. Проверка наличия cookies
if ($http_cookie = "") { set $bot_check "${bot_check}C"; }
# 2c. Исключения (ПС и мессенджеры) — обнуляем всё для своих
if ($http_user_agent ~* "Yandex|Googlebot|Google-|Applebot|bingbot|Baiduspider|GPTBot|whatsapp|telegram|facebook") { set $bot_check ""; }
if ($request_uri ~* "robots\.txt") { set $bot_check ""; }
# 2d. Исполнение приговоров
if ($bot_check = "AC") { return 444; }
# 3. Мягкие ответы
# 3a. Этих страниц уже не существует
if ($request_uri ~* "thankslist|/hostiman/") { return 410; }
# 3b. Системные заглушки
location ^~ /.well-known/acme-challenge/ { allow all; }
location /.well-known/ { log_not_found off; return 204; }
Блок 3а - это чисто моё, так как я удалил у себя это расширение после 10 лет использования.
Блок 1 - тоже только моё, так как вообще никаких рекламных блоков нет на сайте.
К остальному тоже надо подходить вдумчиво, а не пихать сразу в свой сайт.
Настройка fail2ban. В
/etc/fail2ban/jail.local добавлен блок:
Код: Выделить всё
[nginx-bot-444]
enabled = true
#port = http,https
filter = nginx-bot-444
action = hestia[name=WEB]
logpath = /var/log/nginx/domains/DOMAIN.COM.log
maxretry = 2
findtime = 600
bantime = 86400
* Вместо
/var/log/nginx/domains/DOMAIN.COM.log нужно писать свой путь к логу.
Создан файл
/etc/fail2ban/filter.d/nginx-bot-444.conf такого содержания:
Код: Выделить всё
[Definition]
# Ищем IP, получивший код ответа 444 в любой строке лога
failregex = ^<HOST> -.*" (444) .*$
ignoreregex =
Ну и не забываем перезапускать службы nginx и fail2ban после изменений.