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

Установка динамического модуля Валарм для NGINX Stable из репозитория NGINX

Инструкция описывает подключение ноды Валарм как динамического модуля к бесплатной версии NGINX stable, установленной из репозитория NGINX.

Если вы используете несколько нод Валарм

Все ноды Валарм, установленные в вашей инфраструктуре, должны иметь одинаковые версии. Аналогично для модулей постаналитики, установленных на отдельных серверах.

Перед установкой дополнительной ноды убедитесь, что ее версия совпадает с версией уже установленных модулей. Если версии модулей устарели или начинают устаревать (3.2 и ниже), рекомендуем обновить все модули до последней версии.

Чтобы получить версию ноды и модуля постаналитики, установленных на одном сервере:

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

Требования

  • Доступ к аккаунту с ролью Администратор или Деплой и отключенной двухфакторной аутентификацией в Консоли управления Валарм для 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. Установите 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
    
    1. Если для 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
      
    2. Установите 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

    Возможен только один вариант установки NGINX stable на AlmaLinux, Rocky Linux или Oracle Linux 8.x — из исходного кода из репозитория NGINX.

Более подробная информация об установке доступна в официальной документации NGINX.

Установка на Amazon Linux 2.0.2021x и ниже

Для установки NGINX на Amazon Linux 2.0.2021x и ниже используйте инструкцию для CentOS 7.

2. Добавьте репозитории Валарм

Модули Валарм устанавливаются и обновляются из репозиториев Валарм. Для добавления репозиториев используйте команды для вашей платформы.

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
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node bionic/3.6/' | 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/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 https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
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

3. Установите пакеты Валарм

Обработка запросов и постаналитика на одном сервере

Для обработки запросов и проведения статистического анализа на одном сервере, необходимо установить следующие группы пакетов:

  • nginx-module-wallarm для модуля NGINX-Wallarm

  • wallarm-node для модуля постаналитики, хранилища Tarantool и дополнительных пакетов NGINX-Wallarm

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-Wallarm

    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
    
  • wallarm-node-tarantool на отдельный сервер для модуля постаналитики и хранилища Tarantool (установка описана в инструкции)

4. Подключите модуль Валарм для обработки запросов

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

    sudo vim /etc/nginx/nginx.conf
    
  2. Проверьте, что в файле есть строка include /etc/nginx/conf.d/*;. Если такой строки нет, добавьте ее.

  3. Добавьте следующую директиву под директивой 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;
    
  4. Скопируйте конфигурационные файлы для настройки системы:

    sudo cp /usr/share/doc/nginx-module-wallarm/examples/*.conf /etc/nginx/conf.d/
    

5. Подключите ноду к Облаку Валарм

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

  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‑Облака и убедитесь, что в списке появилась созданная нода.

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

  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/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
    
    sudo service wallarm-tarantool restart
    
    sudo systemctl restart wallarm-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 и список доступных директив Валарм.

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. Протестируйте работу Валарм

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

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

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

Настройка

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

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

К началу