Перейти к содержанию

Тонкая настройка WAF‑ноды на основе Envoy

Для обработки входящих запросов используются фильтры, определенные в файле конфигурации Envoy. Фильтры описывают действия, которые нужно произвести над запросом. Например, фильтр envoy.http_connection_manager применяется для проксирования HTTP‑запросов. Этот фильтр имеет собственные HTTP‑фильтры, которые могут быть применены к запросу.

Модуль Валарм WAF реализован в виде HTTP‑фильтра Envoy. Все основные настройки WAF описываются в секции HTTP‑фильтра wallarm в файле envoy.yaml.

listeners:
   - address:
     filter_chains:
     - filters:
       - name: envoy.http_connection_manager
         typed_config:
           http_filters:
           - name: wallarm
             typed_config:
              "@type": type.googleapis.com/wallarm.Wallarm
              <конфигурация Валарм WAF>
              ...  

Включение обработки тела запроса

Чтобы модуль Валарм обрабатывал тело HTTP‑запроса, необходимо добавить в цепочку HTTP‑фильтров Envoy фильтр буферизации перед фильтром Валарм WAF. Например:

http_filters:
- name: envoy.buffer
  typed_config:
    "@type": type.googleapis.com/envoy.config.filter.http.buffer.v2.Buffer
    max_request_bytes: <максимальный размер запроса в байтах>
- name: wallarm
  typed_config:
    "@type": type.googleapis.com/wallarm.Wallarm
     <конфигурация модуля Валарм>
     ...

Если размер запроса превысит значение параметра max_request_bytes, запрос будет отброшен и Envoy вернет код ответа 413 («Payload Too Large»).

Настройки фильтрации запросов

Секция tsets фильтра Валарм WAF содержит параметры, которые относятся к настройкам фильтрации запросов:

tsets:
- name: ts0
  pdb: /etc/wallarm/proton.db
  lom: /etc/wallarm/lom
  key: /etc/wallarm/license.key
  ts_request_memory_limit: 0
  enable_libdetection: "on"
  ...
- name: tsN:
  ...

Где ts0 ... tsN — одна или несколько групп параметров. Имя группы может быть произвольным, на него можно ссылаться с помощью параметра ts секции conf. В конфигурации Валарм WAF должна присутствовать минимум одна группа (например, с именем ts0).

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

Уровень настройки

Секция описывается только на уровне фильтра Валарм WAF.

Параметр Описание Значение по умолчанию
pdb Путь к файлу proton.db. Этот файл содержит глобальные настройки фильтрации запросов, не зависящие от структуры веб‑приложения. /etc/wallarm/proton.db
lom Путь к файлу ЛОМ. Этот файл содержит информацию о защищаемом веб‑приложении и настройках WAF‑ноды. /etc/wallarm/lom
key Путь к файлу с лицензионным ключом Валарм. /etc/wallarm/license.key
ts_request_memory_limit Ограничение на максимальный объем памяти, который может быть использован одним экземпляром proton.db + lom. Если в процессе обработки какого-то запроса общий объем памяти будет превышен, то пользователю вернется ошибка 500. В значении можно использовать следующие суффиксы:
  • k или K для указания размера в килобайтах
  • m или M для указания размера в мегабайтах
  • g или G для указания размера в гигабайтах
Значение 0 отключает ограничения.
0
enable_libdetection Включает дополнительную валидацию обнаруженных атак типа SQL‑инъекций с использованием алгоритмов библиотеки libdetection. Если вредоносный пэйлоад не подтвердился, библиотека удаляет отметку об атаке. Такой подход позволяет снизить количество ложных срабатываний на атаки типа SQL‑инъекций.

По умолчанию библиотека выключена. Мы рекомендуем ее включить для более качественного обнаружения атак. Для этого необходимо передать в параметре значение on.

Обратите внимание, для корректной работы libdetection необходимо включить буферизацию тела запросов (фильтр envoy.buffer).

При анализе атак с помощью библиотеки libdetection возможно увеличение объема памяти, потребляемой процессами NGINX и Валарм, примерно на 10%.
off

Настройки модуля постаналитики

Секция tarantool фильтра Валарм WAF содержит параметры, которые относятся к модулю постаналитики:

tarantool:
  server:
  - uri: localhost:3313
    max_packets: 512
    max_packets_mem: 0
    reconnect_interval: 1

Где server — группа параметров, описывающая настройки сервера Tarantool.

Уровень настройки

Секция описывается только на уровне фильтра Валарм WAF.

Параметр Описание Значение по умолчанию
uri Строка с реквизитами для подключения к серверу Tarantool. Значение должно иметь формат IP‑адрес или имя:порт. localhost:3313
max_packets Ограничение на максимальное количество сериализованных запросов для отправки в Tarantool. Для отключения ограничения используйте значение 0. 512
max_packets_mem Ограничение на максимальный суммарный размер всех сериализованных запросов для отправки в Tarantool (в байтах). 0 (размер не ограничен)
reconnect_interval Интервал между попытками переподключения к серверу Tarantool (в секундах). Значение 0 означает, что попытка переподключения будет производиться как можно быстрее после обнаружения недоступности сервера (не рекомендуется). 1

Базовые настройки

Секция conf фильтра Валарм WAF содержит параметры, которые позволяют задать базовые настройки, влияющие на работу WAF‑ноды:

conf:
  ts: ts0
  mode: "monitoring"
  mode_allow_override: "off"
  instance: 42
  process_time_limit: 1000
  process_time_limit_block: "attack"
  request_memory_limit: 104857600
  wallarm_status: "off"
  wallarm_status_format: "json"
  parse_response: true
  unpack_response: true
  parse_html_response: true

Для гибкой настройки защиты, вы можете переопределить секцию на уровнях роутов (routes) и виртуальных хостов (virtual hosts) Envoy:

  • на уровне роутов:

    routes:
    - match:
      typed_per_filter_config:
        wallarm:
          "@type": type.googleapis.com/wallarm.WallarmConf
          <параметры секции>
    
  • на уровне хостов:

    virtual_hosts:
    - name: <имя виртуального хоста>
      typed_per_filter_config:
        wallarm:
          "@type": type.googleapis.com/wallarm.WallarmConf
          <параметры секции>
    

Настройки, заданные с помощью conf на уровне роутов, имеют приоритет над настройками на уровне виртуальных хостов. Настройки на уровне виртуальных хостов имеют приоритет над настройками фильтра Валарм WAF.

Параметр Описание Значение по умолчанию
ts Имя одной из групп параметров, определенных в секции tsets. Эта группа параметров задает настройки фильтрации запросов.
Если параметр опущен для секции conf фильтра Валарм WAF, то он должен обязательно присутствовать в переопределенных секциях conf на уровне роутов и виртуальных хостов.
-
mode Режим работы WAF‑ноды:
  • block, чтобы блокировать вредоносные запросы
  • safe_blocking, чтобы блокировать только те вредоносные запросы, которые отправлены с IP‑адресов из серого списка
  • monitoring, чтобы анализировать, но не блокировать запросы
  • off, чтобы не обрабатывать входящий трафик
Подробное описание режимов работы
block
mode_allow_override Позволяет переопределить режим фильтрации, заданный в параметре mode, через правила ЛОМ:
  • off: правила, заданные в ЛОМ, игнорируются
  • strict: с помощью ЛОМ можно только усилить режим фильтрации
  • on: можно как усиливать, так и смягчать режим фильтрации
Например, если с помощью mode задан режим фильтрации monitoring и mode_allow_override задан как strict, то с помощью ЛОМ можно включить блокировку определенных запросов (block), но нельзя полностью отключить анализ атак (off).
off
instance Уникальный идентификатор для обозначения защищенного приложения в Облаке Валарм. Значение может быть любым целым положительным числом, кроме 0.

Подробнее о настройке приложений →
-1
process_time_limit Ограничение времени обработки одного запроса (в миллисекундах). Если запрос не может быть обработан за заданное время, то в лог‑файл пишется ошибка, а запрос помечается как атака overlimit_res. 1000
process_time_limit_block Действие, которое должно быть выполнено, если запрос не был обработан за время, заданное в параметре process_time_limit:
  • off: запросы всегда пропускаются
  • on: запросы всегда блокируются.
  • attack: зависит от режима фильтрации, заданного параметром mode:
    • off: запросы не фильтруются
    • monitoring: запросы пропускаются
    • block: запросы блокируются
attack
wallarm_status Флаг для включения сервиса статистики WAF‑ноды. false
wallarm_status_format Формат статистики WAF‑ноды: json или prometheus. json
disable_acl Флаг для выключения анализа источников запросов на совпадение с данными из списков IP-адресов. Для выключения необходимо передать в директиве значение on. off
parse_response Флаг для включения / выключения анализа ответов приложения. Анализ ответов необходим для определения уязвимостей приложения с помощью пассивного обнаружения и активной проверки атак. Возможные значения: true, false соответственно. true
unpack_response Флаг для включения / выключения распаковки сжатых данных, полученных в ответе приложения. Возможные значения: true, false соответственно.

Параметр применяется, только если parse_response true.
true
parse_html_response Флаг для включения / выключения HTML‑парсера ответов приложения. Возможные значения: true, false соответственно.

Параметр применяется, только если parse_response true.
true