VPN létrehozása FreeBSD átjárók használatával két olyan hálózat között, amelyeket egymástól az internet választ el.
Ebben a szakaszban az IPsec beállításának folyamatát vázoljuk fel. Az IPsec beállításához elengedhetetlen, hogy tisztában legyünk egy saját rendszermag fordításának alapjaival (lásd 8. fejezet - A FreeBSD rendszermag testreszabása).
Az IPsec egy olyan protokoll, amely az Internet Protocol (IP) rétegére épül. Segítségével két vagy több számítógép képes biztonságos módon tartani egymással a kapcsolatot (innen ered a neve). A FreeBSD IPsec „hálózati protokollkészlete” a KAME implementációjára épül, mely egyaránt támogatja az IPv4 és IPv6 protokollcsaládokat.
Az IPsec két alprotokollból tevődik össze:
A hasznos adat biztonságos becsomagolása (Encapsulated Security Payload, ESP) során egy szimmetrikus kriptográfiai algoritmussal (mint például Blowfish, 3DES) titkosítjuk az IP-csomagok tartalmát, ezáltal megvédjük ezeket az illetéktelenektől.
A Hitelesítési fejléc (Authentication Header, AH) használatával megakadályozzuk, hogy az illetéktelenek meghamisítsák az IP csomagok fejlécét. Ezt úgy érjük el, hogy kiszámolunk egy kriptográfiai ellenőrző összeget és az IP-csomagok fejlécének mezőire egy biztonságos függvénnyel generálunk valamilyen ujjlenyomatot. Az ez után következő kiegészítő fejléc tartalmazza ezt az ujjlenyomatot, amellyel a csomag hitelesíthető.
Az ESP és az AH az alkalmazástól függően használható együtt vagy külön-külön.
Az IPsec akár közvetlenül is használható két számítógép forgalmának titkosítására (ezt Szállítási módnak (Transport Mode) nevezik), vagy két alhálózat között építhetünk ki vele „virtuális tunneleket”, ami remekül alkalmas két vállalati hálózat kommunikációjának bebiztosítására (ez a Tunnel mód (Tunnel Mode)). Ez utóbbit egyszerűen csak Virtuális magánhálózatként (Virtual Private Network, VPN) emlegetik. A FreeBSD IPsec alrendszeréről az ipsec(4) man oldalon találhatunk további információkat.
A rendszermag IPsec támogatásának aktiválásához a következő paramétereket kell beletennünk a konfigurációs állományba:
Ha szükségünk van a IPsec nyomkövetésére, a következő beállítást is hozzátehetjük:
Semmilyen szabvány nem fogalmazza meg mi is számít VPN-nek. A virtuális magánhálózatok tucatnyi különböző technológiával valósíthatóak meg, de mindegyiknek megvan a maga erőssége és gyengesége. Ebben a szakaszban körvonalazunk egy ilyen helyzetet, valamint a benne felépített VPN megvalósításához alkalmazott stratégiákat.
Előfeltételezéseink a következőek:
legalább két hálózatunk van;
magán belül mind a két hálózat IP-t használ;
mind a két hálózat egy FreeBSD átjárón keresztül csatlakozik az internethez;
a hálózatok átjárói legalább egy publikus IP-címmel rendelkeznek;
a hálózatok belső címei
lehetnek publikus vagy privát IP-címek, nem
számít. Fontos viszont, hogy ezek ne
ütközzenek, vagyis ne használja egyszerre
mind a kettő a 192.168.1.x
címtartományt.
Kezdésképpen a
Portgyűjteményből telepítenünk kell a
security/ipsec-tools
portot.
Ez a programcsomag rengeteg olyan alkalmazást tartalmaz,
amely segítségünkre lehet a
beállítások elvégzése
során.
A következő lépésben létre
kell hoznunk két gif(4) típusú
pszeudoeszközt, melyeken keresztül a két
hálózat között egy tunnel
segítségével ki tudjuk
építeni a szükséges kapcsolatot.
Ehhez root
felhasználóként futtassuk a
következő parancsokat (a
belső
és
külső
megnevezésű paramétereket
cseréljük ki a valós belső és
külső átjárók
címeire):
#
ifconfig gif0 create
#
ifconfig gif0 belső1 belső2
#
ifconfig gif0 tunnel külső1 külső2
Tekintsük például, hogy a
vállalati LAN publikus
IP-címe 172.16.5.4
, valamint a privát
IP-címe 10.246.38.1
. Az otthoni
LAN publikus
IP-címe legyen most 192.168.1.12
, valamint a belső
privát IP-címe pedig 10.0.0.5
.
Elsőre ez talán még nem teljesen érthető, ezért az ifconfig(8) parancs használatával is nézzük meg a példában szereplő hálózatok konfigurációját:
Miután elvégeztük az iménti beállításokat, a ping(8) paranccsal már mind a két privát IP-tartománynak elérhetőnek kell lennie, ahogy azt az alábbi példa is érzékeltetni kívánja:
Az elvárásainknak megfelelően tehát a privát címeken mind a két oldalnak képesnek kell lennie ICMP csomagokat küldenie és fogadnia. A következő lépésben meg kell mondanunk az átjáróknak hogyan irányítsák a csomagokat a két hálózat közti forgalom megfelelő áramlásához. Ezt az alábbi paranccsal elérhetjük el:
#
vallalati-halo# route add 10.0.0.0 10.0.0.5 255.255.255.0
#
vallalati-halo# route add net 10.0.0.0: gateway 10.0.0.5
#
otthoni-halo# route add 10.246.38.0 10.246.38.1 255.255.255.0
#
otthoni-halo# route add host 10.246.38.0: gateway 10.246.38.1
Itt már a belső gépeket az átjárókról és az átjárók mögül egyaránt el tudjuk érni. A következő példa alapján erről könnyedén meg is tudunk győződni:
A tunnelek beállítása volt
igazából a könnyebb rész, egy
biztonságos összeköttetés
kialakítása azonban már valamivel komolyabb
folyamatot rejt magában. A most következő
konfigurációban erre „előre
ismert” (vagyis pre-shared, PSK)
RSA-kulcsokat fogunk használni. A
konkrét IP-címektől
eltekintve az átjárókon a
/usr/local/etc/racoon/racoon.conf
állományok hasonlóan fognak kinézni,
nagyjából valahogy így:
A példában szereplő összes opció részletes kifejtése jóval meghaladná ezen leírás kereteit, ezért a bővebb információkkal kapcsolatban inkább a racoon beállításaihoz tartozó man oldal elolvasását javasoljuk.
A gépek közti hálózati forgalom titkosításához be kell még állítanunk egy SPD házirendet is, így a FreeBSD és a racoon képes kódolni és dekódolni a csomagokat.
Ezt a most következő, a vállalati
átjárón találhatóhoz
hasonló egyszerű shell szkripttel tudjuk
elvégezni. Ezt az állományt a rendszer
indításakor fogjuk felhasználni, melyet
/usr/local/etc/racoon/setkey.conf
néven mentsünk el:
Ahogy ezzel megvagyunk, a racoon az egyes átjárókon a következő paranccsal indítható el:
#
/usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
A parancs eredménye ennek megfelelően nagyjából a következő lesz:
A tunnel megfelelő működését
úgy tudjuk ellenőrizni, ha átváltunk egy
másik konzolra és a tcpdump(1) program
segítségével figyeljük a
hálózati forgalmat. A példában
szereplő em0
interfészt
természetesen ne felejtsük el kicserélni a
megfelelő eszköz nevére.
#
tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
Ennek hatására az alábbiakhoz hasonló adatoknak kellene megjelennie a konzolon. Amennyiben nem ez történik, valamilyen hiba történt, ezért meg kell keresnünk azt a visszakapott adatok alapján.
Itt már mind a két hálózatnak elérhetőnek kell lennie és egyként kell látszódnia. A hálózatokat ezen felül még érdemes külön védeni egy tűzfallal is. Ilyenkor a csomagok két hálózati közti zavartalan oda-vissza vándorlásához további szabályokat kell még felvennünk a tűzfal szabályrendszerébe. A ipfw(8) tűzfal esetén ez a következő sorok hozzáadását jelenti a tűzfal konfigurációs állományához:
A szabályok számozását mindig az adott gép aktuális beállításainak megfelelően kell módosítani.
A pf(4) és ipf(8) felhasználók számára ehhez a következő parancsot javasoljuk:
Végezetül a következő sor
hozzáadásával engedélyezzük az
/etc/rc.conf
állományban a
VPN indítását a rendszer
indítása során:
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.