Instalación de Servidor RADIUS con FreeRADIUS
FreeRADIUS es el servidor RADIUS de código abierto más utilizado en el mundo, empleado para autenticación de redes WiFi empresariales, VPN y acceso por switch con 802.1X. Soporta múltiples backends de autenticación incluyendo LDAP, Active Directory y bases de datos SQL, así como métodos EAP modernos. Esta guía cubre la instalación de FreeRADIUS en Linux, configuración de clientes, métodos EAP y asignación de VLANs.
Requisitos Previos
- Ubuntu 22.04/Debian 12 o CentOS 9/Rocky Linux 9
- Mínimo 1 GB de RAM
- Acceso root al servidor
- Si se usa LDAP/AD: acceso al directorio con cuenta de servicio
- Certificado TLS para métodos EAP (PEAP, EAP-TLS)
Instalación de FreeRADIUS
# Ubuntu/Debian
apt-get update
apt-get install -y freeradius freeradius-utils freeradius-ldap
# CentOS/Rocky Linux
dnf install -y freeradius freeradius-utils freeradius-ldap
# Verificar la versión instalada
freeradius -v
# Habilitar e iniciar el servicio
systemctl enable --now freeradius
# Verificar el estado
systemctl status freeradius
La estructura de configuración de FreeRADIUS se encuentra en /etc/freeradius/3.0/ (Debian/Ubuntu) o /etc/raddb/ (CentOS/Rocky):
# Directorio principal de configuración
ls /etc/freeradius/3.0/
# radiusd.conf - Configuración global
# clients.conf - Clientes RADIUS (NAS)
# users - Usuarios locales
# sites-enabled/ - Sitios/virtual servers activos
# mods-enabled/ - Módulos habilitados
Configuración de Clientes RADIUS
Los clientes RADIUS (también llamados NAS - Network Access Servers) son los dispositivos que envían solicitudes de autenticación al servidor: puntos de acceso WiFi, switches, concentradores VPN.
# Editar el archivo de clientes
cat >> /etc/freeradius/3.0/clients.conf << 'EOF'
# Punto de acceso WiFi en oficina principal
client wifi-ap-oficina {
ipaddr = 192.168.1.10
secret = secreto_compartido_fuerte_aqui
shortname = wifi-ap-01
nas_type = other
# VLAN de gestión del dispositivo
}
# Subred de switches de acceso
client switches-acceso {
ipaddr = 192.168.2.0/24
secret = secreto_para_switches
shortname = switches
}
# Concentrador VPN
client vpn-gateway {
ipaddr = 10.0.0.1
secret = secreto_vpn_gateway
shortname = vpn
}
EOF
Gestión de Usuarios
Para usuarios locales sin LDAP, usa el archivo users:
# Editar el archivo de usuarios locales
cat >> /etc/freeradius/3.0/users << 'EOF'
# Formato: usuario Atributo-Auth += "password"
# Usuario simple con password en texto claro (solo para pruebas)
testuser Cleartext-Password := "password123"
# Usuario con hash MD5
# adminuser MD5-Password := "5f4dcc3b5aa765d61d8327deb882cf99"
# Usuario con atributos RADIUS adicionales (VLAN 20)
vlan-user Cleartext-Password := "mipassword",
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = "20"
EOF
Genera hashes de contraseña de forma segura:
# Generar hash MD5 para un usuario
echo -n "password123" | md5sum
# Generar hash SHA1
echo -n "password123" | sha1sum
# Usar la utilidad de FreeRADIUS para probar autenticación local
radtest testuser password123 localhost 0 testing123
# El último parámetro es el secreto del cliente "localhost" en clients.conf
Configuración de Métodos EAP
EAP es necesario para redes WiFi empresariales (WPA2-Enterprise / WPA3-Enterprise):
# Habilitar el módulo EAP si no está activo
ls /etc/freeradius/3.0/mods-enabled/ | grep eap
# Si no aparece:
ln -s /etc/freeradius/3.0/mods-available/eap \
/etc/freeradius/3.0/mods-enabled/eap
Genera certificados para EAP-TLS y PEAP:
# Ir al directorio de certificados de FreeRADIUS
cd /etc/freeradius/3.0/certs/
# Editar ca.cnf con los datos de tu organización
sed -i 's/commonName.*/commonName = RADIUS CA/' ca.cnf
sed -i 's/emailAddress.*/emailAddress = [email protected]/' ca.cnf
# Generar la CA, certificado de servidor y DH params
make
# O usando el script bootstrap incluido
./bootstrap
Configura el módulo EAP en /etc/freeradius/3.0/mods-available/eap:
# Sección importante del archivo eap (editar con cuidado)
# eap {
# default_eap_type = peap # PEAP es el más usado en WiFi empresarial
# timer_expire = 60
#
# tls-config tls-common {
# private_key_file = ${certdir}/server.pem
# certificate_file = ${certdir}/server.pem
# CA_file = ${certdir}/ca.pem
# dh_file = ${certdir}/dh
# cipher_list = "DEFAULT"
# tls_min_version = "1.2"
# }
#
# peap {
# tls = tls-common
# default_eap_type = mschapv2
# }
# }
Integración con LDAP
# Habilitar el módulo LDAP
ln -s /etc/freeradius/3.0/mods-available/ldap \
/etc/freeradius/3.0/mods-enabled/ldap
# Configurar el módulo LDAP
cat > /etc/freeradius/3.0/mods-available/ldap << 'EOF'
ldap {
server = "ldap.tudominio.com"
port = 389
# Cuenta de servicio para búsquedas
identity = "cn=freeradius,ou=service-accounts,dc=tudominio,dc=com"
password = password_cuenta_servicio
# Base de búsqueda para usuarios
base_dn = "ou=users,dc=tudominio,dc=com"
user {
base_dn = "${..base_dn}"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
sasl {
}
}
group {
base_dn = "ou=groups,dc=tudominio,dc=com"
filter = "(objectClass=posixGroup)"
membership_attribute = "memberUid"
}
# Opciones de TLS
tls {
require_cert = "allow"
}
options {
res_timeout = 10
srv_timelimit = 3
net_timeout = 1
idle = 60
probes = 3
interval = 3
}
pool {
start = 5
min = 3
max = 10
spare = 3
uses = 0
retry_delay = 30
lifetime = 0
idle_timeout = 60
}
}
EOF
Modifica el sitio default para usar LDAP en la autenticación:
# En /etc/freeradius/3.0/sites-available/default
# Dentro de la sección "authorize", añade LDAP para lookup de usuarios:
# ldap
# if (ok || updated) {
# update control {
# &Auth-Type := LDAP
# }
# }
Asignación de VLANs
FreeRADIUS puede asignar VLANs dinámicamente basándose en grupo o usuario:
# Añadir atributos de VLAN al perfil de usuario en LDAP o en el archivo users
# En el archivo users (para asignación estática):
usuario-vlan20 Cleartext-Password := "password",
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = "20"
# Para asignación por grupo, usar un archivo de mapeado en /etc/freeradius/3.0/
# o scripts Perl/Python en la sección "post-auth" del virtual server
Autenticación para VPN
Para OpenVPN o IPsec con autenticación RADIUS:
# Probar que la autenticación RADIUS funciona para un usuario VPN
radtest vpn-user password_vpn 127.0.0.1 0 secreto_compartido
# Verificar los atributos devueltos en la respuesta
# Access-Accept significa autenticación exitosa
# Access-Reject significa fallo
# Para StrongSwan/IPsec, en /etc/strongswan/strongswan.conf:
# charon {
# plugins {
# eap-radius {
# servers {
# local {
# address = 127.0.0.1
# secret = secreto_compartido
# }
# }
# }
# }
# }
Solución de Problemas
# Parar el servicio y lanzar en modo debug (muestra todo el flujo de autenticación)
systemctl stop freeradius
freeradius -X
# En otra terminal, enviar una solicitud de prueba
radtest usuario password 127.0.0.1 0 testing123
# Probar con atributos EAP (requiere eapol_test de wpa_supplicant)
# apt-get install -y eapol-test
cat > /tmp/test-peap.conf << 'EOF'
network={
key_mgmt=WPA-EAP
eap=PEAP
identity="usuario"
password="password"
phase2="auth=MSCHAPV2"
}
EOF
eapol_test -c /tmp/test-peap.conf -a 127.0.0.1 -p 1812 -s testing123
# Ver logs del servicio en producción
journalctl -u freeradius -f
# Comprobar configuración sin iniciar el servicio
freeradius -C
# Verificar estadísticas de accounting
radwho -N # Sesiones activas
Problemas comunes:
- "Client not found": El NAS no está en
clients.confo la IP no coincide - "Auth-Type not set": El módulo de autenticación no está configurado en
authorize - Errores de certificado EAP: Regenerar certificados con
make clean && make
Conclusión
FreeRADIUS es una solución madura y extremadamente flexible para autenticación de red centralizada, capaz de manejar desde pequeñas redes WiFi hasta infraestructuras empresariales con miles de usuarios. La integración con LDAP/AD y el soporte para métodos EAP modernos lo convierten en la base ideal para implementar 802.1X en redes cableadas e inalámbricas con asignación dinámica de VLANs.


