OpenVPN

From ICO wiki
Jump to navigationJump to search

Autorid

  • Carl Rannaberg
  • Ariel Palmiste

Muudetud

  • Silver Kullarand
  • Viljar Rooda

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 Server ja Klient (Ubuntu 10.04)

Kasutaja peab oskama käsurida kasutada.

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

Nõuded

Nõutud on sertifikaadiga autentimine.

Routed ühenduse kasutamine.

Installeerimine

Järgnevad toimingud tuleb teha nii kliendis kui serveris. Esiteks tuleks tarkvara nimekirja uuendada.

sudo apt-get update

Paigaldame OpenVPN'i

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, et kopeerida vajaminevad failid kliendi arvutisse

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/ca.crt 
cert /etc/openvpn/server.crt 
key /etc/openvpn/server.key   
dh /etc/openvpn/dh1024.pem 

Määrame ära kõikidele klientidele antava ip aadressi vahemiku. Server ise saab esimese ip. Siin näites hakkab serveri ip-ks olema 192.168.0.1 ja klientidel ip vahemikus 192.168.0.2 - 192.168.0.254 :

server 192.168.0.0 255.255.255.0

Tunneli serveri poolne ots saab staatilise ip.

topology subnet

Esimene annab tunneli ip-aadressi route'i ja teine annab default gateway.

push "route 192.168.0.254 255.255.255.0"
push "route 0.0.0.0 0.0.0.0 192.168.0.1"

"Kuidas ma seda sõnastan"

tls-server

Kasutame vaikimisi VPN porti :

port 1194

Kasutame UDP protokolli, kuna see on turvalisem :

proto udp

Kasutame ruutimiseks tun liidest :

dev tun0

Määrame kui kaua ühendust hoida. Pingib klienti iga 10 sekundi tagant ja kui 120 seki vastust pole olnud, ühendus suletakse :

keepalive 10 120

Määrab ära kas vpn ühendust pakkida :

comp-lzo

Kirjutab ühendunud masinad openvpn-status.log faili :

status openvpn-status.log

Näitab kui palju teateid kuvatakse syslogis :

verb 3

Salvesta fail

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

;local
port 1194
server 192.168.0.0 255.255.255.0
topology subnet
push "route 192.168.0.254 255.255.255.0"
push "route 0.0.0.0 0.0.0.0 192.168.0.1"
tls-server
dev tun0
proto udp
keepalive 10 120
comp-lzo
dh /etc/openvpn/dh1024.pem
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
status /var/log/openvpn-status.log
verb 3

Järgmiseks tuleb eemaldada kommentaari märk failist /etc/sysctl.conf :

net.ipv4.ip_forward=1

Käivita käsureal järgnev käsk, et rakendada vastav muutuja selleks sessiooniks.

echo 1 > /proc/sys/net/ipv4/ip_forward

DNS Masqerade

Kliendi võrguliikluse suunamiseks läbi VPN tunneli tuleb paigaldada serverisse DNS Masqerade. See ei mõju DNS päringutele.

apt-get install dnsmasq

Peale paketi paigaldamist tuleb muuta /etc/dnsmasq.conf faili järgnevalt, et DNS Masqerade ei kuulaks enam avalikku liidest. Järgnevate ridade eest tuleb eemaldada kommentaari märgid ja omistada neile vastavad väärtused.

listen-address=127.0.0.1,192.168.0.1
bind-interfaces

Nende muudatuste tulemusena hakkab DNS Masqerade kuulama localhost'i ja gateway ip-aadressi VPN tunneli tun0 liidesel.

Muudatusete rakendamiseks tuleks teha restart OpenVPN'ile ja DNS Masqerade'le.

/etc/init.d/openvpn restart
/etc/init.d/dnsmasq restart

Kontroll

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

sudo openvpn --script-security 2 --config /etc/openvpn/conf/server.conf

Kõik töötab ilusti, kui ekraanil on näha sarnaseid ridu (ip aadressid võivad olla teised). 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.

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

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

client

Peab olema sama liides, mis serveri seadistuses.

dev tun0

Peab ka sama olema, mis serveris.

proto udp

Vpn ühenduse pakkimine, peab olema ka serveris määratud.

comp-lzo

Logifaili "jutukus".

verb 3

Salvestada fail. Lõplik client.conf fail ilma üleliigsete kommentaarideta on selline:

client
dev tun
proto udp
remote 192.168.56.200 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
up /etc/openvpn/update-resolve-config
down /etc/openvpn/update-resolve-config

Tunneli serveripoolse nimeserveri kasutamiseks

Selleks, et kasutada tunneli sreveri poolset nimeserverit tuleb kliendi arvutisse paigaldada resolvconf pakett.

sudo -i
apt-get install resolvconf

OpenVPN confi faili /etc/openvpn/conf tuleb lisada 2 rida:

up /etc/openvpn/update-resolve-config
down /etc/openvpn/update-resolve-config

Lisaks tuleb muuta /etc/openvpn/update-resolve-config skriptis vastavaid ridasi.

foreign_option_1='dhcp-option DNS 172.16.0.175'
foreign_option_2='dhcp-option DNS 8.8.8.8'

Skriptile tuleb anda vajalikud õigused, et ta saaks muuta resolv.conf'i, mille tulemusena muudetakse DNS serverite aadresse tunnele töö ajaks.

chmod a+x /etc/openvpn/update-resolve-config

Tehtud muudatuste rakendamisek tuleb teha OpenVPN'ile restart.

/etc/init.d/openvpn restart

Ü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)

Ühenduse 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

eth1 on meil see adapter, mis on ühendatud internetti.

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -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. Samuti võib teha varukoopia /etc/dnsmasq.conf failist, Aga kuna selle seadistamine pole just kõige mahukam siis võib seda teha ka taastamisel nullist.

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

7.05.2012

Kasutatud materjal

openvpn.net

library.linode.com

openvpn.net

plug.4aero.com

Bridge vs Tunnel