SSH tunneling
Een remote Linux server met een strak afgestelde firewall kan soms erg naar zijn. Vooral taken als software installeren of het systeem upgraden kunnen erg moeilijk of zelfs onmogelijk worden. Maar, om dit toch voor elkaar te krijgen is er gelukkig een laatste redmiddel… SSH tunneling!
Als de remote server geen outbound connecties toestaat maar wel inbound SSH, is het toch mogelijk om de server te updaten met bijvoorbeeld apt-get, ondanks dat apt-get van HTTP gebruik maakt om pakketten te downloaden. Dit kun je doen door op je lokale workstation een SOCKS proxy op te zetten en deze via een SSH tunnel beschikbaar te stellen op de remote server.
Om een lokale SOCKS proxy te creëeren die vervolgens als ‘internetpoortje’ gebruikt kan worden:
ssh -D 8081 localhost
Je hebt nu een SOCKS proxy op poort 8081 op je lokale workstation beschikbaar. Maak nu een tunnel zodat de remote server SOCKS proxy van je workstation over SSH kan gebruiken:
ssh -nNT -R 8080:127.0.0.1:8081 <remote_ip>
Je hebt nu op de remote server poort 8080 op 127.0.0.1 getunneld naar poort 8081 op je machine. Je kunt localhost:8080 op de remote server nu dus als SOCKS proxy gebruiken.
Done! Maar… dit kan natuurlijk ook allemaal in één commando:
ssh -t -D 8081 localhost "ssh -nNT -R 8080:127.0.0.1:8081 <remote_ip>"
En om het helemaal makkelijk te maken neem je de volgende functie op in je .profile of .bashrc:
function ssh_proxy { ssh -t -D 8081 localhost "ssh -nNT -R 8080:127.0.0.1:8081 $1" }
Je hoeft nu dus alleen nog maar ssh_proxy te gebruiken om remote een SOCKS proxy op te zetten.
Om er nu voor te zorgen dat apt-get gebruik kan maken van deze proxy kan tsocks gebruikt worden. tsocks is een transparante SOCKS proxy library, waarmee het mogelijk is om applicaties die geen SOCKS ondersteuning bieden toch alle netwerk connecties door een proxy heen te laten sturen.
Installeer op de remote server tsocks (voor Ubuntu 8.04: https://launchpad.net/ubuntu/hardy/i386/tsocks/1.8beta5-6) door het tsocks pakket naar de server toe te SCP’en en vervolgens met bijvoorbeeld dpkg -i te installeren.
Maak remote een tsocks configuratie aan in /etc/tsocks.conf:
server = 127.0.0.1
server_port = 8080Voer op de remote server apt-get update uit via tsocks om te testen of de configuratie gelukt is:
tsocks apt-get updateExtra: Rubygems
Als je Rubygems wilt installeren werkt tsocks gem update helaas niet. Daarvoor moet je eerst een HTTP-proxy zoals bijvoorbeeld Polipo installeren:
apt-get install polipo
Om Polipo samen te laten spelen met een SOCKS-parent dient /etc/polipo/config aangepast worden:
socksParentProxy = "localhost:8080" socksProxyType = socks5
Als je nu Polipo herstart (/etc/init.d/polipo restart) maakt Polipo gebruik van een SOCKS proxy. Rubygems kun je vervolgens gebruiken met het volgende commando:
gem update --http-proxy http://localhost:8123/

Om het leven nog wat eenvoudiger te maken is er de ~/.ssh/config file.
Hierin kun je diverse configuraties definieren en mbv het command ssh uitvoeren.
Daarbij hoeft niet te verwijzen naar een specifiek host, je kunt ook voor dezelfde host verschillende namen gebruiken.
Voor windows gebruikers is er Putty.
Daar kun je ssh tunnels mee definieren onder Connection – SSH – Tunnels.
De betreffende configuratie kun je dan op de commandline laden (-load ).
Om het geheel nog wat verder dicht te timmeren kunje ssh toegang alleen toestaan op basis van een public/private key combo en zo misbruik voorkomen.
Anne Krijger May 25, 2009 18:03
Mooie toevoeging! Over beveiliging gesproken, een ander leuk extraatje om SSH nog wat verder dicht te timmeren is DenyHosts (http://denyhosts.sourceforge.net). Dit is een scriptje dat logfiles in de gaten houdt en bij teveel mislukte login pogingen de kwaadwillende host in de hosts.deny file slingert, een handig middeltje tegen bruteforce attacks dus.
Stefan Borsje May 25, 2009 18:15