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

El objetivo es Instalar freeradius3 dentro de un router con OpenWrt para que pueda usarse como servicio de autenticación para múltiples usuarios. Este post es una actualización de otra entrada anterior del blog conde se hacía con freeradius2.

Necesitamos un router con Openwrt recién flasheado y con acceso a Internet. En nuestro caso hemos utilizado un router Huawei EchoLife HG556a (version C) con firmware Openwrt versión 19.07.5.

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.

Atención: En este caso la instalación la haremos en un router con dirección IP 192.168.1.1. Deberás cambiarla por la dirección IP de tu router.

Vamos a instalar los paquetes de un tirón (el paquete nano al finalizar se puede desinstalar porque lo usamos como editor para configuración):

opkg install freeradius3 freeradius3-common freeradius3-default freeradius3-mod-eap freeradius3-mod-eap-peap freeradius3-mod-eap-mschapv2 freeradius3-mod-eap-tls freeradius3-mod-preprocess freeradius3-mod-files freeradius3-mod-radutmp freeradius3-mod-expiration freeradius3-mod-logintime freeradius3-mod-attr-filter freeradius3-mod-passwd freeradius3-utils nano

Paso 2. Configuración

2.1. Configurando /etc/freeradius3/clients.conf.

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 nos ponemos como clientes nosotros mismos. Primero renombraremos el archivo clients.conf por clients.conf.ant y luego con nano lo abrimos

mv /etc/freeradius3/clients.conf /etc/freeradius3/clients.conf.ant
nano /etc/freeradius3/clients.conf

Y añadimos lo siguiente:

client este_router {
        ipaddr = 192.168.1.1
        secret = estrella
        require_message_authenticator = no
        nastype     = other
}

Le hemos puesto 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). Guardamos con las teclas Ctrl+S y a continuación con Ctrl+X.

2.2. Configurando usuarios autorizados para conectarse a los routers Wifi.

Abrimos el fichero donde se añaden los usuarios:

nano /etc/freeradius3/mods-config/files/authorize

Y añadimos al principio los usuarios. En nuestro serán alumno con clave soyuntolete, y profesor con clave soymastolete.

alumno    Cleartext-Password := "soyuntolete"
       Reply-Message := "Hello, %{User-Name}"

profesor    Cleartext-Password := "soymastolete"
       Reply-Message := "Hello, %{User-Name}"

Guardamos el archivo pulsando Ctrl+S dentro del nano. Y salimos con Ctrl+X.

Esta es la forma más simple de añadir usuarios, pero probablemente la más compleja de mantener en caso de ser muchos usuarios. Existen otras alternativas para que los usuarios sean guardados en bases de datos por ejemplo, en freeradius se pueden implementar varias.

Paso 3. Testeo del servidor.

Necesitaremos dos conexiones por ssh al router. En una ejecutaremos el servidor en modo testeo para ver los diferentes eventos que se producen.

LD_LIBRARY_PATH=/usr/lib/freeradius3 radiusd -XXX

Nota: En caso de que se produzca un error, puede que ya tengas corriendo el servidor ocupando el puerto necesario para que arranque la orden anterior. En ese caso lo que tendrías que hacer es parar el servicio con la orden: /etc/init.d/radiusd stop si aún así persiste el error, haz mata el proceso radiusd con la orden killall radiusd

En la otra conexión por ssh, simularemos la conexión de un usuario contra el servidor:

echo "User-Name = alumno, User-Password = soyuntolete" | radclient -x 192.168.1.1 auth estrella

Nota: En caso de error ejecutalo de la siguiente manera:

echo "User-Name = alumno, User-Password = soyuntolete" | LD_LIBRARY_PATH=/usr/lib/freeradius3 radclient -x 192.168.1.1 auth estrella

Si todo ha ido bien, recibiremos un mensaje tal como:

Sent Access-Request Id 20 from 0.0.0.0:38008 to 192.168.1.1:1812 length 46
	User-Name = "alumno"
	User-Password = "soyuntolete"
	Cleartext-Password = "soyuntolete"
Received Access-Accept Id 20 from 192.168.1.1:1812 to 192.168.24.3:38008 length 35
	Reply-Message = "Hello, alumno"

Si vemos que funciona, paramos el testeo del servidor e iniciamos el servicio con el siguiente comando:

/etc/init.d/radiusd start

Recuerda que cada vez que añadas usuarios o hagas modificaciones en el servidor tendrás que reiniciar el servicio.

Paso 4. Conseguir que el router Wifi se verifique en Openwrt.

Habíamos dicho que usaremos el mismo router donde ejecutabamos el servidor como router Wifi para que accedan los usuarios. Ya al principio le configuramos el router como cliente del servidor Radius, ahora veremos como integrarlo.

Necesitamos conseguir que el router permita WPA-enterprise. Normalmente no viene en el paquete básico de de Openwrt por lo que tendremos que desinstalar el paquete wpad-basic e instalar el paquete wpad, Por ello haremos lo siguiente en el router. Como en algunos routers lo que trae es wpad-basic y en otros wpad-mini, matamos dos pájaros de un tiro poniendo los dos. Si da error al desisntalar alguno de ellos despreocúpate.

opkg remove wpad-basic wpad-mini
opkg update
opkg install wpad

Luego haremos que el router active la red Wifi y se utentique en el servidor con los siguientes comandos. La red wifi se llamará Openwrt-Radius, ponle tú el que quieras. Dichos comandos se guardarán en el archivo /etc/config/wireless del 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

A continuación busca con tu móvil la red Openwrt-Radius y conéctate a ella, verás como te pide usuario y contraseña. Accede con alumno y password soy un tolete.

Si quieres añadir nuevos routers Openwrt al servidor solo tienes que repetir este paso 4 en cada uno de ellos y añadir una entrada más en el paso 2.1 dentro del archivo /etc/freeradius3/clients.conf. La nueva entrada ha de tener la dirección ip del nuevo router autorizado. No tienes que instalar el servidor en los otros routers.

Para Más información, deberás consultar la página de Openwrt: https://openwrt.org/docs/guide-user/network/wifi/freeradius.

Otras consideraciones

En este tutorial solo pretendemos que el servidor radius funcione, no nos metemos con configuraciones más seguras.

Ten cuidado con los logs generados por el sistema. Por defecto se almacenan en /var/log/radius.log. Puede llegar el momento que se te llene la memoria del dispositivo. Para configurar otra ubicación o anularla podrás hacerlo en el archivo /etc/freeradius3/radiusd.conf. Donde dice: logdir = /var/log

Deja una respuesta

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