Основные ошибки при настройке компонентов Немезида ВАФ | Немезида ВАФ

Руководство по исправлению основных проблем, связанных с настройкой и эксплуатацией Немезида ВАФ.

🔗 Атаки не блокируются

Немезида ВАФ поставляется в виде динамического модуля для Nginx. После проведения первичной настройки компонента необходимо проверить корректность работы сигнатурного метода обнаружения атак, отправив запрос http://YOUR_SERVER/nwaftest.

Cервер должен вернуть код ответа 403, а в error-логе веб-сервера Nginx появится запись:

Nemesida WAF: the request 5274fe3c397782a09b4f1b057e572e21 blocked by rule ID 1 in zone URL, ...

Если запрос не блокируется:

  • проверьте, что после внесения изменений в конфигурацию Nginx был выполнен перезапуск сервисов nginx nwaf_update mla_main;
  • проверьте, что динамический модуль /etc/nginx/modules/ngx_http_waf_module.so находится в /etc/nginx/modules и подключен в /etc/nginx/nginx.conf;
  • проверьте размер файла /etc/nginx/nwaf/rules.bin, он не должен быть пустым. В случае подозрений нарушения целостности файла его можно удалить и загрузить заново, выполнив перезапуск сервиса nwaf_update;
  • проверьте поступает ли запрос для обработки на веб-сервер Nginx, где установлен динамический модуль;
  • проверьте, что отсутствуют правила исключения обработки запросов для виртуального хоста/IP-адреса;
  • проверьте, что IP-адрес, с которого обращаетесь, не находится в разрешающем списке (WL).

🔗 Атаки блокируются, но не отображаются в личном кабинете

В случаях, когда атаки блокируются и отображаются в error-логе веб-сервера Nginx, но не отображаются в личном кабинете, необходимо проверить:

  • корректно задан адрес сервера Nemesida WAF API в /etc/nginx/nwaf/conf/global/nwaf.conf в формате nwaf_api_config host=http://api.example.com:8080/nw-api;
  • корректно задан адрес прокси-сервера (если используется) для доступа к Nemesida WAF API в /etc/nginx/nwaf/conf/global/nwaf.conf;
  • произведена корректная установка и настройка компонента Nemesida WAF API, отсутствуют ошибки в логе /var/log/uwsgi/nw-api/nw-api-logging.log;
  • сервер Nemesida WAF API имеет доступ к базе данных для подключения.

🔗 В личном кабинете не появляется функционал управления настройками

Для активации функционала управление настройками Немезида ВАФ необходимо выполнить несколько условий:

  • добавлен лицензионный ключ в настройках пользователя;
  • функционал активирован администратором;
  • указан адрес подключения к Nemesida WAF API в параметре API_URI (файл /var/www/app/cabinet/settings.py).

🔗 Не отображаются реальные IP-адреса клиентов

Сервер с веб-приложением не получает реальные IP-адреса клиентов

Все легитимные запросы, не заблокированные Немезида ВАФ, отправляются на сервер с веб-приложением. Чтобы веб-приложение получало от фильтрующей ноды (веб-сервера Nginx с установленным динамическим модулем) корректный IP-адрес клиентов, необходимо добавить заголовок set_real_ip_from в конфигурационный файл nginx.conf

http {
   ...
   set_real_ip_from x.x.x.x;
   ...
}

x.x.x.x — адрес фильтрующей ноды (веб-сервер Nginx с установленным динамическим модулем).

После внесения изменения проверьте конфигурацию и перезапустите сервис Nginx:

# nginx -t && service nginx reload

В личном кабинете не отображаются реальные IP-адреса клиентов

Личный кабинет предназначен для визуализации информации об атаках. Вся необходимая информация об атаке, включая IP-адрес источника запросов, передается от динамического модуля.

В случае, если дополнительный сервер обрабатывает запросы в режиме reverse proxy и передает их на фильтрующую ноду (веб-сервер Nginx с установленным динамическим модулем), все запросы будут поступать с единым IP-адресом этого сервера. Чтобы получать корректную информацию об IP-адресах клиентов, необходимо добавить заголовок set_real_ip_from в конфигурационный файл nginx.conf:

http {
   ...
   set_real_ip_from x.x.x.x;
   ...
}

x.x.x.x — адрес сервера, работающего в режиме reverse proxy.

После внесения изменения проверьте конфигурацию и перезапустите сервис Nginx:

# nginx -t && service nginx reload

🔗 В личном кабинете не отображается поведенческая модель

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

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

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

  • An error occurred while sending the models of virtual host example.com to Nemesida WAF API: status: <Response [413]>

    Запись означает, что модель уже сформирована, но не может быть отправлена в Nemesida WAF API из-за его ограничений на максимальный размер тела запроса.

    Решение: увеличить значение параметра client_max_body_size, приведя конфигураионный файл /etc/nginx/nwaf/conf.d/nwaf-api.conf к виду:

    server {
    
            ...
    
            client_max_body_size 64M;
    
            ...
    }
    

    Значение устанавливаемого параметра должно быть больше значения размера файла с расширением .ml в директории /opt/mlc/ml/tmp/. После внесения изменений необходимо выполнить перезапуск компонента Nemesida WAF API:

    # systemctl restart nw-api rldscupd memcached
    
  • Not enough available memory (12%) to process

    Запись означает, что недостаточно аппаратных ресурсов сервера для обработки трафика.

    Решение: увеличить объем ОЗУ сервера.

  • Insufficient traffic to build behavioral models for virtual host example.com (required: 25)

    Запись означает, что Nemesida AI MLC не получил достаточного количества трафика для построения поведенческой модели и обучение будет продолжено.

    Решение:

    • проверить, что трафик веб-приложения поступает на фильтрующую ноду;
    • в конфигурационном файле /opt/mlc/mlc.conf проверить, что корректно указаны реквизиты подключения к сервису RabbitMQ на фильтрующей ноде;
    • проверить, что Nemesida AI MLC собирает трафик из соответствующей очереди RabbitMQ (в очереди nwaf не накапливаются записи) на фильтрующей ноде.

    🔗 После завершения обучения не происходит анализа запросов модулем машинного обучения

    За построение поведенческой модели отвечает компонент 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
    

    2. Сохраните полученное содержимое в файле /usr/share/nwaf/venv/requirements.txt на сервере, где планируется понижение версии PIP-пакетов;

    3. Произведите установку PIP-пакетов:

    # cd /usr/share/nwaf/venv/
    # /usr/share/nwaf/venv/bin/python3.7 -m pip -r requirements.txt
    

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

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