Руководство по установке, настройке и эксплуатации модуля Nemesida WAF API.

Доменное имя example.com вместе с поддоменами в руководстве используется в качестве примера.

Установка и настройка модуля Nemesida WAF API
Локальная версия Nemesida WAF API предназначена для передачи информации о заблокированных запросах от модулей Nemesida WAF в локальную базу данных, которая может быть использована для интеграции локальными сервисами визуализации, такими как Личный кабинет Nemesida WAF, размещенный на стороне клиента. Такая схема взаимодействия позволяет не передавать данные об атаках за пределы инфраструктуры клиента. Ниже представлено краткое руководство по введению в эксплуатацию локальной версии Nemesida WAF API на серверах под управлением ОС Linux.

Для установки локальной версии Nemesida WAF API необходимо выполнить следующие действия:

1. Разрешите обращения к https://nemesida-security.com.
2. Выполните установку модуля:

DebianUbuntuCentOS 7
# apt install apt-transport-https
Debian 9
# echo "deb https://repository.pentestit.ru/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
Debian 10
# echo "deb https://repository.pentestit.ru/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt update && apt upgrade
# apt install python3-pip python3-dev python3-venv postgresql-server-dev-all nginx 
# apt install nwaf-api

Установка niginx будет производится автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. По завершении установки переименуйте конфигурационный файл виртуального хоста nwaf-api.conf.disabledв nwaf-api.conf и перезапустите nginx.

Произведите установку и настройку СУБД PostgreSQL:

# apt install postgresql

Создайте БД, пользователя и пароль для подключения модуля Nemesida WAF API:

# su - postgres -c "psql -c \"CREATE DATABASE waf;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_api PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE waf to nw_api;\"" 
# su - postgres -c "psql -c \"ALTER ROLE nw_api WITH LOGIN;\""

Создайте БД, пользователя и пароль для подключения модуля Личный кабинет Nemesida WAF:

# su - postgres -c "psql -c \"CREATE DATABASE cabinet;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_cabinet PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE cabinet to nw_cabinet;\""
# su - postgres -c "psql -c \"ALTER ROLE nw_cabinet WITH LOGIN;\""
# apt install apt-transport-https
16.04
Подключите репозиторий:

# echo "deb [arch=amd64] https://repository.pentestit.ru/nw/ubuntu xenial non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -

Подключите репозиторий Python 3.6:

# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa

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

# apt update && apt upgrade
# apt install python3.6-dev python3.6-venv nginx postgresql-server-dev-all
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
18.04
Подключите репозиторий и произведите установку пакетов:

# echo "deb [arch=amd64] https://repository.pentestit.ru/nw/ubuntu bionic non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt update && apt upgrade
# apt install python3-pip python3-dev python3-venv nginx postgresql-server-dev-all 
 # apt install nwaf-api

Установка niginx будет производится автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. По завершении установки переименуйте конфигурационный файл виртуального хоста nwaf-api.conf.disabledв nwaf-api.conf и перезапустите nginx.

Произведите установку и настройку СУБД PostgreSQL:

# apt install postgresql

Создайте БД, пользователя и пароль для подключения модуля Nemesida WAF API:

# su - postgres -c "psql -c \"CREATE DATABASE waf;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_api PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE waf to nw_api;\"" 
# su - postgres -c "psql -c \"ALTER ROLE nw_api WITH LOGIN;\""

Создайте БД, пользователя и пароль для подключения модуля Личный кабинет Nemesida WAF:

# su - postgres -c "psql -c \"CREATE DATABASE cabinet;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_cabinet PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE cabinet to nw_cabinet;\""
# su - postgres -c "psql -c \"ALTER ROLE nw_cabinet WITH LOGIN;\""

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

# rpm -Uvh https://repository.pentestit.ru/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
# rpm -Uvh https://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
# yum install python36 python36-pip python36-devel nginx postgresql11-devel gcc 
# yum install nwaf-api

Установка nginx будет производиться автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. По завершении установки переименуйте конфигурационный файл виртуального хоста nwaf-api.conf.disabled в nwaf-api.conf и перезапустите nginx.

Произведите установку и настройку СУБД PostgreSQL:

# yum install postgresql11-server
# /usr/pgsql-11/bin/postgresql-11-setup initdb
# sed -i "s|host    all             all 127.0.0.1/32            ident|host    all all             127.0.0.1/32            md5|" /var/lib/pgsql/11/data/pg_hba.conf
# sed -i "s|host    all             all ::1/128                 ident|host    all all             ::1/128                 md5|" /var/lib/pgsql/11/data/pg_hba.conf 
# systemctl start postgresql-11.service
# systemctl enable postgresql-11.service

Создайте БД, пользователя и пароль для подключения модуля Nemesida WAF API:

# su - postgres -c "psql -c \"CREATE DATABASE waf;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_api PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE waf to nw_api;\"" 
# su - postgres -c "psql -c \"ALTER ROLE nw_api WITH LOGIN;\""

Создайте БД, пользователя и пароль для подключения модуля Личный кабинет Nemesida WAF:

# su - postgres -c "psql -c \"CREATE DATABASE cabinet;\""
# su - postgres -c "psql -c \"CREATE ROLE nw_cabinet PASSWORD 'YOUR_PASSWORD';\""
# su - postgres -c "psql -c \"GRANT ALL ON DATABASE cabinet to nw_cabinet;\""
# su - postgres -c "psql -c \"ALTER ROLE nw_cabinet WITH LOGIN;\""
3. Создайте структуру базы данных:

# cat /var/www/nw-api/api.sql | su postgres -c "psql waf"

Внесите необходимые изменения в файл /var/www/nw-api/settings.py для подключения к СУБД PostgreSQL, где:
DB_HOST — адрес СУБД;
DB_PASS — пароль пользователя nw_api, заданный в п.1, для подключения к СУБД;
PROXY — адрес прокси сервера (если используется) для подключения к nemesida-secuirty.com.

4. Перезагрузите сервер и проверьте работу модуля:

# systemctl status nw-api

Интеграция модуля Nemesida WAF API

Для интеграции локальной версии Nemesida WAF API с ПО Nemesida WAF выполните следующие действия:

1. На сервере с установленным модулем Nemesida WAF внесите изменения в конфигурационный файл /etc/nginx/nwaf/conf/global/nwaf.conf, приведя параметр к виду:

nwaf_api_conf host=http://nwaf-api.example.com:8080 ...

2. На сервере с установленным модулем Nemesida AI MLC внесите изменения в конфигурационный файл /opt/mlc/mlc.conf, приведя параметр к виду:

api_uri = http://nwaf-api.example.com:8080/nw-api/

3. После внесения изменений необходимо перезапустить сервисы или перезагрузить сервер.

nwaf-api.example.com:8080 — адрес и порт сервера, на котором установлен модуль Nemesida WAF API.

Описание структуры базы данных модуля Nemesida WAF API

Информация о событиях, поступающих в модуль Nemesida WAF API, размещается в базе данных waf в таблицах attack, ml и scan_report.

attack

Таблица attack предназначена для размещения в СУБД информации о выявленных аномалиях работы модулей Nemesida WAF и Nemesida AI.

Параметр
Описание
timestamp
Дата фиксации аномалии.
ip
Адрес источника запроса.
rule_id
Идентификатор правила, по которому производилась фиксация аномалии.
bt
Цифровой идентификатор метода определения аномалий (сигнатурный анализ, машинное обучение и т.д.).
mz
Зона возникновения аномалии (URL, Args, Body и т.д.).
method
Тип HTTP-запроса (GET, POST и т.д.).
uri
URI запроса.
ua
referer
cookie
Заголовки HTTP-запроса.
vhost
Адрес виртуального хоста.
content
Тело запроса или содержимое прочих заголовков (в зависимости от содержимого mz).
bot
Зарезервированный параметр.
description
Описание аномалии.
lm
Параметр, определяющий попадает ли запрос под действие режиме LM.
waf_id
Идентификатор модуля Nemesida WAF.
request_id
Идентификатор запроса.
ml

Таблица ml предназначена для размещения в СУБД информации о статусе обучения модуля Nemesida AI.

Параметр
Описание
waf_id
Идентификатор модуля Nemesida WAF.
ml_status
Статус работы модуля Nemesida AI (0 — не активен, 1 — активен).
ml_learning_progress
Статус обучения модуля Nemesida AI в процентах.
vhost
Виртуальный хост.
scan_report

Таблица scan_report предназначена для размещения в СУБД информации о статусе работы модуля Nemesida WAF Scanner.

Параметр
Описание
id
Идентификатор записи.
scan_date
Дата сканирования.
content
Уровень критичности обнаруженной уязвимости.
domain
Виртуальный хост.
method
Тип HTTP-запроса (GET, POST и т.д.).
param
Аргументы запроса.
payload
Содержание «полезной нагрузки» запроса.
type
Тип обнаруженной уязвимости (SQLi, XSS и т.д.).
url
URI запроса.
data
Тело запроса (для POST-запросов).
waf_id
Идентификатор модуля Nemesida WAF.