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

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

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

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

1. Разрешите обращения к nemesida-security.com:443.

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

DebianUbuntuCentOS
# apt install apt-transport-https
Debian 9
# echo "deb https://nemesida-security.com/repo/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
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 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.

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

Установите и настройте СУБД 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://nemesida-security.com/repo/nw/ubuntu xenial non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/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 memcached 
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
18.04
Подключите репозиторий и установите пакеты:

# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu bionic 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 
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 
 # apt install nwaf-api

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

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

Установите и настройте СУБД 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 7
Подключите репозитории и установите необходимые зависимости:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install centos-release-scl-rh
# yum install python36 python36-pip python36-devel nginx postgresql11-devel gcc memcached 
# yum install nwaf-api

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

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

Установите и настройте СУБД 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
CentOS 8
Подключите репозитории и установите необходимые зависимости:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-8-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.

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

Установите и настройте СУБД 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;\""

3. Разрешите обращения:
— к серверу nemesida-security.com:443;
— к серверу Memcached 127.0.0.1:11211;
— к серверу с СУБД PostgreSQL.

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

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

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

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

# 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 api_proxy=none sys_proxy=none;

где nwaf-api.example.com:8080 — адрес и порт сервера, на котором установлен модуль Nemesida WAF API, а 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/
api_proxy = proxy.example.com:3128

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

api_host = http://nwaf-api.example.com:8080 
api_proxy = 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 предназначен для получения недостающих описаний аномалий с сервера nemesida-security.com:443.