VPN Soveltajan näkökulmasta

Johdanto

Tämän harjoitustyön tarkoituksena on käytännössä muodostaa VPN-verkko[4], sekä yhteys kyseiseen verkkoon kannettavasta tietokoneesta. Lisäksi on tarkoitus pohtia VPN-verkon tuomaa hyötyä kotikäyttäjälle sekä selvittää, onko OpenVPN-yhteys turvallinen. Työssä käytetään avoimen lähdekoodin OpenVPN -ohjelmistoa palvelin, sekä asiakaspuolella. OpenVPN on avoimen lähdekoodin VPN-ohjelmisto ja se on ladattavissa ilmaiseksi projektin sivuilta erittäin monelle eri alustalle. Käytännössä OpenVPN-yhteyden muodostamiseen tarvitaan asiakasohjelmisto sekä palvelinohjelmisto. VPN-Palvelimessa käytetään tässä harjoitustyössä Oraclen Solaris 11 Express käyttöjärjestelmää. Käyttöjärjestelmä on ladattavissa Oraclen internetsivuilta ja siihen on saatavilla ilmaiseksi lisenssi kehittämistä, testausta ja demonstrointia varten[1]. Itse VPN-verkkoa työssä ei esitellä, sillä voidaan olettaa, että harjoitustyön lukijakunta tietää mikä se on. Lisätietoa VPN:stä kuitenkin löytyy kurssin MASO-materiaalista[2] ja Wikipediasta[4].

Palvelin

OpenVPN:n asennus, palvelin

Oletetaan, että lähtötilanteessa palvelimen käyttöjärjestelmä on asennettu. Tässä työssä aloitetaan LZO kirjastojen asennuksesta. LZO - real time data compression library on kirjasto, jota OpenVPN käyttää pakatessaan lähetettävää dataa asiakkaalle. Asiakaspuolen ohjelmisto taas purkaa palvelimessa pakatun datan ja näin ollen datasiirto nopeutuu.

LZO:n asennus Solarikseen:

=====================================================================

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz
gunzip lzo-2.04.tar.gz
tar -xf lzo-2.04.tar
cd lzo-2.04 
./configure
make
make install

=====================================================================

Seuraavana vuorossa on TUN/TAP-virtuaaliverkkosovittimen[3] asentaminen. TUN ja TAP ovat virtuaalisia verkkolaitteita. TUN-laite käsittelee IP-kehyksiä, kun taas TAP-laitetta käytetään ethernet-kehyksien käsittelyyn. Yhdessä ne muodostavat virtuaalisen verkkolaitteen, joka voi lähettää ja vastaanottaa verkkoliikennettä ohjelmiston, tässä tapauksessa OpenVPN:n kautta.

TUN/TAP laitteen asennus:

===================================================================================
wget http://github.com/downloads/kaizawa/tuntap/tuntap.tar.gz
tar xvf tuntap.tar.gz
cd tuntap
./configure
make
make install

===================================================================================

Viimeisenä asennetaan OpenVPN-palvelinohjelmisto. Samaan tapaan kuin äskeisissä, ohjelmisto haetaan ensin wget-komennolla. Käytämme tässä toimivaksi todettua versiota 2.2-beta5. Lisäksi täytyy hakea korjaustiedosto tun-laitteelle OpenVPN:ää varten ja määritellä OpenVPN käyttämään korjattua tiedostoa asennuksessa. Ennen asentamista määritellään vielä, että OpenVPN käyttää äskettäin asennettua LZO-kirjastoa.

OpenVPN-paketin asennus Solarikseen:

===================================================================================
wget http://swupdate.openvpn.net/community/releases/openvpn-2.2-beta5.tar.gz
gunzip openvpn-2.2-beta5.tar.gz
tar -xf openvpn-2.2-beta5.tar
cd openvpn-2.2-beta5
wget http://github.com/downloads/kaizawa/openvpn-patch/tun.c.2.1.3
mv tun.c.2.1.3 tun.c
./configure --with-lzo-lib=/usr/local/lib
make
make install

===================================================================================

Lopuksi liitetään vielä TUN ja TAP-modulit kerneliin, jotta ne tunnistuvat verkkolaitteena. Se tapahtuu komennoilla devfsadm -i tun, sekä devfsadm -i tap. OpenVPN sekä sen vaatimat ohjelmistot ja moduulit on nyt asennettu.

Autentikaatio ja järjestelmän asetukset

OpenVPN tarjoaa erilaisia tapoja autentikoida asiakas. Ne ovat esijaetut avaimet, julkisen avaimen infrastruktuuri, sekä salasana/käyttäjätunnus. Viimeistä voidaan käyttää kahden ensimmäisen kanssa myös yhtäaikaa. Näistä kolmesta julkisen avaimen infrastruktuuri on tietoturvallisin tapa, varsinkin kotikäytössä jossa avaimet voidaan luoda ja siirtää tarvittaviin laitteisiin paikan päällä ilman yhteyttä internettiin. Tätä tapaa käytetään myös tässä työssä.

Käytettäessä julkisen avaimen infrastruktuuria tarvitaan yhteensä neljä erilaista avainta palvelimelle, sekä jokaiselle asiakkaalle julkinen sekä yksityinen avain. Palvelimessa täytyy olla julkisen ja yksityisen avaimen lisäksi juurivarmenne CA, jonka julkisella osalla allekirjoitetaan kaikki kyseisessä palvelimessa luodut avaimet. Seuraavasta kaaviosta selviää, mitkä avaimet ovat tarpeen, mitä tiedostonimiä niistä käytetään, kuka niitä tarvitsee sekä ovatko ne salaisia vai julkisia. Kaaviossa[8] Certificate tarkoittaa samaa kuin julkinen avain ja Key samaa kuin yksityinen avain.

Tiedostonimi   Kuka tarvitsee   Tarkoitus   Salainen
ca.crt   Palvelin ja kaikki asiakkaat   Root CA certificate   EI
ca.key   Muut avaimet allekirjoittava palvelin   Root CA Key   ON
server.crt   Palvelin   Certificate   EI
server.key   Palvelin   Server Key   ON

Kopiodaan ensin tarvittavat kansiot varsinaiseen polkuun ja luodaan tarvittavat avaimet.

===================================================================================
mkdir /etc/openvpn
cp -R ~/openvpn/openvpn-2.2-beta5/easy-rsa /etc/openvpn/.
#Otetaan käyttöön julkisen avaimen infrastruktuuri ja luodaan ca.key
nano /etc/openvpn/easy-rsa/2.0/vars
source ./vars
./clean-all
./build-ca
#luodaan palvelimen julkinen ja yksityinen avain
./build-key-server server
#lopuksi määritellään diffie-hellman-parametrit
./build-dh
#kopioidaan lopuksi muodostetut avaimet oikeaan tiedostopolkuun
cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/.
cp /home/strawf/openvpn/openvpn-2.2-beta5/sample-config-files/server.conf /etc/openvpn/.
===================================================================================

Kun avaimet on luotu on jäljellä enää palvelimen asetustiedoston luonti. OpenVPN:n mukana tuleva esimerkkiasetustiedosto on erittäin selkeä. Siinä määritellään kaikki asetukset joita käytetään OpenVPN-palvelimessa. Seuraavassa esimerkki toimivasta ja tähän harjoitustyöhön soveltuvasta asetustiedostosta. Asetustiedosto luodaan /etc/openvpn/-polkuun.

server.conf: ===================================================================================
local x.x.x.x #korvaa x:t omalla ip-osoitteellasi
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
dh /etc/openvpn/keys/dh1024.pem
cipher AES-256-CBC
server x.x.x.x 255.255.255.0 #korvaa x:t haluamallasi aliverkkoavaruudella
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
client-config-dir /etc/openvpn/ccd
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 0
===================================================================================

Edellisestä koodista nähdään, että tiedonsalausalgoritmina toimii AES, käytettävä portti on OpenVPN:lle myönnetty 1194. Käytettävät avaimet määritellään polkuineen kukin omalla rivillä. Lisäksi tiedostossa on määrityksiä liittyen reitittämiseen, tiedon pakkaamiseen ja logitiedostoihin. Tarkemmat kuvaukset asetuksista löytyvät OpenVPN:n dokumentaatioista[8].

Viimeisenä käynnistetään OpenVPN-palvelinohjelmisto. Se tapahtuu komennolla /usr/local/sbin/openvpn /etc/openvpn/server.conf

Muutokset palomuuriin

Käyttämässämme Solaris-palvelimessa on ipf-palomuurimoduuli, johon täytyy tehdä muutamia muutoksia OpenVPN:ää varten. Ilman muutoksia ei VPN-yhteyden muodostaminen onnistu, sillä palomuuri estää liikenteen. Palomuuriongelmat ovat yleisimpiä ongelmia VPN:n kanssa ja asetuksiin kannattaa paneutua huolella, ettei vahingossa samalla tee muita järjestelmän ominaisuuksia tuhoavia muutoksia. Meidän järjestelmässämme lähdetään liikkelle siitä, että VPN-verkosta ulospäin menevä liikenne sallitaan. Näin ollen voidaan VPN:n verkkoa käyttää ns. turvallisena tunnelina verkkoliikenteelle. Lisäksi sallitaan liikenne Solaris-palvelimelta VPN-verkkoon. Kyseiset muutokset tapahtuvat /etc/ipf/ipf.conf-tiedostossa seuraavasti: ================================================================================
pass in quick on tun0 from x.x.x.x/24 to any keep state #korvaa x.x.x.x VPN-verkon osoiteavaruudella
pass out quick on tun0 from any to x.x.x.x/24 keep state
================================================================================

Nyt muodostamamme VPN-verkko on saatavilla myös ulkoverkosta käsin.

Asiakas

OpenVPN:n asennus ja konfigurointi kannettavassa tietokoneessa

Tässä harjoitustyössä käytetään kannettavassa tietokoneessa Microsoft Windows 7 käyttöjärjestelmää ja siihen saatavaa OpenVPN-ohjelmistoa. Asiakasohjelmiston käyttö on helppoa palvelimeen verrattuna. Lähes kaikki tapahtuu graafisen käyttöliittymän avulla, lukuunottamatta konfigurointitiedostoa. Ennen graafisen käyttöliittymän helppoutta on luotava vielä asiakkaan avaimet palvelimessa. Se tapahtuu samalla tavalla kuin itse palvelimen avaimien luonti. Asiakkaan avaimen voi toki luoda muussakin järjestelmässä, jos avain pystytään allekirjoittamaan luotettavasti myös palvelimen näkökulmasta.

================================================================================
./build-key client
cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/.
cp /home/strawf/openvpn/openvpn-2.2-beta5/sample-config-files/client.conf /etc/openvpn/.
================================================================================

Kopioidaan Solariksessa muodostetut sertifikaattitiedostot ca.crt, client.conf, client.crt ja client.key kannettavaan tietokoneeseen. Tämän jälkeen uudelleennimetään tiedosto client.conf client.ovpn:ksi, jolloin se on muokattavissa windowsilla ja OpenVPN-ohjelmisto tunnistaa sen konfigurointitiedostoksi. Seuraavaksi ladataan OpenVPN-client -ohjelmisto esimerkiksi osoitteesta: http://swupdate.openvpn.net/downloads/openvpn-client.msi.

Asennetaan ohjelma jonka jälkeen muokataan asiakkaan asetustiedostoa client.ovpn. Tiedosto on hyvin saman tyyppinen kuin palvelimen vastaava ja lisää esimerkkejä löytyy OpenVPN:n dokumentaatioista[8]. Seuraavana esimerkki tässä työssä toimivasta asetustiedostosta:

client.ovpn: ================================================================================
client
dev tun
proto udp
remote x.x.x.x 1194 #korvaa x:t omalla ip-osoitteellasi
resolv-retry infinite
nobind
cipher AES-256-CBC
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3
================================================================================

Seuraavaksi käynnistetään asiakasohjelma ja muodostetaan VPN-yhteys perustuen client.ovpn-tiedostoon. Yksinkertainen VPN-verkko on nyt valmis ja määrittelemämme laite voi aloittaa turvallisen liikennöinnin virtuaaliseen verkkoomme.

Pohdintaa

OpenVPN-verkon turvallisuus

VPN-verkot ovat olleet jo erittäin pitkään käytössä yritysmaailmassa. VPN-mahdollistaa turvallisen salatun yhteyden muodostamisen virtuaaliseen verkkoon riippumatta liityntäpisteestä tai sen turvallisuudesta. OpenVPN mahdollistaa erilaisia tapoja tunnistautumiseen, mutta järein ja käytetyin tapa on edellä käytetty julkisen avaimen infrastruktuuri[9].

OpenVPN-ohjelmistossa liikennöinti salataan OpenSSL-kirjastoilla. Oletuksena viestit salataan Blowfish-salausalgoritmilla[5], BF-CBC jota pidetään edelleen erittäin turvallisena ja nopeana. OpenVPN tukee myös seuraavia salausalgoritmeja:

DES-CBC
RC2-CBC
DES-EDE-CBC
DES-EDE3-CBC
DESX-CBC
BF-CBC
RC2-40-CBC
CAST5-CBC
RC2-64-CBC
AES-128-CBC
AES-192-CBC
AES-256-CBC

Tässä työssä käytetään järeintä AES-salausalgoritmia. AES:ia ei tiettävästi ole vielä murrettu, joten voidaan olettaa, että sillä salattuja paketteja ei pystytä avaamaan. Salatut paketit kääritään lopuksi TCP- tai UDP-paketeiksi, jolloin vältetään myös NAT:ien ja palomuurien aiheuttamat ongelmat verrattuna esimerkiksi IPsec-pohjaisiin ratkaisuihin. OpenVPN käyttää oletuksena IANA:n sille myöntämää porttia 1194.

OpenVPN:llä muodostettua yhteyttä voidaan pitää erittäin turvallisena riippumatta liityntäpisteen turvallisuudesta. Tämä edellyttää kuitenkin sitä, että sekä asiakkaan, että palvelimen yksityiset avaimet pysyvät salassa ja sitä, että ne on muodostettu luotetussa ympäristössä.

VPN yksityisen kotikäyttäjän näkökulmasta

Kotikäyttäjän tapauksessa VPN-verkosta on hyötyä esimerkiksi tapauksessa, jossa halutaan käyttää julkista, suojaamatonta WLAN-verkkoa kannettavalla laitteella.Muodostetaan ensin yhteys omaan VPN-verkkoon ja kierrätetään kaikki kannettavan laitteen liikenne ja näin ollen turvataan liikennöinnti näennäisesti turvattomassa verkossa.

Toinen erittäin käytännöllinen asia on VPN-verkon ja oman sisäverkon välisen reitityksen toteutus. Kun OpenVPN-palvelimessa on käytössä muita, ulkoverkolta piilossa olevia palveluja on ne mahdollista tuoda etäkäyttäjän ulottuville VPN-verkon avulla. Sisäverkkoon jaettavat palvelut saadaan käyttöön VPN-verkossa reitittämällä nämä kaksi verkkoa keskenään itse palvelimessa. Kotikäyttäjän kannalta esimerkiksi tiedostojaot ovat tällainen palvelu. Niitä ei jaeta ulospäin sisäverkosta, mutta VPN-verkosta ne ovat käytettävissä. Näin on mahdollista päästä turvallisesti käsiksi omiin verkkojakoihin mistä päin maailmaa tahansa.

OpenVPN-ohjelmistoa tukevia client-ohjelmia on saatavalla monelle eri alustalle. Puhelimista esimerkiksi Android-käyttöjärjestelmän cyanogenmod-firmware tukee oletuksena OpenVPN:ää. Sen avulla on helppo salata koko puhelimen verkkoliikenne esimerkiksi ulkomailla matkustellessa. Myös puhelimessa yhteys toimii riittävällä nopeudella ja ennenkaikkea turvallisesti. Toki salaus vie enemmän prosessointiaikaa ja puhelimen akkukesto pienenee merkittävästi. Monessa tapauksessa riittää kuitenkin yhteyden turvaaminen tietyksi ajaksi, esimerkiksi verkkopankin käytön aikana.

Lähteet

[1] Oracle Technology Network Developer License Terms, Oracle Solaris, Oracle Solaris Cluster and Oracle Solaris Express. Saatavilla:http://www.oracle.com/technetwork/licenses/solaris-cluster-express-license-167852.html

[2] Maso / VPN-tunneloinnin toteutuksesta. Saatavilla: http://sec.cs.tut.fi/maso/materiaali.php?id=215

[3] TUN/TAP. Saatavilla: http://en.wikipedia.org/wiki/TUN/TAP

[4] VPN. Saatavilla: http://fi.wikipedia.org/wiki/VPN

[5] OpenVPN Security Overview. Saatavilla: http://openvpn.net/index.php/open-source/documentation/security-overview.html

[6] OpenVPN. Saatavilla: http://en.wikipedia.org/wiki/OpenVPN

[7] Universal TUN/TAP device driver Frequently Asked Question. Saatavilla: http://vtun.sourceforge.net/tun/faq.html#1.1

[8] HOWTO. Saatavilla: http://openvpn.net/index.php/open-source/documentation/howto.html#pki

[9] Public key infrastructure. Saatavilla: http://en.wikipedia.org/wiki/Public_key_infrastructure

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Kehitteillä
Tyyppi Esitys
Luokitus Käytännöt
Mitä Useita
Miltä Muu
Missä Muu
Kuka Titu-ammattilainen
Milloin Päivittäin
Miksi Hyvä tapa
Print version |  PDF  | History: r6 < r5 < r4 < r3 | 
Topic revision: r6 - 30 Nov 2011 - 19:49:05 - LasseLaukka?
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback