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

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

Установка

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

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

DebianUbuntuCentOSAstra LinuxDockerYandex Cloud VM
# 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 && apt upgrade
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 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
# 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
# apt install apt-transport-https gnupg2 curl
# 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
Информация об использовании Nemesida AI MLC в Docker-контейнере доступна в соответствующем разделе.
Информация об использовании Nemesida AI MLC в виде Yandex Cloud VM доступна в соответствующем разделе.

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

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

Установка

DebianUbuntuCentOSAstra Linux
Debian 11
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
Debian 12
# 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 netaddr pymemcache genson pyarrow

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 netaddr pymemcache genson pyarrow

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 netaddr pymemcache genson pyarrow

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

# 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 netaddr pymemcache genson pyarrow

Настройка

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

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

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

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

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

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