Ero sivun ”SSH-tunneli” versioiden välillä
(alustava tunneliohje) |
(ei mitään eroa)
|
Versio 11. helmikuuta 2009 kello 23.52
Tunnelointiin on Linuxissa lukuisia tapoja. Tässä keskitytään kaikkein helpoimpaan, eli tun-tunneliin SSH:n välityksellä. Ratkaisulla saavutetaan seuraavat edut:
- Helposti asetettavissa
- Toimii kaikkien palomuurien kanssa, jotka läpäisevät tavallisen SSH-liikenteen
- Ei tarvitse asentaa ohjelmia
Ratkaisulla on myös muutamia haittapuolia:
- Tarvitsee root-oikeudet molemmista koneista (kuten useimmat muutkin tunneloinnit)
- Ei ole verkkoliikenteen kannalta optimaalinen, koska tunneli toimii TCP-yhteyden välityksellä
Tässä artikkelissa esitellään SSH-tunnelin asettelu siten, että se on otettavissa vaivatta käyttöön esimerkiksi kannettavalla.
Esiasettelu
Luo ssh-avaimet tarvittaessa. Tätä tarkoitusta varten voit myös luoda omat avaimet. Tässä esimerkissä käytetään samoja avaimia kuin tavallisella käyttäjällä.
Valitse IPv4-osoitteet, jotka eivät ole käytössä tunnelia varten. Tässä esimerkissä käytetään osoitetta 192.168.24.1 palvelimelle ja 192.168.24.2 asiakkaalle. Esimerkin osoitteet on valittu umpimähkäisesti sisäverkkojen osoitealueesta. Valitse osoitteet, joita ei ole lähiverkossasi käytössä.
Valitse myös käyttämäsi tunnelinumero. Se voi olla oikeastaan mitä tahansa nollasta ylöspäin, jos käytössä ei ole muita tunneleita. Tässä esimerkissä käytetään onnennumeroa 3, jolloin verkkolaitteen nimeksi tulee tun3. Se saa eri palvelimella ja asiakkaalla.
Palvelimen asettaminen
Muokkaa tiedostoa ~root/.ssh/authorized_keys. Lisää sinne rivi
command="/root/tunnelip.sh",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding AVAIMESI TIEDOT
Komento antaa oikeudet suorittaa vain komennon /root/tunnelip.sh palvelimella.
Muokkaa tiedostoa /etc/ssh/sshd_config ja lisää sinne rivi PermitTunnel yes.
Luo tiedosto ~root/tunnelip.sh ja laita sille sisällöksi
#!/bin/bash # muodostaa ssh-tunnelin ja tuhoaa aiemman tarvittaessa CONNECTED=$(ip addr show dev tun3 to 192.168.24.1)
if [ "$CONNECTED" ]; then RAWSSHPID=$(lsof -F p /dev/net/tun) SSHPID=${RAWSSHPID:1} echo Tunneli oli päällä, komento oli $(</proc/$SSHPID/cmdline) kill "$SSHPID" else ifconfig tun3 192.168.24.1 pointopoint 192.168.24.2 && echo Tunneli asetettu palvelimelle fi
Asiakkaan asettaminen
Asiakaskoneena voi toimia esimerkiksi kannettava tietokone, jolta haluat päästä lähiverkkoon.
Luo tiedosto ~root/tunnelconnect.sh ja laita siihen sisällöksi
#!/bin/bash ifconfig tun3 192.168.24.2 192.168.24.1 && echo Tunneli asetettu paikallisesti # elamaa helpottavat reitit xargs -n 1 -I '{}' route add -host '{}' 192.168.24.1 <<-END svn.cc.jyu.fi trac.cc.jyu.fi mot.kielikone.fi END
Esimerkissä olevat kolme palvelimen nimeä, esimerkiksi svn.cc.jyu.fi, voidaan korvata niillä osoitteilla, jotka halutaan tunneloitavan osoitteen 192.168.24.1 lisäksi. Tämän avulla voidaan yksittäiseen IP-osoitteeseen menevä liikenne tunneloida samalla, kun muu liikenne kulkee normaalisti lyhintä reittiään. Ratkaisu on tarpeen palveluissa, joiden rajoitus perustuu IP-osoitteiden tarkistamiseen.
Muokkaa tiedostoa ~root/.ssh/config ja lisää sen loppuun rivi
host tunnel User root Hostname tieto.kone.fi IdentityFile /home/jaska/.ssh/id_dsa Tunnel point-to-point TunnelDevice 3:3 PermitLocalCommand yes LocalCommand /root/tunnelconnect.sh
Muuta IdentityFile ja Hostname vastaamaan käyttämääsi ssh-avainta ja palvelimen osoitetta.
Näillä asetuksilla tarvisit rootin oikeudet joka kerta, kun haluat avata yhteyden. Tämän välttämiseksi asetetaan sudo-komento hyväksymään tunnelin avaaminen tavallisena käyttäjänä. Komenna 'visudo' ja lisää tiedoston loppuun seuraava rivi:
jaska ALL = NOPASSWD: /usr/bin/ssh -T tunnel
Korvaa tässä esimerkissä 'jaska' asiakaskoneen käyttäjänimelläsi.
Lopuksi voit luopua pääkäyttäjän oikeuksista ja muokata tiedostoa ~jaska/.bash_profile. Lisää sinne rivi
alias tunneli="sudo /usr/bin/ssh -T tunnel"
Yhdistäminen
Komenna komentorivillä 'tunneli'. Tunneli avautuu. Tunneli voidaan lopettaa Control-C -näppäinyhdistelmällä.