Zpět na seznam článků     Číst komentáře (4)     Verze pro tisk

OpenVPN pomoci Certifikatu

Autor: Tecquilka   
17.3.2006

OpenVPN, aneb virtualni privatni sit jednoduse


Urcite vetsina z Vas zna technologii VPN (virtual private network), avsak pres uvedu pro ty co nevi, jemny popis. Technologi VPN slouzi ke spojeni dvou rozdilych siti (napr. z hlediska zemepsineho) do jedne “maxi” (virtualni) site. Toto pouziva velmi mnoho spolecnosti a orgranizaci. Uvedu priklad na bance, ktera ma jednu centralu a odsud ridi sve pobocky. Take provozuje sluzby, napr. sdileni citlivych dat, ktere pomoci ftp je to pro nasi zminenou banku velmi riskantni. Existuje velmi mnoho zpusobu odchyceni dat, coz by nasi banku velmi kompromitovalo a diky tomu by mohla ztratit duveru a zkrachovat. Podstoupit toto riziko banky nemohou. Dale si predstavte ze potrebujete na serveru nechat bezet sluzby, ktere jsou pro Vas velmi dulezite, avsak vite ze: “cim vice sluzeb, tim vetsi moznost kompromitace”, tudiz budute chtit (coz jde velmi dobre) nastavit pristup jen z vnitrni site (rozsah treba 10.0.1.0/24). Vsechny tyto problemy resi VPN, ktere vytvori tunel mezi dvemi servery, ktery byva sifrovany. Toto dovoli aby se PC-A v siti JEDNA tvaril byt ve stejne siti jako PC-B v siti DVE a dovoli jim zdilet bezpecne zdilet data. VPN proste a jednoduse vytvori virtualni sit (popremyslejte na slovicku “virtualni” ;-D). Existuji asi dva modely tohoto spojeni. V prvnim modelu dojde k spojeni serveru 1 se serverem 2 a vytvoreni VPN. V druhem modelu, zvanem RoadWarrior*, je server, ktery umoznuje pristup do vnitrni a i virtualni site vzdalenym uzivatelum za pomoci napr. notebooku a pripojeni. Tak to by bylo k jemnemu uvodu asi vse :D

Tento clanek je venovan VPN, a to pomoci programu OpenVPN, ktery muze byt zaroven klient i server, zalezi jen na konfiguraci a pozadavcich. OpenVPN je opensource a je dle mnoha vyjadreni: “nejjednodussi zpusob na zrizeni VPN a to hlavne diky snadne konfiguraci.” OpenVPN pouziva k autorizaci dva zpusoby. Prvnim je klasicka user/pass autorizace a druhym zpusobem jsou certifikaty. Bohuzel sam jsem vyzkousel jen autorizaci pomoci certifikatu (ssl), jelikoz k zprovozneni user/pass autorizaci potrebuji zvladnout praci s PAM (mozna bude pokracovani tohoto clanku :D). Proto tento clanek bude vysvetlovat jak nakonfigurovat OpenVPN s pouzitim certifikatu. OpenVPN pouziva defaultne protokolu UDP, ktery sam o sobe je nespolehlivy, avsak je rychly a pri pouziti bezpecneho prenosu (sifrovani atd.), ktery take zabezpecuje i kontrolni soucty a poradi prichozich packetu, dikyz tomu ziskava prenos pomoci UDP vlastnosti temer stejne, jako pri pouziti TCP. Dale bych chtel zminit ze OpenVPN podporuje komprimovani dat pres samotnym odeslanim a to pomoci knihovny LZO (nutne mit nainstalovane, pokud pouzivate). Malem bych zapomnel uvest fakt, ze OpenVPN je multiplatformni, tzn. existuje verze pro vsechny rozsirene platformy (Linux, Windows, Solaris, FreeBSD, MacOs etc.).


Tunel mezi dvema servery.

Osobne jsem zatim nezkousel, tudiz budu verit clanku uvedenem na root.cz o OpenVPN. Ale ted k samotnemu postupu. Tunel vytvorime s pouzitim dvou stejnych klicu, ktere musi byt na obou koncich naseho tunelu.

#vygeneruji klic, ktery bezpecnym zpusobem dopravym na “druhy konec tunelu”, treba za pouziti prikazu scp, ktery je uveden v clanku “SSH jednoduše”
[root@80.100.25.33] openvpn --genkey --secret tajny.key
#otevru (pokud neexistuje vytvorim) /etc/openvpn/vpn_server.conf
[root@80.100.25.33] vi /etc/openvpn/vpn_server.conf
#doplnim o toto:

remote 50.100.25.44
#vzdaleny server
ifconfig 10.0.0.1 255.255.255.0
#nastaveni vnitrni site, rozsah a ip tohoto serveru
port 5000
#port
proto udp
#protokol UPD (muzete zamenit za TCP)
dev tap0
#virtualni zarizeni, pro ktere musite mit v Linuxu nahrany modul pro podporu tun/tap zarizeni (cmd je modprobe tun)
secret /etc/openvpn/tajny.key
#certifikat a cesta k nemu
ping 10
#nejspis pinguje kazdych deset sekund druhej konec :D
comp-lzo
#pouziti komprimace
verb 5
#nastaveni vypisu v logach
user openvpn
group openvpn
#user a skupina pod kterym OpenVPN bezi. pro Non-Windows systemy (preklad neni hezky) :D


Tak a ted mi nezbude nic jineho nez nakonfigurovat druhou stranu. Zde vytvorim stejny konfiguracni soubor, jen zamenim remote a ifconfig


[tachyon@50.100.25.44] vi /etc/openvpn/muj_konfig.conf
#nastavim

remote 80.100.25.33
ifconfig 10.0.0.2 255.255.255.0
port 5000
proto udp
dev tap0
secret /root/tajny.key
#umisteni muze byt kdekoliv
ping 10
comp-lzo
verb 5
user openvpn
group openvpn

Ted uz jen spustim OpenVPN na obou koncich a mam vytvoren tunel. Jak bylo uvedeno v konfigu OpenVPN si vytvori vlastni rozhrani (to i ve Win).


[obe@strany] openvpn /etc/openvpn/nazev_jejich_konfiguraku.conf


Pozor pri spousteni, pokud vam pri spusteni konzole jen “problikne”, tak mate v konfiguraci nekde chybu. Bohuzel mi pri spatne konfiguraci nikdy nebyla vracena hlaska o te a te chybe. V pripade spravneho spusteni zustane konzole jakoby “zatuhla” coz znamena ze je vse OK. Overit take muzete pomoci “ps -aux” a zjistit co bezi ve vypisu, nebo “netstat --listening”


RoadWarrior.

Vyzkousel jsem a byl jsem spokojen. Cely princip funguje, ze se tvarim jako server a ke me se pripojuji vzdaleni klienti, kteri jsou pak diky me ve virtualni siti. Nevyhodou je to, ze veskera komunikace probiha pres mne => narocnejsi na trafic a rychlost connectu. I pres tento model doporucuji. Cetrifikaty, ktere zde budu vytvaret budou vytvoreny za pomoci Opensource programu OpenSSL. Praci s nim nebudu prilis vysvetlovat, jelikoz na napr. http://www.root.cz/clanky/jak-na-openssl-2/ je na praci s nim velmi podareny clanek, ale take na openssl.org mate hezke HowTo. Takze vrhneme se na samotne vytvoreni Certifikacni autority, abychom mohli podepsat certifikat a nastavit konfiguraci.


V /etc/ssl/ vytvorte, pokud nemate, tyto adresare podle tohoto postupu (vice na http://www.root.cz/clanky/jak-na-openssl-2/ ).


[tec@80.100.25.33] mkdir demoCA
[tec@80.100.25.33] cd demoCA
[tec@80.100.25.33] mkdir certs
[tec@80.100.25.33] mkdir crl
[tec@80.100.25.33] mkdir newcerts
[tec@80.100.25.33] mkdir private
#do private pak nakopiruji klic k certifikatu certifikacni autority (nas)
[tec@80.100.25.33] echo 01 >/etc/ssl/demoCA/serial


Tak a mame vytvorenou adresarovou strukturu (viz. clanek na rootu). Ted se dam do samotne tvorby certifikatu.

1) Certifikat certifikacni autority
[tec@80.100.25.33] openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 1098
[tec@80.100.25.33] mv cakey.pem private/
#dulezite je zadat common name, verte mi :D, totez i u dalsich certifikatu (ruzdilne)
#mame vytvoren certifikat certifikacni autority a ted mi nezbyva nic jineho, nez podepsat cizi certifikaty, nebo si muzem vytvorit certifikaty sami, ktere podepiseme a pak je clientum nainstalujeme. Kdo ma vlastni certifikat, nemusi pouzit vytvoreni, ale az nasledne podepsani.
[tec@80.100.25.33] openssl req -new -nodes -out nepodepsany.pem -keyout klient_klic.pem -days 1098
#tak a ted si jej podepisi
[tec@80.100.25.33] openssl ca -in nepodepsany.pem -out podepsany.pem
#nepodepsany.pem muzete s klidnym srdcem smazet, koncovka pem neni dulezita, muzete klidne pouzit crt nebo key (jak uvidite v howto a jinych navodech, key pouzivejte pro klice) #tento podepsany certifikat (samozrejme i s klicem k nemu) nejakym zpusobem dorucim k clientu, tedy pokud nema vlastni certifikat. Jeste poslete certifikat certifikacni autority (cacert.pem).


Nyni se dostavame ke konfiguraci OpenVPN na serveru. Takze “hura do toho.”


[tec@80.100.25.33] vi /etc/openvpn/vpn_server.conf
#nakonfiguruji takto:

mode server
#v jakem rezimu pobezime
tls-server
#v ramci TLS spojeni jako server
dev tap0
#zarizeni
ifconfig 10.0.1.1 255.255.255.0
#vlastni nastaveni IP adresy v vnitrni siti
ifconfig-pool 10.0.1.2 10.0.1.255 255.255.255.0
#rozsah pridelovanych IP (od 10.0.1.2 do 255)
ifconfig-pool-persist ipp.txt
#v pripade restartu se snazi clientum udrzet puvodni IP
duplicate-cn
#povoluje pripojeni dvou clientu se stejnym certifikatem
client-to-client
#DULEZITE, jelikoz v defaultu vidi clienti jen server, ale sebe navzajem ne, takze povolte
ca /etc/ssl/demoCA/cacert.pem
#certifikat certifikacni autority
cert /home/tecquilka/.openssl/pod_tecquilka.pem
#podepsany certifikat serveru (sam sem si podepsal, sam vystupuji :DD)
key /home/tecquilka/.openssl/tecquilka_key.pem
#klic k certifikatu serveru
dh /home/tecquilka/.openssl/dh1024.pem
#pomoci cmd “openssl dhparam -out dh1024.pem 1024”
log-append /var/log/openvpn
#ukladani logu
status /var/run/openvpn/vpn.status 10
#zde uklada openvpn svuj status
user vpn
group vpn
#pod kterym uzivatelem pobezi
comp-lzo
#komprimace
verb 10
#vypis


A nastaveni na strane clienta.


remote 80.100.25.33
tls-client
dev tap
#ve win bez cisilka :D, v lin s cisilke :D
pull
#dulezite, dovoluje stahnout nastaveni od serveru
mute 10
ca cacert.pem
cert podepsany.pem
key klient_klic.pem
comp-lzo
verb 3

To je asi vse co jsem v teto casti chtel ukazat :D, ted uz nezbyva nic jineho, nez obycejne nastaveni sdileni, zapnuti libovlnych sluzeb popripadne her a HF :D Btw je dulezite aby mel server Verejnou IP, nebo aspon na serveru portredirect do vnitrni site, jinak na clientech nezalezi :D




*RoadWarrior podle americkych obchodniku, kteri cestuji od domu k domu, tzn. pripojuji se k siti z “venku.” Muze to byt o jednu ulici dal, ale take to muze byt dal o 1000km.

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 2/1

1  2  3  4  5    
(známkování jako ve škole)