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

Тонкая настройка Вебмониторэкс 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.

Поддерживаются следующие дополнительные параметры кроме стандартных:

Аннотации Ingress

Используются для настройки параметров обработки отдельных Ingress'ов.

Кроме стандартных аннотаций поддерживаются следующие дополнительные:

Применение аннотаций к 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;'
    }