Mit httptunnel kann man TCP-Verbindungen über http-Protokoll tunneln.

Homepage: http://www.nocrew.org/software/httptunnel.html

Lizenz: GPL

Tipps & Tricks

Mini-Howto

Einleitung

Vor einiger Zeit hat meine Schule uns mit einem Portfilter den Saft abgedreht, der nur noch Port 80 (HTTP) durch lässt. Ich dachte mir, dass es doch da irgendwas geben muss, um diese sinnlose Einschränkung zu umgehen - und so bin ich auf httptunnel gestoßen, eine Software, die es für Linux und Windows gibt, und die den Datenverkehr von jedem auf jeden anderen gewünschten Port umleitet und in das http-Protokoll verpackt.

Prinzip

Das Prinzip ist simpel. Um es einfach zu erklären bediene ich mich einem Beispiel. Nehmen wir also an, ich will von einem Rechner (localhost), der sich hinter einer restriktiven Firmenfirewall befindet, welche dem ausgehenden Verkehr nur Zugriff auf die ports 80 (http) und 443 (https) gestattet, eine Verbindung mit meinem zu Hause laufenden Rechner mit laufendem ssh-Server (192.168.0.103) aufbauen.

Eine normale tcp Verbindung ohne die Firewall liefe so ab:

Diese Methode funktioniert natürlich nur, wenn man von Außen auf Port 22 des Heimcomputers Zugriff hat. Da uns dieser aber verwehrt ist, und wir den ssh-Server aus gewissen Gründen nicht auf einem der oben genannten Ports laufen lassen können, bedienen wir uns httptunnel.

Eine Verbindung über httptunnel sieht wie folgt aus:

Einrichtung

Bedingungen

Damit httptunnel funktioniert, müssen einige Bedingungen zutreffen:

Da das Programm recht benutzerunfreundlich geschrieben ist, habe ich lange gebraucht, um heraus zu finden, wie man es zu bedienen hat - es gibt keine Fehlermeldungen auf STDOUT oder STDERR aus und beendet sich selbst bei Fehlern mit Errorcode 0

Starten des Servers

Die man page für hts gibt Anhaltspunkte, wie man den Server startet, jedoch gibt es einige Dinge, die man beachten muss.

Um auf dem Zielsystem den httptunnel-Server hts zu starten, verwendet man: hts -F localhost:22 443

Das öffnet den Port 443. Alles, was vom Client an diesen Port geschickt wird, wird von den http-Requests befreit und an Port 22 an den ssh-Server weiter geleitet.

Beachtet werden muss, dass man die Rechte hat, Port 443 (oder für welchen man sich auch entscheidet) zu öffnen. Man muss auch sicher sein, dass der Port nicht bereits von einem anderen Prozess geöffnet wurde.

Ob der Server läuft sieht man, wenn man ps auxw | grep "[h]ts" eingibt ("[h]ts" statt hts deshalb, damit grep sich nicht selbst findet).

Starten des Clients

Auch für htc gibt die man page wieder Anhaltspunkte, wie man vorgehen kann. Im Prinzip gelten auch hier die selben Regeln.

Will man zum Zielsystem verbinden, startet man den httptunnel-Client htc mit: htc -F 12345 192.168.0.103:443

192.168.0.103 ist hier die IP des Zielsystems, 12345 ist ein beliebig gewählter Port. Wieder sollte dieser nicht besetzt sein und man sollte die Rechte besitzen, diesen öffnen zu dürfen.

Um zu schauen, ob der Client einwandfrei gestartet ist, verwendet man wieder: ps auxw | grep "[h]tc"

Hätte die Firma zusätzlich zur Firewall einen http-Proxy mit der IP 10.0.0.9 und dem non-standard Port von 7898, sähe das Kommando für htc so aus: htc -P 10.0.0.9:7898 -F 12345 192.168.0.103:443

Die Verbindung

Nachdem alles eingerichtet ist, geht es an die Verbindung - in diesem Fall mit einem ssh-Client, über den man übrigens dann prima weitere Verbindungen tunneln kann. Die Prozedur läuft allerdings etwas anders ab, als gewöhnlich.

Normal würde man ssh username@192.168.0.103 verwenden

Mit htc benutzt man allerding ssh -p 12345 username@localhost, da ja der Datenfluss über den lokalen Port 12345 dann von htc verarbeitet und schließlich weitergeleitet wird.

Ende gut...

...und so kam es, dass ich in meiner Schule mit relativ wenig Aufwand wieder auf meinen Rechner zu Hause zugreifen konnte, um Unterrichtsmaterial rohlingsparend über ssh hin und her zu kopieren.

-- PeterMarquardt

Fragen

Frage: Lässt sich das auch über einen ProxyServer wie Squid nutzen?

HttpTunnel (zuletzt geändert am 2007-12-23 22:45:18 durch localhost)