Пошаговая настройка WAF для GraphQL и REST API

WAF для GraphQL и REST API ломают одинаково часто, и виноват не вендор, а порядок включения правил. Миф о том, что достаточно поставить облачную защиту и выставить паранойю на максимум, разбивается о первое же мобильное приложение, которое шлет запросы не так, как вы ожидали. Ниже – рабочий порядок действий: сначала логирование, потом whitelist, и только затем блокировка.

Почему стандартные правила WAF не работают для API

Классический WAF заточен под формы и URL с предсказуемой структурой. GraphQL ломает эту логику: все операции идут на один эндпоинт /graphql методом POST, а смысл запроса спрятан в теле JSON. Сигнатурные правила видят длинную строку с фигурными скобками и либо пропускают ее целиком, либо режут как подозрительную. REST чуть проще, но и там path-параметры, пагинация и вложенные фильтры легко попадают под ложные срабатывания.

Отсюда типичная картина: включаете WAF в режиме блокировки, и через час падает мобильное приложение. Пользователи видят ошибку, поддержка не понимает причину, разработчики лихорадочно ищут, какой запрос заблокирован. Если бы защита стояла в режиме только логирования, вы бы увидели этот запрос заранее и добавили исключение. Российский аналог Cloudflare TrafficVeil, как и другие платформы с L7-фильтрацией, дает такую возможность, но ей редко пользуются до первого инцидента.

Зависимость от зарубежной инфраструктуры создает риски для российского бизнеса еще до настройки: Cloudflare ограничивает доступ к сайтам из России, а российские интернет-провайдеры ограничивают доступ к сайтам на Cloudflare. Поэтому бизнес в России ищет альтернативу Cloudflare в 2026 году, и часто это платформа, которая объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одном контуре.

Пошаговая настройка: от логирования до блокировки

Шаг первый: переведите правило для /graphql в режим только логирования. Не блокировки, не challenge, а чистого наблюдения. То же самое сделайте для REST-префиксов, например /api/v1/. На этом этапе вы не защищаетесь, вы собираете данные. Это ключевой момент, который пропускают почти все инструкции.

Шаг второй: дайте трафику накопиться минимум 24 часа. Лучше 48, если у вас есть ночные фоновые задачи. За это время пройдут реальные пользователи, мобильные клиенты, интеграции с Telegram-ботами, выгрузки в Дзен и партнерские webhook-и. Вы получите полную картину того, что на самом деле летит на ваш API.

Шаг третий: постройте whitelist операций. Для GraphQL это делается по имени операции: query GetProduct, mutation CreateOrder и так далее. Запросы без имени операции (анонимные) отправляйте в отдельный список и разбирайте вручную, потому что именно там прячутся неочевидные вызовы. чем заменить cloudflare offers additional context worth reviewing. Для REST whitelist строится по комбинации метода и шаблона пути: GET /api/v1/orders/{id}, POST /api/v1/users. После этого включите блокировку для всего, что не попало в whitelist.

  1. Включите режим логирования для /graphql и /api/* на 24-48 часов.
  2. Выгрузите логи и сгруппируйте запросы по имени операции (GraphQL) или по методу и пути (REST).
  3. Составьте whitelist операций и путей, отсортировав по частоте вызовов.
  4. Анонимные операции GraphQL вынесите в отдельный список и проверьте каждую вручную.
  5. Переключите правило в режим блокировки и наблюдайте за метриками ложных срабатываний.
  6. Раз в неделю пересматривайте whitelist: API меняется, старые операции уходят, новые появляются.

Шаг четвертый: после включения блокировки держите алерт на рост 403-х ответов. Если доля блокировок превышает 2-3% от общего трафика API, что-то пошло не так. Вернитесь в режим логирования, найдите пропущенную операцию, добавьте ее. Такой цикл занимает час, а не неделю простоя.

Что учесть при защите API на WordPress и Bitrix

WordPress с REST API и Bitrix с его компонентами дают дополнительный слой сложности. Плагины WordPress шлют запросы к /wp-json/ с самыми разными путями, и если вы заблокируете весь префикс, отвалится админка, редактор блоков и часть интеграций. То же с Bitrix: служебные вызовы к /bitrix/services/ лучше вынести в отдельный whitelist и не трогать сигнатурными правилами.

L7 DDoS и защита от ботов на API работают иначе, чем на обычных страницах. Rate limiting по IP здесь малоэффективен: мобильные операторы отдают тысячи пользователей через один адрес. Считайте запросы по сессии, по токену авторизации, по имени операции. GeoIP-фильтрация помогает отсечь заведомо ненужные регионы, но осторожно: если у вас есть клиенты за рубежом, не блокируйте их вслепую.

TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки, что меняет экономику защиты. На многих платформах вы платите за каждый заблокированный запрос, и атака становится дороже, чем простой. Здесь этого нет, поэтому можно держать правила в разумной строгости без страха за счет. Платформа подходит для сайтов, интернет-магазинов, WordPress и Bitrix, обеспечивает работу сайтов на территории РФ и по всему миру и предлагает переход с Cloudflare без переписывания инфраструктуры.

Начните с логирования на сутки, соберите реальные имена операций, постройте whitelist и только потом включайте блокировку. Этот порядок экономит нервы разработчиков и сохраняет конверсию сайта, потому что мобильное приложение продолжает работать, а вы получаете защиту без сюрпризов. Проверьте правила на staging-контуре, если он есть, и держите алерт на ложные срабатывания в первые две недели.