Руководство по установке, настройке и эксплуатации основных компонентов 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, *.nemesida-security.com:443 и geoip.nemesida-security.com:80/443.

Бесплатное тестирование
Запросите лицензионный ключ для полноценного 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

Функционал доступен только для тарифа Enterprise.

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

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

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

Применение правил исключения (WL) и правил расширенной блокировки (ERL) осуществляется ко всем экземплярам динамического модуля Nemesida WAF, имеющим единый WAF ID.

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

DebianUbuntuCentOS
# apt install apt-transport-https gnupg2
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
Debian 11
# echo "deb https://nemesida-security.com/repo/nw/debian bullseye 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 gnupg2
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 (выявление аномалий и атак методом перебора, сбор трафика с последующим построением поведенческих моделей) и отправки данных в модуль Nemesida WAF API. В руководстве описан процесс настройки RabbitMQ в случае, когда модули Nemesida WAF и Nemesida AI установлены на одном сервере.

RabbitMQ должен располагаться на каждом сервере с установленным модулем Nemesida WAF и 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 к виду:

[rabbitmq_erlang]
name = rabbitmq_erlang
baseurl = https://packagecloud.io/rabbitmq/erlang/el/8/$basearch
repo_gpgcheck = 0
gpgcheck = 0
enabled = 1

[rabbitmq_server]
name = rabbitmq_server
baseurl = https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/$basearch
repo_gpgcheck = 0
gpgcheck = 0
enabled = 1

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

# dnf update
# dnf install rabbitmq-server

2. Проверьте корректность работы сервиса:

# 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

Установите идентификатор операционной системы:

# rm -f /etc/machine-id
# /bin/systemd-machine-id-setup
Debian 9
Подключите репозиторий Nginx:

# 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 python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
Debian 10
Подключите репозиторий Nginx:

# 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 python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
Debian 11
Подключите репозиторий Nginx:

# echo "deb http://nginx.org/packages/debian/ bullseye 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 python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
# 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).

Установите идентификатор операционной системы:

# rm -f /etc/machine-id
# /bin/systemd-machine-id-setup
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 python3.6 python3.6-venv python3-pip python3.6-dev librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
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 python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
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 python3 python3-venv python3-pip python3-dev python3-setuptools libcurl3-gnutls librabbitmq4 libcurl4-openssl-dev libc6-dev gcc rabbitmq-server libmaxminddb0 g++ memcached
# 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).

Установите идентификатор операционной системы:

# rm -f /etc/machine-id
# /bin/systemd-machine-id-setup

Произведите настройку политики 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 python36 python36-devel python36-setuptools python36-pip openssl librabbitmq libcurl-devel rabbitmq-server gcc libmaxminddb memcached
# 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 python36 python36-devel python3-setuptools python3-pip openssl librabbitmq libcurl-devel rabbitmq-server gcc libmaxminddb memcached
# 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
    ##

    ## Request body is too large fix
    client_body_buffer_size 25M;

    include /etc/nginx/nwaf/conf/global/*.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.

Для директории nwaf/conf/db необходимо предоставить разрешение на запись/чтение для пользователя, от имени которого запущен Nginx.

Установка модуля Nemesida AI

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

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

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

Nemesida AI MLC

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

DebianUbuntuCentOS
Debian 9
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
Debian 10
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
Debian 11
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached

Установите Nemesida AI 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 curl python3.6 python3.6-venv python3-pip 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 dnspython
Ubuntu 18.04
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
Ubuntu 20.04
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached

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

# apt install nwaf-mlc
CentOS 7
# yum install gcc rabbitmq-server python36 python36-devel python36-setuptools python36-pip memcached
# yum install nwaf-mlc
CentOS 8
# dnf install gcc rabbitmq-server python36 python36-devel python3-setuptools python3-pip memcached
# dnf install nwaf-mlc

Управление настройками Nemesida WAF с использованием облачного веб-приложения

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

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

Функционал управления настройками включен по умолчанию, но его можно отключить, направив запрос на электронную почту.

Облачное веб-приложение позволяет управлять:

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

Для использования функционала необходимо:

Выполнить базовую настройку модулей Nemesida WAF
  • динамический модуль Nemesida WAF:
    • nwaf_license_key — лицензионный ключ Nemesida WAF;
    • nwaf_sys_proxy — адрес прокси-сервера (если используется);
    • nwaf_api_proxy — адрес прокси-сервера (если используется) для обращения к Nemesida WAF API и Nemesida WAF Signtest;
    • nwaf_api_conf — адрес сервера Nemesida WAF API для отправки информации о выявленных аномалиях.
  • модуль Nemesida AI MLA:
    • st_enable — активировать передачу спорных запросов в Nemesida WAF Signtest для последующей обработки;
    • st_uri — адрес сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.
  • модуль Nemesida AI MLC:
    • nwaf_license_key — лицензионный ключ Nemesida WAF;
    • api_uri — адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях;
    • sys_proxy — адрес прокси-сервера (если используется);
    • api_proxy — адрес прокси-сервера (если используется) для обращения к Nemesida WAF API и Nemesida WAF Signtest;
    • st_enable — активировать передачу спорных запросов в Nemesida WAF Signtest для последующей обработки;
    • st_uri — адрес сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.

Если модули Nemesida WAF API и Nemesida WAF Signtest еще не настроены, то параметры nwaf_api_conf,api_uri,st_enable,st_uri можно указать позднее.

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

Добавить необходимое количество лицензионных ключей Nemesida WAF
Завершить базовую настройку динамического модуля Nemesida WAF
Для завершения настройки этого модуля достаточно задать условие временной автоматической блокировки IP-адреса (бана).

Завершить базовую настройку модуля Nemesida AI MLC
Для завершения настройки модуля необходимо задать:

  • cписок доменных имен, используемых в качестве виртуальных хостов, для которых будут созданы и применены поведенческие модели;
  • активировать механизм дополнительного анализа запросов;
  • DDoS detection:
    • активировать функционал выявления DDoS-атак;
    • задать временной интервал, в течение которого производится анализ запросов для выявления DDoS.
  • Brute detection:
    • активировать функционал выявления атак методом перебора и флуда;
    • создать список адресов для выявления атак методом перебора (например, example.com/auth);
    • создать список адресов для выявления флуда (например, example.com/sms_auth);
    • задать временной интервал, в течение которого производится анализ запросов для выявления атак методом перебора или флуда;
    • задать количество запросов, в рамках временного интервала, при достижении значения которого запускается механизм анализа атак методом перебора и флуда.

Управление настройками Nemesida WAF с использованием облачного API

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

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

Облачный API позволяет управлять:

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

Управление настройками осуществляется с помощью специально составленных запросов. Каждый запрос должен содержать лицензионный ключ установленной копии Nemesida WAF. Допускается вместо лицензионного ключа передавать его SHA256-хеш.

Функционал управления настройками включен по умолчанию, но его можно отключить, направив запрос на электронную почту.

Перед использованием функционала необходимо произвести базовые настройки модулей Nemesida WAF на каждом сервере, где они установлены:

Базовые настройки модулей
  • динамический модуль Nemesida WAF:
    • nwaf_license_key — лицензионный ключ Nemesida WAF;
    • nwaf_sys_proxy — адрес прокси-сервера (если используется);
    • nwaf_api_proxy — адрес прокси-сервера (если используется) для обращения к Nemesida WAF API и Nemesida WAF Signtest;
    • nwaf_api_conf — адрес сервера Nemesida WAF API для отправки информации о выявленных аномалиях.
  • Nemesida AI MLA:
    • st_enable — активировать передачу спорных запросов в Nemesida WAF Signtest для последующей обработки;
    • st_uri — адрес сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.
  • модуль Nemesida AI MLC:
    • nwaf_license_key — лицензионный ключ Nemesida WAF;
    • api_uri — Адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях;
    • sys_proxy — адрес прокси-сервера (если используется);
    • api_proxy — адрес прокси-сервера (если используется) для обращения к Nemesida WAF API и Nemesida WAF Signtest;
    • st_enable — активировать передачу спорных запросов в Nemesida WAF Signtest для последующей обработки;
    • st_uri — адрес сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.

Команды управления

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

Функционал доступен только для тарифа Enterprise.

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

# curl https://nemesida-security.com/nw/agent/public/get_event_log --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

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

Функционал доступен только для тарифа Enterprise.

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

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

# curl https://nemesida-security.com/nw/agent/get_dyn_settings --data 'key=%Лицензионный ключ или его SHA256-хеш%'

в формате JSON:

# curl https://nemesida-security.com/nw/agent/get_dyn_settings?format=json --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму настроек:

# curl https://nemesida-security.com/nw/agent/get_dyn_settings_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получение хеш-суммы необходимо для подтверждения внесенных изменений.

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

# 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.

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

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

Поддерживаемые параметры
Параметр
Описание параметра
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. В качестве 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. При использовании параметра будьте предельно осторожны.

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

nwaf_ip_lm

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

Пример:

{... "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. В качестве IP-адреса допускается использовать адрес с маской подсети или диапазон адресов.

Пример:

{... "nwaf_ip_wl": "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

Настройка обработки запросов для конкретного виртуального хоста с фиксацией в СУБД, но без фактической блокировки (режим IDS). При параметре 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 (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, 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 (IDS) для запросов, определенных модулем 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

Функционал доступен только для тарифа Enterprise.

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

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

# curl https://nemesida-security.com/nw/agent/get_mlc_settings --data 'key=%Лицензионный ключ или его SHA256-хеш%'

в формате JSON:

# curl https://nemesida-security.com/nw/agent/get_mlc_settings?format=json --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму настроек:

# curl https://nemesida-security.com/nw/agent/get_mlc_settings_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

# 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.

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

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

main__ai_extra

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

Пример:

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

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

Пример:

{... "ddos__enable": "true" ...}
ddos__wl_ip
Параметр, определяющий список IP-адресов в формате 1.2.3.4, для которых функционал выявления DDoS-атак будет отключен. Каждое последующее значение указывается через пробел.

Пример:

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

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

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

Пример:

{... "ddos__wl_url": ["example.com", ".example.com", "*.example.com"] ...}

или

{... "ddos__wl_url": ["example.com/auth"] ...}
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 добавляется к названию атаки в том случае, если её тип не был достоверно установлен.

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

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

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

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

# curl https://nemesida-security.com/nw/ml/mgmt/get_models_list_uri --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

# curl 'https://nemesida-security.com/nw/ml/mgmt/get_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com'

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

# curl 'https://nemesida-security.com/nw/ml/mgmt/del_models_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com'

где:

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

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

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com&duration=4'

где:

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

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

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=*.example.com&complete=no'

где:

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

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

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=.example.com&duration=4&complete=no'

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

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

Управление правилами исключения сигнатур

Функционал доступен только для тарифа Enterprise.

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

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

# curl https://nemesida-security.com/nw/agent/get_dyn_wl --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

# curl https://nemesida-security.com/nw/agent/get_dyn_wl?extended=yes --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму списка правил:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

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

где:

  • add — параметры настроек в формате JSON;
  • rid — 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.

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

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

Функционал доступен только для тарифа Enterprise.

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

  • соответствует географическому местоположению на основе 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.

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

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

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

# curl https://nemesida-security.com/nw/agent/get_erl --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

# curl https://nemesida-security.com/nw/agent/get_erl?extended=yes --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму списка правил:

# curl https://nemesida-security.com/nw/agent/get_erl_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

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

# curl https://nemesida-security.com/nw/agent/public/set_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_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_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_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_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_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_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": {"rid": "1"}}'

где:

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

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

Альтернативное управление настройками динамического модуля 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. При использовании прокси-сервера укажите его в опции nwaf_sys_proxy (например, nwaf_sys_proxy http://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, a.example.com;
nwaf_host_enable example.com, *.example.com;
nwaf_limit

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

Пример:

nwaf_limit rate=5r/m block_time=600;

Для установки лимита заблокированных запросов для конкретного домена необходимо привести параметр к виду: nwaf_limit rate=... block_time=... domain=...;

Пример:

nwaf_limit rate=5r/m block_time=600 domain=example.com;

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

nwaf_captcha_unban*

Активация/деактивация механизма разблокировки IP-адреса с помощью капчи.

Пример:

nwaf_captcha_unban on;
nwaf_ban_captcha_host*

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

Пример:

nwaf_ban_captcha_host *;
nwaf_ban_captcha_host example.com;
nwaf_ban_captcha_host *.example.com;

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

nwaf_ban_captcha_path*
nwaf_ban_captcha_url*

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

Пример:

nwaf_ban_captcha_path /captcha_path;

Для указания URL произвольной страницы с капчей в Интернете используется параметр nwaf_ban_captcha_url.

Пример:

nwaf_ban_captcha_url http://example.com/captcha_path;

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

Для корректной работы механизма разблокировки необходимо для определенного URL-адреса активировать параметр nwaf_captcha_unban. Использование одного экземпляра Nemesida WAF для защиты и веб-приложения, и страницы с капчей приведет к некорректной работе механизма разблокировки.

nwaf_sync_ban_ip_key*

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

Пример:

nwaf_sync_ban_ip_key 1234567890abcdef;
nwaf_sync_ban_ip_host*

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

Пример:

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_ban_ip_sync on; в файле виртуального хоста в секции location для получения списка заблокированных адресов, например:

location /ban_ip_sync_path {
         ...
         nwaf_ban_ip_sync on;
         ...
}

В целях безопасности рекомендуется ограничить обращения к URL с установленным параметром nwaf_ban_ip_sync on; списком разрешенных IP-адресов.

Для IP-адресов с остаточным временем блокировки менее 60 секунд синхронизация не проводится.

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

Пример:

nwaf_sys_proxy http://proxy.example.com:3128;

Для дистрибутивов Ubuntu 16.04 и CentOS 7 допускается использование прокси-сервера только по схеме HTTP.

nwaf_api_proxy
Параметр определяет адрес прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest.

Пример:

nwaf_api_proxy http://proxy.example.com:3128;

Для дистрибутивов Ubuntu 16.04 и CentOS 7 допускается использование прокси-сервера только по схеме HTTP.

nwaf_api_conf

Адрес сервера Nemesida WAF API для отправки информации о выявленных аномалиях.

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

nwaf_mla*

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

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

Для коммерческой версии Nemesida WAF параметр необходим для управления работой Nginx с помощью динамического модуля Nemesida WAF.

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

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

Настройка подсистемы взаимодействия с RabbitMQ.

nwaf_clamav*

Активация механизма отправки тела POST и PUT-запросов в модуль ClamAV.

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

Передача файлового содержимого тела PUT-запроса производится независимо от значения FILE_ONLY.

nwaf_ip_wl

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

Пример:

nwaf_ip_wl x.x.x.x;

При использовании nwaf_ip_wl x.x.x.x domain=example.com; механизм анализа будет деактивирован только при обращении с конкретного IP-адреса на конкретный виртуальный хост.
Для опции domain допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.
В качестве IP-адреса допускается использовать адрес с маской подсети или диапазон адресов.

Пример:

nwaf_ip_wl domain=example.com 127.0.0.1, 192.168.61.0/24, 192.168.61.1-192.168.61.255;

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

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

nwaf_ip_lm

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

Пример:

nwaf_ip_lm x.x.x.x;

При использовании nwaf_ip_lm x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен.
Для опции domain допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.
В качестве IP-адреса допускается использовать адрес с маской подсети или диапазон адресов.

Пример:

nwaf_ip_wl domain=example.com 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

Настройка обработки запросов для конкретного виртуального хоста с фиксацией в СУБД, но без фактичсекой блокировки (режим IDS). При параметре 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_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-значения: *, example.com, .example.com, *.example.com.

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_geoip_db_path*

Параметр, определяющий расположение файла с базой GeoIP2. Используется механизмом расширенных блокировок.

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

nwaf_geoip_db_path /opt/geoip/GeoLite2-Country.mmdb;

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

* Не используется в 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 или LM и имеющий BT 0 (статус обработки запроса), не блокируется, но добавляется в обучающую выборку.

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

Если запрос со score, равным 12, не попадает под действие режима LM, то будет произведена блокировка запроса сигнатурным анализом с передачей в модуль Nemesida WAF API, но без обработки другими подсистемами анализа запросов.

Альтернативное управление настройками модуля машинного обучения Nemesida AI

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

Хранение поведенческих моделей
Поведенческие модели, созданные модулем 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
Адрес сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.

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

Nemesida AI MLC

Для настройки модуля внесите необходимые изменения в конфигурационный файл /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-адресу. При неактивном функционале дополнительного анализа все незаблокированные запросы будут включены в обучающую выборку (за исключением запросов, попадающих под действие режима WL, или нелегитимных запросов, попавших под действия режима LM).

api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях. При пустом значении параметра информация отправляться не будет.
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=http://proxy.example.com:3128
api_proxy
Настройка адреса прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest.

Пример:

api_proxy=http://proxy.example.com:3128

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


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

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

Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

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

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

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

Пример:

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

Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

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

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


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

Пример:

wl_host = example.com .example.org *.example.us

Изменения параметра применяются автоматически, без перезапуска Nemesida AI MLC.

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

Пример:

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

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

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

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

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

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

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

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

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


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

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

st_uri
Адрес сервера Nemesida WAF Signtest для отправки спорных запросов.

[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:

# 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

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

Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Для этого можно воспользоваться облачным веб-приложением, облачным API или добавить к значению виртуального хоста символ ^ при использовании альтернативного управления настройками Nemesida WAF.

Пример:

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

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

Для корректного построения моделей требуется порядка 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

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

Пример удаления модели с помощью облачного API:

# curl 'https://nemesida-security.com/nw/ml/mgmt/del_models_uri' --data 'key=1234567890&vhost=example.com'

где:

  • key — лицензионный ключ или его SHA256-хеш;
  • vhost — имя виртуального хоста, для которого необходимо удалить модель.

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

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

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

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

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

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

# 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 и 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".

При использовании в уточнении | в качестве обычного символа необходимо произвести его одиночное экранирование. Например: $URL:abc\|d — поиск вхождения abc|d.

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

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

Для использования в правиле операторов регулярных выражений (/, |, ., *, ?, !, {, }, [, ], (, ), ^, $, :, \ и т. д.) в качестве обычных символов необходимо производить их двойное экранирование.

Пример:

  • $BODY_X:block\\|page – поиск вхождения block|page;
  • $BODY_X:data=\\(block-\\\a\\\-in-the-main\\) – поиск вхождения data=(block-\a\-in-the-main);
  • $ACCEPT_X:image\\/webp\\\\\* – поиск вхождения image/webp\* в заголовке Accept.

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

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

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

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

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 до 99999. Обязательный параметр.
domain
Установка принадлежности правила к домену. Для опции domain допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.
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 будут исключены из обработки сигнатурным анализом.

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

Перевод правил блокировки в режим 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, исключая основной домен;

LM ID:50004 domain=example.com "Z:BODY|$URL:/edit" — при таких параметрах запросы для виртуального хоста example.com будут переведены в режим LM, если вхождение персональной сигнатуры с идентификатором 50004 произойдет в зоне BODY и зона URL содержит /edit;

LM ID:50005 domain=example.com "Z:BODY|$URL_X:^/edit" — при таких параметрах запросы для виртуального хоста example.com будут переведены в режим LM, если вхождение персональной сигнатуры с идентификатором 50005 произойдет в зоне BODY и зона URL начинается с /edit;

LM ID:50006 domain=*.example.com "Z:BODY|$ARGS:test=123" — при таких параметрах запросы для всех поддоменов виртуального хоста example.com, исключая основной домен, будут переведены в режим LM, если вхождение персональной сигнатуры с идентификатором 50006 произойдет в зоне BODY и зона ARGS содержит /edit.

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

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

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

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

Для событий BT 1, 2, 3, 4, 8 параметр nwaf_limit файла nwaf.conf позволяет регулировать допустимое количество заблокированных запросов. При превышении допустимого количества запросов, определенного опцией rate, IP-адрес будет заблокирован на время (в секундах), указанное в block_time.

Для событий BT 7, 9, 10 блокирование IP-адреса источника запросов будет происходить после первого заблокированного запроса, независимо от значения параметра rate в nwaf_limit.

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

Для корректной работы механизма разблокировки IP-адреса необходимо активировать параметр nwaf_captcha_unban, добавив его в файле виртуального хоста в секцию server для определенного URL-адреса. Пример активации параметра nwaf_captcha_unban:

server {
    listen  80;
    server_name example.com;

    location /captcha_ip_unban_path {
             ...
             nwaf_captcha_unban on;
             ...
    }
    ...
}

Также необходимо настроить веб-приложение с капчей. С подробной инструкцией по интеграции Nemesida WAF c функционалом reCAPTCHA можно ознакомиться по ссылке.

После активации параметра nwaf_captcha_unban on; и перезапуска Nginx функционал разблокировки IP-адреса становится доступным для целевого URL-адреса с установленной опцией nwaf_captcha_unban.

Пример:
example.com/captcha_ip_unban_path.

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

В целях безопасности рекомендуется разрешить обращения на URL-адрес сервера с установленным динамическим модулем Nemesida WAF и активированным параметром разблокировки IP-адреса nwaf_captcha_unban только с IP-адреса сервера с капчей.

Источники сообщений об ошибках

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

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

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

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

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