Установка динамического модуля Вебмониторэкс для NGINX Stable из репозитория NGINX¶
Инструкция описывает подключение ноды Вебмониторэкс как динамического модуля к бесплатной версии NGINX stable
, установленной из репозитория NGINX.
Если вы используете несколько нод Вебмониторэкс
Все ноды Вебмониторэкс, установленные в вашей инфраструктуре, должны иметь одинаковые версии. Аналогично для модулей постаналитики, установленных на отдельных серверах.
Перед установкой дополнительной ноды убедитесь, что ее версия совпадает с версией уже установленных модулей. Если версии модулей устарели или начинают устаревать (3.6
и ниже), рекомендуем обновить все модули до последней версии.
Чтобы получить версию ноды и модуля постаналитики, установленных на одном сервере:
apt list wallarm-node
apt 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
Требования¶
-
Доступ к аккаунту с ролью Администратор или Деплой и отключенной двухфакторной аутентификацией в Консоли управления Вебмониторэкс
-
SELinux, отключенный или настроенный по инструкции
-
Выполнение команд от имени суперпользователя (например,
root
) -
Для обработки запросов и постаналитики на разных серверах: модуль постаналитики, установленный на отдельный сервер по инструкции
-
Возможность обращаться к
https://repo.webmonitorx.ru
для загрузки пакетов. Убедитесь, что доступ не ограничен настройками файервола -
Доступ к
https://api.wallarm.ru:444
для работы с Вычислительным кластером Вебмониторэкс. Если доступ к Вебмониторэкс API возможен только через прокси‑сервер, используйте инструкцию для настройки - Установленный текстовый редактор 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.
2. Добавьте репозитории Вебмониторэкс¶
Модули Вебмониторэкс устанавливаются и обновляются из репозиториев Вебмониторэкс. Для добавления репозиториев используйте команды для вашей платформы.
sudo apt install dirmngr
curl -fsSL https://repo.webmonitorx.ru/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.webmonitorx.ru/debian/wallarm-node buster/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.webmonitorx.ru/ubuntu/wallarm-node xenial/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.webmonitorx.ru/ubuntu/wallarm-node bionic/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.webmonitorx.ru/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.webmonitorx.ru/ubuntu/wallarm-node focal/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
sudo yum install -y epel-release
sudo rpm -i https://repo.webmonitorx.ru/centos/wallarm-node/7/2.18/x86_64/Packages/wallarm-node-repo-1-6.el7.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.webmonitorx.ru/centos/wallarm-node/8/2.18/x86_64/Packages/wallarm-node-repo-1-6.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
Обработка запросов и постаналитика на разных серверах¶
Для обработки запросов и проведения статистического анализа на разных серверах, необходимо установить следующие группы пакетов:
-
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
-
wallarm-node-tarantool
на отдельный сервер для модуля постаналитики и хранилища Tarantool (установка описана в инструкции)
4. Подключите модуль Вебмониторэкс для обработки запросов¶
-
Откройте файл
/etc/nginx/nginx.conf
:sudo vim /etc/nginx/nginx.conf
-
Проверьте, что в файле есть строка
include /etc/nginx/conf.d/*;
. Если такой строки нет, добавьте ее. -
Добавьте следующую директиву под директивой
worker_processes
: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. Подключите ноду к Вычислительному кластеру Вебмониторэкс¶
В процессе работы нода Вебмониторэкс взаимодействует с Вычислительным кластером Вебмониторэкс. Чтобы подключить ноду к Вычислительному кластеру, выполните следующие действия:
-
Убедитесь, что роль вашего пользователя в Консоли управления Вебмониторэкс — Администратор или Деплой и для пользователя отключена двухфакторная аутентификация.
Для этого перейдите к списку пользователей в Консоли управления и проверьте столбцы Роль и Auth:
-
В системе с установленной нодой запустите скрипт
addnode
:sudo /usr/share/wallarm-common/addnode -H api.wallarm.ru
-
Введите email и пароль от вашего аккаунта Вебмониторэкс.
-
Введите имя ноды или нажмите Enter, чтобы использовать имя, сгенерированное автоматически.
Вы сможете изменить заданное имя позже в Консоли управления Вебмониторэкс → Ноды.
-
Перейдите в Консоль управления Вебмониторэкс → секция Ноды и убедитесь, что в списке появилась созданная нода.
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
-
Укажите размер выделенной памяти в директиве
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
Адрес отдельного сервера постаналитики¶
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
8. Протестируйте работу Вебмониторэкс¶
-
Отправьте тестовый запрос с атаками SQLI и XSS на адрес защищенного ресурса:
curl http://localhost/?id='or+1=1--a-<script>prompt(1)</script>'
-
Перейдите в Консоль управления Вебмониторэкс → секция События и убедитесь, что атаки появились в списке.
Настройка¶
Динамический модуль Вебмониторэкс со стандартными настройками установлен на NGINX. Чтобы кастомизировать настройки Вебмониторэкс, используйте доступные директивы.
Частые настройки:
-
Использование балансировщика или прокси‑сервера перед нодой Вебмониторэкс
-
Добавление адресов сканера Вебмониторэкс в белый список для режима фильтрации
block
-
Ограничение времени обработки единичного запроса в директиве
wallarm_process_time_limit
-
Ограничение времени ожидания ответа сервера в директиве NGINX
proxy_read_timeout
-
Ограничение максимального размера запроса в директиве NGINX
client_max_body_size