1 сентября 2026 года вышел CrowdSec 1.8 — и в open-source WAF, который ставят на свой сервер за один helm install, приехали две вещи разом: браузерный фингерпринтинг и proof-of-work. До сих пор PoW-стенку в дикой природе встречали в основном на гит-форджах и архивах рассылок. Теперь такой слой может оказаться на любом сайте с пятьюстами посетителями в сутки.
Разбираемся, что именно изменилось, почему детект пошёл в сторону «плати процессором», и — главное — почему хеш в этой конструкции наименьшая из проблем.
Что случилось: PoW спустился с гит-форджей на обычные сайты
CrowdSec — это self-hosted система: агент читает логи, WAF стоит перед приложением, «баунсеры» блокируют. В релизе 1.8 команда добавила в WAF механизм, который отвечает не на вопрос «этот IP плохой?», а на вопрос «это вообще браузер с человеком или бот, который им притворяется?». Ответ собирается из фингерпринта (характеристики браузера и TLS-подпись) и proof-of-work — вычислительной задачи, которую клиент обязан решить до того, как бэкенд увидит запрос.
Мотивацию авторы формулируют без дипломатии: средний бот 2026 года приходит с настоящим Chrome, консистентным TLS-фингерпринтом, резидентным IP — и терпения у него больше, чем у дежурного инженера. Это признание со стороны детекта дороже любой аналитики: резидентный адрес и аккуратный TLS перестали быть разделяющим признаком. Раз по IP-репутации и рукопожатию бот больше не отличается от человека, защита ищет признак, который дёшев для браузера и дорог для парка машин.
Параллельно на Hacker News в те же дни всплыл POWBlock — «proof-of-work микросервис для любого сервера». Один релиз можно списать на совпадение, два независимых сигнала за неделю — уже направление.
Как устроена PoW-стенка на примере Anubis
Эталон жанра — Anubis: реверс-прокси на Go под лицензией MIT, который пишет Xe Iaso под маркой Techaro с января 2025 года. Идея прямиком из хешкеша Адама Бэка 1997 года: клиент перебирает значения, пока SHA-256 не даст хеш с нужным числом ведущих нулей. Решил — получил подписанную JWT-куку (techaro.lol-anubis-auth) и временный доступ. Не решил — бэкенд о тебе не узнает.
Сложность задаётся администратором. По умолчанию Anubis челленджит всё, что похоже на браузер, — то есть всё, у чего в User-Agent есть строка Mozilla. Что стоит каждый уровень, показывают замеры:
- Сложность 1 — меньше 100 мс.
- Сложность 4 (дефолт) — около 1,35 с на Intel Core Ultra 7 165H, это примерно 87 600 хешей в секунду в браузере.
- Сложность 8 — около 11 с.
- Сложность 10 — около 114 с.
Между четвёртым и десятым уровнем разница примерно в 84 раза. Список внедривших выглядит внушительно: архив рассылки ядра Linux и git-сервер ядра, sourcehut, FFmpeg, GitLab проекта GNOME, Wine, sourceware.org, FreeCAD, ScummVM, Enlightenment, UNESCO. В университете Duke пилот в июне 2025 года отсекал больше 4 миллионов нежелательных HTTP-запросов в сутки — порядка 90% мусорного трафика, — и за неделю на проблемы пожаловались 12 человек.
Появились эти стенки не от вредности. У Read the Docs один-единственный краулер выкачал 73 ТБ за месяц; после блокировки суточный трафик упал с 800 ГБ до 200 ГБ, экономия — около 1500 долларов в месяц. Дрю Девольт описывал, что борьба с краулерами съедала у него от 20 до 100 процентов отдельных недель. На фоне роста автоматизированного трафика на 23,51% за 2025 год и почти трёхкратного роста AI-трафика внутри года администраторы взялись за то, что работает быстро.
Поворот: против промышленного парсинга PoW почти не работает
А теперь неудобная часть, которую редко пишут в пресс-релизах. Proof-of-work опирается на асимметрию «дёшево проверить, дорого решить». В вебе эта асимметрия развёрнута не в ту сторону.
Честный посетитель считает хеши медленным JavaScript в браузере. Тот, кто пришёл за данными, считает их нативным кодом. Тавис Орманди написал решатель на 25 строках C: задача сложности 5 закрывается примерно за 0,017 секунды — это примерно в 200 раз быстрее браузерного SubtleCrypto. На GPU разрыв ещё больше, порядка ста крат и выше. Итог арифметики простой: для крупного вендора обход всех Anubis-сайтов стоит околонуля.
Это не теория. Codeberg ещё в августе 2025 года сообщил, что многие скрапер-боты научились решать челленджи Anubis. Стенка при этом не стала бесполезной — несколько месяцев она отсекала основную массу, — но как барьер для того, кто готов вложить один вечер в нативный солвер, она не держит.
Платит по счёту, как обычно, живой пользователь. Сложность 5 — это около 2 секунд на свежем MacBook, десятки секунд на старом ноутбуке и до двух минут на телефоне. На GitLab GNOME фиксировали случай получасового залипания в Firefox — выброс, но показательный. Плюс жёсткие исключения: по умолчанию Anubis требует JavaScript, поэтому RSS-читалки, curl, wget и Lynx просто отваливаются. Проект это чинит — в версии 1.20.0 появился путь без JS через meta-refresh, — но в 1.22.0 приехал Proof of React, который, наоборот, поднял требования к браузеру.
Стоит знать и про устойчивость самого проекта: около половины кода коммитит один человек, и среди 80+ контрибьюторов лишь один другой разработчик перевалил за десяток коммитов. Плюс в Anubis интегрирован платный сервис Thoth для GeoIP- и BGP-фильтрации — то есть у открытого проекта есть коммерческий сосед.
Где PoW действительно кусается: коммерческая версия устроена иначе
Тут и прячется главная подмена понятий. Kasada, hCaptcha и Cloudflare Turnstile тоже используют proof-of-work — но совсем не так, как Anubis.
У Anubis пазл и есть стена: выполнил JS, посчитал хеш — прошёл. Один сигнал, один барьер. У коммерческих систем PoW работает как аттестация. У Kasada задача занимает пару миллисекунд — настолько мало, что как барьер она бессмысленна. Смысл в другом: чтобы её решить, клиент обязан прогнать обфусцированную виртуальную машину, внутри которой и происходит настоящий детект. Посчитаешь хеш, не выполнив всё остальное, — не получишь ничего. hCaptcha наслаивает PoW поверх вердикта по картинкам, повышая вычислительную цену для подозрительных клиентов, Turnstile считает PoW одним сигналом среди множества проб окружения.
Разница принципиальная. Открытую стенку ломает дешёвый нативный солвер. Коммерческую ломает не хеш, а необходимость честно исполнить чужой обфусцированный код и не спалиться на окружении — и вот это дорого, потому что обфускация регулярно ротируется. CrowdSec 1.8 интересен ровно тем, что тащит гибрид этой логики (фингерпринт рядом с PoW) в self-hosted мир, где раньше стоял максимум rate limit по IP.
Что это меняет на практике
Если вы собираете данные легально — мониторите цены, следите за своим брендом, ведёте исследование, — выводы получаются вполне конкретные.
- Проблема не в хеше, а в браузерном слое. Хеш считается нативно за миллисекунды. Не считается фингерпринт, обфусцированная VM и корректное окружение. Практический сдвиг: там, где раньше хватало HTTP-клиента, теперь нужен настоящий браузерный движок. Это дороже по CPU и памяти, и планировать надо сразу под это.
- Экономика переезжает с трафика на время и процессор. Раньше себестоимость считали в IP и гигабайтах. Теперь к ней прибавляются секунды на страницу и загрузка ядер. Мерить надо не цену за гигабайт, а стоимость одной успешной записи — при PoW-стенке эти две метрики расходятся особенно сильно.
- Сессия становится активом. Anubis выдаёт JWT-куку на время. Если менять IP после каждого запроса, вы платите PoW-налог заново на каждой странице. Липкие сессии на резидентных прокси здесь дают выигрыш не в «анонимности», а прямо в вычислениях: одно решение задачи амортизируется на десятки страниц. Агрессивная ротация в мире PoW превращается из хорошей практики в перерасход.
- Солвер не заменяет поведение. Ровно та же логика, по которой солверы капчи перестали закрывать вопрос: вы решаете видимую задачу, а вердикт выносится по невидимым сигналам вокруг неё.
- Снижайте частоту — это дешевле любой стенки. PoW-волна выросла из историй вроде 73 ТБ за месяц с одного краулера. Кеш, условные запросы, разумный интервал и уважение к robots.txt снимают вас с радара до того, как включится челлендж. Дешёвые датацентр-адреса плюс headless на максимальной частоте — это ровно тот профиль, ради которого стенки и ставят.
Вывод
CrowdSec 1.8 — не «конец скрапинга», и Anubis им тоже не стал: нативный солвер закрывает задачу сложности 5 за 0,017 секунды, а живой человек на старом телефоне ждёт до двух минут. Реальная новость в другом. Во-первых, детект вслух признал, что резидентный IP и чистый TLS больше ничего не доказывают. Во-вторых, слой «докажи, что ты браузер» перестал быть привилегией больших площадок с бюджетом на Kasada и переехал в open-source, который ставят на обычные сайты.
Готовиться стоит не к битве с хешами, а к тому, что дешёвая схема «много IP плюс быстрый HTTP-клиент» будет отваливаться на всё более мелких целях. Выигрывает противоположная конфигурация: меньше запросов, настоящий браузер, длинные сессии и качественные адреса там, где нужен один надёжный проход, а не тысяча дешёвых попыток.
