socat-SOCKS-Brücken: den TLS-Hostnamen der Website bewahren
Verwenden Sie einen Loopback-TCP-Listener für ein SOCKS-Ziel und bewahren Sie dabei die HTTP- und TLS-Identität in der Anwendung.
Eine Anwendung hat keine SOCKS-Option, kann aber eine gewählte TCP-Adresse verbinden. Ein Adapter mit festem Ziel kann das SOCKS-Gespräch für ein Ziel bereitstellen. Er muss nicht zu einem weiteren universellen Forward-Proxy werden.
Für socat-Builds mit SOCKS4A ist eine veranschaulichende Anordnung:
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
Der SOCKS-Endpunkt ist der lokale Port 1080. Der Adapter lauscht auf dem lokalen Port 9443 und fragt diesen Endpunkt nach service.example.net:443. Das sind Beispielwerte, keine vollständige Dienstbereitstellung.
Der Adapter hat ein festes Ziel
Jede angenommene TCP-Verbindung fragt denselben Dienst an. Eine Anwendung, die sich mit 9443 verbindet, liefert ihre normalen Protokollbytes; socat liefert die SOCKS4A-Aushandlung. Eine neue HTTP-CONNECT-Anfrage an 9443 würde kein anderes Ziel wählen—sie würde diese Bytes an den festen Dienst weiterreichen.
SOCKS4A übergibt einen Hostnamen an den SOCKS-Endpunkt zur entfernten Auflösung. Das unterscheidet sich von der SOCKS4-Form mit einer vom Client gewählten Adresse. Das gewählte Upstream—einschließlich eines öffentlichen Kandidaten aus der SOCKS4-Proxy-Liste—muss die SOCKS4A-Hostnamenbehandlung und die erforderliche Authentifizierung unterstützen; dieses Beispiel ist kein SOCKS5-Passwort-Login-Rezept.
Lokal verbinden, den echten Dienst erkennen
Das Ändern einer HTTPS-URL in https://127.0.0.1:9443/ ändert den Hostnamen, den der Client für TLS und HTTP verwenden darf. Ein Zertifikat für service.example.net wird nicht zu einem gültigen Zertifikat für Loopback.
Wo der Client getrenntes Verbindungsrouting unterstützt, bleiben Sie bei der ursprünglichen URL-Identität. Curl kann diesen Unterschied veranschaulichen:
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
Der Socket geht zum lokalen Adapter, während TLS-Prüfung und HTTP-Ziel service.example.net bleiben. Andere Anwendungen brauchen ihre eigene gleichwertige unterstützte Steuerung; nicht jeder Client bietet eine.
Die Loopback-Bindung begrenzt die Netzwerkexposition, aber andere berechtigte lokale Prozesse können sie weiterhin erreichen. Halten Sie die Dienstlaufzeit und die Nutzer angemessen. Behalten Sie die TLS-Prüfung bei, statt den Identitätsfehler durch eine Loopback-URL zu unterdrücken.