Ⅵ. Nemesida AI MLC | Немезида ВАФ

Руководство по установке, первичной настройке и эксплуатации модуля машинного обучения Nemesida AI MLC, предназначенного для построения поведенческих моделей, выявления атак методом перебора, флуда и DDoS-атак и активности паразитных ботов (например, противодействие веб-скрейпингу), а также генерации схем запросов на основе спецификации OpenAPI.

Установка

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

Модуль Nemesida AI состоит из модулей Nemesida AI MLA (входит в установочный пакет nwaf-dyn) и Nemesida AI MLC.

Библиотеки Python
Для корректной работы модулей машинного обучения необходимо использовать единые версии библиотек Python на фильтрующих нодах и серверах с установленными Nemesida AI MLC.

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

Автоматическая установкаDebianUbuntuRHELDockerYandex Cloud VM

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

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

# /bin/bash ./5-mlc-deploy.sh 'nwaf_lic_key=%Licence key%' 'api_url=%Nemesida WAF API URL%' 'rmq_endpoints=%RabbitMQ endoints info%' '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/);
  • rmq_endpoints — реквизиты подключения к очереди RabbitMQ на фильтрующих нодах (например, guest:guest@127.0.0.1);
  • sys_proxy — (Опционально) IP-адрес прокси сервера для доступа компонента к внешним ресурсам (например, http://proxy.example.com:3128);
  • api_proxy — (Опционально) IP-адрес прокси сервера для взаимодействия с Nemesida WAF API (например, http://proxy.example.com:3128).
Установите пакеты:

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

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

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 libc6-dev rabbitmq-server gcc memcached
# apt install nwaf-mlc

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas simple-crypt pika logutils scikit-learn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache genson pyarrow

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

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

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

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 libc6-dev rabbitmq-server gcc memcached
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 libc6-dev rabbitmq-server gcc memcached
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 libc6-dev rabbitmq-server gcc memcached

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

# apt install nwaf-mlc

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas simple-crypt pika logutils scikit-learn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache genson pyarrow

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

# systemctl enable rabbitmq-server
# service rabbitmq-server restart
# service rabbitmq-server status

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

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

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

# systemctl enable rabbitmq-server
# service rabbitmq-server restart
# service rabbitmq-server status

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

# dnf update
# dnf install epel-release
# dnf config-manager --set-enabled crb
# dnf install python3 python3-devel python3-setuptools python3-pip gcc memcached

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

# dnf install nwaf-mlc

Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas simple-crypt pika logutils scikit-learn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache genson pyarrow

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

При выявлении некоторых типов событий Nemesida AI MLC передает IP-адрес источника события и его тип (например, DDoS/Brute-force и т.д.) на сервисный API (nemesida-security.com) для улучшения анализа угроз.

Настройка

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

Предварительная настройка

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

1. Разрешите обращения к RabbitMQ через веб-сервер Nginx. Для этого добавьте соответствующие записи в файл /etc/nginx/nginx.conf:

stream {
    server {
        listen 5673;
        proxy_pass 127.0.0.1:5672;
        allow x.x.x.x;
        deny all;
    }
}

где x.x.x.x — IP-адрес сервера, на котором установлен Nemesida AI MLC.

2. Выполните перезапуск Nginx:

# nginx -t && service nginx reload

3. Разрешите обращения с сервера, на котором установлен модуль Nemesida AI MLC, на сервер с фильтрующей нодой на порт 5673 (TCP).

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

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

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

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

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

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

nwaf_license_key = 1234567890
sys_proxy
Настройка адреса прокси-сервера для обращения к внешним ресурсам (проверка лицензионного ключа, загрузка списка виртуальных хостов и т.д.).

Пример:

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

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

Пример:

sys_proxy=http://<user>:<password>@proxy.example.com:3128
api_proxy
Настройка адреса прокси-сервера для обращения к Nemesida WAF API.

Пример:

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

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

Пример:

api_proxy http://<user>:<password>@proxy.example.com:3128
api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях. При пустом значении параметра информация отправляться не будет.
debug
Режим отладки.
[run]
Секция, отвечающая за параметры соединения с сервисом RabbitMQ.
rmq_host
Параметры соединения с сервисом RabbitMQ на фильтрующей ноде для сбора данных, необходимых при построении поведенческой модели, а также сообщений о блокировке запросов для их передачи в Nemesida WAF API.

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

Пример:

rmq_host = guest:guest@192.168.0.1:5673 guest:guest@192.168.0.2:5673

Допускается использовать защищенное соединение:

rmq_host = ssl://guest:guest@example.ru:5673

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

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

rmq_host_local
Параметры соединения с сервисом RabbitMQ для локального размещения очередей.

Пример:

rmq_host_local = guest:guest@127.0.0.1

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


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

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

# systemctl restart mlc_main rabbitmq-server memcached
# systemctl status mlc_main rabbitmq-server memcached

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

  • /var/log/nwaf/mlc.log;
  • /var/log/rabbitmq/rabbit@%hostname%.log;
  • /var/log/rabbitmq/rabbitmq-server.error.log.

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

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

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

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

  • /opt/mlc/mlc.conf — файл конфигурации, позволяющий выполнить первичную настройку компонента;
  • /opt/mlc/ml/ — директория, которая содержит:
    • все созданные Nemesida AI MLC поведенческие модели (файлы .ml);
    • обучающие выборки на время создания поведенческой модели (файлы .db);
    • резервные копии обучающей выборки, используемые при переобучении поведенческой модели (директория backup);
    • запросы (файл mt.json), экспортированные через Личный кабинет;
    • файлы, используемые Nemesida AI MLC при автоматической генерации спецификаций в формате OpenAPI (файлы openapi_*.json).

Режим работы «точка-многоточка»

Модуль Nemesida AI MLC поддерживает схему работы «точка-многоточка», когда один сервер с установленным модулем Nemesida AI MLC взаимодействует со множеством фильтрующих нод, в том числе с множеством виртуальных кластеров Немезида ВАФ. Для активации работы в таком режиме выполните настройки, представленные ниже.

Фильтрующая нода

На каждой из фильтрующих нод выполните следующие действия:

1. Разрешите обращения к RabbitMQ через веб-сервер Nginx. Для этого добавьте соответствующие записи в файл /etc/nginx/nginx.conf:

stream {
  server {
    listen 5673;
    proxy_pass 127.0.0.1:5672;
    allow x.x.x.x;
    deny all;
  }
}

где x.x.x.x — IP-адрес сервера, на котором установлен Nemesida AI MLC.

2. Выполните перезапуск Nginx:

# nginx -t && service nginx reload

3. Разрешите обращения с сервера, на котором установлен модуль Nemesida AI MLC, на сервер с фильтрующей нодой на порт 5673 (TCP).

Nemesida AI MLC

1. Переместите файл /opt/mlc/mlc.conf в каталог /opt/mlc/conf, переименуйте его (например, server-1.conf) и обновите настройки, включая настройки подключения к серверу RabbitMQ, расположенному на фильтрующей ноде:

...
rmq_host = guest:guest@x.x.x.x:5673
...

или (если используется более 1 фильтрующей ноды в виртуальном кластере Немезида ВАФ):

...
rmq_host = guest:guest@x.x.x.x:5673 guest:guest@y.y.y.y:5673
...

где x.x.x.x/y.y.y.y — IP-адреса фильтрующих нод.

2. Выполните перезапуск службы:

# systemctl restart mlc_main
# systemctl status mlc_main

После выполнения настройки необходимо проверить информацию об ошибках, которая содержится в журналах регистрации событий работы компонента для каждого сервера, например: /var/log/nwaf/server-1/mlc.log.