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

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

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

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

Debian, UbuntuCentOS
# 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;\""

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

# 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
Установите и настройте СУБД PostgreSQL:

# dnf update
# dnf install postgresql-devel 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
Установите и настройте СУБД PostgreSQL:

# dnf update
# dnf install postgresql-devel 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;\""

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

# 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 API, Личный кабинет и Nemesida WAF Scanner. Для этого необходимо внести изменения в файл конфигурации PostgreSQL pg_hba.conf.

Пример:

# IPv4 local connections:
host    all             all             0.0.0.0/0            md5

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

Перед установкой модуля обязательно проверьте доступ к созданной БД, произведя подключение к ней командой: psql -h <server_ip> -U nw_api waf. При подключении введите пароль пользователя nw_api.

DebianUbuntuCentOSDockerVirtual Appliance
# apt install apt-transport-https gnupg2 curl
Debian 10
Подключите репозиторий и установите пакеты:

# echo "deb https://nemesida-security.com/repo/nw/debian buster 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 nginx python3-pip python3-dev postgresql-server-dev-all python3-venv memcached
Debian 11
Подключите репозиторий и установите пакеты:

# echo "deb https://nemesida-security.com/repo/nw/debian bullseye 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 nginx python3-pip python3-dev postgresql-server-dev-all python3-venv memcached
 # apt install nwaf-api

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
wheel uwsgi flask func-timeout netaddr psycopg2-binary pymemcache python-decouple requests requests validators

# apt install apt-transport-https gnupg2 curl
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 nginx python3.8 python3-pip python3.8-dev postgresql-server-dev-all python3.8-venv build-essential 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 nginx python3.10 python3-pip python3.10-dev postgresql-server-dev-all python3.10-venv build-essential memcached 
 # apt install nwaf-api

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
wheel uwsgi flask func-timeout netaddr psycopg2-binary pymemcache python-decouple requests requests validators

Настройте политику 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 nginx python39 python39-pip python39-devel postgresql-devel gcc memcached
CentOS 9 Stream
Подключите репозиторий и установите пакеты:

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

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
wheel uwsgi flask func-timeout netaddr psycopg2-binary pymemcache python-decouple requests requests validators

Информация об использовании Nemesida WAF в Docker-контейнере доступна в соответствующем разделе.
Информация об использовании Nemesida WAF в виде Virtual Appliance (виртуальный диск для KVM/VMware/VirtualBox) и Yandex VM доступна в соответствующем разделе.

3. Разрешите обращения:
При локальном развертывании БД:
— к внешним ресурсам;
— к серверу Memcached 127.0.0.1:11211;
— к серверу с СУБД PostgreSQL 127.0.0.1:5432.
При развертывании БД на отдельном сервере:
— к внешним ресурсам;
— к серверу Memcached 127.0.0.1:11211;
— к серверу с СУБД PostgreSQL <server_ip>:5432.

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

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

5. Внесите необходимые изменения в файл /var/www/nw-api/settings.py для подключения к СУБД PostgreSQL.

Параметры settings.py
Параметр
Описание
PROXY
Адрес прокси-сервера (опционально).

Пример:
PROXY = 'http://proxy.example.com:3128'


DB_HOST
DB_PORT
DB_NAME
DB_USER
DB_PASS
Параметры для подключения к БД модуля Nemesida WAF API.
RO_MODE
Режим взаимодействия с БД в режиме «только чтение».

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

Активация параметра включает в себя репликацию PostgeSQL.


MEMCACHED_HOST
MEMCACHED_PORT
Параметры для подключения к серверу Memcached.

6. Активируйте виртуальный хост:

# mv /etc/nginx/conf.d/nwaf-api.conf.disabled /etc/nginx/conf.d/nwaf-api.conf
# nginx -t && service nginx reload

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

# systemctl restart nw-api rldscupd

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

В целях безопасности рекомендуется разрешить обращения к 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.

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 Идентификатор запроса при блокировке атак методом перебора и DDoS-атак.
blocked Статус блокировки запроса.
possible Параметр, определяющий статус Possible для атак методом перебора, флуда и DDoS-атак.
сс Буквенный код страны источника запроса.
ml

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

Параметр Описание
waf_id Идентификатор WAF ID.
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.