Ero sivun ”SSH-tunneli” versioiden välillä
(alustava tunneliohje) |
Pb (keskustelu | muokkaukset) p (wikilinkkejä) |
||
(9 välissä olevaa versiota 3 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
Tunnelointiin on Linuxissa lukuisia tapoja. Tässä keskitytään | Tunnelointiin on Linuxissa lukuisia tapoja. Kaikkein helpoiten tunnelointi onnistuu [[SSH#Tunneli|SSH:n porttiohjauksella]], joka tarvitsee ainoastaan tavallisen [[käyttäjä]]n oikeudet kumpaankin järjestelmään. | ||
Tässä ohjeessa sen sijaan keskitytään IP-liikenteen tunnelointiin. Se onnistuu helpoiten tun-tunnelin ja SSH:n välityksellä. IP-tason tunnelointi on tarpeen esimerkiksi, kun on tarvetta tunneloida UDP-liikennettä tai silloin, kun TCP-yhteys ei saa katketa, vaikka IP-osoite vaihtuisikin. Käyttökohde voi olla esimerkiksi [[irssiproxy]]yn yhdistäminen tunnelin välityksellä, jolloin IRC-yhteys ei katkea, vaikka nettiyhteyden IP-osoite vaihtuisi. Tästä on hyötyä esimerkiksi epäluotettavien "mobiililaajakaistojen" kanssa. | |||
SSH-välitteisellä IP-tunnelilla saavutetaan seuraavat edut: | |||
* Helposti asetettavissa | * Helposti asetettavissa | ||
* Toimii kaikkien | * Toimii kaikkien [[palomuuri]]en kanssa, jotka läpäisevät tavallisen SSH-liikenteen | ||
* Ei tarvitse asentaa ohjelmia | * Ei tarvitse asentaa erillisiä ohjelmia | ||
Ratkaisulla on myös muutamia haittapuolia: | Ratkaisulla on myös muutamia haittapuolia: | ||
* Tarvitsee root-oikeudet molemmista koneista (kuten useimmat muutkin tunneloinnit) | * Tarvitsee [[root]]-oikeudet molemmista koneista (kuten useimmat muutkin tunneloinnit) | ||
* Ei ole verkkoliikenteen kannalta optimaalinen, koska tunneli toimii TCP-yhteyden välityksellä | * 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 | Tässä artikkelissa esitellään SSH-tunnelin asettelu siten, että se on otettavissa vaivatta käyttöön esimerkiksi kannettavassa koneessa. | ||
==Esiasettelu== | ==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ä. | 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 [[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. | 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 olla eri palvelimella ja asiakkaalla. | ||
==Palvelimen asettaminen== | ==Palvelimen asettaminen== | ||
Muokkaa [[asetustiedosto]]a <tt>~root/.ssh/authorized_keys</tt>. Lisää sinne rivi | |||
Muokkaa | |||
command="/root/tunnelip.sh",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding AVAIMESI TIEDOT | 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. | Komento antaa oikeudet suorittaa vain komennon <tt>/root/tunnelip.sh</tt> palvelimella. | ||
Muokkaa | Muokkaa asetustiedostoa <tt>/etc/ssh/sshd_config</tt> ja lisää sinne rivi | ||
PermitTunnel yes | |||
Luo tiedosto ~root/tunnelip.sh ja | Luo uusi tiedosto <tt>~root/tunnelip.sh</tt>, ja lisää sinne seuraava sisältö: | ||
#!/bin/bash | #!/bin/bash | ||
# muodostaa ssh-tunnelin ja tuhoaa aiemman tarvittaessa | # muodostaa ssh-tunnelin ja tuhoaa aiemman tarvittaessa | ||
CONNECTED=$(ip addr show dev tun3 to 192.168.24.1) | CONNECTED=$(ip addr show dev tun3 to 192.168.24.1) | ||
if [ "$CONNECTED" ]; then | if [ "$CONNECTED" ]; then | ||
RAWSSHPID=$(lsof -F p /dev/net/tun) | RAWSSHPID=$(lsof -F p /dev/net/tun) | ||
Rivi 44: | Rivi 47: | ||
echo Tunneli asetettu palvelimelle | echo Tunneli asetettu palvelimelle | ||
fi | fi | ||
Mikäli haluat reitittää tunneloitavia paketteja myös lähiverkon ja Internetin välillä, lisää seuraava rivi iptablesiin: | |||
iptables -t nat -A POSTROUTING -s 192.168.24.2/32 -o eth0 -j MASQUERADE | |||
Korvaa esimerkissä oleva ''eth0'' käyttämäsi verkkolaitteen nimellä. | |||
==Asiakkaan asettaminen== | ==Asiakkaan asettaminen== | ||
Asiakaskoneena voi toimia esimerkiksi kannettava tietokone, jolta haluat päästä lähiverkkoon. Linux-käyttöjärjestelmässä on tuki tunneloinnille mukana. Tuen tunneloinnille voi asentaa erikseen myös Mac OS X:lle. Paketti on ladattavissa osoitteesta http://tuntaposx.sourceforge.net/ . | |||
Luo uusi tiedosto <tt>~root/tunnelconnect.sh</tt>, jonne sisällöksi: | |||
Luo tiedosto ~root/tunnelconnect.sh | |||
#!/bin/bash | #!/bin/bash | ||
ifconfig tun3 192.168.24.2 192.168.24.1 && | ifconfig tun3 192.168.24.2 192.168.24.1 && | ||
Rivi 55: | Rivi 62: | ||
# elamaa helpottavat reitit | # elamaa helpottavat reitit | ||
xargs -n 1 -I '{}' route add -host '{}' 192.168.24.1 << | xargs -n 1 -I '{}' route add -host '{}' 192.168.24.1 <<END | ||
svn.cc.jyu.fi | svn.cc.jyu.fi | ||
trac.cc.jyu.fi | trac.cc.jyu.fi | ||
Rivi 61: | Rivi 68: | ||
END | 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. | 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 | Muokkaa asetustiedostoa <tt>~root/.ssh/config</tt> ja lisää sen loppuun rivi | ||
host tunnel | host tunnel | ||
Rivi 74: | Rivi 81: | ||
LocalCommand /root/tunnelconnect.sh | LocalCommand /root/tunnelconnect.sh | ||
Muuta IdentityFile ja Hostname vastaamaan käyttämääsi ssh-avainta ja palvelimen osoitetta. | Muuta ''IdentityFile'' ja ''Hostname'' vastaamaan käyttämääsi ssh-avainta ja palvelimen osoitetta. | ||
Näillä asetuksilla | Näillä asetuksilla tarvitsisit 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 <tt>[[visudo]]</tt> ja lisää tiedoston loppuun seuraava rivi: | ||
jaska ALL = NOPASSWD: /usr/bin/ssh -T tunnel | jaska ALL = NOPASSWD: /usr/bin/ssh -T tunnel | ||
Korvaa tässä esimerkissä 'jaska' asiakaskoneen käyttäjänimelläsi. | 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 | Lopuksi voit luopua pääkäyttäjän oikeuksista ja muokata tiedostoa <tt>~jaska/.bash_profile</tt>. Lisää sinne rivi | ||
alias tunneli="sudo /usr/bin/ssh -T tunnel" | alias tunneli="sudo /usr/bin/ssh -T tunnel" | ||
==Yhdistäminen== | ==Yhdistäminen== | ||
Komenna komentorivillä <tt>tunneli</tt>. Tunneli avautuu. Tunneli voidaan lopettaa Control-C -näppäinyhdistelmällä. Mikäli tunneli on katkennut yllättäen, ensimmäinen suorituskerta katkaisee aiemman tunnelin ja toisella kertaa yhteys muodostuu. | |||
==Katso myös== | |||
*[[SSH]] | |||
*[[SSH-turvatoimet]] | |||
[[Luokka:Verkko]] | |||
[[Luokka:Ohjeet]] |
Nykyinen versio 20. helmikuuta 2009 kello 01.03
Tunnelointiin on Linuxissa lukuisia tapoja. Kaikkein helpoiten tunnelointi onnistuu SSH:n porttiohjauksella, joka tarvitsee ainoastaan tavallisen käyttäjän oikeudet kumpaankin järjestelmään.
Tässä ohjeessa sen sijaan keskitytään IP-liikenteen tunnelointiin. Se onnistuu helpoiten tun-tunnelin ja SSH:n välityksellä. IP-tason tunnelointi on tarpeen esimerkiksi, kun on tarvetta tunneloida UDP-liikennettä tai silloin, kun TCP-yhteys ei saa katketa, vaikka IP-osoite vaihtuisikin. Käyttökohde voi olla esimerkiksi irssiproxyyn yhdistäminen tunnelin välityksellä, jolloin IRC-yhteys ei katkea, vaikka nettiyhteyden IP-osoite vaihtuisi. Tästä on hyötyä esimerkiksi epäluotettavien "mobiililaajakaistojen" kanssa.
SSH-välitteisellä IP-tunnelilla saavutetaan seuraavat edut:
- Helposti asetettavissa
- Toimii kaikkien palomuurien kanssa, jotka läpäisevät tavallisen SSH-liikenteen
- Ei tarvitse asentaa erillisiä 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 kannettavassa koneessa.
Esiasettelu[muokkaa]
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 olla eri palvelimella ja asiakkaalla.
Palvelimen asettaminen[muokkaa]
Muokkaa asetustiedostoa ~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 asetustiedostoa /etc/ssh/sshd_config ja lisää sinne rivi
PermitTunnel yes
Luo uusi tiedosto ~root/tunnelip.sh, ja lisää sinne seuraava sisältö:
#!/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
Mikäli haluat reitittää tunneloitavia paketteja myös lähiverkon ja Internetin välillä, lisää seuraava rivi iptablesiin:
iptables -t nat -A POSTROUTING -s 192.168.24.2/32 -o eth0 -j MASQUERADE
Korvaa esimerkissä oleva eth0 käyttämäsi verkkolaitteen nimellä.
Asiakkaan asettaminen[muokkaa]
Asiakaskoneena voi toimia esimerkiksi kannettava tietokone, jolta haluat päästä lähiverkkoon. Linux-käyttöjärjestelmässä on tuki tunneloinnille mukana. Tuen tunneloinnille voi asentaa erikseen myös Mac OS X:lle. Paketti on ladattavissa osoitteesta http://tuntaposx.sourceforge.net/ .
Luo uusi tiedosto ~root/tunnelconnect.sh, jonne 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 asetustiedostoa ~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 tarvitsisit 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[muokkaa]
Komenna komentorivillä tunneli. Tunneli avautuu. Tunneli voidaan lopettaa Control-C -näppäinyhdistelmällä. Mikäli tunneli on katkennut yllättäen, ensimmäinen suorituskerta katkaisee aiemman tunnelin ja toisella kertaa yhteys muodostuu.