Seguridad · 6 min read · Dec 28, 2025

Configurando SSH Para Usar Freeradius Y WiKID Para Autenticación De Dos Factores

Configurando SSH Para Usar Freeradius Y WiKID Para Autenticación De Dos Factores

Radius es un gran estándar. Es lo suficientemente potente como para lograr mucho y lo suficientemente simple como para ser fácil de manejar. Freeradius es un excelente servidor radius de código abierto que se incluye con muchas variantes de Linux. Está bien documentado y bien soportado. El servidor de Autenticación Fuerte WiKID es un sistema comercial/de código abierto de autenticación de dos factores que utiliza cifrado de clave pública para transmitir PINs y códigos de acceso de un solo uso de manera segura a tokens de software que se ejecutan en Blackberries, teléfonos celulares, Palms, PocketPCs o, utilizando el cliente J2SE, Linux, Macs y PCs con Windows. Puedes pensar en WiKID como certificados, pero sin las complicaciones de listas blancas/negras y más seguro, porque el PIN se valida en el servidor, previniendo ataques de fuerza bruta fuera de línea.

Las empresas que necesitan cumplir con requisitos, como PCI-DSS o HIPAA, pueden necesitar asegurar sus redes con autenticación de dos factores y acceso controlado de manera estricta. Combinar Freeradius y WiKID es una forma altamente rentable de lograr eso.

En este ejemplo, estoy instalando Freeradius en Fedora Core 7 y ejecutando los rpms 3.0RC2 de WiKID en Centos5 (sin embargo, las mismas instrucciones funcionarán para la versión 2.0 de WiKID). Estaremos probando con SSH, sin embargo, la misma configuración debería funcionar para Apache, WebDAV, OpenVPN y cualquier otra aplicación que soporte PAM.

Instalando y Configurando Freeradius

No importa qué variante de Linux estés ejecutando, probablemente haya un paquete para Freeradius. Para Fedora, instalar a través de Yum es simple:

yum install freeradius

Configurar Freeradius es bastante sencillo. Hay muchas opciones, sin embargo. La clave es cambiar solo los elementos mínimos que entiendas. La configuración predeterminada funciona, así que haz pequeños cambios y pruébalos. Modificaremos tres archivos. El archivo /etc/raddb/clients.conf le dice a Freeradius qué clientes aceptar. El archivo proxy.conf le dice a Freeradius que envíe los paquetes de autenticación al servidor WiKID y el archivo radiusd.conf configura el servidor principal de Freeradius.

Primero, edita el archivo /etc/raddb/clients.conf:

vi /etc/raddb/clients.conf

client 127.0.0.1 {
        secret          = shared_secret
        shortname       = localhost
        nastype     = other
}

Todo lo que necesitas cambiar por ahora es el secreto compartido ya que iniciaremos sesión en el servidor Freeradius a través de SSH como nuestra prueba.

A continuación, valida que las solicitudes puedan ser proxy en el archivo radiusd.conf. Este fue el caso en Fedora:

vi /etc/raddb/radiusd.conf

proxy_requests  = yes
$INCLUDE  ${confdir}/proxy.conf

Finalmente, agrega el servidor de Autenticación Fuerte WiKID como un proxy válido en proxy.conf:

vi /etc/raddb/proxy.conf

#  Este reino es para solicitudes que no tienen un reino explícito
#  prefijo o sufijo.  Nombres de usuario como "bob" coincidirán con este.
#
realm NULL {
        type            = radius
        authhost        = WIKIDSERVER_IP:1812
#       accthost        = WIKIDSERVER_IP:1813
        secret          = shared_secret
}

No hace falta decir que cambies WIKIDSERVER_IP y shared_secret por la IP de tu servidor WiKID y el secreto compartido. Probablemente debería ser diferente al secreto compartido utilizado para el cliente.

Para mayor seguridad, deberías restringir la propiedad de estos archivos:

chmod a-rwx,u+r /etc/raddb/proxy.conf

chmod a-rwx,u+r /etc/raddb/clients.conf

Ahora inicia Freeradius:

service radiusd start

Configurando PAM SSH

Primero, necesitas instalar PAM Radius. Hay una excelente documentación sobre esto en la página de inicio de PAM Radius. Dependiendo de tu distribución, también podrías encontrar un binario adecuado. No tuve problemas para compilar esto en Fedora 7:

Edita /etc/pam.d/sshd para permitir la autenticación Radius:

vi /etc/pam.d/sshd

Ve a la segunda línea del archivo, presiona la tecla Insert o la tecla i e inserta esta línea:

auth     sufficient   /lib/security/pam_radius_auth.so 

justo encima de esta línea:

auth     required     pam_stack.so service=system-auth

La etiqueta “sufficient” indica que si la autenticación Radius tiene éxito, no se requerirá ninguna autenticación adicional. Sin embargo, si la autenticación Radius falla, un nombre de usuario y contraseña del sistema funcionarán. Usa “Required” para requerir autenticación fuerte. Debido a que solo estamos editando el archivo sshd, no afectará los inicios de sesión de terminal. PAM puede ser muy diferente en diferentes variantes de Linux. Consulta la documentación específica para tu SO.

Edita o crea tu archivo /etc/raddb/server:

vi /etc/raddb/server

Debajo de la línea:

127.0.0.1   secret        1

Agrega esta línea:

localhost   shared_secret     1

Finalmente, me aseguré de que la autenticación de clave pública estuviera desactivada en /etc/sshd/sshd_config:

PubkeyAuthentication no

Configurando el Servidor WiKID

Ahora, configuraremos el servidor WiKID para procesar las contraseñas de un solo uso de Freeradius. Asumimos que también necesitas configurar un nuevo dominio WiKID. Si ya tienes uno, puedes omitir esta parte. La documentación adicional de instalación de WiKID está disponible aquí.

Inicia sesión en el servidor WiKID y haz clic en la pestaña Dominios.

Haz clic en Crear un Nuevo Dominio.

Ingresa la información solicitada. El código del Servidor de Dominio es la dirección IP del servidor WiKID con ceros a la izquierda. Así que, si la dirección IP externa es 216.239.51.99, el código del servidor WiKID sería 216239051099. Haz clic en “Crear”. (Obviamente, si ya tienes un dominio configurado, puedes omitir este paso.)

Haz clic en la pestaña Clientes de Red y en “Crear un nuevo Cliente de Red”.

Ingresa la información solicitada. Para la dirección IP, usa la dirección IP del servidor Freeradius. Selecciona Radius y el dominio que acabas de crear. Haz clic en “Agregar” cuando hayas terminado.

En la siguiente página, ingresa el secreto compartido que ingresaste en el archivo /etc/raddb/proxy.conf del servidor Freeradius. No es necesario ingresar ninguna información bajo “Atributos de Retorno”.

Importante: Desde la terminal de WiKID o a través de SSH, necesitarás ejecutar “wikidctl stop” y luego “wikidcl start” para cargar la nueva configuración en el servidor Radius de WiKID. (Los usuarios de WiKID 2.0 solo ejecutan “stop” y “start”.)

Probando Freeradius con contraseñas de un solo uso

Descarga e instala un cliente de Token WiKID. Puedes validarte manualmente como usuario desde la interfaz web de WiKIDAdmin. Una vez validado, selecciona el Dominio asociado con el recurso Freeradius:

token1.jpg

Ingresa el PIN:

token2.jpg

Y recibirás el código de acceso de un solo uso. El OTP está limitado por tiempo, pero el tiempo se puede establecer en el servidor WiKID a lo que desees:

token3.jpg

Ahora, ssh a tu caja Freeradius:

ssh user@freeradius_server

Cuando se te pida, ingresa la contraseña de un solo uso de WiKID; debería haberse copiado automáticamente en tu portapapeles, así que ctrl-c o shift-ins deberían funcionar. Deberías obtener acceso. Si no, hay varios registros que consultar. Primero, verifica /var/log/secure en tu servidor Freeradius para ver por qué se rechazó al usuario. Si ves “Todos los servidores RADIUS fallaron en responder.” asegúrate de que radiusd esté ejecutándose en el puerto 1812. Verifica los registros de Freeradius en /var/log/radius/radius.log y el registro de radius de WiKID en /opt/WiKID/log/radius.log en el servidor WiKID.

Una Configuración Alternativa: Freeradius como respaldo

Uno de los beneficios de usar PAM Radius es que los servidores pueden encadenarse en el archivo /etc/raddb/server. Si los servidores principales no responden, el siguiente servidor intentará autenticar al usuario. Para aclarar: si el primer servidor responde con un fallo de autenticación, el usuario es rechazado. Solo si no hay respuesta se verificará el segundo servidor radius. Esta capacidad de respaldo puede ser especialmente útil si tu servidor WiKID se encuentra en un centro de datos remoto. Al configurar PAM para comunicarse directamente con WiKID y retroceder a Freeradius, creas una solución de conmutación por error en caso de una falla de hardware.

Primero, cambia el archivo /etc/raddb/server para apuntar al servidor WiKID primero, luego al servidor Freeradius que se ejecuta en localhost segundo:

# server[:port] shared_secret      timeout (s)
127.0.0.1:1812        shared_secret        1
WIKIDSERVER_IP:1812   shared_secret      3
localhost:1812        shared_secret          2

Tuve que hacer algunos cambios menores para que Freeradius funcionara con /etc/passwd. Primero, tuve que cambiar el grupo de radiusd en /etc/raddb/radiusd.conf a shadow:

user = radiusd
group = shadow

Luego tuve que dar permisos de shadow para /etc/passwd:

chgrp shadow /etc/shadow

chmod g+r /etc/shadow

Ahora, si el servidor WiKID falla por alguna razón, tienes un retroceso automático a tu archivo /etc/passwd.

Conclusión

Radius es un excelente estándar para la autenticación de usuarios remotos. Combinar Freeradius con WiKID Strong Authentication crea una solución poderosa, flexible y segura.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.