⚠️ На инстансе Forgejo git.dc09.ru временно включено логирование запросов. Сохраняются IP-адрес, путь с параметрами и все заголовки кроме Cookie (ибо я не хочу читать ваши токены доступа).

Единственная цель — анализ заголовков и выявление специфических для ИИ-скрейперов маркеров в трафике.

Anubis вполне справляется, но хотелось бы уменьшить количество срабатываний PoW-капчи. Сейчас считаются подозрительными вообще все клиенты с "Mozilla" в юзер-агенте (то есть те, что являются браузерами или притворяются ими), что создаёт лишнюю нагрузку на клиенты и ухудшает UX тем, у кого отключен JavaScript в браузере либо регулярно очищаются куки (не как клаудфлэр, конечно, но всё равно можно лучше).

Тест будет последовательно повторён с разными сервисами на dc09.ru, я сообщу таким же постом.

#dc09ru #NoAI

Пара интересных находок:

Есть скрейпер(-ы?), которые применяют географически разнообразные пулы резидентских IP-адресов, ставят юзер-агент от макоси, но явно не выглядят как современные настоящие браузеры — не отправляют никаких Sec-* хедеров 
Индексатор от минималиста 

У меня Firefox тоже не отправляет Sec-CH-* (та самая замена юзер-агентам), но вот, например, Sec-Fetch-Site по-видимому реализован во всех браузерах — можно проверять его наличие для блокировки таких простеньких скрейперов.

А в первую очередь, когда задумался об анализе хедеров для более точной блокировки ботов, я вспомнил про DNT: 1 (Do Not Target, "не персонализировать"). Хоть этот заголовок добавляет один бит уникальности для фингерпринтинга, в то время как большинство сайтов никогда и не соблюдали запрос DNT, кто-то всё равно зачем-то ставит чекбокс "просить сайты не отслеживать" в настройках файрфокса, я в том числе 

Технически ничто не запрещает ИИшным компаниям включать DNT у себя в браузерах, но пока что это явный маркер человеческого трафика, насколько я знаю.

И пока проверку на DNT не развернут на достаточном количестве серверов (то есть пока компаниям не станет выгодно включать этот хедер ), возможно, безопасно пропускать всех клиентов с DNT: 1 без прохождения капчи.

Знаете хттп-заголовок "Referer"? В нём указано, с какого сайта пришёл на страницу пользователь. Из-за опечатки в оригинальном документе он называется именно так, с одной R вместо двух, и закреплён в стандарте с таким именем.

При анализе собранных логов я увидел забавное:
~0,4% запросов пришли с заголовком...
Referrer: https://www.google.com

Referrer, с двойной R, с ссылкой на главную страницу гугла.

~17,5% запросов пришли с юзер-агентом Opera Presto. Если помните, у оперы во времена динозавров был собственный независимый браузерный движок.

Я попросил er2 проверить, открывается ли вообще мой Forgejo с Престо и проходит ли проверку Anubis, и... Опера не может даже установить соединение из-за слишком новой минимальной версии TLS на дц09ру.

Это те самые скрейперы, которые притворяются старыми браузерами, чтобы, похоже, им выдавали более простые страницы (см. выше в треде, я говорил о них в контексте отсутствия хедера Sec-Fetch-Site).

Кстати, около 31,3% запросов — из Бразилии, если база GeoIP была достаточно точная. Похоже, резидентские айпи для скрейпинговых ботов там покупать дешевле всего (??)
Дальше уже заметно меньшая доля.
7.76% США
6.08% Вьетнам
4.61% Россия
4.39% Индия
2.57% Мексика
Исламские страны, Аргентина, Сингапур...
Не удалось найти в геоайпи-базе данные по трём адресам, это 0.002% от всех запросов
Забыл сказать про датацентры хуавея. С них пришло 2% трафика, они тоже долбят ресурсоёмкие роуты, но почти все запросы выглядят как отправленные с современных настоящих браузеров, то есть проверка sec-fetch не поможет. Просто буду блокировать их подсети, собирать список которых можно из whois по AS131444 и AS136907 (ко мне шли только с этих ASN). С другой стороны, а стоит ли того, если это меньшая часть ботов
Ещё раз перескочу к скрейперам, которые притворяются старыми браузерами. Таких запросов у меня ровно 28к строк в БД, это ~19,48% из общего количества. Почти все они идут по ресурсоёмким роутам, только одна сотня не попала в эту категорию. Думаю, более чем достаточное основание для блокировки по условию "есть Mozilla в юзер-агенте" + "нет заголовка Sec-Fetch-Site"

Как я сразу не догадался отсортировать айпи-адреса по количеству запросов! Скрейперы с огромными пулами адресов обычно шлют один-два реквеста с каждого — похоже, во избежание рейтлимитов — и этим себя выдают.

Вот такое получается, если взять айпишники, с которых пришло меньше 5 запросов (но при этом на ресурсоёмкие роуты и с настоящего браузера) и сгруппировать их по провайдеру, отсортировав по количеству "нехороших" айпи внутри сети провайдера:

Huawei:
136907, 131444

HostRoyale:
203020, 207990, 133499

M247 EU SRL:
9009

Zenlayer:
21859

Чо бы с ними сделать…

С хуавея вот точно только ИИ-скрейперы ходят, можно на iptables заблокировать диапазоны адресов их AS, только придётся регулярно обновлять списки айпи.

На хострояле (нет, блин, пианино) у кого-нибудь может хоститься прокси или феди-инстанс. Конкретно на Forgejo с него вроде только трафик ботов прилетал.

M247 тоже выглядит как легитимный хостинг (но в моём случае — скрейперы).

Адреса зенлейера по геоайпи как гонконгские определились. Возможно, есть смысл поступить как и с хуавеем, ибо из китайских датацентров только скрейпинговые боты лезут.

Для рояля и м247 можно тогда поставить правило в Anubis, чтобы отдавал капчу посложнее. Так или иначе, уже разгружу наполовину сервер блокировкой китайских ДЦ.

Не то чтобы от них вообще шло много трафика, можно и забить.

@darkcat09 вот кстати всю эту инфу можно передать разрабу Anubis, особенно про старые браузеры.

✅ Логи запросов на git.dc09.ru отключены

#dc09ru

@darkcat09 Кстати для разграничения для ру/енг постов, можешь хз, добавить или заменить хештег дц09ру, как ты любишь писать

@redume
А зачем, этот тег объединяет посты по моим сервисам на dc09.ru

Мастодоновый софт и так замечательно умеет фильтровать по языку поста, а язык я стараюсь всегда выставлять правильно