OpenVPN
V tejto ukážke pôjde o vytvorenie VPN spojenia medzi dvoma počítačmi - servrami. V praxi sa takéto prepojenie vyskytuje vo firmách s viacerými pobočkami, kde vďaka VPN sa vytvorí akoby jedna veľká LAN sieť zahrňujúca všetky pobočky. Zamestanec vôbec nevidí rozdiel medzi spojením s lokálnym počítačom jeho kolegu alebo s počítačom vo vedľajšej pobočke.
Na vytváranie OpenVPN s použitím TLS zabezpečenie ja potrebné použiť certifikáty.
Certifikáty musia byť podpísané tou istou certifikačnou autoritou. Dobrý návod ako vytvoriť certifikačnú autoritu a
následne certifikáty je uvedený na stránke
http://www.root.cz/clanky/jak-na-openssl/.
Certif. autoritu vytvoríme:
openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 1098
Dobré je si pred samotou tvorbou certifikátov nastaviť konfiguračný súbor k OpenSSL
/etc/ssl/openssl.conf, aby nebola certifikačná autorita hľadaná na zlej adrese a taktiež si môžme nastaviť defaultné hodnoty pre údaje o certifikátoch. Mení sa spravidla iba pole CN, kde je názov daného certifikátu (ovpn-klient, ovpn-server)
Teraz si vytvoríme žiadosť o certifikát.
openssl req -new -nodes -out vpn_server.crt -keyout vpn_server.key -days 1098
vygeneruje sa certifikát a kľúč.
Certifikát musíme podpísať certifikačnou autoritou:
openssl ca -in vpn_server.crt -out vpn_server_podp.crt
Takto sme získali jeden platný certifikát. Rovnako si vytvoríme aj ostatné potrebné.
Aj server aj klient potrebuje poznať svoj certifikát+kľúč, ktorý majú každý vlastný, a certifikát certifikačnej autority, napr. ca.crt, ktorý je rovnaký ako pre
klienta tak aj pre server. Tieto potrebné súbory musíme na daný stroj umiestniť. Kľúč je dobré dopraviť naň bezpečnou cestou.
Na strane servera musí okrem toho byť aj
dh parameter. Ten tiež vytvoríme pomocou openssl:
openssl dhparam -out dh1024.pem 1024
V konfiguračnom súbore sa nastavia parametre
ca, cert, key, (a na strane servra aj parameter
dh) kde zadáme cestu k daným súborom. Nesmieme zabudnúť ešte na inicializovanie tls spojenia a to
napísaním
tls-client do konfiguračného súboru na strane klienta a
tls-server na strane servera.
Ukážka konfiguračného skriptu pre server a pre klienta:
Server:
# server.conf
port 1194
proto udp
local 162.17.14.1
remote 162.18.61.72
dev tun1
ifconfig 1.0.0.1 1.0.0.2
tls-server
ca pki/ca.crt
cert pki/server.crt
key pki/server.key
dh pki/dh1024.pem
#comp-lzo
status /var/log/ovpn-c.dd-s.uk-status.log
verb 3
user nobody
group nobody
persist-key
persist-tun
writepid /var/run/ovpn-c.dd-s.uk.pid
Client:
# client vpn
port 1194
proto udp
local 162.18.61.72
remote 162.17.14.1
dev tun1
ifconfig 1.0.0.2 1.0.0.1
tls-client
ca pki/ca.crt
cert pki/client.crt
key pki/client.key
#comp-lzo
status /var/log/ovpn-c.dd-s.uk-status.log
verb 3
user nobody
group nobody
persist-key
persist-tun
writepid /var/run/ovpn-c.pid
Zakomentovaný riadok s obsahom comp-lzo je nastavenie, že chceme, aby dáta šli cez vpn komprimované. Tu som zvlolila kompresiu lzo.
Spustenie Openvpn
Keď máme napísané konfiguračné súbory, vygenerované certifikáty uložené v podkinižnici pki, môžme skúsiť vpn spustiť. Ešte pre doplnenie:
Konfiguračný skript môžme uložiť napr. do /etc/openvpn/script a certifikáty do /etc/openvpn/pki/.
Najprv si spustíme openvpn tak, aby bežal na popredí a aby sme hneď videli informácie o prípadných chybách, alebo v opačnom prípade čakanie na openvpn na druhej strane. Keď aj tam spustíme openvpn a inicializácia prebehne bez problémov, uvidíme hlášku: Initialization Sequence Completed
Spustenie:
openvpn --cd /etc/openvpn/ --config /etc/openvpn/script.conf
Kde prepínačom
--cd sme nastavili adresár, odkiaľ sa budú čítať súbory. Bez tohto prepínača by si openvpn nenašlo podknižnicu pki a certifikáty v nej (našlo by ich iba v prípade, že my sme sa nachádzali v adresári
/etc/openvpn/, keď sme spúštali openvpn). A prepínačom
--config mu určíme, odkiaľ má brať konfiguráciu.
Výpis tohto príkazu by mohol vyzerať takto:
Tue Oct 28 09:52:21 2008 OpenVPN 2.0.9 i386-unknown-openbsd4.3 [SSL] [LZO] built on Oct 28 2008
Tue Oct 28 09:52:21 2008 Diffie-Hellman initialized with 1024 bit key
Tue Oct 28 09:52:21 2008 LZO compression initialized
Tue Oct 28 09:52:21 2008 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Tue Oct 28 09:52:21 2008 /sbin/ifconfig tun1 destroy
ifconfig: SIOCGIFFLAGS: Device not configured
Tue Oct 28 09:52:21 2008 /sbin/ifconfig tun1 create
Tue Oct 28 09:52:21 2008 NOTE: Tried to delete pre-existing tun/tap instance -- No Problem if failure
Tue Oct 28 09:52:21 2008 /sbin/ifconfig tun1 1.0.0.1 1.0.0.2 mtu 1500 netmask 255.255.255.255 up
Tue Oct 28 09:52:21 2008 TUN/TAP device /dev/tun1 opened
Tue Oct 28 09:52:21 2008 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Tue Oct 28 09:52:21 2008 Local Options hash (VER=V4): 'df1ada2c'
Tue Oct 28 09:52:21 2008 Expected Remote Options hash (VER=V4): 'e119909a'
Tue Oct 28 09:52:21 2008 GID set to nobody
Tue Oct 28 09:52:21 2008 UID set to nobody
Tue Oct 28 09:52:21 2008 UDPv4 link local (bound): 192.168.1.1:1194
Tue Oct 28 09:52:21 2008 UDPv4 link remote: 192.168.1.2:1194
Tue Oct 28 09:52:51 2008 TLS: Initial packet from 192.168.202.167:1194, sid=f890af91 2635c92b
Tue Oct 28 09:52:51 2008 VERIFY OK: depth=1, /C=SK/ST=Slovakia/L=Bratislava/O=Firma/OU=skratka/CN=certifikacna_autorita_vi/emailAddress=mail@mail.sk
Tue Oct 28 09:52:51 2008 VERIFY OK: depth=0, /C=SK/ST=Slovakia/L=Bratislava/O=Firma/OU=stssk/CN=server/emailAddress=mail@mail.sk
Tue Oct 28 09:52:52 2008 [server] Peer Connection Initiated with 192.168.1.2:1194
Tue Oct 28 09:52:53 2008 Initialization Sequence Completed
Ak to dopadlo takto úspešne, môžme spustiť OpenVPN ako daémona:
openvpn --cd /etc/openvpn/ --daemon --config /etc/openvpn/script.conf
Výpisy z tohto nadviazania spojenia sa dajú nájsť v logoch.
Jednoduchým otestovaním, či spojenie funguje, je ping vdialenej časti VPN tunela:
ping 1.0.0.2
Viac o OpenVPN
Dokumentácia k OpenVPN:
Inštalácia
http://openvpn.net/index.php/documentation/howto.html#pki
OpenVpn sa dá nainštalovať zo zdrojových kódov, jediná potrebná závislosť (ktorá mne chýbala na novej inštalácií OpenBSD), je LZO. Ak nechcete prenášať dáta komprimované, stačí inštalovať bez podpory LZO:
./configure --disable-lzo
Ak chceme LZO treba si stiahnuť zdrojové kódy a nainštalovať. Inštalácia prebehla bez problémov.
LZO svoje include a lib súbory uložilo do podadresára
/usr/local/ a pri konfigurácií openvpn boli tieto súbory hľadané v
/usr/ (/usr/include , /usr/lib), takže na zbehnutie
./configure openvpn som ich musela prekopírovať.
Test OpenVPN
Testovala som rýchlosť prenosu dát cez VPN a zaťaženie procesorov pri prenášaní dát.
Test prebehol na počítačoch s CPU: 3.00GHz a prenosová cesta bola s maximálnou prenosovu rýchlosťou 100Mbit/s.
Ako testovacie dáta som poslielala súbor s veľkosťou 700MB.
Testovala som ako s kompresiou dát tak aj bez nej, ale jej vplyv sa na výsledkoch priam vôbec neprejavil.
Priemerná prenosová rýchlosť, s ktorou bol súbor prekopírovaný, bola
42.4Mbit/s.
Na porovnanie - bez použitia VPN bola prenosová rýchlosť: 85.6Mbit/s
Maximálne zaťaženie procesora pri prenose dát bolo
35.89% na vysielacej strane a
39.06% na prijímacej strane.
28.10.2008