Руководство по установке, настройке и эксплуатации модуля Nemesida WAF API, предназначенного для приема информации об атаках и выявленных уязвимостях.

Установка и настройка модуля Nemesida WAF API
Nemesida WAF API предназначен для передачи информации от модулей Nemesida WAF (заблокированные запросы, выявленные уязвимости, статус работы модуля машинного обучения) в базу данных PostgreSQL для последующей интеграции с различными сервисами, такими как Личный кабинет Nemesida WAF, системами класса SIEM и т. д.

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

1. Установите модуль:

DebianUbuntuCentOSDockerVirtual Appliance
# apt install apt-transport-https gnupg2
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 python3-pip python3-dev python3-venv postgresql-server-dev-all nginx memcached
# 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 gnupg2
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
# apt install python3-pip python3-dev python3-venv nginx postgresql-server-dev-all memcached 
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
# apt install python3-pip python3-dev python3-venv nginx postgresql-server-dev-all memcached 
 # apt install nwaf-api

Установка Nginx будет производится автоматически с созданием виртуального хоста в каталоге /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;\""
Настройте политику SELinux или деактивируйте ее командой:

# setenforce 0

после чего приведите файл /etc/selinux/config к виду:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
CentOS 8 Stream
Подключите репозитории и установите необходимые зависимости:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-8-1-6.noarch.rpm
# dnf update
# dnf install python39 nginx python39-pip python39-devel postgresql-devel gcc memcached
# dnf install nwaf-api

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

Установите и настройте СУБД PostgreSQL:

# dnf install postgresql-server
# postgresql-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/data/pg_hba.conf
# sed -i "s|host    all             all             ::1/128                 ident|host    all             all             ::1/128                 md5|" /var/lib/pgsql/data/pg_hba.conf
# systemctl start postgresql
# systemctl enable postgresql
CentOS 9 Stream
Подключите репозитории и установите необходимые зависимости:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-9-1-6.noarch.rpm
# dnf update
# dnf install python3 nginx python3-pip python3-devel postgresql-devel gcc memcached
# dnf install nwaf-api

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

Установите и настройте СУБД PostgreSQL:

# dnf install postgresql-server
# postgresql-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/data/pg_hba.conf
# sed -i "s|host    all             all             ::1/128                 ident|host    all             all             ::1/128                 md5|" /var/lib/pgsql/data/pg_hba.conf
# systemctl start postgresql
# systemctl enable 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;\""
Информация об использовании Nemesida WAF в Docker-контейнере доступна в соответствующем разделе.
Информация об использовании Nemesida WAF в виде Virtual Appliance (виртуальный диск для KVM/VMware/VirtualBox) и Yandex VM доступна в соответствующем разделе.

2. Разрешите обращения:
— к серверам nemesida-security.com:443, *.nemesida-security.com:443 и geoip.nemesida-security.com:80/443;
— к серверу Memcached 127.0.0.1:11211;
— к серверу с СУБД PostgreSQL 127.0.0.1:5432.

3. Создайте структуру базы данных:

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

4. Внесите необходимые изменения в файл /var/www/nw-api/settings.py для подключения к СУБД PostgreSQL и укажите адрес прокси-сервера (если используется) для подключения к nemesida-security.com:443, *.nemesida-security.com:443 и geoip.nemesida-security.com:80/443.

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

# systemctl status nw-api

В целях безопасности рекомендуется разрешить обращения к Nemesida WAF API только с IP-адреса серверов Nemesida WAF, Nemesida AI и Nemesida WAF Scanner.

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

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

nwaf_api_proxy http://proxy.example.com:3128;
nwaf_sys_proxy http://proxy.example.com:3128;
nwaf_api_conf host=http://nwaf-api.example.com:8080/nw-api/;

где nwaf-api.example.com:8080/nw-api/ — адрес и порт сервера, на котором установлен модуль Nemesida WAF API, а http://proxy.example.com:3128 — адрес прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest.

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

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

3. На сервере с установленным модулем Nemesida WAF Scanner внесите изменения в конфигурационный файл /opt/nws/main.conf, приведя параметры к виду:

api_host = http://nwaf-api.example.com:8080/nw-api/
api_proxy = http://proxy.example.com:3128

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

Прочая информация

Информация об ошибках в работе Nemesida WAF API содержится в журналах регистрации событий модуля /var/log/uwsgi/app/*.log.

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

attack

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

Параметр Описание
id Идентификатор записи.
timestamp Дата фиксации аномалии.
vhost Адрес виртуального хоста.
ip Адрес источника запроса.
rule_id Идентификатор правила, по которому производилась фиксация аномалии.
method Тип HTTP-запроса (GET, POST и т. д.).
url URL запроса.
lm Параметр, определяющий, попадает ли запрос под действие режима LM.
bot Зарезервированный параметр.
mz Зона возникновения аномалии (URL, ARGS, BODY и т. д.).
param Параметры запроса.
other_headers
ua
referer
cookie
Заголовки HTTP-запроса.
description Описание аномалии.
bt Цифровой идентификатор метода определения аномалий (сигнатурный анализ, машинное обучение и т. д.).
request_id Идентификатор запроса.
waf_id Идентификатор WAF ID.
body Содержимое запроса в разделе Body.
group_id Идентификатор запроса при блокировке brute-force и DDoS-атак.
blocked Статус блокировки запроса.
ml

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

Параметр Описание
waf_id Идентификатор WAF ID.
ml_status Индикатор завершения обучения модуля Nemesida WAF.
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 URL запроса.
data Тело запроса (для POST-запросов).
waf_id Идентификатор WAF ID.

Сервис rldscupd

Сервис rldscupd предназначен для получения дополнительных данных о событиях (описание аномалий, GeoIP-данные и т.д.).