Restriktive Firewalls und Proxys durchbrechen

Habt ihr schon einmal in einem Hotelzimmer gesessen, mehrere Euro für eine Stunde WLAN bezahlt und konntet den Internetzugang trotzdem nicht nutzen, weil der Hotelbesitzer die Verbindung zugenagelt hat? Ich persönlich könnte da ausrasten. Glücklicherweise gibt es eine relativ einfache Möglichkeit, das ganze zu umgehen. Hierzu wird das SOCKS-Protokoll verwendet, das von vielen Clients (Webbrowser, FTP-Client, etc.) unterstützt wird. Alles, was ihr dafür braucht, sind:

  • Optional: Cygwin, falls ihr Windows-Nutzer seid
  • Optional: Corkscrew, falls ihr einen HTTP-Proxy überlisten müsst
  • einen Server mit SSH-Zugang auf Port 443 (oder einen Heimserver)
  • Optional: einen Account bei noip.com

Fangen wir oben an - mit Cygwin. Dabei handelt es sich um eine linuxähnliche Umgebung für Windowssysteme. Im Grunde erhält man nach der Installation eine Shell, in der man typische Linuxbefehle ausführen kann. Es gibt sogar eine Paketverwaltung, um andere Linuxanwendungen nachzuinstallieren. Und das beste: Wenn ein Softwareentwickler darauf achtet, kann er seine Programme mit Cygwin kompatibel halten - das heißt, dass man diese unter Cygwin kompilieren kann, ohne, dass ein entsprechendes Softwarepaket verfügbar sein muss.
Solltet ihr also ein Windowssystem haben, solltet ihr als erstes Mal Cygwin herunterladen. Nachdem ihr die "setup.exe" gestartet habt, legt ihr das Cygwin-Homeverzeichnis fest, dazu noch das Cygwin-Paketverzeichnis, wählt eine Paketkopie (aka. Mirror) aus und legt fest, welche Pakete installiert werden sollen. Installiert am besten bereits jetzt die "Devel"- und die "Net"-Pakete. Damit spart ihr euch nachher das fummelige Raussuchen der benötigten Einzelpakete. Die "setup.exe" solltet ihr übrigens nach der Installation behalten, denn mit dieser könnt ihr auch im Nachgang Pakete installieren, updaten und entfernen.

Weiter geht's! Solltet ihr es mit einem HTTP-Proxy zu tun haben, den ihr überlisten müsst, empfehle ich euch den Einsatz des kleinen Tools Corkscrew. Im Grunde sorgt dieses Tool dafür, dass der HTTP-Proxy für uns eine Verbindung öffnet, indem er eine Anfrage in folgender Form an diesen Proxy stellt:

1
CONNECT SSH_SERVER:SSH_PORT HTTP/1.0

Corkscrew gibt es nur als Sourcecode. Glücklicherweise (für alle Windowsnutzer) ist dieser Quelltext kompatibel zu Cygwin. Wenn ihr also Windowsnutzer seid, speichert ihr die *.tar.gz Datei, die ihr von der Corkscrew-Webseite heruntergeladen habt, in das Cygwin-Homeverzeichnis. Linuxnutzer kopieren es dahin, wo es ihnen gefällt.
Nun kommt das (für Windowsnutzer) wahrscheinlich neue: Ihr dürft eine Software kompilieren! Dazu startet ihr nun Cygwin (Linuxnutzer öffnen einfach eine übliche Shell), und gebt folgende Befehle ein:

1
2
3
4
5
6
7
cd /
tar -xzvf ./corkscrew-2.0.tar.gz
cd /corkscrew-2.0
./configure
make
make install
make clean

Für Linuxnutzer ist das ganze analog, nur, dass ihr nicht einfach ins Rootverzeichnis geht, sondern dorthin, wo ihr die *.tar.gz Datei abgelegt habt. Wie ihr sehen könnt, habe ich das ganze mit Corkscrew 2.0 gemacht. Es kann sein, dass die Corkscrew-Version bei euch eine andere ist, passt die Datei- und Ordnernamen deshalb entsprechend an. 🙂

(Kleine Annekdote zwischendrin: Viele fragen sich, wie man sich den Parameter -xzvf der Anwendung tar merken soll. Dafür gibt es die lautmalerlische Langform: xtract ze vuckin' file. Das hilft zumindest ein bisschen beim merken. :D)

Gut, nachdem ihr jetzt also mit den Befehlen die Datei entpackt habt, in das entsprechende Verzeichnis gewechselt seid, das Programm kompiliert und installiert habt, seid ihr auch schon soweit, dass ihr das ganze testen könntet. Stellt bitte sicher, dass der SSH-Server auf eurem Server im Internet so konfiguriert ist, dass in eurer OpenSSH-Konfigurationsdatei "/etc/ssh/sshd_config" die Einstellung "AllowTcpForwarding yes" gesetzt ist.

Falls alles stimmt und solltet ihr keinen HTTP-Proxy überwinden müssen, könnt ihr mit folgendem Befehl einen SOCKS-Proxy starten. Windowsnutzer müssen diesen Befehl in Cygwin ausführen, Linuxnutzer einfach in ihrer Shell.

1
ssh SSH_USER@SSH_SERVER -p SSH_PORT -D 127.0.0.1:SOCKS_PORT -N

Ich denke, die Platzhalter sind selbsterklärend. Ihr müsst wissen, wie der SSH-Nutzer eures Servers heißt, ihr müsst wissen, wie der Hostname oder die IP des SSH-Servers lautet, ihr müsst wissen, auf welchem Port er läuft (bei besonders restriktiven Netzwerkkonfigurationen ist Port 443 zu empfehlen) und ihr solltet natürlich wissen, unter welchem Port der zu startende SOCKS-Proxy laufen soll (z.B. Port 8080).

Solltet ihr zudem einen HTTP-Proxy überwinden müssen, müsst ihr einfach nur einen ProxyCommand an den Startbefehl anhängen. Das sieht dann wie folgt aus. Beachtet, dass ihr hierfür die IP-Adresse/Hostnamen und den Port des HTTP-Proxies kennen müsst!

1
ssh SSH_USER@SSH_SERVER -p SSH_PORT -D 127.0.0.1:SOCKS_PORT -N -o "ProxyCommand corkscrew HTTP_PROXY HTTP_PORT %h %p"

Lasst nach dem Starten des SOCKS-Proxy das Cygwin-Fenster bzw. die Linux-Shell solange geöffnet, wie ihr den SOCKS-Proxy auch benötigt. Mit Schließen des Fensters bricht sonst nämlich auch euer Tunnel zusammen. 😉

Den von euch gestarteten SOCKS-Proxy könnt ihr nun in die Programme eintragen, die über ihn mit dem Internet kommunizieren sollen. OpenSSH unterstützt SOCKS4 und SOCKS5, sollte damit also kompatibel mit einer Vielzahl von Programmen (z.B. dem Firefox) sein. 😀

Hier übrigens noch ein Tipp für Leute, die keinen Server bei einem Hoster anmieten wollen, sondern stattdessen einen PC Zuhause verwenden wollen, über den sie ihren Traffic leiten: Solltet ihr nicht wissen, wie ihr die IP eures Rechners herausfinden könnt, hier ein Tipp. Geht zum Dynamic DNS Anbieter noip.com. Dort könnt ihr euch kostenlose, dynamische Subdomains holen (ähnlich DynDNS) und diese total einfach per wget aktualisieren. Ich habe in der "/etc/crontab" meines Homeservers z.B. einfach folgende Zeile eingetragen. Durch diese wird täglich um Mitternacht die IP-Adresse aktualisiert (ihr müsst lediglich die Werte für NOIP_USER, NOIP_PASSWORD und NOIP_HOSTNAME ersetzen). 🙂

1
0 0 * * * root wget "--output-document=/dev/null" "--user-agent=meinDNSUpdater/1.0 meinDNSUpdater@trash-mail.com" https://NOIP_USER:NOIP_PASSWORD@dynupdate.no-ip.com/nic/update?hostname=NOIP_HOSTNAME >/dev/null 2>&1

Und zum Abschluss: Durch dieses Konstrukt könnt ihr auch euer Surfverhalten in einem fremden Netzwerk kaschieren. Bis auf eine Sache: Eure DNS-Anfragen. Die werden noch an den DNS-Server im lokalen Netzwerk gesendet. Bisher beherrscht nur der Firefox die Fähigkeit, DNS-Anfragen über den SOCKS-Proxy umzuleiten, um auch diese Spur zu verwischen. Um diese Fähigkeit zu nutzen, müsst ihr die Adresse about:config aufrufen und dort folgenden Wert setzen:

1
network.proxy.socks_remote_dns = true

Okay. Ich hoffe, dieser kleine Exkurs war für den ein oder anderen interessant. Wer Fragen hat, darf gerne fragen und Verbesserungsvorschläge sind natürlich auch jederzeit gern gesehen. 🙂
Durchbrechende Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.