Запуск Docker‑образа на основе NGINX¶
Обзор образа¶
WAF‑нода на основе NGINX может быть установлена в виде Docker‑контейнера. Контейнер является «толстым» и содержит все подсистемы WAF‑ноды.
Функциональность WAF‑ноды, установленной в виде Docker‑контейнера, полностью идентична функциональности других вариантов установки.
Если Валарм WAF уже развернут
Если вы разворачиваете образ Валарм WAF вместо существующего образа или дублируете установку, используйте версию существующего Валарм WAF или обновите версии всех образов до последней.
Чтобы получить текущую версию, выполните команду в контейнере:
apt list wallarm-node
- Если установлена версия
2.18.x
, используйте текущую инструкцию. - Если установлена версия
2.16.x
, используйте инструкцию для 2.16 или обновите все образы до последней версии. - Если установлена версия
2.14.x
или ниже, обновите все образы до последней версии.
Более подробная информация о поддержке версий доступна в политике версионирования WAF‑ноды.
Требования¶
-
Доступ к аккаунту с ролью Деплой или Администратор и отключенная двухфакторная аутентификация в Консоли управления Валарм для RU‑облака или EU‑облака
-
Доступ виртуальной машины к Валарм API по адресу
api.wallarm.com:444
для EU‑облака илиapi.wallarm.ru:444
для RU‑облака. Убедитесь, что доступ не ограничен файерволом
Варианты запуска контейнера¶
Параметры WAF‑ноды могут быть переданы в Docker‑контейнер следующими способами:
-
Через переменные окружения. В контейнер передаются базовые настройки WAF‑ноды, большинство доступных директив не могут быть переданы через переменные окружения.
-
В примонтированном конфигурационном файле. В контейнер могут быть переданы все доступные директивы WAF‑ноды.
Запуск контейнера с переменными окружения¶
Вы можете передать в контейнер следующие базовые настройки WAF через опцию -e
:
Переменная окружения | Описание | Обязательность |
---|---|---|
DEPLOY_USER | Email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. | Да |
DEPLOY_PASSWORD | Пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. | Да |
NGINX_BACKEND | Домен или IP‑адрес ресурса, который необходимо защитить с помощью WAF. | Да |
WALLARM_API_HOST | Адрес Валарм API:
api.wallarm.com . | Нет |
WALLARM_MODE | Режим работы WAF‑ноды:
monitoring . | Нет |
TARANTOOL_MEMORY_GB | Размер оперативной памяти для Tarantool в гигабайтах. Значение может быть целым или дробным (разделитель целой и дробной части — точка). По умолчанию: 0.2 гигабайта. | Нет |
WALLARM_ACL_ENABLE | Включает блокировку IP‑адресов с настройками по умолчанию. Принимает значения:
false .Чтобы включить блокировку IP‑адресов с другими настройками, необходимо определить соответствующие директивы NGINX и запустить контейнер с примонтированным конфигурационным файлом. Значения Начиная с образа WAF‑ноды 2.16.0-8, значения переменной | Нет |
DEPLOY_FORCE | Заменяет существующую WAF‑ноду на новую, если название WAF‑ноды соответствует идентификатору контейнера, который вы запускаете. Принимает значения:
false .WAF‑ноде Валарм присваивается название, соответствующее идентификатору контейнера. Данная опция полезна, если идентификаторы Docker‑контейнеров в вашей среде статичные и вы повторно запускаете Docker‑контейнер с WAF‑нодой Валарм (например, с новой версией образа). Если в этом случае значение переменной равно false , процесс создания WAF‑ноды завершится с ошибкой. | Нет |
Для запуска образа используйте команду:
docker run -d -e DEPLOY_USER='deploy@example.com' -e DEPLOY_PASSWORD='very_secret' -e NGINX_BACKEND='example.com' -e TARANTOOL_MEMORY_GB=16 -p 80:80 wallarm/node:2.18.1-1
docker run -d -e DEPLOY_USER='deploy@example.com' -e DEPLOY_PASSWORD='very_secret' -e NGINX_BACKEND='example.com' -e WALLARM_API_HOST='api.wallarm.ru' -e TARANTOOL_MEMORY_GB=16 -p 80:80 wallarm/node:2.18.1-1
Команда выполнит следующие действия:
-
Автоматически создаст WAF‑ноду в Облаке Валарм. Созданный элемент отобразится в Консоли управления → Ноды.
-
Создаст файл
default
с минимальными настройками NGINX в директории контейнера/etc/nginx/sites-enabled
. -
Создаст файлы с параметрами для доступа к Облаку Валарм в директории контейнера
/etc/wallarm
:node.yaml
с UUID WAF‑ноды и секретным ключомlicense.key
с лицензионным ключом Валарм
-
Защитит ресурс
http://NGINX_BACKEND:80
Запуск контейнера с примонтированным конфигурационным файлом¶
Вы можете примонтировать в контейнер готовый конфигурационный файл через опцию -v
. Файл должен содержать следующие настройки:
Открыть пример примонтированного файла с минимальными настройками
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;
# wallarm_acl default;
location / {
proxy_pass http://example.com;
include proxy_params;
}
}
Для запуска образа:
-
Передайте в контейнер обязательные переменные окружения через опцию
-e
:Переменная окружения Описание Обязательность 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‑ноды завершится с ошибкой.Нет -
Примонтируйте директорию с файлом
default
в директорию контейнера/etc/nginx/sites-enabled
через опцию-v
.docker run -d -e DEPLOY_USER='deploy@example.com' -e DEPLOY_PASSWORD='very_secret' -v /configs/default:/etc/nginx/sites-enabled/default -p 80:80 wallarm/node:2.18.1-1
docker run -d -e DEPLOY_USER='deploy@example.com' -e DEPLOY_PASSWORD='very_secret' -e WALLARM_API_HOST='api.wallarm.ru' -v /configs/default:/etc/nginx/sites-enabled/default -p 80:80 wallarm/node:2.18.1-1
Команда выполнит следующие действия:
-
Автоматически создаст WAF‑ноду в Облаке Валарм. Созданный элемент отобразится в Консоли управления → Ноды.
-
Примонтирует файл
default
в директорию контейнера/etc/nginx/sites-enabled
. -
Создаст файлы с параметрами для доступа к Облаку Валарм в директории контейнера
/etc/wallarm
:node.yaml
с UUID WAF‑ноды и секретным ключомlicense.key
с лицензионным ключом Валарм
-
Защитит ресурс
http://NGINX_BACKEND:80
Монтирование других конфигурационных файлов
Директории контейнера, которые использует NGINX:
/etc/nginx/conf.d
— общие настройки/etc/nginx/sites-enabled
— настройки виртуальных хостов/var/www/html
— статические файлы
Вы можете примонтировать необходимые конфигурационные файлы в перечисленные директории. Директивы WAF‑ноды необходимо описать в файле контейнера /etc/nginx/sites-enabled/default
.
Настройка логирования¶
Логирование по умолчанию включено. Логи пишутся в следующие директории:
-
/var/log/nginx
— логи NGINX -
/var/log/wallarm
— логи подсистем Валарм WAF
Для настройки расширенного логирования используйте инструкцию.
По умолчанию логи ротируются раз в сутки. Изменение параметров ротации через переменные окружения не предусмотрено. Настройка ротации происходит через конфигурационные файлы в /etc/logrotate.d/
.
Настройка мониторинга¶
Внутри контейнера установлены 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¶
-
Отправьте тестовый запрос с атаками SQLI и XSS на адрес защищенного ресурса:
curl http://localhost/?id='or+1=1--a-<script>prompt(1)</script>'
Если WAF‑нода работает в режиме
block
, запрос будет заблокирован с ответом403 Forbidden
. -
Перейдите в Консоль управления Валарм → секция События для EU‑облака или для RU‑облака и убедитесь, что атаки появились в списке.
Частые настройки¶
Примонтированный конфигурационный файл должен описывать настройки WAF‑ноды через доступные директивы. Ниже приведен набор настроек, которые часто применяются к WAF‑ноде с помощью директив:
-
Добавление адресов сканера Валарм в белый список для режима фильтрации
block
-
Ограничение времени обработки единичного запроса в директиве
wallarm_process_time_limit
-
Ограничение времени ожидания ответа сервера в директиве NGINX
proxy_read_timeout
-
Ограничение максимального размера запроса в директиве NGINX
client_max_body_size