Установка динамического модуля WAF для NGINX Plus¶
Инструкция описывает подключение Валарм WAF как динамического модуля к официальной коммерческой версии NGINX Plus.
Если Валарм WAF уже установлен
Если вы устанавливаете Валарм WAF вместо существующего Валарм WAF или дублируете установку, используйте версию существующего Валарм WAF или обновите версии всех установок до последней. Для отдельно установленной постаналитики также необходимо использовать одинаковые версии при замене или дублировании установок.
Чтобы получить установленную версию, если WAF‑нода и постаналитика расположены на одном сервере:
apt list wallarm-node
apt list wallarm-node
yum list wallarm-node
Чтобы получить версии WAF‑ноды и постаналитики, установленных на разных серверах:
# выполните на сервере с WAF‑нодой
apt list wallarm-node-nginx
# выполните на сервере с постаналитикой
apt list wallarm-node-tarantool
# выполните на сервере с WAF‑нодой
apt list wallarm-node-nginx
# выполните на сервере с постаналитикой
apt list wallarm-node-tarantool
# выполните на сервере с WAF‑нодой
yum list wallarm-node-nginx
# выполните на сервере с постаналитикой
yum list wallarm-node-tarantool
- Если установлена версия
2.18
, используйте текущую инструкцию для WAF‑ноды и инструкцию для отдельной постаналитики. - Если установлена версия
2.16
, используйте инструкцию для WAF‑ноды 2.16 и для отдельной постаналитики 2.16 или обновите пакеты WAF‑ноды и пакеты отдельной постаналитики до последней версии для всех установок. - Если установлена версия
2.14
или ниже, обновите пакеты WAF‑ноды и пакеты отдельной постаналитики до последней версии для всех установок.
Более подробная информация о поддержке версий доступна в политике версионирования WAF‑ноды.
Требования¶
-
Доступ к аккаунту с ролью Администратор или Деплой и отключенной двухфакторной аутентификацией в Консоли управления Валарм для RU‑облака или EU‑облака
-
SELinux, отключенный или настроенный по инструкции
-
Выполнение команд от имени суперпользователя (например,
root
) -
Для обработки запросов и постаналитики на разых серверах: постаналитика, установленная на отдельный сервер по инструкции
-
Возможность обращаться к
https://repo.wallarm.com
для загрузки пакетов. Убедитесь, что доступ не ограничен настройками файервола -
Доступ к
https://api.wallarm.com:444
для работы с EU‑облаком Валарм или кhttps://api.wallarm.ru:444
для работы с RU‑облаком Валарм. Если доступ к Валарм API возможен только через прокси‑сервер, используйте инструкцию для настройки - Установленный текстовый редактор vim, nano или другой. В инструкции используется редактор vim
Варианты установки¶
Обработка запросов в Валарм WAF делится на две фазы:
-
Первичная обработка в модуле NGINX-Wallarm. Не требует большого объема оперативной памяти, может быть размещена на текущих frontend-серверах без изменения требований.
-
Статистический анализ обработанных запросов в модуле постаналитики. Требует значительного объема памяти, что может потребовать внесения изменений в конфигурацию существующих серверов либо выполнение постаналитики на другом сервере.
В зависимости от архитектуры системы, модуль NGINX-Wallarm и модуль постаналитики могут быть установлены на один сервер или на разные серверы.
Команды установки для разных вариантов описаны в соответствующих шагах.
Установка¶
1. Установите NGINX Plus и зависимости¶
Установите NGINX Plus и зависимости, используя официальную инструкцию NGINX.
Установка на Amazon Linux 2
Для установки NGINX Plus на Amazon Linux 2 используйте инструкцию для CentOS 7.
2. Добавьте репозитории Валарм WAF¶
Валарм WAF устанавливается и обновляется из репозиториев Валарм. Для добавления репозиториев используйте команды для вашей платформы.
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/2.18/' | 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 buster/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node xenial/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node bionic/2.18/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/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.wallarm.com/centos/wallarm-node/7/2.18/x86_64/Packages/wallarm-node-repo-1-5.el7.noarch.rpm
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/7/2.18/x86_64/Packages/wallarm-node-repo-1-5.el7.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/8/2.18/x86_64/Packages/wallarm-node-repo-1-5.el8.noarch.rpm
3. Установите пакеты Валарм WAF¶
Обработка запросов и постаналитика на одном сервере¶
Для обработки запросов и проведения статистического анализа на одном сервере, необходимо установить следующие группы пакетов:
-
nginx-plus-module-wallarm
для модуля NGINX Plus-Wallarm -
wallarm-node
для модуля постаналитики, хранилища Tarantool и дополнительных пакетов NGINX Plus-Wallarm
sudo apt install --no-install-recommends wallarm-node nginx-plus-module-wallarm
sudo apt install --no-install-recommends wallarm-node nginx-plus-module-wallarm
sudo yum install wallarm-node nginx-plus-module-wallarm
Обработка запросов и постаналитика на разных серверах¶
Для обработки запросов и проведения статистического анализа на разных серверах, необходимо установить следующие группы пакетов:
-
wallarm-node-nginx
иnginx-plus-module-wallarm
для модуля NGINX Plus-Wallarmsudo apt install --no-install-recommends wallarm-node-nginx nginx-plus-module-wallarm
sudo apt install --no-install-recommends wallarm-node-nginx nginx-plus-module-wallarm
sudo yum install wallarm-node-nginx nginx-plus-module-wallarm
-
wallarm-node-tarantool
на отдельный сервер для модуля постаналитики и хранилища Tarantool (установка описана в инструкции)
4. Подключите модуль Валарм WAF¶
-
Откройте файл
/etc/nginx/nginx.conf
:sudo vim /etc/nginx/nginx.conf
-
Добавьте следующую директиву под директивой
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-plus-module-wallarm/examples/*.conf /etc/nginx/conf.d/
5. Подключите WAF‑ноду к Облаку Валарм¶
В процессе работы WAF‑нода взаимодействует с облаком Валарм. Чтобы подключить WAF‑ноду к облаку, выполните следующие действия:
-
Убедитесь, что роль вашего пользователя в Консоли управления Валарм — Администратор или Деплой и для пользователя отключена двухфакторная аутентификация.
Для этого перейдите к списку пользователей в RU‑облаке или EU‑облаке и проверьте столбцы Роль и Auth:
-
В системе с установленной WAF‑нодой запустите скрипт
addnode
:sudo /usr/share/wallarm-common/addnode
sudo /usr/share/wallarm-common/addnode -H api.wallarm.ru
-
Введите email и пароль от вашего аккаунта Валарм.
-
Введите название WAF‑ноды или нажмите Enter, чтобы использовать название, сгенерированное автоматически.
-
Перейдите в Консоль управления Валарм → секция Ноды для RU‑облака или EU‑облака и убедитесь, что в списке появилась созданная WAF‑нода.
6. Обновите конфигурацию Валарм WAF¶
Основные конфигурационные файлы NGINX и WAF‑ноды Валарм расположены в директориях:
-
/etc/nginx/conf.d/default.conf
с настройками NGINX -
/etc/nginx/conf.d/wallarm.conf
с глобальными настройками WAF‑ноды ВалармФайл используется для настроек, которые применяются ко всем доменам. Чтобы применить разные настройки к отдельным группам доменов, используйте файл
default.conf
или создайте новые файлы конфигурации для каждой группы доменов (например,example.com.conf
иtest.com.conf
). Более подробная информация о конфигурационных файлах NGINX доступна в официальной документации NGINX. -
/etc/nginx/conf.d/wallarm‑status.conf
с настройками мониторинга WAF‑ноды. Описание конфигурации доступно по ссылке -
/etc/default/wallarm-tarantool
или/etc/sysconfig/wallarm-tarantool
с настройками хранилища Tarantool
Режим фильтрации запросов¶
По умолчанию, WAF‑нода находится в режиме off
и не фильтрует входящие запросы. Измените режим фильтрации для блокировки запросов с атаками на уровне настроек NGINX:
-
Откройте файл
/etc/nginx/conf.d/default.conf
:sudo vim /etc/nginx/conf.d/default.conf
-
Добавьте в блок
server
строкуwallarm_mode block;
.
Пример файла /etc/nginx/conf.d/default.conf
server {
# порт, для которого фильтруется трафик
listen 80;
# домен, для которого фильтруется трафик
server_name localhost;
# режим работы WAF‑ноды
wallarm_mode block;
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;
}
}
Оперативная память¶
Постаналатика на отдельном сервере
Если постаналитика установлена на отдельный сервер, пропустите этот шаг. Настройка постаналитики была выполнена во время отдельной установки.
WAF‑нода использует находящееся в памяти хранилище Tarantool. Рекомендуемое количество памяти для Tarantool: 75% от общей памяти виртуальной машины. Чтобы настроить объем памяти для Tarantool:
-
Откройте для редактирования конфигурационный файл Tarantool:
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
-
Укажите размер выделенной памяти в директиве
SLAB_ALLOC_ARENA
в ГБ. Значение может быть целым или дробным (разделитель целой и дробной части — точка). Например, 24 ГБ:SLAB_ALLOC_ARENA=24
Подробные рекомендации по выделению памяти для Tarantool описаны в инструкции.
-
Чтобы применить изменения, перезапустите Tarantool:
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
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 и Валарм WAF, используйте документацию NGINX и список доступных директив Валарм WAF.
7. Перезапустите NGINX Plus¶
Предоставление пользователю прав 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. Протестируйте работу Валарм WAF¶
-
Получите статистику о работе WAF‑ноды, выполнив запрос:
curl http://127.0.0.8/wallarm-status
Запрос вернет статистические данные о проанализированных запросах. Формат ответа приведен ниже, подробное описание параметров доступно по ссылке.
{ "requests":0,"attacks":0,"blocked":0,"abnormal":0,"tnt_errors":0,"api_errors":0, "requests_lost":0,"segfaults":0,"memfaults":0,"softmemfaults":0,"time_detect":0,"db_id":46, "lom_id":16767,"proton_instances": { "total":1,"success":1,"fallback":0,"failed":0 }, "stalled_workers_count":0,"stalled_workers":[] }
-
Отправьте тестовый запрос с атаками SQLI и XSS на адрес приложения:
curl http://localhost/?id='or+1=1--a-<script>prompt(1)</script>'
Если WAF‑нода работает в режиме
block
, запрос будет заблокирован с ответом403 Forbidden
. -
Выполните запрос к
wallarm-status
и убедитесь, что значение параметровrequests
иattacks
увеличилось:curl http://127.0.0.8/wallarm-status
-
Перейдите в Консоль управления Валарм → секция События для EU‑облака или для RU‑облака и убедитесь, что атаки появились в списке.
Настройка¶
Динамический модуль Валарм WAF со стандартными настройками установлен на NGINX Plus. Чтобы кастомизировать настройки Валарм WAF, используйте доступные директивы.
Частые настройки:
-
Использование балансировщика или прокси‑сервера перед WAF‑нодой
-
Добавление адресов сканера Валарм в белый список для режима фильтрации
block
-
Ограничение времени обработки единичного запроса в директиве
wallarm_process_time_limit
-
Ограничение времени ожидания ответа сервера в директиве NGINX
proxy_read_timeout
-
Ограничение максимального размера запроса в директиве NGINX
client_max_body_size