Http-Tunnel Howto von Daniel Dürnberger am 24.09.2005 19:21 v0.1

Folgendes Szenario hat mich dazu getrieben httptunnel zu verwenden:

Ich bin in der Schule auf einem Windows Rechner gesessen welcher hinter der Schuleigenen Firewall stand. Auf dieser Firewall war nur der port 80 und 8080 sowie 443 freigeschalten, also Internet surfen und mehr nicht. Da ich aber auf meinen Linux Rechner Zuhause, welcher direkt am Internet hängt, über ssh zugreifen wollte, habe ich das Programm httptunnel verwendet.
Das Programm httptunnel, entwickelt von Lars Brinkhoff, besteht aus 2 ausführbaren und diversen anderen Programmdateien.

Die 2 für uns relevanten Dateien lauten:
hts (Http Tunnel Server)
htc (Http Tunnel Client)

Die Datei hts wird logischerweise auf dem Linux Rechner ausgeführt, da dieser ja der Zielrechner ist mit dem ich mich verbinden will. Natürlich können wir nicht einfach nur die Datei so aufrufen sondern müssen dem Programm mitteilen welche Pakete er entgegen nehmen soll und in welche Pakete er sie umwandeln soll. Dazu geben wir hts eine Option mit dem Kürzel F, welches für "Forward" steht.

hts -F localhost:22 80

Diese Zeile ruft hts mit der Option "F" auf und das Programm wandelt(Forwarded) alle Pakete die der eigene Rechner(localhost) auf Port 80 bekommt (http) in ssh Pakete (port 22) um.

Nun kommt das andere Programm htc zum Einsatz. Dieses rufen wir ebenfalls mit der Option "F" auf dem Windows Recher wie folgt auf:

htc -F 22 x.x.x.x:80

x.x.x.xsteht für die IP-Adresse des Zielrechners auf dem hts läuft.
Also das Programm htc pakt alle Pakete die über den port 22(ssh) an die Adresse x.x.x.x gesendet werden in sogenannte http requests (http Pakete) und sendet sie an x.x.x.x . Somit glaubt die Firewall das es normale http requests sind und lässt sie passieren. Angekommen auf dem Zielrechner erkennt das Programm hts die http requests und wandelt sie wieder zurück in ssh(22) Pakete um.

Logischerweise kann man nun auf dem Zielrechner port 80 nicht mehr normal zum Internet surfen verwenden, da hts jeden request über post 80 versuchen würde in ssh Pakete umzuwandeln. Aber zum Glück gibt es ja noch mehrere http Ports: 80(http), 8080(http), 443(https). Dies bedeutet man kann zum Beispiel auf Port 80 den httptunnel server (hts) laufen lassen und auf port 8080 einen normalen Webserver wie Apache.


Um noch einmal kurz die Theorie zusammenzufassen was hier geschieht:
Man baut auf dem client(zB der Windows Rechner) eine ssh-Verbindung mit dem Programm auf. Das Programm nimmt die ssh Pakete und pakt sie nochmals in http Pakete hinein und sendet sie sofort weiter an die angegeben IP-Adresse (seht in der Option von htc). Der Zielrechner empfängt diese als http Pakete getarnten ssh Pakete und gibt sie an hts weiter. hts befreit die ssh Pakete von den http Verkleidungen und gibt sie dem Rechner als wären sie so direkt angekommen.

Jetzt haben wir einen Tunnel für ssh über http aufgebaut und wollen ihn natürlich auch verwenden. Dazu verwenden wir die ssh Programme, da wir ja Port 22 verwenden. Am Zielrechner muss ssh als server laufen. Am client Rechner bauen wir nun einfach eine Verbindung mit dem eigenen Rechner auf (localhost, 127.0.0.1). Der Grund dafür ist einfach, wir wollen ja über htc mit unserem Zielrechner kommunizieren und htc läuft nun mal auf dem eigenen Rechner. htc baut dann die verbindung mit dem Zielrechner auf. Fertig

netzwerk -->ssh-Paket -->htc -->http-Paket -->Firewall lässt passieren -->hts -->ssh-Paket --> Ziel



ACHTUNG: Es ist natürlich nicht legal auf diese Weise die Firewall zu umgehen und es können grosse Schäden dadurch entstehen, egal ob es in einer Schule oder in einem Unternehmen verwendet wird. Man kann sich das wie folgt vorstellen:
Man reist über eine Landesgrenze mit einem gefälschten Reisepass. Für die Grenzleute erscheint es so als wäre ich jemand der ich in Wirklichkeit nicht bin. Man könnte die Grenzleute mit der Firewall und den gefälschten Reisepass mit einem http request,welches in Wirklichkeit ein ssh-Paket ist, vergleichen.



Wichtige Programme:

httptunnel: Gibt es für Windows und Linux auf http://www.nocrew.org/software/httptunnel.html zum runterladen.

ssh: OpenSSH (http://www.openssh.com/), eine freie Version des SSH Protokolls. Gibt es für Windows und Linux.
Für einen Windows Client würde ich jedoch Putty empfehlen: http://www.putty.nl/download.html
Für ssh gibt es mehrere Programme als nur ssh bzw. putty. Es gibt extra Programme wie scp (secure copy), welches das kopieren von Dateien über ssh erlaubt. Die Windows Version von scp (WinSCP) gibt es unter http://winscp.net/eng/index.php .


Legende:

port: Ein Port ist eine Adresskomponente, welche dafür verwendet wird um das Protkoll festzustellen.

Firewall: Dies ist eine Art Kontrollstand, welcher jedes Paket welches passieren möchte kontrolliert. Die Kontrolle beschränkt sich dabei aber nur auf die Port Nummer. So kann eine Firewall nur den dazugehörigen Port eines Paketes festellten und darauf reagieren. Perfekt für unseren httptunell, bei dem wir auf unser ssh Paket einfach die Portnummer von http draufkleben.

ssh: Ähnlich wie telnet baut ssh eine Textbasiert Verbindung mit einem ssh Server auf. Aber wie der Name (secure shell) schon sagt auf eine sichere(verschlüsselte) Weise.

http requests: Die Methoden mit der ein Browser mit einem Webserver kommuniziert (siehe http://de.wikipedia.org/wiki/HTTP#HTTP_Request-Methoden)


Links:

httptunnel http://www.nocrew.org/software/httptunnel.html
ssh(22) http://de.wikipedia.org/wiki/Ssh
http(80,8080) http://de.wikipedia.org/wiki/HTTP
https(433) http://de.wikipedia.org/wiki/HTTPS