Ⅴ. Фильтрующая нода | Немезида ВАФ

Руководство по установке, первичной настройке и эксплуатации фильтрующей ноды, включающей динамический модуль для Nginx/Angie и агент машинного обучения Nemesida AI MLA, предназначенной для выявления и блокирования аномалий, с использованием сигнатурного анализа и поведенческих моделей, а также для анализа запросов на соответствие их схеме в формате OpenAPI и Swagger.

Установка

Настройка веб-сервера

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

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

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

# apt update && apt upgrade
# apt install apt-transport-https gnupg2 curl

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

Debian 11
# echo "deb http://nginx.org/packages/debian/ bullseye nginx" > /etc/apt/sources.list.d/nginx.list
# curl -s https://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update
Debian 12
# echo "deb http://nginx.org/packages/debian/ bookworm nginx" > /etc/apt/sources.list.d/nginx.list
# curl -s https://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update

Установите Nginx:

# apt install nginx
Установите пакеты:

# apt update && apt upgrade
# apt install apt-transport-https gnupg2 curl

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

Ubuntu 20.04
# echo "deb http://nginx.org/packages/ubuntu/ focal nginx" > /etc/apt/sources.list.d/nginx.list
# curl -s https://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update
Ubuntu 22.04
# echo "deb http://nginx.org/packages/ubuntu/ jammy nginx" > /etc/apt/sources.list.d/nginx.list
# curl -s https://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update
Ubuntu 24.04
# echo "deb http://nginx.org/packages/ubuntu/ noble nginx" > /etc/apt/sources.list.d/nginx.list
# curl -s https://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update

Установите Nginx:

# apt install nginx
Подключите репозиторий Nginx, приведя файл /etc/yum.repos.d/nginx.repo к виду:

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

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

# dnf update
# dnf install nginx

Настройка работы веб-сервера в режиме обратного прокси

Настройка веб-сервера с установленным Nginx/Angie и Немезида ВАФ в режиме обратного прокси позволяет использовать его в качестве промежуточного сервера.

Установка компонента

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

В случае проведения мероприятий, направленных на конфигурацию ОС для обеспечения ее безопасности (например, на основе рекомендаций CIS Benchmarks), перед установкой пакета необходимо удалить флаги безопасности rw, nosuid, noexec, nodev для директории /tmp, где хранятся временные файлы, используемые при установке.

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

  • Nginx stable, начиная с 1.16;
  • Nginx mainline, начиная с 1.19;
  • Nginx Plus, начиная с R26.

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

# rm -f /etc/machine-id
# /bin/systemd-machine-id-setup
Автоматическая установкаDebianUbuntuRHELDockerYandex Cloud VM

1. Загрузите скрипт;

2. Запустите скрипт установки командой:

# /bin/bash ./4-filtering-node-deploy.sh 'nwaf_lic_key=%Licence key%' 'api_url=%Nemesida WAF API URL%' 'sys_proxy=%Proxy server address%' 'api_proxy=%Proxy server address%'

где:

  • nwaf_lic_key — лицензионный ключ;
  • api_url — адрес сервера с которого будут производиться обращения компонента Nemesida WAF API после его настройки (например, http://api.example.com:8080/nw-api/);
  • sys_proxy — (Опционально) IP-адрес прокси сервера для доступа компонента к внешним ресурсам (например, http://proxy.example.com:3128);
  • api_proxy — (Опционально) IP-адрес прокси сервера для взаимодействия с Nemesida WAF API (например, http://proxy.example.com:3128).
Подключите репозиторий Немезида ВАФ:

Debian 11
# echo "deb https://nemesida-security.com/repo/nw/debian bullseye non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update
Debian 12
# echo "deb https://nemesida-security.com/repo/nw/debian bookworm nwaf" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update

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

# apt install python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc g++ memcached rabbitmq-server

Nginx:

# apt install nwaf-dyn-1.26

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

Angie:

# apt install nwaf-angie-1.7.0

где 1.7.0 — версия установленного Angie.

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow

Подключите репозиторий Немезида ВАФ и установите пакеты:

Ubuntu 20.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu focal non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update
# apt install python3.9 python3.9-venv python3-pip python3.9-dev python3-setuptools libcurl3-gnutls librabbitmq4 libcurl4-openssl-dev libc6-dev gcc g++ memcached rabbitmq-server
Ubuntu 22.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu jammy non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg 
# apt update
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libcurl3-gnutls librabbitmq4 libcurl4-openssl-dev libc6-dev gcc g++ memcached rabbitmq-server
Ubuntu 24.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu noble nwaf" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg 
# apt update
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libcurl3-gnutls librabbitmq4 libcurl4-openssl-dev libc6-dev gcc g++ memcached rabbitmq-server

Nginx:

# apt install nwaf-dyn-1.26

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

Angie:

# apt install nwaf-angie-1.7.0

где 1.7.0 — версия установленного Angie.

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow
Для корректной работы пакета openapi-schema-validator необходимо предоставить прямой доступ к json-schema.org:443.

Произведите настройку политики 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

Подключите репозиторий Немезида ВАФ, приведя файл /etc/yum.repos.d/NemesidaWAF.repo к виду:

[NemesidaWAF]
name=Nemesida WAF Packages for RHEL
baseurl=https://nemesida-security.com/repo/nw/rhel/$releasever/$basearch/
gpgkey=https://nemesida-security.com/repo/nw/gpg.key
enabled=1
gpgcheck=1

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

RHEL 8 и деривативы
1. Подключите репозиторий RabbitMQ в соответствии с руководством.

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

# dnf update
# dnf install epel-release
# dnf config-manager --set-enabled powertools
# dnf update
# dnf install python39 python39-devel python39-setuptools python39-pip systemd openssl librabbitmq libcurl-devel gcc memcached rabbitmq-server
RHEL 9 и деривативы
1. Подключите репозиторий RabbitMQ в соответствии с руководством.

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

# dnf install epel-release
# dnf config-manager --set-enabled crb
# dnf update
# dnf install python3 python3-devel python3-setuptools python3-pip systemd openssl librabbitmq libcurl-devel gcc memcached rabbitmq-server

Nginx:

# dnf install nwaf-dyn-1.26

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

Angie:

# dnf install nwaf-angie-1.7.0

где 1.7.0 — версия установленного Angie.

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow

Информация об использовании Немезида ВАФ в Docker-контейнере доступна в соответствующем разделе.
Информация об использовании Немезида ВАФ в виде Yandex Cloud VM доступна в соответствующем разделе.

Настройка

В целях безопасности рекомендуется запретить внешние входящие соединения с сетевыми сервисами, за исключением соединений с Nginx/Angie.

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

Добавьте путь до файла с динамическим модулем 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 1026000 in /etc/nginx/nginx.conf:1

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

Первичная настройка

После установки модуля необходимо произвести первичную настройку, указав следующие параметры в файле /etc/nginx/nwaf/conf/global/nwaf.conf:

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

Параметр установки лицензионного ключа ПО Немезида ВАФ. Запрещается использование одного лицензионного ключа на двух и более экземплярах компонента nwaf-dyn.

При указанном недействительном лицензионном ключе (в том числе при значении по умолчанию nwaf_license_key none), Немезида ВАФ продолжит работу с функционалом Немезида ВАФ Комьюнити.

nwaf_sys_proxy
Параметр задает адрес прокси-сервера для обращения к внешним ресурсам (проверка лицензионного ключа, получение сигнатур и т.д.).

Пример:

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

Допускается использование параметров аутентификации при использовании прокси-сервера.

Пример:

nwaf_sys_proxy http://<user>:<password>@proxy.example.com:3128;
nwaf_api_proxy
Параметр задает адрес прокси-сервера для обращения к Nemesida WAF API.

Пример:

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

Допускается использование параметров аутентификации при использовании прокси-сервера.

Пример:

nwaf_api_proxy http://<user>:<password>@proxy.example.com:3128;
nwaf_api_conf

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

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

Пример:

nwaf_api_conf host=http://api.example.com:8080/nw-api/;

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

# systemctl restart nginx rabbitmq-server memcached nwaf_update mla_main api_firewall
# systemctl status nginx rabbitmq-server memcached nwaf_update mla_main api_firewall

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

За получение набора сигнатур (/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.

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

  • /var/log/nginx/error.log;
  • /var/log/nwaf/nwaf_update.log;
  • /var/log/nwaf/mla.log;
  • /var/log/nwaf/naf/error.log;
  • /var/log/rabbitmq/rabbit@%hostname%.log;
  • /var/log/rabbitmq/rabbitmq-server.error.log.

Дополнительная настройка

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

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

Активирует механизм анализа запроса средствами Немезида ВАФ для виртуального хоста. При параметре 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_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. Использование одного экземпляра Немезида ВАФ для защиты и веб-приложения, и страницы с капчей приведет к некорректной работе механизма разблокировки.

nwaf_ban_captcha_token

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

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

Пример:

nwaf_ban_captcha_token 01b307acba4f54f55aafc33bb06bbbf6ca803e9a;

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

nwaf_mla

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

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

nwaf_mla_api

Параметр настройки взаимодействия с модулем Nemesida AI MLA в случаях передачи запроса на анализ его спецификации в формате OpenAPI, но без анализа модулем машинного обучения.

nwaf_mla_mgmt

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

nwaf_rmq

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

Для этого внесите изменения в конфигурационный файл /etc/nginx/nginx.conf или /etc/rabbitmq/rabbitmq.conf на каждом сервере с установленным динамическим модулем.

Пример конфигурации для nginx.conf:

...
stream {
        server {
                listen 5673 ssl;
                proxy_pass 127.0.0.1:5672;
                ssl_certificate /etc/nginx/SSL/crt/example.ru.crt;
                ssl_certificate_key /etc/nginx/SSL/private/example.ru.key;
                allow  x.x.x.x;
                deny all;
       }
}
...

Параметр listen 5673 ssl; задает порт, на котором сервер будет принимать запросы при защищенном соединении.

x.x.x.x — адрес сервера компонента Nemesida AI MLC. Используемые для защищенного соединения сертификаты должны быть доверенными для него.

nwaf_clamav

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

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

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

Пример:

nwaf_clamav 127.0.0.1:3310;
nwaf_clamav 127.0.0.1:3310 FILE_ONLY;
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_icap_av

Активация взаимодействия с антивирусными решениями по протоколу ICAP.

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

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

Параметр PRIVIEW_SIZE задает значение соответствующего заголовка для ICAP-сервера. По умолчанию, 1024.

Пример:

nwaf_icap_av 127.0.0.1:1344/avscan;
nwaf_icap_av 127.0.0.1:1344/avscan FILE_ONLY;
nwaf_icap_av 127.0.0.1:1344/avscan PREVIEW_SIZE=1024;
nwaf_icap_av 127.0.0.1:1344/avscan FILE_ONLY PREVIEW_SIZE=1024;

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

nwaf_icap_av_wl

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

Пример заблокированного запроса:
Nemesida WAF: the request has been blocked by ICAP AV interface, Win.Test.EICAR_HDB-1 FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ...

Пример правила исключения:

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

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

nwaf_captcha_unban*

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

Пример:

nwaf_captcha_unban on;
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";

* Активируется в настройках виртуального хоста.

При настройке фильтрующей ноды дополнительно может понадобиться внесение изменений в файл /etc/nginx/nwaf/mla.conf:

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

Сокет принимает соединения от динамического модуля при передаче запроса на дополнительный анализ машинным обучением или одновременной передаче запроса на обработку машинным обучением и анализ на соответствие его спецификации в формате OpenAPI.

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

ml_socket = 127.0.0.1:5101
api_socket

Сокет принимает соединения от динамического модуля в случаях передачи запроса на анализ его спецификации в формате OpenAPI.

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

api_socket = 127.0.0.1:5102
mgmt_socket

Сокет принимает соединения от динамического модуля в сервисных целях (определение географического местоположения на основе IP-адреса, перезапуск Nginx для применения настроек на фильтрующей ноде и т.д.).

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

mgmt_socket = 127.0.0.1:5103
debug

Активирует режим отладки.

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

debug = false

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

# systemctl restart nginx rabbitmq-server memcached nwaf_update mla_main api_firewall
# systemctl status nginx rabbitmq-server memcached nwaf_update mla_main api_firewall

Управление настройками с помощью веб-приложения и API

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

Настройки, производимые с помощью веб-приложения и обращений API (настройки, правила исключения (WL), расширенные правила блокировки (ERL), список IP-адресов для блокировки (BL) и список URL-адресов, отправляемых в модуль Nemesida AI MLA на анализ соответствия запроса его схеме в формате OpenAPI), хранятся в файлах директории /etc/nginx/nwaf/conf/global/db. Изменение содержимого файлов производится модулем Nemesida AI MLA, но Nginx также необходимо предоставить доступ на чтение к этой директории.

Дополнительная информация

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

Для коррректной работы динамического модуля и Nemesida AI MLA, на фильтрующей ноде располагаются следующие файлы и директории:

  • /etc/nginx/nwaf/conf/global/nwaf.conf — файл конфигурации динамического модуля, позволяющий выполнить первичную настройку компонента;
  • /etc/nginx/nwaf/rules.bin — набор сигнатур для корректной работы сигнатурного метода анализа запросов;
  • /etc/nginx/nwaf/conf/global/db/ — директория, которая содержит файлы с настройками динамического модуля, устанавливаемые через Личный кабинет или Nemesida WAF API (например, settings.db содержит основные настройки динамического модуля);
  • /etc/nginx/nwaf/conf/openapi/ — директория, которая содержит применяемые Nemesida AI MLA спецификации, в формате .json, необходимые для корректной работы API Firewall;
  • /etc/nginx/nwaf/ml/ — директория, которая содержит все применяемые модулем Nemesida AI MLA поведенческие модели (файлы .ml), а также запросы (файл mt.json), экспортированные через Личный кабинет;
  • /etc/nginx/nwaf/conf/nginx — директория, которая содержит параметры конфигурации веб-сервера Nginx, в формате .conf, задаваемые с помощью Немезида ВАФ.

Работа фильтрующей ноды в режиме мониторинга

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

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

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

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

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

upstream mirror_upstream {
        server nemesida_waf_server:port;
        server 127.0.0.1:88 backup;

}

server {
        listen  127.0.0.1:88 default_server;
        return 200 "Response code: 200";
        add_header Content-Type text/plain;
        access_log off;
}
server {
        ...
        location / {
                mirror /mirror;
                root /var/www/html;
                proxy_pass      http://mirror_upstream;
                include         proxy_params;
        }

        location = /mirror {
                   internal;
                   proxy_pass http://mirror_upstream$request_uri;
                   proxy_connect_timeout 10s;
                   proxy_send_timeout 10s;
                   proxy_read_timeout 15s;
    }

}

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

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

server {
        ...
        
        location / {
                proxy_pass http://127.0.0.1:86/;
        }
}

server {
        listen  86;
        index   index.html;
        root    /var/www/html;

        location / {
                 return 200;
                 add_header Content-Type text/plain;
        }
}

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

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

4. Для получения информации от основного веб-сервера об исходном IP-адресе клиента, на сервере с установленным модулем Nemesida WAF приведите файл /etc/nginx/nginx.conf к виду:

server {
...
set_real_ip_from x.x.x.x;
real_ip_header X-Real-IP;
real_ip_recursive on;
}

x.x.x.x — адрес основного веб-сервера, дублирующего трафик на сервер с установленным модулем Nemesida WAF. Исходный IP-адрес клиента передается основным веб-сервером в заголовке X-Real-IP.

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

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

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

Управление сигнатурами и виртуальный патчинг

Для создания правил исключения (WL) и блокировки (ERL) воспользуйтесь Личным кабинетом или API.

Виртуальный патчинг

Виртуальный патчинг Немезида ВАФ защищает сайты от существующих неисправленных уязвимостей (в том числе «нулевого дня»), блокируя попытки их эксплуатации, при этом не нарушая работу веб-приложения. Применение правил виртуального патчинга позволяет разработчикам сосредоточиться на исправлении уязвимостей без необходимости срочного изменения кода. Виртуальный патчинг позволяет «на лету» блокировать все попытки эксплуатации известной уязвимости, особым образом контролируя зону атаки.

В Немезида ВАФ используется два источника генерации виртуальных патчей: автоматически, модулем Nemesida AI, и вручную, созданием расширенного правила блокировки (ERL) с помощью Личного кабинета или вызова API.

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

Для корректной работы механизма разблокировки IP-адреса необходимо активировать опции:

  • nwaf_ban_captcha_host — виртуальный хост(ы), для которых необходимо активировать механизм разблокировки IP-адресов с помощью капчи.

    Пример:
    nwaf_ban_captcha_host *;
    nwaf_ban_captcha_host example.com;
    nwaf_ban_captcha_host *.example.com;
    

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

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

    Пример:
    nwaf_ban_captcha_path /captcha_path;
    

    или

    nwaf_ban_captcha_url http://example.com/captcha_path;
    

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

  • nwaf_ban_captcha_token — секретный токен, который используется механизмом удаления IP-адреса из списка заблокированных при использовании капчи. В качестве значения параметра принимается произвольная последовательность символов.

    Пример:
    nwaf_ban_captcha_token 01b307acba4f54f55aafc33bb06bbbf6ca803e9a;
    

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

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

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

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

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

Активация анализа бинарного содержимого средствами антивирусной защиты позволяет блокировать возможные попытки злоумышленников передавать с помощью HTTP-запроса вредоносные файлы (например, вирусы). В Немезида ВАФ реализована поддержка интеграции с ClamAV, а также любым другим антивирусным решением, поддерживающим протокол взаимодействия ICAP.

Интеграция с антивирусными решениями по протоколу ICAP

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

Для активации взаимодействия с антивирусными решениями по протоколу ICAP внесите изменения в файл конфигурации /etc/nginx/nwaf/conf/global/nwaf.conf:

  • FILE_ONLY — передача только файлового содержимого из тела запроса с Content-Type: multipart/form-data. Передача файлового содержимого тела PUT-запроса производится независимо от значения FILE_ONLY;
  • PREVIEW_SIZE — значение соответствующего заголовка для ICAP-сервера (по умолчанию, 1024).

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

nwaf_icap_av 127.0.0.1:1344/avscan;
nwaf_icap_av 127.0.0.1:1344/avscan FILE_ONLY;
nwaf_icap_av 127.0.0.1:1344/avscan PREVIEW_SIZE=1024;
nwaf_icap_av 127.0.0.1:1344/avscan FILE_ONLY PREVIEW_SIZE=1024;

Настройка списка исключения

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

Пример заблокированного запроса:
Nemesida WAF: the request has been blocked by ICAP AV interface, Win.Test.EICAR_HDB-1 FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ...

Пример правила исключения:

nwaf_icap_av_wl 44d88612fea8a8f36de82e1278a-bb02f;

Интеграция с антивирусным ПО ClamAV

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

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

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

# apt install clamav-daemon

Для активации взаимодействия с ПО ClamAV:

  • приведите файл /etc/clamav/clamd.conf к виду:
    ...
    TCPSocket 3310
    TCPAddr   127.0.0.1
    ...
    
  • активируйте опцию nwaf_clamav в конфигурационном файле /etc/nginx/nwaf/conf/global/nwaf.conf:
    nwaf_clamav 127.0.0.1:3310;
    nwaf_clamav 127.0.0.1:3310 FILE_ONLY;
    

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

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

Настройка списка исключения

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

Пример заблокированного запроса:
Nemesida WAF: the request has been blocked by ICAP AV interface, Win.Test.EICAR_HDB-1 FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ...

Пример правила исключения:

nwaf_clamav_wl 44d88612fea8a8f36de82e1278a-bb02f;

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

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

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

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

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

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

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

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

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

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

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

Немезида ВАФ позволяет использовать специальный заголовок, определяющий результат блокировки запроса по стране с помощью функционала расширенного правила блокировки запросов. Для его активации необходимо добавить параметр add_header nemesidawaf-cc $nwaf_cc always; в область http, server или location конфигурационного файла nginx.

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

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

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

  • Выполните запрос: curl -i example.com

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

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-cc: 1
...

В данном случае статус равен 1. Это означает, что запрос был заблокирован по полю country. Если правило составлено с использованием дополнительных полей, например, body или headers, то при блокировке заголовок применяться не будет. Исключениями являются поля vhost и url.