Ssh Socks Proxy
Zur Navigation springen
Zur Suche springen
Prinzip
Beispiel
- Problem: nas-system hat kein Default Gateway
- Auf ssh-host wird ein SocksProxy aktiviert
- Es wird gleichzeitig ein Tunnel zu jump-host geöffnet
- Dieser SocksProxy öffnet den Port 1080
- Alle Anfragen auf diesen Proxy werden gehen durch den Tunnel
- Wenn sie den Tunnel verlassen bekommen sie die Absende Addresse von jump-host
- Antwort Pakete von Servern werden wieder durch den Tunnel zurück geschickt
- Und abschliessend dann vom SocksProxy zu den Clients
- Man kann also nun auf dem Notebook den SocksProxy im Browser eintragen
- Danach kann man auf die Weboberfläche des nas-systems zugreifen
Auf ssh-host lokal
- ssh -fnD 1080 root@jump-host -N
Auf ssh-host global
- ssh -fnD "*:1080" root@jump-host -N
Erklärung der Optionen
-f → Startet SSH im Hintergrund, nachdem ggf. ein Passwort eingegeben wurde. Praktisch, wenn die Session nur als Tunnel läuft und man nicht am Terminal hängen will.
-n → Leitet stdin nach /dev/null um. Verhindert, dass SSH Eingaben von der Shell entgegennimmt. Wird oft zusammen mit -f genutzt.
-N → Weist SSH an, keine Remote-Kommandos auszuführen. Der Tunnel bleibt bestehen, aber es wird keine Shell auf dem Ziel geöffnet.
-D [Bindadresse:]Port → Aktiviert einen SOCKS-Proxy auf dem angegebenen Port. Beispiel -D 1080: bindet lokal auf 127.0.0.1:1080. Mit -D *:1080 (bzw. "*:1080") auch auf allen Interfaces (global erreichbar).
Beenden
- fuser -vkn tcp 1080
Socksify
Eine weitere SSH-Verbindung über den SocksProxy schicken (ohne Dante)
- Man will nicht nur den Browser, sondern auch eine zweite SSH-Verbindung durch den bestehenden SocksProxy (s.o., Port 1080) tunneln.
- Ohne zusätzliches Paket geht das über SSHs eigene
ProxyCommand-Option plusncaus dem Paketnetcat-openbsd(das beherrscht SOCKS selbst über die Optionen-X/-x):
ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" -p 8472 root@zielhost
Wie es funktioniert
ProxyCommandsagt SSH: Statt selbst eine TCP-Verbindung zum Ziel aufzubauen, einen Befehl starten und über dessen stdin/stdout mit dem Server reden. SSH ersetzt%hdurch den Zielhost und%pdurch den Zielport.nc -X 5 -x 127.0.0.1:1080 %h %pverbindet sich zum lokalen SocksProxy (SOCKS Version 5) und weist ihn an, intern zu%h:%pweiterzuverbinden.- Das lokale
sshmerkt davon nichts und baut seinen normalen Handshake/Login einfach über diese durchgereichte Leitung auf.
Hinweis: Options-Reihenfolge
-p <port>kann bei ssh sowohl vor als auch nachuser@hoststehen, beides wird korrekt ausgewertet. Schlägt die Verbindung scheinbar grundlos fehl, liegt es meist woanders: falscher Port/IP auf der Zielseite, SocksProxy (-D) läuft nicht mehr, oder Firewall zwischen Proxy und Ziel.
Alternative: Dante/Socksify
- Tunnelt beliebige Programme global über
LD_PRELOAD, siehe Dante Client. Lohnt sich, wenn man nicht nur SSH, sondern viele/beliebige Programme proxifizieren will; für nur SSH ist dieProxyCommand-Variante schlanker, da kein zusätzliches Paket/Config-File nötig ist.
