
Никто не хочет покупать кота в мешке, особенно когда речь идет о дорогостоящих ИБ-решениях. Поэтому сделке и интеграции часто предшествует пилотный проект. Казалось бы, что может быть проще: поставил СЗИ, посмотрел пару недель, как оно работает и принял решение о покупке (или не принял). На практике же после пилота иногда повисает «неловкая пауза»: заказчик не понимает, как ему оценить результаты теста, а вендор – как дальше защищать свой продукт, потому что вводных от заказчика было ничтожно мало. Итог может быть печальным для всех. Вендор уйдет без клиента, а потенциальный заказчик – без киберзащиты. Поэтому, чтобы недели (а иногда и месяцы) не прошли даром, к пилоту надо хорошо подготовиться. Особенно если речь идет о сложных системах, таких как межсетевой экран веб-приложений (WAF). Поскольку WAF – это полноценный участник архитектуры, он требует правильной интеграции с защищаемыми приложениями, балансировщиками нагрузки и другими системами в инфраструктуре заказчика. Давайте посмотрим на каждый этап пилота отдельно.
Что именно «пилотим»?
Для начала надо определиться со списком приложений, которые будут заведены за WAF в рамках пилотного тестирования. Не пытайтесь защитить всё и сразу: для пилота лучше ограничиться двумя критичными приложениями. Это должны быть реальные приложения с реальными пользователями, ведь без этого невозможно определить, как WAF держит нагрузку, какую задержку трафика вносит и, главное, не блокирует ли легитимных пользователей из-за ложных срабатываний (и насколько просто создавать исключения для фолзов).
Каждое веб-приложение при этом стоит подробно описать:
доменное имя (FQDN);
IP-адрес(а) backend-серверов;
используемые порты;
протоколы (HTTP / HTTPS);
необходимость TLS / mTLS;
тип приложения (web, API, mobile backend и т.д.).
WAF – это не чёрный ящик, а «прозрачный посредник», которому нужно точно знать маршрут. Большинство задержек и сбоев на пилоте происходят именно на этапе «а куда вообще слать трафик?». Поэтому заранее собранные параметры экономят часы и даже дни.
Современные приложения используют разные протоколы (а не только HTTP) и надо понять, умеет ли WAF в принципе работать с этим разнообразием. Поэтому для защищаемых ресурсов надо прописать:
использование дополнительных протоколов, например, WebSocket / HTTP2 / gRPC;
наличие REST / SOAP / GraphQL API;
особенности аутентификации (JWT, OAuth, cookies, custom headers);
загрузка файлов (multipart/form-data);
нестандартные HTTP-методы;
чувствительность к изменению заголовков, задержкам, блокировке отдельных запросов;
наличие собственных механизмов rate limiting или защиты.
Определившись с основными характеристиками приложений, надо понять какой объем трафика придётся фильтровать WAF. Исходя из этого можно понять, объем железа, необходимого для развертывания и работы решения на стороне заказчика. Если ресурсов недостаточно, то WAF не будет успевать обрабатывать запросы, что увеличит задержки и скорость ответа пользователям веб-приложения. Для сайзинга большинства WAF достаточно следующих параметров:
средний и пиковый RPS;
объем трафика (Mbps / Gbps);
Архитектура и схема включения WAF
Итак, с приложениями и трафиком – понятно. Самое время определить архитектуру и место, куда будет интегрирован WAF. Современные веб-приложения имеют многоуровневую и распределённую архитектуру: балансировщики нагрузки, reverse proxy, web-серверы и backend-сервисы. На каждом из этих уровней могут применяться решения, влияющие на обработку трафика, терминацию TLS, маршрутизацию запросов и передачу клиентских данных.
И WAF должен вписаться в эту цепочку органично. Поэтому важно понимать фактическую архитектуру приложения, его сетевую топологию и особенности взаимодействия компонентов. Это помогает:
выбрать оптимальное место установки WAF;
корректно определить точку терминации TLS;
обеспечить прозрачную интеграцию без влияния на работу приложения;
избежать дополнительных доработок и изменений в ходе пилота.
Типовая архитектура веб-приложения выглядит так:

Куда в таком случае можно установить WAF:
WAF перед LB (User → WAF → LB → App)
WAF за LB (User → LB → WAF → App)
WAF в качестве LB (User → WAF → App)
WAF интегрируется в LB / Web Servers (модуль для nginx/angie)
Какой вариант интеграции WAF выбрать, зависит как от текущей архитектуры заказчика, так и от характеристик решения выбранного вендора. Поэтому идеальной будет та схема, которая учитывает все эти особенности.
Важные детали
№1. Точка терминации TLS
Почти весь современный веб-трафик зашифрован (HTTPS/TLS). Если WAF его не расшифрует, то будет видеть только IP-адреса и заголовки без содержания запросов. Чтобы трафик не превратился в черный ящик, на этапе подготовки пилота необходимо выбрать точку разрыва соединения (терминации).
Вариант А: TLS терминируется на WAF. Тогда потребуется загрузка серверных сертификатов и закрытых ключей в WAF.
Вариант Б: TLS терминируется до WAF (на существующем LB/proxy-сервере). WAF получает уже расшифрованный трафик.
В зависимости от выбранной схемы придется менять конфигурацию балансировщиков, backend-приложений или DNS-записей.
Кроме того, надо учитывать, что может потребоваться и повторное шифрование трафика от WAF к защищаемым приложениям, в том числе, и mTLS. В таком случае потребуется выпуск новых сертификатов и/или добавление корпоративного УЦ в список доверенных на узлах WAF.
№2 Проблема клиентского IP
Если WAF стоит за балансировщиком, критически важно обеспечить передачу реального IP-адреса клиента. Иначе:
Снижается эффективность защитных механизмов.
Не работает rate limiting (все запросы будут с IP балансировщика).
Логи становятся бесполезными для расследования инцидентов.
Что нужно согласовать:
Механизм передачи от LB к WAF: HTTP-заголовки (X-Forwarded-For, X-Real-IP, Forwarded) или прокси-протокол.
Доверенные подсети: WAF должен знать, от каких IP принимать эти заголовки.
Передача от WAF к Backend: backend тоже должен видеть реальный IP. Возможно, потребуется добавить IP-адреса нод WAF в список доверенных на стороне backend.
Обеспечение сетевой связности и доступов
Скорее всего, в сети заказчика есть сегментация и межсетевое экранирование. С развёртыванием WAF в инфраструктуре появляется новый хост, а значит, надо обеспечить его связанность с другими компонентами приложения, добавив правила в файрволлы и согласовав необходимые сетевые доступы.
Таблица доступов может выглядеть следующим образом:
Источник | Получатель | Порт | Протокол | Комментарий |
АРМ администратора | Веб-консоль управления WAF | 443 | TCP | Доступ администратора к веб-консоли |
АРМ администратора | Хост, на котором установлены компоненты WAF | 22 | TCP | Доступ администратора по SSH |
АРМ пользователей системы | Веб-консоль управления WAF | 443 | TCP | Доступ пользователей |
Компонент WAF №1 | Компонент WAF №2 | XXX | TCP | Современные WAF имеют микросервисную архитектуру, поэтому разные компоненты системы (узлы обработки трафика, управляющие узлы, базы данных и т.п.) могут быть развернуты на разных серверах. |
Также уточните требования к прокси, если в вашей инфраструктуре ограничен прямой выход в интернет. Это нужно, чтобы WAF смог обновлять свои компоненты и базы знаний.
Организационные вопросы и роли
Техника – это половина дела. Вторая половина – это люди и процессы. Обычно пилотом занимается команда ИБ, но на деле оказывается, что к этому процессу привлекают специалистов из других отделов.
Роли со стороны заказчика:
Владелец приложения или сервиса (который разрешает пилот, согласует downtime, оценивает влияние на бизнес).
Специалисты ИТ-инфраструктуры и сетевые инженеры (чтобы предоставили вычислительные ресурсы и организовали сетевую связанность).
Команда разработки (чтобы проверить, что WAF ничего не сломал или для настройки backend, если нужно).
Специалисты по ИБ (тут и так понятно).
Что согласовать до старта:
Cроки и план проведения пилота.
Необходимость подписания NDA.
Предоставление удаленного доступа инженерам вендора и/или интегратора (если требуется).
Процесс внесения изменений в инфраструктуру (Change Management).
Контактных лиц для оперативного взаимодействия и порядок эскалации инцидентов.
Критерии успешности пилота
Представьте: вы 2 месяца пилотировали WAF, привлекли коллег из смежных отделов помимо ИБ, потратили время и силы своих сотрудников. А в итоге не понимаете, как оценить результат. Вроде, все работает, деградации приложений нет, какие-то атаки за время пилота даже удалось отразить – успешен ли этот пилот и достаточно ли аргументов, чтобы закупить решение?
Чтобы деньги и силы не были потрачены впустую, мы советуем заранее определить критерии, по которым пилот будет считаться успешным. Например:
отсутствие негативного влияния на доступность приложений;
корректная обработка легитимного трафика;
обнаружение и/или блокировка тестовых атак;
удобство эксплуатации и администрирования;
качество отчетности и логирования.
Оценка эффективности пилота заслуживает отдельной статьи, так как уместить все детали в одну небольшую главу текста невозможно. Подробно о критериях успеха пилота мы расскажем в следующем посте, который выйдет совсем скоро.
Автор: Владимир Гриднев, заместитель генерального директора по развитию бизнеса WMX
