Heute will ich hier (anlässlich der Cryptoparty 49 zur Vorbereitung auf den #33c3) kurz erklären, wie man den kompletten Internetverkehr eines Windows-Rechners über einen SSH-Tunnel leiten kann – eine verschlüsselte Datenverbindung zwischen Ihrem Rechner und einem SSH-Server irgendwo im Internet, über die der komplette Datenverkehr abgewickelt werden soll. Das kann in vielen Fällen sehr praktisch sein:
- Sie befinden sich in einem Netzwerk, in dem ihre Daten möglicherweise mitgelesen werden, etwa in einem unverschlüsselten WLAN (oder im unglaublichen LAN/WLAN am CCC ;-) ). Wenn man nun den gesamten Internetverkehr ihres Rechners über einen SSH-Tunnel schickt, können zwar weiterhin Datenpakete abgefangen werden, diese sind aber verschlüsselt und daher für Lauscher praktisch wertlos. Außerdem sieht man im Netzwerk nur mehr EINE Datenverbindung von ihrem Rechner ausgehen – die zum SSH-Server. Somit kann auch niemand im ungesicherten Netz mitverfolgen, welche Websites sie aufrufen oder welche Dienste sie gerade nutzen, weil alles über die verschlüsselte Verbindung zum SSH-Server verläuft.
- Sie wollen eine Website oder einen Internetdienst aufrufen, der von ihrem Rechner aus nicht erreichbar ist, aber vom SSH-Server aus schon. Das funktioniert deshalb, da bei einer Verbindung über den SSH-Tunnel es nach außen so aussieht, als würde der Verbindungsversuch vom SSH-Server und nicht von Ihrem Rechner kommen (Beispiel: IP-basierte Sperren, Zensur).
ACHTUNG: die Verschlüsselung ist nur zwischen Ihrem Rechner und dem SSH-Server aktiv, vom Server bis zum Ziel läuft ihre Verbindung möglicherweise ungesichert – wenn Sie also beim Websurfen https benutzen, wenn vorhanden, schadet also weiterhin nicht. Da über den SSH-Server all ihr Netzwerkverkehr läuft, verwenden Sie bitte ausschließlich SSH-Server, denen Sie hundertprozentig vertrauen!!!
Erstens: SSH-Verbindung aufbauen
Für Windows empfehle ich das kostenlos erhältliche Programm putty. Diese Erklärung bezieht sich ebenfalls darauf. Weiters brauchen Sie die Zugangsdaten zu einem SSH-Server, ich habe für diese Tests einen Zugang bei uberspace.de verwendet.
- Installieren Sie putty auf Ihrem Rechner und starten Sie es. Links in der Liste „Category“ den Punkt „Session“ anklicken. Tragen Sie den Hostnamen Ihres SSH-Servers ein: „Host name or IP-Address“, Port (meist 22). Bei „Connection Type“ achten Sie darauf, dass SSH gewählt ist.
- Klicken Sie auf „Connection -> SSH -> Tunnels“.
- Unter „Add new forwarded port“ tragen Sie eine Portnummer über 1000 ein, höchstens 65535. Ich verwende hier im Beispiel 5150
- Das Feld „Destination“ bleibt leer
- Das Feld „Dynamic“ anhaken
- Klicken Sie auf ADD – nun sollte in der Liste oberhalb etwas wie D5150 stehen (mit ihrer gewählten Portnummer)
- Optional: unter „Connection -> Data“ kann man bei „Auto-login username“ den Benutzernamen für den SSH-Server eintragen. Nach dem Passwort wird man jedoch beim Einloggen weiterhin gefragt!
- Damit man all diese Daten nicht jedesmal neu eintragen muss, kann man nun unter „Session“ ins Textfeld unter „Saved Sessions“ einen Namen eintragen (etwa „SSH-Tunnel Uberspace“) und auf „Save“ klicken.
- Ein Klick auf „Open“ startet nun die Session mit den gewählten Einstellungen.
- Das putty-Sessionfenster öffnet sich. Beim ersten Start wird nachgefragt, ob der Server-Key vertrauenswürdig ist und gespeichert werden soll, das kann man getrost mit „Yes“ beantworten.
- Im schwarzen Sessionfenster wird nun das Passwort für die Verbindung abgefragt – eingeben und mit Eingabetaste bestätigen. Man kann prinzipiell putty auch beibringen, sich mit einem Schlüsseldatei einzuloggen, das übersteigt aber hier etwas den Rahmen.
- Nun sollte die Verbindung zum SSH-Server stehen. Auf der vorhin gewählten Portnummer (in meinem Fall 5150) läuft nun ein SOCKS-Proxy, über den wir unsere Verbindungen leiten können.
Das ist die Voraussetzung für alle folgenden Erklärungen – diese Verbindung zwischen putty und dem SSH-Server muss zuerst hergestellt sein, bevor alles weitere funktioniert!
Zweitens: Internetverkehr über den SOCKS-Proxy leiten
Es gibt nun mehrere Möglichkeiten, die Internetverbindung über den Proxy zu leiten: viele Programme unterstützen die Verbindung über einen SOCKS-Proxy. Diese Methode ist allerdings lückenhaft, da viele Programme DNS-Anfragen weiterhin am Proxy vorbei über die normale Verbindung leiten. So könnte ein Lauscher im Netzwerk etwa mitlesen, welche Websites Sie besuchen oder per DNS-Hijacking ihre Anfrage auf einen falschen Server umleiten. Manchmal sind auch DNS-Anfragen für bestimmte Sites gesperrt (etwa in Ländern mit strikten Zensurbestimmungen), sodass die betreffende Website zwar technisch aufgerufen werden könnte (über den SSH-Tunnel), aber die zugehörige DNS-Anfrage geblockt wird. Ich empfehle daher die globale Umleitung (siehe weiter unten)
Firefox über SOCKS-Proxy leiten
- „Einstellungen -> Erweitert -> Netzwerk“, dort bei „Verbindung“ auf „Einstellungen“
- „Manuelle Proxy-Konfiguration“ anklicken
- „Für alle Protokolle diesen Proxy-Server verwenden“ darf NICHT angehakt sein.
- Bei „SOCKS-Host“ 127.0.0.1 eintragen, bei „Port“ die von Ihnen gewählte Portnummer von vorhin (z.B. 5150)
- „SOCKS v5“ anhaken
- „Externer DNS-Server“ anhaken (dann laufen alle DNS-Requests ebenfalls über den Proxy)
Internet Explorer / Edge über Proxy leiten (Windows 10)
- „Systemsteuerung -> Netzwerk & Internet -> Internetoptionen“, dort Registerkarte „Verbindungen“ aufrufen.
- „LAN-Einstellungen“ anklicken.
- „Proxyserver für LAN verwenden“ anhaken.
- Auf „Erweitert klicken, bei „SOCKS“ 127.0.0.1 eintragen, bei „Port“ die von Ihnen gewählte Portnummer von vorhin (z.B. 5150)
- 3x auf OK klicken, bis alle Dialogfelder zu sind.
- Mir ist kein Trick bekannt, wie man DNS-Anfragen ebenfalls über den Proxy geroutet bekommt. Tipps sind willkommen.
Analog dazu lässt sich in vielen anderen Programmen ebenfalls die Verbindung via SOCKS-Proxy konfigurieren, etwa in Thunderbird (unter „Extras -> Einstellungen -> Erweitert -> Netzwerk & Speicherplatz -> Einstellungen“) – allerdings meist auch ohne DNS-Einstellungsmöglichkeit.
Globale Umleitung – ALLE Programme über den SOCKS-Proxy leiten
Dazu benötigt man ein Programm, das den kompletten Datenverkehr über den Proxy leiten kann. Nach einigen Tests verwende ich ProxyCap: halbwegs vernünftiger Preis, 30 Tage kostenlos mit vollen Funktionen testbar, halbwegs aktuell. Etliche der anderen verfügbaren Tools sind seit Jahren nicht mehr aktualisiert worden. Darauf bezieht sich auch die folgende Kurzanleitung:
- ProxyCap installieren, Rechner neu starten.
- Das Programm startet nun automatisch und sitzt als unscheinbares Symbol in der Taskleiste: Rechtsklick auf das Symbol, „Configuration“ anklicken.
- Unter „Ruleset -> Proxies“ einen neuen Proxy anlegen: rechts oben die Maus kurz über die Buttons halten, dann sieht man wofür die einzelnen Buttons jeweils sein sollen. „New Proxy Server“ anklicken.
- Unter „Display Name“ einen Namen eintragen (z.B. „Putty-Proxy“)
- Als Type „SOCKS5“ auswählen, als Hostname 127.0.0.1 eintragen, bei „Port“ die von Ihnen gewählte Portnummer von vorhin (z.B. 5150)
- „Proxy requires authentication“ nicht anhaken.
- OK klicken.
- Nun muss man noch definieren, welcher Traffic umgeleitet wird. Putty soll natürlich nicht über den Proxy geleitet werden, alle anderen Programme schon:
- Wechseln Sie auf „Ruleset -> Rules“, rechts oben die Maus kurz über die Buttons halten, dann sieht man wofür die einzelnen Buttons jeweils sein sollen. „Quick add rule“ anklicken.
- Rule action „Force direct connection“ auswählen, „Program -> Specify“ anhaken, danach putty.exe raussuchen (Button mit den drei Punkten unterhalb des Computer-Icons klicken, die Datei putty.exe befindet sich meist unter C:\Program Files (x86)\Putty)
- „TCP“ und „UDP“ anhaken, bei „Rule Name“ einen Namen eintragen, etwa „Putty direkt verbinden“.
- Rechts bleibt überall „Not restricted“ angehakt.
- OK klicken.
- Jetzt noch die Regel für alle anderen Programme:
- nochmal „Quick add rule“ anklicken.
- Rule action „Redirect through proxy“, „Resolve Names remotedly“ und „All programs“ muss angehakt sein
- „TCP“ und „UDP“ anhaken, bei „Rule Name“ einen Namen eintragen, etwa „Alle Programme umleiten“.
- Rechts bleibt überall „Not restricted“ angehakt.
- OK klicken.
- Nun sollte in der Liste die Regel „Putty direkt verbinden“ ganz oben stehen. Wenn sie das nicht tut: anklicken und mit dem Button mit Pfeil nach oben bis ganz nach oben verschieben.
- Danach OK klicken. Die Konfiguration ist nun abgeschlossen.
Mit Rechtsklick auf das Taskleistensymbol von ProxyCap kann man nun „Enable ProxyCap“ auswählen, um die Umleitung zu aktivieren. Deaktivieren funktioniert ebenfalls mit Rechtsklick: „Disable ProxyCap“. Mit „Status and Logs“ kann man ein Infofenster aufrufen, das bei der Fehlersuche sehr hilfreich sein kann.
Anmerkung: man kann mit ProxyCap auch direkt eine SSH-Verbindung aufbauen – das mache ich deshalb nicht, weil darüber keine UDP-Verbindungen geleitet werden können. Beim Bestellen der Vollversion von ProxyCap hat die Währungseinstellung „Euro“ nicht funktioniert, mit „US Dollar“ gings problemlos.
Drittens: Testen der Verbindung mit und ohne SOCKS-Proxy
Rufen Sie vor dem Verbinden mit putty eine Webseite auf, die Ihre IP-Adresse anzeigt (etwa meine Diagnose-Seite). Stellen Sie die Verbindung mit putty zum SSH-Server her und schalten Sie die Umleitung über den Proxy ein (etwa mit ProxyCap oder mit einer der Einstellungsbeispiele oben). Laden Sie die Seite mit der IP-Adresse neu – diese sollte nun eine andere als vorhin anzeigen, weil Sie nach außen nun mit der IP des SSH-Servers im Netz sind.
Fragen? Anmerkungen? Ab damit in die Kommentare! :-)
- Rezension vs. Rezession - Mi. 27.12.2023
- Was Corona und Lotto gemeinsam haben - Di. 9.11.2021
- Heute vor 20 Jahren hat das große Abenteuer Segeln für mich begonnen :-) - Mi. 28.4.2021
Eine interessante Methode, kannte ich gar nicht. Mir persönlich aber trotzdem zu aufwendig, da es sowieso nicht viel zu spionieren gibt bei mir ;)