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

Тонкая настройка 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
  ...
- 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

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

Секция 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

Настройка блокировки запросов по IP‑адресам

Секция acls фильтра Валарм WAF содержит настройки для блокировки запросов по IP‑адресам:

acls:
  - name: acl0
    path: acl0
    mapsize: 1000000
    ...
  - name: aclN
...

Где acl0 ... aclN — одна или несколько групп параметров. Имя группы может быть произвольным, на него можно ссылаться с помощью параметра acl секции conf.

Параметр Описание Значение по умолчанию
path Директория, которая будет использована для сохранения состояния ACL. -
mapsize Начальный размер памяти, который будет выделен для соответствующего ACL. При достижении ограничения память будет автоматически выделена заново, но API-запрос, пытавшийся изменить ACL и вызвавший превышение, завершится с ошибкой и его необходимо будет повторить. -

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

Секция 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"
  acl: acl0

Для гибкой настройки защиты, вы можете переопределить секцию на уровнях роутов (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, чтобы блокировать вредоносные запросы
  • monitoring, чтобы анализировать, но не блокировать запросы
  • off, чтобы не обрабатывать входящий трафик
block
mode_allow_override Позволяет переопределить режим фильтрации, заданный в параметре mode, через правила ЛОМ:
  • off: правила, заданные в ЛОМ, игнорируются
  • strict: с помощью ЛОМ можно только усилить режим фильтрации
  • on: можно как усиливать, так и смягчать режим фильтрации
Например, если с помощью mode задан режим фильтрации monitoring и mode_allow_override задан как strict, то с помощью ЛОМ можно включить блокировку определенных запросов (block), но нельзя полностью отключить анализ атак (off).
off
instance Идентификатор приложения. Используется для визуального отделения данных разных приложений на дэшборде портала Валарм. Допустимы только числовые значения.
Идентификаторы приложения используются исключительно для удобства просмотра. Для корректной сепарации данных по приложениям необходимо установить те же значения идентификаторов в визуальном интерфейсе.
Любая WAF‑нода будет фильтровать трафик для любого количества приложений без дополнительной настройки.
-
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
acl Имя одной из групп параметров, определенных в секции acls. Эта группа параметров задает настройки блокировки запросов по IP‑адресам.
Если параметр опущен для секции conf фильтра Валарм WAF, то он должен обязательно присутствовать в переопределенных секциях conf на уровне роутов и виртуальных хостов.
-