Sitzt man mit einem Rechner (PR) hinter einem proxy (Stellvertreter), der lediglich Verbindungen auf Port 80 und 443 zulässt, so sind viele andere Dienste, wie zum Beispiel SecureShell oder RemoteDesktop ausgeschlossen.
Hat man aber zum Beispiel einen kleinen Linuxrechner, wie eine RaspberryPie bei sichzu Hause am Netz hängen, so kann dieser als Sprungbrett (JumpPoint, JP) verwendet werden. Der JP selber kann dabei auch hinter einer Firewall, wie zum Biespiel einer Fritzbox sitzen.
Das Prinzip dahinter ist, dass man nun auf der Firewall den Port 443 auf Port 22 auf dem JP durchleitet. Auf dem Jumppoint muss OpenSSH installiert sein. Wichtig ist dabei SSH gut abzusichern, da es sonst ein Einfallstor von außen darstellt. Die Installation von Fail2Ban ist da ganz hilfreich. Hat man allerdings auf dem RP noch einen Webserver laufen, der HTTPS bedient, dann braucht man einen Port Multiplexer dafür, wie den sslh für Apache.
Damit man nun von dem Rechner hinter dem Proxy PR zum JP tunneln kann, muss auch OpenSSH und eine kleine, sehr hilfreich Software CorkScrew installiert sein. CorkScrew bohrt sozusagen ein Loch durch den Proxy hindurch.
CorkScrew wird von OpenSSH auf dem PR gestartet. Dazu muss in ~/.ssh/config die folgende Zeile eingetragen werde:
ProxyCommand /usr/bin/corkscrew <Proxy IP-Adresse> <Proxy Port> %h %p ~/.ssh/myAuth
Manche Proxies sind zusätzlich mit einem Login und Passwort abgesichert. Dies muss dann in der Datei ~/.ssh/myAuth hinterlegt werden:
<login>:<passwort>
Jetzt kann von dem RP mit OpenSSH eine Verbindung aufgebaut werden:
ssh <login von JP>@<IP Adresse von der JP Firewall> -p 443
Da die Firewall den Port 443 and den Port 22 des JP umleitet, braucht man die IP Adresse der Firewall und nicht des JP, der wahrscheinlich sowieso keine nach aussen hin sichtbare IP Adresse hat (NAT).
OpenSSH kann aber noch mehr, als nur eine Secure Shell aufbauen. Es kanns elber auch als lokaler Proxy für andere Netzwerkanwendungen dienen, die dann darüber getunnelt werden können. Dazu muss man ssh anweisen einen lokalen Port für verbindungen aufzumachen:
ssh -D 8090 -L9080:127.0.0.1:22 <login von JP>@<IP Adresse von der JP Firewall> -p 443
Der Parameter -D erstellt dabei auf dem PR einen dynamischen Port. Dieser kann zum Beispiel von einem Webbrowser auf dem RP als Proxy genommen werden, umd arüber den Netzverkehr über JP zu tunneln.Hierzu muss lediglich als SOCKS Proxy die Adresse 127.0.0.1:8090 hergenommen werden. Der Parameter -L bindet einen Port an eine Adresse und Port. Alle Anfragen an den Port 9080 am PR gehen an den Port 22 des JPs. Dies kann zum Beispiel für Remotedesktop oder Datentransfer verwendet werden.
Eine weitere Möglichkeit ist auch der Reverse Proxy -R. Mit diesem Parameter ist es möglich, eine Verbindung auch in umgekehrter Richtung aufzubauen, also von JP zum PR. Allerdings sollte das mit Vorsicht behandelt werden, besonders, wenn man PR in einem Firmennetz betreibt. Hier gelten die Firmenrichtlinien, was Netzwerktunneln betrifft, da man damit die Sicherheitsaspekte einer Firma aushebelt.
Links:
https://www.openssh.com/
https://github.com/bryanpkc/corkscrew
https://github.com/bryanpkc/corkscrew/blob/master/corkscrew.c
https://wiki.ubuntuusers.de/fail2ban/
https://manpages.ubuntu.com/manpages/precise/man8/sslh.8.html