Руководство по установке, настройке и эксплуатации основных компонентов Nemesida WAF — динамического модуля для Nginx и модуля машинного обучения Nemesida AI.

Доменное имя example.com вместе с поддоменами в руководстве используется в качестве примера. Доменное имя .example.com включает в себя основной домен и его поддомены. Доменное имя *.example.com включает в себя поддомены, но не включает основной домен example.com.

Общая информация

Требования к аппаратрному обеспечению
Для работы компонентов Nemesida WAF необходимы аппаратные ресурсы, имеющие следующие характеристики:

  • процессор: Intel Core i3 или выше;
  • объем ОЗУ: 2 ГБ для сервера с установленным Nemesida WAF и 32 ГБ для сервера с установленным Nemesida AI MLC;
  • дисковое пространство: от 5 ГБ.

Взаимодействие с внешними ресурсами
В процессе работы компоненты Nemesida WAF обращаются к nemesida-security.com:443 и nw-auth-extra.nemesida-security.com:443 для:

  • проверки лицензионного ключа;
  • загрузки и выгрузки поведенческих моделей и списка вируальных хостов, определенных параметром vhosts_list в конфигурационном файле Nemesida AI MLC;
  • загрузки информации об IP-адресах с GeoIP-сервера.

Бесплатное тестирование
Запросите лицензионный ключ для полноценного 14-ти дневного тестирования Nemesida WAF.

Docker-образ и Virtual Appliance
Nemesida WAF доступен в виде установочных дистрибутивов для ОС Linux, в виде Docker-образа и виртуального диска для KVM/VMware/VirtualBox.

Модель лицензирования
Каждый экземпляр динамического модуля Nemesida WAF для Nginx (установочный пакет nwaf-dyn) должен использовать уникальный лицензионный ключ (лицензию). Лицензия включает в себя право использования всех компонентов, входящих в состав Nemesida WAF, обновления и техническую поддержку. Лицензия предоставляется на один календарный год.

Установочные пакеты Nemesida WAF

Основные:

  • nwaf-dyn — динамический модуль Nemesida WAF для Nginx и агент для обработки поведенческих моделей Nemesida AI MLA. Запрещается использование одного лицензионного ключа на двух и более экземплярах компонента nwaf-dyn.
  • nwaf-mlc — модуль машинного обучения Nemesida AI MLC, предназначен для построения поведенческих моделей и выявления прочих аномалий (например, атак методом перебора)

Вспомогательные:

  • nwaf-api — модуль Nemesida WAF API, предназначен для передачи информации о заблокированных запросах и результатах работы модулей Nemesida AI и Nemesida WAF Scanner в СУБД PostgreSQL.
  • nwaf-cabinet — модуль Личный кабинет, предназначен для визуализации и аналитики событий работы компонентов из СУБД PostgreSQL.
  • nwaf-st — модуль Nemesida WAF Signtest, предназначен для управления обучением модуля Nemesida AI.
  • nwaf-scanner — сканер уязвимостей Nemesida WAF Scanner.

Подключение репозитория Nemesida WAF
Перед установкой компонентов Nemesida WAF добавьте информацию о репозитории в систему:

DebianUbuntuCentOS
# apt install apt-transport-https
Debian 9
# echo "deb https://nemesida-security.com/repo/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
Debian 10
# echo "deb https://nemesida-security.com/repo/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -
# apt update && apt upgrade
# apt install apt-transport-https
16.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu xenial non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
18.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu bionic non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
20.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu focal non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -
# apt update && apt upgrade
CentOS 7
# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# yum update
# yum install epel-release
CentOS 8
# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-8-1-6.noarch.rpm
# dnf update
# dnf install epel-release

Настройка RabbitMQ
RabbitMQ используется для взаимодействия модулей Nemesida WAF и Nemesida AI (выявление аномалий и атак методом перебора, сбор трафика с последующим построением поведенческих моделей). В руководстве описан процесс настройки RabbitMQ в случае, когда модули Nemesida WAF и Nemesida AI установлены на одном сервере.

RabbitMQ должен располагаться на каждом сервере с установленным модулем Nemesida WAF или Nemesida AI MLC, даже если использование Nemesida AI MLC не планируется.

1. Установите пакет:

Debian, UbuntuCentOS
# apt install rabbitmq-server
CentOS 7
# yum install rabbitmq-server
CentOS 8
Добавьте репозиторий RabbitMQ, приведя файл /etc/yum.repos.d/RabbitMQ.repo к виду:

[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/8/
gpgcheck=0
repo_gpgcheck=0
enabled=1

Установите пакет:

# dnf update
# dnf install rabbitmq-server

2. Приведите файл /etc/rabbitmq/rabbitmq.config к виду:

[
    {rabbitmq_management, [
        {listener, [{port, 15672}, {ip, "127.0.0.1"}]}
    ]},
    {kernel, [
        {inet_dist_use_interface,{127,0,0,1}}
    ]}
].

3. Внесите изменения в файл /etc/rabbitmq/rabbitmq-env.conf:

export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1

4. Завершите настройку RabbitMQ:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# systemctl enable rabbitmq-server
# service rabbitmq-server restart
# service rabbitmq-server status

Установка модуля Nemesida WAF
Динамический модуль Nemesida WAF доступен для:

  • Nginx stable, начиная с 1.12;
  • Nginx mainline, начиная с 1.15;
  • Nginx Plus, начиная с R16.

В случае компиляции Nginx из исходного кода необходимо добавить параметры --with-compat --with-threads при выполнении configure для активации поддержки динамического модуля.

DebianUbuntuCentOS

Подключите репозиторий Nginx:

Debian 9
# echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Установите пакеты:

# apt update && apt upgrade
# apt install nginx
# apt install python3-pip python3-dev python3-setuptools librabbitmq4 libcurl4-openssl-dev libcurl3-gnutls libc6-dev gcc rabbitmq-server libmaxminddb0
# python3.5 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
# apt install nwaf-dyn-1.18

где 1.18 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R16) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r16).

Debian 10
# echo "deb http://nginx.org/packages/debian/ buster nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Установите пакеты:

# apt update && apt upgrade
# apt install nginx
# apt install python3-pip python3-dev python3-setuptools librabbitmq4 libcurl4-openssl-dev libcurl3-gnutls libc6-dev gcc rabbitmq-server libmaxminddb0
# python3.7 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
# apt install nwaf-dyn-1.18

где 1.18 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R16) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r16).

16.04
Подключите репозиторий Nginx:

# echo "deb http://nginx.org/packages/ubuntu/ xenial nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Подключите репозиторий Python 3.6:

# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa

Установите пакеты:

# apt update && apt upgrade
# apt install nginx
# apt install python3.6 python3.6-dev librabbitmq4 libcurl4-openssl-dev libcurl3-gnutls libc6-dev gcc curl rabbitmq-server libmaxminddb0
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
# python3.6 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
18.04
Подключите репозиторий Nginx:

# echo "deb http://nginx.org/packages/ubuntu/ bionic nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Установите пакеты:

# apt update && apt upgrade
# apt install nginx
# apt install python3-pip python3-dev python3-setuptools librabbitmq4 libcurl4-openssl-dev libcurl3-gnutls libc6-dev gcc rabbitmq-server libmaxminddb0
# python3 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
20.04
Подключите репозиторий Nginx:

# echo "deb http://nginx.org/packages/ubuntu/ focal nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Установите пакеты:

# apt update && apt upgrade
# apt install nginx
# apt install python3-pip python3.8-dev python3-setuptools librabbitmq4 libcurl4-openssl-dev libcurl3-gnutls libc6-dev gcc rabbitmq-server libmaxminddb0
# python3.8 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
 # apt install nwaf-dyn-1.18

где 1.18 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R16) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r16).

Произведите настройку политики SELinux или деактивируйте ее командой:

# setenforce 0

после чего приведите файл /etc/selinux/config к виду:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
CentOS 7
Разрешите прямое подключение к nemesida-security.com:443.

Подключите репозиторий Nginx и установите пакеты:

# rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum update
# yum install nginx
# yum install python36-pip python36-devel systemd openssl librabbitmq libcurl-devel gcc rabbitmq-server
# python3 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
# yum install nwaf-dyn-1.18

где 1.18 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R16) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r16).

CentOS 8
Установите пакет:

# dnf install dnf-utils

Добавьте репозиторий Nginx, приведя файл /etc/yum.repos.d/nginx.repo к виду:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Установите пакеты:

# dnf update
# dnf install nginx
# dnf install python3-pip python3-devel openssl rabbitmq-server librabbitmq libcurl-devel gcc systemd
# python3 -m pip install --no-cache-dir cython pandas requests psutil sklearn schedule simple-crypt pika fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize
# dnf install nwaf-dyn-1.18

где 1.18 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R16) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r16).

Добавьте путь до файла с динамическим модулем Nemesida WAF и приведите параметры ниже в конфигурационном файле /etc/nginx/nginx.conf к виду:

load_module /etc/nginx/modules/ngx_http_waf_module.so;
...
worker_processes auto;
...
http {
...
    ##
    # Nemesida WAF
    ##

    ## Fix: request body too large
    client_body_buffer_size 25M;

    include /etc/nginx/nwaf/conf/global/*.conf;
    include /etc/nginx/nwaf/conf/vhosts/*.conf;
...
}

Ошибка вида:

nginx: [emerg] module "/etc/nginx/modules/ngx_http_waf_module.so" version 1017010 instead of 1018000 in /etc/nginx/nginx.conf:1

возникает в том случае, когда не совпадают версии установленного динамического модуля Nemesida WAF и Nginx. В данном случае 1017010 — версия Nginx 1.17.10, для которой был скомпилирован модуль nwaf-dyn, а 1018000 — Nginx 1.18.0, установленный на сервере. Пакет динамического модуля nwaf-dyn-1.18 предназначен для работы с Nginx версии 1.18, а nwaf-dyn-plus-r22 — для работы с NGINX Plus R22.

Настройка динамического модуля Nemesida WAF

Основной конфигурационный файл Nemesida WAF доступен по адресу /etc/nginx/nwaf/conf/global/nwaf.conf.

Параметры nwaf.conf для Nemesida WAF Free
Для использования Nemesida WAF Free оставьте значение параметра лицензионного ключа по умолчанию (nwaf_license_key none;).

Для обновления сигнатур предоставьте доступ к nemesida-security.com:443. При использовании прокси-сервера укажите его в опции sys_proxy параметра nwaf_api_conf (например, sys_proxy=proxy.example.com:3128).

Параметры nwaf.conf
Параметр по умолчанию
Описание параметра
nwaf_license_key

Параметр установки лицензионного ключа ПО Nemesida WAF. Ключ также используется модулем Nemesida AI, если модуль размещен на том же сервере. Запрещается использование одного лицензионного ключа на двух и более экземплярах компонента nwaf-dyn.

При указанном недействительном лицензионном ключе (в том числе при значении по умолчанию nwaf_license_key none), Nemesida WAF продолжит работу с функционалом Nemesida WAF Free.

nwaf_host_enable

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

Пример использования одного значения:
nwaf_host_enable *;
nwaf_host_enable example.com;
nwaf_host_enable *.example.com;

Пример использования нескольких значений:
nwaf_host_enable example.com, 1.example.com;
nwaf_host_enable example.com, *.example.com;

nwaf_limit

Установка лимита заблокированных запросов, при превышении значений которого IP-адрес будет заблокирован на время (в секундах), указанное в опции block_time. Для установки лимита заблокированных запросов для конкретного домена приведите параметр к виду nwaf_limit rate=... block_time=... domain=example.com;. Для параметра domain допускается использовать wildcard-значения.

nwaf_ban_captcha_host*

Параметр, активирующий для виртуальных хостов механизм разблокирования IP-адреса с использованием капчи для запросов, определенных модулем Nemesida AI MLC как ВТ 7 или BT 10. Допускается использовать wildcard-значения. Пример:
nwaf_ban_captcha_host *;
nwaf_ban_captcha_host example.com;
nwaf_ban_captcha_host *.example.com;

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

nwaf_ban_captcha_path*

Параметр, определяющий расположение страницы с капчей. Пример:
nwaf_ban_captcha_path /captcha_path;

nwaf_ban_captcha_url*

Параметр, определяющий URL произвольной страницы с капчей в Интернете. Пример:
nwaf_ban_captcha_url http://example.com/captcha_path;

Параметр имеет приоритет над nwaf_ban_captcha_path при их одновременном использовании.

nwaf_sync_ban_ip_key*

Установка секретного ключа для синхронизации заблокированных IP-адресов, который должен быть идентичен на всех синхронизируемых экземплярах Nemesida WAF. Пример:

nwaf_sync_ban_ip_key 1234567890abcdef;
nwaf_sync_ban_ip_host*

Параметр определяет URL для получения списка заблокированных IP-адресов и период его опроса. Пример:

nwaf_sync_ban_ip_host srv1.example.com/ban_ip_sync_path 15;
nwaf_sync_ban_ip_host srv2.example.com/ban_ip_sync_path 15;
nwaf_api_conf

Настройка взаимодействия с Nemesida WAF API и прочих связанных параметров, включает в себя параметры: host, api_proxy и sys_proxy.

host — параметр определяет адрес сервера Nemesida WAF API для отправки информации об атаках, результатах работы Nemesida WAF Scanner и Nemesida AI. С опцией host=none данные на API передаваться не будут.

api_proxy — параметр определяет адрес прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest. Пример:
api_proxy=proxy.example.com:3128.

sys_proxy — параметр определяет адрес прокси-сервера для обращения к nw-auth-extra.nemesida-security.com:443 (проверка лицензионного ключа) и nemesida-security.com:443 (получение сигнатур, загрузка списка виртуальных хостов и загрузка поведенческих моделей). Пример:
sys_proxy=proxy.example.com:3128.

nwaf_mla*

Настройки взаимодействия с модулем Nemesida AI MLA, где mla_score — опция порогового значения, при достижении которого решение о блокировке запроса передается в модуль Nemesida AI MLA.

Сигнатуры с пороговым значением, равным 12, блокируются без отправки в модуль Nemesida AI MLA.

nwaf_mla_host_lm*

Параметр, активирующий режим LM (IDS) для запросов, определенных модулем 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, 1.example.com;
nwaf_mla_host_lm example.com, *.example.com;

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, 1.example.com;
nwaf_rmq_host_exclude example.com, *.example.com;

nwaf_ai_extra_host_lm*

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

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

Пример использования одного значения:
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, 1.example.com;
nwaf_ai_extra_host_lm example.com, *.example.com;

nwaf_ai_extra_host_wl*

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

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

Пример использования одного значения:
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, 1.example.com;
nwaf_ai_extra_host_wl example.com, *.example.com;

nwaf_bf_detect_host_lm*

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

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

Пример использования одного значения:
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_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, 1.example.com;
nwaf_put_body_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 параметр применен не будет.

nwaf_rmq

Настройка подсистемы взаимодействия с Nemesida AI с использованием RabbitMQ.

Опция ai_extra* отвечает за обработку выявленных модулем Nemesida AI MLC аномалий (при параметре ai_extra = true в mlc.conf), обработка которых происходит без прямого вмешательства в запрос (запрос не блокируется), но позволяет выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. Действие опции ai_extra не распространяется на блокирование атак методом перебора.

Опция ai_extra может принимать следующие значения:
off — при таком значении атаки, выявленные модулем Nemesida AI MLC, игнорируются;
on — при таком значении атаки, выявленные модулем Nemesida AI MLC, фиксируются, и счетчик rate из параметра nwaf_limit для IP-адреса уменьшается. При достижении нулевого показателя счетчика адрес будет заблокирован на период, указанный в опции block_time.
lm — при таком значении атаки, выявленные модулем Nemesida AI MLC, фиксируются, но значение счетчика из параметра nwaf_limit для IP-адреса не уменьшается (режим LM), то есть блокирование адреса не производится.

Вне зависимости от использования опции ai_extra, при активном параметре nwaf_rmq атаки методом перебора, выявленные модулем Nemesida AI MLC, будут блокироваться. Для управления подсистемой выявления атак методом перебора внесите изменения в секцию [brute] файла mlc.conf.

Опция vhost предназначена для экономии ресурсов серверов. Опция отвечает за загрузку моделей в модули Nemesida AI. Опция vhost может принимать следующие значения:
off — при таком значении в модуль Nemesida AI MLA будут загружены все модели, которые прописаны в mlc.conf (из модуля Nemesida AI MLC) в параметре vhosts_list. По умолчанию — значение off;
on — при таком значении в Nemesida AI MLA будут загружены все поведенческие модели для vhost из Nginx, при условии, что они также указаны в mlc.conf в параметре vhosts_list. Например, если задано 10 моделей в vhosts_list в mlc.conf, а в Nginx прописано 3 хоста, тогда в Nemesida AI MLA будут загружены данные 3 модели при условии, что они указаны в mlc.conf. Если в mlc.conf параметр vhosts_list не настроен, то при любом значении vhost модели загружаться не будут. При отсутствии опции используется значение по умолчанию.

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

nwaf_clamav*

Активация механизма отправки тела POST и PUT-запросов в модуль ClamAV. Для передачи только файлового содержимого из тела запроса с Content-Type: multipart/form-data используется опция FILE_ONLY.

nwaf_ip_wl

Деактивация механизма анализа запроса средствами Nemesida WAF для конкретного IP-адреса или подсети. При параметре nwaf_ip_wl x.x.x.x domain=example.com; механизм анализа будет деактивирован только при обращении с конкретного IP-адреса на конкретный виртуальный хост. Для опции domain допускается использовать wildcard-значение. В качестве IP-адреса допускается использовать адрес с маской подсети (например, 192.168.0.0/24) или диапазон адресов (например, 192.168.0.1-192.168.255.255).

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

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

nwaf_ip_lm

Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети с фиксацией события в СУБД (режим IDS). При параметре nwaf_ip_lm x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен. Для опции domain допускается использовать wildcard-значение. В качестве IP-адреса допускается использовать адрес с маской подсети (например, 192.168.0.0/24) или диапазон адресов (например, 192.168.0.1-192.168.255.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, 1.example.com;
nwaf_host_wl example.com, *.example.com;

nwaf_host_lm

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

Пример использования одного значения:
nwaf_host_lm *;
nwaf_host_lm example.com;
nwaf_host_lm *.example.com;

Пример использования нескольких значений:
nwaf_host_lm example.com, 1.example.com;
nwaf_host_lm example.com, *.example.com;

nwaf_clamav_wl*

Настройка списка исключения блокировки для содержимого тела запроса или загружаемого файла по MD5-сумме (MD5-сумма содержится в журнале error.log Nginx).

Пример заблокированного запроса:
Nemesida WAF: blocked by ClamAV, stream: Eicar-Test-Signature FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ...

Пример правила исключения:
nwaf_clamav_wl 44d88612fea8a8f36de82e1278a-bb02f.

nwaf_log_mr_all

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

При параметре nwaf_log_mr_all domain=example.com; запись зафиксированных вхождений будет производиться только для конкретного домена. Для опции domain допускается использовать wildcard-значение.

nwaf_check_bot_name

Параметр служит для определения роботов поисковых систем. Заблокированные запросы, попадающие под действие параметра, не увеличивают значение счетчика rate и не могут привести к блокировке IP-адреса. Первое значение параметра определяется в зоне User-Agent. Второе значение параметра определяет имя хоста, полученное путем обратного преобразования IP-адреса. Если второе значение не задано, то оно считается равным первому.

Пример использования:
nwaf_check_bot_name "example.com" "example.net";
nwaf_check_bot_name "example.com";
nwaf_check_bot_name "bingbot" "msn.com";
nwaf_check_bot_name "yandex.ru";

nwaf_mgmt_api_log*

Параметр, который определяет путь до файла журнала Nemesida WAF Management API. Nginx должен иметь доступ на чтение/запись файла, указанного в опции, либо иметь доступ на создание файла в каталоге, в котором будет лежать файл, если он ещё не создан. Если по какой-то причине запись в отдельный журнал Nemesida WAF Management API невозможна, сообщения будут записываться в основной файл журнала.

Пример использования:
nwaf_mgmt_api_log /var/log/nginx/nwaf_mgmt_api.log;

* Не используется в Nemesida WAF Free.

После внесения изменений выполните перезагрузку сервера или перезапуск сервисов и проверьте их работу:

# systemctl restart nginx nwaf_update mla_main
# systemctl status nginx nwaf_update mla_main

За получение набора сигнатур (/etc/nginx/nwaf/rules.bin) для динамического модуля Nemesida WAF отвечает служба nwaf_update. Для проверки работы сигнатурного метода обнаружения атак при отправке запроса http://YOUR_SERVER/nwaftest сервер должен вернуть код ответа 403.

Модуль Nemesida WAF обрабатывает только транслированный до конечного приложения запрос. В случае, если настройки Nginx препятствуют трансляции обращений (возвращая, к примеру, код ответа 301 или 403), обработка подобных запросов модулем Nemesida WAF производиться не будет.

В случае изменения набора сигнатур на сервере nemesida-security.com служба nwaf_update автоматически обновит файл rules.bin. Если в период обновления набора сигнатур на сервере служба nwaf_update деактивирована, загрузка новой версии набора сигнатур произойдет сразу после запуска службы nwaf_update.

Дополнительный заголовок $nwaf_block_type

Nemesida WAF позволяет использовать специальный заголовок, определяющий результат обработки запроса. Для его активации необходимо добавить параметр add_header NemesidaWAF-BT $nwaf_block_type always; в область http, server или location конфигурационного файла nginx.

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

  • Установите заголовок в область server:
    server {
       ...
       add_header NemesidaWAF-BT $nwaf_block_type always;
       ...
    }
    

    и перезапустите nginx.

  • Выполните запрос: curl -i localhost/nwaftest

В ответе сервера в заголовке NemesidaWAF-BT будет содержаться информация о статусе обработки запроса:

HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Wed, 12 Feb 2020 19:05:26 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
NemesidaWAF-BT: 2
...

В данном случае статус равен 2. Это означает, что запрос был заблокирован в связи с вхождением сигнатуры атаки со score равным 12 (nwaftest). Более подробная информация о статусе обработки запроса доступна в соответствующем разделе. Такой заголовок может быть полезен при генерации кастомизированной страницы ответа сервера (например, в случае блокирования запроса).

Прочая информация

Особенности режима LM
Запрос, попадающий под действие параметров nwaf_ip_lm или nwaf_host_lm, не блокируется и будет включен в обучающую выборку, если имеет BT, равный 0 или 1.

Настройка модуля Nemesida AI

Модуль не используется в Nemesida WAF Free.

Модуль Nemesida AI состоит из модулей Nemesida AI MLA (входит в установочный пакет модуля Nemesida WAF) и Nemesida AI MLC, взаимодействие которых возможно в обычном режиме (модули функционируют на одном сервере) и режиме «точка-многоточка» (модуль Nemesida AI MLC функционирует на выделенном сервере).

Точность поведенческих моделей
В период обучения для построения более качественных моделей не рекомендуется производить сканирование веб-приложения на уязвимости, а также направлять другие нелегитимные запросы. Сразу после первого обучения рекомендуется произвести переобучение моделей. Управление ложными срабатываниями производится с помощью модуля Nemesida WAF Signtest.

Python pip-пакеты
Для корректной работы модулей машинного обучения необходимо использовать единые версии Python3 pip-пакетов на серверах с установленными Nemesida AI MLA и Nemesida AI MLC.

Хранение поведенческих моделей
Поведенческие модели, созданные модулем Nemesida AI MLC, передаются на удаленный сервер Nemesida AI MLS и автоматически распространяются на все запущенные экземпляры Nemesida AI MLA и Nemesida AI MLC в соотвествии с WAF ID.

Nemesida AI MLA

Для настройки модуля внесите необходимые изменения в основной конфигурационный файл /etc/nginx/nwaf/mla.conf.

Параметры mla.conf
Параметр по умолчанию
Описание параметра

[main]
Секция, отвечающая за общие настройки модуля Nemesida AI MLA.

[st]
Секция, отвечающая за взаимодействие с консолью управления Nemesida AI.
st_enable
Отправка спорных запросов на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLA определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLA определил как нелегитимный.

st_uri
URI сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.
[deep_inspection]
Секция управления расширенной обработкой запросов.
b64_decode_url
b64_decode_args
b64_decode_body
b64_decode_cookie
b64_decode_other_headers
Активация/деактивация механизма декодирования Base64 для конкретной зоны. Например:

b64_decode_args = true — механизм декодирования base64 для зоны ARGS активен;
b64_decode_args = false — механизм декодирования base64 для зоны ARGS неактивен.

Модуль Nemesida AI MLA загружает модели в соответствии со списком, полученным из модуля Nemesida AI MLC (параметр vhosts_list файла mlc.conf), и списком из очереди vhost, если она не пустая (за это отвечает опция vhost параметра nwaf_rmq в файле nwaf.conf).

Nemesida AI MLC

Установите модуль (в случае установки модуля на выделенный сервер предварительно подключите репозиторий):

DebianUbuntuCentOS
Debian 9
# apt install python3 python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
# python3.5 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec python-geoip-python3 python-geoip-geolite2 netaddr pymemcache func_timeout url-normalize
Debian 10
# apt install python3 python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
# python3.7 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache

Установите Nemesida WAF MLC:

# apt install nwaf-mlc
Ubuntu 16.04
Подключите репозиторий Python 3.6 и установите его:

# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
# apt update && apt upgrade
# apt install python3.6 python3.6-dev curl
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
# apt install python3.6 python3.6-dev libc6-dev rabbitmq-server gcc memcached
# python3.6 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache
Ubuntu 18.04
# apt install python python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
# python3.6 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache
Ubuntu 20.04
# apt install python3.8 python3-pip python3.8-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
# python3.8 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache

Установите Nemesida WAF MLC:

# apt install nwaf-mlc
CentOS 7
# yum install python36-pip python36-devel python36-setuptools python36-pika gcc rabbitmq-server memcached
# python3.6 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache
# yum install nwaf-mlc
CentOS 8
# dnf install gcc rabbitmq-server python3-pip python3-devel python3-setuptools python3-pika memcached
# python3.6 -m pip install --no-cache-dir cython pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize python-geoip-python3 python-geoip-geolite2 netaddr pymemcache
# dnf install nwaf-mlc

Независимо от режима работы, модулю Nemesida AI MLC требуется локально установленный экземпляр RabbitMQ. Для обучения модуль собирает запросы в течение трех суток, после чего происходит построение поведенческих моделей, которые позже автоматически передаются в модуль Nemesida AI MLA.

Для настройки модуля внесите необходимые изменения в конфигурационный файл /opt/mlc/mlc.conf.

Параметры mlc.conf для работы в обычном режиме
Параметр по умолчанию
Описание параметра

[main]
Секция, отвечающая за общие настройки модуля Nemesida AI MLC.
vhosts_list

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

Допускается применение wildcard-значений. Модель в запросе применяется в следующем порядке приоритета от высшего к низшему:

1. vhosts_list = example.com — построение и применение модели для конкретного домена;
2. .example.com — построение и применение модели для домена .example.com и его поддоменов;
3. *.example.com — построение и применение модели только для поддоменов *.example.com, исключая основной домен example.com;
4. * — построение и применение модели для всех остальных доменов.

Пример использования:
vhosts_list = .example.com b.example.com — построение и применение моделей для перечисленных виртуальных хостов.

Не допускается одновременное использование example.com и .example.com. Если требуется использовать одну модель на домен, а другую — на его поддомены, используйте example.com и *.example.com. Например, vhosts_list = example.com *.example.com.

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

Таким образом, для запроса с доменным именем b.example.com будет применена модель b.example.com, если такой нет — модель .example.com, если и такой нет — то модель *.example.com.

Период обучения модели можно изменить, указав необходимое количество дней перед доменным именем: x:example.com, где x — период обучения в днях.

Пример использования:
5:example.com — обучение модели будет длиться 5 дней.

ai_extra
Активация/деактивация функционала дополнительного анализа запросов, позволяющего выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. Результат реакции на выявленную атаку зависит от параметра ai_extra файла nwaf.conf.

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

api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей. При параметре api_uri = none информация отправляться не будет.
nwaf_license_key
Установка лицензионного ключа Nemesida WAF при работе на выделенном сервере. При использовании на одном сервере с модулем Nemesida WAF или при работе в режиме Multipoint Mode задействовать параметр не нужно.

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


[run]
Секция, отвечающая за параметры соединения с локальным сервисом RabbitMQ.
rmq_host
Параметры соединения с сервисом RabbitMQ. Допускается использования нескольких значений через пробел, например:

rmq_host = guest:guest@192.168.0.1 guest:guest@192.168.0.2
rmq_host_local
Параметры соединения с сервисом RabbitMQ для локального размещения очередей, например:

rmq_host_local = guest:guest@127.0.0.1

Если параметр отсутствует, будут использоваться следующие значения: guest:guest@127.0.0.1.


[proxy]
Секция, отвечающая за настройки соединения с прокси-сервером.
sys_proxy

Настройка адреса прокси-сервера для обращения к nw-auth-extra.nemesida-security.com:443 (проверка лицензионного ключа) и nemesida-security.com:443 (загрузка списка виртуальных хостов, загрузка и выгрузка поведенческих моделей). Пример:
sys_proxy = proxy.example.com:3128.
api_proxy
Настройка адреса прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest. Пример:
api_proxy = proxy.example.com:3128.

Если параметры не имеют значений, то модуль будет пытаться использовать параметры из файла nwaf.conf.


[mls]
Секция, отвечающая за передачу трафика на удаленный сервер с целью последующего анализа и построения поведенческих моделей. Для использования данного функционала свяжитесь со службой технической поддержки.
mls_enable
Активация механизма передачи анализируемого трафика на сервер Nemesida WAF MLS. По умолчанию функционал деактивирован.

[deep_inspection]
Секция управления расширенной обработкой запросов.
b64_decode_url
b64_decode_args
b64_decode_body
b64_decode_cookie
b64_decode_other_headers
Активация/деактивация механизма декодирования Base64 для конкретной зоны. Например:

b64_decode_args = true — механизм декодирования base64 для зоны ARGS активен;
b64_decode_args = false — механизм декодирования base64 для зоны ARGS неактивен.


[ddos]
Секция, отвечающая за работу функционала выявления атак «отказ в обслуживании» (DDoS-атак) на уровне приложений.
enable
Активация/деактивация функционала выявления DDoS-атак.
wl_ip
Параметр, определяющий путь до файла, в котором задаются IP-адреса в формате 1.2.3.4, для которых функционал выявления DDoS-атак будет отключен. Каждое последующее значение указывается с новой стройки.

wl_url
Параметр, определяющий путь до файла, в котором задаются адреса как в формате vhost, так и в формате vhost/path, где:

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

Для виртуального хоста допускается использование wildcard-значений. Пример:

example.com
.example.com
*.example.com
example.com/auth
interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

[brute]
Секция, отвечающая за работу функционала выявления атак методом перебора (brute-force). Выявление перебора значений производится в зонах ARGS и/или BODY.
brute_enable
Активация/деактивация функционала выявления атак методом перебора.
brute_wl
Деактивация функционала выявления атак методом перебора для конкретных виртуальных хостов. Допускается использование wildcard-значений. Пример:

brute_wl = example.com .example.org *.example.us
interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
max_val
Количество запросов, при достижении значения которого производится блокирование источника(-ов) атаки.
similarity
Мера близости запросов в процентах.
brute_detect
Параметр, определяющий путь до файла, в котором пользователем системы задаются адреса для выявления атак методом перебора в формате vhost/path, где path — вхождение адреса ресурса на веб-сервере. Для виртуального хоста допускается использование wildcard-значений. Пример:

example.com/auth
.example.com/auth
*.example.com/auth

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

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

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

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

distributed
Активация функционала выявления распределенных атак методом перебора. При значении false выявление атак производится для каждого отдельного IP-адреса.
latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

[st]
Секция, отвечающая за взаимодействие с модулем управления обучением Nemesida WAF Signtest.
st_enable
Отправка спорных запросов, получаемых от модуля Nemesida WAF с использованием RabbitMQ, на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLC определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLC определил как нелегитимный.

st_uri
URI сервера Nemesida WAF Signtest для отправки спорных запросов. При использовании локальной версии измените URI параметра.

[training]
Секция управления процессом обучения.
dataset_limit
Устанавливает максимальное количество уникальных запросов, включённых в обучающую выборку.
Работа в режиме Multipoint Mode

Для построения поведенческих моделей модулю Nemesida AI MLC требуется до 32 ГБ свободной ОЗУ. При использовании более одного сервера с модулем Nemesida WAF можно сэкономить аппаратные ресурсы, задействовав схему работы «точка-многоточка» (один сервер с установленным модулем Nemesida AI MLC взаимодействует со множеством серверов с установленными модулями Nemesida WAF).

В режиме Multipoint Mode используются следующие компоненты:

  • серверы с установленными модулями Nemesida WAF и RabbitMQ, имеющие объем ОЗУ 2-4 ГБ каждый;
  • сервер с установленным модулем Nemesida AI MLC и RabbitMQ, имеющий объем ОЗУ не менее 32 ГБ.

На сервере с установленным модулем Nemesida WAF

— Создайте пользователя сервиса RabbitMQ:

# rabbitmqctl add_user USER PASSWORD
# rabbitmqctl set_permissions -p / USER ".*" ".*" ".*"

где USER и PASSWORD — имя пользователя и пароль для подключения модуля Nemesida AI MLC.

— Внесите изменения в конфигурационный файл /etc/rabbitmq/rabbitmq-env.conf:

NODE_PORT=5672
export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=0.0.0.0
export ERL_EPMD_ADDRESS=127.0.0.1

— Разрешите обращения на порт 5672 (TCP) с сервера, на котором установлен модуль Nemesida AI MLC.
— Завершите настройку RabbitMQ:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# service rabbitmq-server restart

На сервере с установленным модулем Nemesida AI MLC

Создайте дополнительные файлы конфигурации в директории /opt/mlc/conf/, скопировав файл /opt/mlc/mlc.conf. Внесите изменения в новые конфигурационные файлы для работы с удаленным сервером RabbitMQ. После внесения изменений выполните перезапуск службы:

# service mlc_main restart
# service mlc_main status

В дополнительных файлах конфигурации nwaf_license_key – обязательный параметр. Лицензионный ключ, используемый в настройках Nemesida AI MLC, и удаленные Nemesida WAF должны иметь одинаковые WAF ID. При использовании дополнительных файлов конфигурации рекомендуется удалить файл /opt/mlc/mlc.conf.

Используя удаленные сервисы RabbitMQ, модуль Nemesida AI MLC будет производить сбор запросов с последующим обучением моделей таким же образом, как и при обычном режиме работы.

Работа с использованием облачного сервера Nemesida AI MLS
Облачный сервер Nemesida AI, расположенный в инфраструктуре Pentestit, предназначен для генерации поведенческих моделей на основе поступающей с удаленных серверов копии трафика. Облачный сервер используется в случаях, когда пользователь ПО Nemesida WAF не имеет достаточного для работы модуля Nemesida AI MLC объема ОЗУ (требуется до 32 ГБ). Для использования возможностей облачного сервера Nemesida AI свяжитесь со службой технической поддержки.

После внесения изменений выполните перезапуск службы:

# service mlc_main restart
# service mlc_main status

Переобучение моделей Nemesida AI

Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Для этого необходимо добавить к значению виртуального хоста символ ^. Пример: vhosts_list = example.com^.

После внесения изменений выполните перезапуск службы:

# service mlc_main restart

После переобучения моделей рекомендуется удалить экспортированные запросы ВТ 12 (запросы содержатся на странице False Positive, доступной на веб-интерфейсе модуля Nemesida WAF Signtest). При обучении моделей для виртуального хоста запросы ВТ 12 войдут в обучающую выборку и далее не потребуются.

Увеличение срока обучения поведенческих моделей Nemesida AI

Основной вариант

Для корректного построения моделей требуется порядка 400.000-800.000 уникальных запросов. По умолчанию срок обучения составляет 4 дня. Период обучения модели можно изменить непосредственно при указании списка доменных имен в параметре vhosts_list в mlc.conf: x:example.com, где x — период обучения в днях. Например, 5:example.com — обучение модели будет длиться 5 дней.

После внесения изменений выполните перезапуск службы:

# service mlc_main restart
Дополнительный вариант

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

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

# service mlc_main stop

2. Переименуйте файл /opt/mlc/ml/[vhost]_[timestamp].db, где [timestamp] — дата начала обучения моделей, от которой рассчитывается период обучения. Например, для увеличения срока построения моделей на пять дней необходимо увеличить значение timestamp на такой же период:

# mv /opt/mlc/ml/example.com_1587416400.db /opt/mlc/ml/example.com_1587848400.db

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

# service mlc_main start

Дообучение моделей с использованием резервной копии обучающей выборки

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

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. Запустите обучение. Для этого необходимо добавить к значению виртуального хоста символ ^. Пример: vhosts_list = example.com^.

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

# service mlc_main start

После завершения периода обучения (период можно изменить) поведенческая модель будет создана на основе запросов из общей выборки.

Удаление моделей Nemesida AI

В случае некорректного обучения поведенческих моделей или значительных изменений в веб-приложении, приводящих ко множеству ложных срабатываний, рекомендуется удалить модели. Для этого отправьте запрос на support@nemesida-security.com. В запросе укажите лицензионный ключ, используемый в Nemesida WAF.

Обучающая выборка при построении поведенческих моделей

Запросы, определенные как BT 1, BT 2, BT 3 и BT 4, не добавляются в обучающую выборку, даже если попадают под действие режима LM.

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

Настройка взаимодействия с ПО ClamAV
После установки пакета Nemesida WAF функционал взаимодействия с ПО ClamAV по умолчанию выключен, поскольку в редких случаях может являться источником ложных срабатываний некоторых запросов к веб-приложению (в зависимости от текущего состояния базы сигнатурного анализа ClamAV). Используйте данный функционал по своему усмотрению.

Для активации антивирусной защиты установите ПО ClamAV на сервер с настроенным ПО Nemesida WAF, если это не было сделано ранее.

Пример установки для ОС Debian 9:

# apt install clamav-daemon

Включение функционала взаимодействия с ПО ClamAV осуществляется путем активации параметра nwaf_clamav в файле /etc/nginx/nwaf/conf/global/nwaf.conf и приведения файла /etc/clamav/clamd.conf к виду:

...
TCPSocket 3310
TCPAddr   127.0.0.1
... 

После внесения изменений необходимо перезапустить Nginx.

Работа Nemesida WAF в режиме IDS
Для функционирования Nemesida WAF в режиме IDS необходимо настроить дублирование трафика с основного веб-сервера (через который производятся обращения к веб-приложению) на сервер с установленным Nemesida WAF. Для этого внесите необходимые изменения в конфигурационные файлы на каждом из серверов:

1. На основном сервере (без установленного модуля Nemesida WAF) настройте зеркалирование трафика согласно руководству установленного веб-сервера (Nginx, Apache2, Microsoft IIS и прочие).

Пример настройки Nginx для зеркалирования трафика

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

location / {
    mirror /mirror;
    ...
}

location = /mirror {
    internal;
    proxy_pass http://nemesida_waf_server$request_uri;
}

где nemesida_waf_server — адрес сервера с установленным модулем Nemesida WAF, на который будет передаваться дублированный трафик.

2. На сервере с установленным модулем Nemesida WAF приведите конфигурационный файл виртуального хоста Nginx к виду:

server {
        listen  80;
        index   index.html;
        root    /var/www/html;
        try_files $uri $uri/ /index.html;
}

3. На сервере с установленным модулем Nemesida WAF создайте директорию /var/www/html и разместите в ней пустой файл index.html.

4. На сервере с установленным модулем Nemesida WAF приведите файл /etc/nginx/nwaf/conf/global/nwaf.conf к виду:

...
nwaf_limit rate=5r/m block_time=0;
...

5. После внесения изменений необходимо перезапустить Nginx на каждом из серверов.

Работа Nemesida WAF в режиме обратного прокси

Для использования веб-сервера с установленным Nginx и Nemesida WAF в качестве промежуточного сервера необходимо создать соответствующий файл виртуального хоста (например, /etc/nginx/conf.d/example.com.conf).

Пример файла виртуального хоста
server {
        server_name  site.example.com;
        listen 80;

        location / {
                proxy_pass http://192.168.0.1;
        }
}

где 192.168.0.1 — адрес конечного (целевого) сервера с веб-приложением.

Более подробная информация доступна на странице официальной документации Nginx.

Работа Nemesida WAF в режиме кластера (active/active)

Для работы Nemesida WAF в составе кластера все использующиеся лицензионные ключи должны иметь единый WAF ID (идентификатор, позволяющий объединять различные лицензионные ключи в группу). Для группировки лицензионных ключей в единый WAF ID отправьте запрос на support@nemesida-security.com.

Поведенческие модели машинного обучения, а также запросы FP, экспортированные через функционал Nemesida WAF Signtest, будут автоматически загружены на все экземпляры кластера в соответствии с WAF ID. Для более точного выявления атак рекомендуется в один момент времени использовать один установленный экземпляр модуля Nemesida AI MLC.

При использовании Nemesida WAF в качестве кластерного решения в режиме active/active необходимо:
1. Организовать синхронизацию конфигурационных файлов Nemesida WAF (по умолчанию каталог /etc/nginx/nwaf/, исключая объекты /etc/nginx/nwaf/rules.bin и /etc/nginx/nwaf/ml/) со всеми экземплярами установки. Синхронизация должна производиться после каждого внесения изменений в конфигурационные файлы.

Пример синхронизации с использованием утилиты rsync
# rsync -az --no-perms --no-owner --no-group --exclude "/ml/" --exclude "/rules.bin" /etc/nginx/nwaf/ root@%адрес_удаленного_сервера%:/etc/nginx/nwaf/ 

2. После синхронизации объектов необходимо на каждом установленном экземпляре динамического модуля Nemesida WAF актуализировать параметры в файле /etc/nginx/nwaf/conf/global/nwaf.conf:

  • nwaf_license_key (обязательно);
  • api_proxy и sys_proxy (опционально).

3. После внесения изменений необходимо перезапустить сервисы:

# nginx -t && systemctl reload nginx 
# systemctl restart nwaf_update mla_main 

Управление сигнатурами

В Nemesida WAF и Nemesida WAF Free реализован функционал поддержки пользовательского набора правил для выявления атак: сигнатур (RL), а также их исключений (WL).

Зоны и уточнения

При создании RL или WL правил могут быть использованы специальные параметры:

  • зоны: URL, ARGS, BODY, HEADERS, Cookie, User-Agent, Content-Type и т. д.;
  • условия применения правила (уточнение зоны, конкретизация): $URL, $ARGS, $BODY, $HEADERS, $Cookie, $User-Agent и т. д.

Использование зон и уточнений позволяет максимально конкретизировать создаваемое правило. Уточнения задаются путем добавления префикса $ (например: "Z:...|$URL:...").

Пример использования правила с зоной и уточнением: WL ... "Z:ARGS|$URL:/123"; — правило сработает, если зоной вхождения правила RL будет зона ARGS и URL содержит вхождение /123.

Несколько параметров (зоны, уточнения) в одном правиле должны разделяться символом |, при этом будет использоваться следующий принцип взаимодействия:

  • зоны взаимодействуют между собой по принципу логического ИЛИ, например: Z:URL|ARGS;
  • зоны взаимодействуют с уточнениями по принципу логического И, например: Z:URL|$ARGS:123;
  • уточнения взаимодействуют между собой по принципу логического И, например: Z:...|$ARGS:123|$BODY:123".

Регулярные выражения в уточнениях

При уточнении допустимо использовать регулярные выражения. Для этого необходимо добавить к уточнению постфикс _X (например: "Z:...|$URL_X:\w+").

В случае использования символа | в качестве обычного символа необходимо:

  • для обычного правила: произвести его двойное экранирование (например: Z:...|$BODY:block\\|page – поиск вхождения block или page);
  • для правила с регулярным выражением (с постфиксом _X): произвести его четырехкратное экранирование (например: $BODY_X:block\\\\|page – поиск вхождения block|page).

В случае использования в правиле с регулярным выражением (с постфиксом _X) других символов из набора операторов регулярных выражений (/, ., *, ?, !, {, }, [, ], (, ), ^, $, :, \ и т. д.) в качестве обычных символов необходимо производить их двойное экранирование (например: $BODY_X:data=\\(block-\\\a\\\-in-the-main\\) – поиск вхождения (block-\a\-in-the-main); $HEADERS_X:Accept\\: image\\/webp\\\\\* – поиск вхождения Accept: image/webp\*).

Для использования в уточнениях разделителя как метасимвола регулярного выражения его необходимо экранировать два раза. Пример: правило WL ... "Z:...|$URL_X:/(a\\|b)/"; будет применяться к URL, который содержит /a/ или /b/.

Создание персональных сигнатур

Персональные правила определения признака атаки (user-defined RL) можно хранить в основном конфигурационном файле Nemesida WAF (nwaf.conf) или в самостоятельно созданном файле вида *.conf, размещенном в директории /etc/nginx/nwaf/conf/vhosts. Персональные сигнатуры должны определяться параметром RL, иметь ID начиная от 50000, и принимать следующий вид:

RL ID:50000 "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50001 domain=example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50002 domain=.example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50003 domain=*.example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50004 "PX:select\s+from" "SC:SQL:12" "Z:ARGS|$URL:/admin";
RL ID:50005 "P:select from" "SC:SQL:12" "Z:ARGS|$URL_X:/(admin\|dev)";

Для сигнатур в области зоны допускается использование значения MLA для принудительной отправки запроса в Nemesida AI MLA, попадающего под действие созданной сигнатуры запроса, если score < 12 (по умолчанию в Nemesida AI MLA направляются запросы со score равным или превышающим значение параметра mla_score).

Примеры сигнатур для принудительной отправки в Nemesida AI MLA

Запрос, содержащий вхождение select from в любой из четырех зон, будет направлен в Nemesida AI MLA:

RL ID:50005 "P:select from" "SC:SQL:1" "Z:MLA";

Запрос, содержащий вхождение select from в зоне ARGS, будет направлен в Nemesida AI MLA:

RL ID:50006 "P:select from" "SC:SQL:1" "Z:ARGS|MLA";
Опции создаваемых сигнатур
ID
Уникальный идентификатор правила. Для создания собственных правил доступен диапазон от 50000 до 59999. Обязательный параметр.
domain
Установка принадлежности правила к домену. Для опции domain допускается использовать wildcard-значение.
P/PX
Опция, определяющая шаблон вхождения сигнатуры (опция P используется для обозначения простого вхождения, опция PX — регулярного выражения). Обязательный параметр.
SC
Установка тега правила (Injection, XSS, UWA, Scanner, Evasion, Other или другого) и цифрового показателя значимости (score, от 1 до 12). Обязательный параметр.

Запросы, попадающие под действие правил со значением показателя, равным 12, блокируются без отправки в другие подсистемы анализа. Более подробная информация доступна в соответствующем разделе. Суммирование цифровых показателей для принятия решения производится в каждой отдельной зоне по идентичным тегам.

Z

Зона применения правила. Для применения сигнатуры ко всем зонам используйте пустой параметр "Z:". Обязательный параметр.

Для применения сигнатуры к нескольким зонам используйте разделитель: "Z:URL|BODY".

Для принудительной отправки запроса в модуль Nemesida AI MLA используйте значение MLA в зоне применения правил ("Z:MLA"), при этом цифровой показатель значимости (SC) должен быть менее 12.

Для отключения отправки запроса в модуль Nemesida AI MLA используйте значение NoMLA в зоне применения правил ("Z:NoMLA").

Для отключения блокирования IP-адреса из-за вхождения сигнатуры, имеющей score = 12, используйте значение NoBan в зоне применения правил (“Z:NoBan”). Вхождение сигнатуры с такой зоной не уменьшает счетчик nwaf_limit, то есть не приводит к блокированию IP-адреса.

Для конкретизации зоны можно использовать дополнительные опции. Для "Z:ARGS|$URL:/templates" правило сработает только в зоне ARGS с параметром /templates в URL.

Для сигнатур в области зоны допускается использование значения NoAPI для отключения отправки сообщения в Nemesida WAF API, попадающего под действие созданной сигнатуры запроса, если score = 12. Для всех срабатываний этой сигнатуры не будет производиться отправка сообщения на Nemesida WAF API, но будет производиться блокировка и запись в файл журнала.
Для сигнатур с другим score данное значение игнорируется.

RL ID:50001 "P:select from" "SC:SQL:12" "Z:ARGS|URL|BODY|NoAPI";

Для сигнатур в области зоны допускается использование значения LM для включения режима LM, попадающего под действие созданной сигнатуры запроса, если score = 12. Для всех срабатываний этой сигнатуры не будет производиться блокировка сообщения на Nemesida WAF API, но будет производиться отправка и запись в файл журнала.
Для сигнатур с другим score данное значение игнорируется.

RL ID:50002 "P:select from" "SC:SQL:12" "Z:ARGS|URL|BODY|LM";

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

Создание правил исключения сигнатуры

В случае, когда запрос попадает под действие сигнатуры, помимо отправки инцидента в Nemesida WAF API, в журнале ошибок работы Nginx (для коммерческой версии Nemesida WAF) будет содержаться следующая строка:

Nemesida WAF: the request ххх contains a rule id 1 in zone HEADERS, ...

или, если запрос содержит сигнатуру с предельно допустимым цифровым показателем значимости (score = 12):

Nemesida WAF: the request ххх blocked by rule id 1 in zone HEADERS, ...

где:

  • 1 — ID сигнатуры атаки;
  • HEADERS — зона вхождения сигнатуры.

Для вывода абсолютно всех вхождений сигнатур в запросе (при наличии вхождений), в том числе тех вхождений, которые не привели к последующему блокированию запроса, активируйте параметр nwaf_log_mr_all; в файле nwaf.conf.

Информация о составе текущего набора сигнатур доступна на странице rlinfo.nemesida-security.com.

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

WL ID:1 "Z:"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из всех зон для всех виртуальных хостов.

WL ID:1 "Z:ARGS|HEADERS"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зон ARGS и HEADERS для всех виртуальных хостов.

WL ID:1 "Z:ARGS|Cookie"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны ARGS и Cookie для всех виртуальных хостов.

WL ID:1 domain=.example.com "Z:URL"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com и его поддоменов.

WL ID:1 domain=example.com "Z:URL|$URL:/index/index.php"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com для URI http://example.com/index/index.php.

WL ID:* domain=example.com "Z:ARGS"; — при таких параметрах зона ARGS всех запросов к виртуальному хосту example.com будет исключена из обработки сигнатурным анализом.

WL ID:* domain=example.com "Z:$URL:/test"; — при таких параметрах все обращения к example.com/test будут исключены из обработки сигнатурным анализом.

Для параметра ID:* допускается использовать любую зону в качестве уточнения, но в качестве условия применения правила — только параметры $URL и $URL_X.

В целях безопасности при создании правил исключения необходимо их максимально конкретизировать.

Перевод правил блокировки в режим LM

Запросы, попадающие под действие режима LM, фиксируются в БД, но не блокируются. При срабатывании правила в журнал ошибок Nginx и на Nemesida WAF API будет отправлено сообщение о переводе соответствующего правила блокировки в LM режим, но запрос не будет заблокирован. Правила перевода в режим LM должны определяться параметром LM, иметь ID соответствующего правила блокировки и принимать следующий вид:

Примеры создания правил перевода в режим LM
LM ID:1 "Z:URL"; — при таких параметрах запросы с вхождением сигнатуры с идентификатором 1 в зоне URL будут переведены в режим LM;
LM ID:50001 "Z:URL"; — при таких параметрах запросы с вхождением персональной сигнатуры с идентификатором 50001 в зоне URL будут переведены в режим LM;
LM ID:50002 domain=example.com "Z:URL"; — при таких параметрах запросы с вхождением персональной сигнатуры с идентификатором 50002 в зоне URL будут переведены в режим LM для виртуального хоста example.com;
LM ID:50003 domain=*.example.com "Z:ARGS"; — при таких параметрах запросы с вхождением персональной сигнатуры с идентификатором 50003 в зоне ARGS будут переведены в режим LM для виртуального хоста example.com и его поддоменов;

Статусы обработки запроса (BT)

Каждому запросу, поступающему на анализ в модуль Nemesida WAF, присваивается идентификатор блокировки (BT — blocking type). Идентификатор может присваиваться независимо от того, был ли заблокирован запрос.

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

0 Запрос не был заблокирован.
1 Запрос заблокирован сигнатурным методом, при этом запрос не содержал ни одной сигнатуры со score = 12.
2 Запрос заблокирован сигнатурным методом, при этом в запросе содержалась сигнатура, имеющая score = 12.
3 Запрос заблокирован модулем Nemesida AI MLA.
4 Запрос заблокирован модулем ClamAV.
5 Запрос заблокирован вследствие внутренней ошибки.
6 Запрос заблокирован вследствие превышения лимита заблокированных запросов с одного IP-адреса. Управление лимитами и временем блокирования запроса осуществляется параметром nwaf_limit в файле nwaf.conf.
7 Запрос определен как попытка перебора (brute-force) и заблокирован модулем Nemesida AI MLC. В таком случае IP-адрес источника запроса будет заблокирован на время, установленное параметром nwaf_limit в файле nwaf.conf.
8 Запрос заблокирован модулем Nemesida AI MLC (дополнительный анализ трафика всех незаблокированных модулем Nemesida WAF запросов) и управляется параметром ai_extra в файлах nwaf.conf и mlc.conf.
10 Запрос определен как атака «отказ в обслуживании» и заблокирован модулем Nemesida AI MLC. В таком случае IP-адрес источника запроса будет заблокирован на время, установленное параметром nwaf_limit в файле nwaf.conf.

Интерфейс управления Nemesida WAF Management API

Интерфейс не используется в Nemesida WAF Free.

Для корректной работы Nemesida WAF Management API необходимо разместить все управляемые параметры Nemesida WAF в файле /etc/nginx/nginx/nwaf/conf/global/nwaf.conf. Не допускается размещение управляемых параметров Nemesida WAF в других файлах конфигураций.

Для активации интерфейса управления Nemesida WAF Management API необходимо в файле виртуального хоста в секцию server добавить параметр nwaf_mgmt_api on;, например:

server {
    listen  80;
    server_name example.com;

    location /nwaf_mgmt_api_path {
    nwaf_mgmt_api on;
    }

    ...
}

После активации параметра nwaf_mgmt_api on; и перезапуска Nginx функционал Nemesida WAF Management API становится доступным по целевому URI с установленной опцией nwaf_mgmt_api, например example.com/nwaf_mgmt_api_path.

Рекомендуется ограничить доступ к интерфейсу управления Nemesida WAF Management API через список разрешенных IP-адресов для предотвращения управления процессами работы Nemesida WAF неавторизованными пользователям.

Команды управления API
Параметр по умолчанию
Описание параметра

get_params
Вывод параметров конфигурации Nemesida WAF, например:

{"lic_key_sha1":"SHA1 от лиц. ключа","get_params":"nwaf_limit"}

Вывод всех параметров nwaf_limit, например nwaf_limit rate=5r/m block_time=600.

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","get_params":"nwaf_limit"}'

add_params
Установка параметров конфигурации Nemesida WAF, например:

{"lic_key_sha1":"SHA1 от лиц. ключа","add_params":"base64(nwaf_limit rate=5r/m block_time=600)"}

Установка параметра nwaf_limit rate=5r/m block_time=600.

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","add_params":"base64(nwaf_limit rate=5r/m block_time=600)"}'

update_params
Обновление параметров конфигурации Nemesida WAF, например:

{"lic_key_sha1":"SHA1 от лиц. ключа","update_params":["base64(nwaf_limit rate=5r/m block_time=600)","base64(nwaf_limit rate=5r/m block_time=0)"]}

Замена существующего параметра nwaf_limit rate=5r/m block_time=600 на новый nwaf_limit rate=5r/m block_time=0.

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","update_params":["base64(nwaf_limit rate=5r/m block_time=600)",""base64(nwaf_limit rate=5r/m block_time=0)"]}'

delete_params
Удаление параметров конфигурации Nemesida WAF, например:

{"lic_key_sha1":"SHA1 от лиц. ключа","delete_params":"base64(nwaf_limit rate=5r/m block_time=600)"}

Удаление существующего параметра nwaf_limit rate=5r/m block_time=600.

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","delete_params":"base64(nwaf_limit rate=5r/m block_time=600)"}'

get_banned_ip
Вывод IP-адресов, заблокированных Nemesida WAF на время, указанное в опции block_time:

{"lic_key_sha1":"SHA1 от лиц. ключа","get_banned_ip":""}

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","get_banned_ip":""}'

add_banned_ip
Добавление IP-адреса, в список заблокированных Nemesida WAF на время, указанное в опции block_time, например:

{"lic_key_sha1":"SHA1 от лиц. ключа","add_banned_ip":"10.0.10.10"}

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","add_banned_ip":["10.0.10.10"]}'
delete_banned_ip
Удаление IP-адреса, из списка заблокированных Nemesida WAF на время, указанное в опции block_time, например:

{"lic_key_sha1":"SHA1 от лиц. ключа"," delete_banned_ip":"10.0.10.10"}

Удаление всех IP-адресов из списка заблокированных Nemesida WAF:

{"lic_key_sha1":"SHA1 от лиц. ключа"," delete_banned_ip":"*"}

Пример cURL- запроса:

curl "example.com/nwaf_mgmt_api_path" --data '{"lic_key_sha1":"SHA1 от лиц. ключа","delete_banned_ip":"10.0.10.10"}'
Управляемые параметры
  • all (только для get_params)
  • RL
  • WL
  • nwaf_mla
  • nwaf_rmq
  • nwaf_ip_lm
  • nwaf_ip_wl
  • nwaf_limit
  • nwaf_host_lm
  • nwaf_host_wl
  • nwaf_api_conf
  • nwaf_clamav
  • nwaf_clamav_wl
  • nwaf_license_key
  • nwaf_log_mr_all
  • nwaf_ai_extra_host_lm
  • nwaf_ai_extra_host_wl
  • nwaf_rmq_host_exclude
  • nwaf_put_body_exclude

Разблокирование IP-адреса с использованием капчи
Nemesida WAF позволяет произвести блокирование IP-адреса на заданное время (длительность блокирования управляется опцией nwaf_limit в конфигурационном файле nwaf.conf). В случае, если IP-адрес был заблокирован, поскольку являлся источником атаки методом перебора (BT 7), Nemesida WAF позволяет произвести его разблокирование с использованием функционала капчи.

Чтобы разблокировать IP-адрес, который был определен модулем Nemesida AI MLC как ВТ 7 (атака методом перебора), пользователю необходимо будет подтвердить, что его действия выполняются неавтоматически. Для работы данной опции необходим настроенный и включенный интерфейс управления Nemesida WAF Management API и веб-приложение с настроенной капчей. При правильном ответе веб-приложение с капчей направляет запрос delete_banned_ip в модуль Nemesida WAF для разблокирования IP-адреса. После этого пользователь будет переадресован на исходную страницу.

Синхронизация списка заблокированных IP-адресов

Не используется в Nemesida WAF Free.

Функционал Nemesida WAF позволяет организовать автоматическую синхронизацию заблокированных IP-адресов между серверами. Время блокирования IP-адреса определяется опцией nwaf_limit в конфигурационном файле nwaf.conf. Для активации синхронизации заблокированных IP-адресов на всех серверах, использующих данный функционал, необходимо:

  • установить единые значения параметров nwaf_limit и nwaf_sync_ban_ip_key в файле nwaf.conf;
  • определить целевой URL для синхронизации при помощи параметра nwaf_sync_ban_ip_host в файле nwaf.conf.
  • определить путь с установленным параметром nwaf_ban_ip_sync on; в файле виртуального хоста в секции location для получения списка заблокированных адресов, например:
    location /ban_ip_sync_path
    {
        ...
        nwaf_ban_ip_sync on;
        ...
    }
    

Источники сообщений об ошибках
В процессе работы Nemesida WAF информация об ошибках может содержаться:

  • в системных журналах ОС;
  • в журнале работы Nginx;
  • в журнале работы RabbitMQ;
  • в журнале работы модулей Nemesida WAF /var/log/nwaf/.

Техническая поддержка

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

В случае возникновения непредвиденных ошибок в работе Nemesida WAF свяжитесь с технической поддержкой по телефону +7 (495) 204-19-72, электронной почте или оставьте сообщение на форуме.