Запросы не анализируются модулем машинного обучения | Немезида ВАФ


За построение поведенческой модели отвечает компонент Nemesida AI MLC. После 4-х дневного обучения, поведенческая модель будет сформирована и применена на фильтрующей ноде, а также будет отображаться в Личном кабинете. Если поведенческая модель недоступна, то необходимо проверить журнал компонента Nemesida AI MLC /var/log/nwaf/mlc.log, обращая внимание на следующие записи:

Current training progress for virtual host example.com: 5%

Запись означает, что обучение не завершено. Когда прогресс будет равен 100%, то обучение завершится автоматически и поведенческая модель:

  • появится в директории /opt/mlc/ml в виде 2 файлов: example.com_vect.ml и example.com_rf.ml;
  • появится в Личном кабинете;
  • появится на фильтрующей ноде в директории /etc/nginx/nwaf/ml в виде 2 файлов: example.com_vect.ml и example.com_rf.ml;

Анализ запросов модулем машинного обучения начнется только после применения поведенческой модели на фильтрующей ноде. Чтобы проверить, что поведенческие модели применились на фильтрующей ноде, необходимо проверить журнал Nemesida AI MLA /var/log/nwaf/mla.log, обращая внимание на следующуя запись:

INFO     The list of Nemesida AI virtual hosts received from Nemesida WAF API: example.com
INFO     example.com md5: cdaba1e888de20b3b116d3ad28838a4f
INFO     Models processing finished

Запись означает, что на фильтрующей ноде применена поведенческая модель для виртуального хоста example.com. Отсутствие записи example.com md5: cdaba1e888de20b3b116d3ad28838a4f означает, что поведенческая модель не была применена.

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

  • поведенческая модель была повреждена и не может быть применена агентом машинного обучения Nemesida AI MLA;
  • на фильтрующей ноде и Nemesida AI MLC установлены различные версии Python, использующие несовместимые версии pip-пакетов;
  • поведенческая модель не применяется после обновления компонентов.

Если поведенческая модель была повреждена и не может быть применена агентом машинного обучения Nemesida AI MLA, то рекомендуется выполнить дообучение поведенческой модели с использованием резервной копии обучающей выборки.

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

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. Запустите обучение:

# curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=*.example.com&complete=no'

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

# service mlc_main start

Если на фильтрующей ноде и Nemesida AI MLC установлены различные версии Python, использующие несовместимые версии pip-пакетов, то рекомендуется произвести обновление версий Python до актуальной, для синхронизации используемых пакетов на обоих серверах.

В случае, если обновление версии Python невозможно на одном из серверов, то в качестве решения можно произвести понижение версии используемых pip-пакетов до версий, используемых в Python самой ранней версии (например, при установленной версии Python 3.7 на одном из серверов, понижение версии пакетов будет производиться до этой версии, если она является самой ранней из установленных).

Рассмотрим пример понижения версии pip-пакетов для Python 3.9 до версии Python 3.7:

Инструкция по понижению версии pip-пакетов
1. На сервере, где установлен Python 3.7, получите список устновленных pip-пакетов:

# /usr/share/nwaf/venv/bin/python3.7 -m pip freeze

и сохраните версии установленных пакетов scikit-learn и scipy;

2. На сервере с установленным компонентом Nemesida AI MLC удалите директорию /usr/share/nwaf/ и выполните переустановку компонента:

# rm -rf /usr/share/nwaf/
# apt install nwaf-mlc --reinstall

3. Произведите установку pip-пакетов, используя ранее полученный список пакетов:

# /usr/share/nwaf/venv/bin/python3.9 -m pip install scikit-learn==1.0.2 scipy==1.7.3

4. Перезапустите сервисы компонента, для которого производилось понижение версий pip-пакетов.

Поведенческая модель создается компонентом Nemesida AI MLC для определенной версии Python. Если понижение версии используемых pip-пакетов производилось для сервера с компонентов Nemesida AI MLC, то после понижения версии pip-пакетов необходимо выполнить процесс дообучения поведенческой модели с используем резервной копии обучающей выборки.

При принятии решения о понижении версии пакетов следует учитывать, что устревшие версии ОС могут использовать версии Python, поддержка которых завершена или завершится в ближайшее время. Поэтому для решения проблем, связанных с использованием разных версий Python, рекомендуем рассматривать вариант обновления ОС до актуальной версии. Проверить состояние поддержки интерсующей версии Python можно здесь.

Если после обновления поведенческой модели не производится анализ модулем машинного обучения, то необходимо проверить журналы компонентов /var/log/nwaf/mla.log и /var/log/nwaf/mlc.log. Ошибки вида:

An error occurred while loading file /etc/nginx/nwaf/ml/example.com_rf.ml: node array from the pickle has an incompatible dtype:
- expected: [('left_child', '<i8'), ('right_child', '<i8'), ('feature', '<i8'), ('threshold', '<f8'), ('impurity', '<f8'), ('n_node_samples', '<i8'), ('weighted_n_node_samples', '<f8')] - got: {'names': ['left_child', 'right_child', 'feature', 'threshold', 'impurity', 'n_node_samples', 'weighted_n_node_samples', 'missing_go_to_left'], 'formats': ['<i8', '<i8', '<i8', '<f8', '<f8', '<i8', '<f8', 'u1'], 'offsets': [0, 8, 16, 24, 32, 40, 48, 56], 'itemsize': 64}

говорят о том, что поведенческие модели были созданы на одной версии pip-зависимостей, но после обновления компонентов были обновлены зависимости и дальнейшее применение моделей невозможно. В таком случае рекомендуется обновить pip-зависимости по следующей инструкции:

  • Фильтрующая нода:
    • обновите компонент до актуальной версии;
    • обновите pip-зависимости, запустив скрипт /usr/share/nwaf/venv/pip_update.sh на каждом из обновленных компонентов;
    • перезапустите сервис mla_main.
  • Nemesida AI MLC:
    • удалите все поведенческие модели, используя функционал Личного кабинета или вызовы API;
    • обновите компонент до актуальной версии;
    • обновите pip-зависимости, запустив скрипт /usr/share/nwaf/venv/pip_update.sh на каждом из обновленных компонентов;
    • перезапустите сервис mlc_main.