Wie kann ich den gesamten Netzwerkverkehr über SSH tunneln?

157953
user

Immer, wenn ich das Internet von einem unsicheren Standort aus (z. B. öffentliches WLAN) verwende, benutze ich gerne einen SSH-Tunnel ( ssh -D port host), um sicherzustellen, dass mein Datenverkehr nicht gespürt werden kann. Leider scheint es viele Anwendungen zu geben, die keine Möglichkeit bieten, einen Proxy festzulegen (Flash ist ein wichtiges Beispiel).

Es fühlt sich an, als müsste es einen Weg geben, einen Tunnel für den gesamten Netzwerkverkehr von meinem Computer zu verwenden, aber ich weiß nicht, wie ich das machen soll. Jede Hilfe wäre sehr dankbar.

108
Natürlich können Sie nicht den gesamten Verkehr durch ssh tunneln, da dies das Tunneln von ssh durch sich selbst bedeuten würde, aber wir wussten, was Sie meinen. :) CarlF vor 14 Jahren 14
Dies ist eine gute Idee, aber Sie sind nur zwischen Ihrem Computer und Ihrem SSH-Endpunkt geschützt. Danach ist Ihr Datenverkehr im Klartext (sofern nicht anders geschützt, z. B. SSL). Zugegeben, es ist viel wahrscheinlicher, dass es sich um eine Drahtseilbahn handelt, aber trotzdem ... Sie können keinem Draht vertrauen, den Sie nicht kontrollieren. quack quixote vor 14 Jahren 1
Aber wenn Sie im breiten Internet unterwegs sind, haben Sie etwas Sicherheit, nur eines von Milliarden Paketen zu sein, oder? Wenn Sie sich mit einem öffentlichen WLAN verbinden, sind Sie eine von vielleicht drei Verbindungen, Sie können persönlich identifiziert werden usw. endolith vor 14 Jahren 6

7 Antworten auf die Frage

54
shellster

Um das zu tun, was Sie wollen, empfehle ich sshuttle .

Du verwendest es so:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv 

Es wird Ihren gesamten TCP-Verkehr automatisch für Sie tunneln. Sie können das --dnsArgument hinzufügen, damit es auch Ihren DNS-Verkehr tunnelt. Auf dem Remote-Server muss nur Python installiert sein.

Wenn Sie nur bestimmte Programme tunneln möchten, würde ich Proxy-Ketten empfehlen .

Sobald es installiert ist, starte deinen ssh socks proxy wie folgt:

ssh -fND 127.0.0.1:<local port> username@sshserver 

Dadurch wird ein "SOCKS" -Proxy gestartet, der den <lokalen Port> überwacht.

Bearbeiten Sie dann /etc/proxychains.conf, um auf denselben Port wie <lokaler Port> zu zeigen.

Starten Sie schließlich Ihr Programm, das Sie wie folgt proxy-ed möchten:

proxychains <program name> 

Es sollte einfach funktionieren. Einige Programme haben jedoch Probleme, mit Proxy-Ketten zu arbeiten. Denken Sie auch daran, dass Sie mit Firefox zusätzliche Elemente unter about: config ändern müssen, um DNS-Lookups über den Proxy zu erzwingen, anstatt sie zu umgehen.

Als zusätzliche Anmerkung zu Webbrowsern. Wenn sie Socks-Proxies unterstützen, müssen Sie nichts weiter tun, um den oben genannten ssh-Tunnel verwenden zu können. Geben Sie einfach 127.0.0.1 für den SOCKS-Proxyserver und den <lokalen Port> für den Proxy-Port ein.

EDIT 29.03.16

Da dieser Beitrag immer noch einige Upvotes sieht, dachte ich, ich würde ihn aktualisieren. Proxychains ist immer noch in den meisten Linux-Repos enthalten und funktioniert immer noch unter Linux. Das Projekt wird jedoch effektiv aufgegeben und funktioniert nicht unter OSX. Für Linux oder OSX empfehle ich dringend, ein Upgrade auf einen weiterhin gepflegten Zweig durchzuführen: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Neben der Arbeit unter Linux und OSX ist es einfach zu kompilieren und unterstützt auch das DNS-Tunneln.

Ich sollte auch eine andere Option erwähnen, die Redsocks ist. Es funktioniert ähnlich wie Proxychains (-ng) und ist wahrscheinlich auch in Ihrem Dist Repo: https://github.com/darkk/redsocks

44
PriceChild

man sshgibt genau ein Beispiel dafür. Ein SSH-basiertes vpn:

SSH-BASED VIRTUAL PRIVATE NETWORKS ssh contains support for Virtual Private Network (VPN) tunnelling using the tun(4) network pseudo-device, allowing two networks to be joined securely. The sshd_config(5) configuration option PermitTunnel controls whether the server supports this, and at what level (layer 2 or 3 traf- fic).  The following example would connect client network 10.0.50.0/24 with remote network 10.0.99.0/24, provided that the SSH server running on the gateway to the remote network, at 192.168.1.15, allows it:  # ssh -f -w 0:1 192.168.1.15 true # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252 

~~ snip ~~

 Since a SSH-based setup entails a fair amount of overhead, it may be more suited to temporary setups, such as for wireless VPNs. More permanent VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8). 

Wenn Sie diese neue Schnittstelle eingerichtet haben, müssen Sie sie nur noch als Standardroute festlegen, was eine andere Frage ist.

Könntest du etwas mehr erklären? Der Befehl ifconfig erstellt eine neue Schnittstelle namens tun0, oder? Oder wird tun0 von ssh erstellt und von ifconfig einfach weiter konfiguriert? Fügen Sie vielleicht ein für die Frage relevantes Beispiel hinzu. Nobody vor 7 Jahren 0
7
Peter Eisentraut

Suchen Sie in ssh nach der Option "Tunnel". Dadurch wird ein Tunnelgerät erstellt, dem Sie eine IP-Adresse zuweisen können. Anschließend ändern Sie die Standardroute, um diesen Tunnel zu verwenden.

4
Ambroz Bizjak

Ich habe eine Software entwickelt, mit der Sie TCP und optional UDP systemweit über einen SOCKS5-Proxy weiterleiten können.

http://code.google.com/p/badvpn/wiki/tun2socks

Es kann sogar auf einem Router installiert werden, um alle Verbindungen von Computern im LAN weiterzuleiten.

-1
ricbax

Wollte nur klären, dass (ssh -D-Port-Host) kein 100% sicherer Weg ist, um den Verkehr nicht zu erschnüffeln. Das Hinzufügen von (ssh -D -c Blowfish-Port-Host) ist die bessere Wahl, da Sie die Sitzung zumindest verschlüsseln möchten. Es gibt weitere Optionen, die Sie hinzufügen könnten, aber es ist leicht genug, "man ssh" in Ihr Terminal oder Google einzugeben, um eine vollständige Auflistung zu erhalten.

Ich denke, Sie suchen ein VPN (Virtual Private Network)

Werfen Sie einen Blick auf diesen Artikel, um die Unterschiede zwischen den beiden ( SSH vs. VPN ) oder einer guten zusammenfassenden Version zu verstehen, bevor Sie sich mit der Einrichtung eines eigenen VPN befassen. Wenn Sie sich für die VPN-Route entscheiden, empfehle ich OpenVPN, es ist kostenlos und bietet zahlreiche Dokumentation und Support.

schlechter Rat. "Blowfish" ist eine SSH-1-Chiffre. es ist schnell und sicher (seit 1999: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1), aber immer noch. Sie möchten wahrscheinlich `ssh -2 -C -D [...]` (SSH2 erzwingen, Komprimierung verwenden) und `-c` fallen lassen. Gemäß "man ssh" meines Systems ist die Verschlüsselungsliste in SSH2 standardmäßig auf "aes128-cbc", "3des-cbc", "blowfish-cbc" [etc] "gesetzt. Mein Punkt ist, wenn Sie "-c blowfish" anfragen, landen Sie vielleicht bei SSH1, was viel weniger sicher ist als SSH2. quack quixote vor 14 Jahren 6
Richtig, aber der Jeremy hatte den Eindruck, dass die Verbindung nur mit -D 8080 sicher war. Ich gab lediglich an, dass es besser war als das, was er benutzte. Sie machen einen gültigen Punkt und deshalb erwähne ich das Handbuch für weitere Optionen. ricbax vor 14 Jahren 2
Vielleicht sollten Sie Ihre Antwort ändern, da es ansonsten hilfreich ist. endolith vor 14 Jahren 0
Vergessen, dass ich diese Frage gestellt habe, diese Website nicht regelmäßig verwenden Danke für die Klarstellung ... Ich hatte den starken Eindruck, dass SSH standardmäßig sicher war. user vor 13 Jahren 0
WTF verwendet standardmäßig keine SSH-Verschlüsselung? LatinSuD vor 12 Jahren 8
-1
Kristian Hermansen

VIRTUELLE PRIVATNETZWERKE AUF SSH-BASIS ssh unterstützt das Virtual Private Network (VPN) -Tunneling mit dem tun (4) -Netzwerk-Pseudogerät, wodurch zwei Netzwerke sicher verbunden werden können. Die Konfigurationsoption sshd_config (5) PermitTunnel steuert, ob und in welcher Ebene der Server dies unterstützt (Layer 2 oder 3-Verkehr).

 The following example would connect client network 10.0.50.0/24 with remote network 10.0.99.0/24 using a point-to-point connection from 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway to the remote network, at 192.168.1.15, allows it.  On the client:  # ssh -f -w 0:1 192.168.1.15 true # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 # route add 10.0.99.0/24 10.1.1.2  On the server:  # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 # route add 10.0.50.0/24 10.1.1.1  Client access may be more finely tuned via the /root/.ssh/authorized_keys file (see below) and the PermitRootLogin server option. The following entry would permit connections on tun(4) device 1 from user “jane” and on tun device 2 from user “john”, if PermitRootLogin is set to “forced-commands-only”:  tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john  Since an SSH-based setup entails a fair amount of overhead, it may be more suited to temporary setups, such as for wireless VPNs. More perma‐ nent VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8). 
Bitte fügen Sie eine Quelle für Ihre Informationen hinzu. Hinweis: Dies ist eine alte Frage. Lorenzo Von Matterhorn vor 11 Jahren 1
-3
kolypto

Verwenden Sie diese Beispiele:

  • Leiten Sie Port 80 von einem Remote-Host an 8888 auf Ihrem localhost weiter

    ssh -fnN -L8888: localhost: 80 Benutzer @ Server

    Verwenden Sie dies, um auf Dienste auf einem Remote-Host zuzugreifen, die nur dort verfügbar sind

  • Leiten Sie Port 80 von yourlocalhost an 8888 auf einem Remote-Host weiter

    ssh -fnN -R8888: localhost: 80 benutzer @ server

    Verwenden Sie diese Option, damit andere Benutzer auf Ihre Dienste zugreifen können: Webserver oder was auch immer.

Prost! :)

Guter Kommentar, aber überhaupt nicht bezogen auf das, worüber wir hier sprechen. Reverse-ssh ermöglicht es einem SERVER, anzufordern, dass ein CLIENT EINEN Port des Verkehrs zu ihm routet. Um diesen Verkehr dann an das Internet weiterzuleiten, wäre eine weitere Konfiguration erforderlich. Sie müssen auch für jeden Port einen SSH-Tunnel einrichten. UND es muss vom Server initiiert werden, nicht vom Client - warum sollten Sie das jemals tun, wenn Sie nicht mussten? Beachhouse vor 10 Jahren 0