Přidat článek mezi oblíbenéZasílat nové komentáře e-mailem Budujeme OpenVPN sieť - Inštalácia servera

Určite sa vám to už stalo. Potrebujete sa spojit s počítačom v práci, s kamošom alebo mať prístup do siete, do ktorej sa inak neviete dostať. Samozrejme môžete použiť riešenia tretích strán, ktoré sú však po a platené a po bé nemáme nad nimi kontrolu. Takže čo v prípade, že chceme mať stabilné riešenie, ktoré nám poskytuje vysokú bezpečnosť a máme ho plne pod kontrolou? Odpoveď je OpenVPN. Postupne si ukážeme ako nakonfigurovať server, klientské stanice a umožníme ich prepojenie na iné siete.

Požiadavky

Server, resp PC, ktoré bude stále bežať, môže to byť akákoľvek distribúcia linuxu alebo Windowsu. Popis bude síce pre linux, ale vo windowse sa používajú takmer indentické príkazy, často je len o vynechaní znakov ./.
Server musí mať verejnú ip adresu pokiaľ sa na vpn server chceme napájať zvonku, prípadne forwardnutý správny vpn port z routra s verejnou IP adresou.
Na servri budeme samozrejme potrebovať admin, prípadne root práva na zápis do systémových oblastí.
Čo sa týka HW nárokov, OpenVPN nám pobeží aj na 10 ročnej šunke, je to pomerne nenáročný program.

Začíname

Pozn. Pre rôzne distribúcie existuje celý rad postupov a predpripravených skriptov na inštaláciu OpenVPN, ja som pre zjednodušene použil "pure" inštalačný postup, ktorý platí pre akýkoľvek linuxový systém.
Celú inštaláciu som robil na OS Debian, cesty, prípadne postup inštalácie na iných systémoch sa môže v detailoch líšiť. Takže ideme na to. Pri Debian inštalácii využijem predpripravené balíky
Najprv si updatneme repozitáre nech máme, čo najnovší balíček a opravené bugy.

apt-get install update

Potom ideme inštalovať samotný OpenVPN balíček

apt-get install openvpn

Pre istotu si inštalneme aj OpenSSL, aj keď je možné, že už v systéme bude, pretožs OpenSSL využíva kopec iných programov.

apt-get install openssl

Zmeníme adresár na konfiguračný adresár programu a necháme si spraviť výpis adresára

cd /etc/openvpn
ls -la

Ako vidíme debilián nám tu trošku podľa mňa zbytočne sťažuje pozíciu a v adresári sa nenachádza žiaden konfig. Preto použijeme príkaz na skopírovanie potrebných súborov do konfiguračného adresára.

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn

Týmto sme si skopírovali ovládací adresár programu a zároveň serverový konfig, ktorý si na záver musíme samozrejme upraviť. Zmeníme adresár cez

cd /etc/openvpn/easy-rsa/2.0 

a ideme generovať, najprv si upravíme súbor vars, konkrétne tieto riadky na konci:

export KEY_COUNTRY="SK"
export KEY_PROVINCE="Slovakia"
export KEY_CITY="Topolcany"
export KEY_ORG="n4all.sk"
export KEY_EMAIL="admin@n4all.sk"

Samozrejme si tam dajte to, čo tam máte mať vy, resp tam mať chcete. Použijeme príkaz

source ./vars

, čím povieme skriptu odkiaľ má čítať zdrojové údaje. Potom „pre istotu“ zresetujeme všetky údaje /hlavne ak sme s openvpn už niečo predtým skúšali/ cez

./clean-all

.
A hor sa na budovanie certifikačnej autority.

Vytvárame certifikáty

Ako prvý je na rade CA certifikát, ktorý to bude vlastne všetko riadiť a koordinovať.

./build-ca

Keďže sme si už predtým upravili vars tak len stlačíme niekoľkokrát enter. V adresári 2.0 sa nám vytvoril nový podadresár /keys a v ňom sa nachádzajú 4 najdôležitejšie súbory openvpn servera.
ca.crt ca.key index.txt a serial, ktoré nám poslúžia na podpisovanie certifikátov a zaznamenávanie zmien v systéme.
Hneď nato ideme generovať najprv certifikát pre samotný server.

./build-key-server server

Samozrejme označenie server je ľubovoľné a voliteľné, kľudne to môže byť aj ./build-key-server openvpnserver. Opäť niekoľkokrát „enterujeme“ až sa nás server spýta na challenge heslo. Toto je voliteľný prvok bezpečnosti sťažujúci prípadnému útočníkovi prienik do našeho vpn servera. Optional company name je to isté, môžeme, ale aj nemusíme vyplniť. Na konci sa nás skript spýta, či chceme tento certifikát podpísať, čo samozrejme potvrdíme.
Ak sa pozrieme do adresára /keys vidíme, že pribudli nové súbory a to server.crt, server.csr a server.key, k tomu ešte 01.pem a samozrejme pribudli záznamy do súborov serial a index.txt, ktoré nám slúžia na kontrolu, či sa nám niekto s našim openvpn serverom „nehral“.
A možme sa veselo pustiť do generovanie jednotlivých klientských certifikátov, spustíme opäť:

/build-key fleg

Čiže si idem vygenerovať klientský certifikát pre svoje pripojenie na server. Ak sa pozriem do adresára vidím, že pribudli a zmenili sa rovnaké súbory ako pri generovaní certifikátu pre server.
Poznámka....ak sa pri generovaní certifikátu pomýlime, alebo chcem nejakého klienta zrušiť nerobíme to nikdy ručným mazaním certifikátu. Na to slúži príkaz /revoke-full „meno klienta“. Zachováme si tým správne serial number a nebudeme mať chaos v index.txt.
Teraz prikročíme ku generovaniu Diffie Hellman parametra. Kto chce vedieť načo a čo to je nech pokračuje na node.asp.
My ostatní spustíme:

./build-dh

Následne si vygenerujeme extra zabezpečovací prvok a to ta.key. Tento "firewall" slúži ako ochrana proti DoS útokom, pretože OpenVPN server zahadzuje všetky packety, ktoré nemajú tento HMAC príznak a tým predchádza svojmu vyfloodovaniu.

openvpn --genkey --secret ta.key

Prípravy na spustenie servera sme tým pádom dokončili a poďme sa spolu pozrieť, čo sme to vlastne spáchali.

ls -la
drwx------ 2 root root 4096 2011-06-29 17:39 .
drwxr-xr-x 3 root root 4096 2011-06-29 18:15 ..
-rw-r--r-- 1 root root 3992 2011-06-29 17:22 01.pem
-rw-r--r-- 1 root root 3869 2011-06-29 17:36 02.pem
-rw-r--r-- 1 root root 1298 2011-06-29 17:17 ca.crt
-rw------- 1 root root  887 2011-06-29 17:17 ca.key
-rw-r--r-- 1 root root  245 2011-06-29 17:55 dh1024.pem
-rw-r--r-- 1 root root 3869 2011-06-29 17:36 fleg.crt
-rw-r--r-- 1 root root  757 2011-06-29 17:36 fleg.csr
-rw------- 1 root root  887 2011-06-29 17:36 fleg.key
-rw-r--r-- 1 root root  236 2011-06-29 17:36 index.txt
-rw-r--r-- 1 root root   20 2011-06-29 17:36 index.txt.attr
-rw-r--r-- 1 root root   21 2011-06-29 17:22 index.txt.attr.old
-rw-r--r-- 1 root root  119 2011-06-29 17:22 index.txt.old
-rw-r--r-- 1 root root    3 2011-06-29 17:36 serial
-rw-r--r-- 1 root root    3 2011-06-29 17:22 serial.old
-rw-r--r-- 1 root root 3992 2011-06-29 17:22 server.crt
-rw-r--r-- 1 root root  761 2011-06-29 17:22 server.csr
-rw------- 1 root root  891 2011-06-29 17:22 server.key

Všetky certifikáty sú na mieste, môžeme sa vrhnúť na úpravu konfiguračné súboru nachádajúceho sa v /etc/openvpn, ktorý čaká na rozbalenie. Rozbalíme ho cez gunzip a začneme upravovať vo svojom obľúbenom textovom editore.
Musím podotnkúť, že OpenVPN má vynikajúco spracovanú dokumentáciu a vystačíme si s popisom, ktorým je okomentovaný konfig. V tejto prvej časti si ukážeme len základnú konfiguráciu, ktorá nám umožní spojenie s OpenVPN serverom.

port 1194

Toto je štandardný port OpenVPN, z bepečnostných dôvodov sa odporúča zmeniť ho, ja ho ponechám na tomto porte

dev tun

Na začiatku si musíme položiť otázku, či chceme bridgovanú alebo routovanú sieť. Ja ponechám default, čiže routovanú. V tomto prípade vytvára server s klientom vlastné mikrosubnety pre každého klienta zvlášť. Vhodné hlavne ak chceme klientov od seba separovať.

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

Serveru musíme ukázať odkiaľ má načítavať základné certifikáty. Pozor server bude hladať certifikáty v adresári /etc/openvpn/, ale easy-rsa skript nám všetko vytvoril v adresári /etc/openvpn/easy-rsa/2.0/keys, takže buď zmeníme cestu v konfigu tak ako som to spravil ja v tomto príklade, alebo skopírujeme dané súbory do /etc/openvpn/.

server 172.16.254.0 255.255.255.0

Serveru musíme prideliť adresu z nejakého privátneho ip subnetu, pozor na kolíziu s inými subnetmi, ktoré máme na servri.

ifconfig-pool-persist ipp.txt

Táto položka v konfigu nám poslúži na lepšie manažovanie vystavených certifikátov. V prípade reštartu OpenVPN servera dostanú klienti rovnaké ip adresy, čo nám uľahčí ich následnú identifikáciu.

push "route 172.16.254.0 255.255.255.0"
push "route 192.168.100.0 255.255.255.0"

Táto položka nám slúži na "pushnutie" subnetov ku klientovi. Nakoľko testovací server ma 2 subnety /jeden pre vpn sieť a druhý pre lan sieť/ musím klientovi oznámiť, že pokiaľ chce komunikovať s oboma subnetmi musí ísť cez vpn adaptér. Inýmo slovami pridávame týmto ďaľšíe 2 záznamy do routovacej tabuľky klienta. Znovu si treba dať pozor na to, aby vnútorný subnet klienta nekolidoval so žiadnym subnetom na strane servera.

client-to-client

Z popisu je jasné, že pokiaľ chceme, aby sa vpn klienti videli medzi sebou musíme tento riadok odkomentovať.

tls-auth ta.key 0

Ako som už spomínal táto extra bezpečnostná "fičúrka" ja štandardne vypnutá, ale my sme si daný kľúč vygenerovali, a preto ju použijeme, čiže riadok odkomentujeme.

user nobody
group nogroup

Pokiaľ spustíme OpenVPN server bez týchto parametrov bude bežať s právami roota, čo je samozrejme isté bezpečnostné riziko. Odkomentovaním týchto riadkov získa daemon "prijateľnejšie" oprávnenia.
Zvyšok konfigu ponecháme v defaulte. A to je všetko. Nastáva chvíľa pravdy. Server spustíme príkazom /etc/init.d/openvpn start a pokiaľ máme všetko v poriadku mali by sme vidieť tôto hlášku Starting virtual private network daemon: server. a ďaľej už nič. Pokiaľ dostaneme hlásenie o zlyhaní server pozrieme do logu, ktorý nám určite prezradí, kde sme spravili chybu.
V ďaľšom pokračovaní si ukážeme konfiguráciu klienta a praktické príklady využitia vpn siete s dôrazom na vzdialenú správu pc /TighVNC/.

Předmět Autor Datum
dakujem moc za clanok pre blbych (teda pre mna) - tot by mi poriesilo ked uz nic ine, tak aspon prob…
Michal2 10.07.2011 20:28
Michal2
Ano aj na toto vyuzivaju niektori ludia svoje vpn servre, pripadne ak su v zahranici a potrebuju nie… poslední
fleg-sk 11.07.2011 10:45
fleg-sk

Ano aj na toto vyuzivaju niektori ludia svoje vpn servre, pripadne ak su v zahranici a potrebuju nieco riesit z domacej ip tak sa spoja cez vpn a maju zrazu "domacu ip".
Ono je to, ale cele zlozitejsie. Ortodoxni sietari ti povedia, ze vpn ma sluzit na presmerovanie celej komunikacie medzi internetom a tvojim pc, cize "spravne" vyuzitie vpn je to, co som napisal vyssie.
Ja naopak toto povazujem pri mojej praci za nevyhodu a pouzivam vpn len na pripojenie sieti, alebo ich casti, ku ktorym by som sa inak nedostal bez toho, aby som nejako presmerovoval zvysok svojej komunikacie.
Ak si cital konfig openvpn servera vies, ze tam moznost presmerovania celej komunikacie je, ale narocky som je nespomenul, pretoze tato seria clankov sa ma venovat moznosti pretunelovania sa do inych sieti a ich naslednu administraciu a nie vytvoreniu tunela napriklad za ucelom zmeny ip adresy.

Zpět na články Přidat komentář k článku Nahoru