9.6. Servidor RADIUS¶
RADIUS es un protocolo de autenticación y autorización para acceso a la red, muy utilizado en redes wifi, que utiliza para el establecimiento de las conexiones el puerto 1812/UDP. Permite que cada solicitante acceda a la red utilizando una pareja de credenciales (usuario/contraseña) propias.
En el caso que queremos resolver, tenemos tres agentes:
Una servidor Debian que actúa como servidor RADIUS, cuya implementación más extendida de código abierto es Freeradius, La instalación, como es habitual cuando existe paquete, es sumamente sencilla:
# apt install freeradius
En este servidor deberán almacenarse las credenciales de todos aquellos a los que se permite el acceso a la red.
El solicitante, que es el dispositivo inalámbrico que pide acceso a la red. Deberá disponer de unas credenciales válidas para poder acceder.
Un punto de acceso que actúa como autenticador o NAS[1] (servidor de acceso a la red) u que es el que permite acceder a solicitante consultando con el servidor RADIUS sus credenciales. Actúa, pues. como intermediario entre el solicitante y el servidor RADIUS.
Para establecer un canal seguro de comunicación sobre el que discurra el proceso de autenticación y autorización se utiliza EAP, que más que un protocolo es un framework para crear protocolos concretos. Los más comunes son EAP/TLS, que requiere autenticación con certificados tanto del lado del servidor como del cliente, y PEAP, que sólo requiere certificado en la parte del servidor.
Ver también
Para consultar los principales protocolos creados con EAP puede consultar este artículo de Intel.
9.6.1. Configuración básica¶
Advertencia
Antes de empezar la configuración es indispensable cerciorarse de
que el nombre de la máquina (el que se obtiene con hostname)
es resoluble (p.e. porque se ha incluido en /etc/hosts
).
Toda la configuración se encuentra en el directorio /etc/freeradius/3.0/
y es en él donde tenemos que empezarla. El archivo clients.conf
contiene
los controladores de acceso a los que se permite comunicar con el servidor
para retransmitir las credenciales. Ya tiene definido uno:
client localhost {
# [...]
ipaddr = 127.0.0.1
# [...]
secret = testing123
}
que nos permitirá hacer comprobaciones más adelante. Lo interesante es que nos sirve de modelo para definir nuevos autenticadores: basta con indicar qué dirección IP tiene y establecer una palabra secreta arbitraria que habrá luego que trasladar a la configuración de éste:
client linksys {
ipaddr = 192.168.0.10
secret = clavesecreta
}
También es posible indicar una red completa:
client pas {
ipaddr = 192.168.0.0/24
secret = clavesecreta
}
La segunda parte de la configuración consiste en añadir las credenciales que
permitirán el acceso a los solicitantes. Es posible enumerarlas en el archivo
users
simplemente añadiendo una línea por credencial:
usuario1 Cleartext-Password := "contraseña1"
usuario2 Cleartext-Password := "contraseña2"
pero para evitar el engorro de alterar el archivo, recurriremos a utilizar otro backend. El más sencillo es una base de datos SQLite, puesto que es probable que nuestro servidor mínimo ya tenga soporte para ellas[2]. esta opción requiere habilitar el módulo:
# cd /etc/freeradius/3.0/mods-enabled
# ln -s ../mods-available/sql
y debe editarse este archivo para hacer algunos cambios:
sql {
dialect = "sqlite"
#driver = "rlm_sql_null"
driver = "rlm_sql_${dialect}"
sqlite {
filename = "/var/cache/radius/users-sqlite.db"
# [...]
}
# [...]
}
Editado el archivo, es necesario preparar el directorio que albergará la base de datos:
# mkdir -m750 /var/cache/radius
# chown freerad:freerad /var/cache/radius
pero no necesitamos crearla, porque el servidor lo hará por nosotros cuando lo reiniciemos:
# invoke-rc.d freeradius restart
aunque, obviamente, no habrá credenciales almacenadas. Para ello debemos insertar registros en la tabla radcheck. Por ejemplo, esto:
# echo "INSERT INTO radcheck VALUES (NULL, 'cliente', 'Cleartext-Password', ':=', 'nolasabes');" \
| sqlite3 /var/cache/radius/users-sqlite.db
crea una credenciales usuario/nolasabes. Para comprobar que ha ido bien la configuración basta con ejecutar:
# radtest cliente nolasabes localhost 10 testing123
Sent Access-Request Id 39 from 0.0.0.0:51538 to 127.0.0.1:1812 length 82
User-Name = "cliente"
User-Password = "nolasabes"
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "nolasabes"
Received Access-Accept Id 39 from 127.0.0.1:1812 to 127.0.0.1:51538 length 20
La orden exige pasarle las credenciales (los dos primeros argumentos), el servidor (localhost porque estamos haciendo una consulta local), un número de puerto (que debe ser cualquier número entero positivo incluido el cero) y, por último, la palabra secreta para conectar al servidor (y que ya vimos que de forma predeterminada es testing123 para conexión local). Como las credenciales son válidas (las acabamos de introducir en la base de datos), el cliente debe recibir un Access-Accept.
Nota
Para depurar el funcionamiento, puede ejecutarse directamente el servicio con:
# freeradius -X
9.6.2. Autenticadores¶
Para que el punto de acceso actúe como autenticador de nuestro servidores, necesitamos configurar la seguridad de su red wireless del siguiente modo:
Modo |
WPA2-Enterprise |
Servidor radius |
192.168.0.1 |
Puerto |
1812 |
secreto |
clavesecreta |
donde hemos supuesto que nuestro servidor ocupa la IP 192.168.0.1.
9.6.3. Configuración adicional¶
Aparte de la configuración básica, pueden interesarnos otras funcionalidades.
9.6.3.1. Conexiones simultáneas¶
9.6.3.2. LDAP¶
9.6.3.3. PAM¶
Advertencia
La configuración propuesta es incompatible con cualquier otro backend para almacenar usuarios, por lo que, si usamos esta autenticación, deberemos renunciar a cualquier otro backend.
La autenticación con PAM, que no está recomendada por los desarrolladores exige:
Que el usuario freeradius pertenezca al grupo shadow, lo cual ya previene la instalación del paquete.
Que se incluya en
users
la línea:DEFAULT Auth-Type=Pam
Que habilitemos el módulo de modo semejante a como hicimos con sql:
# cd /etc/freeradius/3.0/mods-enabled # ln -s ../mods-available/pam
Que descomentemos en
sites-enabled/default
ysites-enabled/inner-tunnel
la línea referente a PAM.
Para comprobar la autenticación freeradius usa el servicio de PAM radiusd que ya viene preparado en el paquete. Para cualquier modificación del comportamiento predefinido, deberemos tener conocimientos de cómo funciona PAM.
Notas al pie