Перейти к содержанию

Установка динамического модуля для 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. Набор адресов:

  • Установленный текстовый редактор vim, nano или другой. В инструкции используется редактор vim

Варианты установки

Обработка запросов в модуле Валарм делится на две фазы:

  1. Первичная обработка в модуле NGINX-Wallarm (нодой Валарм). Не требует большого объема оперативной памяти, может быть размещена на текущих frontend-серверах без изменения требований.

  2. Статистический анализ обработанных запросов в модуле постаналитики. Требует значительного объема памяти, что может потребовать внесения изменений в конфигурацию существующих серверов либо выполнение постаналитики на другом сервере.

В зависимости от архитектуры системы, модуль 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. Подключите ноду к Облаку Валарм

В процессе работы нода Валарм взаимодействует с Облаком Валарм. Чтобы подключить ноду к Облаку, выполните следующие действия:

  1. Убедитесь, что роль вашего пользователя в Консоли управления Валарм — Администратор или Деплой и для пользователя отключена двухфакторная аутентификация.

    Для этого перейдите к списку пользователей в RU‑Облаке или EU‑Облаке и проверьте столбцы Роль и Auth:

    Список пользователей в консоли Валарм

  2. В системе с установленной нодой запустите скрипт addnode:

    sudo /usr/share/wallarm-common/addnode
    
    sudo /usr/share/wallarm-common/addnode -H api.wallarm.ru
    
  3. Введите email и пароль от вашего аккаунта Валарм.

  4. Введите имя ноды или нажмите Enter, чтобы использовать имя, сгенерированное автоматически.

    Вы сможете изменить заданное имя позже в Консоли управления Валарм → Ноды.

  5. Перейдите в Консоль управления Валарм → секция Ноды для 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 и не анализирует входящие запросы. Чтобы включить анализ входящих запросов, выполните следующие шаги:

  1. Откройте файл /etc/nginx/conf.d/default.conf:

    sudo vim /etc/nginx/conf.d/default.conf
    
  2. Добавьте в блок 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:

  1. Откройте для редактирования конфигурационный файл Tarantool:

    sudo vim /etc/default/wallarm-tarantool
    
    sudo vim /etc/sysconfig/wallarm-tarantool
    
    sudo vim /etc/sysconfig/wallarm-tarantool
    
  2. Укажите размер выделенной памяти в директиве SLAB_ALLOC_ARENA в ГБ. Значение может быть целым или дробным (разделитель целой и дробной части — точка).

    Например:

    SLAB_ALLOC_ARENA=0.5
    
    SLAB_ALLOC_ARENA=24
    

    Подробные рекомендации по выделению памяти для Tarantool описаны в инструкции.

  3. Чтобы применить изменения, перезапустите 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. Протестируйте работу Валарм

  1. Отправьте тестовый запрос с атаками SQLI и XSS на адрес приложения:

    curl http://localhost/?id='or+1=1--a-<script>prompt(1)</script>'
    
  2. Перейдите в Консоль управления Валарм → секция События для EU‑Облака или для RU‑Облака и убедитесь, что атаки появились в списке.

    Атаки в интерфейсе

Настройка

Динамический модуль Валарм со стандартными настройками установлен на NGINX из репозитория Debian/CentOS. Чтобы кастомизировать настройки Валарм, используйте доступные директивы.

Частые настройки:

К началу