A mini-HOWTO megírásának apropója a következő: A múlt héten írtam arról, hogy létezik egy web oldal, ahol OpenBSD - Windows XP VPN konfigurációkat találni. Sajnos ott a VPN a Windows oldalon drága, fizetős VPN kliensekkel van megoldva. Teljesen felesleges egy egyszerű IPsec kapcsolatért 100 dolláros kliens programot venni, amikor a Windows tartalmazza a szükséges klienset. Akkor megígértem, hogy csinálok egy olyan mini-HOWTO-t, amely a Windows beépített kliensét hozza össze az OpenBSD-s isakmpd-vel. Íme:
1. A probléma
Itthon több számítógépem is van. Köztük van notebook is, amely akkor jó, ha mobilis. Az internet hozzáférésem egy ADSL vonal, amelyet a gépek a lakáson belül kialakított vezeték-nélküli hálózaton keresztül érnek el, így nem probléma a lakáson belüli mozgás a mobil gépekkel. A vezeték-nélküli hálózat tervezésénél fogva nem olyan biztonságos, mint a kábelezett hálózat. A kábelezett hálózathoz csak az fér hozzá, aki fizikailag rá tud csatlakozni. A vezeték-nélküli hálózat egyik tulajdonsága, hogy nem áll meg a falakon belül, hanem azokon áthatolva a elérhető rajtuk kívül is. Ez jó, hiszen ez biztosítja, hogy szabadon mozoghassunk a gépeinkkel, és ne kelljen magunk után kábelhalmazt cipelni. Viszont ennek a tulajdonságnak van rossz oldala is, nevezetesen az, hogy biztonsági szempontból sérülékenyebb a hálózatunk, mint a fizikailag kábelezett hálózat. Miért? Mert aki a falon kívül van, kis erőfeszítéssel rácsatlakozhat a hálózatunkra, és azon minden olyan dolgokat művelhet, amelyet nem biztos, hogy szeretnénk. Például nem lenne jó, ha az élelmes szomszéd az én kicsi sávszélességű ADSL kapcsolatomon internezne ingyen vagy a személyes adataimat olvasná.
A vezeték-nélküli hozzáférési-pontok (Wireless Access Point - WAP - AP) tartalmaznak ugyan beépített ``védelmi funkciókat'' az illetéktelen hozzáférés ellen, pl. MAC address szűrés, WEP (Wired Equivalent Privacy - kábelezéssel egyenértékű biztonság) de ezek sajnos nagyon gyenge megoldások. A MAC szűrés ellen lehet nyomulni hamisított MAC címmel, a WEP pedig bizonyítottan nagyon gyenge titkosítás, pillanatok alatt feltörhető, ezért sok helyen inkább kiváltják IPsec-kel. Mi is ezt fogjuk tenni.
Első körben azt fogjuk megoldani, hogy az intenetes kapcsolat egy OpenBSD 3.5 gateway-en keresztül lesz elérhető (NAT) a wireless hálózaton belül levő kliens gépek számára. Annak érdekében, hogy a wireless hálózatból információ ne szivároghasson ki, egy VPN-t (Virtual Private Network - virtuális magán hálózat) fogunk építeni. Mivel a munkám során meglehetősen sokat kell Windows-t hasznáni, a kliens gép egy Windows XP lesz. A következő részekben természetesen bemutatom majd, hogy hogyan kell Linux és OpenBSD klienseket is használni a hálózaton.
Tehát a feladat a WEP kiváltása. Ehhez, hogy ne lőjünk ágyúval verébre, előmegosztott kulcsokat (pre-shared key - PSK) és tunnel módot fogunk használni. Használhatnánk certificate alapú VPN-t is, de érzésem szerint erre a feladatra bőven elegendő a pre-shared key alapú VPN. A sorozat következő részeiben igény esetén kitérhetünk a certificate alapú VPN-re is.
Az OpenBSD oldalon az ISAKMP (Internet Security Association and Key Management Protocol) (hívják gyakran még IKE-nek, Internet Key Exchange-nek is) névre hallgató megoldást fogjuk használni. Miért ezt? Mert része az OpenBSD alaprendszernek, amely összes mérete pár 10MB, alapértelmezetten bele van fordítva a kernelbe a támogatás, és azon kívül, hogy két konfig file-t megszerkesztünk, semmilyen más beavatkozásra nincs szükségünk. Az OpenBSD-t kis méretének köszönhetően bármilyen kis eszközre feltelepíthetjük (pl. egy Soekris net4521-esre), és máris kész a saját kézzel épített VPN router-ünk, amely ráadásul nyílt forrású operációs rendszert futtat. Az ISAKMP másik nagy előnye, hogy a 2.6-os Linux kerneltől kezdve használhatjuk Linuxon is, mivel az isakmpd-t portolták Linuxra (Debianban: apt-get install isakmpd). És mi a legszebb az egészben? Hogy az OpenBSD-s konfig file-unkat egy az egyben felhasználhatjuk :-DA Windows oldalon több módszer is lehetőségünkre áll ahhoz, hogy felépítsük a gateway-ünkkel a kapcsolatot. Számos gyártó gyárt VPN kliens szoftvert, amely képes együttműködni az OpenBSD-s ISAKMP-vel. Ilyen például az SSH Sentinel, a SafeNet SoftRemote, a TheGreenBow VPN kliens (ami egyébként OpenBSD ISAKMP-re épül), vagy éppen a PGPNet 6.5-ös és 7.11-es verziói. Mi ezekkel a probléma? A PGP-vel az, hogy az újabban elérhető verziói nem tartalmaznak IPsec klienset, a régi verziók meg régiek, és nem működnek jól Windows XP-vel (saját tapasztalat). Az SSH Sentinel, a SafeNet Softremote és a TheGreenBow pedig pénzes szoftverek, amelyek nem kevés pénzünkbe kerülnek, ha meg akarjuk vásárolni.
Akkor mi a megoldás? A megoldás az, hogy használjuk a Windows XP beépített VPN kliensét, amelyet a Cisco és a Microsoft közösen fejlesztett.
``Na ne mesélj, ismerem én a Windows-t, abban tuti nincs ilyen.'' - mondták már nekem többen is. Dehogy nincs. Csak valóban ismerni kellene a Windows-t :-D
Tehát a Windows saját kliensét fogjuk munkába fogni, mert az nem kerül plusz pénzünkbe (benne van az XP árában).
2.) Az OpenBSD
Nem fogok kitérni arra, hogy mi az az OpenBSD, mi az az ISAKMP, ezt mindenki olvassa el maga. Az ISAKMP-ről bővebben lehet olvasni a man isakmpd.policy, man isakmpd.conf, és a man isakmpd oldalakon.
Az isakmpd (ISAKMP daemon) működéséhez két file-ra van szükség. Az egyik az isakmpd.conf, a másik pedig az isakmpd.policy. Mindegyik a /etc/isakmpd/ könyvtárban található. Az OpenBSD 3.5-ben default nincs benne ez a két file, nekünk kell létrehozni (példa file-ok találhatók a /usr/share/ipsec/isakmpd/ könyvtárban). A daemon csak akkor működik, ha a két file-on levő jogok 0600 értékűek!
2.1) isakmpd.policy
3DES és SHA titkosítást fogunk alkalmazni. Használhatnánk sima DES-t és MD5 hash-t is, de miért tennénk? Azok sokkal gyengébbek.
KeyNote-Version: 2
Comment: This policy accepts ESP SAs from a remote that uses the right password
Authorizer: "POLICY"
Licensees: "passphrase:123456789"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg == "3des" &&
esp_auth_alg == "hmac-sha" -> "true";
A file magáért beszél. Az előmegosztott kulcs az 123456789. Ez a jelszó (valós életben aki ilyet használ, annak letöröm a kezét :-D). Aki ezzel a jelszóval jön, és megfelel a további követelményeknek (3des, hmac-sha) azt beengedjük.
2.2) isakmpd.conf
A gateway az OBSD (192.168.10.10), a kliens a WinXP (192.168.10.13).
[General]
Policy-file= /etc/isakmpd/isakmpd.policy
Retransmits= 5
Listen-on= 192.168.10.10
[Phase 1]
default= WinXP
[Phase 2]
Connections= OBSD
[WinXP]
Phase= 1
Transport= udp
Address= 192.168.10.13
Configuration= Default-main-mode
Authentication= 123456789
[OBSD]
Phase= 2
ISAKMP-peer= WinXP
Configuration= Default-quick-mode
Local-ID= network
Remote-ID= client
[network]
ID-type= IPV4_ADDR_SUBNET
Network= 192.168.10.0
Netmask= 255.255.255.0
[client]
ID-type= IPV4_ADDR
Address= 192.168.10.13
[Default-main-mode]
DOI= IPSEC
EXCHANGE_TYPE= ID_PROT
Transforms= 3DES-SHA-GRP2
[Default-quick-mode]
DOI= IPSEC
EXCHANGE_TYPE= QUICK_MODE
Suites= QM-ESP-AES-SHA-PFS-SUITE
2.3) ipsecadm
A daemon indítása előtt legyünk biztosak abban, hogy nincs régi/rossz SA-nk, mert nagyon sok bossszúságtól kímélhetjük meg magunkat. Használjuk a deamon indítása előtt a ``ipsecadm flush'' parancsot. Bővebb infóért nézd meg a man ipsecadm oldalt.
2.4) isakmpd
Az isakmpd ha elindul akkor daemon módban a háttérben fut. Egyelőre tesztelés idejére indítsuk el ``isakmpd -d -DA=99'' módon, hogy az előtérben fusson és a logokat tegye a stdout-ra. Természetesen automatikusan fogjuk elindítani, ha minden simán ment.
3.) Windows XP
3.1) MMC beállítások
Feltételezzük, hogy az OpenBSD korrekt módon be van állítva a fent leírtak szerint. A Windows oldal beállítása kicsit hosszabb művelet. Először is csalogassuk elő az MMC konzolt.
Start, Futtatás..., mmc.

Majd File..., Beépülő modul hozzáadása/eltávolítása..., Hozzáadás..., itt válasszuk ki és adjuk hozzá a konzolhoz az ``IP-biztonság figyelője'', és az ``IP-biztonsági házirendek kezelése'' snap-in-eket (a helyi gépre értelmezetten természetesen).
Jobb klikk az ``IP-biztonsági házirendek (helyi számítógép)'' snap-in-en, majd ``IP-biztonsági házirend létrehozása''.
A varázslóban tovább, adjunk neki egy nevet, mondjuk ``Tunnel to OpenBSD''. Kapcsoljuk ki a ``Az alapértelmezett válaszszabály aktiválása'' cuccot, ellenőrizzük, hogy a ``Tulajdonságok szerkesztése'' be legyen kapcsolva, majd ``Befejezés''.
Most a ``Tunnel to OpenBSD tulajdonságai'' ablakban vagyunk, a ``Szabályok fülön". Ahhoz, hogy az alagút működjön, két szabályt kell létrehoznunk, és mindegyik szabályhoz meg kell csinálnunk a filtereket.
3.1.1) Kliens-től OpenBSD-hez szabály
Első szabály. Ez lesz a Kliens-től (laptop) az OpenBSD-hez mutató út. Ellenőrizd, hogy a "Hozzáadás varázsló'' ki legyen kapcsolva. ``Hozzáadás...'' Most az ``Új szabály tulajdonságai''-n vagy. Ismét ``Hozzáadás...", az ``IP szűrőlista''-n vagyunk. Adjunk neki egy nevet, mondjuk "!Client to OpenBSD".
Majd újra ``Hozzáadás...", és beállítjuk a ``Szűrő tulajdonságai''-n a ``Forráscím''-hez a "Saját IP-cím"-et a ``Cél címe''-hez pedig a ``Bármely IP-cím''-et. A ``Tükrözés'' checkbox-ot NE kapcsoljuk be!
Nyomjuk meg az ``OK''-ot kétszer.
Újra az ``Új szabály tulajdonságai'' dialógus box-on vagyunk. Menjünk a ``Szűrőművelet'' fülre, ellenőrizzük, hogy a "Hozzáadás varázsló" nincs bekapcsolva. Válasszuk ki a ``Biztonság megkövetelése''-t, majd kattintsunk a ``Szerkesztés..."-re. Válasszuk a ``Biztonsági szint egyeztetése" rádió gombot, és ellenőrizzük, hogy alul a három checkbox NE legyen bekapcsolva!
Távolítsuk el az összes metódust, majd ``Hozzáadás...'', ``Egyéni'', "Beállítások...".
Válasszuk ki az ESP, és a SHA1/3DES opciókat. Kapcsoljuk be a két checkboxot.
Kétszer kattintsunk az ``OK"-ra.
Visszaértünk az ``Új szabály tulajdonságai'' dialógus box-ra. Menjünk a ``Bújtatási beállítások'' fülre, és állítsuk be az alagút végpontját, amely ebben az esetben az OpenBSD gép IP-címe lesz (192.168.10.10)
Most menjünk a ``Hitelesítési módszer módosítása tulajdonságai'' fülre, és ott ``Hozzáadás...". Válasszuk az előmegosztott kulcs-ot, és írjuk be a jelszavunkat, ami a konfig fileok szerint "123456789".
Kattintsunk az ``OK''-ra, majd távolítsuk el az alapértelmezett Kerberos metódust. A ``Kapcsolatok típusa'' fülön válasszuk a ``Minden hálózati kapcsolat'' opciót.
Kattintsunk az "OK"-ra.
3.1.2) OpenBSD-től Kliens-hez szabály
Második szabály. Ez lesz a OpenBSD-től a Klienshez (laptop) mutató út. Ellenőrizd, hogy a "Hozzáadás varázsló'' ki legyen kapcsolva. ``Hozzáadás...''. Most az ``Új szabály tulajdonságai''-n vagy. Ismét ``Hozzáadás...", az ``IP szűrőlista''-n vagyunk. Adjunk neki egy nevet, mondjuk "!OpenBSD to Client".
Majd újra ``Hozzáadás...", és beállítjuk a ``Szűrő tulajdonságai''-n a ``Forráscím''-hez a "Bármely IP-cím"-et a ``Cél címe''-hez pedig a ``Saját IP-cím''-et. A ``Tükrözés'' checkbox-ot NE kapcsoljuk be!
Nyomjuk meg az ``OK''-ot kétszer.
Újra az ``Új szabály tulajdonságai'' dialógus box-on vagyunk. Menjünk a ``Szűrőművelet'' fülre, ellenőrizzük, hogy a "Hozzáadás varázsló" nincs bekapcsolva. Válasszuk ki a ``Biztonság megkövetelése''-t, majd kattintsunk a ``Szerkesztés..."-re. Válasszuk a ``Biztonsági szint egyeztetése" rádió gombot, és ellenőrizzük, hogy alul a három checkbox NE legyen bekapcsolva!
Távolítsuk el az összes metódust, majd ``Hozzáadás...'', ``Egyéni'', "Beállítások...". Válasszuk ki az ESP, és a SHA1/3DES opciókat. Kapcsoljuk be a két checkboxot. Kétszer kattintsunk az ``OK"-ra.
Visszaértünk az ``Új szabály tulajdonságai'' dialógus box-ra. Menjünk a ``Bújtatási beállítások'' fülre, és állítsuk be az alagút végpontját, amely ebben az esetben az WinXP gép IP-címe lesz (192.168.10.13)
Most menjünk a ``Hitelesítési módszer módosítása tulajdonságai'' fülre, és ott ``Hozzáadás...". Válasszuk az előmegosztott kulcs-ot, és írjuk be a jelszavunkat, ami a konfig file-ok szerint "123456789"
Kattintsunk az ``OK''-ra, majd távolítsuk el az alapértelmezett Kerberos metódust. A ``Kapcsolatok típusa'' fülön válasszuk a ``Minden hálózati kapcsolat'' opciót.
Kattintsunk az "OK"-ra.
Ezzel kész is van a szabályunk, már csak aktiválni kell. Az ``IP-biztonsági házirendek - Helyi számítógép''-re állva, a jobb oldalon jobb klikk a ``Tunnel to OpenBSD'' házirenden, majd ``Kijelölés''.
Ezzel a házirend aktiválva lett.
Ha a ``Szolgáltatások'' közt fut az ``IPSEC szolgáltatások''
szerviz, és megpingeljük a 192.168.10.10-es (OpenBSD) IP-címet, akkor ez a kommunikáció IPSec-en keresztül kell, hogy menjen.
Ezt jól látjuk a pingeléskor, mert az első pingre a válasz az ``Az IP-biztonság egyeztetése.'' Ekkor ``beszéli meg'' a két host a titkosítás jellemzőit (Phase 1, Phase 2, titkosítás foka, stb.).
4.) Ellenőrzés
Az ellenőrzéshez az OpenBSD gépen a ``tcpdump''-ot használjuk. Jól látszanak a ``esp''-ek, amelyek arra utalnak, hogy titkosítás van a két gép között.
# tcpdump -ni le1 host 192.168.10.13
tcpdump: listening on le1
13:34:11.837202 arp who-has 192.168.10.10 tell 192.168.10.13
13:34:11.837255 arp reply 192.168.10.10 is-at 0:c:29:de:19:29
13:34:11.837716 esp 192.168.10.13 > 192.168.10.10 spi 0x84AF4E39 seq 19 len 92
13:34:11.838317 esp 192.168.10.10 > 192.168.10.13 spi 0xA0BD13D2 seq 18 len 92
13:34:12.870047 esp 192.168.10.13 > 192.168.10.10 spi 0x84AF4E39 seq 20 len 92
13:34:12.870610 esp 192.168.10.10 > 192.168.10.13 spi 0xA0BD13D2 seq 19 len 92
13:34:13.940044 esp 192.168.10.13 > 192.168.10.10 spi 0x84AF4E39 seq 21 len 92
13:34:13.948596 esp 192.168.10.10 > 192.168.10.13 spi 0xA0BD13D2 seq 20 len 92
13:34:14.952541 esp 192.168.10.13 > 192.168.10.10 spi 0x84AF4E39 seq 22 len 92
5.) Az MTU kérdés:
A ping már megy, de ha internetezni is szeretnénk, akkor állítani kell a Windows MTU-ján (Maximum Transfer Unit). A Cisco ajánlja, hogy állítsuk 1300-ra, hogy biztos ne legyen fragmentáció. Hogy ezt hogyan kell a Windows-ban, leírja ez a Microsoft dokumentum. Aki nem akar registry túrkálással foglalkozni, az töltse le a Dr. TCP névre hallgató programot, amellyel GUI-n lehet állítgatni az MTU-t. Az MTU állítás után reboot-olni kell (igen, ez Windows).
A teljes egészében működő rendszer:
Linkek:
OpenBSD IPsec FAQ (azért itt, mert már nem létezik)
Replacing WEP with IPSec (alapötlet, nekem ez nem működött)
WEP FAQ
IPsec kliensek
IPSEC (OpenBSD/isakmpd)
OpenBSD IPsec setup
Folyt. köv.