Tunnla med SSH

En bra funktion med SSH är möjligheten att använda sig av SSH-tunnlar. Detta kan vara nyttigt på många sätt och vis, speciellt på ställen där man inte vill eller kan öppna upp brandväggar av olika skäl. En annan fördel med att tunnla saker över SSH är att det blir krypterat.

Jag tänkte ta och visa två exempel på vad man göra med en SSH-tunnel.

Scenario 1)

Säg att du vill kunna ansluta mot en MySQL server och den är bakom en brandvägg eller på annat sätt är oåtkomlig via internet. Den kör på en server med hostnamnet vps-54456.cloudnet.se. Vad du gör då är att använda följande metod som fungerar fint om du använder Linux eller OSX. Man kan även sätta upp SSH-tunnlar med exempelvis putty i windows. Det finns bra guider för hur man gör om man googlar lite på det.
ssh -L 3306:localhost:3306 root@vps-54456.cloudnet.se
Nu är din SSH tunnel uppe och du kan ansluta mot MySQL genom att anropa localhost:3306
Om det visar sig att du redan kör en lokal MySQL instans så kan du behöva byta den lokala porten.
Nedanstående exempel visar en tunnel där den lokala porten är 3308.
ssh -L 3308:localhost:3306 root@vps-54456.cloudnet.se
Denna metod fungerar även för att ansluta mot andra slags tjänster. Det kan vara exempelvis Solr, Elasticsearch, PostgreSQL eller Redis.

Scenario 2)

Du kan även använda dig av SSH-tunnlar om du behöver komma åt något på exempelvis ett intranät som endast kan nås av specifika ip-addresser och du inte vill sätta upp eller använda dig av VPN av en eller annan orsak. Följande exempel fungerar med Linux och OSX. Förutsättningarna är följande.

Siten du vill nå: intranet.kundsiten.se som lyssnar på den vanliga http porten.
Server som har access till siten: vps-54456.cloudnet.se

Det vi får börja med är att sätta upp en SSH-tunnel som pekar mot servern som intranätet ligger på. Anledningen till att vi använder port 8080 lokalt är för att en normal användare inte får öppna portar under 1024.
ssh -L 8080:intranet.kundsiten.se:80 root@vps-54456.cloudnet.se
Nu kan vi nå servern som intranet.kundsiten.se finns på via localhost:8080 och om det är default vhosten på den servern så brukar det fungera fint. Om det är så att det är en vhost på servern och siten gör redirects för att man ska använda sig av samma hostname så kan man sätta upp en pekare i hosts filen.
sudo vi /etc/hosts
127.0.0.1 intranet.kundsiten.se

Nu kan man surfa mot http://intranet.kundsiten.se:8080 och all trafik går via den SSH-tunneln som blev uppsatt tidigare.

Man får dock inte glömma att ta bort pekaren när man är färdig.

Om man vet med sig att siten inte gör redirects och man ofta är på ett ställe där man har direkt access och lika ofta är på ett ställe som inte har direkt access och tunnel då behövs så kan man sätta upp ett tunnel entry för vhosten.

Sätt upp så att vhosten som intranätet kör på lyssnar på tun-intranet.kundsite.se

Det gör man såhär med Apache
ServerAlias tun-intranet.kundsite.se
Såhär med Nginx
servername tun-intranet.kundsite.se
Lägg även in en pekare i hosts filen
127.0.0.1 tun-intranet.kundsite.se
Nu med denna metod så kan man nå http://intranet.kundsite.se som vanligt så länge man har access och om man nu är ute där man inte har direkt access kan man använda sig av http://tun-intranet.kundsite.se:8080 så länge SSH-tunneln är uppe.

Ovanstående två exempel är lite av vad man kan göra med hjälp av SSH. Som du ser är det väldigt kraftfullt och flexibelt och gör livet enklare om man bara tar till sig alla möjligheter!