Bearbeiten von „Firewall Piercing/Beispiele/OpenSSH via HTTPS-Proxy als SOCKS Proxy verwenden“
Aus UUGRN
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 2: | Zeile 2: | ||
== Voraussetzungen für dieses Beispiel == | == Voraussetzungen für dieses Beispiel == | ||
Das ''[http://rhein-neckar.wiki Rhein-Neckar-Wiki]'' läuft in einem Jail auf dem Server der ''[http://www.stadtwiki.info/ Stadtwiki Gesellschaft e.V.]'' ('''rnw.stwserv.de'''). Die Wiki-Jails sind aus Sicherheitsgründen per Firewall von extern nur auf 80/tcp und 443/tcp erreichbar und können selbst nur über einen Proxy-Server ('''relay.stwserv.de''') mit der Aussenwelt kommunizieren. Der Proxy-Server ist ein HTTP-Proxy und erlaubt zusätzlich die für HTTPS erforderliche CONNECT-Methode auf Port 443/tcp (https) | Das ''[http://rhein-neckar.wiki Rhein-Neckar-Wiki]'' läuft in einem Jail auf dem Server der ''[http://www.stadtwiki.info/ Stadtwiki Gesellschaft e.V.]'' ('''rnw.stwserv.de'''). Die Wiki-Jails sind aus Sicherheitsgründen per Firewall von extern nur auf 80/tcp und 443/tcp erreichbar und können selbst nur über einen Proxy-Server ('''relay.stwserv.de''') mit der Aussenwelt kommunizieren. Der Proxy-Server ist ein HTTP-Proxy und erlaubt zusätzlich die für HTTPS erforderliche CONNECT-Methode auf '''[[SSH auf Port 443|Port 443/tcp]]''' (https) | ||
Ferner existiert ein Shell-Account auf '''[[UUGRN:Jails/shell|shell.uugrn.org]]'''. Der dortige OpenSSH-Daemon läuft zusätzlich zum Standardport 22/tcp auch auf ''' | Ferner existiert ein Shell-Account auf '''[[UUGRN:Jails/shell|shell.uugrn.org]]'''. Der dortige OpenSSH-Daemon läuft zusätzlich zum Standardport 22/tcp auch auf '''443/tcp'''. | ||
Es soll zu Demonstrationszwecken gezeigt werden, wie man unter diesen Voraussetzungen mit OpenSSH und BSD-netcat als Hilfstool eine SSH-Verbidung auf einen mehr oder weniger beliebigen Server im Internet herstellen kann, sofern man dort grundsätzlich Login-Rechte hat. | Es soll zu Demonstrationszwecken gezeigt werden, wie man unter diesen Voraussetzungen mit OpenSSH und BSD-netcat als Hilfstool eine SSH-Verbidung auf einen mehr oder weniger beliebigen Server im Internet herstellen kann, sofern man dort grundsätzlich Login-Rechte hat. | ||
== SSH-Client Konfiguration == | == SSH-Client Konfiguration == | ||
zumächst legen wir | zumächst legen wir volgende ~/.ssh/config an (oder ergänzen die vorhandene entsprechend): | ||
<pre> | <pre> | ||
[rabe@rnw ~]$ cat .ssh/config | [rabe@rnw ~]$ cat .ssh/config | ||
Zeile 32: | Zeile 32: | ||
Das Profil '''rabe.socks''' ist so angelegt, dass es auf '''rabe@rabe.uugrn.org:22''' einloggt unter Verwendung des SOCKS(5)-Proxys auf '''127.0.0.1:1080'''. | Das Profil '''rabe.socks''' ist so angelegt, dass es auf '''rabe@rabe.uugrn.org:22''' einloggt unter Verwendung des SOCKS(5)-Proxys auf '''127.0.0.1:1080'''. | ||
== Verbindungsaufbau == | |||
== Initialer Verbindungsaufbau == | |||
;nach shell.uugrn.org via HTTPS-Proxy: | ;nach shell.uugrn.org via HTTPS-Proxy: | ||
<pre> | <pre> | ||
Zeile 66: | Zeile 67: | ||
== Ad-hoc == | |||
Man will möglicherweise nicht für jeden einzelnen Zielrechner, auf den man per SSH ''ausbrechen'' will erst in der ~/.ssh/config anlegen. Die erforderlichen Direktiven kann man auch mit ''-o 'Direktive Parameter' '' als Kommandozeilenparameter für den OpenSSH-Client angeben. | Man will möglicherweise nicht für jeden einzelnen Zielrechner, auf den man per SSH ''ausbrechen'' will erst in der ~/.ssh/config anlegen. Die erforderlichen Direktiven kann man auch mit ''-o 'Direktive Parameter' '' als Kommandozeilenparameter für den OpenSSH-Client angeben. | ||
Zeile 147: | Zeile 148: | ||
Der Standardwert für ''ServerAliveCountMax 3'' ist für unseren Anwendungsfall ausreichend, als ''ServerAliveInterval'' benötigen wir einen Wert, der definitiv geringer ist als der Timeout vom HTTPS-Proxy. Auf der sicheren Seite sind wir bei 5 min oder 300 sec. | Der Standardwert für ''ServerAliveCountMax 3'' ist für unseren Anwendungsfall ausreichend, als ''ServerAliveInterval'' benötigen wir einen Wert, der definitiv geringer ist als der Timeout vom HTTPS-Proxy. Auf der sicheren Seite sind wir bei 5 min oder 300 sec. | ||
;Nebenbei bemerkt: Manche Router mit ''Stateful Firewall'' oder ''NAT'' vergessen bei inaktiven SSH-Sessions die TCP Verbindungsparameter. Hiergegen hilft manchmal ''TCPKeepAlive yes''. Manchmal genügt das allerdings nicht, weil kein Payload übertragen wird. Hier hilft dann normalerweise ''ServerAliveInterval 30'' recht zuverlässig. Braucht man sehr kurze Intervalle, können SSH-Sessions bei temporärem Netzausfall (zB 90 sec) verloren gehen. Hier sollte man dann zusätzlich ''ServerAliveCountMax 10'' oder noch höher setzen, je nachdem, wie lange man einen temporären Netzausfall tolerieren möchte (z.B. Funkloch bei UMTS). | |||
Die Datei '''~/.ssh/config''' sollte daher mindestens um ''ServerAliveInterval 300'' ergänzt werden: | Die Datei '''~/.ssh/config''' sollte daher mindestens um ''ServerAliveInterval 300'' ergänzt werden: | ||
<pre> | <pre> | ||
Zeile 158: | Zeile 161: | ||
ProxyCommand /usr/bin/nc -X connect -x relay.stwserv.de:3128 %h %p | ProxyCommand /usr/bin/nc -X connect -x relay.stwserv.de:3128 %h %p | ||
</pre> | </pre> | ||
=== Netzwerk === | === Netzwerk === | ||
Zeile 214: | Zeile 214: | ||
01:09:29.938917 IP 195.49.138.67.54677 > 195.49.138.100.443: tcp 0 | 01:09:29.938917 IP 195.49.138.67.54677 > 195.49.138.100.443: tcp 0 | ||
</pre> | </pre> | ||