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

Установка с использованием Docker (образ на основе NGINX)

WAF‑нода на основе NGINX может быть установлена в виде Docker‑контейнера. Контейнер является «толстым» и содержит все подсистемы WAF‑ноды.

Функциональность WAF‑ноды, установленной в виде Docker‑контейнера, полностью идентична функциональности других вариантов установки.

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

  1. Развернуть WAF‑ноду.

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

  3. Настроить модуль NGINX-Wallarm.

  4. Настроить логирование.

  5. Настроить мониторинг.

Известные ограничения

  • Блокировка по IP‑адресу не поддерживается для WAF‑ноды версии 2.12 и ниже.
  • Изменение большинства директив Валарм недоступно через переменные окружения — директивы необходимо прописывать в конфигурационных файлах внутри контейнера.

1. Разверните WAF‑ноду

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

docker run -d -e DEPLOY_USER="deploy@example.com" -e DEPLOY_PASSWORD="very_secret" -e NGINX_BACKEND=example.com -e TARANTOOL_MEMORY_GB=memvalue -p 80:80 wallarm/node:2.14
docker run -d -e WALLARM_API_HOST=api.wallarm.ru -e DEPLOY_USER="deploy@example.com" -e DEPLOY_PASSWORD="very_secret" -e NGINX_BACKEND=example.com -e TARANTOOL_MEMORY_GB=memvalue -p 80:80 wallarm/node:2.14

Где:

  • example.com — защищаемый ресурс

  • deploy@example.com — email от вашего аккаунта в EU‑облаке или в RU‑облаке

  • very_secret — пароль от вашего аккаунта в EU‑облаке или в RU‑облаке

  • memvalue – размер выделяемой памяти для Tarantool

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

  • На порте 80 будет доступен защищаемый ресурс.

  • В облаке будет зарегистрирована новая WAF‑нода. Нода будет отображаться в соответствующем разделе веб‑интерфейса EU‑облака или RU‑облака.

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

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

WAF‑нода взаимодействует с облаком, находящемся на удаленном сервере.

Варианты подключения WAF‑ноды к облаку:

  • Автоматическая регистрация.

  • Использование заранее известных реквизитов.

  • Использование готового конфигурационного файла.

Автоматическая регистрация

Передайте email и пароль от аккаунта в EU‑облаке или RU‑облаке в переменных окружения DEPLOY_USER, DEPLOY_PASSWORD.

В результате при первом запуске контейнер автоматически зарегистрируется в облаке.

Если контейнер с таким именем уже существует, команда завершится с ошибкой.

Чтобы избежать этого, используйте переменную окружения DEPLOY_FORCE=true.

docker run -d -e DEPLOY_USER="deploy@example.com" -e DEPLOY_PASSWORD="very_secret" -e NGINX_BACKEND="IP address or FQDN" wallarm/node:2.14
docker run -d -e WALLARM_API_HOST=api.wallarm.ru -e DEPLOY_USER="deploy@example.com" -e DEPLOY_PASSWORD="very_secret" -e NGINX_BACKEND="IP address or FQDN" wallarm/node:2.14

В случае успешной регистрации в директорию контейнера /etc/wallarm будут помещены файл лицензии license.key, файл с реквизитами доступа WAF‑ноды к облаку node.yaml и другие служебные файлы.

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

  • Значения uuid и secret (содержатся в файле /etc/wallarm/node.yaml).

  • Лицензионный ключ Валарм (содержится в файле /etc/wallarm/license.key).

Для подключения к облаку уже зарегистрированной WAF‑ноды, передайте в ее контейнер:

  • либо значения uuid и secret через переменные среды окружения и файл лицензии license.key;

  • либо файлы node.yaml и license.key.

Использование заранее известных реквизитов

Передайте в контейнер с WAF‑нодой:

  • значения uuid и secret через соответствующие переменные среды окружения NODE_UUID и NODE_SECRET;

  • файл лицензии license.key с помощью монтирования директории.

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

docker run -d -e "NODE_UUID=00000000-0000-0000-0000-000000000000" -e NODE_SECRET="0000000000000000000000000000000000000000000000000000000000000000" -v /path/to/license.key:/etc/wallarm/license.key -e NGINX_BACKEND=192.168.xxx.1 wallarm/node:2.14
docker run -d -e WALLARM_API_HOST=api.wallarm.ru -e "NODE_UUID=00000000-0000-0000-0000-000000000000" -e NODE_SECRET="0000000000000000000000000000000000000000000000000000000000000000" -v /path/to/license.key:/etc/wallarm/license.key -e NGINX_BACKEND=192.168.xxx.1 wallarm/node:2.14

Использование готового конфигурационного файла

Передайте в контейнер с WAF‑нодой с помощью монтирования директорий:

  • файл с реквизитами доступа WAF‑ноды к облаку node.yaml;

  • файл лицензии license.key.

docker run -d -v /path/to/node.yaml:/etc/wallarm/node.yaml -v /path/to/license.key:/etc/wallarm/license.key -e NGINX_BACKEND=192.168.xxx.1 wallarm/node:2.14

3. Настройте модуль NGINX-Wallarm

Настройка WAF‑ноды осуществляется через конфигурационный файл NGINX.

Контейнер позволяет использовать упрощенный режим настройки через переменные окружения, который включается при передаче переменой окружения NGINX_BACKEND.

Упрощенный режим

  • NGINX_BACKEND — адрес бэкенда, на который необходимо передавать все входящие запросы. Если адрес не содержит префикса http:// или https://, то по умолчанию будет использован http://. Подробнее в документации на proxy_pass.

    Переменную NGINX_BACKEND не нужно прописывать, если вы не нуждаетесь в упрощенной настройке и используете собственные файлы конфигурации.

    Без прописанной переменной NGINX_BACKEND Валарм не будет включен автоматически. Для включения вам необходимо прописать директиву wallarm_mode monitoring;(см. подробнее о директиве wallarm_mode).

  • WALLARM_MODE: режим работы модуля NGINX-Wallarm (см. подробнее о директиве wallarm_mode).

Конфигурационные файлы

Директории, используемые NGINX:

  • /etc/nginx-wallarm/conf.d — общие настройки.

  • /etc/nginx-wallarm/sites-enabled — настройки виртуальных хостов.

  • /var/www/html — статические файлы.

4. Настройте логирование

Логирование по умолчанию включено.

Логи пишутся в следующие директории:

  • /var/log/nginx-wallarm/ — логи NGINX.

  • /var/log/wallarm/ — логи подсистем Валарм.

Настройте расширенное логирование

Настройте логирование переменных WAF‑ноды с помощью NGINX. Это позволит провести быструю диагностику состояния WAF‑ноды в случае необходимости, основываясь на содержимом лог‑файла NGINX.

Настройте ротацию логов

По умолчанию логи ротируются раз в сутки. Изменение параметров ротации через переменные окружения не предусмотрено. Настройка ротации происходит через конфигурационные файлы в /etc/logrotate.d/.

5. Настройте мониторинг

Внутри контейнера установлены Nagios‑совместимые скрипты для мониторинга WAF‑ноды. Подробнее в разделе Мониторинг WAF‑ноды.

Пример вызова скриптов:

docker exec -it wallarm-node /usr/lib/nagios-plugins/check_wallarm_tarantool_timeframe -w 1800 -c 900
docker exec -it wallarm-node /usr/lib/nagios-plugins/check_wallarm_export_delay -w 120 -c 300

Развертывание завершено

На этом развертывание завершено.

Проверьте, что WAF‑нода работает и пропускает через себя трафик. Подробнее в Проверка работоспособности WAF‑ноды.

Настройки по умолчанию

Только что установленная WAF‑нода будет находиться в режиме блокировки (см. описание директивы wallarm_mode) в соответствии с настройками по умолчанию.

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

Дополнительные настройки

После установки WAF‑нода может потребовать дополнительной настройки.

Далее приводится несколько типовых настроек, которые вы можете выполнить, если это требуется.

Для получения информации о других доступных настройках, обратитесь к разделу «Настройка» руководства администратора.

Настройка отображения реального IP‑адреса клиента

Если WAF‑нода развернута за прокси‑сервером или балансировщиком нагрузки, то при такой схеме развертывания без дополнительной настройки адрес источника на WAF‑ноде может совпадать с одним из IP‑адресов прокси‑сервера или балансировщика нагрузки, а не с IP‑адресом клиента.

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

Добавление адресов сканера Валарм в белый список

Сканер Валарм позволяет сканировать ресурсы вашей компании на уязвимости. Сканирование происходит с IP‑адресов из этих списков:

Если вы используете сканер Валарм, то для его корректной работы нужно настроить на средствах защиты вашего периметра (файерволы, системы предотвращения вторжений и т. д.) белые списки, содержащие в себе IP‑адреса сканера.

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

Чтобы сканировать такие ресурсы, добавьте адреса сканера Валарм в белый список этой WAF‑ноды.

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

Используйте директиву Валарм wallarm_process_time_limit, чтобы задать ограничение времени обработки единичного запроса WAF‑нодой.

Если запрос обрабатывается за большее время, чем указано в директиве, то в лог‑файл заносится информация об ошибке, а запрос помечается как атака overlimit_res.

Ограничение времени ожидания ответа сервера

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

Если за это время сервер ничего не передаст, то соединение будет закрыто.

Ограничение максимального размера запроса

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

В случае превышения этого ограничения NGINX вернет клиенту ответ с кодом 413 (Payload Too Large, также известный как Request Entity Too Large).

Блокировка запросов по IP‑адресам

Включение блокировки запросов по IP‑адресу предоставляет следующие возможности:

Чтобы включить блокировку по IP‑адресам, выберите способ настройки на странице Способы блокировки по IP‑адресам и следуйте инструкциям.