Bahnhöfe, Hotels, Cafés, Flughäfen – WLAN-Hotspots gibt es mittlerweile an fast jeder Ecke, und wer ein Notebook sein eigen nennt, möchte unterwegs auf die unendlichen Weiten des Internets nicht gerne verzichten. Aber auch beim Surfen im Uni-Netz, auf Kongressen oder bei einem Bekannten befindet man sich normalerweise in einem Netzwerk, welches nicht unter der eigenen Kontrolle ist und bei dem nicht mit Gewissheit gesagt werden kann, wer mit welchen Privilegien dort ebenfalls Zugriff hat.
Dabei muss man sich im Klaren darüber sein, dass der gesamte Datenverkehr, welcher über unverschlüsselte Protokolle (http, POP3, SMTP, IMAP, IRC, ICQ, MSN usw.) erfolgt, von anderen Teilnehmern des Netzes mitgelesen (und im schlimmeren Fall sogar verändert) werden kann. Dies ist in einem WLAN sogar noch wesentlich einfacher als in geswitchten Netzen, da die per Funk übertragenen Pakete ähnlich wie bei einem Hub von jeder Netzwerkkarte im Promiscuous-Mode mitgeschnitten werden können.
Eine sichere Lösung wäre ein VPN, jedoch ist der Aufwand, ein solches einzurichten, vergleichsweise hoch, und nicht jedem steht die dafür benötigte Infrastruktur (dedizierter Server bzw. vServer mit in den Kernel einkompilierten tun/tap-Devices) zur Verfügung. Dieses kleine Tutorial soll zeigen, wie man schnell und einfach mit Bordmitteln von Mac OS X eine sichere Verbindung heraus aus unsicheren Netzen erstellt. Voraussetzung ist jedoch der Zugriff per SSH auf einen vertrauenswürdigen Server. (Dieser Server benötigt selbstverständlich seinerseits Zugriff auf das Internet; in meinem Fall ist es ein gemieteter vServer.)
Wer einmal wissen möchte, welche Daten im Klartext durch die Leitung gehen, kann diese mit dem Kommandozeilenprogramm tcpdump mitschneiden.
sudo tcpdump -A -s 2048
gibt die Pakete auf dem Terminal aus, die Option -w ~/Desktop/capture.pcap speichert den Mitschnitt als Datei auf dem Desktop. Mit dem CocoaPacketAnalyzer kann diese dann komfortabel betrachtet und durchsucht werden.
Das Kommandozeilenprogramm ssh ist vielleicht bekannt als sicherer Ersatz für telnet oder ähnliche Software, die ein Terminal eines entfernten Rechners lokal zur Verfügung stellen. Tatsächlich bietet es jedoch viele weitere Funktionen, wie beispielsweise Portweiterleitung oder die Basis für sichere Alternativen zu FTP und RCP (SFTP und SCP).
Für unseren Zweck ist die Möglichkeit interessant, dass sich der ssh-Client wie ein SOCKS-Server verhalten kann. Dies ist nicht weiter kompliziert, ein Aufruf von
ssh -fND 4223 user@server
stellt eine Verbindung zu server her, loggt sich mit user ein, fragt nach dessen Passwort und startet auf server einen SOCKS-Proxy. Lokal werden jetzt alle Verbindungen auf Port 4223 verschlüsselt zu server weitergeleitet und die Verbindung von dort aus hergestellt. ACHTUNG! Es ist nicht die gesamte Strecke vom Client (also dem Notebook) bis zum (Web-)Server (beispielsweise einer besuchten Webseite) verschlüsselt; lediglich die Verbindung bis zum eigenen Server. Von dort aus erfolgt (wenn kein verschlüsseltes Protokoll verwendet wird) die Verbindung weiterhin unverschlüsselt. Dies reicht aber aus, um eventuellen Mitlesern in fremden, unsicheren Netzen vorzubeugen.
Der Parameter -f weist ssh an, in den Hintergrund zu gehen, so dass auf dem Terminal weiter gearbeitet werden kann. Die Ausführung von Remote-Kommandos wird mit -N vermieden; -D port startet das lokale, dynamische Port-Forwarding. Weitere Informationen gibt es wie gewohnt per man ssh.
Jetzt müssen die Programme noch so konfiguriert werden, dass sie localhost:4223 auch als SOCKS-Proxy verwenden. Dies kann man entweder in jedem Programm einzeln tun oder man verwendet eine entsprechend konfigurierte Netzwerkumgebung.

Eine solche Umgebung kann in den Netzwerk-Systemeinstellungen erstellt werden. Dazu muss aus der Liste der Umgebungen “Umgebung bearbeiten” ausgewählt werden – dort findet sich, etwas versteckt, die Möglichkeit, eine neue Umgebung anzulegen. In dieser Umgebung muss dann für jedes Netzwerkgerät, welches verwendet werden soll (vermutlich Ethernet und Air-Port) unter “Weitere Optionen” -> “Proxies” localhost:4223 als SOCKS-Proxy eingetragen werden.

Wenn alles funktioniert hat und die Umgebung ausgewählt wurde, kann man das Ergebnis mit einem Aufruf von wieistmeineip.com überprüfen. Hostname und IP sollten jetzt die des verwendeten Servers sein. Programme mit SOCKS-Unterstützung wie beispielsweise Safari können jetzt sicher verwendet werden, wer unbedingt Software verwenden will/muss, die keine native SOCKS-Unterstützung bietet, sollte sich tsocks mal anschauen.

{ 35 Kommentare… lese sie unten oder schreibe selbst einen }
ich habe zwar Tunnelblick und ipCop als openVPN Verbindung, aber finde dein Tutorial echt super! Danke!
Hammer!
musste jetzt sein
Verstehe das Tut nicht so recht.
Wo wird hier was verschlüsselt?
IMAPs und POP3s sollte man eh vorziehen, die meisten Provider unterstützen eh nur noch diese Protokolle.
Es gibt doch immer noch eine Instanz, die ins Inet gehen muss oder?
Geht es hier um die Verschlüsselung oder “Verschachtelung” des Traffics?
Background Infos fehlen irgendwie in diesem Tut.
Herr Schröder!
Wer solche Verbindungen nicht über SSL verschlüsselt, hat es sowieso nicht besser verdient.
Naja, hier geht es wahrscheinlich erst einmal darum, dass eventuelle Lauscher im fremden Netz den Traffic zwar mitsniffen, durch die Verschlüsselung zum Server wenig mit anfangen können.
Wie es ja im fettgedruckten Mittelteil auch steht (vielleicht nicht offensichtlich genug?).
So richtig verstanden habe ich es immer noch nicht
Szenario:
Ich sitze im Bahnhof, angemeldet an einem Hotspot.
Der Traffic zwischen meinem Notebook und AP muss unverschlüsselt erfolgen, da der AP nichts damit anfangen kann.
Wo greift hier nun der SSH Server?
@DB: Verschlüsselt ist der Verkehr, der sonst unverschlüsselt durch ein unsicheres Netz geht (z.B. ein WLAN-Hotspot). Die Pakete gehen nicht direkt ins Netz sondern werden verschlüsselt zum eigenen Server getunnelt, die eigentliche Verbindung wird von dort aus aufgebaut.
Selbstverständlich sollte man verschlüsselte Protokolle vorziehen, aber viele Web-Mailer bieten nicht einmal LogIn über HTTPS an…
Wenn ich technischer schreiben soll: gerne – will es nur so machen dass es möglichst alle verstehen…
Also nur was mit meinem unverschlüsseltem Traffic anfangen kann.
Da ja explizit kein WEP, WPA gewählt wurde. Würde auch keinen Sinn machen bei einem öffentlichem AP
@derJan:
Ja aber was aus meinem Notebook rauskommt, ist ja (wieder) unverschlüsselt oder?
Also auch Plaintext Password etc.
Jo, aber erst auf Deinem Laptop und nicht im fremden WLAN/LAN, in dem Du Dich befindest.
Sieh es so:
Laptop — Verschlüsselt –> WLAN/LAN — Verschlüsselt –> Dein Server — Unverschlüsselt –> Internet
Zwischen WLAN/LAN und Dein Server kommt noch eine verschlüsselte Internet-Verbindung, die habe ich gerade vergessen.
@DB…. der Vorteil läge z.Bsp.: darin, dass du dich per SSH auf deine Heimbüchse verbindest, dort per SMB deine Daten hast und keiner mitlesen kann. Auch deine Passwörter nicht. Wenn du dich dann über den Umweg wieder ins Netz wagst bist du zwar wieder sichtbar, aber nicht über das öffentliche Bahnhofs – WLAN. Dort bist du geschützt. Das finde ich gut!
Die Uni Freiburg hat ein VPN.
Ist also vorbildlich, oder?
Ach ja – kann das iPhone eigentlich VPNs?
Genial! Danke
!
@dolce:
Das verstehe ich.
Dann hat der Autor aber vergessen zu erwähnen, dass man zu Hause einen SSH Server aufbauen muss und auch die IP-Adresse bzw. DynDNS etc.
Und dieser Server / Proxy muss auch dem entfermten Client es ermöglichen zu surfen.
Nein, in seinem Fall hat er ein Beispiel mit einem vServer im Internet gemacht
!
Erstmal ein großes lob an den Autor. Super Tutorial. An die Option eines Socket-Proxies hatte ich bisher noch nie gedacht. Habe mich immer mit einzelnen SSH-Tunnels rumgeschlagen.
@DB: Nein, der Autor hat nichts vergessen. Es wurde dick angemerkt, dass der Zugriff per SSH auf einen vertrauenswürdigen Server Vorraussetzung sei. Das der entfernte Client/Server ein Surfen ermöglichen sollte, ist denke sollte jedem klar sein.
server ist kursiv geschrieben
Wusste nicht, dass er explizit einen entfernten Server meinte.
Es könnte sich ja auch um einen lokalen Dienst handeln, das wäre dann auch ein “Server”
Nun habe ich es auch verstanden
Gott sei Dank.
Im Prinzip aber nichts anderes als ein VPN.
Wenn gleich etwas einfacher zu managen.
Das aufwendige Management fällt weg, aber nicht die Infrastruktur.
@der Tho
Btw, wenn dieses Tut für Laien sein soll (Der Autor schreibt selbst, er will nicht zu technisch werden)
müsste er konsequenterweise auch erwähnen, wie und wo man dem entfernten Server beibringt, dass die Clients auch surfen dürfen.
Ich denke das ist dem “Laien” nicht klar.
Wegen der Frage mit dem VPN auf dem iPhone:
Ja ist möglich!
Einstellungen -> Allgemein -> Netzwerk -> VPN
@DB: sorry, manches halte ich vermutlich einfach für selbstverständlich…
Der entfernte Server muss natürlich seinerseits Verbindungen ins Internet (Port 80 / 443 etc.) erlauben, was aber normalerweise der Fall ist, da man sich ja über das Internet mit ihm verbindet
Ich verwende einen vServer, der u.a. auch als Mail- und Webserver funktioniert, deswegen musste da nichts weiter konfiguriert werden. OpenVPN ist dort nicht drin, da der Server mit Virtuzzo läuft und ich die tun/tap-Devices nicht in den Kernel einkompilieren kann, so kam ich auf den SOCKS-Tunnel…
@derJan:
Kein Thema.
Habe es dann ja auch verstanden
Was genau ist ein vServer? Den Begriff habe ich bis dato nicht gehört.
Und über überhaupt? Wie ist die Performance mit dieser SSH Geschichte?
Ein vServer ist im Prinzip eine virtuelle Maschine die im Internet steht. Ist günstiger als ein Root-Server und mit garantiertem Mindest-RAM auch brauchbar performant.
ssh kann übrigens mit dem Parameter -C auch noch zum Komprimieren der Daten via gzip gebracht werden, aber auch ohne reicht die Performance zum Surfen, Mailen und Chatten…
Okay
Aber der Parent, der Host, muss ja trotz allem laufen
Da kommt das Argument “günstiger” nur zum Tragen, wenn man sowieso zu Hause eine Maschine anhat
Nein, der Host steht bei einem Provider und du teilst dir im Prinzip einen Root-Server mit mehreren Leuten.
Beispiel: https://www.server4you.de/de/vserver/index.php
Ah, ok.
Das wusste ich nicht.
Klingt interessant (^_^)
Danke für das Tutorial.
Wie bei jedem Tutorial sollte man sich eben zusätzlich noch Informationen einholen um das ganze ab zu runden.
Verlagert das “Sicherheitsproblem”.
Der Administrationsaufwand für einen V-Server ist sagen wir mal auch nicht ganz ohne. Wenn nun jemand einem die Administration abnimmt muss man diesen nun vollkommen vertrauen.
Das Szenario seinen Mac zu Hause nicht auszuschalten, sondern schlafen zu legen und das Häkchen bei “Aufwachen bei administrativen Fernzugriff” anzuklicken und diesen dann als SSH-Proxy zu verwenden ist allerdings eine sehr geniale Idee. Schließlich muss dort nur der SSH-Port vom Router auf den Mac freigegeben werden. No-ip, dyndns und Co erledigen den Rest.
Auch wenn es jetzt etwas nörgelnd klang, die Idee eines SSH-Socks-Proxies ist wirklich gut.
Danke für den Beitrag, werde ich sicher mal ausprobieren
ja kann es (habe ich aber noch nicht getestet)
das tutorial ist echt super, es wäre auch eine idee sich sollch einen server zu teilen (mit freunden,familie usw).
hast du mal getestet wie so die auslastung ist wenn mehrere clients auf die ssh verbindung zugreifen? (der internet speed reicht ja bei servern im rechen zentrum eh dicke)
dann wird der bestimmt der apache server der auch auf dem server läuft recht lahm oder?
Naja, eine solche Verbindung ist nicht gerade dafür gedacht, große Dateien zu ziehen, benutze es hauptsächlich zum Surfen unterwegs. Ich teile mir den vServer mit zwei Freunden, haben aber bisher meines Wissens nach noch nicht gleichzeitig unseren Traffic darüber getunnelt. Auch der Apache und Postix/Dovecot sind nicht besonders ausgelastet, so dass sich das bis jetzt gegenseitig noch nicht gestört hat…
Klasse.
Liebe Mac-Gemeinde,
bin seit 1 Monat sogn. “Switcher”, dass ist dann auch so ziemlich das einzige Fremndwort, das ich als Nicht-Informatiker verstehe…
Also ich hab mir das neue Mac Book gekauft, Weil ich mich NICHT mit Sicherheitsproblemen&lücken beschäftigen wollte sondern einfach nur arbeien…..
Bin sehr viel unterwegs und könnte eine sichere verbindung gut gebrauchen..verstehe allerdings hier nur Bahnhof…was sind diese Server…muss ich einen mieten vorher…wo..wie? Also ich hab nur EIN Macbook sonst nix und mag mir auch nicht irgendwo ne komplizierte Technik hinstellen, nur um sicher surfen zu können…
Also, meine Frage wäre: Gibts eine EINFACHE Möglichkeit sicherer Datenübertragung/ Surfens ohne zusätzliche Infrastruktur und Installation? Vielen Dank an die Mac-Gemeinde!
Der Newcomer
Die im Beitrag geschilderte Problematik besteht generell beim Surfen in fremden Netzen, egal ob von Windows, Linux oder einem Mac aus. Soll heißen: die Gefahr ist nicht im MacBook sondern “unterwegs” auf der Strecke zum Empfänger.
Die oben beschriebene Technik funktioniert ebenfalls Betriebssystem-unabhängig, ich habe lediglich die genaue Verwendung unter Mac OS X beschrieben.
Allgemeine Sicherheit im Internet wäre mindestens einen Extra Beitrag hier wert, vielleicht finde ich irgendwann mal die Zeit einen zu verfassen.
Generell ist zu sagen: solange du nicht bei dir zu Hause ins Internet gehst musst du davon ausgehen, dass deine Daten mitgelesen werden können, unabhängig des verwendeten Betriebssystems. Beim Surfen solltest du also verschlüsselte Seiten bevorzugen (https:// – Schloss oben rechts in der Ecke des Safari-Fensters) und alle Protokolle (ICQ, AIM, MSN, IRC etc.) meiden, die unverschlüsselt kommunizieren.
{ 2 Trackbacks }