Sysadmin-Kolumnist Charly kennt keinen Urlaub vom Internet. Er macht ja auch keinen Urlaub vom Klopapier. Eine Strandbar mit WLAN findet er schnell, dort aber läuft ein Zwangsproxy, der den SSH-Port 22 für Teufelszeug hält und den Verbindungsaufbau unterbindet. Zeit, einen Tunnel zu bohren.
Das richtige Werkzeug, um SSH durch einen Proxy wie Squid, Gauntlet, Cacheflow, Junkbuster oder Apache Mod_proxy zu tunneln, ist Corkscrew. Warum? Weil der Namen Korkenzieher gut gewählt ist, und weil sich der Programmautor vorstellt mit: “Mein Name ist Pat Padgett. Ich bin ein Depp.” Nach meiner Erfahrung können derart lakonische Leute gut programmieren.
Die meisten Distributionen halten Corkscrew in einer Schublade bereit, andenfalls bekommt man es unter [1]. Auf dem Zielserver sollte der SSH-Daemon auf Port 443 laufen, denn nicht wenige Proxys verweigern die Verbindung zu Port 22. Es ist übrigens kein Problem, den SSH-Daemon auf zwei oder mehr Ports gleichzeitig zu binden. Dazu füge ich einfach in der »sshd_config« eine weitere Port-Zeile hinzugefügt:
[...] Port 22 Port 443
Wer auf Port 443 schon HTTPS betreibt, kann sich SSLH [2] als Notnagel in den Server schlagen. Das ist ein SSH/SSL-Multiplexer, der es möglich macht, SSH und HTTPS gleichzeitig auf Port 443 zu betreiben.
Falls der Proxy nach Logindaten fragt, muss ich diese in einer Datei hinterlegen. Deren Name spielt keine Rolle, ich nehme »/home/charly/.proxy-auth« . In die Datei fülle ich die Daten nach dem Schema: »Username:Password«
Damit es korkt
Jetzt muss ich meinem SSH-Client noch einbläuen, dass er bitte Corkscrew benutzen möge. Ich editiere im Homeverzeichnis die Datei ».ssh/config« . (Falls sie noch nicht existiert, einfach anlegen.) Sie bekommt zwei Zeilen mehr:
Host * ProxyCommand corkscrew myproxy.example.net 3128%h %p /home/charly/.proxy-auth
Myproxy.example.net und die Portnummer passt jeder natürlich auf die Bedürfnisse vor Ort an. Durch die Variablen »%h« und »%p« bekommt Corkscrew die Parameter des SSH-Aufrufs weitergereicht. Falls ein Server ohne Authentifizierung arbeitet, lasse ich den Pfad zur Username-Passwort-Datei einfach weg.
Damit ist es Zeit für die Premiere. Als Zielserver benutze ich einen Raspberry Pi, dessen Sshd sein Ohr an Port 443 hält. Der Proxy ist ein handelsüblicher Squid. Wie auf Abbildung 1 zu sehen ist, funktioniert der Login einwandfrei – nichts deutet darauf hin, dass Corkscrew seine Finger im Spiel hatte, es sei denn, jemand hat Zugriff auf die Proxy-Logs. Denn dort findet sich der Eintrag
"CONNECT 10.0.0.5:443 HTTP/1.0" 200 [...]
Aber wer hat schon Bock auf Logs, während ich gerade Platz in einer Strandbar nehme. Ah, die haben WLAN. (jk)
Infos
- Corkscrew: http://www.agroman.net/corkscrew/
- Charly Kühnast, “Aus dem Alltag …: Sslh”: Linux-Magazin 01/10, S. 67, https://www.linux-magazin.de/Ausgaben/2010/01/Satisfaktionsverbot






