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/.
dakujem moc za clanok pre blbych (teda pre mna) - tot by mi poriesilo ked uz nic ine, tak aspon problem so Steamom pri obmedzeni statom
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.