Dies ist mit Haproxy möglich. Sie können einen TCP-Proxy einrichten, die SNI extrahieren und das Routing basierend auf der SNI durchführen. Hier ist ein Beispiel:
backend be.app1
mode tcp
no option checkcache
no option httpclose
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
tcp-request content reject
use-server server1 if { req.ssl_sni -m beg app1. }
server server1 server1:8443 check id 1 weight 0
Es ist wichtig, die Anforderung zu verzögern, bis Sie die SSL-Begrüßung erhalten. Andernfalls versucht haproxy, eine Verbindung herzustellen, bevor der SNI-Header empfangen wird.
Ich verwende Server mit der Gewichtung 0, da in meiner aktuellen Konfiguration nur ein Server für jedes SNI ausgeführt wird und sie keine zufälligen Anforderungen erhalten sollen. Sie können wahrscheinlich bessere Möglichkeiten finden, um damit zu spielen.
"Ja wirklich?" Warum sollte jemand diese Antwort ablehnen?
Florin Asăvoaie
Das Problem dabei ist, dass die IP-Adresse des Clients nicht weitergeleitet wird, sodass der Server immer nur Datenverkehr vom Proxy sieht.
Kyle
@ Kyle Natürlich. Es ist ein TCP-Proxy. Das einzige, was Sie tun können, ist, wenn Sie haproxy als Router für den Server konfigurieren und einstellen und tproxy verwenden.
Vielen Dank für die Veröffentlichung über dieses Projekt. Ich war mir dessen nicht bewusst
user319862
@mick Hi mick, wenn SNI als transparenter Proxy ausgeführt wird, werden einige Sites mit SSL-Fehlern beschädigt. Wie man es repariert ?
Gripenfighter
1
Dies ist mit dem kommenden TLS 1.3 sicherlich schon ab 2019 möglich! Viele Webserver oder spezialisierte Reverse-Proxys bieten diese Funktionalität sofort an:
Nginx ≥ 1.11.5 (Debian ≥ Buster oder Stretch-Backports)
HAProxy ≥ 1,5 (Debian ≥ Jessie)
Sniproxy (Debian ≥ Buster)
etc.
Dies ist eine Beispielkonfiguration für Nginx, die bei Setups, die einen Reverse-Proxy erfordern, sehr beliebt ist:
stream {
map $ssl_preread_server_name $selected_upstream {
example.org upstream_1;
example.net upstream_2;
example.com upstream_3;
default upstream_4;
}
upstream upstream_1 { server 10.0.0.1:443; }
upstream upstream_2 { server 10.0.0.2:443; }
upstream upstream_3 { server 10.0.0.3:443; }
upstream upstream_4 { server 10.0.0.4:443; }
server {
listen 10.0.0.5:443;
proxy_pass $selected_upstream;
ssl_preread on;
}
}
Die relevanten Nginx-Module sind stream_coreund stream_ssl_preread. Anleitungen:
Sie können sniproxy verwenden: https://github.com/dlundquist/sniproxy
Eine Beispielkonfiguration:
quelle
Dies ist mit dem kommenden TLS 1.3 sicherlich schon ab 2019 möglich! Viele Webserver oder spezialisierte Reverse-Proxys bieten diese Funktionalität sofort an:
Dies ist eine Beispielkonfiguration für Nginx, die bei Setups, die einen Reverse-Proxy erfordern, sehr beliebt ist:
Die relevanten Nginx-Module sind
stream_core
undstream_ssl_preread
. Anleitungen:quelle