Configuración básica de Freeradius con soporte de LDAP.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2007 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de RADIUS.

RADIUS (Remote Authentication Dial-In User Service) es un protocolo de autenticación, autorización y manejo de cuentas de usuario originalmente desarrollado por Livingston Enterprises y publicado en 1997 como los RFC 2058 y 2059. Es utilizado para administrar el acceso remoto y la movilidad IP, como ocurre en servicios de acceso por modem, DSL, servicios inalámbricos 802.11 o servicios de VoIP (Voice over IP o Voz sobre IP). Este protocolo trabaja a través del puerto 1812 por UDP.

La autenticación gestionada por este protocolo se realiza a través del ingreso de un nombre de usuario y una clave de acceso. Esta información es procesada por un dispositivo NAS (Network Access Server) a través de PPP (Point-to-Point Protocol o Protocolo Punto-a-Punto) siendo posteriormente validada por un servidor RADIUS a través del protocolo correspondiente valiéndose de diversos esquemas de autenticación, como PAP (Password Authentication Protocol o Protocolo de Autenticación de Clave de acceso), CHAP (Challenge-Handshake Authentication Protocol) o EAP (Extensible Authentication Protocol) y permitiendo el acceso al sistema.

URL: http://tools.ietf.org/html/rfc2058 y http://tools.ietf.org/html/rfc2059

Acerca de Freeradius.

Freeradius, proyecto iniciado en 1999 por Alan DeKok y Miquel van Smoorenburg (quien colaboró anteriormente en el desarrollo de Cistron RADIUS), es una alternativa libre hacia otros servidores RADIUS, siendo uno de los más completos y versátiles gracias a la variedad de módulos que le componenen. Puede operar tanto en sistemas con recursos limitados así como sistemas atendiendo millones de usuarios.

Freeradius inició como un proyecto de servidor RADIUS que permitiera una mayor colaboración de la comunidad y que pudiera cubrir las necesidades que otros servidores RADIUS no podían. Actualmente incluye soporte para LDAP, SQL y otras bases de datos, así como EAP, EAP-TTLS y PEAP. Actualmente incluye soporte para todos los protocolos comunes de autenticación y bases de datos.

URL: http://www.freeradius.org/

Equipamiento lógico necesario.

Instalación a través de yum.

Si se utiliza de CentOS 4 o White Box Enterprise Linux 4, solo se necesita utilizar lo siguiente:

yum -y install freeradius

Instalación a través de Up2date

Si se utiliza de Red Hat™ Enterprise Linux 4, solo se necesita utilizar lo siguiente:

up2date -i freeradius 

Procedimientos.

Editar /etc/raddb/radiusd.conf y habilitar la línea que activa el módulo de LDAP:

Authorize {

        #
        #  The ldap module will set Auth-Type to LDAP if it has not
        #  already been set
        ldap

En este mismo archivo se configura el directorio LDAP a utilizar:

ldap {
                server = "tu-servidor-ldap"
                # identity = "cn=admin,o=My Org,c=UA"
                # password = mypass
                basedn = "ou=People,dc=dominio,dc=com"
                password_attribute = "userPassword"
                filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"

Si no se va a utilizar el acceso Dial-Up, se puede desactivar la función o de otro modo no permitirá autenticar o realizar las pruebas de verificación.

# access_attr = "dialupAccess"

Se añade el método de autenticación LDAP en el archivo /etc/raddb/users del siguiente modo:

#
# First setup all accounts to be checked against the UNIX /etc/passwd.
# (Unless a password was already given earlier in this file).
#
DEFAULT Auth-Type = System
    Fall-Through = 1
#
# Defaults for LDAP
#
DEFAULT Auth-Type := LDAP
    Fall-Through = 1

Finalmente se define en el archivo /etc/raddb/clients.conf a la red o redes que se permitirá autenticar:

client 192.168.0.0/24 {
    secret          = clave-acceso-red
    shortname       = Nombre de la red privada
}

Agregar el servicio al arranque del sistema.

Para hacer que el servicio de RADIUS esté activo con el siguiente inicio del sistema, en todos los niveles de ejecución (2, 3, 4 y 5) se utiliza lo siguiente

chkconfig radiusd on

Iniciar, detener y reiniciar el servicio.

Para ejecutar por primera vez el servicio, utilice:

service radiusd start

Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:

service radiusd restart

Para detener el servicio, utilice:

service radiusd stop

Modificaciones necesarias en el muro cortafuegos.

Si se utiliza un cortafuegos con políticas estrictas, como por ejemplo Shorewall, es necesario abrir el puerto 1812 por UDP.

Las reglas para el archivo /etc/shorewall/rules de Shorewall correspondería a algo similar a lo siguiente:

#ACTION SOURCE  DEST    PROTO   DEST            SOURCE
#                               PORT            PORT(S)1
ACCEPT  net     fw      udp     1812
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Comprobaciones.

Freeradius incluye una herramienta para realizar pruebas. A fin de verificar que funcione correctamente la autenticación, se utiliza el mandato radtest del siguiente modo:

radtest usuario-ldap "clave-de-acceso-en-ldap" 
192.168.0.1 2 clave-acceso-red

Lo anterior debe devolver algo como lo siguiente:

Sending Access-Request of id 191 to 192.168.0.1:1812
         User-Name = "usuario-ldap"
         User-Password = "clave-de-acceso-en-ldap"
         NAS-IP-Address = nombre-servidor
         NAS-Port = 2
rad_recv: Access-Accept packet from host 192.168.0.1:1812, id=191, length=20