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

Деплой Docker‑образа ноды Вебмониторэкс в Яндекс.Облаке

Данная инструкция содержит краткое руководство по деплою Docker‑образа ноды Вебмониторэкс (NGINX) с помощью облачной платформы Яндекс.Облако. Для деплоя Docker-образа используется сервис Yandex Container Solution.

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

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

Требования

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

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

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

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

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

Для деплоя контейнера с настройками ноды, переданными только в переменных окружения, вы можете использовать консоль управления Яндекс.Облака кластером или CLI. В данной инструкции используется CLI.

  1. Перейдите в Консоль управления → Ноды и создайте ноду.

    Создание ноды Вебмониторэкс

  2. Скопируйте сгенерированный токен.

  3. Запишите токен ноды Вебмониторэкс в локальную переменную окружения, чтобы передать чувствительные данные в Яндекс.Облако кластер более безопасным образом:

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  4. Создайте инстанс с запущенным Docker-контейнером с помощью команды yc compute instance create-with-container:

    yc compute instance create-with-container \
        --name <INSTANCE_NAME> \
        --zone=<DEPLOYMENT_ZONE> \
        --public-ip \
        --container-image=wmx-public.gitlab.yandexcloud.net:5050/wmx-public/container-images/node:4.4.0-1 \
        --container-env=WALLARM_API_TOKEN=${WALLARM_API_TOKEN},NGINX_BACKEND=<HOST_TO_PROTECT_WITH_WALLARM>,WALLARM_API_HOST=api.wallarm.ru
    
    • --name: название инстанса, например: wallarm-node.
    • --zone: зона, в которой будет запущен инстанс.
    • --public-ip: флаг, указывающий, что необходимо создать публичный IP-адрес для инстанса, чтобы он принимал запросы из внешних ресурсов.
    • --container-image: ссылка на Docker-образ с нодой Вебмониторэкс.
    • --container-env: переменные окружения с настройками ноды Вебмониторэкс из таблицы ниже. Не рекомендуется передавать значение переменной WALLARM_API_TOKEN в явном виде.

      Переменная окружения Описание Обязательная?
      WALLARM_API_TOKEN Переменная, в которую может быть передано значение токена Ноды Вебмониторэкс или API-токена с ролью Деплой.

      Предыдущие переменные для настройки доступа к Вычислительному кластеру Вебмониторэкс

      Для деплоя ноды версии 3.6 и ниже использовались переменные DEPLOY_USER и DEPLOY_PASSWORD. Начиная с версии 4.0, рекомендуется использовать WALLARM_API_TOKEN. Подробнее о миграции на новую версию

      Да
      NGINX_BACKEND Домен или IP‑адрес ресурса, который необходимо защитить с помощью Вебмониторэкс. Да
      WALLARM_API_HOST Адрес Вебмониторэкс API. Должен быть api.wallarm.ru.
      По умолчанию: api.wallarm.com.
      Нет
      WALLARM_MODE Режим работы ноды Вебмониторэкс:
      • block, чтобы блокировать вредоносные запросы
      • safe_blocking, чтобы блокировать только те вредоносные запросы, которые отправлены с IP‑адресов из серого списка
      • monitoring, чтобы анализировать, но не блокировать запросы
      • off, чтобы не обрабатывать входящий трафик
      По умолчанию: monitoring.
      Подробное описание режимов работы
      Нет
      WALLARM_APPLICATION Уникальный идентификатор для обозначения защищенного приложения в Вычислительном кластере Вебмониторэкс. Значение может быть любым целым положительным числом, кроме 0.

      По умолчанию (если переменная не указана явно): -1 (приложение default в Консоли управления → Настройки → Приложения).

      Подробнее о настройке приложений →
      Нет
      TARANTOOL_MEMORY_GB Размер оперативной памяти для Tarantool в гигабайтах. Значение может быть целым или дробным (разделитель целой и дробной части — точка). По умолчанию: 0.2 гигабайта. Нет
      NGINX_PORT Порт, который будет использовать NGINX внутри Docker‑контейнера.

      Начиная с Docker‑образа версии 4.0.2-1, порт сервиса wallarm-status, от которого collectd получает данные, обновляется автоматически в соответствии со значением NGINX_PORT.

      По умолчанию (если переменная не указана явно): 80.

      Синтаксис: -e NGINX_PORT='443'.
      Нет
      DISABLE_IPV6 Если в переменной передано любое значение, кроме пустого, из конфигурационного файла NGINX будет удалена строка listen [::]:80 default_server ipv6only=on; и веб-сервер NGINX перестанет принимать IPv6-соединения.

      Если переменная не передана явно или в ней передано пустое значение "", NGINX принимает и IPv6- и IPv4-соединения.
      Нет
    • Описание всех параметров команды yc compute instance create-with-container приведено в документации Яндекс.Облака.

  5. Перейдите в консоль управления Яндекс.Облаком → Compute CloudVirtual machines и убедитесь, что инстанс появился в списке.

  6. Протестируйте работу ноды Вебмониторэкс.

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

Для деплоя контейнера с настройками ноды Вебмониторэкс, переданными через переменные окружения и примонтированный конфигурационный файл, необходимо создать инстанс с конфигурационным файлом и запустить Docker-контейнер в этом же инстансе. Для этого вы можете использовать консоль управления Яндекс.Облаком или CLI. В данной инструкции используется консоль управления.

  1. Перейдите в Консоль управления → Ноды и создайте ноду.

    Создание ноды Вебмониторэкс

  2. Скопируйте сгенерированный токен.

  3. Создайте инстанс на основе образа любой операционной системы по инструкции. Пример настроек инстанса:

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

  4. Подключитесь к инстансу по SSH, используя инструкцию Яндекс.Облака.

  5. Установите в инстансе пакеты Docker по инструкции для подходящей ОС.

  6. Запишите токен ноды Вебмониторэкс в локальную переменную окружения:

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  7. Создайте в инстансе директорию с конфигурационным файлом default с настройками ноды Вебмониторэкс (например, директорию configs). Пример файла с минимальными настройками:

    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_application 1;
    
        location / {
                proxy_pass http://example.com;
                include proxy_params;
        }
    }
    

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

  8. Запустите Docker-контейнер с нодой Вебмониторэкс с примонтированным конфигурационным файлом и переменными окружения.

    docker run -d -e WALLARM_API_TOKEN=${WALLARM_API_TOKEN} -e WALLARM_API_HOST='api.wallarm.ru' -v <INSTANCE_PATH_TO_CONFIG>:<DIRECTORY_FOR_MOUNTING> -p 80:80 wmx-public.gitlab.yandexcloud.net:5050/wmx-public/container-images/node:4.4.0-1
    
    • <INSTANCE_PATH_TO_CONFIG>: путь до конфигурационного файла, созданного на предыдущем шаге. Например: configs.
    • <DIRECTORY_FOR_MOUNTING>: директория контейнера, в которую монтируется конфигурационный файл. Конфигурационный файл может быть примонтирован в директории контейнера, которые использует NGINX:

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

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

    • -p: порт, через который нода принимает запросы. Значение должно совпадать с портом инстанса.

    • -e: переменные окружения из таблицы ниже.

      Переменная окружения Описание Обязательная?
      WALLARM_API_TOKEN Переменная, в которую может быть передано значение токена Ноды Вебмониторэкс или API-токена с ролью Деплой.

      Предыдущие переменные для настройки доступа к Вычислительному кластеру Вебмониторэкс

      Для деплоя ноды версии 3.6 и ниже использовались переменные DEPLOY_USER и DEPLOY_PASSWORD. Начиная с версии 4.0, рекомендуется использовать WALLARM_API_TOKEN. Подробнее о миграции на новую версию

      Да
      WALLARM_API_HOST Адрес Вебмониторэкс API. Должен быть api.wallarm.ru.
      По умолчанию: api.wallarm.com.
      Нет
  9. Протестируйте работу ноды Вебмониторэкс.

Тестирование работы ноды Вебмониторэкс

  1. Перейдите в консоль управления Яндекс.Облака → Compute CloudVirtual machines и скопируйте IP-адрес инстанса из столбца Public IPv4.

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

    Если IP-адрес отсутствует, убедитесь, что инстанс находится в статусе Running.

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

    curl http://<COPIED_IP>/etc/passwd
    
  3. Перейдите в Консоль управления Вебмониторэкс → секция События и убедитесь, что атака появилась в списке.

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

Чтобы посмотреть сообщения об ошибках запуска контейнера, необходимо подключиться к инстансу по SSH и проверить логи контейнера. Если инстанс недоступен, убедитесь, что в контейнер переданы корректные значения всех обязательных параметров ноды.