Xarxa Wifi Segura: freeRadius + WRT54G = 802.1x (WPA-radius EAP/TLS)

Reading time: 9 – 15 minutes

ENGLISH VERSION Secure wi-fi Net : freeRadius + WRT54G = 802.1x (WPA-radius EAP/TLS)

wifi.gif

Havia de montar una xarxa Wi-fi amb un nivell de seguretat com deu mana, no com el que s’esta montant actualment amb WEP i tonteries. Així doncs vaig montar un servidor FreeRadius per treballar amb un Linksys WRT54G. Bàsicament la idea va ser instal·lar un HyperWRT al WRT54G (consell del Pof) després el vaig posar que treballés amb WPA-Radius contra el FireWall on vaig instal·lar el FreeRadius. Aquest pas no és necessari si no voleu, ja que el firmware de serie del WRT54G ja suporta WPA-radius.

Esquema de la xarxa que volem montar, cal que ens fixem només en la part del firewall i de l’AP, la resta es suposa i no és important:

wpa-eaptls.gif

Per configurar tot el tema l’únic que vaig fer és seguir les instruccions del 802.1x HOWTO. De totes formes un faig una petita guia a continuació:

  • Insatl·lem el freeradius al firewall: emerge freeradius
  • Configurem el freeradius per treballar amb EAP/TLS
  • Generem els certificats
  • Comprobem que el freeRadius funciona correctament
  • Configurem l’AP (Linksys WRT54G)
  • Configurem els clients Windows XP amb SP2
  • Configurem els clients amb Linux

Els fitxers de configuració que jo he usat en el freeRadius són els següents:

  • /etc/raddb/radiusd.conf fitxer de configuració general del radius, definim sistemes d’auth i d’altres a usar. Hi ha moltes parts del fitxer que no he usat les he deixat tal i com venien. Agraeixo l’ajuda el Pof el haver-me deixar mirar els seus fitxers per crear els meus.
  • /etc/raddb/clients.conf IP’s i xarxes de sistemes que poden ser clients del radius, en el nostre cas l’AP (172.16.1.253).

Malgrat la potència del Radius dona per molt més del que he usat en aquest cas, la documentació i el temps per experimentar no donen per massa més. Però si algú s’anima a refinar el que he fet i m’ho comunica estaré molt agraït.

Pel que fa a la generació dels certificats, obviament la idea és que els emeti una entitat certificadora, però com que això només passa a les ‘pelis’ i a les empreses amb capital, cas que no seria el que ens ocupa, em sembla. Agafarem el nostre OpenSSL i l’usarem per fer tota la pesca. Si no el teniu, ja ho sabeu: emerge openssl. A més com que segur que el nostre fort no són les PKI i històries semblants, el millor és aprendre a usar els scripts que venen amb el freeRadius i el OpenSSL, ja que amb molt poques modificacions podrem crear els certificats que ens fan falta per treballar de forma segura amb el nostre wi-fi.

Com deia usarem els scripts del freeRadius i l’OpenSSL per generar els nostres certificats, així doncs primer de tot anem al codi font del freeRadius i veurem que hi ha un directori que es diu ‘scripts’ allà dins trobarem: CA.certs, certs.sh i xpextensions. Us recomano que verifiqueu les rutes de les ordres que contenen els scripts ja que almenys a mi no em funcionaven per culpa de les rutes que usaben els scripts. Si us fa mandra mirar el codi us adjunto un petit ‘paquet’ amb els fitxers que jo m’he modificat: certs.tar.gz aquests arxius estan modificats per treballar des del propi directori on ens trobem, us recomano crear un directori de treball nou i buit. Un cop tenim localitzats els fitxers, heu de tenir en el vostre PATH el CA.pl que és un script que porta el perl de serie, però que no acostuma a copiar al PATH, jo l’he posat a /usr/bin i després de generar els certificats l’he borrat. També us l’he posat al ‘paquet’, per si no el voleu buscar.

Un cop tenim tot això en un directori apunt per treballar. Podeu editar el CA.certs i posar les vostres dades a les variables de l’inici del fitxer. No cal que modifiqueu res més que les variables la resta ja es farà sola. Sobre tot no oblideu el password que poseu ja que a l’hora de configurar el servidor i els clients ens farà falta.

Per generar els certificats ara l’únic que hem de fer és posar:

# ./certs.sh

i la sortida serà algo així:

Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
........................+......................................................+...........+................................+..........+.......................+...+...........................................+...............................+............+..............+.................................+.......+..+.................................................+....+....................+.........................................+..+......+................................................+........+.....+...............+...........+.+..................+...........+..................................................+............+......+.+.................+.+.........................+....+................+....+....+.....+.........................+............+......+.+..........................................................+..+...........................................+.........................+.............................+..................................................+...+...++*++*++*++*++*++*
  See the 'certs' directory for the certificates.
  The 'certs' directory should be copied to .../etc/raddb/
  All passwords have been set to 'whatever'

No feu cas dels missatges, només fixeu-vos en que no hagi donat cap error. Ara tindreu un nou directori que penja del directori on us trobeu, aquest directori es diu certs i dins té tots els certificats que us fan falta pel client i el servidor. Us recomano que poseu el contingut del directori ./certs a /etc/raddb/certs així haureu de tocar poca cosa dels fitxers de configuració que us he passat.

El més important ara mateix és repassar els fitxers de configuració que us he posat més amunt i comprobar que el servidor radius es llença sense problemes, cosa que no sempre passa a la primera. Pel que fa al radiusd.conf no crec que tingueu gaires problemes només heu de verificar que les rutes dels certificats apunten als fitxers que tenen el mateix nom que els fitxers que heu generat i sobretot fixeu-vos en el paràmetre: private_key_password = whatever. Cal que canvieu el ‘whatever’ pel vostre password, el que heu posat a la variable PASSWORD del fitxer CA.certs. Si no ho feu, quan llenceu el dimoni, per exemple amb un radiusd -X, per comprobar si es llença bé us demanarà la clau que heu usat per xifrar simetricament els fitxers amb la clau privada, o sigui, el password del que estem parlant. Si això no ho eviteu quan tireu el dimoni amb /etc/init.d/radiusd start donarà un error ja que no podrà usar les claus per accedir als vostres certificats.

Si feu aquest parell de coses bé: verificar les rutes i posar el password correctament. El que toca fer és el que ja apuntava fa unes línies: radiusd -X després d’executar la comanda sortiràn una serie de històrics que ens informaran sobre els possibles errors i si el procés es queda en esepera i amb una linia del tipus:

Ready to process requests.

Senyal que ho heu fet tot bé, ara ja podeu fer un control+c i llençar el dimoni de gentoo (/etc/init.d/radiusd start) o bé, no fer res i configurar un client i així veurem per pantalla els logs que es van generan i podrem comprobar si la cosa rutlla o no rutlla. Si voleu verificar els històrics mentre teniu el servei funcionant i no el mode interactiu, podeu trobar els logs a /var/log/radius/ concretament trobareu els logs de quan s’ha llençat el dimoni a startup.log i els logs de les connexions a radius.log. Si voleu veure de forma interactiva el que li passa al dimoni podeu fer: tail -f /var/log/raddb/radius.log

Abans de passar a configurar els usuaris cal configurar l’AP que serà el client del nostre servei de Radius. La configuració és realment molt senzilla, podeu configurar l’AP tal i com volgueu, concretament jo l’he configurat com un router entre dues xarxes la d’usuaris on s’assignen les IPs per DHCP (192.168.2.0/24) i la que ell (l’AP) anomena Internet, la 172.16.1.253 segons el gràfic. A mi m’agrada dir-li el camí que portarà a internet, o sigui, un cable que va contra el firewall i a través del qual es comunicarà amb el freeRadius. Per exemple, jo acostumo a posar aquesta pota del firewall amb la IP 172.16.1.254 i la pota ‘Internet’ del WRT54G amb la IP 172.16.1.253. Per tant, cal que en el fitxer de configuració /etc/raddb/clients.conf aquesta IP tingui permisos per fer peticions al Radius, per exemple, com el fitxer que us he facilitat:

client 172.16.1.253/32 {
        secret          = SharedSecret99
        shortname       = localhost
}

Fixeu-vos que aquí apareix un altre password, aquesta ‘pre-shared key’ l’usen el WPA-client (WRT54G) i el servidor Radius (freeRadius) per xifrar les seves comunicacions. Així doncs a l’AP li haurem de facilitar aquesta clau perquè pugui parlar amb el nostre servidor Radius. A continuació adjunto una captura de pantalla de la part de la configuració de l’AP on s’ha d’especificar que usarem un servidor Radius:

wpa-radius.jpg

Per configurar un client de Windows, el primer que heu de tenir en compte és que la targeta WIFI que useu té un firmware suficientment nou com per suportar WPA amb EAP/TLS. Si no ho sabeu intenteu aplicar el manual que adjunto de com configurar un client de WXP i si no trobeu les opcions que assenyalo segurament la vostre targeta no ho suporta. També us aviso que jo només ho sé configurar amb WXP i SP2, així que qualsevol software propietari que porti la vostre targeta wi-fi doncs ni idea de com va, i la resta de version de win tampoc ni idea, no ho he pogut provar ni en tinc ganes de fer-ho.

Us he fet un PDF amb un munt de captures de pantalla perquè sapigueu configurar els clients de WXP. Cal que penseu que durant el document s’instal·len dos certificats el root.der i el root.p12. Aquests dos fitxers estan al directori /etc/raddb/certs, recordeu que els hem generat fa una estona. Així doncs us recomano copiar-los en un pen-drive i no perdre’ls de vista ja que ens faran falta per configurar tots els clients.

Com instal·lar els clients EAP/TLS en Windows XP SP2 en format PDF. Aquest document esta basat en: HOWTO: EAP//TLS Setup for FreeRADIIUS and Wiindows XP Supplliicant també en format PDF.

Pel que fa a la configuració de clients Linux doncs de moment no ho he pogut provar, ja que la meva targeta wi-fi PCMCIA té un firmware massa antic, en els propers dies espero poder configurar la targeta interna del portatil que l’he configurar amb ndiswrapper o linuxant amb els drivers de linux, però ambdos sistemes em permeten usar l’wap_suplicant que és el software necessari per autenticar-me amb WPA/TLS des del Linux, quan tingui això funcionant us aviso. Tranquils que no penso currar gaires dies en Windows a la feina que em poso nerviós de veure com peta tot.

Us adjunto algunes referencies que he usat per configurar el tema:

  • 8021X-HOWTO – This document describes the software and procedures to set up and use IEEE 802.1X Port-Based Network Access Control using Xsupplicant as Supplicant with FreeRADIUS as a back-end Authentication Server.
  • FreeRADIUS/WinXP Authentication Setup – This post describes how to build a FreeRADIUS server for TLS and PEAP authentication, and how to configure the Windows XP clients (supplicants). The server is configured for a home (or test) network.
  • HOWTO on EAP/TLS authentication between FreeRADIUS and XSupplicant – This document describes how to setup strong cryptographic authentication between XSupplicant and FreeRADIUS. This is accomplished using part of 802.1x authentication for wireless network. In particular it uses EAP/TLS extension, and TLS handshake.

Finalment perdoneu el rollasso que he fotut en aquest post, sento no haver-ho pogut escursar més però només disitjo que això ajudi al màxim número de gent possible. Gràcies per la paciència.