The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Борьба с web-ботами через запрет HTTP/1.1
Как один из вариантов борьбы с AI-скрапперами, создающими огромную паразитную
нагрузку на сервер, предложено ограничить доступ к сайту по протоколу HTTP/2
и полностью отключить поддержку HTTP/1.0 и HTTP/1.1. Логика подобного решения в
том, что все современные браузеры поддерживают HTTP/2, а боты почти всегда
обращаются к сайтам по HTTP/1.1 и пока не пытаются использовать HTTP/2 в случае
невозможности отправить запрос на HTTP/1.1.

При этом важно учесть, что RSS-ридеры и полезные поисковые боты, такие как
Google Bot, также ограничены использованием HTTP/1.1 и для них необходимо
сделать исключение.

Пример правил для http-сервера Caddy, возвращающих клиенту ошибку при обращении по HTTP/1:

   @http-too-old {
       not protocol http/2+
       not path /rss.xml /atom.xml # allow rss
       # Белый список для поисковых ботов и старых браузеров
      not header_regexp User-Agent (?i)(Google-Site-Verification|googlebot|bingbot|duckduckbot|mastodon|^Lynx)
   }

   example.com {
       ....
       handle @http-too-old {
          respond 418
       }
   }


Пример для nginx:

   http {
      ...
      map $server_protocol $is_http2 {
          default 0;
          "HTTP/2.0" 1;
          "HTTP/3.0" 1;
      }

      map $request_uri $is_rss {
          default 0;
          ~^/(rss\.xml|atom\.xml)$ 1;
      }

      map $http_user_agent $is_bot {
          default 0;
          ~*Google-Site-Verification 1;
          ~*googlebot 1;
          ~*bingbot 1;
          ~*duckduckbot 1;
          ~*mastodon 1;
          ~*^Lynx 1;
      }
   }
   server {
      ...
      if ($is_http2 = 0) {
         if ($is_rss = 0) {
            if ($is_bot = 0) {
                return 418;
            }
         }
      }
   }
 
09.03.2026 , Источник: https://sheep.horse/2026/3/blocking...
Ключи: ai, bot, caddy, nginx, filter / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Ограничение доступа и ресурсов, безопасность

Обсуждение [ RSS ]
  • 1, Аноним (1), 19:01, 09/03/2026 [ответить]  
  • +1 +/
    Так себе идея, не учитывающая много исключений.
    Мы сделали чуть сложнее - проанализировали набор заголовков, используемых провайдеров, подсети и собрали набор маркеров. При поступлении запроса он (с помощью кода на lua в nginx) анализируется, при совпадении любого из маркеров ему начисляются очки. Например если Firefox шлет Chrome-специфичный заголовок, используется китайская локаль (90% скрейперов нападающих на наш хостинг имеют китайскую локаль), поведение не соответствует версии браузера, меченая ASN и т.д. Набрал больше первого порога - страницу отдаем, но с минимальной скоростью (в планах челлендж, но это потом). Набрал выше второго порога - давай до свидания! (с)
    В среднем 27-35% трафика летит в 444, еще 8-10 отдается с задержкой. И с момента внедрения нагрузка на ноды бэкендов ни разу не превысила штатную.
     
     
  • 2, Гость (??), 20:58, 09/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С ботами из сети Tencent как? оттуда валится столько запросов и входящего трафика, что лучше из банить до http сервера.
     
     
  • 4, Аноним (1), 06:52, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    С ними проще - можно банить прям подсетями. Брать из BGP списки подсетей принадлежащие AS Tencent, Alibaba, Huawei cloud и пр. и закидывать пачками в ipset/netfilter. Простенький скрипт в кроне раз в неделю
     

  • 3, S_Paul (??), 21:55, 09/03/2026 [ответить]  
  • +/
    Вложенные "if"'ы наверное можно map'ами сделать.

    map $is_http2:$is_rss:$is_bot $isdrop {
      default 0
      "0:0:0" 1;
    }

    server {
    ...
      if ($isdrop = 1) { return 418; }
    ...
    }

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру