SSH über HTTPS übertragen
- Um SSH über HTTPS zu übertragen, müssen sowohl Client als auch Server angepasst werden.
- Im Beispiel für die Client-Konfiguration werden in der Datei
~/.ssh/config ProxyCommand und ServerAliveInterval gesetzt.
- Das verwendete Skript
~/.ssh/https-tunnel.bash erstellt mit socat eine TLS-Verbindung und sendet dabei die Methode CONNECT mit Headern.
Beispiel für die Server-Konfiguration
- In der Apache2-HTTPS-Server-Konfiguration wird
proxy_connect_module geladen und mit der Direktive AllowCONNECT die Verwendung der HTTP-Methode CONNECT für bestimmte Ziele erlaubt.
- Auf der Serverseite wird konfiguriert, dass auf dem
https-server die Methode CONNECT nur für das einzelne Ziel, den Host ssh-server, verwendet werden kann.
Hintergrund
- Während eines Krankenhausaufenthalts bestand der Wunsch, über das Krankenhaus-WLAN remote zu arbeiten, obwohl dort die meisten Verbindungstypen blockiert sind.
- Das Krankenhausnetzwerk erlaubt nur HTTP- und HTTPS-Verbindungen, während SSH vollständig blockiert ist.
- Daher wurde nach Möglichkeiten gesucht, SSH über HTTP oder HTTPS zu transportieren.
Mögliche Methoden
- Das Projekt
sslh hostet SSH- und HTTPS-Protokolle gemeinsam auf einem einzelnen Port und verteilt sie transparent.
sslh kapselt kein Protokoll in ein anderes ein, sondern leitet mithilfe verschiedener Heuristiken an das tatsächliche Backend weiter.
- Eine weitere Methode ist, mit der Direktive
ProxyCommand von openssh das SSH-Protokoll vollständig in ein anderes Protokoll einzubetten.
SSH over HTTP
- Für einen einfachen Versuch mit SSH over HTTP wird Apache2 so konfiguriert, dass die Methode
CONNECT für das einzelne Ziel ssh-server:22 erlaubt ist.
- Auf der Client-Seite lässt sich dies leicht mit
socat anpassen.
- Mit
ServerAliveInterval wird sichergestellt, dass die HTTP-Verbindung auch im Leerlauf nicht getrennt wird.
SSH over HTTPS
socat unterstützt keine HTTPS-Proxys, wohl aber TLS-Kapselung.
- Eine auf
CONNECT basierende Methode lässt sich leicht manuell implementieren.
- Mit dem Skript
~/.ssh/https-tunnel.bash wird Tunneling von SSH über HTTPS umgesetzt.
Fazit
- Die allgegenwärtige Verfügbarkeit von HTTPS ermöglicht es, Daten auch durch stark eingeschränkte Zwischenstationen zu übertragen.
- Die Methode
CONNECT ist ein nützlicher Hack, um einen TCP-Payload-Stream in einen TLS-Host-Stream einzupacken.
ServerAliveInterval wird verwendet, um Verbindungen über untergeordnete Transporte aufrechtzuerhalten, die mit Leerlaufverbindungen nicht gut umgehen können.
Meinung von GN⁺
- Der wichtigste Punkt dieses Artikels ist die kreative Lösung, mit der SSH-Verbindungen auch in eingeschränkten Netzwerkumgebungen möglich werden.
- Die Methode, SSH mit HTTPS zu kombinieren, dürfte besonders für Personen mit Fachwissen in Netzwerksicherheit interessant sein.
- Das Umgehen von Netzwerkeinschränkungen mithilfe von
ProxyCommand und ServerAliveInterval bietet nützliche Informationen für Netzwerkadministratoren und Sicherheitsexperten.
1 Kommentare
Hacker-News-Kommentare
ProxyJumpverwenden oder über SOCKS eine weniger eingeschränkte Internetverbindung erhalten. Es ist auch möglich, DNS über TLS über eine SSH-Verbindung weiterzuleiten.openssheinfach auf Port 443 lauscht.corkscrew, um durch Unternehmens-Firewalls zu kommen. Eine unabhängige Implementierung und Beschreibung dieses Werkzeugs ist beeindruckend.