Тонкая настройка конфигурации Валарм

Официальная документация NGINX

Настройка Валарм не значительно отличается от настройки NGINX, о которой рассказано в официальной документации. При работе с Валарм доступны все возможности настройки оригинального веб-сервера NGINX.

Переменные Валарм

Имя Тип Значение
wallarm_request_time Число с плавающей точкой Время выполнения запроса в секундах
wallarm_serialized_size Целое число Размер сериализованного запроса в байтах
wallarm_is_input_valid Целое число Валидность запроса
0: запрос валиден. Запрос проверен фильтрующим узлом и соответствует правилам ЛОМ.
1: запрос невалиден. Запрос проверен фильтрующим узлом и не соответствует правилам ЛОМ.
wallarm_attack_type Целое число Типы атак, представленные в запросе в виде битовой строки
0x00000000: отсутствие атаки: "0"
0x00000001: флаг агрессивного режима: "1"
0x00000002: xss: "2"
0x00000004: sqli: "4"
0x00000008: rce: "8"
0x00000010: xxe: "16"
0x00000020: ptrav: "32"
0x00000040: crlf: "64"
0x00000080: redir: "128"
0x00000100: nosqli: "256"
0x00000200: infoleak: "512"
0x00000400: brute: "1024"
0x00000800: dirbust: "2048"
0x00001000: marker: "4096"
0x20000000: overlimit_res: "536870912"
0x40000000: zip_bomb: "1073741824"
0x80000000: vpatch: "2147483648"

Пример использования:

log_format wallarm_combined         '$remote_addr - $remote_user [$time_local] '
                                    '"$request" $status $body_bytes_sent '
                                    '"$http_referer" "$http_user_agent"'
                                    ' attack: "$wallarm_attack_type"';

access_log /var/log/nginx/wallarm.log  wallarm_combined if=$wallarm_attack_type;

Директивы Валарм

wallarm_acl

Позволяет ограничить доступ к ресурсам при наличии IP-адреса запроса в указанном ACL.

Заданный ACL должен быть объявлен с помощью директивы wallarm_acl_db.

Можно использовать директиву satisfy для установки ограничений одновременно как с помощью ACL, так и с помощью других модулей Nginx, например, ngx_http_access_module.

Значение off отключает проверку ACL.

Пример использования:

satisfy any;

wallarm_acl wapi;

allow 1.2.3.4/0;
deny all;

Параметр может настраиваться в секциях http, server, location.

wallarm_acl_api

Location, где использована эта директива, можно использовать для управления содержимым ACL.

Пример использования:

location /wallarm-acl {
  allow 127.0.0.1;
  deny all;

  wallarm_acl wapi;
  wallarm_acl_api on;
}

Параметр может настраиваться в секциях http, server, location.

wallarm_acl_db

Позволяет объявить и настроить базу ACL для ограничения доступа по IP-адресам.

Пример использования:

wallarm_acl_db wapi {
  wallarm_acl_path /var/cache/nginx/wallarm/acl/wapi;
}

Параметр может настраиваться только на уровне main.

wallarm_acl_mapsize

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

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

Параметр может настраиваться только внутри секции wallarm_acl_db.

wallarm_acl_path

Позволяет задать директорию, которая будет использована для сохранения состояния ACL.

Параметр может настраиваться только внутри секции wallarm_acl_db.

wallarm_block_page

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

Для возвращения заранее заданной страницы в ответ на запрос от заблокированного пользователя:

  1. Создайте страницу и сохраните ее на сервере. Например, страницу block.html;
  2. В конфигурационном файле добавьте директиву wallarm_block_page и укажите путь к странице: wallarm_block_page /path/block.html.

    Теперь в качестве ответа на запрос заблокированному пользователю будет возвращаться страница block.html.

Для применения заранее заданной конфигурации location при блокировании запроса:

  1. В конфигурационном файле укажите директиву wallarm_block_page с конфигурацией location;
  2. Поместите желаемое сообщение о блокировке в блок location. Например:

     wallarm_block_page @block;
     location @block {'The page is blocked!';}
    

    Страница будет заблокирована с сообщением The page is blocked.

Для возвращения динамической страницы блокировки:

  1. Создайте шаблон для возвращаемой страницы блокировки и сохраните ее на машине, на которой запущен nginx. Вы также можете использовать шаблон, который Валарм предоставляет Вам по умолчанию;

    Включение переменной nginx в шаблон страницы блокировки

    Вы можете включить переменные nginx в шаблон для динамического отображения значений этой переменной на странице блокировки. Для этого вставьте в шаблон имя переменной, начинающееся с символа $.

  2. В конфигурационном файле добавьте директиву wallarm_block_page и укажите путь к файлу шаблона в файловой системе, начинающийся с символа &.

wallarm_cache_path

Директория, в которой при запуске сервера NGINX будет создан каталог backup для хранения копии proton.db и ЛОМ. У пользователя, от которого работает NGINX, должны быть права записи в эту директорию.

Параметр может настраиваться только на уровне HTTP.

wallarm_fallback

При значении on NGINX получает возможность войти в аварийный режим: при невозможности загрузить proton.db/lom данная настройка отключает модуль Валарм для блоков http, server, location, для которых данные не загрузились. Сам NGINX продолжит работать.

Параметр может настраиваться на уровнях http, server, location.

wallarm_force

Задает анализ запросов и создание правил ЛОМ на основе зеркалируемого трафика NGINX. Смотрите Анализ зеркалированного трафика с помощью NGINX.

wallarm_global_trainingset_path

Путь к файлу proton.db, содержащему глобальные настройки фильтрации запросов, не зависящие от структуры веб-приложения.

Замечание

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: /etc/wallarm/proton.db

wallarm_instance

Идентификатор приложения. Используется для визуального отделения данных разных приложений на панели Главная. Допустимы только числовые значения.

Идентификаторы приложения используются исключительно для удобства просмотра. Для корректной сепарации данных по приложениям необходимо установить те же значения идентификаторов в визуальном интерфейсе.

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

Параметр может настраиваться на уровнях http, server, location.

wallarm_key_path

Путь к лицензионному ключу Валарм.

Значение по умолчанию: /etc/wallarm/license.key

wallarm_local_trainingset_path

Путь к ЛОМ, содержащему информацию о защищаемом веб-приложении и настройках ноды.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: /etc/wallarm/lom

wallarm_mode

Режимы фильтрации трафика:

  • off: фильтрация запросов не производится.
  • monitoring: все запросы обрабатываются, но никакие не блокируются даже при обнаружении атак.
  • block: блокируются все запросы, в которых была распознана типизированная атака.
  • aggressive: блокируются все нестандартные запросы. Например, передача строки в поле, в которое обычно передается число. Рекомендуется использовать крайне осторожно.

В качестве значения директивы можно использовать переменные, доступные после получения строки запроса и заголовков. Это можно использовать для применения разных политик для разных клиентов.

map $remote_addr $wallarm_mode_real {
    default block;
    1.1.1.1/24 monitoring;
    2.2.2.2 off;
}
...

wallarm_mode $wallarm_mode_real;

Пример настройки режимов фильтрации трафика с подробным описанием доступен по ссылке.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: off

На возможности работы wallarm_mode влияет значение директивы wallarm_mode_allow_override.

wallarm_mode_allow_override

Управляет возможностью переопределять значение директивы wallarm_mode через правила, выгружаемые из облака (ЛОМ):

  • off: правила, заданные в ЛОМ, игнорируются.
  • strict: посредством ЛОМ можно только усилить режим работы.
  • on: можно как усиливать, так и смягчать режим работы.

Например, если задано wallarm_mode monitoring и wallarm_mode_allow_override strict, то через облако можно включить блокировку каких-то запросов, но нельзя полностью отключить анализ атак.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: on

wallarm_parse_response

Режим обработки ответов веб-сервера. По умолчанию обрабатываются только запрос от клиента к веб-серверу.

Возможные значения:

  • on: анализ ответов веб-сервера пассивным сканером уязвимостей (без отправки запросов из облака Валарм).
  • off: анализ ответов не производится.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: on


Увеличьте производительность

Рекомендуется отключать обработку статических файлов через Location для увеличения производительности.


wallarm_parse_websocket

Валарм — один из первых продуктов с полной поддержкой WebSockets. По умолчанию сообщения WebSockets не анализируются на предмет атак, этот анализ необходимо принудительно включить с помощью директивы wallarm_parse_websocket.

Возможные значения:

  • on: анализ сообщений включен.
  • off: анализ сообщений не производится.

Параметр может настраиваться на уровнях 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;
}

Параметр может настраиваться на уровнях http, server, location.

wallarm_process_time_limit

Ограничение времени обработки одного запроса, значение задается в миллисекундах.

Если запрос обрабатывается дольше, чем время, указанное в параметре wallarm_process_time_limit, то в лог пишется ошибка, а запрос помечается как атака overlimit_res. В режиме блокировки (wallarm_mode block;) запросы блокируются, в режиме мониторинга (wallarm_mode monitoring;) - пропускаются.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: 1000 мс (одна секунда).

wallarm_process_time_limit_block

Возможность управлять блокировкой запросов, превысивших лимит времени, заданный в параметре wallarm_process_time_limit.

  • off: запросы всегда пропускаются.
  • on: запросы всегда блокируются.
  • attack: зависит от режима блокировки атаки, заданного в параметре wallarm-mode (monitoring: запросы пропускаются, block и aggressive: запросы блокируются.)

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: wallarm_process_time_limit_block attack

wallarm_request_memory_limit

Ограничение на максимальный объем памяти, который может быть использован в процессе анализа одного запроса.

При превышении значения анализ запроса будет прерван, пользователю вернется ошибка 500.

В значении можно использовать суффиксы kKmMgG. Значение 0 отключает ограничения.

По умолчанию ограничение отключено.

Параметр может настраиваться на уровнях main, http, server, location.

wallarm_proton_log_mask_master

Настройки отладочного логирования wallarm при работе мастер процесса nginx.

Параметр может настраиваться на уровне main.

wallarm_proton_log_mask_worker

Настройки отладочного логирования wallarm при работе воркер процесса nginx.

Параметр может настраиваться на уровне main.

wallarm_request_chunk_size

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

  • k или K для указания размера в килобайтах;
  • m или M для указания размера в мегабайтах;
  • g или G для указания размера в гигабайтах.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: 8k (8 килобайт).

wallarm_status

Включает отдачу статистики о работе фильтрующего узла. Статистика может отдаваться в json формате или в формате, совместимом с prometheus.

Использование:

wallarm_status [on|off] [format=json|prometheus]

Параметр может настраиваться на уровнях server, location.

Настройка конфигурации wallarm_status позволяет указать адреса серверов, с которых можно выполнить одноименную команду. По умолчанию доступ запрещен отовсюду, за исключением системных адресов 127.0.0.1 и ::1, позволяющих выполнять команду только на сервере, где установлен Валарм.

location = /wallarm-status {
    allow 127.0.0.1;
    allow ::1;
    allow 10.41.29.0;
    deny all;
    wallarm_mode off;
    access_log off;
    wallarm_status on;
        }

Чтобы разрешить выполнение команды с другого сервера, добавьте в конфигурации инструкцию allow с IP адресом нужного сервера, например:

allow 10.41.29.0;

wallarm_set_tag

Позволяет промаркировать запрос тэгом с заданным названием и значением.

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

Эти тэги можно в дальнейшем использовать в подсистеме постаналитики.

Использование:

wallarm_set_tag somename $var;

Параметр может настраиваться на уровнях server и location.

wallarm_tarantool_connect_attempts

Количество неудачных попыток переподключения к Tarantool. По достижению предела попытки будут прекращены на время wallarm_tarantool_connect_interval.

Параметр может настраиваться только на уровне http.

wallarm_tarantool_connect_interval

Задержка переподключения к Tarantool после того, как количество неудачных попыток превысило порог wallarm_tarantool_connect_attempts.

Параметр может настраиваться только на уровне http.

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;
    }

    ...

    wallarm_tarantool_upstream wallarm_tarantool;

Смотрите также Модуль ngx_http_upstream_module.

Необходимые условия

Для параметров max_conns и keepalive необходимо соблюдать следующие условия:

  • Значение keepalive должно быть не меньше, чем количество серверов tarantool.
  • Значение max_conns должно быть указано для каждого сервера, чтобы предотвратить создание лишних соединений.

Параметр может настраиваться только на уровне http.

wallarm_timeslice

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

Вы можете использовать суффиксы интервалов времени, описанные в документации nginx, для задания различных единиц времени в качестве значения директивы.

Параметр может настраиваться на уровнях http, server, location.

Значение по умолчанию: 0 (временное ограничение на одну итерацию обработки выключено).


В связи с ограничениями сервера nginx, для работы директивы wallarm_timeslice необходимо отключить буферизацию запросов. Для этого установите значение off в директиве nginx proxy_request_buffering.

wallarm_ts_request_memory_limit

Ограничение на максимальный объем памяти, который может быть использован одним экземпляром proton.db + lom.

Если в процессе обработки какого-то запроса общий объем памяти будет превышен, то пользователю вернется ошибка 500.

В значении можно использовать суффиксы kKmMgG. Значение 0 отключает ограничения.

Параметр может настраиваться на уровнях main, http, server, location.

Значение по умолчанию: 1 ГБ

wallarm_unpack_response

Если бэкенд возвращает сжатые данные, то значение on распаковывает данные перед обработкой. Значение off выключает распаковку.

Значение по умолчанию: on.

wallarm_worker_rlimit_vmem

Директива устарела

В данный момент доступна аналогичная ей директива wallarm_ts_request_memory_limit

results matching ""

    No results matching ""