Пример конфигурации 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 с приведенной конфигурацией в под.