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

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

Установка

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

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

DebianUbuntuCentOSDockerVirtual Appliance
# apt install apt-transport-https gnupg2 curl
Debian 10
# echo "deb https://nemesida-security.com/repo/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -
# apt update && apt upgrade
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 && apt upgrade
# apt install apt-transport-https gnupg2 curl
Ubuntu 18.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu bionic 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
Ubuntu 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
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 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 Stream
# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-8-1-6.noarch.rpm
# dnf update
# dnf install epel-release
CentOS 9 Stream
# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-9-1-6.noarch.rpm
# dnf update
# dnf install epel-release
Информация об использовании Nemesida AI MLC в Docker-контейнере доступна в соответствующем разделе.
Информация об использовании Nemesida WAF в виде Virtual Appliance (виртуальный диск для KVM/VMware/VirtualBox) и Yandex VM доступна в соответствующем разделе.

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

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

Установка

DebianUbuntuCentOS
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

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

Ubuntu 18.04
# apt install python3-venv python3-dev python3.8 python3.8-venv python3.8-dev 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
Ubuntu 22.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

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

CentOS 7
# yum update
# yum install centos-release-scl
# yum install rh-python38 rh-python38-python-pip rh-python38-python-devel rh-python38-python-setuptools gcc rabbitmq-server memcached
# yum install nwaf-mlc
CentOS 8 Stream
Добавьте репозиторий 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

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

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

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

# dnf install python39 python39-devel python39-setuptools python39-pip gcc memcached
# dnf install nwaf-mlc
CentOS 9 Stream
Установите пакеты:

# dnf update
# dnf install centos-release-rabbitmq-38
# dnf install rabbitmq-server

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

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

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

# dnf install python3 python3-devel python3-setuptools python3-pip gcc memcached
# 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 python-geoip-python3 python-geoip-geolite2 netaddr pymemcache genson

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

После установки модуля необходимо произвести первичную настройку. Конфигурационный файл /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.

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

Пример:

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

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

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
Устанавливает максимальное количество уникальных запросов, включённых в обучающую выборку.

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

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

# service mlc_main restart
# service mlc_main status

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

Настройка

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

Для управления настройками настройками Nemesida AI используйте один из методов, доступных для вашего тарифа:

LightBusiness, Enterprise
Для настройки используйте Личный кабинет.
Для настройки используйте Личный кабинет и API.

Дополнительные режимы работы модуля Nemesida AI MLC

Работа в режиме Multipoint Mode

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

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

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

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

или

# rabbitmqadmin declare user name=USER password=PASSWORD tags=user
# rabbitmqadmin declare permission vhost=/ user=USER configure=".*" write=".*" read=".*"

где 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

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

# service rabbitmq-server restart

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

Создайте дополнительные файлы конфигурации в директории /opt/mlc/conf/, скопировав файл /opt/mlc/mlc.conf.

Например:

/opt/mlc/conf/server_1.conf
/opt/mlc/conf/server_2.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 будет производить сбор запросов с последующим обучением моделей таким же образом, как и при обычном режиме работы.

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