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

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

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

Программное обеспечение «Nemesida WAF» предназначено для использования на сервере, имеющего следующие технические характеристики:
— операционная система: 64-х битная версия ОС Debian 9/Centos 7;
— процессор: Intel Core i3 или выше;
— объем ОЗУ: до 24 ГБ (в случае использования облачного сервера MLS для построения моделей достаточно 4 ГБ ОЗУ);
— дисковое пространство: от 5 Гб.

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

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

# apt-get install apt-transport-https

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

# echo "deb https://nemesida-security.com/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list

3. Добавьте ключ gpg.key:

# wget -O - https://nemesida-security.com/nw/gpg.key | apt-key add -

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

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

Debian 9
Если ПО «nginx» не было установлено ранее, подключите репозиторий и произведите установку
# echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
# apt-get update && apt-get upgrade
# apt-get install nginx=1.12.2-1~stretch

Если требуется поддержка модуля «GeoIP» для ПО «nginx», выполните его установку:

# apt-get install nginx-module-geoip=1.12.2-1~stretch

после чего добавьте в файл /etc/nginx/nginx.conf строки:

load_module /usr/lib/nginx/modules/ngx_http_geoip_module.so;
load_module /usr/lib/nginx/modules/ngx_stream_geoip_module.so;

Удалите файл репозитория ПО «nginx»:

# rm /etc/apt/sources.list.d/nginx.list

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

# apt-get update && apt-get upgrade
# apt-get install rabbitmq-server librabbitmq4 python-pandas python-portalocker python-requests python3-requests python-psutil libcurl4-openssl-dev
# apt-get install nwaf-dyn

2. Приведите конфигурационный файл /etc/nginx/nginx.conf к следующему виду:

load_module /etc/nginx/modules/ngx_http_waf_module.so;
user www-data;
worker_processes auto;
worker_rlimit_nofile 300000;
...

events {
    worker_connections 4096;
...
}

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»
Внесите необходимые изменения в основной конфигурационный файл /etc/nginx/nwaf/conf/global/nwaf.conf.

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

Параметры nwaf.conf
Параметр по умолчанию
Описание параметра
nwaf_license_key XXX;
Параметр для указания лицензионного ключа модулей Nemesida WAF.
nwaf_limit rate=3r/m block_time=600 domain=example.ru;
Установка лимита блокировок в секунду/минуту для IP-адреса, где «block_time» — время блокировки запроса. Для блокировки запросов по конкретному виртуальному хосту необходимо добавить параметр domain=example.ru.
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 — API URI;
store_count — параметр, определяющий количество записей, при достижении которого будет производиться отправка событий на API;
delay_time — время, по истечении которого будет производиться принудительная отправка событий на API;
sys_proxy — адрес прокси-сервера для проверки срока действия лицензионного ключа «Nemesida WAF», «Личного кабинета Nemesida WAF», а также обращение к сервисным API «Nemesida WAF», (получение сигнатур и прочее). Пример: cab_auth_proxy=http://192.168.1.1:3128;

Параметры ниже необходимы только в случае использования локальной версии «Nemesida WAF API»:
api_proxy — адрес прокси-сервера для обращения к локальному API «Nemesida WAF». Пример: proxy=http://192.168.1.1:3128;
cab_license_key — параметр для указания лицензионного ключа «Личного кабинета Nemesida WAF».

nwaf_ip_wl ХХХ.ХХХ.ХХХ.ХХХ;
Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети без фиксации события в СУБД. При параметре nwaf_ip_wl x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен
nwaf_ip_lm ХХХ.ХХХ.ХХХ.ХХХ;
Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети с фиксацией события в СУБД. При параметре nwaf_ip_lm x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен.
nwaf_host_lm example.com;
Настройка пропуска всех вхождений правил для конкретного виртуального хоста с фиксацией события в СУБД. При параметре nwaf_host_lm *; пропуск будет производиться для всех виртуальных хостов.
WL ID:X «Z:URL|ARGS|HEADERS|…» domain=example.com;
Настройка правил исключения блокировки по запросу, включающее:
— ID правила, которое будет исключено;
— зону (опционально) применения правила, из которой будет произведено его исключение (параметр Z):
URL — адрес запроса;
ARGS — аргументы;
HEADERS — заголовки;
BODY — тело запроса;
FILE_DATA — содержимое загружаемого файла;
FILE_EXT — имя загружаемого файла.

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

nwaf_rmq host=127.0.0.1 port=5672 user=guest password=guest vhost=/ routing_key=nwaf;
Настройка подсистемы отправки запросов в RabbitMQ для последующей обработки модулем «Nemesida AI».
nwaf_mla unix:/var/run/mla_sock 500 MAX_SCORE:6 DROP_SIGNATURE_BLOCK;
Настройки взаимодействия с модулем «Nemesida AI», где:
500 — время ожидания в миллисекундах для принятия решения о блокировке по сигнатурам, без принятия решения «Nemesida AI»,
MAX_SCORE — параметр порогового значения, при достижении которого решение о блокировке запроса передается в модуль «MLA»,
DROP_SIGNATURE_BLOCK — параметр активации механизма определения атак только на основании решения модуля «Nemesida AI» (после того, как его обучение завершится). В случае отсутствия параметра, решение о блокировке будет производиться на основании решений модуля «Nemesida AI» и сигнатурного анализа совместно.
nwaf_clamav unix:/var/run/clamav/clamd.ctl 1000;
Настройка соединения с ПО «ClamAV».
nwaf_clamav_wl FILE-MD5-HASH;
Настройка списка исключения блокировки для содержимого тела запроса или загружаемого файла по md5 хеш-сумме. Хеш-сумма файла содержится в журнале vhost_error.log, параметр md5.
Пример блокировки: NWAF: blocked by ClamAV, stream: Eicar-Test-Signature FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f.
Пример правила исключения для блокировки: nwaf_clamav_wl 44d88612fea8a8f36de82e1278a-bb02f.

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

Настройка ПО «RabbitMQ»
Установите ПО «RabbitMQ»:

# apt-get install rabbitmq-server

Внесите изменения в файл /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}}
    ]}
].

Внесите изменения в файл /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

Выполните команду:

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

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

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

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

Debian 9
# apt-get update && apt-get upgrade
# 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».
fsock = /var/run/mla_sock
Путь до сокета «MLA».
base_api_uri = https://nemesida-security.com/nw
Адрес «Nemesida WAF API» для передачи информации об атаках, результатах сканирования и прочей служебной информации.
logrotate = 5:20
Параметры авторотации журналов работы «MLA», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.

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

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

auth_st_uri = /st/auth.php
post_st_uri = /st/data_api.php
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 = http://IP:PORT
#api_proxy = http://IP:PORT
Настройка соединения с прокси-сервером, где:
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 запросов. Для обработки такого количества запросов требуется 16 ГБ ОЗУ.

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

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

[brute]
Секция, отвечающая за параметры защиты от атак перебора паролей.
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 = true
Отправка данных о заблокированных запросах.
send_stat = true
Отправка статистических данных о работе «MLC».
stat_int = 20
Интервал отправки данных.
auth_st_uri = /st/auth.php
post_st_uri = /st/data_api.php
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]
realy_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».

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

Настройка модуля «Nemesida WAF Scanner»
Модуль «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 9
# apt-get update && apt-get upgrade
# apt-get install nwaf-scanner

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

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

[main]
Основная секция
sites_list =
Список адресов веб-приложений для сканирования. Пример: sites_list = https://m.example.com, https://example.com.
sys_proxy =
Параметры прокси-сервера для обращения к «Nemesida Vulnerability API» и «Nemesida WAF API». Пример: sys_proxy = http://proxy.example.com:3128/.
scan_proxy =
Параметры прокси-сервера, используемого при выявлении уязвимостей в защищаемых веб-приложениях. Используется в случаях, когда сканирование невозможно произвести напрямую с сервера, на котором установлен модуль, например, при трансляции запросов на внутренний «upstream»-сервер. Пример: scan_proxy = http://proxy.example.com:3128/.

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

base_api_uri = https://nemesida-security.com/nw/api/scan
Настройка адреса API для отправки результатов сканирования в личный кабинет.
logrotate = 5:20
Параметры авторотации журналов работы «Nemesida WAF Scanner», где «5» — максимальное количество журналов в ротации, а «20» — их максимальный размер в мегабайтах. Журналы работы размещаются в каталоге /var/log/nwaf/.
uri_list = /opt/mlc/bf/uri.list
Файл, содержащий карту сайта (sitemap), генерируемый модулем «MLC» (в случае, если модуль «MLC» расположен на одном сервере с модулем «NWS»). Для деактивации данного функционала необходимо удалить или закомментировать строку с параметром.

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

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

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

# apt-get install clamav-daemon

При необходимости, внесите изменения в конфигурационный файл ПО «ClamAV», расположенный по следующему пути: /etc/clamav/freshclam.conf.

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

nwaf_clamav unix:/var/run/clamav/clamd.ctl 1000;

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

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

Для функционирования «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.ipv4.ip_forward = 1
net.core.somaxconn = 65535
net.netfilter.nf_conntrack_max = 10000000
net.netfilter.nf_conntrack_tcp_loose = 0
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10
net.ipv4.tcp_congestion_control = hybla
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_no_pmtu_disc = 1
net.ipv4.route.flush = 1
net.ipv4.route.max_size = 8048576
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 4096 87380 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 400000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1

Изменения вступают в силу после выполнения команды «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» информация об ошибках может содержаться:
— в системных журналах ОС;
— в журнале работы ПО «nginx»;
— в журнале работы ПО «RabbitMQ»;
— в журнале работы модулей «Nemesida WAF» (/var/log/nwaf/*.log).

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

Описание сообщений об ошибках ПО «Nemesida WAF»
Модуль «Nemesida WAF»Модуль «MLA»Модуль «MLC»
Ошибка
Описание
Nemesida WAF: blocked by rule
Запрос заблокирован сигнатурным анализом.
Nemesida WAF: skipped blocking by MLA
Пропуск блокировки сигнатурами по решению «MLA».
Nemesida WAF: blocked by ClamAV
Запрос заблокирован ПО «ClamAV».
Nemesida WAF: blocked by limit excess
IP-адрес заблокирован на определенное количество времени в связи с подозрительной активностью.
Nemesida WAF API
Префикс ошибок, возникающих в процессе передачи данных об атаках к API кабинета.
Nemesida WAF API: runtime error
Непредвиденная ошибка отправки.
Nemesida WAF RMQ
Префикс ошибок, возникающих в процессе передачи данных запроса в RabbitMQ.
Nemesida WAF RMQ: server connection error
Ошибка сетевого доступа к хосту с RabbitMQ.
Nemesida WAF RMQ: missing RPC reply type
Отсутствие контекста подключения.
Nemesida WAF RMQ: server channel error
Проблема при открытии канала «MLA».
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: 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
Файлы моделей повреждены
Error during sending FPR data to Signtest!
Ошибка при отправке данных на Signtest
A Nemesida WAF product key expires in Х day(s) and the Nemesida AI will be deactivated.
Срок действия лицензионного ключа Nemesida WAF заканчиваетcя через 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
Ошибка
Описание
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
No configuration file mlc.conf found
Не найден конфигурационный файл mlc.conf
Configuration file mlc.conf is not correct:
Ошибка в конфигурационном файле mlc.conf
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
Проблема при отправке данных на Signtest
A Nemesida WAF product key expires in X day(s) and the Nemesida AI will be deactivated.
Срок действия лицензионного ключа Nemesida WAF заканчиваетcя через 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» свяжитесь с технической поддержкой.

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

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