How I block all 26M of your curl requests
Автор использует технологию XDP (Express Data Path) для высокопроизводительной фильтрации сетевых пакетов прямо на уровне сетевого устройства, что позволяет обрабатывать до 26 миллионов запросов в секунду на потребительском оборудовании. XDP работает поверх eBPF — виртуальной машины в ядре Linux, где код компилируется в низкоуровневые инструкции для быстрой проверки пакетов с гарантиями безопасности, например, предотвращения чтения за пределами буфера.
Для идентификации клиентов, особенно скриптовых инструментов вроде curl, применяется TLS-фингерпринтинг по стандарту JA4. Этот метод анализирует параметры TLS-рукопожатия (версии, шифры, расширения), формируя уникальный отпечаток, который можно сопоставить с конкретным ПО. Хотя расчёт хэша SHA256 напрямую в eBPF сложен, сама возможность такой фильтрации на уровне ядра позволяет эффективно блокировать массовые автоматизированные запросы с минимальными затратами ресурсов.
Комментарии (51)
- Обход TLS-отпечатков (JA3/JA4) возможен через случайный подбор шифров в curl или инструменты вроде curl-impersonate
- Многие системы защиты (например, Anubis) сознательно разрешают запросы от curl и Googlebot, чтобы отсеивать только злоумышленников
- Эффективная блокировка требует комбинации методов: отпечатки TLS, IP-адреса, ASN, HTTP-фингерпринтинг и JavaScript-вызовы
- Мотивированные скрейперы используют продвинутые техники: эмуляцию браузера, вращение отпечатков и прокси
- Борьба со скрейпингом — это "гонка вооружений", ведущая к росту затрат для обеих сторон и рискующая навредить открытости интернета
Why are anime catgirls blocking my access to the Linux kernel? 🔥 Горячее 💬 Длинная дискуссия
Anubis — «весы душ» для HTTP-запросов, защищают сайты от ИИ-ботов. Вместо CAPTCHA требует перебора nonce, чтобы SHA-256(challenge+nonce) начиналась с 4 нулей (16 бит). Это Proof-of-Work, как в биткоине, но не майнинг.
Проблема: задача легка для дата-центра ИИ, но трудна для обычных пользователей без мощного железа.
Сайты ядра Linux (git.kernel.org, lore.kernel.org) теперь требуют этот PoW, что ломает скрипты и консольные клиенты.
Цифры
- Сложность 4 → 2¹⁶ ≈ 65 536 SHA-256 на токен.
- Токен живёт 7 дней.
- 11 508 «звёзд» GitHub ≈ столько сайтов с Anubis.
- На бесплатной e2-micro GCP: 3688 кБ/с SHA-256 → ≈ 230 000 хэшей/с.
- Для обхода всех сайтов за неделю: 11 508 × 65 536 ≈ 754 млн хэшей → 54 минуты CPU на одном ядре.
Цена: копейки, даже в облаке. ИИ-вендору это ничто, а владельцу VPS-128 МБ — проблема.
Альтернативы
- Rate-limit, WAF, robots.txt, API-ключи, CDN, client-cert.
- Использовать Tor Browser (JS включён) или Selenium.
- Патчить curl/wget, добавляя JS-движок или готовый PoW-скрипт.
- Прокси-браузер (Puppeteer, Playwright) в headless-режиме.
Workarounds
anubis-pass— консольный майнер на Go, решает задачу и выдаёт cookie.- Пользовательские скрипты, которые запрашивают страницу, вычисляют PoW и продолжают сессию.
Комментарии (770)
- Anubis — это PoW-заглушка, которая заставляет клиента выполнить небольшой вычислительный «тест» и получить токен на неделю; таким образом сервер получает идентификатор для рейт-лимита и борется с массовым «распылением» запросов ботами.
- Многие участники считают, что PoW легко обходится при наличии вычислительных ресурсов, но пока большинство AI-краулеров просто не стали заморачиваться, поэтому Anubis «работает» в реальности, хоть и не идеален.
- Критика: задержки 10–20 с на слабых устройствах, проблемы с доступом без JS, «аниме-девочка» вызывает у кого-то раздражение, а у кого-то ностальгию.
- Часть комментаторов предлагает альтернативы: микроплатежи, «человеческие» вопросы, лабиринты-ловушки, VPN-сети или просто блокировки по ASN.
- Самое главное: Anubis не решает проблему окончательно, но добавляет достаточно трения, чтобы заставить владельцев краулеров пересмотреть объёмы сканирования.