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