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

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

Для функционирования ПО «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 9CentOS 7

1. Установите необходимые зависимости:

# apt-get install apt-transport-https

2. Создайте файл с информацией о репозитории:

# echo "deb https://repository.pentestit.ru/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list

3. Добавьте ключ gpg.key и произведите обновление системы:

# wget -O - https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt-get update && apt-get upgrade

1. Создайте файл /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

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

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirror.yandex.ru/epel/7/$basearch
gpgkey=https://mirror.yandex.ru/epel/RPM-GPG-KEY-EPEL-7
gpgcheck=0
enabled=1

3. Выполните обновление компонентов

# yum update

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

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

Debian 9 CentOS 7
Если ПО «nginx» версии 1.14 не было установлено ранее

Подлкючите репозиторий ПО «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

Установите пакет динамического модуля «Nemesida WAF»:

# apt-get install nwaf-dyn-1.14

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

Если ПО «nginx» не было установлено ранее

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

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

2. Произведите установку дополнительного репозитория и ПО «nginx»:

# yum update
# yum install nginx

1. Установите пакет динамического модуля «Nemesida WAF» и необходимые зависимости:

# yum install nwaf-dyn-1.14

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

Retrieving key from https://repository.pentestit.ru/nw/gpg.key
  Importing GPG key 0x1929CEB1:
  Userid: "nemesida-security.com (Pentestit LLC) "
  Fingerprint: e89c f6e4 a2d8 bf10 5315 4002 a171 0d6c 1929 ceb1
  From: https://repository.pentestit.ru/nw/gpg.key
Is this ok [y/N]: y

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

    ## 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»
В бесплатной версии ПО не задействованы часть сервисов, поэтому взаимодействие с ними рекомендуется отключить, приведя параметры конфигурационного файла /etc/nginx/nwaf/conf/global/nwaf.conf к виду:

## Send attacks information to API
nwaf_api_conf host=none api_path=/nw/api/attack store_count=15 delay_time=30 api_proxy=none sys_proxy=none cab_license_key=none;

## MLA settings
# nwaf_mla 127.0.0.1:5101 1000 MAX_SCORE:2 DROP_SIGNATURE_BLOCK;

## RabbitMQ settings
# nwaf_rmq host=127.0.0.1 port=5672 user=guest password=guest vhost=/ routing_key=nwaf;

## MLC settings
# nwaf_mlc 127.0.0.1:5102;

Для обновления сигнатур необходимо предоставить доступ с сервера, на котором установлен модуль «Nemesida WAF», к https://nemesida-security.com. При использовании прокси-сервера его необходимо указать в директиве sys_proxy (например, sys_proxy=).

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

# systemctl disable mla_main
# systemctl restart nginx.service nwaf_update.service
Параметры «nwaf.conf»
Параметр по умолчанию
Описание параметра
nwaf_license_key none;
Параметр для указания лицензионного ключа модулей «Nemesida WAF». Ключ также используется модулями «Nemesida AI» и «Nemesida Scanner».

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

nwaf_limit rate=3r/m block_time=600;
Установка лимита блокировок в минуту (бан), при превышении лимита IP-адрес будет заблокирован на время (в секундах), указанное в директиве block_time. Для установки лимита блокировок запросов для конкретного виртуального хоста необходимо привести параметр к виду nwaf_limit rate=3r/m block_time=600 domain=example.com;.
nwaf_api_conf host=https://nemesida-security.com api_path=/nw/api/attack store_count=15 delay_time=30 api_proxy=none sys_proxy=none cab_license_key=none;
Настройка взаимодействия с «Nemesida WAF API» и прочих связанных параметров, где:

host — адрес сервера «Nemesida WAF API» для отправки информации об атаках, результатах работы «Nemesida WAF Scanner» и «Nemesida AI». При директиве 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 127.0.0.1:5101 1000 MAX_SCORE:2 DROP_SIGNATURE_BLOCK;
Настройки взаимодействия с модулем «Nemesida AI», где:
1000 — максимальное время ожидания ответа от модуля «MLA» в миллисекундах, по истечению которого «Nemesida WAF» примет решение на основе сигнатурного анализа,
MAX_SCORE — директива порогового значения, при достижении которого решение о блокировке запроса передается в модуль «MLA»,
DROP_SIGNATURE_BLOCK — директива активации механизма определения атак только на основании решения модуля «Nemesida AI» (после того, как его обучение завершится). В случае отсутствия директивы, решение о блокировке будет производиться на основании решений модуля «Nemesida AI» и сигнатурного анализа совместно.

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

nwaf_rmq host=127.0.0.1 port=5672 user=guest password=guest vhost=/ routing_key=nwaf;
Настройка подсистемы отправки запросов в «RabbitMQ» для последующей обработки модулем «Nemesida AI».
nwaf_mlс 127.0.0.1:5102;
Настройки взаимодействия с модулем «Nemesida AI» для блокирования brute-force атак.
nwaf_clamav unix:/var/run/clamav/clamd.ctl 10000 FILE_ONLY;
Передача файлового содержимого 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 example.com;
Настройка пропуска всех вхождений правил для конкретного виртуального хоста с фиксацией события в СУБД (режим IDS). При параметре nwaf_host_lm *; пропуск будет производиться для всех виртуальных хостов.
nwaf_clamav_wl FILE-MD5-HASH;
Настройка списка исключения блокировки для содержимого тела запроса или загружаемого файла по 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;
Активация параметра записи информации о всех вхождениях правил блокировки (сигнатур атаки) в Error-лог ПО «nginx». По умолчанию параметр деактивирован (закомментирован). При деактивированном параметре в лог производится запись только сигнатуры, которая привела к блокированию запроса или к фиксации сигнатуры без последующего блокирования (в режиме «LM»)..

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

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

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

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

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

1. Установите пакет rabbitmq-server.

2. Приведите файл /etc/rabbitmq/rabbitmq.config к виду:

Параметры 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:

Параметры 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. Выполните команду:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[api]
Секция, отвечающая за настройки взаимодействия с локальным API «Nemesida WAF».
cab_status_post = https://nemesida-security.com/api/waf_mode
URI локального API «Nemesida WAF». При параметре cab_status_post = none данные на локальный API отправляться не будут.

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

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

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

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

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

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

В случаях, когда интенсивность трафика для виртуальных хостов существенно различается, необходимо установить оптимальное количество запросов для конкретного хоста, например:
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 = /opt/mlc/bf/uri.list
Параметр, определяющий путь, по которому модуль «MLC» будет создавать и обновлять (по мере поступления новых данных) файл карты сайта (sitemap), который впоследствии будет использовать модуль «Nemesida WAF Scanner». Для деактивации данного функционала необходимо удалить или закомментировать строку с параметром.
logrotate = 5:20
Параметры авторотации журналов работы «MLC», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.
base_api_uri = https://nemesida-security.com/nw
Адрес «Nemesida WAF API» для передачи информации об атаках, результатах сканирования и прочей служебной информации.
key = Nemesida WAF license key
Установка лицензионного ключа «Nemesida WAF» (используется только при распределенном режиме работы).

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

[brute]
Секция, отвечающая за параметры защиты от атак перебора паролей.
tcp_socket = 127.0.0.1:5102
IP-адрес и порт, используемый для взаимодействия с модулем «Nemesida WAF» при блокировании brute-force атак.
brute_enable = true
Активация\деактивация защиты от атак перебора паролей. По умолчанию защита активирована.
interval = 10
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
max_val = 5
Число запросов, по которому принимается решение о наличии атаки.
similarity = 75
Мера близости запросов в процентах.
/opt/mlc/ml/bf-manual.conf
Файл для внесения вручную информации о формах авторизации защищаемого веб-приложения для блокирования атак перебора паролей. Пример:

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'
  }
] 
/opt/mlc/ml/bf-auto.conf
Файл, формируемый модулем «Nemesida WAF Scanner», содержащий формы авторизации защищаемого веб-приложения для блокирования атак перебора паролей (требуется установка «Nemesida WAF Scanner» на текущий сервер).
distributed = false
Защита от распределенной атаки перебора пароля (по умолчанию выключена). При значении

distributed = false

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

remote = false
Активация распределенного режима работы модуля «MLC», при котором данные отправляются на удаленный сервер с «Nemesida WAF».

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

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

send_stat = true
Отправка статистических данных о работе «MLC».
stat_int = 20
Интервал отправки данных.
post_st_uri = /st/data_uri
URI сервера для отправки данных на сервер обработки результатов работы «Nemesida AI».
fnr_uri = /ml/mgmt/fnr_uri
hacks_uri = /ml/mgmt/hacks_uri
stat_uri = /ml/mgmt/stats_uri
params_uri = /ml/mgmt/params_uri
command_uri = /ml/mgmt/command_uri
post_models_uri = /ml/mgmt/post_models_uri
post_vhosts_uri = /ml/mgmt/post_vhosts_uri
URI сервера для взаимодействия с консолью управления «Nemesida AI».

[api]
Секция, отвечающая за настройки взаимодействия с локальным API «Nemesida WAF».
learn_status = https://nemesida-security.com/api/learning_progress
URI локального API «Nemesida WAF». При параметре learn_status = none данные на локальный API отправляться не будут.
Работа в режиме «Multipoint Mode»
Для построения поведенческих моделей «Nemesida AI» требуется значительный объем свободной ОЗУ (16-18 ГБ свободной ОЗУ). В случаях, когда в организациях установлено более одного сервера с модулем «Nemesida WAF», можно сэкономить аппаратные ресурсы, задействовав только один сервер с модулем «MLC». Для активации подобной схемы работы необходимо внести изменения на серверах с установленными модулями «MLC».

В режиме «Multipoint Mode» используются следующие компоненты:
— Сервера с установленными модулями «Nemesida WAF», «MLC», ПО «RabbitMQ» и объемом ОЗУ по 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»
Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в месяц. Для переобучение моделей необходимо выполнить следующие действия:

— Удалить файлы существующих моделей для виртуального хоста (например, для example.com):

# rm /opt/mlc/ml/example.com_*.ml

— Перезапустить «MLC» для переобучения моделей:

# service mlc_main restart
Работа с использованием облачного сервера «MLS»

Сервер «MLS» — облачный сервер, расположенный в инфраструктуре Pentestit, предназначен для обработки трафика с клиентских WAF с последующей генерацией и отправкой поведенческих моделей. Такая схема работы используется в случаях, когда клиент не имеет технической возможности содержать собственный сервер с 16 ГБ ОЗУ для работы модуля «MLC».

Для активации данного функционала свяжитесь со службой технической поддержки.

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

# service mlc_main restart
# service mlc_main status

После перезапуска сервиса «MLC» необходимо производить перезапуск «nginx»:

# service nginx reload

Настройка модуля «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/.

[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», расположенный по следующему пути: /etc/clamav/freshclam.conf.

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

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

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

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

Основной сервер с «nginx»

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

Сервер с установленным модулем «Nemesida WAF» (IDS)

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

server { 
        listen 80; 
        server_name example.com; 

        index   index.html; 
        root    /var/www/html; 
}

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

Оптимизация работы операционной системы
Необходимо произвести оптимизацию ОС на сервере с установленным ПО «Nemesida WAF» под большие нагрузки. Для это внесите в файл /etc/sysctl.conf следующие изменения:

Параметры sysctl.conf

Перезагрузка системы в случае «Kernel panic» через 10 секунд:

kernel.panic = 10

Оптимизация ОЗУ:

kernel.shmmax = ХХХ
kernel.shmall = ХХХ

Значения параметров «kernel.shmmax» и «kernel.shmall» рассчитываются исходя из объема ОЗУ. Для подсчета можно воспользоваться скриптом:

#!/bin/bash
# simple shmsetup script
page_size=`getconf PAGE_SIZE`
phys_pages=`getconf _PHYS_PAGES`
shmall=`expr $phys_pages / 2`
shmmax=`expr $shmall \* $page_size`
echo kernel.shmmax = $shmmax
echo kernel.shmall = $shmall

Оптимизация подсистемы вывода сообщений:

kernel.msgmnb = 65536
kernel.msgmax = 65536

Оптимизация работы со SWAP:

vm.swappiness = 10
vm.dirty_ratio = 40
vm.dirty_background_ratio = 5

Оптимизация подсистемы работы с файлами («too many open files fix»):

fs.file-max = 2097152

Оптимизация сетевой подсистемы:

net.netfilter.nf_conntrack_max = 16777216
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_close = 20
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 30
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 20

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_mem = 50576 64768 98152
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.route.flush = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0

net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.inotify.max_user_watches = 16777216

Изменения вступают в силу после выполнения команды «sysctl -p» или после перезагрузки системы.

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

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

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

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

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

Вне зависимости от того, работает «Nemesida WAF» в режиме только сигнатурного анализа или комбинированного (сигнатурный анализ и анализ модулем «Nemesida AI»), все поступающие на «Nemesida WAF» запросы проходят первичную обработку подсистемой сигнатурного анализа. Только в случае, если запрос будет содержать в себе признаки атаки, он передается для дальнейшей обработки модулем «Nemesida AI».

В случае, когда запрос, содержащий сигнатуру атаки, блокируется «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.