Тонкая настройка Вебмониторэкс Ingress Controller¶
Официальная документация NGINX Ingress Controller
Настройка Вебмониторэкс Ingress Controller незначительно отличается от настройки NGINX Ingress Controller, о которой рассказано в официальной документации. При работе с Вебмониторэкс доступны все возможности настройки оригинального NGINX Ingress Controller.
Дополнительные настройки Helm Chart¶
Настройка выполняется в файле values.yaml
. По умолчанию файл имеет следующий вид:
controller:
wallarm:
enabled: false
apiHost: api.wallarm.com
apiPort: 444
apiSSL: true
token: ""
tarantool:
kind: Deployment
service:
annotations: {}
replicaCount: 1
arena: "0.2"
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
metrics:
enabled: false
service:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /wallarm-metrics
prometheus.io/port: "18080"
## List of IP addresses at which the stats-exporter service is available
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
servicePort: 9913
type: ClusterIP
synccloud:
resources: {}
collectd:
resources: {}
acl:
enabled: false
resources: {}
Ниже приведено описание основных параметров, которые вы можете настроить. Остальные параметры используют значение по умолчанию или редко изменяются, их описание доступно по ссылке.
wallarm.enabled¶
Позволяет включать и выключать функциональность Вебмониторэкс.
Значение по умолчанию: false
wallarm.apiHost¶
Конечная точка API. Параметр должен иметь значение api.wallarm.ru
.
Значение по умолчанию: api.wallarm.com
wallarm.token¶
Токен Cloud Node, созданной в Личном кабинете. Необходим для доступа ноды к Вебмониторэкс API.
Значение по умолчанию: нет
wallarm.tarantool.replicaCount¶
Количество запускаемых pod'ов постаналитики. Постаналитика отвечает за определение поведенческих атак.
Значение по умолчанию: 1
wallarm.tarantool.arena¶
Объем памяти, выделенной для постаналитики. Рекомендуется выставлять значение, достаточное для хранения запросов за последние 5-15 минут.
Значение по умолчанию: 0.2
wallarm.metrics.enabled¶
Позволяет включать и выключать сбор метрик о работе Вебмониторэкс. Если в Kubernetes кластере установлен Prometheus helm chart, то дополнительных настроек не требуется, необходимо только включить сбор метрик.
Значение по умолчанию: false
Глобальные настройки контроллера¶
Применяются при помощи ConfigMap.
Поддерживаются следующие дополнительные параметры кроме стандартных:
-
enable-wallarm
— включает обработку запросов с помощью Вебмониторэкс -
enable-wallarm-acl
— включает блокировку запросов по IP‑адресам, указанным в Личном кабинете
Аннотации Ingress¶
Используются для настройки параметров обработки отдельных Ingress'ов.
Кроме стандартных аннотаций поддерживаются следующие дополнительные:
-
nginx.ingress.kubernetes.io/wallarm-mode, default: off
Применение аннотаций к Ingress¶
Чтобы применить настройки к вашему Ingress, используйте следующую команду:
kubectl annotate --overwrite ingress YOUR_INGRESS_NAME ANNOTATION_NAME=VALUE
-
YOUR_INGRESS_NAME
— название вашего Ingress, -
ANNOTATION_NAME
— название аннотации из списка выше, -
VALUE
— значение для аннотации из списка выше.
Примеры аннотаций¶
Включение блокировки по IP‑адресам¶
Для включения блокировки по IP‑адресам создайте их список в Консоли управления Вебмониторэкс и выполните следующую команду:
kubectl annotate --overwrite ingress YOUR_INGRESS_NAME nginx.ingress.kubernetes.io/wallarm-acl=on
Настройка страницы блокировки и кода ошибки¶
В зависимости от причины и способа блокировки запроса, для настройки страницы блокировки и кода ошибки используются разные аннотации:
-
nginx.ingress.kubernetes.io/wallarm-block-page
, если запрос содержит признаки атаки и WAF‑нода работает в режиме блокировки -
nginx.ingress.kubernetes.io/wallarm-acl-block-page
, если запрос отправлен с заблокированного IP‑адреса
Например, чтобы в ответ на заблокированный запрос вернуть стандартную страницу блокировки Вебмониторэкс и код ошибки 445:
kubectl annotate ingress <YOUR_INGRESS_NAME> nginx.ingress.kubernetes.io/wallarm-block-page='&/usr/share/nginx/html/wallarm_blocked.html response_code=445'
kubectl annotate ingress <YOUR_INGRESS_NAME> nginx.ingress.kubernetes.io/wallarm-acl-block-page='&/usr/share/nginx/html/wallarm_blocked.html response_code=445'
Подробнее о способах настройки страницы блокировки и кода ошибки →
Передача пути до страницы блокировки и кода ошибки через запятую
Чтобы разделить путь до страницы блокировки и код ошибки в значении для аннотации Ingress, вы можете использовать запятую вместо пробела. Например:
kubectl annotate ingress <YOUR_INGRESS_NAME> nginx.ingress.kubernetes.io/wallarm-block-page='&/usr/share/nginx/html/wallarm_blocked.html,response_code=445'
kubectl annotate ingress <YOUR_INGRESS_NAME> nginx.ingress.kubernetes.io/wallarm-acl-block-page='&/usr/share/nginx/html/wallarm_blocked.html,response_code=445'
Включение анализа атак с помощью библиотеки libdetection¶
Библиотека libdetection выполняет дополнительную валидацию атак, обнаруженных с помощью библиотеки libproton. Такой подход реализует двойное обнаружение атак и снижает количество ложных срабатываний.
Для парсинга тела запросов, необходимо также включить буферизацию тела запроса клиента (proxy_request_buffering on
).
Вы можете использовать следующие способы включения анализа атак с libdetection:
-
Применить следующую аннотацию
nginx.ingress.kubernetes.io/server-snippet
к Ingress:kubectl annotate --overwrite ingress <YOUR_INGRESS_NAME> nginx.ingress.kubernetes.io/server-snippet="wallarm_enable_libdetection on; proxy_request_buffering on;"
-
После клонирования репозитория с Helm‑чартом Вебмониторэкс, открыть файл values.yaml клонированного репозитория и добавить в объект
config
следующий параметр:config: { server-snippet: 'wallarm_enable_libdetection on; proxy_request_buffering on;' }