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

Пример конфигурации Envoy для зеркалирования трафика

В этой инструкции приведен пример конфигурации Envoy для зеркалирования трафика и ноды Вебмониторэкс для обработки зеркалированного трафика.

Шаг 1: Конфигурация Envoy для зеркалирования трафика

Данный пример использует единственный объект listener, который принимает соединение на порту 80, без TLS. В объекте listener задан единственный filter. В блоке clusters заданы адреса бэкенда, на который должен поступать весь трафик, и дополнительных бэкендов, которые обрабатывают зеркало трафика.

static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 80
    filter_chains:
    - filters:
        - name: envoy.filters.network.http_connection_manager
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
            stat_prefix: ingress_http
            codec_type: AUTO
            route_config:
              name: local_route
              virtual_hosts:
              - name: backend
                domains:
                - "*"
                routes:
                - match:
                    prefix: "/"
                  route:
                    cluster: httpbin     # <-- link to the original cluster
                    request_mirror_policies:
                    - cluster: wallarm   # <-- link to the cluster receiving mirrored requests
                      runtime_fraction:
                        default_value:
                          numerator: 100
            http_filters:
            - name: envoy.filters.http.router
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  ### Definition of original cluster
  ###
  - name: httpbin
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: httpbin
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              ### Address of the original endpoint. Address is DNS name
              ### or IP address, port_value is TCP port number
              ###
              socket_address:
                address: httpbin # <-- definition of the original cluster
                port_value: 80
  ### Definition of the cluster receiving mirrored requests
  ###
  - name: wallarm
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: wallarm
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              ### Address of the original endpoint. Address is DNS name
              ### or IP address, port_value is TCP port number. Вебмониторэкс
              ### mirror schema can be deployed with any port but the
              ### default value is TCP/8445.
              ###
              socket_address:
                address: wallarm
                port_value: 8445

Подробнее в документации Envoy

Шаг 2: Конфигурация ноды Вебмониторэкс для фильтрации зеркалированного трафика

Чтобы нода Вебмониторэкс обрабатывала зеркалированный трафик, в конфигурационном файле ноды задайте следующее:

wallarm_force server_addr $http_x_server_addr;
wallarm_force server_port $http_x_server_port;
#Change 222.222.222.22 to the address of the mirroring server
set_real_ip_from  222.222.222.22;
real_ip_header    X-Forwarded-For;
#real_ip_recursive on;
wallarm_force response_status 0;
wallarm_force response_time 0;
wallarm_force response_size 0;
  • Директива real_ip_header необходима, чтобы в Консоли управления Вебмониторэкс правильно отображались IP‑адреса атакующих.

  • Директивы wallarm_force_response_* отключают обработку всех запросов, за исключением копий, полученных из зеркалированного трафика.

  • Так как блокировка вредоносных запросов невозможна, нода Вебмониторэкс всегда анализирует трафик в режиме мониторинга, даже если в директиве wallarm_mode или в Консоли управления задан режим мягкой или обычной блокировки. Исключение — анализ трафика отключен (wallarm_mode off или соответствующая настройка в Консоли управления).

Обработка зеркалированного трафика поддерживается только нодой на основе NGINX. Можно задать приведенную конфигурацию следующим образом:

  • Запускаете ноду из DEB/RPM пакетов — задайте приведенную конфигурацию в файле NGINX /etc/nginx/conf.d/default.conf.

  • Запускаете ноду из облачного образа AWS или GCP — задайте приведенную конфигурацию в файле NGINX /etc/nginx/nginx.conf.

  • Устанавливаете ноду из Docker-образа — примонтируйте файл с приведенной конфигурацией в контейнер.

  • Запускаете ноду как Sidecar-прокси или Ingress-контроллер — примонтируйте ConfigMap с приведенной конфигурацией в под.