| Борьба с 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;
}
}
}
}
|
| |
|
|
|
| Раздел: Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Ограничение доступа и ресурсов, безопасность |
| 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; }
...
}
| | |
|