Установка динамического модуля для NGINX из репозитория Debian/CentOS¶
Инструкция описывает подключение ноды Валарм как динамического модуля к бесплатной версии NGINX, установленной из репозитория Debian/CentOS.
Если вы используете несколько нод Валарм
Все ноды Валарм, установленные в вашей инфраструктуре, должны иметь одинаковые версии. Аналогично для модулей постаналитики, установленных на отдельных серверах.
Перед установкой дополнительной ноды убедитесь, что ее версия совпадает с версией уже установленных модулей. Если версии модулей устарели или начинают устаревать (3.2
и ниже), рекомендуем обновить все модули до последней версии.
Чтобы получить версию ноды и модуля постаналитики, установленных на одном сервере:
apt list wallarm-node
yum list wallarm-node
yum list wallarm-node
Чтобы получить версию ноды и модуля постаналитики, установленных на разных серверах:
# выполните на сервере с нодой
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
Требования¶
-
Доступ к аккаунту с ролью Администратор или Деплой и отключенной двухфакторной аутентификацией в Консоли управления Валарм для RU‑Облака или EU‑Облака
-
SELinux, отключенный или настроенный по инструкции
-
Выполнение команд от имени суперпользователя (например,
root
) -
Для обработки запросов и постаналитики на разных серверах: модуль постаналитики, установленный на отдельный сервер по инструкции
-
Возможность обращаться к
https://repo.wallarm.com
для загрузки пакетов. Убедитесь, что доступ не ограничен настройками файервола -
Доступ к
https://api.wallarm.com:444
для работы с EU‑Облаком Валарм или кhttps://api.wallarm.ru:444
для работы с RU‑Облаком Валарм. Если доступ к Валарм API возможен только через прокси‑сервер, используйте инструкцию для настройки -
Доступ к адресам GCP или хранилища Яндекс S3, чтобы обеспечить корректную блокировку IP‑адресов, зарегистрированных в странах или дата-центрах из белого, черного и серого списков IP. Набор адресов:
- Диапазон адресов для EU-Облака Валарм
- Для RU-Облака Валарм необходимо обеспечить доступ к нескольким диапазонам: диапазон 1 и диапазон 2
-
Установленный текстовый редактор vim, nano или другой. В инструкции используется редактор vim
Варианты установки¶
Обработка запросов в модуле Валарм делится на две фазы:
-
Первичная обработка в модуле NGINX-Wallarm (нодой Валарм). Не требует большого объема оперативной памяти, может быть размещена на текущих frontend-серверах без изменения требований.
-
Статистический анализ обработанных запросов в модуле постаналитики. Требует значительного объема памяти, что может потребовать внесения изменений в конфигурацию существующих серверов либо выполнение постаналитики на другом сервере.
В зависимости от архитектуры системы, модуль NGINX-Wallarm и модуль постаналитики могут быть установлены на один сервер или на разные серверы.
Команды установки для разных вариантов описаны в соответствующих шагах.
Установка¶
1. Добавьте репозитории Debian/CentOS¶
sudo apt install dirmngr
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node stretch/3.6/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
sudo apt install dirmngr
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node stretch/3.6/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node stretch-backports/3.6/' | sudo tee --append /etc/apt/sources.list.d/wallarm.list"
# для корректной работы снимите комментарий со следующей строки в файле /etc/apt/sources.list`:
# deb http://deb.debian.org/debian stretch-backports main contrib non-free
sudo apt update
sudo apt install dirmngr
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node buster/3.6/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
sudo apt install dirmngr
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node bullseye/3.6/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/6/3.6/x86_64/Packages/wallarm-node-repo-1-6.el6.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/7/3.6/x86_64/Packages/wallarm-node-repo-1-6.el7.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/8/3.6/x86_64/Packages/wallarm-node-repo-1-6.el8.noarch.rpm
2. Установите NGINX с пакетами Валарм¶
Обработка запросов и постаналитика на одном сервере¶
Команда выполняет установку следующих пакетов:
-
nginx
для NGINX -
libnginx-mod-http-wallarm
илиnginx-mod-http-wallarm
для модуля NGINX-Wallarm -
wallarm-node
для модуля постаналитики, хранилища Tarantool и дополнительных пакетов NGINX-Wallarm
sudo apt install --no-install-recommends nginx wallarm-node libnginx-mod-http-wallarm
sudo apt install --no-install-recommends nginx wallarm-node libnginx-mod-http-wallarm -t stretch-backports
sudo apt install --no-install-recommends nginx wallarm-node libnginx-mod-http-wallarm
sudo apt install --no-install-recommends nginx wallarm-node libnginx-mod-http-wallarm
sudo yum install nginx wallarm-node nginx-mod-http-wallarm
sudo yum install nginx wallarm-node nginx-mod-http-wallarm
sudo yum install nginx wallarm-node nginx-mod-http-wallarm
Обработка запросов и постаналитика на разных серверах¶
Для обработки запросов и проведения статистического анализа на разных серверах, необходимо установить следующие группы пакетов:
-
wallarm-node-tarantool
на отдельный сервер для модуля постаналитики и хранилища Tarantool по инструкции -
wallarm-node-nginx
иlibnginx-mod-http-wallarm
/nginx-mod-http-wallarm
для модуля NGINX-Wallarm
Команда выполняет установку пакетов для NGINX и для модуля NGINX-Wallarm:
sudo apt install --no-install-recommends nginx wallarm-node-nginx libnginx-mod-http-wallarm
sudo apt install --no-install-recommends nginx wallarm-node-nginx libnginx-mod-http-wallarm -t stretch-backports
sudo apt install --no-install-recommends nginx wallarm-node-nginx libnginx-mod-http-wallarm
sudo apt install --no-install-recommends nginx wallarm-node-nginx libnginx-mod-http-wallarm
sudo yum install nginx wallarm-node-nginx nginx-mod-http-wallarm
sudo yum install nginx wallarm-node-nginx nginx-mod-http-wallarm
sudo yum install nginx wallarm-node-nginx nginx-mod-http-wallarm
3. Подключите модуль Валарм для обработки запросов¶
Скопируйте конфигурационные файлы для настройки системы:
sudo cp /usr/share/doc/libnginx-mod-http-wallarm/examples/*conf /etc/nginx/conf.d/
sudo cp /usr/share/doc/nginx-mod-http-wallarm/examples/*conf /etc/nginx/conf.d/
sudo cp /usr/share/doc/nginx-mod-http-wallarm/examples/*conf /etc/nginx/conf.d/
4. Подключите ноду к Облаку Валарм¶
В процессе работы нода Валарм взаимодействует с Облаком Валарм. Чтобы подключить ноду к Облаку, выполните следующие действия:
-
Убедитесь, что роль вашего пользователя в Консоли управления Валарм — Администратор или Деплой и для пользователя отключена двухфакторная аутентификация.
Для этого перейдите к списку пользователей в RU‑Облаке или EU‑Облаке и проверьте столбцы Роль и Auth:
-
В системе с установленной нодой запустите скрипт
addnode
:sudo /usr/share/wallarm-common/addnode
sudo /usr/share/wallarm-common/addnode -H api.wallarm.ru
-
Введите email и пароль от вашего аккаунта Валарм.
-
Введите имя ноды или нажмите Enter, чтобы использовать имя, сгенерированное автоматически.
Вы сможете изменить заданное имя позже в Консоли управления Валарм → Ноды.
-
Перейдите в Консоль управления Валарм → секция Ноды для RU‑Облака или EU‑Облака и убедитесь, что в списке появилась созданная нода.
5. Обновите конфигурацию модулей Валарм¶
Основные конфигурационные файлы 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/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
Адрес отдельного сервера постаналитики¶
NGINX-Wallarm и модуль постаналитики на одном сервере
Если модули NGINX-Wallarm и постаналитики установлены на одном сервере, пропустите этот шаг.
Добавьте в /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.
Другие настройки¶
Чтобы обновить другие настройки NGINX и модулей Валарм, используйте документацию NGINX и список доступных директив Валарм.
6. Перезапустите NGINX¶
Предоставление пользователю прав root
Если вы запускаете NGINX под пользователем, который не имеет прав root
, добавьте пользователя в группу wallarm
при помощи следующей команды:
usermod -aG wallarm <user_name>
где <user_name>
— это имя пользователя, который не имеет прав root
.
sudo systemctl restart nginx
sudo systemctl restart nginx
sudo systemctl restart nginx
7. Протестируйте работу Валарм¶
-
Отправьте тестовый запрос с атаками SQLI и XSS на адрес приложения:
curl http://localhost/?id='or+1=1--a-<script>prompt(1)</script>'
-
Перейдите в Консоль управления Валарм → секция События для EU‑Облака или для RU‑Облака и убедитесь, что атаки появились в списке.
Настройка¶
Динамический модуль Валарм со стандартными настройками установлен на NGINX из репозитория Debian/CentOS. Чтобы кастомизировать настройки Валарм, используйте доступные директивы.
Частые настройки:
-
Использование балансировщика или прокси‑сервера перед нодой Валарм
-
Ограничение времени обработки единичного запроса в директиве
wallarm_process_time_limit
-
Ограничение времени ожидания ответа сервера в директиве NGINX
proxy_read_timeout
-
Ограничение максимального размера запроса в директиве NGINX
client_max_body_size