Erinevus lehekülje "OpenVPN" redaktsioonide vahel
(→Sissejuhatus) |
(→Ruuditud ja sillatud ühendused) |
||
32. rida: | 32. rida: | ||
OpenVPN kasutamisel on oluline, et osalevate arvutite kellaajad oleksid õiged, alates sertifikaatide moodustamisest. | OpenVPN kasutamisel on oluline, et osalevate arvutite kellaajad oleksid õiged, alates sertifikaatide moodustamisest. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===OpenVPN tarkvara paigaldamine=== | ===OpenVPN tarkvara paigaldamine=== |
Redaktsioon: 24. juuni 2009, kell 17:18
Sisukord
- 1 Sissejuhatus
- 2 OpenVPN tarkvara paigaldamine
- 3 OpenVPN ruuditud ühenduse katsetamine
- 4 Sertifikaatide ettevalmistamine
- 5 OpenVPN ruuditud lahenduse seadistamine
- 6 OpenVPN sillatud lahenduse seadistamine
- 7 Windows kliendi kasutamine
- 8 Paketifiltri seadistamine
- 9 Kasutajate gruppide haldamine
- 10 Nimesüsteem ja OpenVPN
- 11 Eesti ID-kaardi kasutamine
- 12 Märkused
- 13 Kasulikud materjalid
Sissejuhatus
Kasutades avalikku ebaturvalist võrku võimaldab virtuaalne privaatvõrk (ingl. k. Virtual Private Network, VPN) korraldada osaliste arvutite ja alamvõrkude vahel turvalist andmevahetust. Reeglina osaleb VPN lahenduses enam kui kaks osapoolt või vähemalt tehnoloogiliselt see on võimalik. Virtuaalne privaatvõrk esineb kas etherneti (layer 2) või ip kihis (layer 3), mis tähendab, et virtuaalses privaatvõrgus omavahel suhtlevate rakenduste jaoks on põhimõtteliselt VPN olemasolu läbipaistev. VPN'i eeliseks muude turvalist suhtlemist võimaldavate lahenduste (nt tcp ühenduse tasemel toimuv ssh abil tehtav pordi suunamine) ees on, et rakendusi ei tule kuidagi spetsiifiliselt ette valmistada või seadistada ning andmevahetuse aluseks saab kasutada nn tavalist avalikku võrku ehk internetti, mille kasutamine on iseenesest suhteliselt odav. VPN ühendusega kaasnevat kanalit üle avaliku võrgu kahe otspunkti vahel nimetatakse tunneliks.
Võrreldes muude VPN lahendustega on OpenVPN tarkvarale iseloomulik
- turvaline - kasutab SSL/TLS vahendeid ja töötab nö user-space'is erinevalt IPSec'ist, mis töötab kernel-space'is
- lihtne kasutada - toetab rohkelt erinevaid platvorme (Linux, BSD, Windows, MacOSX) ning on reeglina olemas paketihalduses
- funktsionaalne - nt võimaldab moodustada VPN lahendust etherneti ja ip kihis, praktiliselt sisaldab IPSec'iga samaväärseid võimalusi
- paindlik - kuna OpenVPN kasutab andmevahetuseks UDP protokolli, siis ei ole probleemiks nt NAT seadmete läbimine
- vaba tarkvara - arendus toimub James Yonan'i eestvedamisel, http://openvpn.org/
Kuutorvajas on OpenVPN tarkvara kasutusjuhendid jaotatud erinevateks tekstideks lähtudes kasutusjuhtudest, kusjuures OpenVPN klienti platvormist ei sõltu oluliselt tema edukus serveriga suhtlemisel
Serverid
- OpenVPN serveri kasutamine OpenBSD'ga
- OpenVPN serveri kasutamine FreeBSD'ga
- OpenVPN serveri kasutamine Debianiga
Kliendid
- OpenVPN kliendi kasutamine OpenBSD'ga
- OpenVPN kliendi kasutamine FreeBSD'ga
- OpenVPN kliendi kasutamine Debianiga
- OpenVPN kliendi kasutamine Windowsiga
Käesolevas tekstis kesendutakse OpenVPN kasutamisele eesmärgiga seada käima turvaline ühendus ühe keskse OpenBSD arvuti ja ühe või mitme Debian arvuti vahel. Antud palas kirjeldatud asjakorraldust võiks ette kujutada selliselt, et OpenBSD juures töötab OpenVPN server režiimis ning Debianil klient režiimis, kusjuures klient saab ligi OpenBSD külge ühendatud võrkudele sh avalikule võrgule. Samas, käesolev tekst peaks andma piisavalt üldise ja samas detailse käsitluse, mida saab kasutaja varieerida omale sobiva lahenduse moodustamiseks.
Kuna andmevahetuse krüptimisel kasutatakse sertifikaate, siis OpenVPN tarkvaraga koos jagatakse ka pisikest CA tarkvara, mis lihtsustab sertifikaatide haldust.
OpenVPN kasutamisel on oluline, et osalevate arvutite kellaajad oleksid õiged, alates sertifikaatide moodustamisest.
OpenVPN tarkvara paigaldamine
Käesolevas tekstis kirjeldatakse OpenVPN tarkvara versioon 2.0 kasutamist.
Debianile tuleb paigaldada pakett openvpn
# apt-get install openvpn
Käesoleva punkti edasine jutt puudutab OpenBSD poolt, mis on OpenVPN serveriks, seal moodustatakse kasutatavad sertifikaadid ja jaotatakse OpenVPN klientidele laiali.
OpenBSD arvutil paigaldada pakett openvpn
# pkg_add openvpn
OpenVPN ruuditud ühenduse katsetamine
Selleks, et veenduda, et arvutitesse on OpenVPN tarkvara paigaldamine õnnestunud sh virtuaalsete seadmete jaoks on olemas vajalikud tuumamoodulid ning osaliste versioonid omavahel sobivad.
Krüptimata ühendus
Lihtsamal juhul, kus andmevahetust ei krüptita pole vaja midagi ettevalmistada, vajalikud parameetrid näidatakse käsureal öeldes Tuvikeses
tuvike-openbsd# openvpn --remote 172.16.5.15 --dev tun0 --ifconfig 10.8.0.1 10.8.0.2 --verb 3 Sat Jul 26 12:43:33 2008 OpenVPN 2.0.9 i386-unknown-openbsd4.3 [SSL] [LZO] built on Mar 13 2008 Sat Jul 26 12:43:33 2008 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2. 0-beta16 and earlier used 5000 as the default port. Sat Jul 26 12:43:33 2008 ******* WARNING *******: all encryption and authentication features disabled -- all data will be tunnelled as cleartext Sat Jul 26 12:43:33 2008 /sbin/ifconfig tun0 destroy Sat Jul 26 12:43:33 2008 /sbin/ifconfig tun0 create Sat Jul 26 12:43:33 2008 NOTE: Tried to delete pre-existing tun/tap instance -- No Problem if failure Sat Jul 26 12:43:33 2008 /sbin/ifconfig tun0 10.8.0.2 10.8.0.1 mtu 1500 netmask 255.255.255.255 up Sat Jul 26 12:43:33 2008 TUN/TAP device /dev/tun0 opened Sat Jul 26 12:43:33 2008 Data Channel MTU parms [ L:1500 D:1450 EF:0 EB:4 ET:0 EL:0 ] Sat Jul 26 12:43:33 2008 Local Options hash (VER=V4): '08b6a7d0' Sat Jul 26 12:43:33 2008 Expected Remote Options hash (VER=V4): '7d01953d' Sat Jul 26 12:43:33 2008 UDPv4 link local (bound): [undef]:1194 Sat Jul 26 12:43:33 2008 UDPv4 link remote: 172.16.5.15:1194 Sat Jul 26 12:43:43 2008 Peer Connection Initiated with 172.16.5.15:1194 Sat Jul 26 12:43:44 2008 Initialization Sequence Completed
ning öeldes Kalakeses
kalake-debian# openvpn --remote 172.16.2.1 --dev tun0 --ifconfig 10.8.0.2 10.8.0.1 --verb 3 Sat Jul 26 12:44:34 2008 OpenVPN 2.1_rc7 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 16 2008 Sat Jul 26 12:44:34 2008 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Sat Jul 26 12:44:34 2008 ******* WARNING *******: all encryption and authentication features disabled -- all data will be tunnelled as cleartext Sat Jul 26 12:44:34 2008 TUN/TAP device tun0 opened Sat Jul 26 12:44:34 2008 TUN/TAP TX queue length set to 100 Sat Jul 26 12:44:34 2008 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 Sat Jul 26 12:44:34 2008 Data Channel MTU parms [ L:1500 D:1450 EF:0 EB:4 ET:0 EL:0 ] Sat Jul 26 12:44:34 2008 Local Options hash (VER=V4): '7d01953d' Sat Jul 26 12:44:34 2008 Expected Remote Options hash (VER=V4): '08b6a7d0' Sat Jul 26 12:44:34 2008 Socket Buffers: R=[109568->131072] S=[109568->131072] Sat Jul 26 12:44:34 2008 UDPv4 link local (bound): [undef]:1194 Sat Jul 26 12:44:34 2008 UDPv4 link remote: 172.16.2.1:1194 Sat Jul 26 12:44:40 2008 Peer Connection Initiated with 172.16.2.1:1194 Sat Jul 26 12:44:40 2008 Initialization Sequence Completed
Kummassegi arvutiss moodustatakse automaatselt tun seade ning seadistatakse vastavalt käsureal näidatud parameetritele, OpenBSD poolel
tuvike-openbsd# ifconfig tun0 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 groups: tun inet 10.8.0.1 --> 10.8.0.2 netmask 0xffffffff
ning Debiani poolel
kalake-debian# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.2 P-t-P:10.8.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:31 errors:0 dropped:0 overruns:0 frame:0 TX packets:33 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:4604 (4.4 KiB) TX bytes:5508 (5.3 KiB)
Ühenduse kontrollimisel peab saama teise arvutisse üle võrgu ligi, nt pingida või ssh abil sisse logida pöördudes tunneli teise otsa aadressiga. Millegipärast OpenBSD poolel ei saa nö omapoolse otsa poole pöörduda, aga praktiliselt ei ole see ka oluline.
Staatilise võtmega krüptitud ühendus
Sarnane eelmisele, kuid ühenduse krüptimiseks kasutavad osalised ühist saladust staatilise võtme kujul. Esmalt tuleb moodustada saladus öeldes
# cd /etc/openvpn # openvpn --genkey --secret saladus.key
Seejärel kopeerida teisele osalisele ning öelda
tuvike-openbsd# openvpn --remote 172.16.5.15 --dev tun0 --ifconfig 10.8.0.1 10.8.0.2 --verb 3 --secret saladus.key kalake-debian# openvpn --remote 172.16.2.1 --dev tun0 --ifconfig 10.8.0.2 10.8.0.1 --verb 3 --secret saladus.key
Sertifikaatide ettevalmistamine
Lisaks krüptimita ja staatilise võtmega krüptitud ühendusele saab OpenVPNi seadistada kasutama avaliku võtme sertifikaate ja seda tulekski OpenVPNi nö tootmises kasutamisel eelistada. OpenVPN pakett sisaldab avaliku võtmega krüptimisel vajalike sertifikaatide halduseks pisikest CA programmide kompleti. Käesolevas punktis kirjeldatakse selle CA kasutamist OpenBSD platvormil, eesmärgiks on moodustada sertifikaadid ning need seejärel osa neist klientidesse kopeerida.
Esmalt tuleb moodustada mõned kataloogid ja failid
# mkdir /etc/openvpn /etc/openvpn/keys # touch /etc/openvpn/keys/index.txt # echo 01 > /etc/openvpn/keys/serial # cp /usr/local/share/examples/openvpn/easy-rsa/openssl.cnf /etc/openvpn
Seada sobivab keskkonnamuutujad
# . /usr/local/share/examples/openvpn/easy-rsa/vars
Seejärel tuleb genereerida sertifikaadid
- Süsteemi CA sertifikaat
# /usr/local/share/examples/openvpn/easy-rsa/build-ca
Oluline on, et CA ja järgneval serveri sertifikaadil oleks sama organisatsiooni nimi, sisestage mõistlikud andmed, näiteks
... Country Name (2 letter code) [KG]:EE State or Province Name (full name) [NA]:Tartu Locality Name (eg, city) [BISHKEK]:Tartu Organization Name (eg, company) [OpenVPN-TEST]:LOOMAAED Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:ca.loomaaed.tartu.ee Email Address [me@myhost.mydomain]: ca@ca.loomaaed.tartu.ee ..
Tekivad failid
/etc/openvpn/keys/ca.key /etc/openvpn/keys/ca.crt
- OpenVPN serveri sertifikaat
# /usr/local/share/examples/openvpn/easy-rsa/build-key-server server ... The Subject's Distinguished Name is as follows countryName :PRINTABLE:'EE' stateOrProvinceName :PRINTABLE:'Tartu' localityName :PRINTABLE:'Tartu' organizationName :PRINTABLE:'LOOMAAED' commonName :PRINTABLE:'tuvike.loomaaed.tartu.ee' emailAddress :IA5STRING:'ca@ca.loomaaed.tartu.ee' Certificate is to be certified until Jul 23 18:03:58 2018 GMT (3650 days) Sign the certificate? [y/n]:y ..
Tekivad failid
/etc/openvpn/keys/server.key /etc/openvpn/keys/server.crt
- OpenVPN kliendi sertifikaat, erinevatel klientidel peavad olema erinevad commonName'id
# /usr/local/share/examples/openvpn/easy-rsa/build-key kalake .. The Subject's Distinguished Name is as follows countryName :PRINTABLE:'EE' stateOrProvinceName :PRINTABLE:'Tartu' localityName :PRINTABLE:'Tartu' organizationName :PRINTABLE:'LOOMAAED' commonName :PRINTABLE:'kalake.loomaaed.tartu.ee' emailAddress :IA5STRING:'ca@ca.loomaaed.tartu.ee' Certificate is to be certified until Jul 23 18:11:25 2018 GMT (3650 days) Sign the certificate? [y/n]:y ..
Tekivad failid
/etc/openvpn/keys/kalake.key /etc/openvpn/keys/kalake.crt
Süsteemi CA sertifikaat ning kliendi sertifikaat ning salajane võti tuleb kopeerida kliendi arvutisse kasutades mõnda turvalist vahendit, nt SSH
# scp /etc/openvpn/keys/kalake.crt /etc/openvpn/keys/kalake.key /etc/openvpn/keys/ca.crt root@kalake:/etc/openvpn/keys
- Diffie-Hellmani asjad
# /usr/local/share/examples/openvpn/easy-rsa/build-dh
või sisuliselt samaväärne on öelda
# openssl dhparam -out dh2048.pem 2048
Tekib fail
/etc/openvpn/keys/dh1024.pem
OpenVPN ruuditud lahenduse seadistamine
Seadistame käima ruuditud ühenduse vastavalt ülaltoodud skeemile, peale käivitamist maksab vaadata üle kliendi ruutingutabel, et andmevahetus käiks soovitud moel.
OpenBSD poole seadistamine
Serveri poolel sobib kasutada sellist seadistusfaili ruuditud režiimis
# cat /etc/openvpn/openvpn.conf local 172.16.2.1 port 1194 proto udp dev tun0 ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /tmp/ipp.txt push "redirect-gateway local def1" keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun status /var/log/openvpn-status.log verb 3
Debiani poole seadistamine
OpenVPN kliendile vajalikud võtmed moodustatakse OpenVPN serveris ja kopeeritakse klienti nii nagu sertifikaatide punktis on öeldud.
Kliendi poolel sobib ruuditud režiimis kasutada sellist seadistusfaili
client dev tun proto udp remote 172.16.2.1 resolv-retry infinite nobind persist-key persist-tun ca keys/ca.crt cert keys/kalake.crt key keys/kalake.key comp-lzo verb 3
Käivitamine toimub mõlemal juhul öeldes, kusjuures kui seadistusfailis on näidatud sertifikaatide asukohad suhtelise teega, peab asuma /etc/openvpn kataloogis
# cd /etc/openvpn # openvpn --config openvpn.conf
OpenVPN sillatud lahenduse seadistamine
Seadistame käima sillatud ühenduse vastavalt ülaltoodud skeemile, peale käivitamist maksab vaadata üle kliendi ruutingutabel, et andmevahetus käiks soovitud moel.
OpenBSD serveri seadistamine
Vajalik on moodustada sild füüsilise ja tun seadme vahele, kusjuures link0 lipuga määratakse, et tun seade töötab layer 2 kihis
# ifconfig bridge0 create # ifconfig tun0 link0 up # brconfig bridge0 add em0 add tun0 # ifconfig bridge0 up
Serveri poolel sobib kasutada sellist seadistusfaili sillatud režiimis
# cat /etc/openvpn/openvpn.conf local 172.16.2.1 port 1194 proto udp dev-type tap dev tun0 ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem server-bridge 192.168.3.254 255.255.255.0 192.168.3.210 192.168.3.220 ifconfig-pool-persist /tmp/ipp.txt push "redirect-gateway local def1" keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun status /var/log/openvpn-status.log verb 3
FreeBSD serveri seadistamine
FreeBSDl on sillatud ühenduse jaoks tap seade. Kõigepealt lükkame vajalikud moodulid kernelisse
kldload if_bridge kldload if_tap
Edasi teeme silla ja ühendame virtuaalse seadme (tap0) füüsilise seadmega (em0)
ifconfig tap0 create up ifconfig bridge0 create ifconfig bridge0 addm tap0 addm em0 up
Serveri konfiks kirjutame näiteks lühidalt (pärast saab täiendada kui asi juba töötab)
# cat /usr/local/etc/openvpn/openvpn.conf dev tap0 server-bridge 192.168.3.254 255.255.255.0 192.168.3.210 192.168.3.220 ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem verb 3
Kui miskipärast ei tööta, siis kontrolli igaksjuhuks, kas tap0 ja bridge0 seadmed on ikka püsti (UP).
Debiani kliendi poole seadistamine
OpenVPN kliendile vajalikud võtmed moodustatakse OpenVPN serveris ja kopeeritakse klienti, nii nagu kirjeldatud sertifikaatide punktis.
Kliendi poolel sobib sillatud režiimis kasutada sellist seadistusfaili
# cat /etc/openvpn/openvpn.conf client dev tap proto udp remote 172.16.2.1 resolv-retry infinite nobind persist-key persist-tun ca keys/ca.crt cert keys/kalake.crt key keys/kalake.key comp-lzo verb 3
Käivitamine toimub mõlemal juhul öeldes, kusjuures kui seadistusfailis on näidatud sertifikaatide asukohad suhtelise teega, peab asuma /etc/openvpn kataloogis
# cd /etc/openvpn # openvpn --config openvpn.conf
Windows kliendi kasutamine
Kliendi sertifikaadid tuleb genereerida sarnaselt Debiani kliendi juhtumiga. Windowsi jaoks ettevalmistatud OpenVPN tarkvara saab kopeerida OpenVPN kodulehelt ning käivitades installeri paigaldatakse vaikimisi tarkvara kataloogi C:\Program Files\OpenVPN. Seejärel tuleb kopeerida sertifikaat, privaatne võti ning ca sertifikaat kataloogi C:\Program Files\OpenVPN\config. Moodustada seadistusfail, nt sellise sisuga
client dev tap proto udp remote 172.16.2.1 resolv-retry infinite nobind persist-key persist-tun ca keys/kalake-ca.crt cert keys/kalake-xp.crt key keys/kalake-xp.key comp-lzo verb 3 float
OpenVPN käivitamine toimub valides Windows Exploreris parema hiire klõpsuga avanevast seadistusfaili hüpikmenüüst 'Start OpenVPN on this config file', mille järel avaneb nn tekstiaken asjakohaste teadetega ühenduse loomise kohta, kui see aken sulgeda ristiga akna paremas ülemises nurgas, siis vpn ühendus lõpetatakse
Paketifiltri seadistamine
Kuna tun võrguseade käitub operatsioonisüsteemi suhtes tavalise võrguseadmena, siis tuleb paketifiltri seadistamisel arvestada asjaolusid ning kirjutada reeglid tavalisel moel. Tun seadmel on liiklus kürptimata st sobiv koht debugimiseks.
Kasutajate gruppide haldamine
Üks levinud nõudeid VPN-lahenduse juures on jagada kasutajaid gruppidesse ja neile gruppidele anda ligipääse nö VPN serveri tagusele territooriumile, erinevatele gruppide erineval määral ligipääse. Kui OpenVPN serverina kasutatakse OpenBSD tulemüüri, siis võiks seda korraldada hõlpsasti paketifiltri (PF) abil, seejuures on eelduseks, et kasutajatele on omistatud fikseeritud ip aadressid. Sedasi saab erinevate gruppide piiranguid kehtestada sihtpunkti protokolli, ip aadress ja pordi täpsusega.
OpenVPN parameeteri client-config-dir (ccd) abil saab konkreetse kasutaja jaoks täpsustada tema seadistusi. Selleks peab OpenVPN seadistusfail sisaldama rida, mis näitab kus asub failisüsteemis ccd kataloog
client-config-dir /etc/openvpn/ccd
ccd kataloogis on kliendi-spetsiifilised seadistusfailid, mille nimedena kasutatakse kliendi sertifikaadis näidatud domeenime, nt
# cat /etc/openvpn/ccd/martkask.vpn.loomaaed.tartu.ee ifconfig-push 172.17.1.5 172.17.1.6 push "route 192.168.2.0 255.255.255.0" push "route 10.0.5.0 255.255.255.0"
Antud juhul on täpsustatud kliendi Mart Kask fikseeritud ip aadress ja talle ruutingu andmete saatmine, mida vpn klient kasutab oma ruutingutabelis.
Tundub, et praktiliselt on sobiv igale kliendile planeerida /30 subnet.
Paketifiltri abil kontrollitakse klientide ligipääsu OpenVPN serveri taga olevatesse võrkudesse. Tundub, et kõige efektiivsem on jagada klientide ip aadressid gruppidesse ja panna nad kirja paketifiltris vastavatesse tabelitesse, nt <openvpn_arendajad>, <openvpn_testijad>, <openvpn_administraatorid> ning nende tabelite alusel ligipääsemist lubada.
# arendajad pass in quick on $openvpn inet from <openvpn_arendajad> to $arendus_subnet tag FROM_OPENVPN $udpopts (tcp.established 1064000) label "JSopenvpn_from_arendajad" # testijad pass in quick on $openvpn inet from <openvpn_testijad> to $test_subnet tag FROM_OPENVPN $udpopts (tcp.established 1064000) label "JSopenvpn_from_testijad" # administraatorid pass in quick on $openvpn inet from <openvpn_administraatorid> to any tag FROM_OPENVPN $udpopts (tcp.established 1064000) label "JSopenvpn_from_administraatorid" ... pass out quick on vorguseadmetegrupp tagged FROM_OPENVPN $udpopts (tcp.established 864000) label "JVsmd_from_openvpn_to_vorgud"
Nimesüsteem ja OpenVPN
VPN kasutamisel on ruutingu seadistamiseks valida kahe alternatiivi vahel
- ruutida VPN serveri taga olevate alamvõrkude liiklus üle VPN'i ning kõik muu klientarvuti liiklus internetti jääb toimuma otse
- ruutida kogu liiklus, välja arvatud VPN serveri endaga toimuv andmevahetus üle VPN'i; see eeldab, et VPN serveri kaudu saab kasutada avalikku võrku
Tundub, et unixilise operatsioonisüsteemi kasutamisel on mõlemal juhul, aga eelkõige esimesel juhtumil kasulik kasutada VPN klientarvutis lokaalset vahendavat nimeserverit. Lokaalne nimeserver vahendab VPN alamvõrkudes kasutatavate domeeninimede päringud VPN võrgus töötavale nimeserverile ning kõik muud nimed lahendab ise otse nö juurnimeserverite kaudu või vahendab kõigi muude nimede päringud oma internetiühenduse teenusepakkuja nimeserverile.
Vahendava nimeserveri seadistamist on kirjeldatud palas http://kuutorvaja.eenet.ee/wiki/Operatsioonisüsteemi_Debian_GNU/Linux_kasutamine#Vahendava_nimeserveri_seadistamine.
Eesti ID-kaardi kasutamine
OpenVPN lahendust saab seadistada käima selliselt, et kasutaja autentimiseks kasutatakse tema Eesti ID-kaardi isikutuvastuse ehk autentimise sertifikaati. Esitatud juhtumil on süsteemi kasutajad kõik Eesti ID-kaardi omanikud, kusjuures ei kontrollita tühistusnimekirju ega muud sellist ja lahendus ei ole tõenäoliselt otseselt kasutatav.
OpenVPN server Debianil
Serveri poolel sobib kasutada nt sellist seadistusfaili
port 1194 proto udp dev tun0 ca /etc/openvpn/SK-CA.pem cert /etc/openvpn/vpn.loomaaed.tartu.ee-cert.pem key /etc/openvpn/vpn.loomaaed.tartu.ee-key.pem dh /etc/openvpn/dh2048.pem server 172.16.1.0 255.255.255.0 ifconfig-pool-persist /tmp/ipp.txt keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log verb 3
Kus SK-CA.pem faili on ühendatud kokku neli sertifikaati, neid saab kopeerida Sertifitseerimiskeskuse kodulehehelt, www.sk.ee
# cat KLASS3-SK.PEM.pem ESTEID-SK-2007.PEM.pem JUUR-SK.PEM.pem > /etc/openvpn/SK-CA.pem
kusjuures vpn.loomaaed.tartu.ee-cert.pem ja vpn.loomaaed.tartu.ee-key.pem vastavad SK poolt väljastatud nö serveri sertifikaadile.
SK on väljastanud KLASS3-SK ja ESTEID-SK-2007 serifikaadid oma juursertifikaadi JUUR-SK suhtes; kasutajate ID-kaartidel olevad sertifikaadid on väljastatud ESTEID-SK-2007 suhtes ning nö serverite sertifikaate väljastatakse KLASS3-SK suhtes.
OpenVPN klint Debianil
Selleks, et OpenVPN klient saaks ennast autentida ID-kaardi abil VPN kasutajana peab kliendi arvutis olema tehtud Eesti ID-kaardi kasutamiseks vajalikud ettevalmistused, nt nii nagu on kirjeldatud palas http://kuutorvaja.eenet.ee/wiki/Eesti_ID-kaardi_kasutamine_Debianiga
Ettevalmistuste edukuse kontrollimiseks sobib öelda nt
# openvpn --show-pkcs11-ids /usr/lib/opensc-pkcs11.so The following objects are available for use. Each object shown below may be used as parameter to --pkcs11-id option please remember to use single quote mark. Certificate DN: /C=EE/O=ESTEID/OU=authentication/CN=OOLBERG,IMRE,37003212713/SN=OOLBERG/GN=IMRE/serialNumber=37003212713 Serial: 48843168 Serialized id: AS\x20Sertifitseerimiskeskus/PKCS\x20\x2315\x20SCard/A0055728/ID\x2Dkaart\x20\x28PIN1\x2C\x20Isikutuvastus\x29/01 Certificate DN: /C=EE/O=ESTEID/OU=digital signature/CN=OOLBERG,IMRE,37003212713/SN=OOLBERG/GN=IMRE/serialNumber=37003212713 Serial: 48843169 Serialized id: AS\x20Sertifitseerimiskeskus/PKCS\x20\x2315\x20SCard/A0055728/ID\x2Dkaart\x20\x28PIN2\x2C\x20Allkirjastamine\x29/02
Kliendi poolel sobib kasutada nt sellist seadistusfaili, \ märgid on varjestatud
client dev tun proto udp remote 192.168.10.199 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/SK-CA.pem pkcs11-providers /usr/lib/opensc-pkcs11.so pkcs11-id "AS\\x20Sertifitseerimiskeskus/PKCS\\x20\\x2315\\x20SCard/A0055728/ID\\x2Dkaart\\x20\\x28PIN1\\x2C\\x20Isikutuvastus\\x29/01" comp-lzo verb 3
Kasutamine
Eesti-ID kaardi kasutamisel esitatakse serveri poolel selline logi, muu hulgas võib tähele panna, et kasutatakse 1024 bit võtmeid
# openvpn --config openvpn.conf Sun Apr 26 09:03:34 2009 OpenVPN 2.1_rc11 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008 Sun Apr 26 09:03:34 2009 Diffie-Hellman initialized with 2048 bit key Sun Apr 26 09:03:34 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> Sun Apr 26 09:03:34 2009 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Sun Apr 26 09:03:34 2009 ROUTE default_gateway=192.168.10.254 Sun Apr 26 09:03:34 2009 TUN/TAP device tun0 opened Sun Apr 26 09:03:34 2009 TUN/TAP TX queue length set to 100 Sun Apr 26 09:03:34 2009 /sbin/ifconfig tun0 172.16.1.1 pointopoint 172.16.1.2 mtu 1500 Sun Apr 26 09:03:34 2009 /sbin/route add -net 172.16.1.0 netmask 255.255.255.0 gw 172.16.1.2 Sun Apr 26 09:03:34 2009 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Sun Apr 26 09:03:34 2009 GID set to nogroup Sun Apr 26 09:03:34 2009 UID set to nobody Sun Apr 26 09:03:34 2009 Socket Buffers: R=[124928->131072] S=[124928->131072] Sun Apr 26 09:03:34 2009 UDPv4 link local (bound): [undef]:1194 Sun Apr 26 09:03:34 2009 UDPv4 link remote: [undef] Sun Apr 26 09:03:34 2009 MULTI: multi_init called, r=256 v=256 Sun Apr 26 09:03:34 2009 IFCONFIG POOL: base=172.16.1.4 size=62 Sun Apr 26 09:03:34 2009 IFCONFIG POOL LIST Sun Apr 26 09:03:34 2009 Initialization Sequence Completed Sun Apr 26 09:09:02 2009 MULTI: multi_create_instance called Sun Apr 26 09:09:02 2009 192.168.10.101:44287 Re-using SSL/TLS context Sun Apr 26 09:09:02 2009 192.168.10.101:44287 LZO compression initialized Sun Apr 26 09:09:02 2009 192.168.10.101:44287 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Sun Apr 26 09:09:02 2009 192.168.10.101:44287 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Sun Apr 26 09:09:02 2009 192.168.10.101:44287 Local Options hash (VER=V4): '530fdded' Sun Apr 26 09:09:02 2009 192.168.10.101:44287 Expected Remote Options hash (VER=V4): '41690919' Sun Apr 26 09:09:02 2009 192.168.10.101:44287 TLS: Initial packet from 192.168.10.101:44287, sid=c50c829f 8e240ecc Sun Apr 26 09:09:13 2009 192.168.10.101:44287 VERIFY OK: depth=2, /emailAddress=pki@sk.ee/C=EE/O=AS_Sertifitseerimiskeskus/CN=Juur-SK Sun Apr 26 09:09:13 2009 192.168.10.101:44287 VERIFY OK: depth=1, /C=EE/O=AS_Sertifitseerimiskeskus/OU=ESTEID/CN=ESTEID-SK_2007 Sun Apr 26 09:09:13 2009 192.168.10.101:44287 VERIFY OK: depth=0, /C=EE/O=ESTEID/OU=authentication/CN=OOLBERG_IMRE_37003212713/SN=OOLBERG /GN=IMRE/serialNumber=37003212713 Sun Apr 26 09:09:13 2009 192.168.10.101:44287 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Apr 26 09:09:13 2009 192.168.10.101:44287 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Apr 26 09:09:13 2009 192.168.10.101:44287 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Apr 26 09:09:13 2009 192.168.10.101:44287 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Apr 26 09:09:13 2009 192.168.10.101:44287 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Sun Apr 26 09:09:13 2009 192.168.10.101:44287 [OOLBERG_IMRE_37003212713] Peer Connection Initiated with 192.168.10.101:44287 Sun Apr 26 09:09:13 2009 OOLBERG_IMRE_37003212713/192.168.10.101:44287 MULTI: Learn: 172.16.1.6 -> OOLBERG_IMRE_37003212713/192.168.10.101:44287 Sun Apr 26 09:09:13 2009 OOLBERG_IMRE_37003212713/192.168.10.101:44287 MULTI: primary virtual IP for OOLBERG_IMRE_37003212713/192.168.10.101:44287: 172.16.1.6 Sun Apr 26 09:09:14 2009 OOLBERG_IMRE_37003212713/192.168.10.101:44287 PUSH: Received control message: 'PUSH_REQUEST' Sun Apr 26 09:09:14 2009 OOLBERG_IMRE_37003212713/192.168.10.101:44287 SENT CONTROL [OOLBERG_IMRE_37003212713]: 'PUSH_REPLY,route 172.16.1.1,topology net30,ping 10,ping-restart 120,ifconfig 172.16.1.6 172.16.1.5' (status=1)
ning kliendi poolel selline, mõned ID-kaardi kasutamisega seotud veateated on eemaldatud
# openvpn --config openvpn.conf Sun Apr 26 12:07:12 2009 OpenVPN 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008 Sun Apr 26 12:07:12 2009 PKCS#11: Adding PKCS#11 provider '/usr/lib/opensc-pkcs11.so' Sun Apr 26 12:07:17 2009 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. Sun Apr 26 12:07:17 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized Sun Apr 26 12:07:18 2009 LZO compression initialized Sun Apr 26 12:07:18 2009 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Sun Apr 26 12:07:18 2009 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Sun Apr 26 12:07:18 2009 Local Options hash (VER=V4): '41690919' Sun Apr 26 12:07:18 2009 Expected Remote Options hash (VER=V4): '530fdded' Sun Apr 26 12:07:18 2009 Socket Buffers: R=[111616->131072] S=[111616->131072] Sun Apr 26 12:07:18 2009 UDPv4 link local: [undef] Sun Apr 26 12:07:18 2009 UDPv4 link remote: 192.168.10.199:1194 Sun Apr 26 12:07:18 2009 TLS: Initial packet from 192.168.10.199:1194, sid=eef2a782 22a5670e Sun Apr 26 12:07:18 2009 VERIFY OK: depth=2, /emailAddress=pki@sk.ee/C=EE/O=AS_Sertifitseerimiskeskus/CN=Juur-SK Sun Apr 26 12:07:18 2009 VERIFY OK: depth=1, /emailAddress=pki@sk.ee/C=EE/O=AS_Sertifitseerimiskeskus/OU=Sertifitseerimisteenused/serialNumber=1/CN=KLASS3-SK Sun Apr 26 12:07:18 2009 VERIFY OK: depth=0, /CN=vpn.loomaaed.tartu.ee/O=Tartu Loomaaed/L=Tartu/ST=Tartu/C=EE Enter ID-kaart (PIN1, Isikutuvastus) token Password: Sun Apr 26 12:07:29 2009 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Apr 26 12:07:29 2009 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Apr 26 12:07:29 2009 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Sun Apr 26 12:07:29 2009 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sun Apr 26 12:07:29 2009 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Sun Apr 26 12:07:29 2009 [www.ria.ee] Peer Connection Initiated with 192.168.10.199:1194 Sun Apr 26 12:07:30 2009 SENT CONTROL [vpn.loomaaed.tartu.ee]: 'PUSH_REQUEST' (status=1) Sun Apr 26 12:07:30 2009 PUSH: Received control message: 'PUSH_REPLY,route 172.16.1.1,topology net30,ping 10,ping-restart 120,ifconfig 172.16.1.6 172.16.1.5' Sun Apr 26 12:07:30 2009 OPTIONS IMPORT: timers and/or timeouts modified Sun Apr 26 12:07:30 2009 OPTIONS IMPORT: --ifconfig/up options modified Sun Apr 26 12:07:30 2009 OPTIONS IMPORT: route options modified Sun Apr 26 12:07:30 2009 ROUTE default_gateway=192.168.10.254 Sun Apr 26 12:07:30 2009 TUN/TAP device tun1 opened Sun Apr 26 12:07:30 2009 TUN/TAP TX queue length set to 100 Sun Apr 26 12:07:30 2009 /sbin/ifconfig tun1 172.16.1.6 pointopoint 172.16.1.5 mtu 1500 [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized Sun Apr 26 12:07:30 2009 /sbin/route add -net 172.16.1.1 netmask 255.255.255.255 gw 172.16.1.5 [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized Sun Apr 26 12:07:30 2009 Initialization Sequence Completed
Märkused
- Kui on vajalik pidada OpenVPN serveri Debiani peal, siis CA pidamiseks sobib kasutada kataloogis /usr/share/doc/openvpn/examples/easy-rsa/2.0 asuvaid programme.
- Deemon režiimis käivitamiseks tuleb kasutada --daemon võtit.
- Kui OpenVPN server suunab ümber kliendi vaikelüüsi üle tunneli (push "redirect-gateway local def1"), siis peab arvestama, et kõik liiklus hakkab selle kliendi jaoks käima läbi OpenVPN serveri, st kliendi internetiühenduse kiirus on piiratud OpenVPN serveri internetiühenduse kiirusega
- Kui CA jaoks kasutada mõnda muud programmi kui OpenVPNiga kaasa tulevat eary-rsa, nt TinyCA (http://kuutorvaja.eenet.ee/wiki/TinyCA_kasutamine), siis ei ole vaja tegeleda keskkonnamuutujate seadistamisega, piisab vaid näidata seadistusfailis võtmete ja sertifikaatide asukohad.