Použití OpenVPN s vlastní PKI a OpenSSL Pavel Hruška (hru354), Michal Němec (nem374) Abstrakt: Tato semestrální práce se zaměřuje na popis OpenVPN jako nástroje pro tvorbu VPN s využitím PKI (Public Key Infrastructure) a realizací pomocí OpenSSL. Díky této kombinaci je možné velmi efektivně vytvářet VPN se zajištěním všech požadavků na bezpečnost. Klíčová slova: VPN, OpenVPN, PKI, SSL/TLS, OpenSSL, RSA 1 Úvod...............................................................................................................................2 1.1 Úvod do VPN..........................................................................................................2 1.2 User-space SSL VPN..............................................................................................2 1.3 TUN/TAP virtuální síťové adaptéry........................................................................2 1.4 SSL/TLS.................................................................................................................2 2 OpenVPN........................................................................................................................2 2.1 Krátce o OpenVPN.................................................................................................3 2.1.1 Varianty VPN tunelů (nejen v OpenVPN)......................................................3 2.1.2 Možnosti autentizace v OpenVPN..................................................................3 2.1.3 Další možnosti zabezpečení OpenVPN..........................................................3 3 OpenSSL.........................................................................................................................4 4 Public Key Infrastructure – PKI.....................................................................................4 4.1 Co je PKI?...............................................................................................................4 4.2 OpenVPN a PKI......................................................................................................4 4.3 Tvorba vlastní PKI..................................................................................................4 4.3.1 Easy-rsa...........................................................................................................4 4.3.2 Inicializace PKI...............................................................................................5 4.3.3 Klíč pro server OpenVPN...............................................................................6 4.3.4 Klíče pro klienty..............................................................................................7 4.3.5 Parametry Diffie-Hellman...............................................................................8 4.3.6 Soubory PKI....................................................................................................8 4.3.7 Revokace (zneplatnění) certifikátu.................................................................8 4.3.8 Jemnější konfigurace parametrů PKI a easy-rsa.............................................9 4.3.9 Easy-rsa CRL bug...........................................................................................9 5 Konfigurace serveru.......................................................................................................9 6 Konfigurace klientů......................................................................................................11 7 Výstupy.........................................................................................................................11 7.1 Server....................................................................................................................11 7.2 Klient.....................................................................................................................12 8 Odkazy..........................................................................................................................12 9 Reference......................................................................................................................12
listopad 2009
1/12
1 Úvod V první části práce se soustředíme na úvod do problematiky VPN, dále pak na krátké představení OpenVPN a jeho možností. Následuje popis vytvoření vlastní PKI infrastruktury pomocí OpenSSL (resp. pomocí skriptů easy-rsa dodávaných s instalací OpenVPN). V závěru práce pak ukazujeme konkrétní konfigurace serveru a klientů využívajících vytvořenou PKI. Veškeré informace zde uvedené se týkají OpenVPN verze 2.x, jako testovací prostředí byly použity linuxová distribuce Fedora Core 8 a MS Windows XP.
1.1
Úvod do VPN
Virtual Private Netvork, zkráceně VPN, představuje sadu nástrojů, které umožňují navzájem zabezpečeně propojit sítě v různých lokalitách, kde k samotnému propojení je využita veřejná síť jako transportní vrstva. Virtuální privátní sítě začaly vznikat s rozmachem internetu (který nabídl levnou konektivitu, ale obecně nedůvěryhodnou), v kontrastu s drahými (ale důvěryhodnými) pronajímanými datovým okruhy.
Obr.1: Příklad VPN propojující dva segmenty 192.168.1.0/24 a 192.168.2.0/24
1.2
User-space SSL VPN
User-space SSL VPN využívají SSL/TLS protokol k vytváření VPN tunelů a k šifrování dat. User-space označení znamená, že se jedná o aplikaci, která běží ve svém „uživatelském“ prostoru a s operačním systémem komunikuje pomocí virtuálních síťových adaptérů TUN či TAP.
1.3
TUN/TAP virtuální síťové adaptéry
Jak bylo již zmíněno, důležitým prvkem v user-space VPN jsou virtuální síťové adaptéry označované jako TUN a TAP: • TAP – simuluje síťové zařízení, pracující na druhé vrstvě (pracuje např. s ethernetovými rámci). Slouží k vytváření mostů (bridge). • TUN – simuluje síťové zařízení, pracující na třetí vrstvě (pracuje např. s IP pakety). Slouží při použití routování. Podpora TUN/TAP adaptérů je implementována v jádrech operačních systémů. Pakety zapsané do těchto adaptérů jsou operačním systémem doručeny do user-space aplikace, která se k danému virtuálnímu adapteru připojí. Obdobně, pakety zapsané aplikací do adaptéru jsou skrze něj doručeny do operačního systému.
1.4
SSL/TLS
SSL/TLS je standardizovaný a velmi rozšířený protokol pro šifrování dat v prostředí internetu.
2 OpenVPN V následující kapitole si představíme projekt OpenVPN.
listopad 2009
2/12
2.1
Krátce o OpenVPN
OpenVPN představuje open-source řešení user-space SSL VPN. V tuto chvíli je zřejmě nejpopulárnější nástroj v dané kategorii. OpenVPN je oblíbený především díky velmi široké škále možností konfigurace, ale také díky velmi snadnému ovládáním (konfiguraci). Je rozšířen na všechny populární operační systémy (Linux, Windows, Mac OS, Solaris, …).
2.1.1
Varianty VPN tunelů (nejen v OpenVPN)
Dle konkrétního nasazení infrastruktury můžeme (obecně) VPN rozlišit na dvě kategorie: • 1:1 (statické) – jedná se typicky o propojení dvou sítí různých lokalit, kde spojení bývá stálé, resp. bývá navazováno v závislosti na stavu připojení jednotlivých lokalit do internetu. • 1:N (dynamické) – připojení, kdy se jednotlivé VPN tunely vytváří na požádání klienta. V rámci této kategorie od systému většinou očekáváme další služby, jako je přidělování IP adres klientům apod. Obě varianty je možné realizovat s OpenVPN.
2.1.2
Možnosti autentizace v OpenVPN
Virtuální privátní sítě vytvářejí šifrované spojení mezi dvěma body, kde důležitou fází při vytváření tunelu je autentizace. OpenVPN nabízí dva módy autentizace: • Statické klíče – jedná se o konfiguraci, kdy obě strany používají sdílené klíče. Statický klíč obsahuje jak autentizací HMAC klíče tak i šifrovací/dešifrovací klíče. Tyto klíče jsou vygenerovány a sdíleny ještě před prvotním vytvořením tunelu. Výhoda – jednoduchost, rychlost nasazení. Nevýhoda – problém s bezpečnou distribucí klíčů na zúčastněné strany. • SSL/TLS – použití SSL/TLS a certifikátů pro autentizaci a výměnu klíčů. V tomto módu dochází k vytvoření SSL spojení s oboustrannou autentizací (každá strana poskytne svůj certifikát a ověří protistranu). Pokud je autentizace úspěšná, jsou vygenerovány náhodné HMAC a šifrovací/dešifrovací klíče a přes zabezpečené SSL/TLS spojení navzájem vyměněny. Výhoda – flexibilní. Nevýhoda – složitější a časově náročnější nasazení vlastní PKI infrastruktury.
2.1.3
Další možnosti zabezpečení OpenVPN
Další úroveň zabezpečení, kterou OpenVPN nabízí, je možnost autentizace paketů v rámci úvodního navazování TLS spojení (TLS Handshake). Jedná se o direktivu: tls-auth key X.
Kde key je cesta ke sdílenému klíči, a X může nabývat jedné ze dvou numerických hodnot: • 0 – pokud tls-auth konfigurujeme na serveru • 1 – pokud tls-auth konfigurujeme na klientovi. V tomto režimu se přidává ke každému TLS handshake paketu HMAC signatura. Jakékoliv jiné pakety, které tuto signaturu neobsahují, mohou být zahozeny bez hlubšího zkoumání. Jedná se tedy o doplňkové zabezpečení vedle vlastního RSA. Díky tomu je možné zamezit těmto útokům: • DoS útokům na otevřený UDP port OpenVPN. • Navazování SSL/TLS spojení (handshake) z neoprávněných strojů (umožní detekci mnohem dříve, než samotné SSL/TLS). • Buffer-overflow v implementaci SSL/TLS (bez HMAC nelze vůbec iniciovat TLS Handshake). Sdílený klíč je nutné vygenerovat pomocí příkazu OpenVPN, konkrétně např.: openvpn --genkey --secret ta.key
Nevýhoda – nutnost distribuovat sdílený klíč ke všem klientům a serveru (nutno provést přes zabezpečený kanál).
listopad 2009
3/12
3 OpenSSL OpenSSL je open source implementace SSL/TLS. Základní knihovna napsaná v jazyce C implementuje základní kryptografické funkce. OpenSSL je multiplatformní a je dostupné pro všechny běžné operační sytémy.[5] OpenSSL podporuje množství kryptografických algoritmů: • Šifry: AES, Blowfish, Camellia, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES • Hashovací funkce: MD5, MD2, SHA, MDC-2 • Asymetrická kryptografie: RSA, DSA, Diffie-Hellman, Elliptic curve OpenSSL je licencováno pod modifikovanou Apache licencí takže je ho možné použít i pro komerční projekty avšak nekompatibilní s GPL licencí.
4 Public Key Infrastructure – PKI Před tím, než je možné zprovoznit OpenVPN s PKI, je nutné tuto infrastrukturu veřejných klíčů vytvořit.
4.1
Co je PKI?
PKI se skládá z těchto dvou částí: • Certifikáty (veřejné klíče) a soukromé klíče – zvlášť pro každého klienta a server. • Certifikační autority (CA), která podepisuje jednotlivé certifikáty (klienta i serveru).
4.2
OpenVPN a PKI
OpenVPN využívá obousměrnou autentizaci, to znamená, že server musí autentizovat klientský certifikát a naopak klient musí autentizovat certifikát serveru. Během autentizace probíhá především zjištění, zda daný certifikát byl podepsán certifikační autoritou (CA), dále pak dochází ke zjišťování dalších parametrů certifikátu (common name, …). Tento model má tyto výhody: • Server akceptuje pouze certifikáty podepsané CA. • Server nemusí mít k dispozici veškeré certifikáty klientů, kteří se k němu mohou připojit. • Jednotlivé certifikáty je možné zneplatnit (revokovat) např. v případě zneužití privátního klíče některého z klientů.
4.3
Tvorba vlastní PKI
Pro vytvoření vlastní PKI v rámci OpenVPN můžeme postupovat dvěma způsoby: • Ručně – pomocí OpenSSL. • S využitím předdefinovaných skriptů (easy-rsa), které se instalují spolu s OpenVPN.
4.3.1
Easy-rsa
Easy-rsa je balíček skriptů, které usnadňují vytvoření a správu vlastní PKI (nejen) pro OpenVPN. Využívají služeb OpenSSL. Skripty z balíčku easy-rsa se nacházejí v závislosti na operačním systému v různých umístěních. Na našem testovacím systému (Fedora 8) se jedná konkrétně o umístění: /usr/share/openvpn/easy-rsa/2.0/
Celý adresář je vhodné zkopírovat do jiného umístění, aby nedošlo k přepsání změn, které provedeme při příští aktualizaci balíčku (pokud používáme rpm/yum/...). Zkopírujeme jej tedy do nového umístění, např.: /etc/openvpn/easy-rsa/
Od této chvíle se budeme pohybovat v tomto adresáři. Jako první věc je nutné nakonfigurovat základní parametry budoucí PKI. Editujeme tedy soubor vars. Důležité jsou tyto proměnné: • • • •
EASY_RSA = "’pwd’" KEY_COUNTRY = "CZ" KEY_PROVINCE = "Czech Republic" KEY_CITY = "Mesto"
listopad 2009
4/12
• •
KEY_ORG = "Organizace" KEY_EMAIL = "
[email protected]"
Jedná se o základní parametry CA, tyto parametry je nutné vyplnit, samozřejmě s údaji odpovídající konkrétnímu nasazení. Parametr EASY_RSA představuje kořenový adresář budoucí PKI (výchozí – aktuální adresář (‘pwd’)).
4.3.2
Inicializace PKI
Nyní můžeme spustit inicializaci PKI pomocí série těchto příkazů: source ./vars ./clean-all ./build-ca
Poslední příkaz build-ca vytvoří certifikační autoritu. Jedná se o interaktivní příkaz, ve kterém je nutné zadat požadované údaje. Výstup: [root@localhost easy-rsa]# ./build-ca server Generating a 1024 bit RSA private key ...........++++++ ................................++++++ writing new private key to 'server.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [CZ]: State or Province Name (full name) [Czech Republic]: Locality Name (eg, city) [Mesto]: Organization Name (eg, company) [Organizace]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [server]: Email Address [
[email protected]]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CZ' stateOrProvinceName :PRINTABLE:'Czech Republic' localityName :PRINTABLE:'Mesto' organizationName :PRINTABLE:'Organizace' commonName :PRINTABLE:'server' emailAddress :IA5STRING:'
[email protected]' Certificate is to be certified until Nov 11 10:12:44 2019 GMT (3650 days) Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Jak je patrné, většina údajů je již přednastavena (díky editaci souboru vars), lze je tedy pouze potvrdit. Po dokončení inicializace PKI dojde k vygenerování ca.crt a ca.key, tedy certifikátu a privátního klíče listopad 2009
5/12
certifikační autority. Oba soubory nalezneme v adresáři keys (pokud nedošlo ke změně konfigurace v souboru vars). Platnost certifikátu je nastavena na 3650 dní, tedy 10 let. Bezpečnostní upozornění: nejdůležitějším souborem od tohoto okamžiku a to po celou dobu fungování vlastní PKI je privátní klíč certifikační autory, pomocí něhož jsou podepisovány budoucí vystavované certifikáty pro klienty a servery. Je velice důležité udržet tento soubor v bezpečí před zneužitím, jinak dojde ke kompromitaci celé PKI.
4.3.3
Klíč pro server OpenVPN
Dále vygenerujeme certifikát a privátní klíč pro server: ./build-key-server server
Výstup: [root@localhost easy-rsa]# ./build-key-server server Generating a 1024 bit RSA private key ...........++++++ ................................++++++ writing new private key to 'server.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [CZ]: State or Province Name (full name) [Czech Republic]: Locality Name (eg, city) [Mesto]: Organization Name (eg, company) [Organizace]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [server]: Email Address [
[email protected]]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CZ' stateOrProvinceName :PRINTABLE:'Czech Republic' localityName :PRINTABLE:'Mesto' organizationName :PRINTABLE:'Organizace' commonName :PRINTABLE:'server' emailAddress :IA5STRING:'
[email protected]' Certificate is to be certified until Nov 11 10:12:44 2019 GMT (3650 days) Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
V tuto chvíli máme k dispozici certifikát serveru (server.crt, server.key).
4.3.4
Klíče pro klienty
Nyní můžeme vygenerovat certifikáty a klíče pro klienty. Podle toho, zda přístup k certifikátu chceme chránit heslem, či nikoliv, můžeme použít jeden z těchto skriptů: ./build-key klient
listopad 2009
#bez hesla
6/12
nebo ./build-key-pass klient
#chráněno heslem
Certifikáty chráněné heslem poskytují větší bezpečnost pro případ zneužití certifikátu neoprávněnou osobou, nicméně nelze je použít u služeb, jejichž start vyžadujeme bezobslužný (služby, servery, ...). Výstup generování klíče chráněného heslem: [root@localhost easy-rsa]# ./build-key-pass klient1 Generating a 1024 bit RSA private key ...................................................................................... .............++++++ ............++++++ writing new private key to 'klient1.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [CZ]: State or Province Name (full name) [Czech Republic]: Locality Name (eg, city) [Mesto]: Organization Name (eg, company) [Organizace]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [klient1]: Email Address [
[email protected]]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CZ' stateOrProvinceName :PRINTABLE:'Czech Republic' localityName :PRINTABLE:'Mesto' organizationName :PRINTABLE:'Organizace' commonName :PRINTABLE:'klient1' emailAddress :IA5STRING:'
[email protected]' Certificate is to be certified until Nov 11 10:28:37 2019 GMT (3650 days) Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
4.3.5
Parametry Diffie-Hellman
Pro server je nutné vygenerovat Diffie-Hellman parametry. Diffie-Hellman protokol slouží k bezpečné výměně klíčů přes nezabezpečené médium a to bez nutnosti jakéhokoliv předchozího zabezpečení výměny dat na tomto médiu[2]. Diffie-Hellman parametry vygenerujeme pomocí tohoto skriptu: ./build-dh
listopad 2009
7/12
Výstup: [root@localhost easy-rsa]# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ................................................................ +.................................................. +................................................+.....++*++*++*
4.3.6
Soubory PKI
Pokud se podíváme do adresáře certifikační autority (viz parametr EASY_RSA v souboru vars), uvidíme zde několik souborů. Výchozí umístění souborů je v podadresáři keys. Co zde nalezneme: • Vygenerované certifikáty a klíče certifikační autority a serveru • Soubor index.txt, který obsahuje seznam doposud vygenerovaných certifikátů touto autoritou. • Soubor serial, který obsahuje číselnou hodnotu (např. 02), což udává sériové číslo příštího generovaného certifikátu. • Klíče a certifikáty vygenerované pro klienty Následující tabulka shrnuje vygenerované soubory s jejich popisem: Soubor
Kdo jej potřebuje
Popis
Tajné?
ca.crt
Server + klienti
Kořenový certifikát CA
Ne
ca.key
Pouze stroj podepisující certifikáty
Kořenový klíč CA
ANO!!!
Dh1024.pem
Pouze server
Diffie Helmann parametry
Ne
server.crt
Pouze server
Certifikát serveru
Ne
server.key
Pouze server
Privátní klíč serveru
Ano
klient1.crt
Pouze klient 1
Certifikát klienta 1
Ne
klient1.key
Pouze klient 1
Privátní klíč klienta 1
Ano
klient2.crt
Pouze klient 2
Certifikát klienta 2
Ne
Klient2.key
Pouze klient 2
Privátní klíč klienta 2
Ano
4.3.7
Revokace (zneplatnění) certifikátu
Revokace certifikátu je proces, při kterém dojde k zneplatnění certifikátu dříve podepsaného certifikační autoritou. Zneplatnění certifikátu může být požadováno např. v těchto případech: • Certifikát (jeho privátní klíč) byl zneužit cizí osobou • Je nutné vygenerovat nový certifikát pro uživatele (ztráta hesla apod.) • Je nutné zabránit uživateli přistupovat do VPN. Pro revokaci certifikátu můžeme opět použít skript ze sady easy-rsa, resp. posloupnost dvou skriptů. Následující příklad předpokládá, že chceme zneplatnit certifikát klienta č.2: source ./vars ./revoke-full klient2
Výstup: [root@localhost easy-rsa]# ./revoke-full klient2 Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Revoking Certificate 04. Data Base Updated
listopad 2009
8/12
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf klient2.crt: /C=CZ/ST=Czech Republic/L=Mesto/O=Organizace/CN=klient2/
[email protected] error 23 at 0 depth lookup:certificate revoked
Chybové hlášení na posledním řádku error 23 at 0 depth lookup:certificate revoked nám dává informaci o již zneplatnění certifikátu (tedy o úspěchu požadované operace). Při prvním použití tohoto příkazu dojde k vygenerování souboru crl.pem, který představuje seznam revokovaných certifikátů (Certificate Revocation List). K tomu, aby docházelo v rámci OpenVPN ke kontrole revokovaných certifikátů, je nutné doplnit konfiguraci o direktivu: crl-verify crl-verify-file
Kde crl-verify-file je cesta k soboru crl.pem.
4.3.8
Jemnější konfigurace parametrů PKI a easy-rsa
Pokud potřebujeme změnit některé z parametrů PKI (např. doba platnosti generovaných certifikátů apod.), můžeme editovat konfigurační soubor OpenSSL, který se využívá při práci s easy-rsa skripty: /etc/openvpn/easy-rsa/openssl.cnf
4.3.9
Easy-rsa CRL bug
V některých distribucích Linuxu, včetně námi testované Fedory 8, uživatel může narazit na chybu při revokaci certifikátu (skript revoke-full). Chyba se projeví následující chybovou hláškou: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf error on line 282 of config file '/etc/openvpn/easy-rsa/openssl.cnf' 23924:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
Řešení: zakomentovat v openssl.cnf sekci [ pkcs11_section ]. Více podrobností např.viz [3].
5 Konfigurace serveru V okamžiku, kdy máme vytvořenou vlastní PKI, můžeme přistoupit ke konfiguraci serveru OpenVPN. Konfigurace, kterou si předvedeme, bude splňovat následující parametry: • Využijeme virtuální tun0 adaptér (umožní routování) • Transportní protokol UDP, port 1194 • Aktivní komprese (comp-lzo) • Aktivní logování s postupným zápisem na konec log souboru. • Keepalive zprávy každých 10 sekund, po 120 sekundách usuzujeme, že je klient nedostupný. • Pro vyšší bezpečnost poběží démon OpenVPN pod neprivilegovaným oprávněním (uživatel/skupina openvpn/openvpn, může být i nobody/nobody). • S tím úzce souvisí direktivy persit-key a persit-tun, ty zajišťují udržení zdrojů (klíče, adaptér) pro případ restartu, kdy již nemá OpenVPN přístup k daným zdrojům (běží pod nižším oprávněním). Popsaná konfigurace v řeči OpenVPN: # Tunnel mode dev tun0 proto udp comp-lzo port 1194 user openvpn
listopad 2009
9/12
group openvpn persist-key persist-tun # logging log-append /var/log/openvpn0 # Keepalive directive keepalive 15 120 # Run as a single instance server mode server
Další část konfigurace se týká parametrů, které budou získávat klienti v okamžiku, kdy se připojí do VPN. Jedná se v podstatě jistou variantu DHCP serveru. Konfigurované parametry: • rozsah dynamicky přidělovaných IP adres • defaultní brána • další routovací informace (např. pro přístup do dalších segmentů sítě) • další dhcp-parametry (DNS servery, WINS servery , …) Konfigurace: # Server endpoint appears first, folllowed by the gw interace ip ifconfig 192.168.5.1 192.168.5.2 # Range of IP addresses reserved for clients ifconfig-pool 192.168.5.10 192.168.5.99 # route setup on server route 192.168.5.0 255.255.255.0 # example route command pushed to client push "route 192.168.5.1 255.255.255.255" push "route 192.168.11.0 255.255.255.0" push "dhcp-option DNS 192.168.11.1" push "dhcp-option WINS 192.168.11.1"
Závěr konfigurace se týká PKI – certifikáty, klíče atd. Následující příklad: • Rozšířená autentizace (TLS-Handshake) pomocí sdíleného klíče ta.key • Certifikáty a klíče včetně parametrů diffie-hellman z adresáře vlastní PKI • Kontrola revokovaných certifikátů • PKI v adresáři /etc/openvpn/easy-rsa/keys. Konfigurace: # Specifi tls-server for certificate exchange tls-server # More security with ta.key (0 for server, 1 for client) tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 # Diffie-Hellman Parameters (tls-server only) dh /etc/openvpn/easy-rsa/keys/dh1024.pem # Root certificate ca /etc/openvpn/easy-rsa/keys/ca.crt # Server certificate cert /etc/openvpn/easy-rsa/keys/server.crt # Server private key key /etc/openvpn/easy-rsa/keys/server.key # Check for revoked client certificates crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
listopad 2009
10/12
6 Konfigurace klientů Nyní můžeme přistoupit na konfiguraci klientů. Následující příklad bude demonstrovat konfiguraci klienta s těmito parametry: • Připojení k serveru host_addr (IP adresa nebo DNS jméno). • Transportní protokol UDP, port 1194. • Virtuální adaptér tun0. • Kontrola common name serverového certifikátu na hodnotu server (tls-remote) – ochrana proti útoku Man-In-The-Middle (více viz [4]). • Rozšířená autentizace (TLS-Handshake) pomocí sdíleného klíče ta.key. • Aktivní komprese (comp-lzo). • Získání parametrů z DHCP serveru OpenVPN (pull). Konfigurace: # OpenVPN client config file remote host_addr proto udp port 1194 dev tun0 tls-client tls-remote server tls-auth ta.key 1 ca ca.crt cert klient1.crt key klient1.pem comp-lzo pull
Tato konfigurace předpokládá umístění potřebných souborů u klienta (sdílené klíče, certifikáty a privátní klíče) a v dosahu démona OpenVPN. Tajné klíče je nutné distribuovat přes zabezpečené kanály (osobní instalace, HTTPS, …).
7 Výstupy Na závěr ukázky výstupů démona OpenVPN (logy).
7.1
Server
Spuštění OpenVPN serveru: Sun Nov 15 19:35:47 2009 built on Mar 3 2007 Sun Nov 15 19:35:47 2009 static key file Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009 Sun Nov 15 19:35:47 2009
OpenVPN 2.1_rc2 i386-redhat-linux-gnu [SSL] [LZO2] [EPOLL] Control Channel Authentication: using 'ta.key' as a OpenVPN TUN/TAP device tun0 opened /sbin/ip link set dev tun0 up mtu 1500 /sbin/ip addr add dev tun0 local 192.168.5.1 peer 192.168.5.2 GID set to openvpn UID set to openvpn UDPv4 link local (bound): [undef]:1194 UDPv4 link remote: [undef] Initialization Sequence Completed
Požadavek připojení klienta do VPN: Sun Nov 15 18:39:27 2009 213.192.22.4:1194 Re-using SSL/TLS context Sun Nov 15 18:39:27 2009 213.192.22.4:1194 LZO compression initialized Sun Nov 15 18:39:29 2009 213.192.22.4:1194 [hruska] Peer Connection Initiated with 213.192.22.4:1194
listopad 2009
11/12
7.2
Klient
Úspěšné připojení klienta (konkrétně z MS Windows XP) do VPN: Sun Nov 15 18:39:27 2009 OpenVPN 2.1_beta7 Win32-MinGW [SSL] [LZO2] built on Nov 12 2005 Sun Nov 15 18:39:29 2009 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file Sun Nov 15 18:39:29 2009 LZO compression initialized Sun Nov 15 18:39:30 2009 UDPv4 link local (bound): [undef]:1194 Sun Nov 15 18:39:30 2009 UDPv4 link remote: xx.xx.xxx.xx:1194 Sun Nov 15 18:39:32 2009 [test.addr.cz] Peer Connection Initiated with xx.xx.xx.xx:1194 Sun Nov 15 18:39:40 2009 TAP-WIN32 device [OpenVPN] opened: \\.\Global\{178087B0-3DB347FD-886B-F6E6C4FCA51F}.tap Sun Nov 15 18:39:40 2009 Notified TAP-Win32 driver to set a DHCP IP/netmask of 192.168.5.38/255.255.255.252 on interface {178087B0-3DB3-47FD-886B-F6E6C4FCA51F} [DHCP-serv: 192.168.5.37, lease-time: 31536000] Sun Nov 15 18:39:40 2009 Successful ARP Flush on interface [3] {178087B0-3DB3-47FD886B-F6E6C4FCA51F} Sun Nov 15 18:39:46 2009 Initialization Sequence Completed
8 Odkazy OpenVPN home (open-source projekt): http://openvpn.net/index.php/open-source.html
OpenVPN klient pro Windows (nejznámější): http://openvpn.se/
9 Reference [1] OpenVPN 2.x HOWTO http://openvpn.net/index.php/open-source/documentation/howto.html [15.11.2009]
[2] RSA Labs http://www.rsa.com
[3] bugs.launchpad.net https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/231199 [15.11.2009]
[4] Man-in-the-Middle Attack (Wikipedia) http://en.wikipedia.org/wiki/Man-in-the-middle_attack [15.11.2009]
[5] OpenSSL (Wikipedia) http://en.wikipedia.org/wiki/OpenSSL [15.11.2009]
listopad 2009
12/12