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

Деплой Docker‑образа WAF‑ноды в Azure

Данная инструкция содержит краткое руководство по деплою Docker‑образа WAF‑ноды (NGINX) с помощью облачной платформы Microsoft Azure. Для деплоя Docker-образа используется служба Azure Экземпляры контейнеров.

Ограничение инструкции

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

Требования

  • Действующая подписка Azure

  • Установленный Azure CLI

  • Доступ к аккаунту с ролью Деплой или Администратор и отключенная двухфакторная аутентификация в Консоли управления Валарм для RU‑облака или EU‑облака

Способы конфигурации Docker-контейнера с WAF-нодой

При деплое необходимо передать в Docker‑контейнер параметры WAF‑ноды одним из способов:

  • Через доступные переменные окружения. С помощью переменных окружения задаются базовые настройки WAF-ноды. Большинство доступных директив не могут быть переданы через переменные.

  • В примонтированном конфигурационном файле. С помощью конфигурационного файла можно выполнить полную настройку WAF-ноды, используя любые доступные директивы. При этом способе конфигурации параметры для подключения к Облаку Валарм передаются в переменных окружения.

Деплой контейнера с настройкой WAF-ноды через переменные окружения

Для деплоя контейнера с настройками WAF-ноды, переданными только в переменных окружения, вы можете использовать следующие инструменты:

Для деплоя контейнера с помощью Azure CLI:

  1. Выполните вход в Azure CLI с помощью команды az login:

    az login
    
  2. Создайте группу ресурсов с помощью команды az group create. Например, группа myResourceGroup в Восточном регионе США:

    az group create --name myResourceGroup --location eastus
    
  3. Запишите данные от аккаунта Валарм в локальные переменные окружения, чтобы передать чувствительные данные в Microsoft Azure более безопасным образом:

    export DEPLOY_USER='<DEPLOY_USER>'
    export DEPLOY_PASSWORD='<DEPLOY_PASSWORD>'
    
    • <DEPLOY_USER>: email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
    • <DEPLOY_PASSWORD>: пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
  4. Создайте ресурс Azure из Docker-контейнера с WAF-нодой с помощью команды az container create:

    az container create \
       --resource-group myResourceGroup \
       --name waf-node \
       --dns-name-label wallarm-waf \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:3.2.1-1 \
       --environment-variables DEPLOY_USER=${DEPLOY_USER} DEPLOY_PASSWORD=${DEPLOY_PASSWORD} NGINX_BACKEND='example.com'
    
    az container create \
       --resource-group myResourceGroup \
       --name waf-node \
       --dns-name-label wallarm-waf \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:3.2.1-1 \
       --environment-variables DEPLOY_USER=${DEPLOY_USER} DEPLOY_PASSWORD=${DEPLOY_PASSWORD} NGINX_BACKEND='example.com' WALLARM_API_HOST='api.wallarm.ru'
    
    • --resource-group: название группы ресурсов, созданной на шаге 2
    • --name: название контейнера
    • --dns-name-label: метка DNS-имени для контейнера
    • --ports: порт, на котором будет доступен контейнер
    • --image: название Docker-образа с WAF-нодой
    • --environment-variables: переменные окружения с настройками WAF-ноды из таблицы ниже

      Переменная окружения Описание Обязательная?
      DEPLOY_USER Email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      DEPLOY_PASSWORD Пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      NGINX_BACKEND Домен или IP‑адрес ресурса, который необходимо защитить с помощью WAF. Да
      WALLARM_API_HOST Адрес Валарм API:
      • api.wallarm.com для EU‑облака
      • api.wallarm.ru для RU‑облака
      По умолчанию: api.wallarm.com.
      Нет
      WALLARM_MODE Режим работы WAF‑ноды:
      • block, чтобы блокировать вредоносные запросы
      • safe_blocking, чтобы блокировать только те вредоносные запросы, которые отправлены с IP‑адресов из серого списка
      • monitoring, чтобы анализировать, но не блокировать запросы
      • off, чтобы не обрабатывать входящий трафик
      По умолчанию: monitoring.
      Подробное описание режимов работы
      Нет
      TARANTOOL_MEMORY_GB Размер оперативной памяти для Tarantool в гигабайтах. Значение может быть целым или дробным (разделитель целой и дробной части — точка). По умолчанию: 0.2 гигабайта. Нет
      DEPLOY_FORCE Заменяет существующую WAF‑ноду на новую, если название WAF‑ноды соответствует идентификатору контейнера, который вы запускаете. Принимает значения:
      • true, чтобы заменить WAF‑ноду
      • false, чтобы отключить замену WAF‑ноды
      По умолчанию (если переменная не указана явно): false.
      WAF‑ноде Валарм присваивается название, соответствующее идентификатору контейнера. Данная опция полезна, если идентификаторы Docker‑контейнеров в вашей среде статичные и вы повторно запускаете Docker‑контейнер с WAF‑нодой Валарм (например, с новой версией образа). Если в этом случае значение переменной равно false, процесс создания WAF‑ноды завершится с ошибкой.
      Нет
  5. Перейдите на портал Azure и убедитесь, что созданный ресурс отображается в списке ресурсов.

  6. Протестируйте работу WAF-ноды.

Деплой контейнера с настройкой WAF-ноды через примонтированный файл

Для деплоя контейнера с настройками WAF-ноды, переданными через переменные окружения и примонтированный конфигурационный файл, может использоваться только Azure CLI.

Чтобы запустить контейнер с переменными окружения и примонтированным конфигурационным файлом:

  1. Выполните вход в Azure CLI с помощью команды az login:

    az login
    
  2. Создайте группу ресурсов с помощью команды az group create. Например, группа myResourceGroup в Восточном регионе США:

    az group create --name myResourceGroup --location eastus
    
  3. Создайте локально конфигурационный файл с настройками WAF-ноды. Пример файла с минимальными настройками:

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        #listen 443 ssl;
    
        server_name localhost;
    
        #ssl_certificate cert.pem;
        #ssl_certificate_key cert.key;
    
        root /usr/share/nginx/html;
    
        index index.html index.htm;
    
        wallarm_mode monitoring;
        # wallarm_instance 1;
    
        location / {
                proxy_pass http://example.com;
                include proxy_params;
        }
    }
    

    Набор директив, которые могут быть указаны в конфигурационном файле →

  4. Расположите конфигурационный файл одним из способов, который подходит для подключения томов данных в Azure. Все способы описаны в разделе Подключение томов данных в документации Azure.

    В данной инструкции конфигурационный файл монтируется из репозитория Git.

  5. Запишите данные от аккаунта Валарм в локальные переменные окружения, чтобы передать чувствительные данные в Microsoft Azure более безопасным образом:

    export DEPLOY_USER='<DEPLOY_USER>'
    export DEPLOY_PASSWORD='<DEPLOY_PASSWORD>'
    
    • <DEPLOY_USER>: email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
    • <DEPLOY_PASSWORD>: пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
  6. Создайте ресурс Azure из Docker-контейнера с WAF-нодой с помощью команды az container create. Например:

    az container create \
       --resource-group myResourceGroup \
       --name waf-node \
       --dns-name-label wallarm-waf \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:3.2.1-1 \
       --gitrepo-url <URL_OF_GITREPO> \
       --gitrepo-mount-path /etc/nginx/sites-enabled \
       --environment-variables DEPLOY_USER=${DEPLOY_USER} DEPLOY_PASSWORD=${DEPLOY_PASSWORD}
    
    az container create \
       --resource-group myResourceGroup \
       --name waf-node \
       --dns-name-label wallarm-waf \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:3.2.1-1 \
       --gitrepo-url <URL_OF_GITREPO> \
       --gitrepo-mount-path /etc/nginx/sites-enabled \
       --environment-variables DEPLOY_USER=${DEPLOY_USER} DEPLOY_PASSWORD=${DEPLOY_PASSWORD} WALLARM_API_HOST='api.wallarm.ru'
    
    • --resource-group: название группы ресурсов, созданной на шаге 2
    • --name: название контейнера
    • --dns-name-label: метка DNS-имени для контейнера
    • --ports: порт, на котором будет доступен контейнер
    • --image: название Docker-образа с WAF-нодой
    • --gitrepo-url: URL репозитория Git, в котором хранится конфигурационный файл. Если файл хранится в корне репозитория, достаточно передать только этот параметр. Если файл хранится в директории репозитория, необходимо дополнительно передать параметр --gitrepo-dir с путем до директории, например: --gitrepo-dir ./dir1.
    • --gitrepo-mount-path: директория контейнера, в которую монтируется конфигурационный файл. Конфигурационный файл может быть примонтирован в директории контейнера, которые использует NGINX:

      • /etc/nginx/conf.d — общие настройки
      • /etc/nginx/sites-enabled — настройки виртуальных хостов
      • /var/www/html — статические файлы

      Директивы WAF‑ноды описываются в файле контейнера /etc/nginx/sites-enabled/default.

    • --environment-variables: переменные окружения с параметрами для подключения к Облаку Валарм из таблицы ниже

      Переменная окружения Описание Обязательная?
      DEPLOY_USER Email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      DEPLOY_PASSWORD Пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      WALLARM_API_HOST Адрес Валарм API:
      • api.wallarm.com для EU‑облака
      • api.wallarm.ru для RU‑облака
      По умолчанию: api.wallarm.com.
      Нет
      DEPLOY_FORCE Заменяет существующую WAF‑ноду на новую, если название WAF‑ноды соответствует идентификатору контейнера, который вы запускаете. Принимает значения:
      • true, чтобы заменить WAF‑ноду
      • false, чтобы отключить замену WAF‑ноды
      По умолчанию (если переменная не указана явно): false.
      WAF‑ноде Валарм присваивается название, соответствующее идентификатору контейнера. Данная опция полезна, если идентификаторы Docker‑контейнеров в вашей среде статичные и вы повторно запускаете Docker‑контейнер с WAF‑нодой Валарм (например, с новой версией образа). Если в этом случае значение переменной равно false, процесс создания WAF‑ноды завершится с ошибкой.
      Нет
  7. Перейдите на портал Azure и убедитесь, что созданный ресурс отображается в списке ресурсов.

  8. Протестируйте работу WAF-ноды.

Тестирование работы WAF-ноды

  1. На портале Azure перейдите к ресурсу с запущенной WAF-нодой и скопируйте Полное доменное имя.

    Настройка экземпляра контейнера

    Если доменное имя отсутствует, убедитесь, что контейнер находится в статусе Выполняется.

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

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

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

Сообщения об ошибках запуска контейнера отображаются в информации о ресурсе на вкладке КонтейнерыЖурналы на портале Azure. Если ресурс недоступен, убедитесь, что в контейнер переданы корректные значения всех обязательных параметров WAF-ноды.