Руководство по установке, настройке и обслуживанию ПО «Nemesida WAF».

Общая информация
ПО «Nemesida WAF» состоит из модулей «Nemesida WAF», «Nemesida AI» и «Nemesida WAF Scanner».

Для функционирования ПО «Nemesida WAF» необходимо со всех серверов, на которых установлены модули «Nemesida WAF», разрешить доступ до nemesida-security.com:443.

Программное обеспечение «Nemesida WAF» предназначено для использования на сервере, имеющего следующие технические характеристики:
— процессор: Intel Core i3 или выше;
— объем ОЗУ: 2 ГБ для сервера с установленным «Nemesida WAF» и 32 ГБ для сервера с установленным «Nemesida AI»;
— дисковое пространство: от 5 Гб.

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

Перед установкой ПО «Nemesida WAF» добавьте информацию о репозитории в систему:

Debian 9Ubuntu 18.04CentOS 7

Подключите репозиторий «Nemesida WAF»:

# apt-get install apt-transport-https
# echo "deb https://repository.pentestit.ru/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt-get update && apt-get upgrade
# apt-get install librabbitmq4 libcurl4-openssl-dev python-pip gcc libc6-dev python-dev
# pip2 install pandas requests psutil sklearn schedule simple-crypt

Подключите репозиторий «Nemesida WAF»:

# apt install apt-transport-https
# 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 librabbitmq4 libcurl4-openssl-dev python-pip gcc libc6-dev python-dev
# pip2 install pandas requests psutil sklearn schedule simple-crypt

Создайте файл /etc/yum.repos.d/NemesidaWAF.repo с информацией о репозитории следующего содержания:

[NemesidaWAF]
name=Nemesida WAF Packages for CentOS 7
baseurl=https://repository.pentestit.ru/nw/centos/7/$basearch
gpgkey=https://repository.pentestit.ru/nw/gpg.key
enabled=1
gpgcheck=1

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

# yum install epel-release
# yum install python2-pip python-devel gcc libcurl-devel libcurl-devel openssl
# pip2 install pandas requests psutil sklearn schedule simple-crypt

Установка модуля «Nemesida WAF»

Динамический модуль «Nemesida WAF» доступен для ПО «nginx» Stable-версий: 1.12, 1.14.

Debian 9 Ubuntu 18.04CentOS 7

Подключите репозиторий ПО «nginx» и произведите установку пакетов:

# echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -
# apt-get update && apt-get upgrade
# apt-get install nginx
# apt-get install nwaf-dyn-1.14

где «1.14» — версия установленного ПО «nginx». Например, пакет динамического модуля «nwaf-dyn-1.12» предназначен для работы с «nginx» версии 1.12.

Подключите репозиторий ПО «nginx» и произведите установку пакетов:

# echo "deb http://nginx.org/packages/ubuntu/ bionic nginx"> /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -
# apt update && apt upgrade
# apt install nginx
# apt install nwaf-dyn-1.14

где «1.14» — версия установленного ПО «nginx». Например, пакет динамического модуля «nwaf-dyn-1.12» предназначен для работы с «nginx» версии 1.12.

Создайте файл репозитория /etc/yum.repos.d/nginx.repo следующего содержания

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

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

# yum update
# yum install nginx
# yum install nwaf-dyn-1.14

где «1.14» — версия установленного ПО «nginx». Например, пакет динамического модуля «nwaf-dyn-1.12» предназначен для работы с «nginx» версии 1.12.

Произведите настройку политики 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

Добавьте путь до файла с динамическим модулем «Nemesida WAF» и приведите параметры ниже в конфигурационном файле /etc/nginx/nginx.conf к виду:

load_module /etc/nginx/modules/ngx_http_waf_module.so;
...
worker_processes auto;
...
http {
...
    ##
    # Nemesida WAF
    ##

    ## Request body too large fix
    client_body_buffer_size 25M;

    include /etc/nginx/nwaf/conf/global/*.conf;
    include /etc/nginx/nwaf/conf/vhosts/*.conf;
...
}

Настройка модуля «Nemesida WAF»

Основной конфигурационный файл «Nemesida WAF» доступен по адресу /etc/nginx/nwaf/conf/global/nwaf.conf.

Параметры «nwaf.conf» для «Nemesida WAF Free»
Для использования «Nemesida WAF Free» используйте значение параметра лицензионного ключа по умолчанию (nwaf_license_key none;).

Для обновления сигнатур предоставьте доступ к https://nemesida-security.com. При использовании прокси-сервера укажите его в опции sys_proxy параметра nwaf_api_conf (например, sys_proxy=proxy.example.com:3128).

Параметры «nwaf.conf»
Параметр по умолчанию
Описание параметра
nwaf_license_key
Параметр для указания лицензионного ключа модулей «Nemesida WAF». Ключ также используется модулями «Nemesida AI» и «Nemesida Scanner».

При указанном недействительном лицензионном ключе (в том числе при значении по умолчанию none), «Nemesida WAF» продолжит работу с функционалом «Nemesida WAF Free».

nwaf_limit
Установка лимита блокировок в минуту (бан), при превышении лимита IP-адрес будет заблокирован на время (в секундах), указанное в опции block_time. Для установки лимита блокировок запросов для конкретного виртуального хоста необходимо привести параметр к виду nwaf_limit rate=3r/m block_time=600 domain=example.com;.
nwaf_api_conf
Настройка взаимодействия с «Nemesida WAF API» и прочих связанных параметров, где:

host — адрес сервера «Nemesida WAF API» для отправки информации об атаках, результатах работы «Nemesida WAF Scanner» и «Nemesida AI». Для использования облачного личного кабинета используйте опции host=https://nemesida-security.com. С опцией host=none данные на API передаваться не будут.

api_path — «Nemesida WAF API» URL.

store_count — опция, определяющая количество записей, при достижении которого будет производиться отправка событий на «Nemesida WAF API».

delay_time — время, по истечении которого будет производиться принудительная отправка событий на «Nemesida WAF API».

api_proxy — адрес прокси-сервера для обращения к «Nemesida WAF API».
Пример: api_proxy=proxy.example.com:3128.

sys_proxy — адрес прокси-сервера для проверки срока действия лицензионного ключа «Nemesida WAF», «Личного кабинета Nemesida WAF», а также обращение к сервисным API «Nemesida WAF», (получение сигнатур и прочее).
Пример: sys_proxy=proxy.example.com:3128.

cab_license_key — опция для указания лицензионного ключа «Личного кабинета Nemesida WAF» (при использовании локальной версии «Nemesida WAF API»).

nwaf_mla
Настройки взаимодействия с модулем «Nemesida AI», где:
1000 — максимальное время ожидания ответа от модуля «MLA» в миллисекундах, по истечению которого «Nemesida WAF» примет решение на основе сигнатурного анализа,
MAX_SCORE — опция порогового значения, при достижении которого решение о блокировке запроса передается в модуль «MLA»,
DROP_SIGNATURE_BLOCK — опция активации механизма определения атак только на основании решения модуля «Nemesida AI» (после того, как его обучение завершится). В случае отсутствия опции, решение о блокировке будет производиться на основании решений модуля «Nemesida AI» и сигнатурного анализа совместно.

Для некоторых сигнатур установлен флаг принудительного блокирования запроса без отправки в модуль «MLA».

nwaf_rmq
Настройка подсистемы отправки запросов в «RabbitMQ» для последующей обработки модулем «Nemesida AI».

В «RabbitMQ» не передаются, и, как результат, не анализируются модулем «Nemesida AI» запросы, попадающие под действие параметров nwaf_ip_wl, nwaf_ip_lm и nwaf_host_lm.

Процесс установки и настройки ПО «RabbitMQ» описан в разделе Nemesida AI.

nwaf_mlc
Настройки взаимодействия с модулем «Nemesida AI» для дополнительной обработки запросов: обработка всех поступающих на веб-сервер запросов (за исключением имеющих код ответа 403).
nwaf_clamav
Передача файлового содержимого POST-запросов в модуль «ClamAV». Для передачи всех POST-запросов удалите опцию FILE_ONLY. Для подключения с использованием TCP-соединения замените опцию unix:/var/run/clamav/clamd.ctl на 127.0.0.1:3310 (предварительно произведите настройку ПО «ClamAV»).
nwaf_ip_wl
Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети без фиксации события в СУБД. При параметре nwaf_ip_wl x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен.

Для снижения ложных срабатываний рекомендуется указывать статический IP-адрес специализированных пользователей (администраторов, контент-менеджеров, редакторов) добавлять в параметр nwaf_ip_wl или nwaf_ip_lm.

nwaf_ip_lm
Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети с фиксацией события в СУБД (режим IDS). При параметре nwaf_ip_lm x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен.
nwaf_host_lm
Настройка пропуска всех вхождений правил для конкретного виртуального хоста с фиксацией события в СУБД (режим IDS). При параметре nwaf_host_lm *; пропуск будет производиться для всех виртуальных хостов.
nwaf_clamav_wl
Настройка списка исключения блокировки для содержимого тела запроса или загружаемого файла по md5-сумме (md5-сумма содержится в журнале error.log ПО «nginx»).
Пример блокировки:
Nemesida WAF: blocked by ClamAV, stream: Eicar-Test-Signature FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ....
Пример правила исключения для блокировки:
nwaf_clamav_wl 44d88612fea8a8f36de82e1278a-bb02f.
nwaf_log_mr_all;
Активация параметра записи информации о всех вхождениях правил блокировки (сигнатур атаки) в журнале ошибок работы ПО «nginx». По умолчанию параметр деактивирован (закомментирован). При деактивированном параметре в журнал ошибок работы ПО «nginx» производится запись только сигнатуры, которая привела к блокированию запроса или к фиксации сигнатуры без последующего блокирования (в режиме «LM»)..

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

# systemctl restart nginx.service nwaf_update.service mla_main.service
# systemctl status nginx.service nwaf_update.service mla_main.service

За получение сигнатур ПО «Nemesida WAF» (/etc/nginx/nwaf/rules.bin) отвечает служба nwaf_update. Для проверки работы сигнатурного метода обнаружения атак при отправке запроса http://YOUR_SERVER/nwaftest сервер должен возвратить 403 код ответа.

Настройка ПО «RabbitMQ»

Модуль не используется в «Nemesida WAF Free».

«RabbitMQ» используется для взаимодействия модулей «Nemesida WAF» и «Nemesida AI» (выявление аномалий, построение поведенческих моделей). В руководстве описан процесс настройки ПО «RabbitMQ» в случае, когда модули «Nemesida WAF» и «Nemesida AI» установлены на одном сервере.

1. Произведите установку пакета rabbitmq-server.
2. Приведите файл /etc/rabbitmq/rabbitmq.config к виду:

[
    {rabbitmq_management, [
        {listener, [{port, 15672}, {ip, "127.0.0.1"}]}
    ]},
    {kernel, [
        {inet_dist_use_interface,{127,0,0,1}}
    ]}
].

3. Внесите изменения в файл /etc/rabbitmq/rabbitmq-env.conf:

export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1

4. Завершите настройку ПО «RabbitMQ»:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# service rabbitmq-server restart
# systemctl enable rabbitmq-server 

Настройка модуля «Nemesida AI»

Модуль не используется в «Nemesida WAF Free».

Модуль «Nemesida AI» состоит из модулей «MLA» (входит в установочный пакет модуля «Nemesida WAF») и «MLC», взаимодействие которых возможно в совмещённом (модули функционируют на одном сервере) и распределенном (модуль «MLC» функционирует на выделенном сервере) режимах.

Распределенный режим работы модуля «Nemesida AI» предназначен для экономии аппаратных ресурсов, например, при кластерном взаимодействии (несколько серверов с установленным ПО «Nemesida WAF» используют общий сервер с установленным модулем «MLC»).

Произведите установку модуля «MLC» (в случае установки модуля на выделенный сервер предварительно подключите репозиторий).

Debian 9CentOS 7
# apt-get install python-pip gcc libc6-dev python-dev python-setuptools
# pip2 install pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy psutil config 
# apt-get install nwaf-mlc
# yum install gcc python2-pip python-devel python-setuptools python-setuptools
# pip2 install pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy psutil config
# yum install nwaf-mlc

Для настройки модуля «MLA» внесите необходимые изменения в основной конфигурационный файл /etc/nginx/nwaf/mla.conf.

Параметры mla.conf
Параметр по умолчанию
Описание параметра

[learn]
Секция, отвечающая за параметры обучения «Nemesida AI».
nwaf_conf_file
Путь до конфигурационного файла «Nemesida WAF».
models_path
Пути до поведенческих моделей защищаемого веб-приложения, созданные модулем «Nemesida AI». Модели представляют собой файлы с расширением «.ml»

[main]
Секция, отвечающая за общие настройки модуля «MLA».
logrotate
Параметры авторотации журналов работы «MLA», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.
tcp_socket
IP-адрес и порт, используемый для взаимодействия с модулем «Nemesida WAF».
base_api_uri
Адрес «Nemesida WAF API» для передачи информации о работе модуля «Nemesida AI».

[mgmt]
Секция, отвечающая за взаимодействие с консолью управления «Nemesida AI».
send_attacks
Отправка спорных запросов на сервер «Nemesida WAF Signtest» для пост-обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль «MLA» определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль «MLA» определил как нелегитимный.

post_st_uri
URI сервера для отправки данных на сервер обработки результатов работы «Nemesida AI».
params_uri
command_uri
get_models_uri
URI сервера для взаимодействия с консолью управления «Nemesida AI».

[api]
Секция, отвечающая за настройки взаимодействия с локальным API «Nemesida WAF».
cab_status_post
«Nemesida WAF API» URL. При параметре cab_status_post = none данные на API отправляться не будут.

Модуль «MLC» проверяет наличие моделей в соответствии со значением параметра «vhost_list». В случае их отсутствия модуль приступает к обучению моделей, которые позже автоматически передаются в модуль «MLA». Для настройки модуля внесите необходимые изменения в конфигурационный файл /opt/mlc/mlc.conf.

Параметры mlc.conf для работы в обычном режиме
Параметр по умолчанию
Описание параметра

[learn]
Секция, отвечающая за параметры обучения «Nemesida AI».
nwaf_conf_file
Путь до конфигурационного файла «Nemesida WAF» для забора лицензионного ключа «Nemesida WAF».
models_path
Пути до поведенческих моделей защищаемого веб-приложения, созданные модулем «Nemesida AI».

[run]
Секция, отвечающая за параметры соединения с удаленным сервером «MLC» (при распределенном режиме работы).
rmq_host
Параметры соединения с удаленным сервером «MLC».

[proxy]
Секция, отвечающая за настройки соединения с прокси-сервером.
sys_proxy
api_proxy
Настройка соединения с прокси-сервером, где:
sys_proxy — адрес прокси-сервера для обращения к системному API «Nemesida WAF»;
api_proxy — адрес прокси-сервера для обращения к локальному API «Nemesida WAF».

Если параметры не имеют значений, то модуль будет пытаться использовать параметры из файла nwaf.conf.


[main]
Секция, отвечающая за общие настройки модуля «MLC».
vhosts_list
Список доменных имен, используемых в качестве виртуальных хостов, для которых необходимо создавать поведенческие модели («*» означает все доменные имена). Пример: vhosts_list = example.com, 1.example.com, 2.example.com, *. Опция :400000 («fix_num») определяет количество поступающих на сервер запросов, по которым будет производиться обучение.

В случаях, когда интенсивность трафика для виртуальных хостов существенно различается, необходимо установить оптимальное количество запросов для конкретного хоста, например:
vhosts_list = example.com, 1.example.com:5000, 2.example.com:10000,*:10000, где «5000» и «10000» — количество запросов для создания поведенческих моделей (* — все остальные виртуальные хосты, кроме *.example.com, поскольку указанный виртуальный хост example.com будет включать в себя все поддомены).

Если опция «fix_num» не задана, модуль произведет автоматический подсчет значения исходя из объема свободной ОЗУ. Для построения моделей при значении «fix_num» равному 400.000 потребуется до 32 ГБ ОЗУ.

uri_list
Параметр, определяющий путь, по которому модуль «MLC» будет создавать и обновлять (по мере поступления новых данных) файл карты сайта (sitemap), который впоследствии будет использовать модуль «Nemesida WAF Scanner». Для деактивации данного функционала необходимо удалить или закомментировать строку с параметром.
logrotate
Параметры авторотации журналов работы «MLC», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.
base_api_uri
Адрес «Nemesida WAF API» для передачи информации о работе модуля «Nemesida AI».
key
Установка лицензионного ключа «Nemesida WAF» (используется при использовании на выделенном сервере).
Пример: key = 1234567890.

[trunk]
Секция, отвечающая за передачу трафика на удаленный сервер с целью последующего анализа и построения поведенческих моделей.
send_data
Активация механизма передачи анализируемого трафика на сервер «Nemesida WAF MLS». По умолчанию функционал деактивирован.
mls_reciever_uri
Адрес «Nemesida WAF MLS», осуществляющего прием трафика для анализа с последующей генерацией поведенческих моделей.

[brute]
Секция, отвечающая за параметры защиты от атак перебора паролей.
brute_enable
Активация\деактивация защиты от атак перебора паролей. По умолчанию защита активирована.
interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
max_val
Число запросов, по которому принимается решение о наличии атаки.
similarity
Мера близости запросов в процентах.
mconf
Файл для внесения вручную информации о формах авторизации защищаемого веб-приложения для блокирования атак перебора паролей (по умолчанию файл отсутствует). Пример:

urilist :
[
  {
    vhost : 'example.com'
    uri   : '/login.php'
    type  : 'GET'
  }
  {
    vhost : 'example.com'
    uri   : '/new-login.php'
    type  : 'POST'
  }
  {
    vhost : 'm.example.com'
    uri   : '/auth.php'
    type  : 'GET'
  }
]
aconf
Файл, формируемый модулем «Nemesida WAF Scanner», содержащий формы авторизации защищаемого веб-приложения для блокирования атак перебора паролей (требуется установка «Nemesida WAF Scanner» на текущий сервер).
distributed
Защита от распределенной атаки перебора пароля (по умолчанию выключена). При значении

distributed = false

защита от атак перебора пароля рассчитывается для одного IP-адреса (рекомендуется для веб-приложений с высокой частотой авторизации пользователей: чаще 10 раз в 10 секунд).


[mgmt]
Секция, отвечающая за взаимодействие с консолью управления «Nemesida AI».
send_attacks
Отправка спорных запросов, получаемых от модуля «Nemesida WAF» через «RabbitMQ», на сервер «Nemesida WAF Signtest» для пост-обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль «MLA» определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль «MLA» определил как нелегитимный.

send_stat
stat_int
Параметры отправки статистических данных о работе «Nemesida AI».
st_uri
URI сервера «Nemesida WAF Signtest» для отправки спорных запросов. При использовании локальной версии «Nemesida WAF Signtest» измените URI параметра.

[api]
Секция, отвечающая за настройки взаимодействия с локальным API «Nemesida WAF».
learn_status
Адрес «Nemesida WAF API» для отправки информации о статусе обучения моделей. При параметре learn_status = none информация отправляться не будет.
Работа в режиме «Multipoint Mode»
Для построения поведенческих моделей «Nemesida AI» требуется до 32 ГБ свободной ОЗУ. В случаях, когда в организациях установлено более одного сервера с модулем «Nemesida WAF», можно сэкономить аппаратные ресурсы, задействовав только один сервер с модулем «MLC». Для активации подобной схемы работы необходимо внести изменения на серверах с установленными модулями «MLC».

В режиме «Multipoint Mode» используются следующие компоненты:
— Сервера с установленными модулями «Nemesida WAF», «MLC», ПО «RabbitMQ» и объемом ОЗУ 2-4 ГБ ОЗУ каждый (локальные сервера, агенты).
— Сервер с установленным модулем «MLC» и объемом ОЗУ не менее 24 ГБ (удаленный сервер).

В режиме «Multipoint Mode» защита от атак перебора паролей не предоставляется.

На сервере с установленным модулем «MLC» (удаленный сервер)

— Установить ПО «RabbitMQ».
— Создать пользователей:

# rabbitmqctl add_user USER PASSWORD
# rabbitmqctl set_permissions -p / USER "^$" ".*" "^$"

где USER и PASSWORD — пользователь и пароль для отправки данных с модулей «MLC», установленных на агентах.

— Внести изменения в конфигурационный файл /etc/rabbitmq/rabbitmq.config:

[
    {rabbitmq_management, [
        {listener, [{port, 15672}, {ip, "127.0.0.1"}]}
    ]},
    {kernel, [
        {inet_dist_use_interface,{127,0,0,1}}
    ]}
].

— Разрешить обращения с агентов на удаленный сервер на порт 5672 (TCP).

— Завершить настройку «RabbitMQ»:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# service rabbitmq-server restart

— Привести конфигурационный файл /opt/mlc/mlc.conf к виду:

[main]
...
vhosts_list = example.com, 1.example.com, 2.example.com (список доменов, к которым производится обращение на агентах с установленным модулем «Nemesida WAF», по которым будет производиться построение поведенческих моделей)
key = Nemesida_WAF_license_key (лицензионный ключ «Nemesida WAF»)
...

Важно. Все сервера (агенты (параметр nwaf_license_key файла nwaf.conf) и удаленный сервер с модулем «MLC») должны использовать единый лицензионный ключ.

— Выполнить перезапуск модуля «MLC»:

# service mlc_main restart
# service mlc_main status

На сервере с установленным модулем «Nemesida WAF» (локальные сервера)

— Привести конфигурационный файл /opt/mlc/mlc.conf к виду:

[relay]
relay_mode = true
remote_rmq_host = guest:guest@remotehost (указать реквизиты доступа к удаленному серверу с модулем «MLC», на который будет передаваться поступающий на локальный «RabbitMQ» трафик)

— Выполнить перезапуск модуля «MLC»:

# service mlc_main restart
# service mlc_main status

Модуль «MLC» на удаленном сервере производит сбор трафика и обучение моделей по виртуальным хостам из списка vhosts_list, после чего автоматически передает созданные модели на сервера с установленным модулем «Nemesida WAF» через «Nemesida WAF API». В случае внесения изменений в список виртуальных хостов требуется выполнить перезапуск модуля «MLC». Для отправки и получения моделей через «Nemesida WAF API» необходимо предоставить доступ с серверов с установленными модулями «Nemesida WAF» и «MLC» до сервера https://nemesida-security.com.

Переобучение моделей «Nemesida AI»
Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю.

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

Для переобучения моделей необходимо добавить к значению виртуального хоста символ «^». Пример: vhosts_list = *^, или vhosts_list = example.com^, или vhosts_list = example.com:400000^.

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

# service mlc_main restart

После внесения изменений выполните перезапуск сервиса «MLC»:

# service mlc_main restart
# service mlc_main status

Настройка модуля «Nemesida WAF Scanner»

Модуль не используется в «Nemesida WAF Free».

Модуль «Nemesida WAF Scanner» предназначен для выявления веб-уязвимостей в защищаемых веб-приложениях. Информация об обнаруженных уязвимостях доступна в личном кабинете.

Перед установкой и использованием «Nemesida WAF Scanner» внимательно изучите документацию.

Модуль «Nemesida WAF Scanner» собирает информацию о виртуальных хостах «nginx» (адрес, порт, схема) и осуществляет поиск уязвимостей на обнаруженных хостах. При работе модуль обращается по адресу https://nemesida-security.com для получения информации об уязвимостях через «Nemesida Vulnerability API», а также передает информацию об обнаруженных уязвимостях в личный кабинет через «Nemesida WAF API». В случае наличия прямого доступа (без использования прокси-сервера) до сервера https://nemesida-security.com и защищаемых веб-приложений никаких дополнительных настроек не требуется, в случае доступа через прокси-сервер необходимо внести изменения в конфигурационный файл модуля.

Установка модуля на сервер:

Debian 9CentOS 7
# apt-get install nwaf-scanner
Информация обновляется и будет доступна в скором времени.

Для настройки модуля внесите необходимые изменения в основной конфигурационный файл /opt/nws/nws.conf.

Параметры nws.conf
Параметр по умолчанию
Описание параметра

[main]
Основная секция.
nwaf_license_key
Параметр для указания лицензионного ключа модуля «Nemesida WAF Scanner». Если параметр не задан, модуль будет пытаться использовать лицензионный ключ из файла /etc/nginx/nwaf/conf/global/nwaf.conf. В случае, если лицензионный ключ не будет обнаружен или будет недействителен, запуск модуля завершится соответствующей ошибкой.
uri_list
Файл, содержащий карту сайта (sitemap), генерируемый модулем «MLC» (в случае, если модуль «MLC» расположен на одном сервере с модулем «NWS»). Для деактивации данного функционала необходимо удалить или закомментировать строку с параметром.
sites_list
Список адресов веб-приложений для сканирования. Пример: sites_list = https://m.example.com, https://example.com.
sys_proxy
Параметры прокси-сервера для обращения к «Nemesida Vulnerability API» и «Nemesida WAF API». Пример: sys_proxy = proxy.example.com:3128/.
scan_proxy
Параметры прокси-сервера, используемого при выявлении уязвимостей в защищаемых веб-приложениях. Используется в случаях, когда сканирование невозможно произвести напрямую с сервера, на котором установлен модуль, например, при трансляции запросов на внутренний «upstream»-сервер. Пример: scan_proxy = proxy.example.com:3128/.

Важно. В случае использования прокси-сервера его адрес необходимо добавить в параметр «nwaf_ip_wl» конфигурационного файла «nwaf.conf». При добавлении IP-адреса в «nwaf_ip_wl» запросы с данного адреса блокироваться не будут, будьте предельно осторожны.

base_api_uri
Настройка адреса API для отправки результатов сканирования в личный кабинет.
logrotate
Параметры авторотации журналов работы «Nemesida WAF Scanner», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.
verbose
Параметр активации\деактивации вывода информации об ошибках в консоль. При значении verbose = 1 вывод информации активирован.

[optional]
Дополнительная секция.
login_uri
Страница авторизации. Пример: login_uri = /auth.
login
Имя пользователя. Пример: login = administrator.
password
Пароль пользователя. Пример: password = 123456.
parameter1
parameter2
Необязательные параметры, добавляемые в POST-запрос на форму авторизации. Пример отправки запроса, включающий дополнительные параметры:
login=user&password=1234&form=submit.

Настройка взаимодействия с ПО «ClamAV»
После установки пакета «Nemesida WAF» функционал взаимодействия с ПО «ClamAV» по умолчанию выключен, поскольку в редких случаях может являться источником ложных срабатываний некоторых запросов к веб-приложению (в зависимости от текущего состояния базы сигнатурного анализа «ClamAV»). Используйте данный функционал на своё усмотрение.

Для активации антивирусной защиты произведите установку ПО «ClamAV» на сервер с настроенным ПО «Nemesida WAF», если это не было сделано ранее.

Пример установки для ОС Debian 9:

# apt-get install clamav-daemon

Включение функционала взаимодействия с ПО «ClamAV» осуществляется путем активацией параметра nwaf_clamav в файле /etc/nginx/nwaf/conf/global/nwaf.conf.

После внесения изменений необходимо произвести перезапуск ПО «nginx».

Работа ПО «Nemesida WAF» в режиме IDS
Для функционирования «Nemesida WAF» в режиме IDS необходимо настроить дублирование трафика с основного веб-сервера (через который производятся обращения к веб-приложению) на сервер с установленным ПО «Nemesida WAF». Для этого внесите необходимые изменения в конфигурационные файлы на каждом из серверов:

1. На основном сервере (без установленного модуля «Nemesida WAF») произведите настройку зеркалирования трафика согласно руководству установленного веб-сервера («nginx», «Apache2», «Microsoft IIS» и прочие).

Пример настройки nginx для зеркалирования трафика

В случае использования веб-сервера «nginx» внесите необходимые изменения в файл виртуального хоста:

location / {
    mirror /mirror;
    ...
}

location = /mirror {
    internal;
    proxy_pass http://nemesida_waf_server;
}

где nemesida_waf_server — адрес сервера с установленным модулем «Nemesida WAF», на который будет передаваться дублированный трафик.

2. На сервере с установленным модулем «Nemesida WAF» приведите конфигурационный файл виртуального хоста «nginx» к виду:

server { 
        listen  80; 
        index   index.html; 
        root    /var/www/html; 
}

После внесения изменений необходимо перезапустить «nginx».

Процедура проверки корректности работы модулей
После установки и настройки модулей «Nemesida WAF» выполните перезагрузку операционной системы и проверьте работоспособность всех модулей.

Проверка работы «Nemesida WAF»
# systemctl status nginx.service nwaf_update.service mla_main.service
Проверка работы «Nemesida AI»
# systemctl status mlc_main.service

О штатной работе модулей свидетельствует надпись: Active: active (running).

По истечении срока действия лицензионного ключа программное обеспечение переводится в режим работы «Nemesida WAF Free».

Создание правил исключения сигнатур атаки

В случае, когда запрос, содержащий сигнатуру атаки, блокируется «Nemesida WAF», в журнале ошибок работы ПО «nginx» будет содержаться следующая строка:

Nemesida WAF: the request ххх contains a rule id 1 in zone HEADERS, ...

или, если запрос содержит вхождение сигнатуры с предельно допустимым цифровым показателем значимости (SCORE):

Nemesida WAF: the request ххх blocked by rule id 1 in zone HEADERS, ...

где:
1 — ID сигнатуры атаки;
HEADERS — зона вхождения сигнатуры;
... — прочая информация о запросе.

Для вывода абсолютно всех вхождений сигнатур в запросе (при наличии вхождений), в том числе тех вхождений, которые не привели к последующему блокированию запроса, активируйте параметр nwaf_log_mr_all; в основном конфигурационном файле «Nemesida WAF».

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

WL ID:10 "Z:ARGS|HEADERS"; — при таких параметрах вхождение правила с идентификатором 10 будет исключено из зон ARGS и HEADERS для всех виртуальных хостов.

WL ID:1 "Z:URL" domain=example.com; — при таких параметрах вхождение правила с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com.

WL ID:1 "Z:URL|$URL:/index/index.php" domain=example.com; — при таких параметрах вхождение правила с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com для URI http://example.com/index/index.php.

Допускается также использование регулярных выражений для уточнения URL (например, WL ID:1 "Z:URL|$URL:^/\S+/index.php" domain=example.com;).

В целях безопасности при создании правил исключения необходимо их максимально конкретизировать (указывать URL и зону вхождения запроса).

Описание сообщений об ошибках
В процессе работы ПО «Nemesida WAF» информация об ошибках может содержаться:
— в системных журналах ОС;
— в журнале работы ПО «nginx»;
— в журнале работы ПО «RabbitMQ»;
— в журнале работы модулей «Nemesida WAF» (/var/log/nwaf/*.log).

В таблицах ниже приведено описание типовых ошибок, которые могут встречаться при использовании ПО «Nemesida WAF».

Описание сообщений об ошибках ПО «Nemesida WAF»
Модуль «Nemesida WAF»Модуль «MLA»Модуль «MLC»
Ошибка
Описание
Nemesida WAF: the request X contains a rule id Y in zone Z
Запрос X содержит сигнатуру атаки Y в зоне запроса Z.
Nemesida WAF: skipped blocking by MLA
Пропуск блокировки сигнатурами по решению «MLA».
Nemesida WAF: blocked by ClamAV
Запрос заблокирован ПО «ClamAV».
Nemesida WAF: blocked by limit excess
IP-адрес заблокирован на определенное количество времени в связи с подозрительной активностью.
Nemesida WAF API: runtime error
Непредвиденная ошибка отправки данных на «Nemesida WAF API».
Nemesida WAF RMQ
Префикс ошибок, возникающих в процессе передачи данных запроса в «Rabbit MQ».
Nemesida WAF RMQ: server connection error
Ошибка сетевого доступа к хосту с «Rabbit MQ».
Nemesida WAF RMQ: missing RPC reply type
Отсутствие контекста подключения.
Nemesida WAF RMQ: server channel error
Проблема при открытии канала «Rabbit MQ».
Nemesida WAF block: Request body to large
Запрос заблокирован вследствие превышения лимита размера запроса.
Nemesida WAF block: Value in Content-Length %d header not equal body size %d
Запрос заблокирован вследствие несоответствия реального размера запроса и указанного в Content-Length.
Nemesida WAF block: Multipart data parsing error
Запрос заблокирован вследствие ошибки обработки содержимого тела запроса.
Nemesida WAF: request delayed 1
Запрос передан на обработку модулю «MLA», но ответа пока не получен.
Nemesida WAF: drop request delay
Сброс задержки запроса по истечению таймера.
Ошибка
Описание
No configuration file mla.conf found
Не найден конфигурационный файл mla.conf.
Configuration file mla.conf is not correct
Ошибка в конфигурационном файле mla.conf.
No nginx_conf_file found
Конфигурационный файл nginx не найден.
License key not found
Не найден лицензионный ключ.
Error during connecting to Nemesida API
Ошибка при подключении к «Nemesida WAF API».
MLA models corrupted
Файлы моделей для модуля «MLA» повреждены.
Error during sending FPR data to Signtest
Ошибка при отправке данных на «Nemesida WAF Signtest».
A Nemesida WAF product key expires in Х day(s) and the Nemesida AI will be deactivated.
Срок действия лицензионного ключа «Nemesida WAF» истекает через X дней, и модуль «Nemesida AI» будет деактивирован.
Error during get key expiration date
Ошибка в процессе получения данных о сроке действия лицензионного ключа.
Nemesida Security certificate is not valid
Сертификат сервера «Nemesida Security» не является действующим.
A Nemesida WAF product key is not valid. The Nemesida AI is not activated.
Лицензионный ключ «Nemesida WAF» не является действующим. Модуль «Nemesida AI» деактивирован.
Something wrong during connecting to Nemesida WAF API. ML_API auth return code = Х
Ошибка при подключении к «Nemesida WAF API». Код ошибки Х.
Can not connect to Nemesida WAF API. The Nemesida WAF will be deactivated in Х days.
Невозможно подключиться к «Nemesida WAF API». «Nemesida WAF» будет деактивирован через Х дней.
Something wrong during connecting to Nemesida WAF API
Проблема при подключении к «Nemesida WAF API».
Nemesida WAF is deactivated
Модуль «Nemesida AI» деактивирован.
Something wrong: Х
Неизвестная проблема X (где X — код ошибки).
MLA get_models problem: ERRCODE
Проблема при получении моделей: ERRCODE.
Ошибка
Описание
No configuration file mlc.conf found
Не найден конфигурационный файл mlc.conf.
Configuration file mlc.conf is not correct
Ошибка в конфигурационном файле mlc.conf.
Something wrong in BruteDetect.Add module
Проблема в модуле «BruteDetect.Add».
MLC models corrupted
Модели модуля «MLC» повреждены.
Problem: +str(e)
Неизвестная проблема.
‘Error during sending vhost_list_trunk to Nemesida API:
Ошибка при отправке списка виртуальных хостов в режиме «TRUNK» на «Nemesida API».
Error during sending data to MLS:
Ошибка при отправке данных на сервер «MLS».
Something wrong in auto BruteConfRead module:
Проблема в модуле «BruteConfRead (auto)».
Something wrong in manual BruteConfRead module
Проблема в модуле «BruteConfRead (manual)».
No nginx_conf_file found and no key in [main] conf section
Не найден лицензионный ключ «Nemesida WAF».
Error during sending vhost_list to Nemesida API:
Ошибка при отправке списка виртуальных хостов на «Nemesida API».
Error during sending FNR data to Signtest
Проблема при отправке данных на «Nemesida WAF Signtest».
A Nemesida WAF product key expires in X day(s) and the Nemesida AI will be deactivated.
Срок действия лицензионного ключа «Nemesida WAF» истекает через X дней, и модуль «Nemesida AI» будет деактивирован.
Error during get key expiration date
Ошибка в процессе получения данных о сроке действия лицензионного ключа.
Nemesida Security certificate is not valid
Сертификат сервера «Nemesida Security» недействительный.
A Nemesida WAF product key is not valid. The Nemesida AI is not activated.
Лицензионный ключ «Nemesida WAF» не является действующим. Модуль «Nemesida AI» деактивирован.
Something wrong during connecting to Nemesida WAF API. ML API auth return code Х
Ошибка при подключении к «Nemesida WAF API». Код ответа Х.
Can not connect to Nemesida WAF API. The Nemesida WAF will be deactivated in X days.
Невозможно подключиться к «Nemesida WAF API». Nemesida WAF будет деактивирован через Х дней.
Something wrong during connecting to Nemesida WAF API:
Ошибка при подключении к «Nemesida WAF API».
Nemesida AI is deactivated
Модуль «Nemesida AI» деактивирован.
Something wrong during connecting to remote RabbitMQ:
Ошибка при подключении к удаленному узлу «RabbitMQ».

Техническая поддержка

Для пользователей «Nemesida WAF Free» техническая поддержка оказывается только на форуме или по электронной почте.

В случае возникновения непредвиденных ошибок в работе ПО «Nemesida WAF» свяжитесь с технической поддержкой.

В рабочие дни с 10:00 до 19:00:
— по телефону +7 (495) 204-19-72;
— по электронной почте.

В нерабочее время (только для экстренных случаев):
— по телефону +7 (495) 204-19-72 доб. 100.