Freeradius, WAP2 y Wi-Fi

Llevaba tiempo tratando de instalar un servidor FreeRADIUS para mi red inalámbrica, pero la información en Internet era, cuando menos, confusa.  Dado que utilizo Debian, había un lío con openSSL que hacía un poco enredada la instalación.  Además de tantas cosas que modificar, que cuando trataba de hacerlo funcionar, no sabía exactamente que era lo qué había hecho mal o qué bien.

Esta vez retomé la idea y, para mi sorpresa, salió casi que de una sola vez.  Exceptuando que FreeRADIUS se negaba a "hablar" con el resto de mi red, debido a un problema con Shorewall, todo lo demás fue bastante sencillo.

Como comenté, uso Debian, específicamente la rama inestable, que para la fecha tiene la versión 2.1.10 de FreeRADIUS.  Así que empiezo.

apt-get install freeradius

Se instalan entonces 4 paquetes: freeradius, freeradius-utils, freeradius-common y libfreeradius2.  Edito entonces los archivos de configuración de FreeRADIUS.

Los archivos de configuración están en /etc/freeradius así que

cd /etc/freeradius

Edito clients.conf y le añado esto al final:

client 10.1.1.10 {
        secret          = la_clave_para_el acceso_del_AP_al_servidor_radius
        shortname       = cualquier_nombre
}

Sustituyan el 10.1.1.10 por la IP del AP o router inalámbrico.  La clave de acceso es la misma que colocaran en el router para identificarse con el servidor RADIUS.

Después, edito users y le añado esto al final:

"nombre_de_usuario" Cleartext-Password := "clave_de_usuario"

Y ya está.  Levanto el servidor para verificar que todo está bien:

freeradius -X

Todo bien, ctrl-C, para salir.  Hasta aquí tendrán un servidor FreeRADIUS funcional, pero ésta parte está más o menos explicada en un montón de sitios.  Para los que han dado varias vueltas por San Google, en éstos momentos se estarán preguntando por radiusd.conf, eap.conf y los benditos certificados, que es la parte truculenta de la configuración y que nadie explica de una manera simple. 

En radiusd.conf podemos cambiar la IP y los puertos en los que escucha el servidor RADIUS.  Son bastante obvios los cambios que hay que hacer, así que no los explicaré aquí.  De todas formas, en principio el servidor funciona sin tener que tocar éste archivo.

En eap.conf debemos hacer una modificación en una línea nada más.  Busco ésto en el archivo:

private_key_password

Y cambio la clave por defecto que trae, por una más segura.  Esta será la clave del certificado de seguridad.  Digamos que por ahora la linea quedará así:

private_key_password = clave_del_certificado_de_seguridad

Cierro el archivo y ahora me pongo con los certificados de seguridad.  ¡Esta es la parte donde siempre me tropezaba!

Buscando en la documentación me conseguí con un subdirectorio que me vino como anillo al dedo.  Hago una copia del contenido hacia el subdirectorio /etc/freeradius/certs así:

cp /usr/share/doc/freeradius/examples/certs/* /etc/freeradius/certs/

cd /etc/freeradius/certs/

rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*

./bootstrap

Hay un archivo README que deberían leer, pero de todas formas les doy los pasos rápidos.

Editamos el archivo ca.cnf, cambiamos la clave en "input_password" y en "output_password".  Para no hacerme un lío, yo usé la misma clave en los dos campos.  Tiene que ser la misma contraseña que colocamos en el archivo eap.conf, para éste ejemplo es "clave_del_certificado_de_seguridad".  De hecho, usé la misma clave en todos los certificados, para evitarme el lío de las claves.  Sé que no es muy seguro usar la misma clave en todos lados, pero siempre y cuando sea suficientemente complicada no hay mayor problema en principio.

Podemos cambiar también algunas cosas en la sección "[certificate_authority]", según gustos.

Hecho eso, en la línea de comandos le decimos:

make ca.pem && make ca.der

Con esto ya tenemos el certificado de autoridad, CA, y el certificado autofirmado para Windows.

Este certificado nos va a permitir crear los demás.  Nos falta el certificado del servidor y el certificado de los clientes.

Para el certificado del servidor editamos el archivo server.cnf.  En la sección "[server]" de server.cnf, colocamos la misma información que introdujimos en la sección "[certificate_authority]" del archivo ca.cnf.  Sólo una cosa debe ser diferente, commonName.

Ahora, en la línea de comandos le decimos

make server.pem && make server.csr

 Ya tenemos el certificado del servidor.

Ahora el certificado del cliente.  Editamos el archivo client.cnf cambiamos la clave en "input_password" y en "output_password".   En la sección "[client]", nos aseguramos que el campo commonName contenga el nombre de usuario, en el ejemplo, nombre_de_usuario.  El certificado resultante tendrá el nombre de la cuenta de correo colocada en el campo emailAddress.  Otra vez a la línea de comandos:

make client.pem

Hay también la forma rápida de crear los certificados, después de editar todos los archivos de configuración se coloca en la línea de comandos lo siguiente:

make

¿Donde van todos los certificados?  Pues eso es lo bueno, se quedan donde están.  Sólo hay que copiar los certificados ca.pem, server.pem, server.csr y user@example.com.pem, en una llave USB y así hacer las pruebas de conexión.

No explico nada con respecto a los certificados porque no he hecho suficientes pruebas.  En mí caso utilizo una conexión WAP2 con protocolo PEAP y tuve que usar únicamente el certificado ca.pem. El nombre de usuario y la clave es el que se colocó en el archivo users.

Para hacer las pruebas de conexión, el viejo comando:

freeradius -X

Espero que les sirva, el ¿tutorial?

© 2011, Draco. Bajo licencia Creative Commons by-nc-nd. Al copiar usted debe colocar un enlace a la publicación original.

Digiprove sealThis blog post has been Digiproved

Deja un comentario

Click para insertar emoticon

SmileBig SmileGrinLaughFrownBig FrownCryNeutralWinkKissRazzChicCoolAngryReally AngryConfusedQuestionThinkingPainShockYesNoLOLSillyBeautyLashesCuteShyBlushKissedIn LoveDroolGiggleSnickerHeh!SmirkWiltWeepIDKStruggleSide FrownDazedHypnotizedSweatEek!Roll EyesSarcasmDisdainSmugMoney MouthFoot in MouthShut MouthQuietShameBeat UpMeanEvil GrinGrit TeethShoutPissed OffReally PissedMad RazzDrunken RazzSickYawnSleepyDanceClapJumpHandshakeHigh FiveHug LeftHug RightKiss BlowKissingByeGo AwayCall MeOn the PhoneSecretMeetingWavingStopTime OutTalk to the HandLoserLyingDOH!Fingers CrossedWaitingSuspenseTremblePrayWorshipStarvingEatVictoryCurseAlienAngelClownCowboyCyclopsDevilDoctorFemale FighterMale FighterMohawkMusicNerdPartyPirateSkywalkerSnowmanSoldierVampireZombie KillerGhostSkeletonBunnyCatCat 2ChickChickenChicken 2CowCow 2DogDog 2DuckGoatHippoKoalaLionMonkeyMonkey 2MousePandaPigPig 2SheepSheep 2ReindeerSnailTigerTurtleBeerDrinkLiquorCoffeeCakePizzaWatermelonBowlPlateCanFemaleMaleHeartBroken HeartRoseDead RosePeaceYin YangUS FlagMoonStarSunCloudyRainThunderUmbrellaRainbowMusic NoteAirplaneCarIslandAnnouncebrbMailCellPhoneCameraFilmTVClockLampSearchCoinsComputerConsolePresentSoccerCloverPumpkinBombHammerKnifeHandcuffsPillPoopCigarette