Руководство по управлению настройками Nemesida WAF с помощью API.

Общие сведения

Функционал управления настройками недоступен для тарифа Light.

Используя вызовы API можно управлять настройками Nemesida WAF:

  • настройками динамического модуля Nemesida WAF;
  • настройками Nemesida AI MLC;
  • поведенческими моделями;
  • синхронизацией между серверами настроек динамического модуля Nemesida WAF, Nemesida AI MLC;
  • правилами исключения сигнатур и расширенными правилами блокировки.

Управление настройками осуществляется с помощью специально составленных запросов. Каждый запрос должен содержать лицензионный ключ установленной копии Nemesida WAF или идентификационный токен.
Для тарифа Business доступно управление настройками Nemesida WAF с помощью обращений к облачному API.
Для тарифа Enterprise управление настройками Nemesida WAF производится обращениями к серверу Nemesida WAF API, установленному в пределах сетевого периметра.

Управление настройками Nemesida WAF

Журнал действий

Получить содержимое журнала действий:

Business

Идентификационный токен доступен в облачной версии веб-приложения.

# curl https://nemesida-security.com/nw/agent/get_event_log --data 'token=%Идентификационный токен%'

При использовании недействительного идентификационного токена ответ будет возвращаться с кодом 401.

Динамический модуль Nemesida WAF

Позволяет управлять настройками динамического модуля Nemesida WAF. Поддерживает следующие команды управления:

BusinessEnterprise

Идентификационный токен доступен в облачной версии веб-приложения.

Получить настройки:

# curl https://nemesida-security.com/nw/agent/get_dyn_settings?format=json --data 'token=%Идентификационный токен%'

Задать настройки:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "set": {"nwaf_ip_wl": "127.0.0.1, 127.0.0.2", "nwaf_ai_extra_host_lm": "example.com", "active": "true"}}'

set — параметры настроек в формате JSON.

Удалить настройки:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": "nwaf_ip_wl"}'

del — параметр настроек в формате JSON.

Получить список IP-адресов для блокировки:

# curl https://nemesida-security.com/nw/agent/get_dyn_bl --data 'token=%Идентификационный токен%'

Задать список IP-адресов для блокировки:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_bl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "set": {"active": "true", "bl": ["domain=example.com 1.1.1.1", "2.2.2.2", "3.3.3.0/24", "4.4.4.4-5.5.5.5"]}}'

set — параметры настроек в формате JSON.

Запросы с IP-адреса 1.1.1.1 будут заблокированы только для домена example.com. Обращения с IP-адресов 2.2.2.2, 3.3.3.0/24 и 4.4.4.4-5.5.5.5 будут блокироваться для всех доменов, включая example.com.

Удалить все IP-адреса:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_bl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": ""}'

del — параметр настроек в формате JSON.

Доменное имя api.example.com используется в качестве примера обозначения сервера с установленным модулем Nemesida WAF API.

Получить настройки:

# curl http://api.example.com:8080/nw-api/get_dyn_settings?format=json --data 'key=%Лицензионный ключ%'

Задать настройки:

# curl http://api.example.com:8080/nw-api/set_dyn_settings --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "set": {"nwaf_ip_wl": "127.0.0.1, 127.0.0.2", "nwaf_ai_extra_host_lm": "example.com", "active": "true"}}'

set — параметры настроек в формате JSON.

Удалить настройки:

# curl http://api.example.com:8080/nw-api/set_dyn_settings --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "del": "nwaf_ip_wl"}'

del — параметр настроек в формате JSON.

Получить список IP-адресов для блокировки:

# curl http://api.example.com:8080/nw-api/get_dyn_bl --data 'key=%Лицензионный ключ%'

Задать список IP-адресов для блокировки:

# curl http://api.example.com:8080/nw-api/set_dyn_bl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "set": {"active": "true", "bl": ["domain=example.com 1.1.1.1", "2.2.2.2", "3.3.3.0/24", "4.4.4.4-5.5.5.5"]}}'

set — параметры настроек в формате JSON.

Запросы с IP-адреса 1.1.1.1 будут заблокированы только для домена example.com. Обращения с IP-адресов 2.2.2.2, 3.3.3.0/24 и 4.4.4.4-5.5.5.5 будут блокироваться для всех доменов, включая example.com.

Удалить все IP-адреса:

# curl http://api.example.com:8080/nw-api/set_dyn_bl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "del": ""}'

del — параметр настроек в формате JSON.

Для управления доступны следующие параметры:

Поддерживаемые параметры
Параметр
Описание параметра
nwaf_limit

Устанавливает лимит заблокированных запросов. При превышении допустимого количества запросов, определенного опцией rate, IP-адрес будет заблокирован на время (в секундах), указанное в block_time.

Пример:

{... "nwaf_limit": "rate=5r/m block_time=600" ...}

Параметр domain является опциональным и требуется только для установки лимита заблокированных запросов для конкретного домена. Для этого необходимо привести параметр к виду: nwaf_limit rate=... block_time=... domain=.... Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.

Пример:

{... "nwaf_limit": "domain=example.com rate=5r/m block_time=600" ...}

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

Пример:

{... "nwaf_limit": "domain=a.example.com rate=5r/m block_time=300, domain=example.com rate=5r/m block_time=300" ...}

или

{... "nwaf_limit": "rate=10r/m block_time=600, domain=example.com rate=5r/m block_time=300" ...}

В последнем примере будут установлены лимиты на 5 запросов в минуту для домена example.com (с последующей блокировкой IP-адреса атакующего на 300 секунд), а также лимиты на 10 запросов в минуту для всех остальным доменов (с последующей блокировкой IP-адреса атакующего на 600 секунд).

nwaf_ip_wl

Деактивация механизма анализа запроса средствами Nemesida WAF для конкретного IP-адреса или подсети.

Пример:

{... "nwaf_ip_wl": "127.0.0.1, 192.168.0.1" ...}

При использовании "nwaf_ip_wl": "domain=example.com 127.0.0.1" механизм анализа будет деактивирован только при обращении с конкретного IP-адреса на конкретный домен. Опция domain является опциональной. Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com. Допускается использование IPv4/IPv6 адресов, в том числе использование CIDR (например, x.x.x.x/24) и диапазона IP-адресов.

Пример:

{... "nwaf_ip_wl": "127.0.0.1, 192.168.61.0/24, 192.168.61.1-192.168.61.255" ...}

Для снижения количества ложных срабатываний рекомендуется указывать статический IP-адрес пользователей (администраторов, контент-менеджеров, редакторов) в параметре nwaf_ip_wl. Запросы, попадающие под действие параметра не будут блокироваться, передаваться в RabbitMQ, и, как результат, анализироваться модулем Nemesida AI. При использовании параметра будьте предельно осторожны.

nwaf_ip_lm

Настройка обработки запросов для конкретного IP-адреса или подсети с фиксацией в СУБД, но без фактической блокировки (пассивный режим).

Пример:

{... "nwaf_ip_lm": "127.0.0.1, 192.168.0.1" ...}

При использовании "nwaf_ip_lm": "domain=example.com 127.0.0.1" пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен. Опция domain является опциональной. Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com. Допускается использование IPv4/IPv6 адресов, в том числе использование CIDR (например, x.x.x.x/24) и диапазона IP-адресов.

Пример:

{... "nwaf_ip_lm": "127.0.0.1, 192.168.61.0/24, 192.168.61.1-192.168.61.255" ...}

Допускается использование IPv6 и IPv4-адресов.

nwaf_host_wl

Деактивация механизма анализа запроса средствами Nemesida WAF для виртуального хоста. При параметре nwaf_host_wl * пропуск будет производиться для всех виртуальных хостов.

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

{... "nwaf_host_wl": "*" ...}

или

{... "nwaf_host_wl": "example.com" ...}

или

{... "nwaf_host_wl": "*.example.com" ...}

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

{... "nwaf_host_wl": "example.com, a.example.com" ...}

или

{... "nwaf_host_wl": "example.com, *.example.com" ...}
nwaf_host_lm

Настройка обработки запросов для конкретного виртуального хоста с фиксацией в СУБД, но без фактической блокировки (пассивный режим). При параметре nwaf_host_lm * пропуск будет производиться для всех виртуальных хостов.

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

{... "nwaf_host_lm": "*" ...}

или

{... "nwaf_host_lm": "example.com" ...}

или

{... "nwaf_host_lm": "*.example.com" ...}

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

{... "nwaf_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_host_lm": "example.com, *.example.com" ...}
nwaf_mla_host_lm

Параметр, активирующий режим LM (пассивный режим) для запросов, определенных модулем Nemesida AI MLA как нелегитимные.

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

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

{... "nwaf_mla_host_lm": "*" ...}

или

{... "nwaf_mla_host_lm": "example.com" ...}

или

{... "nwaf_mla_host_lm": "*.example.com" ...}

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

{... "nwaf_mla_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_mla_host_lm": "example.com, *.example.com" ...}
nwaf_ai_extra_host_wl

Параметр, активирующий режим WL для запросов, определенных модулем Nemesida AI MLC как нелегитимные.

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос не фиксируется в СУБД и не блокируется.

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

{... "nwaf_ai_extra_host_wl": "*" ...}

или

{... "nwaf_ai_extra_host_wl": "example.com" ...}

или

{... "nwaf_ai_extra_host_wl": "*.example.com" ...}

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

{... "nwaf_ai_extra_host_wl": "example.com, a.example.com" ...}

или

{... "nwaf_ai_extra_host_wl": "example.com, *.example.com" ...}
nwaf_ai_extra_host_lm

Параметр, активирующий режим LM (пассивный режим) для запросов, определенных модулем Nemesida AI MLC как нелегитимные.

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

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

{... "nwaf_ai_extra_host_lm": "*" ...}

или

{... "nwaf_ai_extra_host_lm": "example.com" ...}

или

{... "nwaf_ai_extra_host_lm": "*.example.com" ...}

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

{... "nwaf_ai_extra_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_ai_extra_host_lm": "example.com, *.example.com" ...}
nwaf_bf_detect_host_lm

Параметр, активирующий режим LM для запросов, определенных модулем Nemesida AI MLC как атаки методом перебора (BT 7) и флуд (BT 9).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

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

{... "nwaf_bf_detect_host_lm": "*" ...}

или

{... "nwaf_bf_detect_host_lm": ".example.com" ...}

или

{... "nwaf_bf_detect_host_lm": "*.example.com" ...}

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

{... "nwaf_bf_detect_host_lm": "example.com, *.example.org" ...}
nwaf_ddos_detect_host_lm

Параметр, активирующий режим LM для запросов, определенных модулем Nemesida AI MLC как DDoS-атаки (BT 10).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

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

{... "nwaf_ddos_detect_host_lm": "*" ...}

или

{... "nwaf_ddos_detect_host_lm": ".example.com" ...}

или

{... "nwaf_ddos_detect_host_lm": "*.example.com" ...}

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

{... "nwaf_ddos_detect_host_lm": "example.com, example.org" ...}
nwaf_rmq_host_exclude

Параметр, исключающий отправку некоторых запросов на сервер RabbitMQ (очередь nwaf).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос не передается в очередь nwaf, и, соотвественно, не обрабатывается модулем Nemesida AI MLC (не анализируется на предмет аномалий и атак методом перебора, не участвует при построении поведенческих моделей).

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

{... "nwaf_rmq_host_exclude": "*" ...}

или

{... "nwaf_rmq_host_exclude": "example.com" ...}

или

{... "nwaf_rmq_host_exclude": "*.example.com" ...}

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

{... "nwaf_rmq_host_exclude": "example.com, a.example.com" ...}

или

{... "nwaf_rmq_host_exclude": "example.com, *.example.com" ...}
nwaf_body_exclude

Параметр, исключающий анализ сигнатурным методом зоны BODY, а также отправку её содержимого в модули Nemesida AI MLA и Nemesida AI MLC. Опция полезна, если нет возможности изменить значение параметра client_body_buffer_size в файле /etc/nginx/nginx.conf.

Пример:

{... "nwaf_body_exclude": "*" ...}

или

{... "nwaf_body_exclude": "example.com/uploads.php" ...}

или

{... "nwaf_body_exclude": "example.com/uploads" ...}

При применении параметра учитывается точное совпадение пути (vhost/path).

Например, при значении: example.com/uploads исключение анализа зоны BODY будет применяться для запросов к example.com/uploads, но для example.com/uploads.php и example.com/uploads/index.php параметр применен не будет. При значении * исключение анализа зоны BODY будет применяться для любого адреса.

nwaf_put_body_exclude

Параметр, исключающий анализ сигнатурным методом содержимого зоны BODY для PUT-запросов, а также отправку содержимого зоны в модули Nemesida AI MLA и Nemesida AI MLC. Опция полезна при взаимодействии с веб-приложениями ownCloud или аналогичными, позволяющими клиенту производить загрузку файла на сервер по протоколу HTTP.

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

{... "nwaf_put_body_exclude": "*" ...}

или

{... "nwaf_put_body_exclude": "example.com" ...}

или

{... "nwaf_put_body_exclude": "*.example.com" ...}

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

{... "nwaf_put_body_exclude": "example.com, a.example.com" ...}

или

{... "nwaf_put_body_exclude": "example.com, *.example.com" ...}

Nemesida AI MLC

Позволяет управлять настройками модуля Nemesida AI MLC. Поддерживает следующие команды управления:

BusinessEnterprise

Идентификационный токен доступен в облачной версии веб-приложения.

Получить настройки:

# curl https://nemesida-security.com/nw/agent/get_mlc_settings?format=json --data 'token=%Идентификационный токен%'

Получить список виртуальных хостов:

# curl https://nemesida-security.com/nw/agent/get_vhosts_list --data 'token=%Идентификационный токен%'

Задать список виртуальных хостов, для которых будут созданы и применены модели:

# curl https://nemesida-security.com/nw/agent/public/set_vhosts_list --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "vhosts_list": "example.com, example.org"}'

vhosts_list — список виртуальных хостов, для которых будут созданы и применены модели.

Задать настройки:

# curl https://nemesida-security.com/nw/agent/public/set_mlc_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", set": {"main__ai_extra": "false", "brute__interval": "11", "brute__brute_detect": ["example.com/a1", "example.com/b1"], "active": "true"}}'

set — параметры настроек в формате JSON.

Удалить настройки:

# curl https://nemesida-security.com/nw/agent/public/set_mlc_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": "brute_detect"}'

del — параметры настроек в формате JSON.

Доменное имя api.example.com используется в качестве примера обозначения сервера с установленным модулем Nemesida WAF API.

Получить настройки:

# curl http://api.example.com:8080/nw-api/get_mlc_settings?format=json --data 'key=%Лицензионный ключ%'

Получить список виртуальных хостов:

# curl http://api.example.com:8080/nw-api/get_vhosts_list --data 'key=%Лицензионный ключ%'

Задать список виртуальных хостов, для которых будут созданы и применены модели:

# curl http://api.example.com:8080/nw-api/set_vhosts_list --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "vhosts_list": "example.com, example.org"}'

vhosts_list — список виртуальных хостов, для которых будут созданы и применены модели.

Задать настройки:

# curl http://api.example.com:8080/nw-api/set_mlc_settings --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", set": {"main__ai_extra": "false", "brute__interval": "11", "brute__brute_detect": ["example.com/a1", "example.com/b1"], "active": "true"}}'

set — параметры настроек в формате JSON.

Удалить настройки:

# curl http://api.example.com:8080/nw-api/set_mlc_settings --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "del": "brute_detect"}'

del — параметры настроек в формате JSON.

Поддерживаемые параметры
Параметр
Описание параметра

main__ai_extra

Активация/деактивация функционала дополнительного анализа запросов, позволяющего выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. При неактивном функционале дополнительного анализа все незаблокированные запросы будут включены в обучающую выборку (за исключением запросов, попадающих под действие режима WL, или нелегитимных запросов, попавших под действия режима LM).

Пример:

{... "main__ai_extra": "true" ...}

ddos__enable
Активация/деактивация функционала выявления DDoS-атак.

Пример:

{... "ddos__enable": "true" ...}
ddos__wl_ip
Параметр, определяющий список IP-адресов, для которых функционал будет отключен. Допускается использование IPv4/IPv6 адресов, в том числе использование CIDR (например, x.x.x.x/24). Каждое последующее значение указывается через пробел.

Пример:

{... "ddos__wl_ip": ["127.0.0.1", "192.168.1.0/24"] ...}
ddos__wl_url
Параметр, в котором задаются адреса как в формате vhost, так и в формате vhost/path, где:

vhost — имя виртуального хоста, для которого функционал выявления DDoS-атак будет отключен.
path — вхождение адреса ресурса.

Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "ddos__wl_url": ["example.com/feed", ".example.com/feed", "*.example.com/feed", "*/feed"] ...}
ddos__interval
Временной интервал (в секундах), в течение которого производится анализ запросов.

Пример:

{... "ddos__interval": "10" ...}
ddos__latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

Пример:

{... "ddos__latest_only": "true" ...}
ddos__send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible DDoS. При значении false запросы в Nemesida WAF API передаваться не будут.

Пример:

{... "ddos__send_possible": "true" ...}

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.


brute__enable
Активация/деактивация функционала выявления атак методом перебора.

Пример:

{... "brute__enable": "true" ...}
brute__wl_host
Деактивация функционала выявления атак методом перебора для конкретных виртуальных хостов. Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "brute__wl_host": ["example.com", ".example.org", "*.example.us"] ...}
brute__interval
Временной интервал (в секундах), в течение которого производится анализ запросов.

Пример:

{... "brute__interval": "10" ...}
brute__max_val
Количество запросов, при достижении значения которого производится блокирование IP-адреса источника(-ов) атаки.

Пример:

{... "brute__mav_val": "15" ...}
brute__brute_detect
Параметр, определяющий список адресов для выявления атак методом перебора в формате vhost/path, где path — вхождение адреса ресурса на веб-сервере. Для виртуального хоста допускается использование строгого соответствия и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "brute__brute_detect": ["example.com/auth", ".example.com/auth"] ...}

или

{... "brute__brute_detect": ["*.example.com/auth"] ...}

Таким образом, при установленном значении example.com/auth, мониторинг атак методом перебора будет производиться как для example.com/auth, так и для example.com/auth/reset_password.

Параметр применяется для выявления атак методом перебора, но не блокирует повторяющиеся запросы с одинаковым содержимым в зонах ARGS или BODY.

brute__flood_detect
Параметр, имеет схожий с параметром brute_detect функционал, но предназначен для выявления попыток флуда или аналогичных атак с повторением запроса. Единственное различие заключается в том, что в процессе анализа запросов, попадающих под действие параметра flood_detect, не происходит удаление дублей.

Таким образом, в случае повторной отправки идентичных запросов (например, множественные попытки восстановления пароля по СМС), запросы, имеющие схожее содержание и попадающие под действие параметра flood_detect, не будут удалены, в отличие от запросов, имеющие схожее содержание, но попадающих под действие параметра brute_detect.

Пример:

{... "brute__flood_detect": ["example.com/auth", ".example.com/auth"] ...}

или

{... "brute__flood_detect": ["*.example.com/auth"] ...}
brute__latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

Пример:

{... "brute__latest_only": "true" ...}
brute__send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible Brute force/Possible Flood. При значении false запросы в Nemesida WAF API передаваться не будут.

Пример:

{... "brute__send_possible": "true" ...}

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.

Правила исключения сигнатур

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

BusinessEnterprise

Идентификационный токен доступен в облачной версии веб-приложения.

Получить список правил:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl --data 'token=%Идентификационный токен%'

Получить расширенную информацию о правиле:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl?extended=yes --data 'token=%Идентификационный токен%'

Создать правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"rl_id": "50001", "domain": "example.com", "mz": "url", "extension": "$URL_X:/test"}}'

add — параметры настроек в формате JSON;
rl_id — ID сигнатуры (правила блокировки), к которой применяется правило исключения. При использовании значения * правило исключения будет применяться ко всем сигнатурам.

Более подробная информация по созданию правил доступна соответствующем соответствующем разделе документации.

Обновить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "upd": {"rid": "50001", "pattern": "ABC"}}'

upd — параметры настроек в формате JSON.

Удалить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": {"rid": "50001"}}'

del — параметры настроек в формате JSON.

Доменное имя api.example.com используется в качестве примера обозначения сервера с установленным модулем Nemesida WAF API.

Получить список правил:

# curl http://api.example.com:8080/nw-api/get_dyn_wl --data 'key=%Лицензионный ключ%'

Получить расширенную информацию о правиле:

# curl http://api.example.com:8080/nw-api/get_dyn_wl?extended=yes --data 'key=%Лицензионный ключ%'

Создать правило:

# curl http://api.example.com:8080/nw-api/set_dyn_wl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"rl_id": "50001", "domain": "example.com", "mz": "url", "extension": "$URL_X:/test"}}'

add — параметры настроек в формате JSON;
rl_id — ID сигнатуры (правила блокировки), к которой применяется правило исключения. При использовании значения * правило исключения будет применяться ко всем сигнатурам.

Более подробная информация по созданию правил доступна соответствующем разделе документации.

Обновить правило:

# curl http://api.example.com:8080/nw-api/set_dyn_wl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "upd": {"rid": "50001", "pattern": "ABC"}}'

upd — параметры настроек в формате JSON.

Удалить правило:

# curl http://api.example.com:8080/nw-api/set_dyn_wl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "del": {"rid": "50001"}}'

del — параметры настроек в формате JSON.

Расширенные правила блокировки запросов

Механизм расширенных правил блокирования запросов позволяет при составлении персональных правил использовать дополнительные условия для более точного результата. Например, можно составить правило, по которому запрос будет заблокирован если:

  • соответствует географическому местоположению на основе IP-адреса (определение страны по IP-адресу атакующего);
  • происходит обращение на определенный домен или URL;
  • содержит определенный заголовок (например, User-Agent, Cookie, Referer и т.д.) и/или содержимое этих заголовков.

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

Принцип работы функционала
Поддерживаются следующие параметры:

  • ip — IP-адрес атакующего;
  • api — отправлять результат срабатывания правила в модуль Nemesida WAF API;
  • lm — обработка правила в режиме LM (фиксируется срабатывание правила, но запрос не блокируется);
  • noban — со значением false при срабатывании правила запрос будет заблокирован, но счетчик rate параметра nwaf_limit, необходимый для блокировки IP-адреса источника запросов, не будет увеличиваться;
  • no_cookie — со значением true правило применяется только к запросу с пустой зоной Cookie;
  • country — страна (для работы функционала определения географического местоположения на основе IP-адреса необходимо подключить файл с базой GeoIP2 в /etc/nginx/nwaf/conf/global/nwaf.conf);
  • domain — домен;
  • url — вхождение строки в содержимое зоны URL;
  • args — вхождение строки в содержимое зоны ARGS;
  • body — вхождение строки в содержимое зоны BODY;
  • cookies — вхождение строки в содержимое зоны Cookie;
  • ua — вхождение строки в содержимое зоны User-Agent;
  • referer — вхождение строки в содержимое зоны Referer;
  • other_headers — вхождение строки в содержимое зоны HEADERS, за исключением зон Cookie, User-Agent и Referer.

Для поля domain допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.

Пример:

{... "domain": "base64(*.example.com)" ...}

При таком значении правило будет применяться ко всем поддоменам (a.example.com, b.example.com и т.д.), исключая основной домен example.com. Если значение поля domain пустое, то правило будет применяться ко всем запросам.

Префикс base64 перед параметром означает, что значение параметра при составлении правила необходимо передавать в формате base64. Например: "domain": "base64(*.example.com)" будет выглядеть как "domain": "Ki5leGFtcGxlLmNvbQ=="

Для всех параметров (кроме api,lm, noban и no_cookie) допускается использовать несколько значений в одном параметре, используя логические операторы условий «не» (!), «и» (&), «или» (|). Операторы не имеют приоритета и выполняются по очереди, слева направо.

Пример:

{... "ip": "192.168.61.0/24|192.168.62.0/24" ...}

При таком значении правило будет применяться ко всем IP-адресам из диапазонов 192.168.61.1-192.168.61.255 или 192.168.62.1-192.168.62.255.


Пример:

{... "country": "!base64(RU)&!base64(US)" ...}

При таком значении правило будет применяться ко всем запросам, в которых IP-адрес источника запроса не из России и не из США.


Пример:

{... "cookie": "!base64(abc)&!base64(def)" ...}

При таком значении правило будет применяться ко всем запросам, которые не содержат abc и def в Cookie.

При проверке срабатывания расширенного правила блокирования запроса все поля, кроме ip, country, api, lm и noban, проверяются на вхождение содержимого поля из правила блокирования в проверяемое поле запроса. Например, при "url": "base64(/abc)" будет заблокирован запрос с вхождением /abcd в URL.

other_headers

Формат поля:

{... "other_headers": ["base64(header_name):base64(header_value)", "base64(header_name):base64(header_value)" ...] ...}

base64(header_name) — название заголовка в base64;
base64(header_value) — значение заголовка в base64.

Для поля other_headers содержимое секций base64(header_name) и base64(header_value) являются опциональными, но необходимо указать хотя бы одну из секций . Например, при наличии заголовка header_name будет проверяться содержимое header_value только этого заголовка, а при отсутствии — содержимое всех заголовков.

Пример:

{... "other_headers": ["base64(example_header):base64(abcd)"] ...}

При таком значении запрос будет заблокирован при наличии abcd в заголовке example_header.


Пример:

{... "other_headers": [":base64(abcd)"] ...}

При таком значении запрос будет заблокирован при наличии abcd в любом заголовке.


Если base64(header_name) указан без последующего значения, то блокирование запроса произойдет при любом значении заголовка header_name (блокировка по наличию заголовка).

Пример:

{... "other_headers": ["base64(example_header):"] ...}

Пример:

{... "other_headers": ["base64(example1_header):base64(abc)","base64(example2_header):base64(def)"] ...}

При таком значении запрос будет заблокирован при наличии заголовков example1_header, который содержит abc и example2_header, который содержит def.


Пример:

{... "other_headers": ["base64(example1_header):","base64(example2_header):"] ...}

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


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

Пример:

{... "other_headers": ["!!base64(example_header):"] ...}

Пример:

{... "other_headers": ["base64(example_header):base64(abc)&base64(def)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который содержит abc и def.


Пример:

{... "other_headers": ["base64(example_header):!base64(abc)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит abc.


Пример:

{... "other_headers": ["base64(example_header):!base64(a)&!base64(b)&!base64(c)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит a, b и c.


Пример:

{... "other_headers": ["base64(example_header):!base64(a)|base64(b)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит a или содержит b.

Если в запросе недоступно получение какого-либо поля, указанного в расширенном правиле блокирования, то запрос будет пропущен.

Поддерживает следующие команды управления:

BusinessEnterprise

Идентификационный токен доступен в облачной версии веб-приложения.

Получить список правил:

# curl https://nemesida-security.com/nw/agent/get_dyn_erl --data 'token=%Идентификационный токен%'

Получить расширенную информацию о правиле:

# curl https://nemesida-security.com/nw/agent/get_dyn_erl?extended=yes --data 'token=%Идентификационный токен%'

Создать правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "1.1.1.1|2.2.2.2", "active": "true"}}'

add — параметры настроек в формате JSON.

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "!1.1.1.0/24", "domain": "ZXhhbXBsZS5jb20=" "active": "true"}}'

Запрос будет заблокирован, если на example.com поступит запрос c любого IP-адреса, кроме 1.1.1.1-1.1.1.255.

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "1.1.1.1", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса 1.1.1.1 и заголовок test-header содержит строку abc.

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "% Идентификационный токен%", "add": {"сountry": "Q0g=|UlU=", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "cookie": "!dGVzdF9jb29raWU=", "referer": "!aHR0cDovL2V4YW1wbGUuY29t" "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса из региона RU или CH, заголовок test-header содержит строку abc, заголовок Cookie не содержит строку test_cookie и заголовок Referer не содержит http://example.com.

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "1.1.1.1", "other_headers": ["VGVzdC1GaWVsZA==:"], "referer": "aHR0cDovL2V4YW1wbGUuY29tLw==", "ua": "TW96aWxsYS81LjA=", "cookie": "dGVzdF9jb29raWU=", "body": "YmM9MyZjYz0x", "args": "P3BhZ2U9Mw==", "url": "aW50ZXJuYWx0ZXN0", "domain": "ZXhhbXBsZS5jb20=", "api": false, "country": "Q0g=|VFc=", "active": true}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос c IP-адреса 1.1.1.1 из региона RU или CH, который будет содержать:

  • заголовок Referer с содержимым http://example.com/;
  • заголовок Test-Field с любым содержимым;
  • заголовок User-Agent с содержимым Mozilla/5.0;
  • заголовок Cookie с содержимым test_cookie;
  • содержимое тела запроса bc=3&cc=1;
  • аргумент запроса ?page=3.

Обновить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "upd": {"rid": "1", "ip": "1.1.1.1", "active": "true"}}'

upd — параметры настроек в формате JSON.

Удалить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": {"rid": "1"}}'

del — параметры настроек в формате JSON.

Доменное имя api.example.com используется в качестве примера обозначения сервера с установленным модулем Nemesida WAF API.

Получить список правил:

# curl http://api.example.com:8080/nw-api/get_dyn_erl --data 'key=%Лицензионный ключ%'

Получить расширенную информацию о правиле:

# curl http://api.example.com:8080/nw-api/get_dyn_erl?extended=yes --data 'key=%Лицензионный ключ%'

Создать правило:

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"ip": "1.1.1.1|2.2.2.2", "active": "true"}}'

add — параметры настроек в формате JSON.

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"ip": "!1.1.1.0/24", "domain": "ZXhhbXBsZS5jb20=" "active": "true"}}'

Запрос будет заблокирован, если на example.com поступит запрос c любого IP-адреса, кроме 1.1.1.1-1.1.1.255.

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"ip": "1.1.1.1", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса 1.1.1.1 и заголовок test-header содержит строку abc.

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"сountry": "Q0g=|UlU=", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "cookie": "!dGVzdF9jb29raWU=", "referer": "!aHR0cDovL2V4YW1wbGUuY29t" "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса из региона RU или CH, заголовок test-header содержит строку abc, заголовок Cookie не содержит строку test_cookie и заголовок Referer не содержит http://example.com.

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "add": {"ip": "1.1.1.1", "other_headers": ["VGVzdC1GaWVsZA==:"], "referer": "aHR0cDovL2V4YW1wbGUuY29tLw==", "ua": "TW96aWxsYS81LjA=", "cookie": "dGVzdF9jb29raWU=", "body": "YmM9MyZjYz0x", "args": "P3BhZ2U9Mw==", "url": "aW50ZXJuYWx0ZXN0", "domain": "ZXhhbXBsZS5jb20=", "api": false, "country": "Q0g=|VFc=", "active": true}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос c IP-адреса 1.1.1.1 из региона RU или CH, который будет содержать:

  • заголовок Referer с содержимым http://example.com/;
  • заголовок Test-Field с любым содержимым;
  • заголовок User-Agent с содержимым Mozilla/5.0;
  • заголовок Cookie с содержимым test_cookie;
  • содержимое тела запроса bc=3&cc=1;
  • аргумент запроса ?page=3.

Обновить правило:

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "upd": {"rid": "1", "ip": "1.1.1.1", "active": "true"}}'

upd — параметры настроек в формате JSON.

Удалить правило:

# curl http://api.example.com:8080/nw-api/set_dyn_erl --header 'Content-type: application/json' --data '{"key": "%Лицензионный ключ%", "del": {"rid": "1"}}'

del — параметры настроек в формате JSON.

Управление поведенческими моделями

Журнал действий

Business

Идентификационный токен доступен в облачной версии веб-приложения.

# curl https://nemesida-security.com/nw/ml/mgmt/get_event_log --data 'token=%Идентификационный токен%'

Управление моделями

Некорректное обучение поведенческих моделей или значительные изменения в веб-приложении могут привести ко множеству ложных срабатываний. Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Команды ниже позволяют производить действия над моделями.

BusinessEnterprise

Идентификационный токен доступен в облачной версии веб-приложения.

Получить список виртуальных хостов с моделями:

# curl https://nemesida-security.com/nw/ml/mgmt/get_models_list_uri --data 'token=%Идентификационный токен%'

Удалить модель для виртуального хоста example.com:

# curl https://nemesida-security.com/nw/ml/mgmt/del_models_uri --data 'token=%Идентификационный токен%&vhost=example.com'

vhost — имя виртуального хоста, для которого необходимо удалить поведенческую модель.

Дообучение моделей с использованием резервной копии обучающей выборки:
Для корректного построения моделей требуется порядка 400.000-800.000 уникальных запросов. Если во время обучения количество запросов было недостаточным, то можно его перезапустить и воспользоваться запросами из прошлой выборки. Для этого выполните 4 шага:

1. Остановите сервис Nemesida AI MLC:

# service mlc_main stop

2. Переместите файл /opt/mlc/ml/backup/[vhost].d_[timestamp], где [timestamp] — дата создания резервной копии обучающей выборки, созданной Nemesida AI MLC перед началом построения модели, в /opt/mlc/ml/[vhost].d. Например, для модели example.com:

# mv /opt/mlc/ml/backup/example.com.d_1613587613 /opt/mlc/ml/example.com.d

3. Запустите обучение:

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'token=%Идентификационный токен%&vhost=*.example.com&complete=no'

4. Запустите сервис Nemesida AI MLC:

# service mlc_main start

Скопировать поведенческую модель для виртуального хоста:

# curl https://nemesida-security.com/nw/ml/mgmt/rep_models_uri --data 'token=%Идентификационный токен%&src=example.com&dst=example.ru'

src — виртуальный хост, поведенческая модель которого копируется;
dst — виртуальный хост, для которого необходимо скопировать модель.

Копирование поведенческих моделей между виртуальными хостами производится только в рамках одного WAF ID.

Получить статус обучения модели для виртуального хоста:

# curl https://nemesida-security.com/nw/ml/mgmt/get_training_uri --data 'token=%Идентификационный токен%&vhost=example.com'

Установить для виртуального хоста example.com период обучения 4 дня:

# curl https://nemesida-security.com/nw/ml/mgmt/set_training_uri --data 'token=%Идентификационный токен%&vhost=example.com&duration=4'

duration — период обучения в днях.

Активировать обучение модели для виртуального хоста *.example.com:

# curl https://nemesida-security.com/nw/ml/mgmt/set_training_uri --data 'token=%Идентификационный токен%&vhost=*.example.com&complete=no'

complete — статус обучения модели.

Задать период обучения и активировать обучение модели для виртуального хоста .example.com:

# curl https://nemesida-security.com/nw/ml/mgmt/set_training_uri --data 'token=%Идентификационный токен%&vhost=.example.com&duration=4&complete=no'

Выполнение команды со значением параметра complete=no позволяет запустить процесс переобучения модели, а complete=yes — прерывает процесс обучения.

Перед запуском процесса обучения модели виртуальный хост должен быть добавлен в список виртуальных хостов. Команда, позволяющая задать список виртуальных хостов, приведена в разделе Nemesida AI MLC (Команды управления).

Доменное имя api.example.com используется в качестве примера обозначения сервера с установленным модулем Nemesida WAF API.

Получить список виртуальных хостов с моделями:

# curl http://api.example.com:8080/nw-api/get_models_list_uri --data 'key=%Лицензионный ключ%'

Удалить модель для виртуального хоста example.com:

# curl http://api.example.com:8080/nw-api/del_models_uri --data 'key=%Лицензионный ключ%&vhost=example.com'

vhost — имя виртуального хоста, для которого необходимо удалить поведенческую модель.

Дообучение моделей с использованием резервной копии обучающей выборки:
Для корректного построения моделей требуется порядка 400.000-800.000 уникальных запросов. Если во время обучения количество запросов было недостаточным, то можно его перезапустить и воспользоваться запросами из прошлой выборки. Для этого выполните 4 шага:

1. Остановите сервис Nemesida AI MLC:

# service mlc_main stop

2. Переместите файл /opt/mlc/ml/backup/[vhost].d_[timestamp], где [timestamp] — дата создания резервной копии обучающей выборки, созданной Nemesida AI MLC перед началом построения модели, в /opt/mlc/ml/[vhost].d. Например, для модели example.com:

# mv /opt/mlc/ml/backup/example.com.d_1613587613 /opt/mlc/ml/example.com.d

3. Запустите обучение:

# curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=*.example.com&complete=no'

Или воспользуйтесь Личным кабинетом.

4. Запустите сервис Nemesida AI MLC:

# service mlc_main start

Скопировать поведенческую модель для виртуального хоста:

# curl http://api.example.com:8080/nw-api/rep_models_uri --data 'key=%Лицензионный ключ%&src=example.com&dst=example.ru'

src — виртуальный хост, поведенческая модель которого копируется;
dst — виртуальный хост, для которого необходимо скопировать модель.

Копирование поведенческих моделей между виртуальными хостами производится только в рамках одного WAF ID.

Получить статус обучения модели для виртуального хоста:

# curl http://api.example.com:8080/nw-api/get_training_uri --data 'key=%Лицензионный ключ%&vhost=example.com'

Установить для виртуального хоста example.com период обучения 4 дня:

# curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=example.com&duration=4'

duration — период обучения в днях.

Активировать обучение модели для виртуального хоста *.example.com:

# curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=*.example.com&complete=no'

complete — статус обучения модели.

Задать период обучения и активировать обучение модели для виртуального хоста .example.com:

# curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=.example.com&duration=4&complete=no'

Выполнение команды со значением параметра complete=no позволяет запустить процесс переобучения модели, а complete=yes — прерывает процесс обучения.

Перед запуском процесса обучения модели виртуальный хост должен быть добавлен в список виртуальных хостов. Команда, позволяющая задать список виртуальных хостов, приведена в разделе Nemesida AI MLC (Команды управления).