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

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

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

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

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

Debian 9CentOS 7

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 -
# apt-get update && apt-get upgrade

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

[NemesidaWAF]
name=Nemesida WAF Packages for CentOS 7
baseurl=https://nemesida-security.com/nw/centos/7/$basearch
gpgkey=https://nemesida-security.com/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.14

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

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

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

# apt-get install nwaf-dyn-1.14
Если ПО «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://nemesida-security.com/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://nemesida-security.com/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.

Оптимизация модуля «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 unix:/var/run/mla_sock 500 MAX_SCORE:6 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 unix:/var/run/mlc_sock;

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

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

# 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 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;

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

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

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

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-адреса или подсети с фиксацией события в СУБД. При параметре 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 — имя загружаемого файла.
— имя виртуального хоста (опционально), к которому будет применяться правило (если имя директива не используется, правило будет применяться ко всем виртуальным хостам).

Более подробная информация доступна в разделе «Создание правил исключения сигнатур атаки».

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.
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»
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 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».
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» определил как нелегитимный.

allow_reuse_sock = true
Параметр, позволяющий уменьшить время инициализации UNIX-сокета модуля «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 =
#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 запросов. Для обработки такого количества запросов требуется 16 ГБ ОЗУ.

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]
Секция, отвечающая за параметры защиты от атак перебора паролей.
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
Интервал отправки данных.
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».

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

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

# service mlc_main restart
# service mlc_main status

Настройка модуля «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 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. В случае, если лицензионный ключ не будет обнаружен или будет недействителен, запуск модуля завершится соответствующей ошибкой.
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 = 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» в режиме только сигнатурного анализа или комбинированного (сигнатурный анализ и анализ модулем «Nemesida AI»), все поступающие на «Nemesida WAF» запросы проходят первичную обработку подсистемой сигнатурного анализа. Только в случае, если запрос будет содержать в себе признаки атаки, он передается для дальнейшей обработки модулем «Nemesida AI».

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

Nemesida WAF: the request a3ce369e9999de3f786dbf932d8940d0 contains a rule id 220 in zone HEADERS, client: X.X.X.X, server: example.com, request: "GET /catalog/1/?cat=1&sub=1 HTTP/1.1", host: "example.com"

где:
220 — ID сигнатуры атаки;
HEADERS — зона вхождения сигнатуры;
client, server — адрес клиента, с которого был направлен запрос, и адрес (FQDN или IP) сервера, на который он был направлен;
request — информация о запросе, включая URI запроса.

Для вывода абсолютно всех вхождений сигнатур в запросе (при наличии вхождений), в том числе тех вхождений, которые не привели к последующему блокированию запроса, активируйте параметр nwaf_log_mr_all; в конфигурационном файле /etc/nginx/nwaf/conf/global/nwaf.conf.

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

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
Префикс ошибок, возникающих в процессе передачи данных об атаках к 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
Файлы моделей для модуля «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.
Ошибка
Описание
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
Проблема при отправке данных на «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» свяжитесь с технической поддержкой.

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

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