Instalación de un Servidor Radius (Freeradius2) en Openwrt

Raduis

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.

Raduis

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *