Установка динамического модуля Вебмониторэкс для NGINX Stable из репозитория NGINX¶
Инструкция описывает подключение ноды Вебмониторэкс как динамического модуля к бесплатной версии NGINX stable
, установленной из репозитория NGINX.
Если вы используете несколько нод Вебмониторэкс
Все ноды Вебмониторэкс, установленные в вашей инфраструктуре, должны иметь одинаковые версии. Аналогично для модулей постаналитики, установленных на отдельных серверах.
Перед установкой дополнительной ноды убедитесь, что ее версия совпадает с версией уже установленных модулей. Если версии модулей устарели или начинают устаревать (3.6
и ниже), рекомендуем обновить все модули до последней версии.
Чтобы получить версию ноды и модуля постаналитики, установленных на одном сервере:
apt list wallarm-node
apt list wallarm-node
yum list wallarm-node
yum list wallarm-node
Чтобы получить версию ноды и модуля постаналитики, установленных на разных серверах:
# выполните на сервере с нодой
apt list wallarm-node-nginx
# выполните на сервере с модулем постаналитики
apt list wallarm-node-tarantool
# выполните на сервере с нодой
apt list wallarm-node-nginx
# выполните на сервере с модулем постаналитики
apt list wallarm-node-tarantool
# выполните на сервере с нодой
yum list wallarm-node-nginx
# выполните на сервере с модулем постаналитики
yum list wallarm-node-tarantool
# выполните на сервере с нодой
yum list wallarm-node-nginx
# выполните на сервере с модулем постаналитики
yum list wallarm-node-tarantool
Требования¶
-
Доступ к аккаунту с ролью Администратор в Консоли управления Вебмониторэкс
-
SELinux, отключенный или настроенный по инструкции
-
Выполнение команд от имени суперпользователя (например,
root
) -
Для обработки запросов и постаналитики на разных серверах: модуль постаналитики, установленный на отдельный сервер по инструкции
-
Возможность обращаться к
https://repo.webmonitorx.ru
и для загрузки пакетов. Убедитесь, что доступ не ограничен настройками файервола -
Доступ к
https://api.wallarm.ru
иhttps://api.webmonitorx.ru
для работы с Вычислительным кластером Вебмониторэкс. Если доступ к Вебмониторэкс API возможен только через прокси‑сервер, используйте инструкцию для настройки -
Доступ к хранилищу Яндекс S3 (
https://storage.yandexcloud.net
), чтобы обеспечить корректную блокировку IP‑адресов, зарегистрированных в странах, регионах или дата-центрах из белого, черного и серого списков IP.Необходимо обеспечить доступ к
https://storage.yandexcloud.net
или нескольким диапазонам IP‑адресов: диапазон 1 и диапазон 2 -
Установленный текстовый редактор vim, nano или другой. В инструкции используется редактор vim
Варианты установки¶
Обработка запросов в модуле Вебмониторэкс делится на две фазы:
-
Первичная обработка в модуле NGINX-Вебмониторэкс (нодой Вебмониторэкс). Не требует большого объема оперативной памяти, может быть размещена на текущих frontend-серверах без изменения требований.
-
Статистический анализ обработанных запросов в модуле постаналитики. Требует значительного объема памяти, что может потребовать внесения изменений в конфигурацию существующих серверов либо выполнение постаналитики на другом сервере.
В зависимости от архитектуры системы, модуль NGINX-Вебмониторэкс и модуль постаналитики могут быть установлены на один сервер или на разные серверы.
Команды установки для разных вариантов описаны в соответствующих шагах.
Установка¶
1. Установите NGINX stable и зависимости¶
Возможны следующие способы установки NGINX stable
из репозитория NGINX:
-
Установка из готового пакета
sudo apt install curl gnupg2 ca-certificates lsb-release echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add - sudo apt update sudo apt install nginx
sudo apt install curl gnupg2 ca-certificates lsb-release echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add - sudo apt update sudo apt install nginx
-
Если для CentOS 7.x у вас уже подключен репозиторий EPEL, отключите установку NGINX stable из репозитория EPEL. Для этого добавьте выражение
exclude=nginx*
в файл/etc/yum.repos.d/epel.repo
.Пример файла после добавления выражения
exclude=nginx*
:[epel] name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 exclude=nginx* [epel-debuginfo] name=Extra Packages for Enterprise Linux 7 - $basearch - Debug #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1 [epel-source] name=Extra Packages for Enterprise Linux 7 - $basearch - Source #baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1
-
Установите NGINX stable из официального репозитория:
echo -e '\n[nginx-stable] \nname=nginx stable repo \nbaseurl=http://nginx.org/packages/centos/$releasever/$basearch/ \ngpgcheck=1 \nenabled=1 \ngpgkey=https://nginx.org/keys/nginx_signing.key \nmodule_hotfixes=true' | sudo tee /etc/yum.repos.d/nginx.repo sudo yum install nginx
-
-
Компиляция и установка с аналогичными опциями из исходного кода из ветки
stable
репозитория NGINXУстановка NGINX stable на AlmaLinux, Rocky Linux, Oracle Linux 8.x, RedOS
Возможен только один вариант установки NGINX stable на AlmaLinux, Rocky Linux, Oracle Linux 8.x, RedOS — из исходного кода из репозитория NGINX.
Более подробная информация об установке доступна в официальной документации NGINX.
2. Добавьте репозитории Вебмониторэкс¶
Модули Вебмониторэкс устанавливаются и обновляются из репозиториев Вебмониторэкс. Для добавления репозиториев используйте команды для вашей платформы.
sudo apt install dirmngr
curl -fsSL https://repo.webmonitorx.ru/wmx.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.webmonitorx.ru/debian/webmonitorx-node bullseye/4.8/' | sudo tee /etc/apt/sources.list.d/wmx.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wmx.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.webmonitorx.ru/ubuntu/webmonitorx-node bionic/4.8/' | sudo tee /etc/apt/sources.list.d/wmx.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wmx.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.webmonitorx.ru/ubuntu/webmonitorx-node focal/4.8/' | sudo tee /etc/apt/sources.list.d/wmx.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wmx.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.webmonitorx.ru/ubuntu/webmonitorx-node jammy/4.8/' | sudo tee /etc/apt/sources.list.d/wmx.list"
sudo apt update
sudo yum install -y epel-release
sudo rpm -i https://repo.webmonitorx.ru/centos/webmonitorx-node/7/4.8/x86_64/webmonitorx-node-repo-4.8-0.el7.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.webmonitorx.ru/centos/webmonitorx-node/8/4.8/x86_64/webmonitorx-node-repo-4.8-0.el8.noarch.rpm
3. Установите пакеты Вебмониторэкс¶
Обработка запросов и постаналитика на одном сервере¶
Для обработки запросов и проведения статистического анализа на одном сервере, необходимо установить следующие группы пакетов:
-
nginx-module-wallarm
для модуля NGINX-Вебмониторэкс -
wallarm-node
для модуля постаналитики, хранилища Tarantool и дополнительных пакетов NGINX-Вебмониторэкс
sudo apt install --no-install-recommends wallarm-node nginx-module-wallarm
sudo apt install --no-install-recommends wallarm-node nginx-module-wallarm
sudo yum install wallarm-node nginx-module-wallarm
sudo yum install wallarm-node nginx-module-wallarm
Обработка запросов и постаналитика на разных серверах¶
Для обработки запросов и проведения статистического анализа на разных серверах, необходимо установить следующие группы пакетов:
-
wallarm-node-nginx
иnginx-module-wallarm
для модуля NGINX-Вебмониторэксsudo apt install --no-install-recommends wallarm-node-nginx nginx-module-wallarm
sudo apt install --no-install-recommends wallarm-node-nginx nginx-module-wallarm
sudo yum install wallarm-node-nginx nginx-module-wallarm
sudo yum install wallarm-node-nginx nginx-module-wallarm
sudo dnf install -y wallarm-node nginx-module-wallarm
-
wallarm-node-tarantool
на отдельный сервер для модуля постаналитики и хранилища Tarantool (установка описана в инструкции)
4. Подключите модуль Вебмониторэкс для обработки запросов¶
-
Откройте файл
/etc/nginx/nginx.conf
:sudo vim /etc/nginx/nginx.conf
-
Проверьте, что в файле есть строка
include /etc/nginx/conf.d/*;
. Если такой строки нет, найдите строкуinclude /etc/nginx/conf.d/*.conf
и замените наinclude /etc/nginx/conf.d/*;
. -
Добавьте следующую директиву под директивой
worker_processes auto
:load_module modules/ngx_http_wallarm_module.so;
Пример файла с добавленной директивой:
user nginx; worker_processes auto; load_module modules/ngx_http_wallarm_module.so; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;
-
Скопируйте конфигурационные файлы для настройки системы:
sudo cp /usr/share/doc/nginx-module-wallarm/examples/*.conf /etc/nginx/conf.d/
5. Подключите ноду к Вычислительному кластеру Вебмониторэкс¶
Если модуль постаналитики установлен на отдельный сервер
Если модули первичной обработки трафика и постаналитики установлены на разные серверы, рекомендуется регистрировать такие модули в Вычислительном кластере по одному токену ноды. Для каждого модуля в Консоли управления будет отображаться отдельный инстанс ноды. Например:
При установке модуля постаналитики вы уже создали ноду Вебмониторэкс. Для установки следующих модулей ноды:
- Скопируйте токен ноды, созданной при установке модуля постаналитики.
- Перейдите к выполнению шага 4 из списка ниже.
В процессе работы нода Вебмониторэкс взаимодействует с Вычислительным кластером Вебмониторэкс. Чтобы подключить ноду к Вычислительному кластеру, выполните следующие действия:
-
Убедитесь, что роль вашего пользователя в Консоли управления Вебмониторэкс — Администратор.
Для этого перейдите к списку пользователей в Консоли управления и проверьте столбец Роль:
-
Перейдите в Консоль управления → Ноды и создайте ноду.
-
Скопируйте сгенерированный токен.
-
В системе с установленной нодой запустите скрипт
register-node
:sudo /usr/share/wallarm-common/register-node -t <WALLARM_API_TOKEN> -H api.wallarm.ru
<WALLARM_API_TOKEN>
— скопированный токен.- Вы можете добавить параметр
-n <HOST_NAME>
, чтобы задать уникальное имя экземпляру ноды. Итоговое имя экземпляра будет иметь формат:HOST_NAME_NodeUUID
.
Если модуль постаналитики установлен на отдельный сервер
Если модуль постаналитики установлен на отдельный сервер, рекомендуется использовать токен ноды, созданной при отдельной установке модуля постаналитики.
6. Обновите конфигурацию модулей Вебмониторэкс¶
Основные конфигурационные файлы NGINX и ноды Вебмониторэкс расположены в директориях:
-
/etc/nginx/conf.d/default.conf
с настройками NGINX -
/etc/nginx/conf.d/wallarm.conf
с глобальными настройками ноды ВебмониторэксФайл используется для настроек, которые применяются ко всем доменам. Чтобы применить разные настройки к отдельным группам доменов, используйте файл
default.conf
или создайте новые файлы конфигурации для каждой группы доменов (например,example.com.conf
иtest.com.conf
). Более подробная информация о конфигурационных файлах NGINX доступна в официальной документации NGINX. -
/etc/nginx/conf.d/wallarm-status.conf
с настройками мониторинга ноды. Описание конфигурации доступно по ссылке -
/etc/default/wallarm-tarantool
или/etc/sysconfig/wallarm-tarantool
с настройками хранилища Tarantool
Режим фильтрации запросов¶
По умолчанию, нода находится в режиме off
и не анализирует входящие запросы. Чтобы включить анализ входящих запросов, выполните следующие шаги:
-
Откройте файл
/etc/nginx/conf.d/default.conf
:sudo vim /etc/nginx/conf.d/default.conf
-
Добавьте в блок
http
,server
илиlocation
строкуwallarm_mode monitoring;
.
Пример файла /etc/nginx/conf.d/default.conf
server {
# порт, для которого фильтруется трафик
listen 80;
# домен, для которого фильтруется трафик
server_name localhost;
# режим работы ноды Вебмониторэкс
wallarm_mode monitoring;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
В режиме monitoring
нода Вебмониторэкс анализирует все входящие запросы, но не блокирует их, если обнаружит признаки атаки. Мы рекомендуем использовать ноду в режиме monitoring
в течение нескольких дней после установки и затем переключить в режим block
. Изучить рекомендации по настройке режима фильтрации запросов →
Оперативная память¶
Модуль постаналитики на отдельном сервере
Если модуль постаналитики установлен на отдельный сервер, пропустите этот шаг. Настройка постаналитики была выполнена во время отдельной установки.
Нода Вебмониторэкс использует находящееся в памяти хранилище Tarantool. В боевой среде мы рекомендуем выделять для Tarantool 75% от общей памяти виртуальной машины. Для тестирования ноды вы можете выделить меньшее количество памяти (например, 25% от общего объема).
Чтобы настроить объем памяти для Tarantool:
-
Откройте для редактирования конфигурационный файл Tarantool:
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
-
Укажите размер выделенной памяти в директиве
SLAB_ALLOC_ARENA
в ГБ. Значение может быть целым или дробным (разделитель целой и дробной части — точка).Например:
SLAB_ALLOC_ARENA=0.5
SLAB_ALLOC_ARENA=24
Подробные рекомендации по выделению памяти для Tarantool описаны в инструкции.
-
Чтобы применить изменения, перезапустите Tarantool:
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
Адрес отдельного сервера постаналитики¶
NGINX-Вебмониторэкс и модуль постаналитики на одном сервере
Если модули NGINX-Вебмониторэкс и постаналитики установлены на одном сервере, пропустите этот шаг.
Добавьте в /etc/nginx/conf.d/wallarm.conf
адреса серверов постаналитики:
upstream wallarm_tarantool {
server <ip1>:3313 max_fails=0 fail_timeout=0 max_conns=1;
server <ip2>:3313 max_fails=0 fail_timeout=0 max_conns=1;
keepalive 2;
}
# omitted
wallarm_tarantool_upstream wallarm_tarantool;
-
Значение
max_conns
должно быть указано для каждого сервера, чтобы предотвратить создание лишних соединений. -
Значение
keepalive
должно быть не меньше, чем количество серверов Tarantool. -
По умолчанию строка
# wallarm_tarantool_upstream wallarm_tarantool;
закомментирована – необходимо удалить#
.
Другие настройки¶
Чтобы обновить другие настройки NGINX и модулей Вебмониторэкс, используйте документацию NGINX и список доступных директив Вебмониторэкс.
7. Перезапустите NGINX¶
Предоставление пользователю прав root
Если вы запускаете NGINX под пользователем, который не имеет прав root
, добавьте пользователя в группу wallarm
при помощи следующей команды:
usermod -aG wallarm <user_name>
где <user_name>
— это имя пользователя, который не имеет прав root
.
sudo systemctl restart nginx
sudo service nginx restart
sudo systemctl restart nginx
sudo systemctl restart nginx
8. Протестируйте работу Вебмониторэкс¶
-
Отправьте тестовый запрос с атакой Path Traversal на адрес защищенного ресурса:
curl http://localhost/etc/passwd
-
Перейдите в Консоль управления Вебмониторэкс → раздел События и убедитесь, что атака появилась в списке.
Настройка¶
Динамический модуль Вебмониторэкс со стандартными настройками установлен на NGINX. Чтобы кастомизировать настройки Вебмониторэкс, используйте доступные директивы.
Частые настройки:
-
Использование балансировщика или прокси‑сервера перед нодой Вебмониторэкс
-
Ограничение времени обработки единичного запроса в директиве
wallarm_process_time_limit
-
Ограничение времени ожидания ответа сервера в директиве NGINX
proxy_read_timeout
-
Ограничение максимального размера запроса в директиве NGINX
client_max_body_size