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

Установка и подключение WAF‑ноды на основе NGINX

Обработка запросов WAF‑нодой

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

  • Первичная обработка в модуле NGINX-Wallarm;
  • Постаналитика. Статистический анализ обработанных запросов.

Данная инструкция описывает установку WAF‑ноды Валарм в виде динамически подключаемого модуля для NGINX на одном сервере с постаналитикой.

Для установки WAF‑ноды необходимо выполнить следующие действия:

  1. Установить NGINX;

  2. Добавить репозитории Валарм, из которых вы загрузите пакеты;

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

  4. Настроить модуль постаналитики;

  5. Подключить модуль Валарм;

  6. Подключить WAF‑ноду к облаку Валарм.

Необходимые условия

  • Перед установкой отключите или настройте SELinux, если он установлен в операционной системе.
  • Убедитесь, что вы выполняете все команды, приведенные ниже, от имени суперпользователя (например, root).

1. Установите NGINX

Установите стабильную версию NGINX из официального репозитория NGINX, руководствуясь инструкцией, соответствующей вашей операционной системе:

Стабильная версия NGINX

Убедитесь, что вы устанавливаете stable-пакеты NGINX — часть пути mainline должна отсутствовать в ссылке на репозиторий NGINX, содержащий необходимую вам сборку.

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

Установка и обновление модуля Валарм происходит из репозиториев Валарм.

В зависимости от вашей операционной системы, выполните одну из следующих команд:

apt-get install dirmngr
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node jessie/2.14/' >/etc/apt/sources.list.d/wallarm.list"
apt-get update
apt-get install dirmngr
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node stretch/2.14/' >/etc/apt/sources.list.d/wallarm.list"
apt-get update
apt-get install dirmngr
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/debian/wallarm-node buster/2.14/' > /etc/apt/sources.list.d/wallarm.list"
apt-get update
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node trusty/2.14/' >/etc/apt/sources.list.d/wallarm.list"
apt-get update
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node xenial/2.14/' >/etc/apt/sources.list.d/wallarm.list"
apt-get update
apt-key adv --keyserver keys.gnupg.net --recv-keys 72B865FD
sh -c "echo 'deb http://repo.wallarm.com/ubuntu/wallarm-node bionic/2.14/' >/etc/apt/sources.list.d/wallarm.list"
apt-get update
yum install --enablerepo=extras -y epel-release centos-release-SCL
rpm -i https://repo.wallarm.com/centos/wallarm-node/6/2.14/x86_64/Packages/wallarm-node-repo-1-5.el6.noarch.rpm
yum install -y epel-release
rpm -i https://repo.wallarm.com/centos/wallarm-node/7/2.14/x86_64/Packages/wallarm-node-repo-1-5.el7.noarch.rpm
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -i https://repo.wallarm.com/centos/wallarm-node/7/2.14/x86_64/Packages/wallarm-node-repo-1-5.el7.noarch.rpm

Доступ к репозиториям

У системы должна быть возможность обратиться к https://repo.wallarm.com для загрузки пакетов. Убедитесь, что доступ не ограничен настройками файервола.

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

В зависимости от вашей операционной системы, выполните одну из следующих команд:

apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
apt-get install --no-install-recommends wallarm-node nginx-module-wallarm
yum install wallarm-node nginx-module-wallarm
yum install wallarm-node nginx-module-wallarm
yum install wallarm-node nginx-module-wallarm

4. Настройте модуль постаналитики

Модуль постаналитики использует находящееся в памяти хранилище Tarantool. База данных Tarantool используется для хранения в локальном буфере копии трафика, который обрабатывает WAF‑нода, в том числе заголовки запросов и ответов, тело запросов. Тело ответа не записывается в базу данных.

Рекомендуемое количество памяти для Tarantool — 75% от общей памяти сервера. Чтобы оценить требуемое количество памяти более точно используется следующая формула:

Скорость обработки запросов в байтах в минуту * 15 * 2

Для оценки используется данная формула, так как для эффективной работы WAF‑ноды необходимо хранить данные не менее чем за 15 минут обработки запросов с учетом двойных издержек на сериализацию данных.

Например, если WAF‑нода на пике обрабатывает запросы со скоростью 50 Мбит/сек, для Tarantool требуется выделить следующее количество памяти:

50 Мбит/сек / 8 (бит в байте) * 60 (секунд в минуте) * 15 * 2 = 11,250,000,000 байт (или ~ 10.4 Гбит)

Настройка памяти для Tarantool выполняется в файле /etc/default/wallarm-tarantool > атрибут SLAB_ALLOC_ARENA. Чтобы указать количество памяти:

  1. Откройте конфигурационный файл Tarantool:
vi /etc/default/wallarm-tarantool
vi /etc/default/wallarm-tarantool
vi /etc/default/wallarm-tarantool
vi /etc/default/wallarm-tarantool
vi /etc/default/wallarm-tarantool
vi /etc/default/wallarm-tarantool
vi /etc/sysconfig/wallarm-tarantool
vi /etc/sysconfig/wallarm-tarantool
vi /etc/sysconfig/wallarm-tarantool
  1. Укажите размер памяти в атрибуте SLAB_ALLOC_ARENA. Например:
SLAB_ALLOC_ARENA=10.4
  1. Перезапустите Tarantool:
systemctl restart wallarm-tarantool
systemctl restart wallarm-tarantool
systemctl restart wallarm-tarantool
service wallarm-tarantool restart
service wallarm-tarantool restart
service wallarm-tarantool restart
service wallarm-tarantool restart
systemctl restart wallarm-tarantool
systemctl restart wallarm-tarantool

Чтобы получить количество времени, на протяжении которого Tarantool может хранить данные о трафике с текущим уровнем нагрузки на WAF‑ноду, вы можете использовать метрику wallarm-tarantool/gauge-timeframe_size.

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

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

Откройте файл /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;

Скопируйте конфигурационные файлы для настройки системы:

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

6. Подключите WAF‑ноду к облаку Валарм

Доступ к API

Перед подключением в облаку Валарм убедитесь, что виртуальная машина с WAF‑нодой имеет доступ к:

  • https://api.wallarm.com:444 для работы с EU‑облаком
  • https://api.wallarm.ru:444 для работы с RU‑облаком

В случае проблем убедитесь, что доступ не ограничен файерволом.

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

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

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

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

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

    /usr/share/wallarm-common/addnode
    
    /usr/share/wallarm-common/addnode -H api.wallarm.ru
    

    При необходимости укажите имя создаваемой ноды, используя опцию ‑n <имя ноды>.

  3. Введите email и пароль от вашего аккаунта Валарм.

Установка завершена

На этом установка завершена.

Далее необходимо настроить WAF‑ноду для фильтрации трафика Настройте правила проксирования и фильтрации.