Балансировка трафика на основе набора шифров#
В этой статье рассматривается балансировка трафика на основе набора шифров. На один VIP-адрес балансировщика нагрузки поступает два типа трафика:
TLS-трафик с шифрованием ГОСТ;
TLS-трафик без ГОСТ.
Для стандартного TLS выполняется Offload и балансировка на Angie ADC.
Трафик ГОСТ направляется на отдельный бэкенд-сервер без расшифровки. Конфигурация основного бэкенд-сервера: Конфигурация бэкенд-сервера для ГОСТ-трафика: Трафик балансируется на ГОСТ-бэкенд, если ГОСТ присутствует в списке шифров
(может присутствовать наряду с другими шифрами). Конфигурация: Трафик балансируется на ГОСТ-бэкенд, если заданы только ГОСТ-шифры.
Если помимо ГОСТ-шифров есть другие шифры, трафик отправляется на основной бэкенд. Конфигурация: Трафик без ГОСТ отправляется на основной бэкенд: Трафик с ГОСТ отправляется на ГОСТ-бэкенд: Трафик без ГОСТ отправляется на основной бэкенд: Трафик с ГОСТ отправляется на основной бэкенд: Трафик, где только ГОСТ, отправляется на ГОСТ-бэкенд:Настройка#
http {
default_type text/plain;
server {
listen 80;
server_name localhost;
location / {
return 200 "Hello, this is default backend\n";
}
}
}
http {
default_type text/plain;
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/angie-lb/crt/server.crt;
ssl_certificate_key /etc/angie-lb/crt/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers IANA-GOST2012-GOST8912-GOST8912:GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC;
ssl_prefer_server_ciphers on;
location / {
return 200 "Hello, this is GOST-based server\n";
}
}
}
Случай 1#
http {
upstream backend {
server IP.OF.MAIN.BACKEND:80;
}
server {
listen 127.0.0.1:8443 ssl;
ssl_certificate /etc/angie-lb/crt/cp.crt;
ssl_certificate_key /etc/angie-lb/crt/cp.key;
server_name localhost;
status_zone default;
location / {
proxy_pass http://backend;
}
}
}
stream {
map $ssl_preread_ciphers $handler {
"~TLS_GOST" 127.0.0.1:9443;
default 127.0.0.1:8443;
}
server {
listen 443;
ssl_preread on;
pass $handler;
}
server {
listen 127.0.0.1:9443;
proxy_pass IP.OF.GOST.BACKEND:443;
}
}
Случай 2#
http {
upstream backend {
server IP.OF.MAIN.BACKEND:80;
}
server {
listen 127.0.0.1:8443 ssl;
ssl_certificate /etc/angie-lb/crt/cp.crt;
ssl_certificate_key /etc/angie-lb/crt/cp.key;
server_name localhost;
status_zone default;
location / {
proxy_pass http://backend;
}
}
}
stream {
map $ssl_preread_ciphers $backend {
"~^(TLS_GOST[^:]*)(:TLS_GOST[^:]*)*(:TLS_EMPTY_RENEGOTIATION_INFO_SCSV)?$" 127.0.0.1:9443;
default 127.0.0.1:8443;
}
server {
listen 443;
ssl_preread on;
pass $backend;
}
server {
listen 127.0.0.1:9443;
proxy_pass IP.OF.GOST.BACKEND:443;
}
}
Проверка#
Случай 1#
# curl --ciphers '!IANA-GOST2012-GOST8912-GOST8912:!GOST2012-MAGMA-MAGMAOMAC:!GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:HIGH' --tlsv1.2 --tls-max 1.2 https://example.com
Hello, this is default backend
# curl --ciphers 'ALL' --tlsv1.2 --tls-max 1.2 https://example.com
Hello, this is GOST-based server
Случай 2#
# curl --ciphers '!IANA-GOST2012-GOST8912-GOST8912:!GOST2012-MAGMA-MAGMAOMAC:!GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:HIGH' --tlsv1.2 --tls-max 1.2 https://example.com
Hello, this is default backend
# curl --ciphers 'ALL' --tlsv1.2 --tls-max 1.2 https://example.com
Hello, this is default backend
# curl --ciphers 'IANA-GOST2012-GOST8912-GOST8912:GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC' --tlsv1.2 --tls-max 1.2 https://example.com
Hello, this is GOST-based server