CrawlGuard

Документация

Как подключить и настроить

Быстрый старт: домен под защитой за 5 шагов

  1. Зарегистрируйтесь в дашборде — бесплатный период начинается сразу, карта не нужна.
  2. Добавьте домен и укажите origin — адрес вашего сервера (например, https://1.2.3.4 или внутренний хост). Пользователи его не увидят.
  3. Подтвердите владение: добавьте TXT-запись из инструкции в DNS домена. Дашборд проверит её автоматически.
  4. Направьте домен на edge: для поддомена (например, www) — одна CNAME-запись на edge.crawlguard.ru; для голого домена — запись ALIAS/ANAME на тот же адрес, а если ваша DNS-панель их не поддерживает — A-записи на IP из инструкции. CNAME/ALIAS надёжнее: адреса edge обновляются автоматически, включая переключение при сбое узла. Точные записи для вашего домена показывает дашборд. TLS-сертификат выпустится автоматически при первом запросе.
  5. Закройте origin: разрешите на своём сервере/файрволе трафик только с нашим заголовком X-Crawlguard-Origin-Lock (значение — в дашборде) или только с нашего IP. Иначе боты смогут обойти защиту, обращаясь к серверу напрямую. Дашборд показывает статус origin locked, когда всё правильно.

Все пять статусов — ownership · TLS · origin reachable · origin locked · protected — видны на странице сайта в дашборде с живой проверкой.

Как именно закрыть origin

Достаточно одного из способов. «Origin» здесь — ваш сервер, куда мы проксируем трафик.

Пока origin открыт напрямую, бот может обойти проверку, обратившись к серверу в обход нас. Дашборд загорится origin locked, когда доступ закрыт правильно.

Если ваш сервер сам держит HTTPS-сертификат

Многие серверы (Traefik, nginx или Apache с certbot, Caddy, панели хостинга) сами выпускают и автоматически продлевают бесплатный сертификат Let's Encrypt. После подключения к CrawlGuard домен указывает на нас — поэтому проверка Let's Encrypt при продлении приходит к нам, а не на ваш сервер. Чтобы это не ломало автопродление, мы прозрачно пропускаем ACME-проверку на ваш origin: запросы вида /.well-known/acme-challenge/… идут насквозь к вашему серверу.

Закрытие origin (шаг 5) автопродлению не мешает: ACME-запросы мы проксируем с нашего IP и фирменным заголовком, а серверы вроде Traefik отдают токен проверки ещё до своих правил доступа.

Не хотите держать сертификат на своей стороне вообще? Отдавайте контент внутренним HTTP (за закрытым origin), а публичный HTTPS полностью держим мы — тогда сертификат на вашем сервере не нужен.

Как работает защита

Посетитель без cookie доверия получает лёгкую страницу проверки. Браузер за ~1 секунду решает криптографическую задачу (proof-of-work), отправляет решение — сервер проверяет его, гасит одноразовый seed (повторно использовать решение нельзя) и ставит подписанную HttpOnly-cookie на вашем домене. Дальше запросы проходят мгновенно: подпись проверяется локально, без обращений к базе.

Посмотреть вживую на демо-сайте: curl -I https://demo.crawlguard.ru/ вернёт 401, а браузер пройдёт проверку и увидит содержимое.

Поисковые боты и SEO

Googlebot, YandexBot и Bingbot пропускаются без проверки. Верификация — по forward-confirmed reverse-DNS (IP → PTR → IP), а не по User-Agent: подделать UA может любой скрипт, подделать обратную DNS-запись поисковика — нет. Индексация и позиции не страдают; страница проверки отдаётся с noindex и корректными кодами ответов.

SPA, API и мобильные клиенты

HTML-проверка показывается только на навигацию браузера (GET с Accept: text/html). Fetch/XHR/POST-запросы без cookie получают чистый ответ:

HTTP/1.1 401 Unauthorized
X-Guard-Challenge: required

Ваш фронтенд может перехватить этот ответ и перезагрузить страницу — пользователь пройдёт проверку, и запрос повторится уже с cookie. API-клиенты и мобильные приложения, которым проверка не нужна, добавляются в allowlist.

Allowlist

Per-домен настраиваются исключения — им проверка не показывается никогда:

Всё редактируется в дашборде на странице домена или через API.

Производительность

Проверка стоит дёшево и не замедляет сайт заметным образом:

Fail-open: ваш сайт важнее нашей защиты

FAQ

Не заблокируете ли вы моих реальных клиентов?
Цель — не задеть живого человека. Проверка невидима и решается автоматически, без CAPTCHA и кликов. Поисковики и ваши интеграции (API, мобильные приложения) — в белом списке. Порог чувствительности настраивается, а детект автоматизации на новом домене можно перевести в режим наблюдения: сначала смотрите статистику, потом ужесточаете. Сама невидимая проверка браузера при этом работает с первого дня.
Вы терминируете мой HTTPS — что с данными посетителей?
Да, мы снимаем TLS — иначе нельзя проверять браузер и прятать ваш сервер. Но мы не храним тела запросов и ответов: в аналитику идут только обезличенные поминутные агрегаты решений, а IP усечён до подсети. Инфраструктура и данные — в России, по 152-ФЗ. Подробнее — в политике конфиденциальности.
Что будет, если ваш сервис станет недоступен?
Ваш сайт продолжит работать. При сбое нашей инфраструктуры трафик пропускается без проверки (fail-open), а не блокируется. Проверка cookie у вернувшихся посетителей вообще не зависит от нашей базы.
Пройдут ли мобильные и старые браузеры?
Современные — да, включая мобильные: проверка использует стандартный Web Crypto, он есть во всех браузерах последних лет. Совсем старые браузеры без Web Crypto (например, Internet Explorer) увидят сообщение о неподдерживаемом браузере, а посетитель с выключенным JavaScript — просьбу его включить.
Как устроена оплата и как её прекратить?
Вы пополняете баланс, оплата плана списывается с него раз в месяц — никаких автосписаний с карты. Чтобы прекратить оплату, просто не пополняйте баланс: защита доработает оплаченный период (плюс 7 дней запаса), сайт при этом не блокируется. По возвратам остатка напишите в поддержку; условия — в оферте.
Замедлится ли сайт?
Возвращающиеся посетители проходят за доли миллисекунды (локальная проверка подписи). Новые — один раз решают задачу ~1 с, дальше ходят свободно, пока жива cookie.
Что увидят пользователи?
Новый посетитель — короткий экран «проверяем браузер» примерно на секунду, без картинок и кликов. Дальше — ваш сайт как обычно.
Совместимо ли с CDN?
CrawlGuard сам терминирует TLS и должен стоять первым в пути трафика. CDN перед CrawlGuard не поддерживается; статику можно отдавать с отдельного домена-CDN либо добавить её пути в allowlist.
Как быстро выключить защиту?
Верните DNS-записи домена на свой сервер — трафик пойдёт напрямую (не забудьте открыть origin). Или удалите домен в дашборде.

Control-plane API

Всё, что умеет дашборд, доступно программно. Ключ выпускается на странице API keys; передаётся в заголовке Authorization: Bearer <key> или X-Api-Key: <key>.

curl -s https://app.crawlguard.ru/v1/sites \
  -H "Authorization: Bearer $CRAWLGUARD_KEY"
Метод и путьЧто делает
POST /v1/sitesдобавить домен: {"domain": "...", "origin_url": "..."}
GET /v1/sitesсписок доменов аккаунта
GET /v1/sites/{домен}карточка домена
PATCH /v1/sites/{домен}настройки: difficulty, TTL, allowlist
DELETE /v1/sites/{домен}удалить домен
POST /v1/sites/{домен}/verificationполучить TXT-токен подтверждения владения
POST /v1/sites/{домен}/verifyпроверить владение и продвинуть статус
GET /v1/sites/{домен}/statusстатусы онбординга с живой проверкой origin
GET /v1/sites/{домен}/eventsагрегаты решений для графиков
POST /v1/sites/{домен}/rotate-secretротация секрета подписи cookie
POST /v1/sites/{домен}/allow-keysвыпустить allowlist-ключ для X-Api-Key (показывается один раз)
DELETE /v1/sites/{домен}/allow-keysотозвать все allowlist-ключи домена

Изменения настроек edge подхватывает без перезапусков — за секунды.