Belépés

Támogatóink



802.1x otthonra ( Második rész )

Jelentősen megkésve, de törve nem, folytatjuk a megkezdett howto-t.
Az előző részben sikeresen flasheltünk OpenWRT-t a routerünkre, valamint bekonfiguráltuk az alaprendszert. A második részben az eszköz WiFi részét konfiguráljuk be, valamint működésre bírjuk a freeradius szervert.



A jelenlegi állásból három úton indulhatunk tovább:

1, teljes egészében átpakoljuk a rendszert az USB stickre, és onnan bootolunk
2, teljes egészében átpakoljuk a rendszert az USB stickre, de a flashről bootolunk és chrootolt környezetben futtatjuk a dolaginkat
3, csak a szükséges csomagokat hagyjuk az USB-n, és csinálunk egy halom symlinket, ami egy idő után megfelelően átláthatatlanná teszi a rendszerünket

Az első verziót én személy szerint nem preferálom, hiszen ha a pendrive filerendszere elszáll, és esetleg nincs backup, akkor kezdhetünk mindent előlröl, a harmadikat pedig azért nem, mert úgy már csináltam, és meglehetősen kusza rendszert lesz a libek és a konfigok tekintetében :)

Nézzük tehát a másodikat.

Az adatok szinkronizálásának több módja is van, én az rsync nevű szoftvert preferálom leginkább:

# ipkg install rsync

majd

# cd /
# for i in bin etc lib sbin usr var; do rsync -varul $i/ /tmp/mnt/disc0_1/$i; done
# mkdir /tmp/mnt/disc0_1/proc
# mkdir /tmp/mnt/disc0_1/dev
# mount none /tmp/mnt/disc0_1/proc -t proc
# mount none /tmp/mnt/disc0_1/dev -t devfs

Mivel a proc-ra és dev-re később is szükség lehet, készítsünk nekik egy init scriptet is, hogy bootkor mountolódjanak.

# cat /etc/init.d/S51chroot
#!/bin/sh
mount none /tmp/mnt/disc0_1/proc -t proc
mount none /tmp/mnt/disc0_1/dev -t devfs

Végre valahára elkezdődhet a lényeg telepítése

# ipkg -d usb install freeradius freeradius-mod-eap freeradius-mod-eap-ttls freeradius-utils nas strace tcpdump openssl-util

ahol a "-d usb" adja meg azt a helyet, ahova a csomagokat telepíteni akarjuk. A telepítés néhány másodpercig tart, majd minden a helyére kerül.

A freeradius* csomagok az alap freeradius binárisokat és konfigokat tartalmazzák, valamint a modulokat az EAP, és ezen belül is az EAP-TLS megvalósításához. A nas fogja ellátni a kapcsolatot a kliens és a freeradius között ( WPA-PSK-hoz is ő kell nekünk ) a strace és tcpdump diagnosztikai célokat szolgál. Az openssl-util a későbbi cert generálás miatt jöhet jól.

Akik később tovább akarnának lépni és esetleg EAP-TTLS-t, vagy EAP-PEAP-ot szeretnének összehozni, ajanlatos még a freeradius-mod-chap reeradius-mod-eap-mschapv2 freeradius-mod-eap-peap freeradius-mod-eap-ttls freeradius-mod-files freeradius-mod-mschap csomagok feltelepítése is.

A router felkészítése

Az előző részben már belőttük a WAN oldalát a routernek, illetve beállítottuk a bridgelt belső láb IP címeit is. A bridge két részből áll, a négy darab switchportból ( egy interface ), és a WLAN kártya interface-jéből:

# # brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0015f23d701b yes eth1
vlan0

Az összebridgeléssel elértük, hogy a rendszer egy darab eszközt ( br0 ) kezel egy darab IP címmel, tehát akár a WLAN oldalról csatlakozunk, akár a switch portba dugunk gépet, azok egy tartományra kerülnek, és minden további gond nélkül el fogják egymást érni. Az IP cím és netmask értékek változtatására már nincs szükségunk, csak a WiFi részt kell módosítani.

Nvram változók

Az nvram értékek közül a WLAN hálózatra vonatkozó értékek wl0-val kezdődnek. A teljes listát úgy kapjuk meg, hogy:

# nvram show | grep wl0

ez a parancs egy halom változót fok kidobni a képernyőre, de ezek közül csak a legfontosabbakat, illetve a mostani konfighoz szükségeseket fogom leírni. Az össze többi megtalálható az OpenWRT dokumentációban.

Alap értékek:

wl0_mode=ap
A wl0_mode értéke lehet ap ( AP ) vagy sta ( kliens ).
wl0_ssid=EAP_test
A wl0_ssid határozza meg, hogy milyen SSID-je legyen a routerünknek.
wl0_infra=1
A wl0_infra adja meg, hogy az router ad-hoc ( 0 ), vagy normál ( 1 ) módban üzemeljen.
wl0_closed=0
A wl0_closed 1 érték hatására lezárja az SSID broadcastot, 0 értéknél pedig... naaaaaa? :)
wl0_channel=12
A wl0_channel pedig, értelem szerűen a csatornát adja meg.

WPA-hoz szükséges értékek:

wl0_akm=wpa
A wl0_akm adja meg, hogy milyen jellegű azonosítás legyen az AP-ra asszocolás után. Lehetséges értékek: open, psk, wpa, psk2, wpa2, "psk psk2" vagy "wpa wpa2".
wl0_crypto=tkip
A wl0_crypto adja meg, hogy milyen jellegű titkosítás legyen. Lehetséges értékek: tkip, aes, aes+tkip
wl0_wpa_psk=
A WPA/WPA2 PSK értéke. Jelen konfignál nem fogjuk használni.
wl0_radius_key=g04ts3_f00b4r
A radius key azt a pre-shared jelszót adja meg, amivel a NAS fog a freeradiushoz csatlakozni.
wl0_radius_ipaddr=127.0.0.1
Radius szerver IP címe
wl0_radius_port=1812
A radius szerver portszáma

Az fentebb leírt értékek úgy vannak megadva, hogy megfelelő legyen a továbbiakban is. Természetesen ha valaki változtatni akar bizonyos értékeken megteheti, csak figyeljetek oda, hogy az egyéb konfigokban is ugyan azokat az értékeket adjátok meg.

Lehet, hogy van akinek feltűnt, hogy nem WPA2 és AES lett beállítva. Természetesen az AES ( WPA2 ) nagyobb biztonságot ad, viszont vannak olyan rendszerek, amik szimplan nem támogatják. Ilyen pl az IPAQ h6340 4.20-as OS verziója, amely csak TKIP-el hajlando összefütyülni. Igen, van olyan, hogy aes+tkip, amikor _elvileg_ bármelyik módon meg lehet oldalni a titkosítást, azonban ez az IPAQ-kal szintén nem működött... Sajnos kitesztelni nem volt időm még, hogy egyéb windows vagy linux verzióval mi történik, szóval feedback jöhet.

Az értékek megadásánál mindíg nvram set változó=érték kombinációban kell megadni amit szeretnénk, és reboot előtt futtatni kell egy nvram commit-ot, hogy mentésre kerüljenek a változók.

A NAS feltelepítésével egy remek initscriptet kapunk, így annak a konfigurálásával már nem kell törődni, legközelebbi indításnál autómatikusan a megfelelő értékekkel fog elindulni a szoftver. Hozzunk létre egy indítoscriptet számára a /etc/init.d/ alá ( nem, a chroot könyvtár /etc/init.d alá! )

# cat /etc/init.d/S52nas
#!/bin/sh
chroot /tmp/mnt/disc0_1/ /etc/init.d/S41wpa $1

Freeradius konfigurálás

Mostanra minden szükséges szoftverünk felkerült a routerre, ideje tehát nekiállni a freeradius beállításának.

A freeradius konfigurációs filejai a /etc/freeradius alá kerülnek fel. Lépjünk be ebbe a könyvtárba. Három filet fogunk módosítani, radiusd.conf, clients.conf, eap.conf

Mivel a freeradius teljes körű konfigurálása nem cél ebben a howtoban, így csak az EAP-TLS megvalósításához szükséges lépéseket írom le. Az alap beállítások jók, persze finomhangolásra általában szükség van.

radiusd.conf

Keressük meg a module-ok részt a konfigban. Ezen belül található az eap.conf includeja. Alapértelmezetten ki van commentezve az include, vegyük ki előle a # jelet:

$INCLUDE ${confdir}/eap.conf

Ezután az authorize és az authenticate szekcióban szintén vegyük ki a commentet az eap bejegyzés elől.

Végeztünk :) Mentsük el a filet, és lépjünk ki belőle.

clients.conf

A clients.conf módosítása is nagyjából annyira bonyolult, mint a radiusd.conf-é volt. Módosítsuk a secrets = bejegyzés értékét arra, amit az nvramban eltároltunk. ( Doksi szerint: g04ts3_f00b4r ). Mentsük el a file-t, majd lépjünk ki.

Mielőtt nekiállnánk az eap.conf-ot beállítani, le kell generálnunk a certeket a szervernek és a klienseknek, valamint létre kell hoznunk egy random file-t és egy dh file-t a radiusd számára. Hogy ne legyen akkora kupleráj a masinán, a chroot etc/freeradius könyvtárában hozzunk létre egy certs könyvtárat.

Lépjunk be a routerre ( ha eddig nem ott dolgoztunk... ) és adjuk ki a parancsot:

# mkdir /tmp/mnt/disc0_1/etc/freeradius/certs
# cd /tmp/mnt/disc0_1/etc/freeradius/

Majd generáljunk le random filet:

# dd if=/dev/random of=certs/random bs=10 count=10000

Ezzel a paranccsal a router el fog szüttyögni jo pár percig, tehát nem kell türelmetlenkedni.

Tanusítványok

Most következhet a certek legyártása. Természetesen akinek van rá lehetősége, vagy olyan helyre csinál cert alapú azonosítást, ahol a self-signed certek nem elfogadható megoldások, böngésszen utánna, hogy kinél és milyen formában lehet igényelni rendes aláírt tanusítványokat.

A tanusítványok legyártásához openssl-t fogunk használni. Akinek esetleg nincsen hozzáférése semmilyen linux/bsd rendszerhez, keressen valakit, akinek van. A kalandosabb kedvűek megpróbálhatnak a routeren is certeket generálni, ehhez szükséges az openssl által adott CA.pl file. Esetleg az usb-re fel lehet telepíteni microperl csomagot, hátha működik vele. Én nem próbáltam... Mondanom sem kell, hogy feedback jöhet? :)

Lépjünk be a könyvtárunkba, és hozzunk létre egy akármilyen könyvtárat, ahol dolgozni fogunk:

# mkdir certs; cd certs;

Másoljuk át ide a CA.pl filet, ami debian-on /usr/lib/ssl/misc/ könyvtárban található. Nézzük meg, hogy az openssl hol van, illetve, hogy a PATH változónkban benne van e az adott útvonal. Ha igen, akkor nekiállhatunk legenerálni a certeket: ( a pass whatever, nyilván ezt meg kell változtatni! ) Ha a tanusítványokat windows-on is szeretnénk használni, akkor egy külön file-ra van szükségünk, hogy az OID érték bekerüljön a kliens certbe.

# cat xpextensions
[ xpclient_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ xpserver_ext ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Először legeneráljuk a dh ( Diffie-Hellman ) file-t, ami a TLS session kulcsok egyeztetéséhez használ a freeradius:

# openssl dhparam -check -text -5 512 -out dh

Majd generáljuk le a self-signed certet:

# openssl req -new -x509 -keyout newreq.pem -out newreq.pem -passin pass:whatever -passout pass:whatever

CA struktúrát:

# echo "newreq.pem" | CA.pl -newca >/dev/null

PKCS#12-re konvertáljuk

# openssl pkcs12 -export -in demoCA/cacert.pem -inkey newreq.pem -out root.p12 -cacerts -passin pass:whatever -passout pass:whatever

PKCS#12-ből PEM

# openssl pkcs12 -in root.p12 -out root.pem -passin pass:whatever -passout pass:whatever

PEM-ből DER-be

# openssl x509 -inform PEM -outform DER -in root.pem -out root.der

Majd törölhetjük a newreq.pem-et, mivel a demoCA/cacert.pem és a newreq.pem ugyan azt tartalmazza. Ezeket a parancsokat többet nem kell lefuttatni. A következő pár parancs segítségével fogjuk legenerálni a szerver ( radius ) és a kliensek tanusítványait, később, ha új klienseket akarunk felvenni, már csak a kliens certek generálásához szükséges parancsokat kell újra futtatni.

Kiszolgáló tanusítványa:

certificate request:

# openssl req -new -keyout newreq.pem -out newreq.pem -passin pass:whatever -passout pass:whatever

Írjuk alá:

# openssl ca -policy policy_anything -out newcert.pem -passin pass:whatever -key whatever -extensions xpserver_ext -extfile xpextensions -infiles newreq.pem

PKCS#12:

# openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -out kiszolgalo_neve.p12 -clcerts -passin pass:whatever -passout pass:whatever

PEM-be konvertálás:

# openssl pkcs12 -in kiszolgalo_neve.p12 -out kiszolgalo_neve.pem -passin pass:whatever -passout pass:whatever

PEM-et pedig DER formátumba:

# openssl x509 -inform PEM -outform DER -in kiszolgalo_neve.pem -out kiszolgalo_neve.der

A kliens certek legyártásához az alábbi parancsok szükségesek:

certificate requestet:

# openssl req -new -keyout newreq.pem -out newreq.pem -passin pass:whatever -passout pass:whatever

Certificate request aláírása:

# openssl ca -policy policy_anything -out newcert.pem -passin pass:whatever -key whatever -extensions xpclient_ext -extfile xpextensions -infiles newreq.pem

( itt használjuk az xpextension file-t ! )

PKCS#12:

# openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -out kliens_neve.p12 -clcerts -passin pass:whatever -passout pass:whatever

Konvertáljuk át PEM formatra:

# openssl pkcs12 -in kliens_neve.p12 -out kliens_neve.pem -passin pass:whatever -passout pass:whatever

és a PEM-et DER-ré:

# openssl x509 -inform PEM -outform DER -in kliens_neve.pem -out kliens_neve.der

A kiszolgaló nevét és a kliens nevét érdemes egyedire változtatni, mert később is tudni fogjuk, hogy melyik tanusítvány kihez tartozik.

Miután készen vagyunk, fel kell másolni a szükséges file-okat a routerre. A random file már elvileg a helyén van, így csak a dh, cacert.pem és a kiszolgálónak készített PEM file-t kell felmásolni. ( # scp fileneve root@192.168.1.1:/tmp/mnt/disc0_1/etc/freeradius/certs )

Ezután módosíthatjuk az eap.conf file-t ( mindjárt végzünk... ):

Az érintetlen konfigban az alapértelmezett eap tipus az md5. Mivel mi TLS-t szeretnénk használni, így írjuk át a default_eap_type változót tls-re. Kommentezzük ki az md5{} részt, majd keressük meg a TLS-re vonatkozó szakaszt, és módosítsuk az alábbiak szerint:

A kiszolgáló privát kulcsának a jelszava:
private_key_password = whatever

Privát kulcs:
private_key_file = ${raddbdir}/certs/kiszolgalo_key.pem

Kiszolgáló certificate:
certificate_file = ${raddbdir}/certs/kiszolgalo_key.pem

CA:
CA_file = ${raddbdir}/certs/cacert.pem

Diffie-Hellman dh file:
dh_file = ${raddbdir}/certs/dh

és a random file:
random_file = ${raddbdir}/certs/random

Készítsük el a freeradius init scriptjét a /etc/init.d alá:

# cat /etc/init.d/S52radiusd
#!/bin/sh
chroot /space/ /etc/init.d/radiusd $1

Lépjünk be a routeren a freeradius könyvtárába ( USB-n etc/freeradius ) és nevezzük át a users file-t users.old-ra, majd hozzunk létre egy users file-t az alábbi tartalommal:

# cat users DEFAULT Auth-Type := EAP

Ezzel készen is vagyunk a freeradius konfigurálással ( 3xos hurrá!!!1111 )

Chrootoljuk be magunkat az USB-re, és indítsuk el a radiusd-t:

# radiusd -XA

Ha az utolsó sor a kimenetben "Ready to process requests.", akkor tapsi-tapsi, minden jol alakult. Amennyiben nem, érdemes a debug kimenetet file-ba menteni, és nekiállni átnézni mindenféle error és hasonlók miatt, valamint újból átnézni a doksit, hátha valamit nem jól csináltunk...

Indítsuk újra a routert, varjunk kicsit, majd sshzzunk be. Nézzük meg, hogy fut-e a nas, illetve a radiusd. Nézzük meg a dátum beállításokat, hogy az is megfelelő e ( ha nem, akkor meg játszani kell az rdate indítással, hogy a ppp kapcsolat felhúzása után induljon csak el... ) Ezzel készen is vagyunk a router konfigurálásával.

Kliensek konfigurálása

Úgy gondolom, hogy aki linuxot vagy Mac-et használ, nem fog problémába ütközni az EAP-TLS beállítással, úgyhogy most csak a windowsos klienseknél írnám le a konfigurálást.

A Windows XP esetében az SP2 megléte szükséges, hogy a WZC tudja kezelni az EAP-TLS-t ( Windows 2000 esetén SP4 kell ), mindenki tegyen róla, hogy felkerüljön.

Másoljuk fel magunknak a root.der, és a kliens_neve.p12 file-t.

( Sajnos nem tudom képekkel megtámogatni a konfigot. Jó, lusta vagyok kiszedni a képeket a pdfből, viszont bárki letöltheti angolul innen :) )

Start Menu / Futtatás, írjuk be, hogy mmc. Ezzel elindítjuk a Microsoft Management Console nevű csodát. Kattintsunk a File / Add/Remove Snap-In menüpontra. A megjelenő ablakban a Stendalone fülnél kattintsunk az Add gombra. Válasszuk ki a Certificate-et a listából, majd kattintsunk az Add gombra. A megjelenő újabb ablakban jelöljuk ki a "My User Account" pontot, majd kattintsunk a Finish gombra. Ezután, bár a Finish után azt hittük, hogy vége, még egy ablak jelenik meg. Itt a "Local computer" előtti boxot kattintsuk be.

Ezután keressük meg a root.der file-t, és kattintsunk rá. Megjelenik egy ablak, itt az Install Certificate-re kell kattintani. A megjelenő Certificate Store ablakban kattintsunk a Place all certificates ... kezdetű checkboxra, majd a Browse-ra kattintva a megjelenő listából válasszuk ki a "Trusted Root Certification Authorities"-re. A visszakapott ablakban kattintsunk a nextre, majd a következő ablakban a finish-re. Ezután újabb ablak jelenik meg ( már megint a finish után... ), ahol a root tanusítvány értékeit nézegethetjük. Ha nem akarjuk sokáig nézegetni, kattintsunk a Yes gombra... Ezzel be is importáltuk a root certificate-et.

A kliens cert inportálása kicsivel egyszerűbb. Kattintsunk a kliens_neve.p12 file-ra. A felugró ablakban írjuk be a generáláshoz megadott jelszót, majd kattintsunk a Next gombra. Ekkor megjelenik a régről ismert Certificate Store, ahol az alapértelmezett érték meg is felel nekünk. Ezután a next és ok gombok megfelelő sorrendjében történő kattintgatásával végeztünk is.

További jó szorakozást :)