Een van de meest krachtige tools die op elk unix of linux systeem beschikbaar zijn is ssh
. Je kan het gebruiken om een secure shell te openen op een andere machine, of daar een commando te runnen, verkeer te tunnelen of zelfs om remote bestandssystemen te mounten. Je kan er ook een proxy mee opzetten en zelfs een transparant systeembreed vpn, met wat hulpscripts.
Als je gewoon een secure vpn nodig hebt is het logisch om daar een gebruikelijke oplossing zoals OpenVPN of Wireguard voor te gebruiken. Maar er zijn genoeg gevallen denkbaar waar dit lastig of onmogelijk is. Deze software is lang niet altijd beschikbaar en vaak heb je niet de rechten of mogelijkheid om die te installeren.
Maar een ssh server heb je vaak wel. Daarmee kun je zonder extra tools heel makkelijk een lokale SOCKS5 proxy opzetten.
Het SOCKS5 protocol heeft in de basis helemaal geen encryptie. Maar als je het verkeer tunnelt over ssh is alles natuurlijk wel encrypted. Dat maakt het samen met de authenticatie van ssh op basis van keys veilig genoeg.
Opzetten is simpel:
ssh -D8080 -N user@hostname
-
-D8080
opent een SOCKS server op de lokale tcp poort 8080 -
-N
(optioneel) zorgt ervoor dat er geen commando (zoals een shell) wordt uitgevoerd op de remote host.
Vervolgens kun je in elk programma met ondersteuning voor SOCKS proxy's gebruik maken van deze tunnel. Dit moet je wel per applicatie configureren. Bijvoorbeeld in de network instellingen van firefox:
Dit is meteen het nadeel: de applicatie moet wel SOCKS ondersteuning hebben. Veel applicaties hebben dat niet, en die kunnen dus niet gebruik maken van de proxy.
Je zou misschien zelf aan de gang kunnen gaan met bijvoorbeeld iptables om al het verkeer door de proxy te dwingen maar het is veel makkelijker en sneller om daar een kant en klare tool voor te gebruiken: sshuttle.
sshuttle
is een python applicatie die de kracht van ssh
combineert met tools als iptables
(linux) of pfSense
(MacOS). Hiermee wordt een transparante, systeembrede proxy gerealiseerd naar de remote server, zonder dat je daar iets extra's voor hoef te installeren of configureren. De tool is eenvoudig te installeren met brew install sshuttle
onder MacOS, of met sudo apt install sshuttle
onder Debian of Ubuntu.
Vervolgens zet je de transparante proxy op met:
sshuttle -r user@hostname 0.0.0.0/0
Tip: start dit in een screen sessie zodat de verbinding niet verbroken wordt als je de terminal sluit
Met 0.0.0.0/0
zorgen we ervoor dat al het verkeer over de tunnel gaat. Maar je kan hier specifieke ip-adressen en/of subnetten opgeven.
NB: Het redirecten van al het netwerkverkeer op een machine vereist root-rechten. De lokale user waaronder je dit draait heeft dus sudo
rechten nodig om sshuttle
als root te draaien. Op de remote machine heb je geen speciale rechten nodig.
Voor meer informatie zie de volledig documentatie.
Als de proxy draait kun je testen of het echt werkt met het volgende commando:
curl ifconfig.me
Dit geeft als output je externe ip, en dit zou nu in het ip van de remote server moeten zijn.