VPN
Table of Contents
1. Úvod
2.1 Firewall
2.2 Šifrovanie
2.3 IPSec
2.4 AAA Server
3.1 Porovnanie rôznych
iplementácií
3.2 OpenVPN
4. Inštalácia
4.1 Download
4.2 Kompilácia
4.3 TUN/TAP
5. Nastavenie
5.1 Firewall
5.3 Tunel
zabezpečený pevným klúčom
6. TLS/SSL
7. Záver
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
VPN je privátna sieť, ktorá používa verejnú sieť (obvykle Internet)
k pripojeniu vzdialených bodov(sietí) alebo užívateľov navzájom. Namiesto
použitia zdieľaného pripojenia ako prenajatá linka, VPN používa „virtuálne“
pripojenia smerované cez Internet z firemnej privátnej sieti
k vzdialenej servru alebo zamestnancovi.
Dobre postavená VPN-ka využíva k zabezpečeniu dát a pripojenia tieto
technológie:
· Firewall
· Šifrovanie
· IPSec
· AAA Server
Poskytuje bariéru medzi vašou súkromnou sieťou a Internetom. Môžete
nastaviť aké pakety, na akých portoch, má prepúšťať a aké nie.
Šifrovanie je proces keď vezmeme dáta, ktoré vysiela jeden počítač
a zakódujú sa dáta tak aby iba cieľový počítač(e) vedel(i) rozkódovať dané
dáta.
Internet Protocol Security Protocol (IPSec) umožňuje zvýšiť úroveň
zabezpečenia siete za použitia lepších kódovacích algoritmoch a viac
algoritmov zlepšujúcich bezpečnosť.
IPSec ma dva módy kódovania: tunelové a transportné. Tunelové kóduje
hlavičku a telo každého paketu zatiaľ čo transportné kóduje len telo.
Avšak tento protokol môžu využívať iba systémy, ktoré sú kompatibilné
s týmto protokolom.
IPSec vie šifrovať dáta medzi rozdielnymi zariadeniami, ako:
· Router vs Router
· Firewall vs Router
· PC vs Router
· PC vs Server
AAA(z angl. Authentication, Authorization
and Accounting) servre sa používajú na viac zabezpečení prístup, ktorý
v prostredí VPN kde je vzdialený prístup nutnosťou, ďalšie plus
k bezpečnosti. Ak vznikne požiadavok na zahájenie pripojenia od
dial-up klienta, požiadavok je preposlaný na AAA server. AAA server potom
skontroluje nasledujúce veci:
· Kto si (Autentifikácia)
· K čomu si oprávnený (Autorizácia)
· Čo práve robíš (Accounting =
Kontrola)
Kontrolné informácie sa hodia hlavne pri stopovaní
klienta kvôli bezpečnostním auditom alebo vystavovaní správ.
Existujú
rôzne implementácie tohto protokolu a v tejto časti by som chcel
aspoň v krátkosti ukázať prečo som si vlastne vybral OpenVPN
a v čom je lepší ako jeho konkurent.
OpenVPN
popisujem bližšie v ďalšej kapitole a tak sa zastavím iba pri stručno
opise L2TP. Táto magicka skratka znamená Layer 2 Tunnel Protocol a ako už
názov napovedá je to protokol, ktorý nám umožnuje tunelovať cez druhú vrstvu.
V podstate tento protokol je nadstavbou nad PPP (Point-to-Point Protocol),
ktorý však umožnuje iba spojenie medzi prístupovým zariadením a klientom
a taktiež neobsahuje žiadne bezpečnostné rutiny. L2TP narozdiel od PPP
dokáže spojiť akékoĺvek dva body v sieti a taktiež ak sa stavia nad
IPSec dokáže poskytnúť aj adekvátnu bezpečnosť. V linuxu sa L2TP používa
tak že L2TP vrstva sa dohodne na parametroch protokolu a spojenie už potom
opäť realizuje ppp démon. Existuje ešte podobná varianta k L2TP a to
PPTP, čize Point-to-Point Tunnel Protocol, ktorý ako aj L2TP umožnuje
užívateľom bezpečne a nenáročne sa pripájať k VPN sieti. Avšak tento
protokol nie je obstaraný až takou mierou zabezpečenia, akú by sme
v niektorých sietuáciách potrebovali a tak sa doporučujú iné
protokoly. Ovšem ak vam na bezpečnosti až tak nezáleží a uvítate ľahkú
nastaviteľnosť tak potom PPTP môže byť práve to čo hľadáte, ale aj tu by som
uprednosťnoval to používať len na homogénnych sieťach kde klientské stanice
tvoria OS Windows, a to sú aj hlavné dôvody prečo tieto dva posledné protokoly
nemajú až tak veľke rozšírenie a taktiež nie sú udržiavané
a rozširované do vhodnej mieri a ostávajú ochudobené o nové
vlastnosti, ktoré sebou doba prináša. A teraz sa pozrieme na stručný
prehľad OpenVPN a L2TP/IPSec(MSL2TP) riešenia:
|
|
OpenVPN |
L2TP/IPSec |
|
Cena |
Zdarma, GNU/GPL |
Šírený zdarma ale nie je to úplný free software
a ešte k tomu sú problémy s patentmi |
|
Inštalácia |
Jednoduchá |
Jednoduchá |
|
Konfigurovateľnosť |
Umožnuje spústu nastavení, ktoré vám pomôžu
postaviť VPNku na mieru |
Neobsahuje až toľko nastavení, čo je viac
user-friendly ale neposkytuje tým veľký rozsah nastavenia pre správcu |
|
Bezpečnosť |
Zaistená cez IPSec, šifrovanie a pod. |
Taktiež sa využíva IPSec |
|
Výbava |
Za ten čas čo je táto implentácia na svete
stihla na seba nabaliť spústu užitočných vecí. |
Neobsahuje žiadny veľký arzenál a tak tam
chýba napríklad aj AES a pod. |
|
Výkon |
Obsahuje radu optimalizácií, ktoré z neho
robia silný nástroj |
Vďaka nabaľovaniu paketov a neefektívnemu
handlovaniu paketov, je táto implementácia slabšia |
Takže suma sumárum vychádza jednoznačne z tohto porovnania
implementácií, OpenVPN ako víťaz a preto sa v ďaľsom texte budem
zaoberať len ním. Ovšem L2TP/IPSec sa môže uplatniť a to hlavne na
Microsoft staniciach, kde sú klienti pre toto rozhranie zabudované priamo
v OS a tak nie je problém zapojiť nejakú MS sieť do tejto siete.
OpenVPN je jednoducho použiteľná, robustná a veľmi konfigurovateľná
implementácia VPN umožňujúca bezpečne prepojiť dve a viac sieti. Komunikácia
cez OpenVPN je šifrovaná pomocou SSL.
Projekt OpenVPN je
Open Source a je šírený pod licenciou GNU/GPL.
Popis inštalácia a nastavení OpenVPN píšu vzhľadom k OS Linux, ale
podporované operační systémy sú i MS Windows 2000/XP, MacOS X, OpenBSD, FreeBSD
NetBSD a také Solaris. Kompletní výpis vlastností OpenVPN je k nahliadnutiu na
stránkách projektu (http://openvpn.net/).
OpenVPN je k stiahnutiu na adrese http://prdownloads.sourceforge.net/openvpn/, použil som verziu
2.0_beta10, ktorú stiahnete na http://prdownloads.sourceforge.net/openvpn/openvpn-2.0_beta10.tar.gz a preložil som si ju zo
zdrojových súborov. Aplikácia závisí na knihovni LZO a tiež potrebujete
hlavičkové súbory OpenSSL.
Skompilujte a nainštalujte knihovňu LZO (klasika: ./configure --prefix=/usr/local && make && checkinstall), potom spustite ako užívateľ
root ldconfig.
Preklad OpenVPN je
tiež veľmi jednoduchý:
tar -xjf openvpn-2.0_beta10.tar.gzcd openvpn-2.0_beta10./configure --prefix=/usr/localmakecheckinstall Pred tím ako nainštalujete do
systému balíček vytvorený checkinstallom, otestujte funkčnosť šifrovania (stále
sme v adresári so zdrojovými kódmi OpenVPN):
./openvpn --genkey --secret key./openvpn --test-crypto --secret keyĎalej otestujeme naviazanie
spojenie pomocou TLS/SSL:
V jednom terminálu spustíme:
./openvpn --config sample-config-files/loopback-clientV druhom terminálu spustíme:
./openvpn --config sample-config-files/loopback-server
OpenVPN používa pre
komunikáciu virtuálne sieťové zariadenia tun alebo tap.
Podpora pre tun/tap je v linuxu súčasťou jadra,
pokiaľ používate jadro z distribúcie tak sa nemusíte báť. Ak si prekladáte
jadro sami, nezabudnite na voľbu(pre jadra rady 2.6):
Device Drivers ---> Networking support ---> <M> Universal TUN/TAP device driver supportMinimálne v distribúcii
Slackware budete musieť vyrobiť zariadenia /dev/net/tun:
mknod /dev/net/tun c 10 200a naloadovať modul
sprístupňujúci funkcie tun do jadra:
modprobe tun
Nastavte si maškarádu
a treba ešte povoliť forwardovanie paketu.
Tento tunel nieje nijak
zabezpečený, komunikácia prebieha protokolom UDP na portu 5000.
Na servru 1 spustíme:
openvpn --remote server2.sk --dev tun1\ --ifconfig 192.168.2.1 192.168.2.2 --verb 9Na servru 2 spusťte:
openvpn --remote server1.sk --dev tun1\ --ifconfig 192.168.2.2 192.168.2.1 --verb 9Funkčnosť otestujete pomocou
pingu na druhou stranu tunelu:
server 1: ping 192.168.2.2server 2: ping 192.168.2.1
Najskôr si vygenerujeme kľúč,
ktorým zabezpečíme spojení:
openvpn --genkey --secret klic.keyKľúč musíte mať na oboch
počítačoch na ktorých končí tunel, prenos kľúča by mal prebiehať nejakým
bezpečným spôsobom.
Prví počítač:
openvpn --remote server2.sk --dev tun1 \--ifconfig 192.168.2.1 192.168.2.2 --verb 5 --secret kluc.key
Druhý počítač:
openvpn --remote server1.sk --dev tun1 \--ifconfig 192.168.2.2 192.168.2.1 --verb 5 --secret kluc.key
SSL certifikáty
Pre to aby sme mohli používať
nasledujúce nastavenia potrebujeme SSL certifikáty a kľúče podpísané od jednej
CA. Balíček OpenVPN obsahuje skripty s jednoduchou CA (adresár easy-rsa/), ktorú použijeme.
V adresári easy-rsa/ nájdete súbor vars, ktorý si musíte upraviť v
závislosti na tom kam ste si easy-rsa/ nakopírovali. Doporučujem aby ste si
prečítali README, ktoré je v tom adresári, je tam totiž kompletní popis
výroby kľúča.
Nastavenie
Nastavenie OpenVPN pre použití
TLS/SSL mám v konfiguračných súboroch, samozrejme že to ide napísať ako
parametri programu tak ako v minulých príkladoch.
/etc/openvpn/
Všetky súbory, ktoré tu budem popisovať sú
v adresári /etc/openvpn, ktorý má práva 700 a majiteľa root.
SSL certifikáty - Server
Na server si umiestnime
certifikát CA (ca.crt) a certifikát a kľúč serveru (server.crt a server.key), ktoré sme si vygenerovali
podľa README v adresári easy-rsa/, taktiež by ste nemali zabudnúť na
súbor dh1024.pem alebo dh2048.pem, záleží ktorý ste si vyrobili.
server.conf
Tento súbor obsahuje nastavenia
OpenVPN na strane serveru(keď sa pozriete do dokumentácie k OpenVPN, zistíte čo
ktorá položka znamená.):
dev tunifconfig 192.168.2.1 192.168.2.2up ./server.uptls-serverdh dh2048.pem #alebo dh dh1024.pemca ca.crtcert server.crtkey server.keyport 5000comp-lzoping 15ping-restart 45ping-timer-rempersist-tunpersist-keyverb 3Parametri ifconfig-u sú ifconfig <lokalna IP> <vzdialena IP>, sú to koncové adresy tunelu.
Server beží na UDP portu 5000.
server.up
Soubor server.up je shell skript, pridáva
záznám do route pre VPN-ku.
route add -net 192.168.2.0 netmask 255.255.255.0 add gw $5
start.sh
start.sh je skript, ktorý nahadzuje
VPN-ku, pre vypnutí VPN stačí killnúť proces openvpn
#!/bin/bashdir=/etc/openvpnecho 1 > /proc/sys/net/ipv4/ip_forwardopenvpn --cd $dir --daemon --config server.conf
SSL certifikáty - Klient
Na klientský počítač
umiestnime certifikát CA (ca.crt) a certifikát a kľúč klienta (klient.crt a klient.key), ktorý sme si vygenerovali
podľa README v adresári easy-rsa/.
klient.conf
dev tunremote 147.32.119.186 # VPN serverifconfig 192.168.2.2 192.168.2.1up ./klient.uptls-clientca ca.crtcert klient.crtkey klient.keyport 5000#user nobody#group nobodycomp-lzoping 15ping-restart 45ping-timer-rempersist-tunpersist-keyverb 3
klient.up
Súbor klient.up je shell skript, ktorý po
nahodení VPN-ky upravuje routovaciu tabuľku klienta, musíte si napišať svoj
vlastný v závislosti na vašich podmienkach na sieti. Ako príklad ukážem svoj
skript, ktorým sa pripojujem keď sieťujem cez modem:
#!/bin/bashroute add 147.32.119.186 ppp0 # route na VPN serverroute del default # zmažem východziu gwroute add default gw 192.168.2.1 # budem routovať cez VPNkuV prípade, že chcete všetok
traffic tlačiť cez VPN-ku, musíte pridať do route tabuľky pravidlo na VPN
server.
start.sh
Ako klientský počítač mám
notebook, ktorý má vypnutý syslog a snažím sa aby čo najmenej zapisoval na
disk. Preto mám /tmp namountovaný ako tmpfs a OpenVPN nechávam logovať do
súboru /tmp/openvpn.log
#!/bin/bashdir=/etc/openvpnmodprobe tunecho 1 > /proc/sys/net/ipv4/ip_forwardopenvpn --log /tmp/openvpn.log --cd $dir --daemon --config klient.conf
Záverom by som už len chcel
spomenúť, že v dnešnej dobe sa čoraz častejšie kladie dôraz na
zabezpečenie a spájanie sietí a tým vytváranie korporátných sietí kde
sa ľudia nemusia báť zdieľať veci a tým zvýšiť efektivitu práce
zamestnancov ako aj jednotlivcov, ktorý využívajú VPN aj na zvýšenie komfortu,
keďže sa odbijú veci, ktoré by pri normálnej komunikácii cez otvorený kanál na
Internete prekážali. Preto VPN bude podľa mňa čoraz viac a viac
populárnejšie a nasadzované aj do oblastí, kde sú teraz uprednostňované
iné technológie, ktoré sú však nekomfortné a taktiež zvyšujú riziko
napadnutia siete.
Links:
http://www.osnews.com/story.php?news_id=5803
http://www.jacco2.dds.nl/networking/freeswan-l2tp.html
http://www.osnews.com/story.php?news_id=5803
http://prdownloads.sourceforge.net/openvpn/openvpn-2.0_beta10.tar.gz