Objetivo: Instalar freeradius dentro de un router con OpenWrt para que pueda usarse como servicio de autenticación para múltiples usuarios.
Necesitamos un router con Openwrt recién flasheado y con acceso a Internet. En nuestro caso hemos utilizado CHAOS CALMER (15.05, r46767). (Probado con HG556A Ver C y Amper ASL-26555)
El servidor Radius (Remote Authentication Dial-In User Service) es un servicio para poder autenticar usuarios de manera centralizada. En nuestro caso a cada usuario de nuestra empresa le daremos un usuario y contraseña de manera que ésta será la forma de autenticarse en nuestra red Wifi.
Supongamos que en nuestra empresa utilizamos un método tradicional de autenticación Wifi tal como WPA o WPA2. Imaginemos también que tenemos 10 puntos de acceso Wifi repartidos por nuestra empresa con una única clave de autenticación. Lógicamente a todos los empleados le diremos cual es la clave de la WIFI para poder conectarse. ¿Qué pasaría el día en que decides cambiar esa clave WPA? Pues que tienes que acceder router por router cambiando la clave antigua por la clave nueva. Además tendré que informar a a todo el personal y decirle como debe borrar de sus dispositivos la contraseña antigua que normalmente tiene guardada en su dispositivo. ¿Qué pasaría si un vecino se entera de esa única clave Wifi que tenemos en la empresa?¿Tendríamos que cambiar la clave de los 10 puntos de acceso cada vez que despidamos a un empleado?¿Podríamos saber a que hora se conectó el empleado que nos acaba de borrar todos los datos del servidor?. Vemos que en algunas ocasiones, el uso de una única clave para todo el mundo puede traernos más de un problema.
Imagina ahora que puedes darle a cada empleado un usuario y una contraseña para autenticarse. Que ese mismo usuario y contraseña pueda además ser utilizado por ese empleado en otros servicios de la empresa. Que puedo controlar cuándo se conectan mis empleados. Que además si despido a un empleado sólo tengo que eliminar ese usuario de la lista de usuarios del sistema. Que para cambiar las contraseñas de acceso al Wifi de la empresa sólo tengo que acceder a un router. Por supuesto otra gran ventaja es que no tenemos que dejar un ordenador encendido consumiendo energía para realizar todo esto. Encontramos como ves muchas ventajas en el uso de este tipo de servidores e instalándolo en un router.
No todos los routers clientes son capaces de ser configurados para este sistema (WPA2 Enterprise / CCMP). Openwrt nos da la posibilidad de usar este tipo de cifrado y hay que aprovecharlo.
La instalación de un servidor puede resultar complicada si no tienes muchos conocimientos. Vamos a intentar simplificar lo máximo posible la instalación de un servidor Radius en Openwrt para que puedas tenerlo en funcionamiento lo más rápido posible.
Paso 1. Instalación de los paquetes necesarios.
Los vamos a instalar los paquetes de un tirón:
opkg update opkg install freeradius2 freeradius2-mod-eap freeradius2-mod-eap-mschapv2 freeradius2-mod-eap-peap freeradius2-mod-eap-tls freeradius2-mod-eap-ttls freeradius2-mod-files freeradius2-mod-mschap freeradius2-mod-radutmp freeradius2-mod-realm freeradius2-mod-exec freeradius2-mod-pap freeradius2-mod-chap
Paso 2. Instalar certificados y utilidades para verificar si funciona.
Para ir más rápido vamos a instalar los certificados de demostración que trae freeradius. Cuándo lo tengamos el sistema funcionando en la empresa deberemos cambiarlos. También instalaremos unas utilidades que nos sirven para probar el servidor desde el mismo router y el editor nano por si no estás acostumbrado al vi.
opkg install freeradius2-democerts
freeradius2-utils nano
Paso 3. Configuración
Todos los comandos que van a continuación van a ir sustituyendo automáticamente en los ficheros de configuración sólo lo que tenemos que tocar.
Configurando /etc/freeradius2/radiusd.conf. Cuando todo funcione puedes editarlo a mano y buscar por interface = br-lan si quieres cambiarlo.
Vamos a hacer que escuche por la interfaz br-lan con lo siguiente:
sed -i 's/interface = br-lan/#interface = br-lan/g' /etc/freeradius2/radiusd.conf
Configurando /etc/freeradius2/clients.conf. Cuando todo funcione puedes editarlo a mano y buscar por ipaddr = 192.168.1.1 si quieres cambiarlo.
Vamos a añadirnos a nosotros mismos como cliente. Un cliente es un router WIFI que tiene permisos para usar este servidor. En nuestro caso como tenemos la IP 192.168.1.1 podemos nos ponemos como clientes nosotros mismos.
sed -i 's/ipaddr = 127.0.0.1/ipaddr = 192.168.1.1/g' /etc/freeradius2/clients.conf
Le pondremos como contraseña para que el servidor sepa que eres un punto de acceso legítimo la password: estrella. (Preocúpate tú más adelante de cambiarla porque es una contraseña muy flojita)
sed -i 's/secret.*= testing123/secret = estrella/g' /etc/freeradius2/clients.conf
Configurando /etc/freeradius2/users. Aquí es donde metemos los usuarios. Vamos a añador el usuario alumno con la contraseña soyuntolete. Apúntala bien. Esta será el usuario y password que te pida al conectarte.
echo 'alumno Cleartext-Password := "soyuntolete"' >> /etc/freeradius2/users
Para meter otro usuario llamado profesor con la clave soy más tolete será pues:
echo 'profesor Cleartext-Password := "soymastolete"' >> /etc/freeradius2/users
Añade los que quieras.
Paso 4. Testeo del servidor.
Conéctate con otro terminal al router.
En uno ejecutarás el servidor en modo testeo para ver si funciona.
radiusd -XXX
En otro terminal conectado simularemos que accedemos autenticándonos al servidor con las herramientas que antes instalamos:
echo "User-Name = alumno, User-Password = soyuntolete" | radclient -x 192.168.1.1 auth estrella
Si todo va bien veras en el terminal donde ejecutas radius en modo test algo parecido a:
Sending Access-Accept of id 6 to 192.168.1.1 port 56626
y en el otro terminal:
rad_recv: Access-Accept packet from host 192.168.1.1 port 1812, id=6, length=20
Paso 5. Arrancar el servidor y dejarlo funcionando aunque reiniciemos el router
Atención:
En el momento de realización de este tutorial, el servidor radius instalado por defecto crea el siguiente archivo /etc/init.d/radiusd
#!/bin/sh /etc/rc.common # Copyright (C) 2006 OpenWrt.org START=50 DEFAULT=/etc/default/radiusd LOG_D=/var/log RUN_D=/var/run PID_F=$RUN_D/radiusd.pid RADACCT_D=/var/db/radacct IPADDR=$(ifconfig br-lan | sed -n 's/.*dr:\(.*\)Bc.*/\1/p') start() { [ -f $DEFAULT ] && . $DEFAULT mkdir -p $LOG_D mkdir -p $RUN_D mkdir -p $RADACCT_D radiusd -i $IPADDR -p 1812,1813 $OPTIONS } stop() { [ -f $PID_F ] && kill $(cat $PID_F) }
Este archivo provoca que el servidor radius no arranque al iniciar el sistema. Si este es tu caso sustituye el archivo por esto:
#!/bin/sh /etc/rc.common # # Copyright (C) 2006-2015 OpenWrt.org # USE_PROCD=1 START=50 NAME=radiusd PROG=/usr/sbin/radiusd DEFAULT=/etc/default/radiusd start_service() { [ -f $DEFAULT ] && . $DEFAULT mkdir -p /var/log mkdir -p /var/run mkdir -p /var/db/radacct procd_open_instance procd_set_param command $PROG [ -n "$IPADDR" ] && procd_append_param command -i $IPADDR [ -n "$OPTIONS" ] && procd_append_param command $OPTIONS procd_set_param respawn procd_close_instance }
Ahora toca activar el servidor al iniciar y arrancarlo.
/etc/init.d/radiusd enable /etc/init.d/radiusd start
Paso 6. Configurar los routers para que se autentique como punto de acceso autorizado.
Tenemos que desinstalar el paquete wpad-mini e instalar wpad en todos los routers que vayamos a poner en el sistema (siempre que estén flasheados con openwrt)
opkg remove wpad-mini opkg install wpad
Activar el wifi y poner la clave estrella para este router:
uci set wireless.radio0.disabled=0 uci set wireless.@wifi-iface[0].network=lan uci set wireless.@wifi-iface[0].mode=ap uci set wireless.@wifi-iface[0].ssid=Openwrt-Radius uci set wireless.@wifi-iface[0].encryption=wpa2 uci set wireless.@wifi-iface[0].auth_server=192.168.1.1 uci set wireless.@wifi-iface[0].auth_port=1812 uci set wireless.@wifi-iface[0].auth_secret=estrella uci commit wifi
Con esto terminamos.
Anexo: Añadir nuevos routers con Openwrt a nuestra red.
Ejercicio realizado:
Router 1- Servidor Radius.
Es el que dará salida a Internet. Tiene la dirección IP 192.168.1.1 y tendrá activo el servidor DHCP.
Hemos configurado los routers con las siguientes direcciones IPs:
Router 2: 192.168.1.10
Router 3: 192.168.1.11
Router 4: 192.168.1.12
En el servidor radius el archivo /etc/freeradius2/clients.conf ha quedado de la siguiente manera:
# Archivo /etc/freeradius2/clients.conf client localhost { ipaddr = 192.168.1.1 secret = estrella require_message_authenticator = no nastype = other } client 192.168.1.10 { ipaddr = 192.168.1.10 secret = estrella require_message_authenticator = no nastype = other } client 192.168.1.11 { ipaddr = 192.168.1.11 secret = estrella require_message_authenticator = no nastype = other } client 192.168.1.12 { ipaddr = 192.168.1.12 secret = estrella require_message_authenticator = no nastype = other }
En los routers Cliente
Tenemos que desinstalar el paquete wpad-mini e instalar wpad en todos los routers que vayamos a poner en el sistema (siempre que estén flasheados con openwrt)
opkg remove wpad-mini opkg install wpad
En todos los routers pondremos lo siguiente (si queremos identificar a cada router por separado cambia el nombre del SSID):
uci set wireless.radio0.disabled=0
uci set wireless.@wifi-iface[0].network=lan
uci set wireless.@wifi-iface[0].mode=ap
uci set wireless.@wifi-iface[0].ssid=Openwrt-Radius
uci set wireless.@wifi-iface[0].encryption=wpa2
uci set wireless.@wifi-iface[0].auth_server=192.168.1.1
uci set wireless.@wifi-iface[0].auth_port=1812
uci set wireless.@wifi-iface[0].auth_secret=estrella
uci commit
wifi