Finalist

Finalist Developers Blog

SSH tunneling

15 May 2009 10:41 · Stefan Borsje · Algemeen, Operating systems en servers

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 = 8080

Voer op de remote server apt-get update uit via tsocks om te testen of de configuratie gelukt is:

tsocks apt-get update

Extra: 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/
Share and Enjoy:
  • E-mail this story to a friend!
  • Print this article!
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogosphere News
  • Fleck
  • NuJIJ
  • Slashdot
  • StumbleUpon
  • LinkedIn
  • Twitter

2 reacties »

  1. 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

  2. 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

Reageer

RSS feed for comments on this post · TrackBack URI