Kann ich SSH erstellen, um HTTP durch einen Server zu tunneln, als wäre es ein Proxy?

33

Angenommen, ich habe ein serverund client. Ich muss eine Verbindung von clientzu einem websiteDurchgang herstellen, serverals wäre es ein Proxy.

Ist es möglich, dies mit einem SSH-Tunnel zu tun, oder muss ich einen Proxy-Dienst auf dem installieren server?

Jakub Arnold
quelle

Antworten:

43

Sie können dies mit ssh tun

ssh -L 80:remotehost:80 user@myserver

Sie haben dann einen Tunnel von Ihrem lokalen Port 80 zu dem entfernten Port 80. Dies muss nicht mit myserver identisch sein. Um dies transparent zu machen, sollten Sie der hosts-Datei einen Eintrag hinzufügen. Wenn Sie dies nicht tun, funktionieren vhosts nicht. Wenn Sie eine SOCKS-Proxy-Verbindung möchten, können Sie auch verwenden

ssh -D 5000 user@myserver

Dadurch wird ein SOCKS-Proxy auf dem lokalen Host-Port 5000 erstellt, der alle Anforderungen über myserver weiterleitet.

Wienczny
quelle
2
Wenn dieser Tunnel von Clients außerhalb Ihrer Box verfügbar sein soll, fügen Sie die Option -g hinzu.
mr-euro
1
Der Befehl, wie er geschrieben wurde, hat bei mir nicht funktioniert. Ich musste den entfernten Host wie folgt durch den Loopback ersetzen: ssh -L 80: 127.0.0.1: 80 user @ myserver
eficker
Wäre sinnvoller, wenn der Remote-Port anders wäre als der lokale. Ein ssh -L 81:remotehost:80 user@myserverlokaler Port 81 spricht so, als wäre er 80 auf Remote.
Rafareino
1
Wenn Sie den SOCKS-Proxy über Ihre ~ / .ssh / config hinzufügen möchten, verwenden Sie:Host myserver User user DynamicForward 5000
bonh
15

Ja, es ist möglich.

Führen Sie ssh -D port user@hostIhren Client aus und richten Sie ihn so ein, dass er Ihre Box als SOCKS-Proxy verwendet.

Wenn Sie speziell einen HTTP-Proxy benötigen, können Sie Proxy-Ketten verwenden und diesen über die vorherigen SOCKS weiterleiten.

Herr-Euro
quelle
5

Putty macht das auch ganz gut.

Gehen Sie unter SSH zu Tunnels. Stecken Sie unten 8080 in den Hafen und lassen Sie es als Ziel schwarz und wählen Sie das Optionsfeld "Dynamisch". Das ist alles, was Sie tun müssen, stellen Sie jetzt mit Putty eine Verbindung zum Server her.

Sobald die Verbindung hergestellt ist, befindet sich auf Ihrem lokalen Host ein Proxyserver an Port 8080, der alle Anforderungen über Ihren Server überträgt.

Verwenden Sie nun einen Webbrowser und richten Sie den Proxy ein, indem Sie host = localhost und port = 8080 festlegen und sicherstellen, dass es sich um einen von Ihnen ausgewählten SOCKS-Proxy handelt. Ich mache das die ganze Zeit, also, wenn Sie Firefox verwenden, stellen Sie sicher, dass Sie das FoxyProxy-Plugin installieren, da es den Proxy mit einem Klick ein- und ausschalten kann.

Achtung: Beachten Sie, dass Ihre DNS-Anforderungen standardmäßig nicht per Proxy übermittelt werden. Daher wird die Website, die Sie über den Proxy besuchen, weiterhin protokolliert (sofern diese Inhalte protokolliert werden). Sie können Firefox auch auf Proxy-DNS-Anforderungen einstellen, dies geschieht jedoch nicht standardmäßig.

J Sidhu
quelle
5

sshuttle funktioniert wie ein VPN aber über SSH.

Transparenter Proxy-Server, der als VPN eines armen Mannes funktioniert. Vorwärts über ssh. Benötigt keinen Admin. Funktioniert mit Linux und MacOS. Unterstützt DNS-Tunneling.

https://github.com/sshuttle/sshuttle

Kasper Grubbe
quelle
2

Damit ein Proxy einen Computer ausführen kann und andere Clients eine Verbindung herstellen können, benötigen Sie die Option -g. Zum Beispiel würden Sie dies auf dem Server mit dem Namen foo ausführen:

ssh -g -ND 9191 root@remotehost

Sie können dann den Proxy im Browser eines Clients so einstellen, dass er den Server foo und den Port 9191 für einen SOCKS-Proxy verwendet. Die Clients senden ihre Anfragen zu foo, die wiederum die Anfrage über ssh an remotehost weiterleiten. Im Internet sieht es also so aus, als würden sie Remotehost verwenden.

Wenn Sie DNS-Anfragen auch mit Firefox weiterleiten möchten, bearbeiten Sie die about: config in Firefox und setzen Sie network.proxy.socks_remote_dns auf true.

Kyle Brandt
quelle