OpenVPN

From ICO wiki
Revision as of 13:18, 23 April 2012 by Skullara (talk | contribs)
Jump to navigationJump to search

Koostanud: Viljar Rooda A21, Silver Kullarand A31, Aprill 2012

Tegemisel

Autorid

  • Carl Rannaberg
  • Ariel Palmiste

Sissejuhatus

Seadistame kahe arvuti vahel töötava VPN tunneli, kasutades selleks OpenVPN lahendust. VPN ühenduses on kaks või enam arvutit omavahel turvalise tunneli kaudu ühenduses labi Interneti, kus kogu ühendus on krüpteeritud. Nii on võimalik ühest arvutist pääseda teises arvutis töötavatele teenustele ligi läbi ebaturvalise Interneti. See arvuti kuhu ühendatakse nimetatakse serveriks ja see millest ühendatakse nimetatakse kliendiks.

Eeldused

Töötav Ubuntu (Ubuntu 9.10 või 9.04)

Kasutaja peab oskama käsurida kasutada

Kaks või enam võrgus olevat arvutit või virtuaalmasinat

Nõuded

Nõutud on sertifikaadiga autentimist

Routed ühenduse kasutamine

128 bitine AES krüpteering

Installeerimine

Esiteks tuleks tarkvara nimekirja uuendada.

sudo apt-get update

Paigaldame OpenVPN ja bridge-utils paketid.

sudo apt-get install openvpn

Seadistamine

VPN tunneli loomiseks on vaja vähemalt kahte arvutit. Üks on server ja teised kliendid, kes soovivad serveri arvutisse tunnelit luua, et sealseid teenuseid kasutada.

Loome kataloogi, kuhu salvestame seadistusfailid ja sertifikaadid.

Logime root kasutajane sisse ja kõik järgnevad käsud tuleb teha root kasutajana.

sudo -i

Järgnevad käsud tuleb teha nii serveri, kui ka kliendi arvutis.

mkdir /etc/openvpn/easy-rsa/

Kopeerime vajaliku failid sinna kataloogi, et pärast OpenVPN uuendust failid alles jääks.

cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ 

Sertifikaatide genereerimine

Järgnev tuleb teha ainult serveri arvutis.

Logime root kasutajane sisse (kui juba ei ole) ja kõik järgnevad käsud tuleb teha root kasutajana.

sudo -i

Liigume kataloogi /etc/openvpn/easy-rsa/:

cd /etc/openvpn/easy-rsa/

Muudame vars faili /etc/openvpn/easy-rsa/ kataloogis

nano vars

Faili lõpus tuleks järgnevad read ära muuta endale sobivate andmetega.

Näieks niimoodi:

export KEY_COUNTRY="EE"
export KEY_PROVINCE="HARJU"
export KEY_CITY="TALLINN"
export KEY_ORG="Firma"
export KEY_EMAIL="firma@firma.ee"
  • Country - kahekohaline riigikood (EE- Eesti)
  • Province - Maakond
  • City - Linn
  • Org - organisatsioon kellele sertifikaat genereeritakse
  • Email - emaili aadress

Edasi käivitame selle sama vars faili, et võtmed säiliks. (NB: mõlemad punktid järgnevas käsus on olulised)

. ./vars

Nüüd kustutame keys kataloogi sisu, kui see olemas on:

./clean-all

Lõpuks loome sertifikaadi ja selle võtme:

./build-ca

Nüüd peaks olema näha eelnevalt ära muudetud read, mis on vaikimisi sisestatud. Neid võib veel muuta, kui vajadus tekib või lihtsalt Enter peale iga rida vajutada. Rea Organizational Unit Name ja Name võib tühjaks jätta ja lihtsalt Enter vajutada. Kindlasti tuleb ära märkida Common Name, mis võib olla arvuti hosti nimi või mingi muu. Käsu tulemusena tekitati keys kataloogi kaks faili: ca.crt ja ca.key.

Järgmisena tuleks genereerida serveri enda sertifikaat ja võti.

./build-key-server server 

Andmed mida küsitakse on sarnased eelmise käsuga ja peavad olema samad. Common Name peab olema server. Lisaks küsitakse parooli, mis tuleks sisestada ja An Optional Company Name, mille võib tühjaks jätta. Küsimuste Sign the certificate? [y/n] ja 1 out of 1 certificate requests certified, commit? [y/n] peale vasta y ja vajuta Enter. Käsu tulemusena loodi failid server.crt ja server.key

Iga serverisse ühendava kliendi jaoks tuleb serveri arvutis genereerida iga kliendi jaoks sertifikaat ja võti. Ühe kliendi puhul sedasi:

./build-key client1

Kui küsib Common Name peaks igal kliendil olema see erinev. Meie näites sobib selleks client1.

Järgmisena genereerime Diffie Hellman parameetrid:

./build-dh

Meil on vaja nüüd kliendi sertifikaat client1.crt ja võti client1.key ning põhisertifikaat ca.crt kopeerida kliendi arvutisse, näiteks /etc/openvpn/ kataloogi. Selleks sobib üle ssh kopeerimine.

Enne tuleks ajutiselt anda kliendi arvutist /etc/openvpn/ kataloogile kirjutusõiguse.

chmod o+w /etc/openvpn/

Serveri arvutist sisestada käsud

scp /etc/openvpn/easy-rsa/keys/ca.crt <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/
scp /etc/openvpn/easy-rsa/keys/client1.crt <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/
scp /etc/openvpn/easy-rsa/keys/client1.key <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/

Pärast muuta õigused kliendi masinas tagasi.

chmod o-w /etc/openvpn/

(Märkus: Kliendi sertifikaate ja võtmed ei ole soovitav serveri masinas edasi hoida, neid on võimalik ka ainult kliendi masinas genereerida)

Serveri seadistamine

Seda arvutit kuhu ühendatakse nimetatakse serveriks. Kõik järgnev teha serveris. Näidis seadistusfailid asuvad kataloogis /usr/share/doc/openvpn/examples/sample-config-files Loome kataloogi conf:

mkdir /etc/openvpn/conf

Kopeerime seadistusfailid sinna kataloogi:

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/conf

Liigume sinna kataloogi:

cd /etc/openvpn/conf

Pakime seadistusfaili lahti:

gunzip server.conf.gz

Muudame server.conf faili:

sudo nano server.conf

Vaikimis seadistusfail on üldjoontes õigete seadistustega, küll aga peab mõnda asja muutma.

Esiteks tuleb näidata, kus on genereeritud sertifikaadid ja võtmed. Muuta ära read ca, cert, key ja dh:

ca /etc/openvpn/easy-rsa/keys/ca.crt 
cert /etc/openvpn/easy-rsa/keys/server.crt 
key /etc/openvpn/easy-rsa/keys/server.key   
dh /etc/openvpn/easy-rsa/keys/dh1024.pem 

Jälgida server rida:

server 10.8.0.0 255.255.255.0

See määrab ära kõikidele klientidele antava ip aadressi vahemiku. Server ise saab esimese ip. Siin näites hakkab serveri ip-ks olema 10.8.0.1 ja klientidel ip vahemikus 10.8.0.1 - 10.8.0.254

Määrame ära et hakataks kasutama 128 bitist AES krüpteerimist. Leida üles järgnevad read ja kommenteerida välja (kustudada semikoolon rea ees)cipher AES-128-CBC. See tuleb ka ära määrata kliendi seadistusfailis (hiljem näidatud).

;cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES

määrame ära maksimum klientide arvu, muuda ära rida max-clients:

max-clients 50 

Salvesta fail

Lõplik server.conf peaks selline välja nägema, kui kommentaarid ja mittevajalik eemaldada

# Vaikimis OpenVPN port
port 1194

# UDP protokoll on turvalisem kui TCP
proto udp

# Ruutimiseks kasutame tun liidest
dev tun

# Sertifikaadi failide asukohad
ca /etc/openvpn/easy-rsa/keys/ca.crt 
cert /etc/openvpn/easy-rsa/keys/server.crt 
key /etc/openvpn/easy-rsa/keys/server.key   
dh /etc/openvpn/easy-rsa/keys/dh1024.pem 

# Siin määratakse ära mis subnetist ip-aadresse hakatakse klientidele jagama
server 10.8.0.0 255.255.255.0

# Siin failis kõik väljajagatud ip-aadressid
ifconfig-pool-persist ipp.txt

# Kui kaua ühendust hoida. Pingib klienti iga 10 sekundi tagant ja kui 120 seki vastust pole olnud, ühendus suletakse
keepalive 10 120

# Krüpteerimiseks kasutame AES-i
cipher AES-128-CBC   # AES

# Määrab ära kas vpn ühendust pakkida
comp-lzo

max-clients 50

persist-key
persist-tun

# Kirjutab ühendunud masinad openvpn-status.log faili
status openvpn-status.log

# Näitab kui palju teateid kuvatakse syslogis
verb 3

Serveri seadistamine on nüüd lõppenud. Openvpn tööle panemiseks käivitada käsk:

sudo openvpn /etc/openvpn/conf/server.conf

Kõik töötab ilusti, kui ekraanil on näha sarnaseid ridu (ip aadressid võivad teised olla). Kui viimane rida on Initialization Sequence Completed, siis peaks kõik toimima.

Mon Dec  7 15:30:28 2009 Diffie-Hellman initialized with 1024 bit key
Mon Dec  7 15:30:28 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Mon Dec  7 15:30:28 2009 TLS-Auth MTU parms [ L:1590 D:138 EF:38 EB:0 ET:0 EL:0 ]
Mon Dec  7 15:30:28 2009 TUN/TAP device tap0 opened
Mon Dec  7 15:30:28 2009 TUN/TAP TX queue length set to 100
Mon Dec  7 15:30:28 2009 /usr/local/bin/tap-up tap0 1500 1590   init
Mon Dec  7 15:30:28 2009 Data Channel MTU parms [ L:1590 D:1450 EF:58 EB:135 ET:32 EL:0 AF:3/1 ]
Mon Dec  7 15:30:28 2009 Socket Buffers: R=[114688->131072] S=[114688->131072]
Mon Dec  7 15:30:28 2009 UDPv4 link local (bound): [undef]:1194
Mon Dec  7 15:30:28 2009 UDPv4 link remote: [undef]
Mon Dec  7 15:30:28 2009 MULTI: multi_init called, r=256 v=256
Mon Dec  7 15:30:28 2009 IFCONFIG POOL: base=10.8.0.50 size=51
Mon Dec  7 15:30:28 2009 IFCONFIG POOL LIST
Mon Dec  7 15:30:28 2009 Initialization Sequence Completed

Kui soovitakse openvpn käivitada boot ajal või teenuse käivitamisega /etc/init.d/ kataloogist - siis liigutada server.conf fail /etc/openvpn kataloogi

Kliendi seadistamine

Järgnev tuleb teha kliendi arvutis. Logime root kasutajana sisse:

sudo -i

Loome kataloogi conf:

mkdir /etc/openvpn/conf

Kopeerime seadistusfailid sinna kataloogi:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/conf

Liigume sinna kataloogi:

cd /etc/openvpn/conf

Muudame client.conf faili:

nano client.conf

Otsida üles rida remote my-server-1 1194. Siia tuleb my-server-1 asemele panna VPN serveri ip-aadress. See peab olema päris ip-aadress, mida näeb serveris käsuga ifconfig ja on tavaliselt eth0 aadress

remote <vpn serveri ip-aadress> 1194

Järgmiseks tuleb määrata ära sertifikaatide ja võtmete asukohad. Leida üles ja ära muuta read ca, cert ja key. Panna sinna täispikk kataloog, kuhu enne sai serverist sertifikaadid kopeeritud. Meie näite puhul /etc/openvpn/ kataloog

ca /etc/openvpn/ca.crt 
cert /etc/openvpn/client1.crt 
key /etc/openvpn/client1.key

Leida üles rida ;cipher x ja muuta ära, et kasutataks AES krüpteerimist.

cipher AES-128-CBC

Ülejäänud asjad jäävad samaks ja salvestada fail. Lõplik client.conf fail ilma üleliigsete kommentaarideta on selline:

# Näitame, et OpenVPN läheb kliendina tööle
client

# Peab olema sama liides, mis serveri seadistuses
dev tun

# Peab ka sama olema, mis serveris
proto udp

# OpenVPN serveri ip-aadress kuhu ühendatakse.
remote <vpn serveri ip-aadress> 1194

resolv-retry infinite
nobind
persist-key
persist-tun

# Serdifailide asukohad
ca /etc/openvpn/ca.crt 
cert /etc/openvpn/client1.crt 
key /etc/openvpn/client1.key

# Krüpteerimis siffer, peab olema sama mis serveris
cipher AES-128-CBC

# Vpn ühenduse pakkimine, peab olema ka serveris määratud
comp-lzo

# Logifaili "jutukus"
verb 3

Ühendumine serveriga

Kui serveris openvpn edukalt töötab, võib kliendi arvutis openvpn tööle panna:

sudo openvpn /etc/openvpn/conf/client.conf

Kõik peaks toimima, kui väljundi viimane rida on Initialization Sequenze Completed ja erroreid ei tekkinud. (Et teenus automaatselt stardiks, kui kõik korras on, siis võib client.conf faili liigutada /etc/openvpn kataloogi)

Testimine

Testimiseks proovida mõnda serveri arvutis töötavat teenust, näiteks veebiserverit. Kui veebiserver töötab serveris, siis ühenduda openvpn serverisse, ip aadressiks paneme serveri vpn liidese(tun0) ip-aadressi, mis meie näites oli 192.168.0.1:

links 192.168.0.1

Kui tuleb leht ette, siis on opevpn tunnel edukalt loodud ja töökorras.

Tulemüür

Kui masinas on töötav iptables tulemüür (vahet pole, kas serveris või kliendis), siis võiks lubada udp port 1194 läbi tulemüüri, kui ei saada ühendust serveriga.

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

ja lubada ka tun0 liidese liiklus läbi

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

Teenuse varundamine

Kuna kõik vajalikud seadistusfailid on /etc/openvpn kataloogis, siis piisab terve selle kataloogi varundamisest. Antud kataloogist teha kord päevas täielik varukoopia ja kõik failid salvestada.

Teenuse taastamine

Kui teenusega ilmneb probleeme tuleb seadistusfailid ja sertifikaadid ning võtmed üle vaadata ja vajadusel taastada. Kontrollida, et arvutite ip-aadressid oleks vastavuses seadistusfailidega.

Versioonide ajalugu

ver. 0.1 03.11.2009

ver. 0.2 30.11.2009

ver. 0.3 01.12.2009

ver. 0.4 07.12.2009

ver. 0.5 08.12.2009

ver. 0.6 09.12.2009

ver. 0.7 11.12.2009

ver. 0.8 13.12.2009

ver. 0.9 16.12.2009

ver. 1.5 : Stabiilne versioon

ver. 1.6 : Lisati Web Proxy võimalus via tinyproxy

ver. 1.7 : Lisati võimalus muuta WebProxy teenuse porti.

ver. 1.8 : Parandati WebProxy probleemid.

Viimase muutmise aeg

23.04.2012

Kasutatud materjal

openvpn.net library.linode.com