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

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

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

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

Настройка Istio для зеркалирования трафика выполняется в блоке конфигурации VirtualService. Можно зеркалировать трафик как на внутренние эндпоинты (внутренние для Istio, например, размещенные в Kubernetes), так и на внешние через ServiceEntry:

  • Чтобы зеркалировать внутренние запросы (например, запросы между подами), добавьте mesh в .spec.gateways.

  • Чтобы зеркалировать внешние запросы (например, через сервис LoadBalancer или NodePort), настройте компонент Istio Gateway и добавьте его имя в VirtualService.spec.gateways. В примере приведена эта настройка.

---
### Configuration of destination for mirrored traffic
###
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: wallarm-external-svc
spec:
  hosts:
    - some.external.service.tld # mirroring destination address
  location: MESH_EXTERNAL
  ports:
    - number: 8445 # mirroring destination port
      name: http
      protocol: HTTP
  resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
    - ...
  gateways:
    ### Name of istio `Gateway` component. Required for handling traffic from
    ### external sources
    ###
    - httpbin-gateway
    ### Special label, enables this virtual service routes to work with requests
    ### from Kubernetes pods (in-cluster communication not via gateways)
    ###
    - mesh
  http:
    - route:
        - destination:
            host: httpbin
            port:
              number: 80
          weight: 100
      mirror:
        host: some.external.service.tld # mirroring destination address
        port:
          number: 8445 # mirroring destination port
---
### For handling external requests
###
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingress
    app: istio-ingress
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "httpbin.local"

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

Шаг 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.

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

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

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