Тонкая настройка ноды Вебмониторэкс на основе NGINX¶
Официальная документация NGINX
Настройка Вебмониторэкс незначительно отличается от настройки NGINX, о которой рассказано в официальной документации. При работе с Вебмониторэкс доступны все возможности настройки оригинального веб-сервера NGINX.
Директивы Вебмониторэкс¶
disable_acl¶
Позволяет выключить анализ источников запросов на совпадение с данными из списков IP-адресов. Для выключения необходимо передать в директиве значение on
.
Замечание
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: off
(анализ источников запросов на совпадение с данными из списков IP-адресов включен).
wallarm_acl_access_phase¶
Используется для увеличения производительности ноды Вебмониторэкс. Задействуйте директиву, если в черный список добавлено много IP-адресов (например, несколько страны), с которых отправляется большое количество запросов, создавая существенную нагрузку на CPU рабочей машины ноды.
По умолчанию фильтрующая нода блокирует запросы с IP-адресов из черного списка после анализа запросов на признаки атак. Включение wallarm_acl_access_phase on
меняет операции местами, блокировка запросов при этом происходит сразу, без поиска атак. Это существенно снижает нагрузку на CPU ноды.
Значение по умолчанию и взаимодействие с другими директивами
Значение по умолчанию: off
- При
disable_acl on
обработка списков отключена и включениеwallarm_acl_access_phase
не имеет смысла. - Директива
wallarm_acl_access_phase
имеет приоритет надwallarm_mode
. Это означает, что нода будет блокировать запросы с IP-адресов из черного списка, даже если работает в режимеoff
илиmonitoring
.
wallarm_api_conf¶
Задаёт путь к файлу node.yaml
, содержащему реквизиты доступа к Вебмониторэкс API.
Пример:
wallarm_api_conf /etc/wallarm/node.yaml;
Используется для выгрузки сериализованных запросов из ноды Вебмониторэкс напрямую в Вебмониторэкс API (Вычислительный кластер) вместо выгрузки в модуль постаналитики (Tarantool).
В API попадают только запросы с атаками. Запросы без атак не сохраняются.
Пример содержимого файла node.yaml:
# Ваши учетные данные для подключения к API
hostname: <some name>
uuid: <some uuid>
secret: <some secret>
# Параметры подключения к API (указанные ниже используются по умолчанию)
api:
host: api.wallarm.ru
port: 444
ca_verify: true
Обратите внимание
Директива wallarm_api_conf
влияет на значение директивы wallarm_upstream_backend
.
Отправка сериализованных запросов возможна либо в модуль постаналитики, либо в Вебмониторэкс API.
Info
Параметр может настраиваться только в блоке http.
wallarm_application¶
Предыдущее название директивы
Название директивы до версии ноды 3.6 — wallarm_instance
. Если вы используете предыдущее название, рекомендуем изменить его при обновлении модулей. Поддержка wallarm_instance
скоро прекратится. Логика директивы не изменилась.
Уникальный идентификатор для обозначения защищенного приложения в Вычислительном кластере Вебмониторэкс. Значение может быть любым целым положительным числом, кроме 0
.
Вы можете задать уникальные идентификаторы как для приложений, доступных на отдельных доменах, так и для путей одного домена. Например:
Конфигурационный файл для домена example.com:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
...
wallarm_mode monitoring;
wallarm_application 1;
location / {
proxy_pass http://example.com;
include proxy_params;
}
}
Конфигурационный файл для домена test.com:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
...
wallarm_mode monitoring;
wallarm_application 2;
location / {
proxy_pass http://test.com;
include proxy_params;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
...
wallarm_mode monitoring;
location /login {
proxy_pass http://example.com/login;
include proxy_params;
wallarm_application 3;
}
location /users {
proxy_pass http://example.com/users;
include proxy_params;
wallarm_application 4;
}
}
Подробнее о настройке приложений →
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: -1
.
wallarm_block_page¶
Позволяет задать страницу и код ошибки, которые будут возвращены клиенту в ответ на заблокированный запрос.
Подробнее о настройке страницы блокировки и кода ошибки →
Info
Параметр может настраиваться в блоках http, server, location.
wallarm_block_page_add_dynamic_path¶
Используется для инициализации страницы блокировки, если внутри страницы используются переменные NGINX и путь до страницы блокировки также задан с помощью переменной. В остальных случаях директива не используется.
Подробнее о настройке страницы блокировки и кода ошибки →
Info
Директива wallarm_block_page_add_dynamic_path
может быть передана только в блоке http
конфигурационного файла NGINX.
wallarm_cache_path¶
Директория, в которой при запуске сервера NGINX будет создан каталог backup для хранения копии proton.db и файла индивидуального набора правил. У пользователя, от которого работает NGINX, должны быть права записи в эту директорию.
Info
Параметр может настраиваться только в блоке http.
wallarm_custom_ruleset_path¶
Путь к индивидуальному набору правил, содержащему информацию о защищаемом веб‑приложении и настройках ноды.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: /etc/wallarm/custom_ruleset
(до версии 3.6 — /etc/wallarm/lom
)
Предыдущее название директивы
Название директивы до версии ноды 3.6 — wallarm_local_trainingset_path
. Если вы используете предыдущее название, рекомендуем изменить его при обновлении модулей. Поддержка wallarm_local_trainingset_path
скоро прекратится. Логика директивы не изменилась.
wallarm_enable_libdetection¶
Включает дополнительную валидацию обнаруженных атак типа SQL‑инъекций с использованием алгоритмов библиотеки libdetection. Такой подход реализует двойное обнаружение атак и снижает количество ложных срабатываний.
По умолчанию анализ запросов с помощью libdetection отключен. Чтобы снизить количество ложных срабатываний, мы рекомендуем включить анализ (wallarm_enable_libdetection on
).
Подробнее о работе и тестировании библиотеки libdetection →
Для корректного анализа тела запросов с помощью libdetection, необходимо включить буферизацию тела запроса клиента (proxy_request_buffering on
).
Пример:
wallarm_enable_libdetection on;
proxy_request_buffering on;
Увеличение в количестве потребляемой памяти
При анализе атак с помощью библиотеки libdetection возможно увеличение объема памяти, потребляемой процессами NGINX и Вебмониторэкс, примерно на 10%.
Info
Параметр может настраиваться в блоках http, server, location.
Чтобы включить libdetection для Ingress‑контроллера Вебмониторэкс, необходимо применить аннотацию nginx.ingress.kubernetes.io/server-snippet
с этим параметром к Ingress.
Значение по умолчанию: off
.
wallarm_fallback¶
При значении on
NGINX получает возможность войти в аварийный режим: если proton.db/файл индивидуального набора правил загрузить невозможно, данная настройка отключает модуль Вебмониторэкс для блоков http, server, location, для которых данные не загрузились. Сам NGINX продолжит работать.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: on
.
wallarm_force¶
Задает анализ запросов и создание индивидуального набора правил на основе зеркалируемого трафика NGINX. Смотрите Анализ зеркалированного трафика с помощью NGINX.
wallarm_global_trainingset_path¶
Директива скоро устареет
Начиная с версии ноды 3.6, рекомендуем использовать аналогичную директиву wallarm_protondb_path
.
Директива wallarm_global_trainingset_path
временно поддерживается, но в будущих релизах поддержка прекратится. Если вы задавали собственное значение директивы, рекомендуем ее переименовать. Логика директивы не изменилась — достаточно изменить ее название.
wallarm_file_check_interval¶
Задает интервал для проверки новых записей в proton.db и индивидуальном наборе правил. Единица измерения интервала передается в суффиксе, как описано ниже:
-
Не указывается для минут.
-
s
- для секунд. -
ms
- для миллисекунд.
Info
Параметр может настраиваться только в блоке http.
Значение по умолчанию: 1
(1 минута)
wallarm_instance¶
Директива скоро устареет
Начиная с версии ноды 3.6, рекомендуем использовать аналогичную директиву wallarm_application
.
Директива wallarm_instance
временно поддерживается, но в будущих релизах поддержка прекратится. Если вы задавали собственное значение директивы, рекомендуем ее переименовать. Логика директивы не изменилась — достаточно изменить ее название.
wallarm_key_path¶
Путь к лицензионному ключу Вебмониторэкс.
Info
Значение по умолчанию: /etc/wallarm/license.key
wallarm_local_trainingset_path¶
Директива скоро устареет
Начиная с версии ноды 3.6, рекомендуем использовать аналогичную директиву wallarm_custom_ruleset_path
.
Директива wallarm_local_trainingset_path
временно поддерживается, но в будущих релизах поддержка прекратится. Если вы задавали собственное значение директивы, рекомендуем ее переименовать. Логика директивы не изменилась — достаточно изменить ее название.
wallarm_mode¶
Режим фильтрации трафика:
-
off
-
monitoring
-
safe_blocking
-
block
Поведение ноды Вебмониторэкс | off | monitoring | safe_blocking | block |
---|---|---|---|---|
Анализирует запросы на признаки атак на проверку данных, атак типа vpatch, атак на основе регулярных выражений | - | + | + | + |
Выгружает запросы с признаками атак (вредоносные запросы) в Вычислительный кластер Вебмониторэкс, впоследствии они отображаются в списке событий | - | + | + | + |
Блокирует вредоносные запросы | - | - | Только если они отправлены с IP‑адресов из серого списка | + |
Блокирует запросы с IP‑адресов из черного спискасм. исключения | Не проверяет черный список | - | + | + |
Блокирует запросы с IP‑адресов из серого списка | Не проверяет серый список | - | Только если они содержат признаки атак | Не проверяет серый список |
Пропускает запросы с IP‑адресов из белого списка | Не проверяет белый список | + | + | + |
Исключения
Если wallarm_acl_access_phase on
, запросы с IP-адресов из черного списка блокируются в любых режимах, в том числе off
и monitoring
.
На возможности работы wallarm_mode
влияет значение директивы wallarm_mode_allow_override
.
Подробная инструкция по настройке режима фильтрации →
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: зависит от формы установки ноды Вебмониторэкс (off
или monitoring
).
wallarm_mode_allow_override¶
Управляет возможностью переопределять значение директивы wallarm_mode
через правила, выгружаемые из Вычислительного кластера (индивидуальный набор правил):
off
- индивидуальный набор правил игнорируется.strict
- посредством индивидуального набора правил можно только усилить режим работы.on
- можно как усиливать, так и смягчать режим работы.
Например, если задано wallarm_mode monitoring
и wallarm_mode_allow_override strict
, то через Консоль управления Вебмониторэкс можно включить блокировку запросов, но нельзя полностью отключить их анализ.
Подробная инструкция по настройке режима фильтрации →
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: on
wallarm_parse_response¶
Флаг для включения / выключения анализа ответов приложения. Анализ ответов необходим для определения уязвимостей приложения с помощью пассивного обнаружения и активной проверки атак. Возможные значения: on
, off
соответственно.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: on
Увеличьте производительность
Рекомендуется отключать обработку статических файлов через location для увеличения производительности.
wallarm_parse_websocket¶
Вебмониторэкс — один из первых продуктов с полной поддержкой WebSockets. По умолчанию сообщения WebSockets не анализируются на предмет атак, этот анализ необходимо принудительно включить с помощью директивы wallarm_parse_websocket
.
Возможные значения:
on
: анализ сообщений включен.off
: анализ сообщений не производится.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: off
wallarm_parser_disable¶
Позволяет отключать парсеры.
В настоящее время поддерживаются следующие парсеры:
cookie
zlib
htmljs
json
multipart
base64
percent
urlenc
xml
Пример
wallarm_parser_disable base64;
wallarm_parser_disable xml;
location /ab {
wallarm_parser_disable json;
wallarm_parser_disable base64;
proxy_pass http://example.com;
}
location /zy {
wallarm_parser_disable json;
proxy_pass http://example.com;
}
Info
Параметр может настраиваться в блоках http, server, location.
wallarm_parse_html_response¶
Флаг для включения / выключения HTML‑парсера ответов приложения. Возможные значения: on
, off
соответственно.
Директива применяется, только если wallarm_parse_response on
.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: on
wallarm_stalled_worker_timeout¶
Ограничение времени обработки одного запроса рабочим процессом NGINX. Значение задается в секундах.
Если запрос обрабатывается дольше указанного времени, информация о рабочих процессах NGINX записывается в параметры статистики stalled_workers_count
и stalled_workers
.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: 5
(5 секунд)
wallarm_process_time_limit¶
Директива скоро устареет
Начиная с версии 3.6, рекомендуется настраивать обнаружение атак типа overlimit_res
с помощью правила Настроить обработку атак типа overlimit_res в Консоли управления.
Директива wallarm_process_time_limit
временно поддерживается, но в будущих релизах поддержка прекратится.
Ограничение на время обработки одного запроса нодой Вебмониторэкс.
Если запрос обрабатывается дольше заданного лимита, в лог записывается ошибка и запрос помечается как атака overlimit_res
. В зависимости от значения wallarm_process_time_limit_block
, нода блокирует, регистрирует или игнорирует атаку.
Значение задается в миллисекундах, единица измерения не указывается. Например:
wallarm_process_time_limit 1200; # 1200 миллисекунд
wallarm_process_time_limit 2000; # 2000 миллисекунд
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: 1000 мс (одна секунда).
wallarm_process_time_limit_block¶
Директива скоро устареет
Начиная с версии 3.6, рекомендуется настраивать обнаружение атак типа overlimit_res
с помощью правила Настроить обработку атак типа overlimit_res в Консоли управления.
Директива wallarm_process_time_limit_block
временно поддерживается, но в будущих релизах поддержка прекратится.
Возможность управлять блокировкой запросов, превысивших лимит времени, заданный в параметре wallarm_process_time_limit
.
-
off
: запросы всегда пропускаются.Риск обхода защиты
Значение
off
следует использовать с осторожностью, так как оно отключает защиту от атакoverlimit_res
.Рекомендуется устанавливать значение
off
только для определенных location, где это действительно необходимо и нет риска обхода защиты и эксплуатации уязвимостей. Например: для location, где происходит загрузка больших файлов.Категорически не рекомендуется устанавливать значение
off
глобально (на уровне контекста http). -
on
: запросы всегда блокируются, но приwallarm_mode off
пропускаются. attack
: зависит от режима блокировки атаки, заданного в параметреwallarm_mode
:off
: запросы не фильтруются.monitoring
: запросы пропускаются, но информация об атакеoverlimit_res
выгружается в Вычислительный кластер Вебмониторэкс и отображается в Консоли управления.safe_blocking
: запросы с IP-адресов из серого списка блокируются. Остальные запросы пропускаются, но информация об атакеoverlimit_res
выгружается в Вычислительный кластер Вебмониторэкс и отображается в Консоли управления.block
: запросы блокируются.
Вне зависимости от значения директивы все запросы с типом атаки overlimit_res
выгружаются в Вычислительный кластер Вебмониторэкс. Исключение — если wallarm_mode off;
, тогда запросы с любым типом атаки не выгружаются в Вычислительный кластер.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: wallarm_process_time_limit_block attack
wallarm_request_memory_limit¶
Ограничение на максимальный объем памяти, который может быть использован в процессе анализа одного запроса.
При превышении значения анализ запроса будет прерван, пользователю вернется ошибка 500.
В значении можно использовать следующие суффиксы:
-
k
илиK
для указания размера в килобайтах -
m
илиM
для указания размера в мегабайтах -
g
илиG
для указания размера в гигабайтах
Значение 0
отключает ограничения.
По умолчанию ограничение отключено.
Info
Параметр может настраиваться в блоках main, http, server, location.
wallarm_proton_log_mask_master¶
Настройки отладочного логирования Вебмониторэкс при работе master-процесса NGINX.
Настройка директивы
Эта директива предназначена для служебного использования.
Ее необходимо настроить только если вас попросит об этом сотрудник технической поддержки Вебмониторэкс. В этом случае вам также будет предоставлено значение, которое необходимо задать для директивы.
Info
Параметр может настраиваться на уровне main.
wallarm_proton_log_mask_worker¶
Настройка отладочного логирования Вебмониторэкс при работе worker-процесса NGINX.
Настройка директивы
Эта директива предназначена для служебного использования.
Ее необходимо настроить только если вас попросит об этом сотрудник технической поддержки Вебмониторэкс. В этом случае вам также будет предоставлено значение, которое необходимо задать для директивы.
Info
Параметр может настраиваться на уровне main.
wallarm_protondb_path¶
Путь к файлу proton.db, содержащему глобальные настройки фильтрации запросов, не зависящие от структуры веб‑приложения.
Замечание
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: /etc/wallarm/proton.db
Предыдущее название директивы
Название директивы до версии ноды 3.6 — wallarm_global_trainingset_path
. Если вы используете предыдущее название, рекомендуем изменить его при обновлении модулей. Поддержка wallarm_global_trainingset_path
скоро прекратится. Логика директивы не изменилась.
wallarm_request_chunk_size¶
Ограничивает размер части параметра, обрабатываемой за одну итерацию. Вы можете установить собственное значение директивы wallarm_request_chunk_size
в байтах, присвоив ей числовое значение. Директива также поддерживает значения с постфиксами:
-
k
илиK
для указания размера в килобайтах -
m
илиM
для указания размера в мегабайтах -
g
илиG
для указания размера в гигабайтах
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: 8k
(8 килобайт).
wallarm_tarantool_upstream¶
Директива для задания адресов серверов. При помощи директивы wallarm_tarantool_upstream
вы можете распределять запросы между несколькими серверами постаналитки.
Пример использования:
upstream wallarm_tarantool {
server 127.0.0.1:3313 max_fails=0 fail_timeout=0 max_conns=1;
keepalive 1;
}
# omitted
wallarm_tarantool_upstream wallarm_tarantool;
Смотрите также Модуль ngx_http_upstream_module.
Необходимые условия
Для параметров max_conns
и keepalive
необходимо соблюдать следующие условия:
- Значение
keepalive
должно быть не меньше, чем количество серверов Tarantool. - Значение
max_conns
должно быть указано для каждого сервера, чтобы предотвратить создание лишних соединений.
Info
Параметр может настраиваться только в блоке http.
wallarm_timeslice¶
Ограничение времени одной итерации обработки запроса нодой Вебмониторэкс до переключения на следующий запрос. По достижению этого лимита времени нода Вебмониторэкс перейдет к обработке следующего запроса в очереди. После совершения одной итерации обработки для всех других запросов очередь снова перейдет к первому запросу.
Вы можете использовать суффиксы интервалов времени, описанные в документации NGINX, для задания различных единиц времени в качестве значения директивы.
Info
Параметр может настраиваться в блоках http, server, location.
Значение по умолчанию: 0
(временное ограничение на одну итерацию обработки выключено).
Warning
В связи с ограничениями сервера NGINX, для работы директивы wallarm_timeslice
необходимо отключить буферизацию запросов. Для этого установите значение off
в директиве NGINX proxy_request_buffering
.
wallarm_ts_request_memory_limit¶
Ограничение на максимальный объем памяти, который может быть использован одним экземпляром "proton.db + файл индивидуального набора правил".
Если в процессе обработки какого-то запроса общий объем памяти будет превышен, то пользователю вернется ошибка 500.
В значении можно использовать следующие суффиксы:
-
k
илиK
для указания размера в килобайтах -
m
илиM
для указания размера в мегабайтах -
g
илиG
для указания размера в гигабайтах
Значение 0
отключает ограничения.
Info
Параметр может настраиваться в блоках main, http, server, location.
Значение по умолчанию: 1 ГБ
wallarm_unpack_response¶
Флаг для включения / выключения распаковки сжатых данных, полученных в ответе приложения. Возможные значения: on
, off
соответственно.
Директива применяется, только если wallarm_parse_response on
.
Info
Значение по умолчанию: on
.
wallarm_upstream_backend¶
Задаёт способ отправки сериализованных запросов – запросы можно отправлять либо в Tarantool, либо в API.
Возможные значения директивы:
-
tarantool
-
api
Значения по умолчанию в зависимости от других директив:
-
tarantool
- в конфигурации нет директивыwallarm_api_conf
. -
api
- в конфигурации есть директиваwallarm_api_conf
, но отсутствуетwallarm_tarantool_upstream
.Обратите внимание
Если в конфигурации одновременно присутствуют директивы
wallarm_api_conf
иwallarm_tarantool_upstream
– возникнет ошибка конфигурации вида directive ambiguous wallarm upstream backend.
Info
Параметр может настраиваться только в блоке http.
wallarm_upstream_connect_attempts¶
Задаёт количество немедленных попыток повторного соединения с Tarantool или Вебмониторэкс API.
Если соединение с Tarantool или API прерывается, то попытки повторного соединения не происходит, кроме случая, когда соединений больше не остаётся, а очередь сериализованных запросов не пуста.
Info
Повторное соединение может происходить с другим сервером, т.к. за выбор сервера ответственна подсистема upstream.
Параметр может настраиваться только в блоке http.
wallarm_upstream_reconnect_interval¶
Задает интервал между попытками переподключения к Tarantool или Вебмониторэкс API после того, как количество неудачных попыток превысило порог wallarm_upstream_connect_attempts
.
Info
Параметр может настраиваться только в блоке http.
wallarm_upstream_connect_timeout¶
Задает время таймаута на подключение к Tarantool или Вебмониторэкс API.
Info
Параметр может настраиваться только в блоке http.
wallarm_upstream_queue_limit¶
Задает лимит на количество сериализованных запросов.
Установка параметра wallarm_upstream_queue_limit
и отсутствие параметра wallarm_upstream_queue_memory_limit
означает отсутствие лимита по последнему.
Info
Параметр может настраиваться только в блоке http.
wallarm_upstream_queue_memory_limit¶
Задает лимит на суммарный объём сериализованных запросов.
Установка параметра wallarm_upstream_queue_memory_limit
и отсутствие параметра wallarm_upstream_queue_limit
означает отсутствие лимита по последнему.
Info
Значение по умолчанию: 100m
.
Параметр может настраиваться только в блоке http.