Sicher bloggen in feindlicher Umgebung

Es kam gerade die Frage auf, wie man auf chaoshaltigen Veranstaltungen sicher bloggt. Die beste Idee ist natürlich ein VPN. Wenn man kein VPN hat, muss man sich mit der Materie auseinander setzen. Punk 😉

Wenn man diese Option jedoch nicht zur Verfügung hat, kann man sich zumindest einen SSH-Tunnel nach draußen bohren.

Ein erster Wurf würde so aussehen:

ssh your.trusted.server.outside.com -L 8080:blog.mellenthin.de:80

Den Browser könnte man jetzt nach http://localhost:8080 lenken. Leider verwendet WordPress massiv absolute URLs (die mit http:// anfangen) und umgeht damit unseren Tunnel. Wir müssen also dafür sorgen, dass alle http-Anfragen an http://blog.mellenthin.de/ durch diesen Tunnel gehen.

Das klappt mit einem ziemlich schmutzigen Trick: in /etc/hosts wird einfach folgender Eintrag hinzugefügt:

127.0.0.1       blog.mellenthin.de

Jetzt wird blog.mellenthin.de mit localhost aufgelöst und alle Anfragen gehen an den eigenen Rechner. Der lokale Port des SSH-Tunnels muss noch von 8080 in 80 geändert werden, weil globale URLs den Suffix :8080 nicht enthalten. Das SSH-Kommando sieht dann so aus:

sudo ssh you@your.trusted.server.outside.com -L 80:blog.mellenthin.de:80

Weil man einen lokalen Port 80 öffnen möchte, muss man sudo benutzen. Das führt dazu, dass ssh eine Verbindung als root@your.trusted.server.outside.com aufbaut, deswegen muss man seinen Useraccount auf dem vertrauenswürdigen Server mit you@ vor den Servernamen setzen.

Sobald man via SSH eingeloggt ist, steht der Tunnel. Aufgrund des Eintrags in /etc/hosts klappt eine Verbindung zum Webserver auch nur, wenn der Tunnel steht. Wenn man der Sache nicht traut, kann man mit traceroute und die Route überprüfen:

melle@euphoria:~$ tracepath blog.mellenthin.de
 1:  localhost (127.0.0.1)                                  0.173ms pmtu 16436
 1:  localhost (127.0.0.1)                                  0.056ms reached
     Resume: pmtu 16436 hops 1 back 1

Obacht: der Webbrowser könnte die IPs cachen, also den Browser beenden und neu starten, bevor man bloggt. Außerdem kann das Bash-Timeout zuschlagen (wenn konfiguriert), man sollte in diesem Fall die Umgebungsvariable TMOUT setzen oder eine Anwendung starten (z.B. top), die ein Timeout der Shell verhindert.

Update: der Hinweis von Michael ist natürlich richtig und bringt wesentlich mehr Komfort. Danke für den Hinweis 🙂 Also wenn man auf dem SSH-Server einen Proxy installieren kann, genügt schon ein simples

ssh your.trusted.server.outside.com -L 3128:localhost:3128

Um sich mit dem Squid seiner Wahl zu verbinden. Am Browser wird als Proxy localhost:3128 eingestellt und fertig ist die Laube. Man sollte aus dem Feld „No proxy for“ alle Einträge löschen.