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.conf o 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.