Restriktive Firewalls und Proxys durchbrechen

20.02.2013 yahe administration legacy linux security

Habt ihr schon einmal in einem Hotelzimmer gesessen, mehrere Euro für eine Stunde WLAN bezahlt und konntet den Internetzugang trotzdem nicht ordentlich nutzen, weil der Hotelbesitzer die Verbindung zugenagelt hat? Glücklicherweise gibt es eine Möglichkeit, das ganze zu umgehen. Hierzu wird das SOCKS-Protokoll verwendet, das von vielen Clients wie Webbrowsern, FTP-Clients, 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-Zugriff auf Port 443

Fangen wir 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 ist, dass ein Softwareentwickler, der darauf achtet, seine Programme mit Cygwin kompatibel halten kann. 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, installiert zuerst einmal Cygwin, legt das Cygwin-Homeverzeichnis fest, dazu noch das Cygwin-Paketverzeichnis, wählt eine Paketkopie (aka. Mirror) 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.

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 es eine Anfrage in folgender Form an diesen Proxy stellt:

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 ZIP-Datei in das Cygwin-Homeverzeichnis. Linuxnutzer kopieren es dahin, wo es ihnen gefällt. Im Anschluss kann Corkscrew wie folgt kompiliert und installiert werden:

unzip ./corkscrew-master.zip
cd /corkscrew-master
autoreconf --install
./configure
make
sudo make install

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önnt. 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 und ihr keinen HTTP-Proxy überwinden müsst, könnt ihr mit folgendem Befehl einen SOCKS-Proxy starten. Windowsnutzer müssen diesen Befehl in Cygwin ausführen, Linuxnutzer einfach in ihrer Shell:

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 einen ProxyCommand an den Startbefehl anhängen:

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"

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

Und zum Abschluss: Durch dieses Konstrukt könnt ihr auch euer Surfverhalten in einem fremden Netzwerk kaschieren, bis auf eine Sache: Eure DNS-Anfragen werden weiterhin 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 im Firefox die Adresse "about:config" aufrufen und dort folgenden Wert setzen:

network.proxy.socks_remote_dns = true

Search

Categories

administration (40)
arduino (12)
calcpw (2)
code (33)
hardware (16)
java (2)
legacy (113)
linux (27)
publicity (6)
review (2)
security (58)
thoughts (21)
windows (17)
wordpress (19)