En el capítulo anterior se hizo un resumen de los tipos de configuraciones que se pueden tener en un servidor radius. Ahora se describe la manera de configurar un servidor con Freeradius.
Como no podría ser de otra manera, no nos hacemos responsables del resultado de llevar a cabo las siguientes acciones y modificaciones, así que se recomienda aplicarlas primero sobre entornos no críticos además de no ejecutar nunca un script de una fuente no confiable o que se ignora lo que hace. ¿Somos una fuente confiable? Sí.
La instalación se puede hacer en cualquier sistema Linux. En este caso se ha escogido Debian wheezy. Para instalar Freeradius, primero se deben obtener algunos paquetes que son necesarios:
apt-get install dpkg-dev fakeroot libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev \ libsasl2-dev libiodbc2-dev bind9 libkrb5-dev libperl-dev libpcap-dev libreadline-dev \ libsnmp-dev libpq-dev libtalloc-dev libyubikey-dev libsqlite3-dev
Ahora la instalación se hace a partir del source de Freeradius en su última versión, la versión 3.0.0.
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.0.tar.gz tar -xvzf freeradius-server-3.0.0.tar.gz cd freeradius-server-3.0.0/
A partir del source se crea el binario para Debian, (para otras plataformas mirar este enlace):
fakeroot dpkg-buildpackage -b -uc
Los binarios se crean en el directorio superior, donde se resalta los binarios que son necesarios instalar:
cd .. ls freeradius_3.0.0+git_i386.changes freeradius-krb5_3.0.0+git_i386.deb freeradius-server-3.0.0.tar.gz freeradius_3.0.0+git_i386.deb freeradius-ldap_3.0.0+git_i386.deb freeradius-utils_3.0.0+git_i386.deb freeradius-common_3.0.0+git_all.deb freeradius-mysql_3.0.0+git_i386.deb libfreeradius3_3.0.0+git_i386.deb freeradius-dbg_3.0.0+git_i386.deb freeradius-postgresql_3.0.0+git_i386.deb libfreeradius-dev_3.0.0+git_i386.deb freeradius-iodbc_3.0.0+git_i386.deb freeradius-server-3.0.0 dpkg -i libfreeradius3_3.0.0+git_i386.deb dpkg -i freeradius-common_3.0.0+git_all.deb dpkg -i freeradius_3.0.0+git_i386.deb
Al instalar los paquetes, automáticamente el servicio Freeradius arranca, por lo que es necesario pararlo, para configurarlo antes:
/etc/init.d/freeradius stop Stopping FreeRADIUS daemon: freeradius.
Ahora se procede a la configuración. El directorio donde se encuentran todos los archivos de configuración es /etc/freeradius:
1º Editamos el archivo users, que es el que va a contener los nombres y las contraseñas de los usuarios:
vi /etc/freeradius/users
Al final del fichero añadimos:
"juanito" User-Password == "passwordparajuanito"
Donde “juanito” es el nombre de usuario y “passwordparajuanito” es la clave del usuario.
2º Editamos el archivo clients, que es el que va a contener el router o punto de acceso que se va a conectar por cable al servidor radius:
vi /etc/freeradius/clients.conf client 192.168.1.1 { secret = passwordpararouter shortname = linksys }
Donde 192.168.1.1 es la dirección IP del router, y “passwordpararouter” es la clave de conexión entre el router y el servidor.
Antes de seguir configurando los demás archivos, se deben crear los certificados necesarios. Éstos vienen creados por defecto en la dirección /etc/freeradius/certs, pero opcionalmente se pueden crear. Para que los certificados se creen con una caducidad de un año hace falta editar el siguiente archivo:
vi /etc/ssl/openssl.cnf
La línea default_crl_days 30 debe quedar así:
default_crl_days 365
Los certificados se van a crear en un nuevo directorio:
mkdir /etc/freeradius/miscertificados cd /etc/freeradius/miscertificados
Se crea un archivo para la compatibilidad con Windows XP
vi xpextensions [ xpclient_ext] extendedKeyUsage = 1.3.6.1.5.5.7.3.2 crlDistributionPoints = URI:http://www.example.com/example_ca.crl [ xpserver_ext] extendedKeyUsage = 1.3.6.1.5.5.7.3.1 crlDistributionPoints = URI:http://www.example.com/example_ca.crl
Para crear el certificado raiz, se hace uso del script CA.root.sh:
#!/bin/sh OPENSSL=openssl CAPL=/usr/lib/ssl/misc/CA.pl KEYGEN=/usr/sbin/dnssec-keygen PASSDIR=pass DERDIR=der P12DIR=p12 PEMDIR=pem VALIDFOR=365 PASSWD=$1 mkdir -p $PEMDIR $P12DIR $DERDIR $PASSDIR if [ -z "${PASSWD}" ]; then echo "No root password specified, trying $PASSDIR/root.pass." if [ -a $PASSDIR/root.pass ]; then PASSWD=`cat $PASSDIR/root.pass` else echo "Not found. Generating password, see $PASSDIR/root.pass for contents." PASSWD=`$KEYGEN | head -c 32` cat /dev/null > $PASSDIR/root.pass echo $PASSWD >> $PASSDIR/root.pass fi fi rm -rf demoCA $OPENSSL req -new -x509 -days $VALIDFOR -keyout $PEMDIR/newreq.pem -out \ $PEMDIR/newreq.pem -passin pass:$PASSWD -passout pass:$PASSWD echo "${PEMDIR}/newreq.pem" | $CAPL -newca >/dev/null $OPENSSL pkcs12 -export -in demoCA/cacert.pem -inkey $PEMDIR/newreq.pem -out \ $P12DIR/root.p12 -cacerts -passin pass:$PASSWD -passout pass:$PASSWD $OPENSSL pkcs12 -in $P12DIR/root.p12 -out $PEMDIR/root.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL x509 -inform PEM -outform DER -days $VALIDFOR -in $PEMDIR/root.pem \ -out $DERDIR/root.der -passin pass:$PASSWD rm -rf $PEMDIR/newreq.pem
Se ejecuta el script seguido del password del certificado:
sh CA.root.sh passwordcert
Donde “passwordcert” es la clave asignada. Una vez ejecutado el script, hay que responder a una serie de preguntas:
Generating a 2048 bit RSA private key ......+++ Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Madrid Locality Name (eg, city) []:Madrid Organization Name (eg, company) [Internet Widgits Pty Ltd]:SAW etc...
Una vez finalizada la ejecución, se crearán unos cuantos directorios dentro de /etc/freeradius/miscertificados/ como pem, der, p12 y demoCA.
Dentro de demoCA, se debe crear si no existe un archivo llamado serial con 01 en su interior:
vi demoCA/serial 01
Se crea ahora el certificado del servidor. Para ello se debe introducir el nombre de la máquina donde se instala el servidor radius, para ello con la orden uname -n, se ve el nombre:
uname -n
debian32
El script para crear el certificado del servidor es CA.server.sh:
#!/bin/sh OPENSSL=openssl KEYGEN=/usr/sbin/dnssec-keygen PASSDIR=pass DERDIR=der P12DIR=p12 PEMDIR=pem VALIDFOR=365 SNAME=$1 PASSWD=$2 ROOTPASSWD=$3 mkdir -p $PEMDIR $P12DIR $DERDIR $PASSDIR if [ -z "${SNAME}" ]; then echo "WARNING: server name not specified. Using \"server\"." SNAME=server fi if [ -z "${PASSWD}" ]; then echo "No password specified, trying $PASSDIR/$SNAME.pass." if [ -a $PASSDIR/$SNAME.pass ]; then PASSWD=`cat $PASSDIR/$SNAME.pass` else echo "Not found. Generating password, see $PASSDIR/$SNAME.pass for contents." PASSWD=`$KEYGEN | head -c 32` cat /dev/null > $PASSDIR/$SNAME.pass echo $PASSWD >> $PASSDIR/$SNAME.pass fi fi if [ -z "${ROOTPASSWD}" ]; then echo "No root password specified, trying $PASSDIR/root.pass." if [ -a $PASSDIR/root.pass ]; then ROOTPASSWD=`cat $PASSDIR/root.pass` else echo "FATAL: No root certification password." exit fi fi $OPENSSL req -new -keyout $PEMDIR/newreq.pem -out $PEMDIR/newreq.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL ca -policy policy_anything -out $PEMDIR/newcert.pem -key $ROOTPASSWD \ -extensions xpserver_ext -extfile xpextensions -days $VALIDFOR -infiles $PEMDIR/newreq.pem $OPENSSL pkcs12 -export -in $PEMDIR/newcert.pem -inkey $PEMDIR/newreq.pem -out \ $P12DIR/$1.p12 -clcerts -passin pass:$PASSWD -passout pass:$PASSWD $OPENSSL pkcs12 -in $P12DIR/$SNAME.p12 -out $PEMDIR/$SNAME.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL x509 -inform PEM -outform DER -in $PEMDIR/$SNAME.pem -out $DERDIR/$SNAME.der rm -rf $PEMDIR/newcert.pem $PEMDIR/newreq.pem
Para ejecutar el script dentro del directorio miscertificados, se hace de la siguiente manera:
sh CA.server.sh servername passcertserver passwordcert
Donde “servername” es el nombre del certificado de servidor, y le podemos poner el nombre que queramos, en este caso servername. “passcertserver” es la clave del certificado del servidor y “passwordcert” es la clave introducida antes en la creación del certificado raíz.
Al igual que en la creación del anterior certificado, se deben responder a las preguntas, pero ahora en Common Name se debe poner el nombre de la máquina que hace de servidor y responder yes en las dos ultimas preguntas:
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SAW
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:debian32
Certificate is to be certified until Nov 23 12:09:24 2014 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
MAC verified OK
Dentro del directorio pem debemos crear el archivo dh
cd pem openssl dhparam -out dh 1024
Una vez creados los certificados, solo queda configurar los ficheros restantes (radiusd.conf, eap y mschap):
3º Editamos radiusd.conf, incluyendo en las variables la ruta de los certificados creados antes:
vi /etc/freeradius/radiusd.conf # Location of config and logfiles. confdir = ${raddbdir} modconfdir = ${confdir}/mods-config certdir = ${confdir}/miscertificados/pem cadir = ${confdir}/miscertificados/pem run_dir = ${localstatedir}/run/${name}
4º Se configuran los módulos eap y mschap (dentro de los ficheros incluimos lo siguiente sin comentar lo que ya se incluye dentro de ellos):
vi /etc/freeradius/mods-available/eap eap { default_eap_type = peap } tls-config tls-common { private_key_password = passcertserver private_key_file = ${certdir}/servername.pem certificate_file = ${certdir}/servername.pem ca_file = ${cadir}/root.pem dh_file = ${certdir}/dh random_file = /dev/urandom ca_path = ${cadir} } vi /etc/freeradius/mods-available/mschap mschap { authtype = MS-CHAP use_mppe = yes }
Ya están todos los archivos de configuración terminados. Para configurar el router o punto de acceso debemos entrar en su configuración Wireless, y dentro en configuración de seguridad y modificar los parámetros del siguiente modo:
Siendo 192.168.1.128 la dirección IP del servidor radius y “passwordpararouter” la clave que se editó en el archivo clients.conf. Para arrancar el servicio de Freeradius manualmente y ver los posibles errores, se ejecuta con la opción -X:
freeradius -X Listening on auth address 127.0.0.1 port 18120 as server inner-tunnel Listening on auth address * port 1812 as server default Listening on acct address * port 1813 as server default Opening new proxy address * port 1814 Listening on proxy address * port 1814 Ready to process requests.
Si todo ha ido bien, el servidor se quedará a la espera de que un cliente pida autenticación. En el tercer y último articulo sobre seguridad Wi-Fi empresarial, se explicarán las diferentes configuraciones para conectarse desde Windows, Linux, Android etc.
¿Dudas? Les esperamos en los comentarios.
“¿Somos una fuente confiable? Sí.”
Así, sin certificado firmado por una CA de confianza ni nada… Pues yo no me fío!
Es razonable y recomendable. Hoy en día es mejor no fiarse de nadie, aunque tengan CA de confianza. Que ya se sabe qué paso con DigiNotar…
Excelente aporte. Gracias
Tengo una duda, ¿se puede instalar online??
es decir, debes de instalarlo en un servidor local y tener la pc encendida día y noche, lo instalo en algún servidor online y me evito el problema de tener la pc encendida para que el servidor radius este funcionando??
Si lo puedes tener en un servidor online, lo único que tendrás que usar una VPN para que la conexión “parezca” local