Настройка WAF: пошаговое руководство для сайта
Изометрический чертёж: труба с вентилем, из её конца падает шарик в лоток с несколькими шариками

Настройка WAF: пошаговое руководство для сайта

Настройка WAF — это запуск в режиме обнаружения, разбор ложных срабатываний, точечные исключения и только затем включение блокировки.

Настройка WAF: как защитить сайт и не заблокировать клиентов

Правильная настройка WAF — это поэтапный процесс: разместить фильтр перед приложением, запустить его в режиме обнаружения, разобрать ложные срабатывания, добавить точечные исключения и только потом включить блокировку.

Главное правило: сначала наблюдение, потом блокировка. WAF, включённый «в бой» без тюнинга, чаще ломает легитимные запросы, чем останавливает атаки.

Веб-приложение на любом современном стеке постоянно сканируют боты: они перебирают пути, подставляют SQL-фрагменты в параметры, ищут забытые админки и уязвимые плагины. WAF (Web Application Firewall) встаёт на пути этих запросов и отсеивает опасные. Но у него есть обратная сторона: слишком строгие правила блокируют покупателей, формы заявок и интеграции. В статье разберём архитектуру, режимы работы, порядок настройки, исключения и типичные ошибки на примерах ModSecurity с набором правил OWASP Core Rule Set, а также облачных решений.

Что делает WAF и чего он не делает

WAF работает на седьмом уровне модели OSI и анализирует HTTP- и HTTPS-трафик: метод, адрес, заголовки, cookie, параметры запроса и тело. Каждый запрос он сопоставляет с набором правил и либо пропускает, либо блокирует, либо записывает в журнал. Так закрываются атаки из списка OWASP Top 10: SQL-инъекции, межсайтовый скриптинг (XSS), удалённое выполнение кода, обход каталогов, включение файлов, а также часть автоматизированных угроз — сканеры, подбор паролей, парсинг.

Существуют две модели. Негативная блокирует то, что похоже на известную атаку (сигнатуры, регулярные выражения, оценка аномальности). Она проще в запуске, но даёт ложные срабатывания. Позитивная разрешает только заведомо корректные запросы: допустимые URL, методы и форматы параметров. Она надёжнее, но требует глубокого знания приложения и дорого поддерживается. На практике почти везде начинают с негативной модели и добавляют позитивные правила для критичных точек: авторизации, оплаты, API.

Важно понимать границы. WAF не исправляет уязвимый код, не защищает от утечки учётных данных и не спасает, если злоумышленник обращается к серверу напрямую по IP в обход фильтра. Это уровень защиты в глубину, а не замена обновлениям.

путь запроса

Где WAF стоит в цепочке обработки запроса

  1. 01Клиент

    Браузер, бот или сканер отправляет HTTP-запрос

  2. 02CDN или балансировщик

    Завершает TLS и передаёт реальный IP в заголовке

  3. 03WAF

    Проверяет URL, заголовки и тело по правилам, считает баллы аномальности

  4. 04Приложение

    Получает только запросы, прошедшие проверку

  5. 05Журнал и оповещения

    Хранит срабатывания для разбора и алертов

Выбор схемы размещения

Прежде чем писать правила, определите, где будет работать WAF. От этого зависят скорость запуска, контроль над правилами и нагрузка на сервер.

Облачный WAF подключается сменой DNS-записи или настройкой балансировщика: трафик идёт через провайдера защиты. Это быстрый старт и готовые профили правил, но меньше гибкости и зависимость от поставщика. В облаках встречаются Cloudflare WAF, AWS WAF и Yandex Cloud Smart Web Security. Собственный обратный прокси (например, Nginx с ModSecurity и OWASP CRS) даёт полный контроль и не отправляет трафик третьим лицам, но требует администрирования и обновления правил. Модуль на самом веб-сервере проще развернуть, но он потребляет ресурсы приложения и хуже масштабируется.

Для интернет-магазина или корпоративного сайта на российской инфраструктуре чаще выбирают облачный сервис в российском облаке либо собственный прокси перед группой серверов. Для небольшого проекта достаточно готового профиля в облаке с несколькими своими правилами.

МодельГде работаетСильные стороныОграничения
Облачный WAFНа стороне провайдера, перед сайтомБыстрый запуск, готовые профили, защита от DDoS на L7Меньше гибкости, зависимость от провайдера
Обратный прокси (Nginx + ModSecurity)Перед группой серверов приложенийПолный контроль правил и логов, данные остаются у васНужны компетенции и обновление наборов правил
Модуль на веб-сервереВнутри Apache или Nginx на том же хостеМинимум компонентов, простая установкаНагрузка на тот же сервер, сложно масштабировать
Виртуальный или аппаратный шлюзНа границе сети предприятияВысокая производительность, поддержка вендораВысокая стоимость и сложная интеграция

Режимы работы и оценка аномальности

У любого зрелого WAF есть как минимум два режима: обнаружение (запрос пропускается, срабатывание пишется в журнал) и блокировка (запрос отклоняется с кодом 403 или другим). В ModSecurity это директива `SecRuleEngine`: значение `DetectionOnly` включает наблюдение, `On` включает блокировку. Новый WAF всегда запускают в первом режиме.

Набор OWASP Core Rule Set работает по принципу оценки аномальности. Каждое сработавшее правило добавляет баллы к запросу: критичное совпадение даёт 5, ошибка — 4, предупреждение — 3, уведомление — 2. В конце проверки сумма сравнивается с порогом. По умолчанию порог входящих запросов равен 5, поэтому одно критичное срабатывание уже приводит к блокировке, а несколько мелких могут её накопить.

Второй ключевой параметр — уровень паранойи (paranoia level). Чем он выше, тем больше правил включено, тем лучше ловятся нестандартные атаки и тем больше ложных срабатываний вы получите. Начинайте с первого уровня и повышайте его только для самых чувствительных частей приложения.

owasp crs

Уровни паранойи: баланс защиты и ложных срабатываний

pl1Базовый

Минимум ложных срабатываний. Подходит как стартовая точка для любого сайта.

pl2Расширенный

Больше правил для форм и API. Нужен для большинства интернет-магазинов и сервисов.

pl3Строгий

Для платёжных страниц и личных кабинетов. Потребует много исключений.

pl4Максимальный

Для особо критичных систем. Без опытной команды использовать не стоит.

5порог блокировки входящих запросов по умолчанию
4порог для ответов приложения

Пошаговый план настройки WAF

  1. 01

    Составьте инвентаризацию: публичные адреса, формы, API, загрузка файлов, админка, вебхуки платёжных систем и сторонние интеграции. Отметьте, какие запросы могут выглядеть «подозрительно» из-за своей природы.

  2. 02

    Выберите схему размещения (облако, прокси или модуль) и убедитесь, что приложение закрыто от прямого доступа: на сервере должны приниматься соединения только от WAF или балансировщика.

  3. 03

    Настройте передачу реального IP клиента: заголовок X-Forwarded-For или PROXY protocol от доверенных адресов. Без этого все запросы будут приходить с адреса прокси, а лимиты и блокировки станут бесполезны.

  4. 04

    Включите базовый набор правил на первом уровне паранойи в режиме обнаружения. Проверьте лимиты размера тела запроса, времени ожидания и обработки JSON и multipart, чтобы не ломать загрузки.

  5. 05

    Собирайте журнал не менее 7–14 дней. Сгруппируйте срабатывания по идентификатору правила, URL и параметру, отделите реальные атаки от ложных срабатываний.

  6. 06

    Добавьте исключения: для каждого ложного срабатывания отключайте правило только для конкретного адреса и параметра. Затем включайте лимиты частоты запросов, защиту от ботов и географические ограничения там, где они нужны бизнесу.

  7. 07

    Переключитесь в режим блокировки сначала для одной части трафика или части страниц, наблюдайте метрики и конверсию. После стабилизации распространите блокировку на весь сайт и настройте оповещения.

Как разбирать ложные срабатывания

Самая трудоёмкая часть настройки — работа с журналом. Каждое срабатывание содержит идентификатор правила, проверяемую переменную (например, параметр запроса `ARGS:comment`), совпавший фрагмент и итоговую оценку. Задача — понять, что стоит за запросом: реальная атака, нормальное поведение пользователя или особенность вашей системы.

Типичные источники ложных срабатываний: текстовые редакторы с HTML в теле запроса, поисковые строки с кавычками и знаками SQL-подобного вида, JSON с вложенными структурами, подписи платёжных вебхуков, закодированные в Base64 параметры, длинные cookie авторизации. Для каждого случая делайте точечное исключение. Например, в ModSecurity можно отключить правило 942100 только для вебхука:

`SecRule REQUEST_URI "@beginsWith /api/webhook" "id:10001,phase:1,pass,nolog,ctl:ruleRemoveById=942100"`

Не отключайте правило целиком и не поднимайте порог блокировки «на всякий случай»: так вы незаметно превратите WAF в декоративный элемент. Фиксируйте каждое исключение в документации с причиной, датой и ответственным, а также периодически пересматривайте список.

чек-лист

Что проверить перед включением блокировки

  • Журнал собирался не менее 7–14 дней, включая пики нагрузки и релизы
  • Разобраны срабатывания по оплате, поиску, API и админке
  • Исключения привязаны к адресу и параметру, а не отключают правило глобально
  • Реальный IP клиента определяется из доверенных прокси
  • Роботы Яндекса и Google проверены по обратному DNS и не блокируются
  • Лимиты размера запроса подходят для загрузки файлов и больших форм
  • Есть план отката: возврат в режим обнаружения занимает минуты

WAF, поисковые роботы и аналитика

Одна из самых неприятных последствий неверной настройки — потеря органического трафика. Антибот-правила, лимиты частоты запросов и блокировка по User-Agent легко отсекают YandexBot и Googlebot, а те при повторяющихся ошибках сокращают обход и могут исключать страницы из индекса. Проверьте, что роботы получают код 200: в Яндекс Вебмастере посмотрите статистику обхода и ошибки сервера, в Google Search Console — отчёт о статистике сканирования и проверку URL.

Не доверяйте одному заголовку User-Agent: его легко подделать. Надёжный способ — обратный DNS-запрос по IP с последующей прямой проверкой имени. Адреса роботов Яндекса должны разрешаться в домены yandex.ru, yandex.net или yandex.com, адреса Googlebot — в googlebot.com или google.com. Настройте правило-исключение для подтверждённых роботов и сохраняйте для них отдельную статистику в журнале.

Контролируйте и бизнес-метрики. Резкий рост отказов, падение числа заявок или конверсии в Яндекс Метрике и Google Analytics после включения блокировки часто означает, что WAF отсекает часть реальных пользователей, например из-за ошибки в правиле для формы.

Типичные ошибки при настройке WAF

Большинство проблем возникают не из-за слабых правил, а из-за поспешного запуска и неверных исключений.

Как делают неправильно

  • Сразу включают блокировку и узнают о проблемах из жалоб клиентов
  • Отключают правило целиком, если оно мешает одной форме
  • Не настраивают передачу реального IP, и все запросы видны с адреса прокси
  • Оставляют сервер доступным напрямую по IP в обход WAF
  • Блокируют роботов поисковых систем из-за антибот-правил и лимитов
  • Один раз настраивают и не обновляют правила и не читают журнал

Как правильно

  1. 01

    Запускать в режиме обнаружения и переходить к блокировке поэтапно

  2. 02

    Делать исключения по адресу и параметру с описанием причины

  3. 03

    Принимать IP клиента только из доверенных заголовков

  4. 04

    Ограничить доступ к серверу списком адресов WAF или балансировщика

  5. 05

    Проверять роботов по обратному DNS и следить за отчётами в Вебмастере и Search Console

  6. 06

    Обновлять набор правил, раз в неделю разбирать срабатывания и настроить оповещения

Мониторинг и сопровождение

Настроенный WAF — это не разовый проект, а процесс. Приложение меняется: появляются новые формы, обновляются плагины, подключаются интеграции. Каждое такое изменение способно породить новые ложные срабатывания, а каждая новая уязвимость — потребовать виртуальный патч.

Отправляйте журналы в централизованную систему (ELK, Grafana Loki, SIEM) и стройте панели по числу блокировок, топу правил, адресам и странам источников, доле кодов 403. Настройте оповещения на всплески блокировок: резкий рост 403 на странице оплаты почти всегда означает неудачное обновление правил. Раз в квартал проверяйте защиту сканером (например, OWASP ZAP) и тестовыми запросами с типичными нагрузками SQL-инъекций и XSS, чтобы убедиться, что фильтр действительно ловит то, что должен.

Обновляйте набор правил по расписанию, но сначала проверяйте новую версию на тестовом стенде или в режиме обнаружения, так как крупные релизы CRS меняют идентификаторы правил и ломают старые исключения.

Что даёт грамотно настроенный WAF

  1. 01

    Закрывает типовые атаки из OWASP Top 10, не дожидаясь исправления кода

  2. 02

    Выигрывает время при обнаружении новой уязвимости за счёт виртуального патчинга

  3. 03

    Снижает нагрузку на приложение, отсекая сканеры, парсеры и подбор паролей

  4. 04

    Даёт прозрачный журнал инцидентов для расследований и аудита безопасности

  5. 05

    Помогает соответствовать требованиям по защите персональных данных и платёжных реквизитов

  6. 06

    Сохраняет позиции в Яндексе и Google, если роботы поисковиков не блокируются

WAF — это дополнительный уровень защиты, а не замена безопасной разработки. Регулярно обновляйте CMS, плагины и зависимости, используйте минимальные права доступа, двухфакторную аутентификацию и резервные копии.

Итоги: как настроить WAF безопасно

Надёжный WAF — это не максимально строгие правила, а правила, подогнанные под ваше приложение и регулярно проверяемые.
  1. 01

    Выберите схему размещения и закройте прямой доступ к серверу

  2. 02

    Начните с режима обнаружения и первого уровня паранойи

  3. 03

    Разбирайте журнал и делайте точечные исключения вместо отключения правил

  4. 04

    Проверьте доступность сайта для роботов Яндекса и Google и следите за метриками

  5. 05

    Включайте блокировку поэтапно и поддерживайте правила в актуальном состоянии

Если у вас нет времени или опыта на тонкую настройку, доверьте первичный аудит и запуск специалистам: это дешевле, чем потеря заказов из-за ложных блокировок или последствий успешной атаки.

Часто задаваемые вопросы

Проверьте защиту сайта: настроим WAF без блокировки реальных клиентов

Проведём аудит правил, запустим фильтр в безопасном режиме и подготовим план перехода к блокировке

Бесплатный аудит правилТестовый режим без рисковОтчёт по срабатываниям

Настройка без простоев и потери трафика

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.