Руководство по установке, первичной настройке и эксплуатации фильтрующей ноды, включающей динамический модуль для Nginx/Angie и агент машинного обучения Nemesida AI MLA, предназначенной для выявления и блокирования аномалий, с использованием сигнатурного анализа и поведенческих моделей, а также для анализа запросов на соответствие их схеме в формате OpenAPI и Swagger.
Настройка веб-сервера
Динамический модуль разработан для веб-сервера
Nginx
, но также совместим с веб-серверомAngie
. Для его установки воспользуйтесь инструкцией на официальном сайте продукта.
В случае компиляции Nginx из исходного кода необходимо добавить параметры --with-compat --with-threads --with-pcre --with-stream
при выполнении configure
для активации поддержки динамического модуля.
# apt update && apt upgrade # apt install apt-transport-https gnupg2 curl
Подключите репозиторий Nginx:
Установите Nginx:
# apt install nginx
# apt update && apt upgrade # apt install apt-transport-https gnupg2 curl
Подключите репозиторий Nginx:
Установите Nginx:
# apt install 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
. Установка и настройка динамического модуля для веб-сервера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
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
).
Установите пакеты:
# 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
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
.
# 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
Установите пакеты:
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
В целях безопасности рекомендуется запретить внешние входящие соединения с сетевыми сервисами, за исключением соединений с 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
:
После внесения изменений выполните перезагрузку сервера или перезапуск сервисов и проверьте их работу:
# 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.
При настройке фильтрующей ноды дополнительно может понадобиться внесение изменений в файл /etc/nginx/nwaf/mla.conf
:
После внесения изменений выполните перезагрузку сервера или перезапуск сервисов и проверьте их работу:
# 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 и прочие).
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.
Каждому запросу, поступающему на анализ в модуль 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
.
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-адреса. После этого пользователь будет переадресован на исходную страницу.
Для активации антивирусной защиты установите ПО ClamAV на сервер с настроенным ПО Немезида ВАФ, если это не было сделано ранее.
Пример установки для Debian 12:
# 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.