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

Установка

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

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

DebianUbuntuCentOSDockerVirtual Appliance
# apt install apt-transport-https gnupg2

sudo

Debian 9
# echo "deb https://nemesida-security.com/repo/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
Debian 10
# echo "deb https://nemesida-security.com/repo/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
Debian 11
# echo "deb https://nemesida-security.com/repo/nw/debian bullseye 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
# apt install apt-transport-https gnupg2
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 9
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server gcc memcached
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
Ubuntu 18.04
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools 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
CentOS 7
# yum install gcc rabbitmq-server python36 python36-devel python36-setuptools python36-pip 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 gcc python39 python39-devel python39-setuptools python39-pip 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 gcc python3 python3-devel python3-setuptools python3-pip memcached
# dnf install nwaf-mlc

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

После установки модуля необходимо произвести первичную настройку, указав следующие параметры:

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

[Nemesida AI MLC]
Секция, отвечающая за общие настройки модуля Nemesida AI MLC. Для настройки модуля внесите необходимые изменения в основной конфигурационный файл /opt/mlc/mlc.conf
nwaf_license_key
Установка лицензионного ключа Nemesida WAF при работе на выделенном сервере. При использовании на одном сервере с модулем Nemesida WAF или при работе в режиме Multipoint Mode задействовать параметр не нужно.

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

nwaf_license_key = 1234567890
api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях. При пустом значении параметра информация отправляться не будет.
sys_proxy
Настройка адреса прокси-сервера для обращения к nw-auth-extra.nemesida-security.com:443 (проверка лицензионного ключа) и nemesida-security.com:443 (загрузка списка виртуальных хостов, загрузка и выгрузка поведенческих моделей).

Пример:

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

Пример:

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

Если параметры не имеют значений, то модуль будет пытаться использовать параметры из файла nwaf.conf.

st_enable
Отправка спорных запросов, получаемых от модуля Nemesida WAF с использованием RabbitMQ, на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLC определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLC определил как нелегитимный.

st_uri
Адрес сервера Nemesida WAF Signtest для отправки спорных запросов.

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

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

# service mlc_main restart
# service mlc_main status

Настройка

Функционал облачного управления настройками включен по умолчанию, но его можно отключить, направив запрос на электронную почту.

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

Для корректной работы модуля рекомендуем разрешить обращения к портам: 8080 (Nemesida WAF API), 5672 (RabbitMQ), 11211 (Memecache).

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

Информация о настройке Nemesida AI MLC c использованием облачного веб-приложения и облачного API доступна в соответствующих разделах.

Управление настройками с помощью конфигурационных файлов

Nemesida AI MLC

Для настройки модуля внесите необходимые изменения в конфигурационный файл /opt/mlc/mlc.conf. Файл /opt/mlc/mlc-example.conf содержит полный перечень доступных параметров.

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

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

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

Допускается использование wildcard-значений. К одному запросу может применяться только одна модель. Модель применяется в следующем порядке приоритета от высшего к низшему:

1. vhosts_list = example.com — построение и применение модели для конкретного домена;
2. .example.com — построение и применение модели для домена example.com и его поддоменов;
3. *.example.com — построение и применение модели только для поддоменов *.example.com, исключая основной домен example.com;
4. * — построение и применение модели для всех остальных доменов.

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

vhosts_list = .example.com b.example.com

— построение и применение моделей для перечисленных виртуальных хостов

Не допускается одновременное использование example.com и .example.com. Если требуется использовать одну модель на домен, а другую — на его поддомены, используйте example.com и *.example.com.

Пример:

vhosts_list = example.com *.example.com

При применении поведенческих моделей к запросу учитывается уровень домена, то есть будет применяться модель, соответствующая виртуальному хосту из запроса, а в случае её отсутствия — модель, включающая в себя этот домен.

Таким образом, для запроса с доменным именем b.example.com будет применена модель b.example.com, если такой нет — модель .example.com, если и такой нет — то модель *.example.com.

Период обучения модели можно изменить, указав необходимое количество дней перед доменным именем: x:example.com, где x — период обучения в днях.

Пример использования:
5:example.com — обучение модели будет длиться 5 дней.

nwaf_license_key
Установка лицензионного ключа Nemesida WAF при работе на выделенном сервере. При использовании на одном сервере с модулем Nemesida WAF или при работе в режиме Multipoint Mode задействовать параметр не нужно.

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

nwaf_license_key = 1234567890
ai_extra

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

api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей и информации о выявленных аномалиях. При пустом значении параметра информация отправляться не будет.

[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.

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

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

Пример:

rmq_host_local = guest:guest@127.0.0.1

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


[proxy]
Секция, отвечающая за настройки соединения с прокси-сервером.
sys_proxy

Настройка адреса прокси-сервера для обращения к nw-auth-extra.nemesida-security.com:443 (проверка лицензионного ключа) и nemesida-security.com:443 (загрузка списка виртуальных хостов, загрузка и выгрузка поведенческих моделей).

Пример:

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

Пример:

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

Если параметры не имеют значений, то модуль будет пытаться использовать параметры из файла nwaf.conf.


[ddos]
Секция, отвечающая за работу функционала выявления атак «отказ в обслуживании» (DDoS-атак) на уровне приложений.
enable
Активация/деактивация функционала.
wl_ip
Параметр, определяющий путь до файла, в котором задаются IP-адреса в формате 1.2.3.4, для которых функционал будет отключен. Каждое последующее значение указывается через пробел.

Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

wl_url
Параметр, определяющий путь до файла, в котором задаются адреса как в формате vhost, так и в формате vhost/path, где:

vhost — имя виртуального хоста, для которого функционал выявления DDoS-атак будет отключен.
path — вхождение адреса ресурса.

Для виртуального хоста допускается использование строгого соответствия и wildcard-значения.

Пример:

example.com/feed
.example.com/feed
*.example.com/feed
*/feed

Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.
send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible DDoS. При значении false запросы в Nemesida WAF API передаваться не будут.

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.


[brute]
Секция, отвечающая за работу функционала выявления флуда (flood attack) и атак методом перебора (brute force attack). Выявление перебора значений производится в зонах ARGS и/или BODY.
enable
Активация/деактивация функционала.
wl_host
Деактивация функционала для конкретных виртуальных хостов. Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

wl_host = example.com .example.org *.example.us

Изменения параметра применяются автоматически, без перезапуска Nemesida AI MLC.

interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
max_val
Количество запросов, при достижении значения которого производится блокирование источника(-ов) атаки.
brute_detect
Параметр, определяющий путь до файла, в котором пользователем системы задаются адреса для выявления атак методом перебора в формате vhost/path, где path — вхождение адреса ресурса на веб-сервере. Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

example.com/auth
.example.com/auth
*.example.com/auth
*/auth

Таким образом, при установленном значении example.com/auth, мониторинг атак методом перебора будет производиться как для example.com/auth, так и для example.com/auth/reset_password.

Параметр применяется для выявления атак методом перебора, но не блокирует повторяющиеся запросы с одинаковым содержимым в зонах ARGS или BODY.

Для адресов, не указанных в файле, выявление атак методом перебора не производится. Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

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

Таким образом, в случае повторной отправки идентичных запросов (например, множественные попытки восстановления пароля по СМС), запросы, имеющие схожее содержание и попадающие под действие параметра flood_detect, не будут удалены, в отличие от запросов, имеющие схожее содержание, но попадающих под действие параметра brute_detect.

Для адресов, не указанных в файле, выявление попыток флуда не производится. Изменения в файлах применяются автоматически, без перезапуска Nemesida AI MLC.

latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.
send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible Brute force/Possible Flood. При значении false запросы в Nemesida WAF API передаваться не будут.

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.


[st]
Секция, отвечающая за взаимодействие с модулем управления обучением Nemesida WAF Signtest.
st_enable
Отправка спорных запросов, получаемых от модуля Nemesida WAF с использованием RabbitMQ, на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLC определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLC определил как нелегитимный.

st_uri
Адрес сервера Nemesida WAF Signtest для отправки спорных запросов.

[mls]
Секция, отвечающая за передачу трафика на удаленный сервер для построения поведенческих моделей. Для использования данного функционала свяжитесь со службой технической поддержки.
mls_enable
Активация механизма передачи анализируемого трафика на сервер Nemesida WAF MLS. По умолчанию функционал деактивирован.

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

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

# service mlc_main restart
# service mlc_main status

Дополнительные режимы работы модуля 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 ".*" ".*" ".*"

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

Работа с использованием облачного сервера Nemesida AI MLS

Облачный сервер Nemesida AI предназначен для генерации поведенческих моделей на основе поступающей с удаленных серверов копии трафика. Облачный сервер используется в случаях, когда пользователь ПО Nemesida WAF не имеет достаточного для работы модуля Nemesida AI MLC объема ОЗУ. Для использования возможностей облачного сервера Nemesida AI свяжитесь со службой технической поддержки.

Управление поведенческими моделями
Управление поведенческими моделями также можно производить с помощью облачного веб-приложения и облачного API.

Точность поведенческих моделей

В период обучения, для построения более качественных моделей, не рекомендуется производить сканирование веб-приложения на уязвимости, а также направлять другие нелегитимные запросы. Сразу после первого обучения рекомендуется произвести переобучение моделей. Управление ложными срабатываниями производится с помощью модуля Nemesida WAF Signtest.

Хранение поведенческих моделей

Поведенческие модели, созданные модулем Nemesida AI MLC, передаются на удаленный сервер Nemesida AI MLS и автоматически распространяются на все запущенные экземпляры Nemesida AI MLA и Nemesida AI MLC в соотвествии с WAF ID.

Переобучение моделей Nemesida AI

Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Для этого можно воспользоваться облачным веб-приложением, облачным API или добавить к значению виртуального хоста символ ^ при использовании конфигурационных файлов.

Пример:

vhosts_list = example.com^

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

# service mlc_main restart

После переобучения моделей рекомендуется удалить экспортированные запросы ВТ 12 (запросы содержатся на странице False Positive, доступной на веб-интерфейсе модуля Nemesida WAF Signtest). При обучении моделей для виртуального хоста запросы ВТ 12 войдут в обучающую выборку и далее не потребуются.

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

Увеличение срока обучения поведенческих моделей Nemesida AI

Для корректного построения моделей требуется порядка 400.000-800.000 уникальных запросов. По умолчанию срок обучения составляет 4 дня. Период обучения модели можно изменить непосредственно при указании списка доменных имен в параметре vhosts_list в mlc.conf: x:example.com, где x — период обучения в днях. Например, 5:example.com — обучение модели будет длиться 5 дней.

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

# service mlc_main restart

Дообучение моделей с использованием резервной копии обучающей выборки

Для корректного построения моделей требуется порядка 400.000-800.000 уникальных запросов. Если во время обучения количество запросов было недостаточным, то можно его перезапустить и воспользоваться запросами из прошлой выборки. Для этого выполните следующие действия:

1. Остановите сервис Nemesida AI MLC:

# service mlc_main stop

2. Переместите файл /opt/mlc/ml/backup/[vhost].d_[timestamp], где [timestamp] — дата создания резервной копии обучающей выборки, созданной Nemesida AI MLC перед началом построения модели, в /opt/mlc/ml/[vhost].d. Например, для модели example.com:

# mv /opt/mlc/ml/backup/example.com.d_1613587613 /opt/mlc/ml/example.com.d

3. Запустите обучение. Для этого необходимо добавить к значению виртуального хоста символ ^.

Пример:

vhosts_list = example.com^

Запустите сервис Nemesida AI MLC:

# service mlc_main start

После завершения периода обучения (период можно изменить) поведенческая модель будет создана на основе запросов из общей выборки.

Удаление моделей Nemesida AI

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

Пример удаления модели с помощью облачного API:

# curl 'https://nemesida-security.com/nw/ml/mgmt/del_models_uri' --data 'key=1234567890&vhost=example.com'

где:

  • key — лицензионный ключ или его SHA256-хеш;
  • vhost — имя виртуального хоста, для которого необходимо удалить модель.

Обучающая выборка при построении поведенческих моделей

Запросы, определенные как BT 1, BT 2, BT 3 и BT 4, не добавляются в обучающую выборку, даже если попадают под действие режима LM.

При включенном режиме ai_extra запросы, определенные модулем Nemesida AI MLC как нелегитимные, не добавляются в обучающую выборку.