OpenVPN
Koostanud: Viljar Rooda A21, Silver Kullarand A31, Aprill 2012
Tegemisel
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 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