03.03.2009
Esa Turtiainen

OpenVPN on ohjelma, jolla voidaan luoda salattuja yhteyksiä tietokoneiden välille. OpenVPN:llä luotu yhteys näkyy tietokoneelle Internet-yhteytenä, joten sen yli voidaan välittää mitä tahansa Internet-liikennettä: WWW-selausta, sähköpostia, tietokoneiden etäkäyttöä jne. OpenVPN on ilmainen ohjelma ja se on saatavilla useimpiin yleisesti käytettäviin käyttöjärjestelmiin.

OpenVPN-yhteys palomuurin läpi omaan verkkoon

Liikkuvalla työntekijällä on usein ongelma päästä omaan verkkoon. Hän saattaa olla esimerkiksi palomuurilla suojatussa hotellissa, josta voi ottaa vain WWW-yhteyksiä ulos. OpenVPN-yhteys voidaan ottaa myös vain WWW-yhteydet sallivan palomuurin ylitse.

Omaan verkkoon on järjestettävä palvelintietokone, jolla on yhteys myös Internet-verkkoon. Tähän palvelintietokoneeseen perustetaan OpenVPN-palvelu. Oletuksena OpenVPN käyttää porttia UDP 1194, mutta jotta mahdollisimman monista palomuureista päästään läpi, kannattaa käyttää porttia TCP 443 eli TLS-salattu HTTP. Se on sama portti kuin mitä esimerkiksi pankkiyhteydet käyttävät. Jos käytät palvelimessa porttia 443, samassa palvelimessa ei voi olla tavallista TLS-salattua HTTP-palvelua. Muita todennäköisesti palomuurin yli toimivia portteja ovat 563 ja 873 eli TLS-salatut news- ja rsync-yhteydet.

Avaimen luonti

Ennen yhteyden käynnistämistä pitää luoda jaettu avain, joka on käytettävissä kummassakin päässä yhteyttä. Tämä luodaan komennolla (Linux):

openvpn --genkey --secret ./avain.txt

Avain on tekstitiedosto, joka voi näyttää esimerkiksi tältä:

#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
b2bc3bfe2a6985f7e9049886a8a236e3
4c0b90627e873cbcf15a9d8bf0a033b0
2e443f480b3e1e8e7b996a4ef24232f7
f785cfe7c88e74961f0e57a0861e6d06
417360b8cae10a13a3bbbb6f5766b450
adb391ef992776a11a1c9672118eb0f1
ffbed5b114333af8ba0d2c85dfe8424d
7f98e43f6c6e8be9eeb25bbac62f3ac4
981806baf05fc1a483a07adec575ffc1
322462e5c2027639a5c083bec1c66826
b63ffe1dfe6b0af30b6ddbf691cb25fa
f7f78314dcdd0bc5e540d91998953852
507f3fd4dcff9efa56d07b62f0e56b1f
24771f188232c936459d19ddf9514c5e
c961aad64e61c7872bf3abc2f4e27382
a115d7c94cc4a6447761cfff6011d885
-----END OpenVPN Static key V1-----

Yhteyden käynnistys

Oman verkon palvelimessa OpenVPN käynnistetään seuraavasti (Linux):

openvpn --dev tun --ifconfig 10.1.0.1 10.1.0.2 --proto tcp-server --secret avain.txt --port 443

Ja asiakkaan päässä (oletetaan, että oman verkon palvelimen ip-osoite on 55.55.55.55):

openvpn --dev tun --remote 55.55.55.55 443 --ifconfig 10.1.0.2 10.1.0.1 --proto tcp-client --secret avain.txt

Tämä luo koneiden välille yhteyden, jossa oman verkon palvelin on osoitteeltaan 10.1.0.1 ja palomuurin takana oleva kone on 10.1.0.2. Mikäli palomuuri läpi pääsee vain käyttämällä HTTP-välipalvelinta (proxy), sen osoite lisätään alempaan komentoon

--http-proxy www-proxy.local.example 8888

Koneissa saatetaan tarvita vielä reitityskomento, jotta paketit löytävät tien toiseen päähän. Esimerkiksi linux-koneessa openvpn avaa uuden verkkolaitteen (interface) tun0 (numero saattaa vaihdella). Tämä voidaan varmistaa komennolla ifconfig, jonka tulos voi näyttää tältä:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.1.0.2  P-t-P:10.1.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

Haluat, että osoitteeseen 10.1.0.1 kulkeva liikenne kultee tämän verkkolaitteen tun0 kautta. Se varmistetaan komennolla:

route add 10.1.0.1 tun0

Mikä tahansa osoite voidaan ohjata kuljetettavaksi saman tunnelin kautta. Esimerkiksi, jos halutaan, että liikenne osoitteeseen slashdot.org kulkee tunnelin kautta, voit antaa komennon:

route add slashdot.org tun0

Voit yleisesti ohjata kaiken tunnelin yli, mutta muista, että liikenne oman verkkosi palvelimeen ei saa mennä tunnelin kautta - se aiheuttaa silmukan, joka päättää reitityksen toiminnan. Yleisin ratkaisu on se, että omaan koneeseen pääsyyn tarvittava IP-osoite ohjataan route-komennolla käytössä olevaan verkkolaitteseen (esim. eth0) ja oletusreitiksi kaikelle muulle asetetaan tunneli tun0.

Nimipalvelin

Muista myös mitä kerrotaan artikkelissa Riskejä yksityisyydellesi - Internet-nimipalvelin siitä, että kaikki käyttämäsi Internet-nimet kerrotaan ympäristön nimipalvelimelle. Edellä mainittu osoitteen slashdot.org käyttö kertoo nimipalvelimelle, että olet kiinnostunut osoitteesta. Jos olet tästä huolestunut, ota etukäteen selvää IP-osoitteista ja käytä suoraan IP-osoitteita. Ohjaa varsinaisen käytön nimipalvelinkyselyt tunnelin kautta. Linuxissa ruma, mutta nopea tapa uudelleenohjata nimipalvelin tilapäisesti uuteen paikkaan on kirjoittaa /etc/resolv.conf-tiedostoon nimipalvelimeksi tunnelin toinen pää (jossa on oltava nimipalvelin käynnissä):

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.1.0.1

/etc/resolv.conf-tiedoston muuttaminen näkyy Linux-tietokoneen toiminnassa heti (ainakin muutoksen jälkeen käynnistyviin ohjelmiin).Seuraava tietokoneen käynnistys tai esimerkiksi uuden WLAN-verkon löytyminen tulee palauttamaan nimipalvelimeksi tietokoneen pysyvässä konfiguraatiossa määritellyn nimipalvelimen.

Mikäli kaikki liikenne on ohjattu jo tunneliin ja oman verkkosi palvelin reitittää pyynnöt eteenpäin, voit asettaa nimipalvelimeksi OpenDNS-nimipalvelimen 208.67.222.222. Silloin oman verkkosi palvelimessa ei tarvita nimipalvelinta.

Pysyvät asetukset

Pidempiaikasta käyttöä varten edellä olevista asetuksista luodaan konfiguraatiotiedosto, jossa jokainen asetus on omalla rivillään:

dev tun
ifconfig 10.1.0.1 10.1.0.2
proto tcp-server
...

Tämän tiedoston perusteella käyttöjärjestelmä voi automaattisesti käynnistää VPN-yhteyden. Tämä tapa eroaa eri käyttöjärjestelmissä toisistaan.

Yhteyden käyttö

Kun yhteys on muodostettu, sen yli voidaan välittää mitä tahansa Internet-liikennettä. Kaikki viittaukset palomuurikoneessa osoitteeseen 10.1.0.1 viittaavat verkossa olevaan palvelimeen ja kaikki liikenne siihen on salattua.

Esimerkiksi sähköpostin lähetys- ja vastaanottopalvelimeksi voidaan asettaa 10.1.0.1 ja sähköpostin lähetys ja vastaanotto tapahtuu oman verkon palvelimessa salatun yhteyden ylitse käytettynä (jos vain tuossa palvelimessa on nämä palvelut).

Jos selaimen sivuhakujen halutaan menevän tunnelin kautta, paikallinen välipalvelin on kytkettävä ensin pois päältä. Tämän jälkeen, jos osoite slashdot.org on reititetty verkkolaitteeseen tun0, osoitetta http://slashdot.org voidaan käyttää selaimessa, ja liikenne tähän osoitteeseen kulkee tunnelin kautta. Kuitenkin jos tämä sivu lataa kuvia toisilta palvelimilta, näihin yritetään kytkeytyä suoraan! Tämän vuoksi oman verkon palvelimessa kannatta olla HTTP-välipalvelin, esimerkiksi Squid. Tällöin välipalvelimeksi asetetaan 10.1.0.1:3128 (Squid-välipalvelimen oletusportti on 3128). Myös Java-ohjelman välipalvelinasetus on syytä tarkistaa, jos Java on sallittu.

Muutama varoitus

Salaus ei suojaa yhteyttä liikennemäärien analysoinnilta. Esimerkiksi, jos kopioit hakemiston tunnelin ylitse, liikenteestä saattaa olla pääteltävissä, että olet kopioinut tiedostot, joiden koko on 10kB, 50kB, 30kB ja viimeiseksi 120 kB. Tarkkailija saattaa siis voida päätellä, mitä olet siirtämässä. Hakemistoon kannattaakin siis luoda ensin satunnaisen kokonen tyhjä tai satunnainen tiedosto, esim. (Linux):

dd if=/dev/urandom of=tayte.txt bs=1 count=43563434

ja tämän jälkeen kerätä siirrettävä hakemisto yhdeksi tiivistetyksi tiedostoksi:

tar cfz /tmp/kaikki.gz .

(Lopussa on piste, joka tarkoittaa nykyistä hakemistoa.) Nyt tiedosto /tmp/kaikki.gz on se, joka kannattaa siirtää verkon yli (mielummin vielä salattuna).

OpenVPN-ohjelmaa ei ole tarkoitettu varsinaisesti piilottamaan tietoliikennettä palomuurin ylitse, joten sen käyttö on havaittavissa. On olemassa muita hieman vaikekäyttöisempiä työkaluja, joilla liikenne saadaan identtiseksi TLS-salatun HTTP-liikenteen kanssa.