Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PFC 2446 Acero PDF
PFC 2446 Acero PDF
Ingeniería de Telecomunicación
Autor:
José Mª Acero Vázquez
Tutor:
Germán Madinabeitia Luque
Profesor colaborador
iii
Proyecto Fin de Carrera: Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2018
v
A mi familia, sin su apoyo no
hubiese podido llegar hasta aquí
A mis maestros por hacer
realidad mi formación, y en
especial a Germán, por su
paciencia y ayuda en la
elaboración de este PFC
vii
Agradecimientos
Quiero agradecer a todas las personas que me han ayudado de un modo u otro a la elaboración de este
proyecto y también a que pueda llevarse a cabo. Agradezco a mi madre y hermanos su insistencia en que lo
terminase, a mi mujer insistiendo también y haciéndome ver cada día lo importante de llevarlo a buen puerto y
por supuesto a mi hija, cuya sonrisa me animaba cada día a continuar.
También quiero agradecer a la Escuela de Ingenieros de Sevilla en su inmensa labor de educarnos para el
futuro, haciendo mención especial a Germán, cuya paciencia y ayuda agradezco enormemente.
Y no me quiero olvidar de todo el personal de la subdirección de sistemas de información del Servicio
Extremeño de Salud, y en especial a mis compañeros de CDATEX que me han apoyado y ayudado en todo
momento.
A todos: ¡GRACIAS!
ix
Resumen
Vivimos en un mundo donde la autenticación de usuarios juega un papel muy importante debido a la alta
conectividad de la que disponemos y al elevado número de servicios a los que accedemos. Por ello es
importante contar con sistemas que permitan una autenticación sencilla y fiable y que se pueda adaptar a todas
las casuísticas posibles.
Este es el objetivo de este proyecto fin de carrera, responder a una necesidad que surge en un momento dado y
hacerlo cumpliendo todos los requisitos necesarios y de la forma más sencilla y eficiente posible.
Veremos cómo implantar desde cero un sistema de autenticación basado en RADIUS y Kerberos, cómo
configurarlo y finalmente cómo ejecutarlo en un entorno real.
xi
Abstract
We live in a world where user authentication plays a very important role due to the high connectivity that we
have and the high number of services we access. It is therefore important to have systems that allow simple
and reliable authentication and that can be adapted to all possible cases.
This is the objective of this final year project, to respond to a need that arises in a given moment and to do it
fulfilling all the requirements and in the most simple and efficient way possible.
We will see how to implement an authentication system based on RADIUS and Kerberos from scratch, how to
setup and execute it in a real environment.
xiii
Índice
Agradecimientos ...........................................................................................................................................ix
Resumen .......................................................................................................................................................xi
Abstract....................................................................................................................................................... xiii
Índice .......................................................................................................................................................... xiv
Índice de Tablas.......................................................................................................................................... xvii
Índice de Figuras ....................................................................................................................................... xviii
1 Introducción........................................................................................................................................... 1
2 Descripción del protocolo RADIUS ......................................................................................................... 3
2.1. Introducción...................................................................................................................................................... 3
2.1.1 Autenticación ............................................................................................................................................. 4
2.1.2 Autorización ............................................................................................................................................... 4
2.1.3 Registro ....................................................................................................................................................... 4
2.2 Propiedades del servidor RADIUS..................................................................................................................... 4
2.3 Funcionamiento del servidor RADIUS .............................................................................................................. 4
2.3.1 Formato de mensaje.................................................................................................................................. 5
2.3.2 Tipos de paquetes RADIUS ........................................................................................................................ 6
2.3.3 Clave compartida (shared-secret) ............................................................................................................ 7
2.3.4 Parejas atributo-valor ................................................................................................................................ 7
2.3.5 Diccionarios ................................................................................................................................................ 9
2.4 Métodos de autenticación................................................................................................................................ 9
2.4.1 PAP .............................................................................................................................................................. 9
2.4.2 CHAP ......................................................................................................................................................... 10
2.4.3 Extensible Authentication Protocol (EAP) .............................................................................................. 10
2.4.4 Kerberos ................................................................................................................................................... 11
2.4.5 LDAP .......................................................................................................................................................... 11
2.5 Realms.............................................................................................................................................................. 11
2.6 Hints ................................................................................................................................................................. 12
2.7 Alta disponibilidad........................................................................................................................................... 12
3 Kerberos .............................................................................................................................................. 13
3.1 Introducción ..................................................................................................................................................... 13
3.2 Descripción del protocolo Kerberos ............................................................................................................... 14
3.2.1 Pre-authentication. Ticket Granting Ticket ............................................................................................14
3.2.2 Uso de servicios. Ticket Granting Service ...............................................................................................15
4 Directorio Activo de Microsoft ............................................................................................................. 18
4.1 Introducción .....................................................................................................................................................18
4.2 Algunas definiciones........................................................................................................................................19
4.3 Cómo funciona.................................................................................................................................................20
5 Funcionamiento del sistema auto vlan y autenticación de red 802.1x ................................................. 22
5.1 Switch 3Com ....................................................................................................................................................22
5.2 Switch Cisco......................................................................................................................................................23
5.3 802.1X ..............................................................................................................................................................23
6 Necesidades del SES............................................................................................................................. 25
6.1Tipos de conexiones .........................................................................................................................................25
6.1.1 Conexiones desde la red GPRS/UMTS ....................................................................................................25
6.1.2 Conexiones desde los switches y otro equipamiento de red ...............................................................25
6.1.3 Autenticación de red usando 802.1X......................................................................................................26
6.1.4 Conexiones desde equipamiento inalámbrico ......................................................................................26
6.2 Tipos de usuarios .............................................................................................................................................28
6.2.1 Usuarios directorio activo........................................................................................................................28
6.2.2 Usuarios ocasionales ................................................................................................................................28
6.2.3 Usuarios de switches ...............................................................................................................................28
6.3 Otros requisitos................................................................................................................................................28
7 Solución adoptada: Freeradius y Kerberos........................................................................................... 29
7.1 Elementos de la solución .................................................................................................................................29
7.1.1 RADIUS ......................................................................................................................................................29
7.1.2 Kerberos ....................................................................................................................................................30
7.2 Interoperabilidad de la solución .....................................................................................................................30
7.3 Ventajas/inconvenientes ................................................................................................................................30
7.4 Instalación ........................................................................................................................................................31
7.4.1 Freeradius .................................................................................................................................................31
7.4.2 Kerberos ....................................................................................................................................................32
7.5 Configuración...................................................................................................................................................32
7.5.1 Freeradius .................................................................................................................................................32
7.5.2 Kerberos ....................................................................................................................................................37
7.5.3 Integración Freeradius/Kerberos ............................................................................................................38
7.5.4 Integración Kerberos/Directorio Activo .................................................................................................39
7.6 Ejecución y comprobación del funcionamiento de los servidores ................................................................40
7.6.1 Freeradius .................................................................................................................................................40
7.6.2 Kerberos ....................................................................................................................................................41
7.6.3 Comprobación integración Freeradius/Kerberos ..................................................................................42
7.6.4 Comprobación integración Kerberos/Directorio Activo .......................................................................42
7.7 Alta disponibilidad ...........................................................................................................................................43
8 Seguridad............................................................................................................................................. 45
8.1 RADIUS .............................................................................................................................................................45
8.2 Kerberos ...........................................................................................................................................................46
9 Configuración y comprobación del resto de equipos ........................................................................... 49
9.1Configuración de un switch .............................................................................................................................49
9.1.1 3Com 4400................................................................................................................................................49
9.2 Cisco 2960 ....................................................................................................................................................52
9.2 Configuración controladora inalámbrica.......................................................................................................54
9.3 Configuración clientes 802.1X ........................................................................................................................56
9.4 Configuración conexión inalámbrica..............................................................................................................57
xv
9.5 Comprobación acceso administración switches ........................................................................................... 59
9.5.1 3Com......................................................................................................................................................... 59
9.5.2 Cisco .......................................................................................................................................................... 59
9.6 Comprobación autenticación 802.1X ............................................................................................................ 60
9.6.1 3Com......................................................................................................................................................... 60
9.6.2 Cisco .......................................................................................................................................................... 62
9.7 Comprobación acceso inalámbrico ................................................................................................................ 62
BIBLIOGRAFÍA ............................................................................................................................................. 67
Anexo. Ficheros de configuración................................................................................................................ 68
A.1 Freeradius ........................................................................................................................................................ 68
A.1.1 clients.conf ............................................................................................................................................... 68
A.1.2 users ......................................................................................................................................................... 75
A.1.3 ./mods-enabled/eap ............................................................................................................................... 80
A.1.4 radiusd.conf ........................................................................................................................................... 102
A.1.5 ./sites-enabled/default ......................................................................................................................... 120
A.2 Kerberos......................................................................................................................................................... 142
A.2.1 /etc/krb5.conf ........................................................................................................................................ 142
A.2.2 /etc/krb5kdc/kdc.conf .......................................................................................................................... 143
ÍNDICE DE TABLAS
xvii
ÍNDICE DE FIGURAS
E
ste proyecto ha sido realizado para el Servicio Extremeño de Salud (en adelante SES), el organismo
público autónomo encargado de gestionar el sistema de salud público extremeño.
La idea de la instalación de un servidor RADIUS surgió a la hora de querer implantar un servicio de datos
móvil. Para ello era necesario que los usuarios que usaban el servicio se autenticasen previamente a la entrada
en la red, puesto que así lo requería el operador de telefonía móvil. Éste daba la posibilidad de hacer ellos
mismos la autenticación o bien delegarla en nosotros. Por comodidad y rapidez en la gestión de los usuarios de
este servicio se optó por la segunda opción. Ello significaba que el servidor RADIUS del SES debía de
comunicarse con el del operador. Además se decidió que tenía que comunicarse también con el directorio
corporativo que ya estaba implantado, para no tener que dar de alta en varios sitios a los usuarios.
En este punto el SES fue consciente de otras posibilidades que se abrían al incluir en su red un servidor de
autenticación, y de esta forma empezaron a surgir nuevas aplicaciones para el servidor, incluso antes de que
éste se montase. Fue necesario un estudio previo sobre todos los servidores disponibles para garantizar una
elección correcta, que cubriese las necesidades actuales y tuviese en cuenta también el futuro, puesto que las
redes del SES están en continua evolución para adaptarse a las nuevas tecnologías y a la creciente demanda de
los usuarios del sistema.
La red del SES está compuesta por una gran variedad de centros de toda índole, atendiendo tanto a su tamaño
como a su funcionalidad. Estos centros son hospitales, centros de salud, consultorios, gerencias de área, otros
edificios administrativos y otros centros de sanidad variados (centros de planificación familiar, de
drogodependencia, salud mental, sociosanitarios, etc). Todos estos centros forman una compleja Intranet con
un punto especial localizado en los Servicios Centrales del SES en Mérida. Este nodo de la red contiene el
grueso de los servidores, los enlaces externos, la salida a internet, etc. En total estamos hablando de una red
con unos 15.000 usuarios repartidos por toda la geografía de Extremadura, desde sus principales ciudades
hasta sus más recónditos pueblos.
Las nuevas funcionalidades requeridas empezaron a tomar forma: autenticación centralizada para el acceso a
los switches, routers y otro equipamiento de red, autenticación para los usuarios de las redes inalámbricas y
uso de la funcionalidad de autoVLAN que poseen los switches. La primera nos iba a permitir gestionar de una
forma única el acceso a todos los switches del SES (incluyendo los de los hospitales, centros de salud, etc).
Hasta ese momento la gestión era local a cada switch, y no era por usuario, sino que existía el mismo usuario
en todos los switches. En cuanto a la segunda funcionalidad, el SES se estaba planteando el uso de redes
inalámbricas en algunas de sus sedes, pero todavía no se había abordado el tema por no tener claro el problema
de la seguridad. Puesto que el alcance de estas redes sobrepasa las fronteras físicas de los edificios se hace
necesario establecer mecanismos de autenticación de acceso a la red, así como mecanismos de cifrado para
impedir que datos tan sensibles como los datos médicos vayan 'libremente' por el aire. Por ello se optó por
montar una infraestructura de red inalámbrica basada en control de acceso usando el protocolo 802.1X y el
protocolo de cifrado WPA2. El tercer uso aplicado, autoVLAN, es una funcionalidad que poseen los switches
para que, dependiendo de las credenciales proporcionadas por el usuario, asigne una u otra vlan, comenzando
1
2 Introducción
ya la seguridad en el nivel físico directamente, puesto que podemos tener los usuarios en vlans separadas, de
forma que no se vean entre ellos, ni siquiera a nivel 2.
Además de la autenticación de los usuarios el servidor RADIUS también permite el registro de todas las
conexiones, facilitando una auditoría posterior. Con este fin se pueden instalar en el servidor una serie de
herramientas que nos permiten obtener estadísticas de uso de los recursos, para poder comprobar su correcto
funcionamiento.
Otra posibilidad que se abrió al estudiar la propuesta fue el tema de usar Kerberos. Kerberos es un sistema
creado en el MIT (Massachusetts Institute of Technology) por el cual los usuarios, una vez identificados,
pueden acceder a distintos recursos de la red sin necesidad de volverse a autenticar de nuevo, usando un
sistema de tickets. Para ello hay que cambiar los sistemas que se quieran "kerberizar" y así poder ofrecer esta
posibilidad.
Hay que indicar que el proyecto ha sido desarrollado íntegramente en el entorno del SES. Debido a ello hay
datos que no se facilitan, tales como contraseñas, direcciones IP, etc, puesto que son datos reales muy sensibles
y que la política de seguridad del SES (y los propios contratos de trabajo de acuerdo a la LOPD) no permite
difundir.
2 DESCRIPCIÓN DEL PROTOCOLO RADIUS
E
N este capítulo vamos a explicar detalladamente en qué consiste y como es la implementación del
protocolo RADIUS.
2.1. Introducción
La amplia difusión y desarrollo de las actuales redes de telecomunicación hacen más necesario que nunca
controlar el acceso que tienen los usuarios a los distintos recursos a su disposición, puesto que el catálogo es
muy amplio y no todo el mundo necesita los mismos accesos y privilegios.
RADIUS (Remote Authentication Dial-In User Service) es un protocolo ampliamente utilizado que permite la
autenticación, autorización y el registro (accounting) de los usuarios remotos que acceden a través de un
servidor de red o servidor de acceso (conocido en la terminología anglosajona como NAS, Network Access
Server).
Originariamente fue desarrollado para el acceso remoto mediante llamada telefónica (dial-up access), pero
ahora está soportado por servidores de VPN (Virtual Private Network), puntos de acceso inalámbricos,
switches con autenticación, servidores de acceso ADSL y otros tipos de servidores de acceso. En sus inicios
fue desarrollado por la empresa Livingston Enterprises (concretamente por Steve Willins, cuyo nombre aún
hoy aparece en la RFC) en respuesta a una solicitud del servidor de acceso a internet Merit Networks. Más
tarde, Livingston se convirtió en Lucent Tecnologies y a partir de ahí trabajaron junto con Merit Networks
para formalizar el protocolo y someterlo a la aprobación de la industria. Actualmente Lucent ofrece un
servidor RADIUS gratuito, aunque no es el que utilizaremos.
RADIUS está especificado en la RFC 2865 (Remote authentication Dial-In User Service, IETF Draft
Standard) y la RFC 2866 (RADIUS Accounting, informational).
Aunque el desarrollo de RADIUS fue anterior, su funcionamiento tiene mucho paralelismo con lo que se
conoce como AAA. AAA son las siglas de Authentication, Authorization and Accounting (esto es,
autenticación, autorización y registro). Este sistema se encarga de dar respuesta a las siguientes tres preguntas:
¿Quién eres?
¿Qué servicios tienes permitidos?
¿Qué haces con esos servicios?
3
4 Descripción del protocolo RADIUS
2.1.1 Autenticación
La autenticación es el proceso de verificar la identidad de una persona o máquina. Es la respuesta a la pregunta
¿quién eres? La forma más común de realizar esto es la conocida combinación de usuario y contraseña. Hoy
día hay otros métodos de autenticación más seguros (no hay que distribuir la contraseña, por ejemplo) como
pueden ser los certificados digitales y los mecanismos de infraestructura de llave pública (PKI). Más adelante
entraremos en detalle sobre los mecanismos de autenticación que usaremos.
La autenticación persigue conseguir una relación de confianza entre los dos extremos, una vez que se ha
comprobado que el usuario es válido.
2.1.2 Autorización
Por autorización podemos entender el conjunto de reglas que nos permiten decidir qué puede hacer un usuario
previamente autenticado en un sistema. Es la respuesta a la pregunta “¿Qué servicios tienes permitidos?”.
Estas reglas serán establecidas por el administrador del sistema atendiendo al perfil que tenga el usuario que
pide la autorización, dejándole usar solo los recursos que tenga asignados. Por supuesto estas reglas deben
estar incluidas en la política de seguridad de la organización.
2.1.3 Registro
Una vez que el usuario se ha autenticado en el sistema y que tiene los recursos que le han sido asignados de
acuerdo a su perfil, es interesante saber qué hace con esos recursos. Esto es el registro. Estos datos son
guardados y pueden ser utilizados posteriormente para una auditoría, una predicción sobre el uso futuro de la
infraestructura, un seguimiento del funcionamiento normal de la red, etc. RADIUS no especifica cómo se
tienen que almacenar los datos, tan solo regula los mensajes que se pasan entre el cliente y el servidor. De este
modo al implementar el servidor tenemos libertad para guardar los datos de diversos modos, por ejemplo en
archivos de texto, en una base de datos, en archivos binarios, etc.
Tal y como vemos en este esquema la cabecera la componen un octeto con el campo código, otro con el
campo identifier, 2 octetos para el campo length y 8 o 16 octetos para el campo authenticator. La carga del
paquete la constituyen parejas atributo-valor, con una longitud variable
Pasamos a ver cada uno de los campos:
2.3.1.1 Code
El campo “code” es de un octeto de longitud e indica el tipo de mensaje RADIUS que se envía en ese paquete.
Los códigos válidos son:
Access-Request
Access-Accept
Access-Reject
Accounting-Request
Accounting-Response
Access-Challenge
Status-Server
Status-Client
Reserved
Más adelante entenderemos el significado de todos estos campos
2.3.1.2 Identifier
El campo “identifier” es de un octeto de longitud y se usa para el enlazado de las peticiones iniciales y su
posterior respuesta. Es un identificador único del mensaje, que permite detectar mensajes duplicados (posibles
por el uso del protocolo UDP) junto con el puerto UDP origen y el tiempo transcurrido entre mensajes
2.3.1.3 Length
El campo “length” indica la longitud total en octetos del mensaje incluyendo cabecera y carga. Este campo se
verifica cuando el servidor recibe un paquete como medida para comprobar la integridad de los datos.
Sus valores válidos oscilan entre 20 y 4096.
Si llega un mensaje con una longitud mayor que la indicada en este campo, el servidor solo tomará la longitud
indicada en length, ignorando el resto. Si lo que llega es un paquete con una longitud menor que la indicada en
length, el paquete será descartado, sin avisar de ninguna forma este hecho.
6 Descripción del protocolo RADIUS
2.3.1.4 Authenticator
El campo authenticator se usa para asegurar la integridad de los datos de carga (payload). Hay 2 tipos de
valores: los valores de petición (request) y los valores de respuesta (response). Los “request authenticators” se
usan con los mensajes Access-Request y Accounting-Request. En este caso la longitud es de 16 octetos y se
genera de una forma aleatoria para prevenir ataques. El otro tipo, el “response authenticator”, se usa en los
mensajes Access-Accept, Access-Reject y Access-Challenge. El valor de dicho authenticator se calcula usando
un hash MD5 generado a partir de los campos code, identifier, length y request-authenticator, la carga del
paquete y la 'clave compartida' (shared secret, más adelante se explicará el significado de este término).
2.3.2.1 Access-Request
Este paquete lo envía el cliente cuando requiere los servicios de la red. El cliente envía el paquete de petición
al servidor RADIUS con una lista de los servicios requeridos. Este paquete tiene el campo 'code' igual a 1.
La carga de este mensaje puede incluir (aunque no es obligatorio, como veremos más adelante) el atributo con
el nombre de usuario que solicita el acceso. Un atributo exigido en este mensaje es la dirección IP o el nombre
del equipo de red que está haciendo la petición. También tiene que contener la contraseña del usuario, una
contraseña CHAP o un identificador de estado, pero no ambas cosas. Si la contraseña del usuario viaja por la
red lo hará en un hash MD5, no lo hace en claro, para evitar que se pueda averiguar la contraseña simplemente
capturando los paquetes.
2.3.2.2 Access-Accept
Este mensaje se envía por el servidor RADIUS al cliente para indicarle que el acceso ha sido aceptado. Si
todos los atributos enviados en el Access-Request se aceptan el servidor pondrá el campo 'code' igual a 2 y en
el campo identifier pone el valor que tenía ese mismo campo en el Access-Request. Cuando el cliente recibe el
Access-Accept lo coteja usando el campo 'identifier', descartando el paquete en caso de no coincidir.
La información incluida en la carga de este mensaje variará dependiendo de la configuración del servidor y del
cliente que haya solicitado el acceso, puesto que ofrece información acerca de los parámetros con los cuales se
acepta la conexión, y éstos dependen del mecanismo de autorización, como ya vimos anteriormente. Por
ejemplo, este mensaje podría llevar la dirección IP que se le asigna al equipo solicitante, su máscara de red,
puerta de enlace, vlan a la que pertenece el usuario, etc.
2.3.2.3 Access-Reject
Este mensaje lo envía el servidor cuando deniega el acceso solicitado por el cliente. Según la RFC que lo
regula, el servidor debe enviar siempre una respuesta al cliente, ya sea aceptando o denegando su solicitud. La
denegación puede ser debida a varios motivos: contraseña incorrecta, usuario no autorizado, etc, todo
dependerá de la configuración del servidor.
La carga de este mensaje se limita a una pareja atributo-valor que son el Reply-Message y el Proxy-State. No
puede llevar ningún otro atributo. En el Reply-Message se puede especificar el motivo por el cual se deniega el
acceso, aunque esto no está regulado, dando libertad al fabricante para poder colocar los mensajes oportunos.
2.3.2.4 Access-Challenge
Este paquete se envía desde el servidor cuando desea más información del usuario, bien sea porque recibe
información confusa o porque ésta es incompleta. Cuando el cliente recibe este mensaje responde con un
nuevo mensaje Access-Request con la información solicitada. Este intercambio de mensajes durará hasta que
el servidor tenga toda la información que necesite y ya no solicite más Access-Challenge sino que envíe un
Access-Accept o Access-Reject.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 7
2.3.2.5 Accounting-Request
Mensaje enviado por el cliente al servidor que indica que quiere hacer un registro de la conexión. A excepción
de los atributos User-Password, CHAP-Password, Reply-Request y State, la carga de este mensaje puede
contener cualquier otro atributo de los que están permitidos en los mensajes Access-Accept o Access-Request.
2.3.2.6 Accounting-Response
Mensaje enviado por el servidor al cliente indicando que puede llevar a cabo el proceso de registro. Si esto no
fuera posible el servidor sencillamente no respondería al cliente. Al igual que pasa con el Access-Accept, el
campo identifier es igual en los paquetes de petición y respuesta, por lo que el cliente sabe qué peticiones se
han llevado o no a cabo.
Los atributos permitidos en este tipo de mensajes son el Proxy-State y cualquiera de los vendor-specific (más
adelante hablaremos sobre ellos).
2.3.4.1 Formato
2.3.4.1.3 Value
Contiene el valor del atributo en sí. Este campo se requiere para cada atributo presente en la lista, incluso
aunque su valor sea NULL. La longitud depende de la naturaleza del atributo (por eso es necesario el campo
anterior).
La RFC especifica el formato de datos de ciertos atributos. Por ejemplo, una dirección IP no puede ser un
número aleatorio, sino un conjunto de 4 números. Para cumplir con esto, cada valor correspondiente tiene
asignado un tipo, que simplemente indica qué tipo de valor es: hay 6 tipos diferentes:
Integer (INT) Valores enteros, se toman tal como son.
Enumerated (ENUM) Consiste también de un valor entero, pero el valor está basado en un rango de
valores configurable por el usuario, con un significado “definido”.
IP Address (IPADDR) Es un tipo de datos de 32 bit específico para transmitir direcciones IP. Una
versión reciente del protocolo RADIUS incluye soporte para direcciones Ipv6.
Character String (STRING) Estas cadenas de caracteres están pensadas para que sean cadenas en el
formato UTF-8. El dato se pasa como un array de caracteres.
Date (DATE) Es un tipo de 32 bit que representa el número de segundos transcurridos desde el 1 de
Enero de 1970
Binary (BINARY) Puede tomar el valor “0” o “1”
El protocolo RADIUS ofrece mucha flexibilidad a los fabricantes para poder incluir sus propios atributos
específicos. Como ya hemos dicho antes, hay un atributo específico para este fin, el atributo vendor-specific,
de valor 26.
En la siguiente figura se indica cómo encaja el atributo específico del fabricante dentro del atributo estándar
RADIUS:
2.3.4.3.4 Value
El valor en sí del atributo. Estos valores llevan características especiales y capacidades no estándares que cada
fabricante implementa. Su longitud viene determinada por el parámetro anterior.
2.3.5 Diccionarios
Como hemos dicho antes, en los atributos no aparece por ningún lado el nombre de éste, sino tan solo el
código que lo representa. Para los ordenadores esto puede estar bien, pero no para los humanos. Para evitar
este inconveniente se usan los diccionarios en los que se establece una relación entre el nombre del atributo y
su código de atributo. También se usan diccionarios para los atributos específicos de fabricante.
El protocolo ofrece flexibilidad a la hora de definir los diccionarios, lo único exigido es su formato y que el
servidor pueda acceder a ellos, pero se pueden almacenar en ficheros de texto, ficheros binarios, bases de
datos, etc, dependiendo de la implementación del servidor RADIUS en concreto.
Una forma posible sería usando una tabla como la siguiente, el la que se indica el número de atributo, su
nombre y su tipo:
# ATTRIBUTE-NAME TYPE
1 User-Name STRING
2 User-Password STRING
3 CHAP-Password STRING
…
8 Framed IP-Addres IPADDR
2.4.1 PAP
Vamos a explicar el funcionamiento de este tipo de autenticación. El cliente lee el identificador y la clave
compartida del mensaje de petición y lo envía encapsulado dentro de una secuencia hash MD5. La contraseña
original (en claro) del usuario se pasa a través de un proceso XOR. El resultado de estos dos procesos se pone
en el campo value del atributo User-Password. El servidor RADIUS hace el proceso inverso al recibir el
mensaje. Cuando la autenticación falla puede deberse a que es incorrecta bien la clave del usuario o bien la
clave compartida.
Cuando usamos PAP con RADIUS, en los paquetes de petición la única condición es que tiene que incluir el
atributo User-Password, ni siquiera el atributo User-Name es necesario en este caso.
10 Descripción del protocolo RADIUS
2.4.2 CHAP
Al contrario que en el caso de PAP, en CHAP se usa el principio de que la contraseña no debe ser enviada en
claro en ningún paquete a través de la red. CHAP cifra el identificador de usuario y contraseña. La máquina
del usuario hace entonces el procedimiento de login, habiendo obtenido una llave (key, en este caso la clave
compartida) desde el cliente RADIUS de al menos 16 octetos de longitud. El cliente hace un hash de esa llave
y devuelve un identificador CHAP, una respuesta CHAP y el nombre de usuario al cliente RADIUS. El cliente
RADIUS, una vez que ha recibido toda la información anterior, pone el identificador chap en el campo
correspondiente dentro del atributo chap-password y envía una respuesta. El valor “desafío” (challenge)
obtenido se pone en el atributo chap-challenge o en el campo authenticator de la cabecera. Para autenticar al
usuario, el servidor RADIUS usa el valor chap-challenge, el identificador chap y la contraseña del usuario (que
tiene almacenada u obtiene de algún modo) y hace otro hash MD5. Este último resultado debe ser igual al
atributo CHAP-Password enviado por el usuario para que se permita el acceso del usuario, rechazándolo en
caso contrario. Hay que hacer notar que el servidor debe tener acceso a la contraseña en claro del usuario para
que este método pueda funcionar (no es un problema del protocolo RADIUS, sino del CHAP), por lo que
habrá que protegerlas adecuadamente (permisos de los ficheros implicados, políticas de seguridad, etc).
5. El servidor RADIUS responde con un mensaje Access-Challenge que contiene un atributo EAP-
Message.
6. El servidor de acceso desencapsula este mensaje y se lo reenvía al cliente (por ejemplo, le pide el
usuario y la contraseña).
Estos pasos se repiten las veces que sea necesario hasta obtener del servidor RADIUS el correspondiente
Access-Accept o Access-Reject (recordemos que está obligado a responder, según la RFC).
Recalcar que el servidor de acceso a la red se comporta como una 'pasarela' entre el cliente final (usuario) y el
servidor RADIUS, sin realizar ningún tipo de proceso sobre los mensajes EAP, puesto que esta tarea la
realizan el cliente y el servidor RADIUS. Por lo tanto los tipos EAP no tienen por qué estar instalados en el
servidor de acceso, tan solo es necesario que éste soporte EAP como protocolo de autenticación y el paso de
mensajes EAP a un servidor RADIUS, pero no tiene que analizar ni modificar en modo alguno dichos
mensajes.
A continuación mostramos un diagrama con un ejemplo de autenticación EAP:
2.4.4 Kerberos
Por supuesto RADIUS soporta el uso de un servidor Kerberos para delegar en él la autenticación de los
usuarios.
2.4.5 LDAP
RADIUS también soporta el uso de un servidor LDAP (Lightweigth Directory Access Protocol) para realizar
la autenticación de los usuarios. En este caso el servidor actuará como pasarela entre las peticiones del usuario
y las encaminará hacia el LDAP
2.5 Realms
Los 'realms' son identificadores que se ponen antes o después (prefijo o sufijo) del nombre de usuario,
separados de éste por un carácter prefijado como puede ser ‘@’,’ \’, o ‘/’, con la finalidad de que el servidor
RADIUS identifique qué servidor usará para la autenticación.
Mediante estos identificadores podemos realizar una función de proxy, dotando al sistema de una alta
12 Descripción del protocolo RADIUS
escalabilidad. Por ejemplo, tres servidores de acceso a internet que operen en el centro, en el sur y en el norte
forman una alianza de forma que cada uno tiene su propio servidor RADIUS, pero puede ofrecer servicio a los
usuarios de las otras redes (que se identificarán usando @operador) llevando las peticiones de estos usuarios al
RADIUS correspondiente, haciendo una especie de 'roaming'. También lo podemos usar si tenemos distintos
dominios en nuestra organización y queremos que cada uno tenga un mecanismo de autenticación distinto.
2.6 Hints
El uso de hints nos permite realizar modificaciones a las peticiones que nos llegan, usando unas determinadas
reglas. Así cuando un paquete llega al servidor se comprueban esas reglas y si el paquete las cumple (por
ejemplo, un nombre de usuario, un determinado sufijo, etc) añadirle o eliminarle los atributos que estén
especificados en la regla. Esto se puede usar para asegurar la compatibilidad entre distintos servidores o entre
distintos clientes que no traten igual la información.
E
N este capítulo vamos a describir en detalle el sistema Kerberos, que será el sistema que realmente
autentique los usuarios en nuestro sistema.
3.1 Introducción
Kerberos es un protocolo de autenticación de redes creado por el MIT (Massachusetts Institute of Tecnology)
que permite que varios equipos de una red puedan demostrar mutuamente su identidad de manera segura. Fue
desarrollado en la década de l980 inicialmente como ‘Project Athena’. Debe su nombre a Cerbero, el perro de
tres cabezas guardián de la puerta del reino de Hades, de la mitología griega.
La identificación es mutua, de forma que tanto cliente como servidor, es decir tanto el solicitante del servicio
como el que lo ofrece, pueden asegurarse de la identidad del otro, no como ocurre en otros sistemas en los que
solo se identifica el cliente.
Kerberos se basa en criptografía de clave simétrica (los mecanismos de clave asimétrica o clave
pública/privada que se usan en la actualidad todavía no habían entrado en escena cuando se desarrolló
Kerberos inicialmente), y necesita un tercer nodo en el que confían todas las partes. Dicho tercer nodo debe
estar muy bien protegido por ser un elemento primordial en la infraestructura de Kerberos.
Antes de empezar a explicar el protocolo vamos a ver una serie de definiciones necesarias para entender el
sistema Kerberos:
Realm: Define el dominio de autenticación o reino del que se hará cargo el servidor Kerberos. Se
suele utilizar el dominio DNS de la organización y se suele poner en mayúsculas.
Principal: son las entidades que usan el sistema, por lo tanto pueden ser tanto máquinas como
personas:
Usuario: usuario@REALM
Maquina: fqdn@REALM
Servicio: servicio/fqdn@REALM
Ticket: Se utiliza para identificar a los principales. Los facilita el servidor Kerberos de la organización
(el autentication server de forma más precisa)
KDC: Key Distribution Center, es la parte principal del sistema Kerberos, que distribuye los tickets
para los diferentes servicios. Se compone a su vez de autentication server (AS), ticket granting server
(TGS) y una base de datos.
Kerberos Server: se utiliza para modificar los principales.
Ticket granting ticket (TGT): ticket especial que se usa para poder obtener tickets adicionales para el
mismo realm. Este ticket no autoriza el acceso a ningún servicio, se utiliza para autenticar al cliente en
sí.
13
14
Kerberos
Para que Kerberos funcione correctamente es necesaria la configuración previa de un servicio DNS (Domain
Name System o servidor de nombres de dominio) y de un servicio de tiempo NTP (Network Time Protocol).
Ambos servicios ya están funcionando en el SES, por lo que obviaremos su instalación y configuración.
Kerberos funciona usando un sistema de tickets, de modo que cuando un usuario entra al sistema, Kerberos le
facilita un ticket con un período de validez determinado y es ese ticket el que permite identificar
inequívocamente al usuario en los sistemas que estén adheridos al sistema Kerberos, evitando así al usuario
tener que introducir su contraseña una y otra vez al acceder a distintos servicios. Esto también puede
conseguirse mediante un sistema “single sign on”, pero éste tiene la desventaja que la información de
usuario/contraseña viaja continuamente por la red. En Kerberos esto no ocurre.
Hemos visto que RADIUS y Kerberos usan información de usuarios. En el SES la información de los usuarios
está almacenada en un directorio corporativo de Microsoft, Active Directory o Directorio Activo. Creaermos
un sistema Kerberos partiendo de cero configurando un nuevo reino y a su vez, este servidor se comunicará
con el directorio activo para los dominios ya existentes. RADIUS recibirá la petición de autenticación, se la
pasará a Kerberos y éste la resolverá o si es necesario la redigirá al directorio corporativo.
Usando Kerberos podemos tener las siguientes ventajas:
Poder usar “single sign on”, es decir tener que teclear una sola vez nuestra contraseña, en lugar de
tenerla que poner una y otra vez para acceder a distintos servicios.
Asociado a lo anterior los desarrolladores de aplicaciones no se tienen que preocupar de la parte
de la autenticación y el control de los usuarios, ya que de esa parte se encargará Kerberos.
La lista de servicios que ya están “kerberizados” es muy extensa por lo que podemos usarlos sin
problemas y además hay muchas guías y protocolos estándares (GSS-API, SSPI, SASL, etc) para
desarrollar una aplicación teniendo Kerberos en mente.
Debido a su gran extensión y aceptación podemos usarlo en entornos mixtos, donde mixto
significa exactamente “cualquier” cosa, desde amplia variedad de sistemas operativos, elementos
de red, aplicaciones, entornos virtualizados, etc, con lo cual sea cual sea el entorno que usemos
Kerberos encajará perfectamente, ya que es fácilmente adaptable y configurable.
La contraseña nunca viaja por la red, de ningún modo, por lo que aunque la red sea insegura
(todas lo son) nuestra contraseña estará a salvo.
Si un usuario cambia su contraseña, el cambio hay que realizarlo (nosotros o el usuario) solo en
un sitio, no en cada servidor al que se accede.
La autenticación de los usuarios está centralizada en un solo punto.
Si queremos desautorizar a un usuario que ya se ha autenticado previamente lo podemos hacer.
No solo se autentica el usuario sino que también se autentica el servidor, y así el cliente sabe que el servidor
que le está atendiendo es quien dice ser, evitando con ello muchos de los ataques que se producen en las redes,
tanto desde dentro como desde fuera.
1. Authentication Service Request (AS_Request). Es el primer mensaje que se envía al KDC e incluye
(en texto claro) el nombre del principal del cliente, el principal del ticket granting server, una marca de
tiempo o timestamp y el tiempo de validez solicitado (normalmente 8 o 10 horas). En este paso si la
pre-autenticación es obligatoria el KDC no envía todavía el TGT, si no que envía un mensaje de pre-
autenticación al cliente. Para esto normalmente se envía un timestamp cifrado con la clave del cliente,
y este a su vez responde nuevo con otro AS_Request incluyendo el timestamp cifrado, con lo que se
consigue la pre-autenticación y ahora sí se envía el TGT, usando el AS_Reply.
2. Authentication Service Reply (AS_Reply). El Authentication Server genera una clave de sesión
aleatoria y hace dos copias, una para el cliente que se suma a la AS_Reply y la segunda copia
permanece en el KDC, para cuando el cliente solicite acceso a los diferentes servicios en el futuro. El
TGT enviado al cliente se almacena en la caché de credenciales. El TGT está cifrado con la clave del
cliente, por lo que solo dicho cliente podrá descifrarlo. El mensaje de respuesta tiene dos partes, una
cifrada con la clave del usuario que incluye la copia de la clave de sesión para el usuario, el tiempo de
vida del ticket y el nombre del principal, y otra parte cifrada primero con la clave del servidor y
posteriormente con la clave del cliente que incluye la copia de la clave de sesión del servidor, un
timestamp del servidor, el tiempo de vida del ticket, el principal del cliente y la IP del cliente.
Como parte del TGT está cifrado con la clave del servidor, aunque realmente se almacena en el cliente, éste no
puede ver su contenido, al no conocer la clave para descifrarlo.
Podemos resumir el mecanismo de autenticación con esta imagen:
Una vez el usuario se ha autenticado y tiene el Ticket Granting Ticket (TGT), es hora de usar un servicio de
los que tenga permitidos, para ello requiere otro ticket que es el llamado Ticket Granting Service (TGS), que
generan los correpondientes TGS_Request y TGS_Reply, ambos cifrados por seguridad. El proceso tiene
lugar en tres pasos:
16
Kerberos
1. TGS_Request. Este mensaje consta de varias partes: el propio TGS_request que incluye el principal
del servicio que el cliente quiere usar, el TGT obtenido anteriormente y un autenticador que incluye la
clave generada por el KDC anteriormente y una marca de tiempo. Con este autenticador el KDC
puede comprobar que la petición viene de un cliente autenticado previamente, porque incluye la clave
de sesión que él mismo le generó.
2. TGS_Reply. Ahora el KDC genera unas nuevas claves (keys). El mensaje de respuesta nuevamente se
cifra con la clave generada en el proceso de autenticación, garantizando así que solo el cliente que lo
solicita puede ver el TGS. Al igual que en el proceso anterior hay una parte cifrada con la clave del
usuario que incluye una nueva clave de sesión, el tiempo de vida y el nombre del principal del
servicio. Y por otra parte, el TGS en sí mismo está cifrado primero con la clave generada en el primer
paso de autenticación y después con la clave actual de sesión recién generada e incluye la copia de la
nueva clave asociada al servicio, el tiempo de vida, un timestamp del KDC, el principal del cliente y
la IP del cliente.
3. Petición al servicio. Una vez que el cliente tiene el TGS, lo usará para contactar con el servicio y así
garantizarle que es quién dice ser y de esta forma el servicio sabrá que es un cliente válido y
previamente autorizado. Los pasos a seguir en esta fase dependen del servicio solicitado, por lo que no
entraremos en más detalles.
Para que el servidor Kerberos autentique a un usuario, éste tiene que estar en su base de datos (que como
veremos más adelante, se puede enlazar con bases de datos ya existentes como por ejemplo un LDAP o un
Directorio Activo de Microsoft). En la base de datos de Kerberos está el ‘principal’, que viene a ser como el
“nombre de usuario/máquina” y también su contraseña.
El servicio de red frente al que se autentica el usuario también debe estar en la base de datos principal (master
database) de Kerberos. El principal de un servicio tiene el siguiente formato: servicio/instancia@realm_name.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 17
El carácter ‘/’ separa el primary (servicio por ejemplo web, correo, etc) de la instancia (máquina o servidor que
ejecuta el servicio), y el carácter ‘@’ lo separa del nombre del realm.
Por cada servicio hay también un service key, solo conocido por el servicio y el sistema Kerberos. Dicho
service key también se almacena en la base de datos principal en el lado de Kerberos. En el lado del servidor
se almacena en los llamados keytab. Esta service key viene a ser como la contraseña del servicio por el lado
del servidor por lo que hay que almacenarla de forma segura dentro del servidor. Será la llave que se use para
cifrar la información que deba ser solo visible por el servidor.
Resumiendo lo que hemos visto en este capítulo: cuando un usuario inicia sesión en un dominio protegido por
Kerberos, el cliente manda la petición al servidor, que busca el principal del cliente en su base de datos. Si
dicho principal existe, el servidor devuelve un ticket-granting ticket (TGT), y la clave asociada, cifrada con la
contraseña del usuario para que solo este pueda verla. Entonces el cliente descifra el ticket con su contraseña y
la almacena en el almacén de tickets para poderla usar también posteriormente, mientras sea válida. Si ahora el
cliente quiere acceder a uno de los servicios del dominio, por ejemplo el correo, mira en su almacén de tickets
si tiene un ticket disponible para ello y que no esté caducado. Si no lo tiene, usa el ticket-granting ticket para
pedir al servidor Kerberos un ticket para dicho servicio. El servidor Kerberos comprueba si tiene configurado
ese servicio (comprobando si tiene un principal para ese servicio) y si es así nos da el ticket oportuno. Dicho
ticket vuelve al cliente que lo solicitó y éste lo envía al proveedor del servicio, que lo descifrará usando su
keytab, y si es válido admitirá la petición del cliente y la conexión quedará establecida.
4 DIRECTORIO ACTIVO DE MICROSOFT
E
n este capítulo vamos a describir brevemente en qué consiste y cómo funciona el sistema Directorio
Activo de Microsoft, puesto que es el sistema de directorio corporativo centralizado usado en el SES en
la actualidad.
4.1 Introducción
En una definición amplia un directorio no es más que una lista de objetos. Una guía telefónica es un buen
ejemplo de directorio, donde para cada uno de sus elementos se guarda el nombre, dirección y número de
telefóno.
Una red está formada por múltiples elementos: ordenadores, servidores, impresoras, usuarios, etc. Incluso en
una red pequeña es necesario tener control sobre todos estos elementos porque si no la tarea de administrarlos
se puede volver difícil y sobre todo muy tediosa.
Imaginemos una red de tan solo 10 ordenadores totalmente independientes unos de otros, y 10 usuarios. Si
cada uno de los usuarios quisiera iniciar sesión en cada uno de los ordenadores sería necesario establecer 100
cuentas de usuario en total, que además no tendrían nada que ver una con la otra, no tendrían ningún tipo de
sincronismo, por lo que los cambios hechos en un ordenador no se reflejarían en los 9 restantes. Por supuesto
gestionar todo eso sería un auténtico caos. Es un ejemplo un poco extremo pero hasta hace poco no distaba
mucho de la realidad.
Para resolver este tipo de problemas necesitamos una estructura de directorio corporativo centralizado y
Directorio Activo de Microsoft es una de las soluciones más utilizadas en la actualidad, debido a la gran
extensión de los servidores y sistemas operativos que lo soportan y también a su facilidad de uso. Pero hay
muchos más sistemas de similares características tanto de código abierto como propietarios. Algunos de los
más conocidos son Samba, Mandriva, Novell eDirectory, Sun Java Directory Server y OpenDS.
Directorio Activo es una base de datos central que incluye información sobre todos los elementos asociados a
la infraestructura de red: usuarios, grupos, carpetas, impresoras, políticas, servidores, etc.
Además de almacenar toda la información sobre los elementos también dispone de un conjunto de servicios o
facilidades que relacionan dichos elementos entre si, como que un usuario pueda iniciar sesión en una
máquina, que tenga permiso para usar una impresora, que sus ficheros se guarden en una carpeta de grupo, etc.
Todos esos servicios, facilidades y las herramientas para gestionarlos también forma parte del Directorio
Activo, puesto que sin ellos no se podría realizar la gestión.
Directorio Activo es una herramienta muy potente para llevar a cabo la gestión de una infraestructura de
equipos, porque permite tener todos los elementos bajo control y establecer reglas y políticas que facilitan la
tarea de los administradores de sistemas. Sin dicha herramienta algo tan sencillo como que un usuario se
18
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 19
conecte a una impresora determinada podría ocasionar más de un dolor de cabeza y sin embargo usando la
herramienta se convierte en una tarea muy sencilla.
Directorio Activo también permite jerarquía de usuarios en su funcionamiento, de modo que podemos tener
distintos grupos de usuario con distintos perfiles de forma que cada uno tenga acceso solo y exclusivamente a
lo que necesite para desarrollar su trabajo. La granularidad es tal que no solo podemos limitar el acceso a un
objeto en particular, sino que también se puede restringir el acceso a cada una de sus propiedades o atributos.
El servicio de directorio no solo facilita la tarea a los administradores, sino también a los usuarios. Por ejemplo
un usuario puede buscar un recurso sin saber nada acerca de los detalles del recurso, lo que le simplifica su
trabajo diario.
acceder a una carpeta compartida a la que tenga acceso, pero no tiene por qué saber en qué servidor está
alojada dicha carpeta ni cuáles son los detalles de su implementación.
Directorio Activo se instala en uno o más servidores de la red que actuarán como controladores de dominio. Es
una función especial que tienen los servidores con el sistema operativo de Microsoft. Para convertirlo en
controlador de dominio el administrador del sistema tiene que “promocionar” el servidor que quiere convertir.
Es una acción que se realiza de manera sencilla a través de un asistente o también se puede hacer a través de la
línea de comandos de Windows. Si alguna vez queremos que un servidor deje de ser controlador de dominio
(por ejemplo porque hemos adquirido uno con mejores características y lo queremos sustituir) hay que hacer el
proceso inverso que en terminología de Directorio Activo se llama “degradar”. Se recomienda que los
servidores que hacen de controlador de dominio no realicen además otras tareas o funciones como por ejemplo
ser un servidor web, de ficheros, etc, ya que eso podría afectar al rendimiento del sistema.
Por supuesto los controladores también se encargan de la autenticación de usuarios de su dominio, y gracias a
las relaciones de confianza un usuario de un dominio puede iniciar sesión en otro dominio que no sea el suyo.
Así el controlador de dominio se convierte en el KDC (Key Distribution Center) de su sistema Kerberos.
A los dominios se les pueden aplicar políticas de grupo que pueden incluir diversas reglas como acceso a
recursos (correo, internet, ficheros), instalación de software de forma desatendida y centralizada,
actualizaciones, cambios en los programas instalados, cambios en la configuración de los equipos, cambios
visuales, etc, ofreciendo mucha flexibilidad y control a los administradores de sistemas, siempre y cuando el
directorio esté bien definido (sobre todo su esquema lógico) y configurado.
Cuando tenemos más de un controlador de dominio la información se replica entre ellos y todos tienen la
misma importancia en la organización, son iguales entre sí. Cada controlador de dominio (DC) almacena una
copia duplicada de la base de datos del directorio y la sincronización entre ellos es automática.
Otra de las ventajas de Directorio Activo es que aisla la estructura organizativa lógica de la estructura física
real que tengamos implantada, de forma que podemos conseguir dos objetivos:
Cambiar la estructura lógica de una red sin tener que preocuparnos de su parte física.
Al contrario: cambiar toda la estructura física sin que ello nos obligue a cambiar la estructura lógica.
Además de lo que ya hemos visto, Directorio activo también ofrece al administrador de sistemas diversas
herramientas para facilitar su labor:
Servicios de certificado, de modo que podemos implementar una infraestructura de clave pública o
PKI.
Servicios de federación, para que los usuarios del Directorio Activo puedan usar un servicio de single
sign-on para acceder a distintos servicios, por ejemplo servidores web, de correo, etc.
5 FUNCIONAMIENTO DEL SISTEMA AUTO VLAN Y
AUTENTICACIÓN DE RED 802.1X
E
L sistema auto vlan de los switches nos permite asignar a los equipos que se conectan una vlan u otra
atendiendo a ciertos parámetros. Este sistema permite empezar a tratar la seguridad ya en el nivel físico
de la red. Para ello el switch tiene que soportarlo y los switches que tiene el SES (serie 4400 de 3Com y
Cisco 2960) lo soportan.
Una vez que se ha comprobado la identidad del equipo que se intenta conectar a la red se le puede conectar a la
vlan que le pertenece, no conectarlo en ninguna, o incluso desactivar (temporal o definitivamente) el puerto al
que se ha conectado el equipo, eliminando con ello la posibilidad de nuevos intentos a través de ese puerto.
La comprobación de la identidad se puede llevar a cabo de varias formas:
con usuario y contraseña ofrecido por el usuario usando el protocolo de autenticación 802.1X.
a través de su dirección MAC.
También se puede usar una combinación de los dos métodos anteriores.
Todo esto está incluido dentro de la llamada seguridad de puerto de los switches 3Com y Cisco que dispone el
SES, aunque por supuesto otros fabricantes también lo implementan.
Modo RADA seguro. Igual que el anterior, pero además requiere que el cliente también se
autentique usando 802.1X.
Modo Mixto: usa el modo RADA o el login de red para ofrecer acceso al cliente.
5.3 802.1X
El login de red 802.1X permite controlar el acceso de usuarios habilitando o deshabilitando el puerto. Cuando
un equipo intenta acceder a la red (desde el momento en que la tarjeta de red activa el nivel de enlace) se
pregunta su identidad (para ello el equipo ha tenido que ser previamente configurado con 802.1X). Esta
identidad se envía a un servidor RADIUS para su comprobación.
En este modo de funcionamiento el switch solo permite la conexión de un equipo a cada puerto, detectando si
hay un hub o switch entre su puerto y el cliente, desactivando el puerto en ese caso.
En esta figura se muestra un esquema del funcionamiento:
Para el login de red el switch usa el protocolo EAP (Extensible Authentication Protocol).
24
Funcionamiento del sistema auto vlan y autenticación de red 802.1x
En el modo de funcionamiento RADA, en lugar de usar 802.1X se usa una lista de direcciones MAC
permitidas en el servidor RADIUS, siguiendo un esquema similar al visto anteriormente:
E
N este capítulo vamos a ver las necesidades que nuestro sistema va a tener que cumplir. Estos requisitos
están impuestos por la organización y hay que cumplirlos y tenerlos en cuenta en el diseño de la
solución.
6.1Tipos de conexiones
6.1.1 Conexiones desde la red GPRS/UMTS
El SES dispone de dispositivos móviles para ofrecer acceso a su red desde cualquier punto. Cuando estos
equipos tienen que entrar en la red del SES, lanzan una petición a un APN del proveedor de servicios móviles.
Una vez que se comprueba que esa SIM tiene permitido el acceso a la red se le pasan las credenciales a un
servidor RADIUS propio del operador, que hace de proxy hasta nuestro servidor. Cuando a éste le llega la
petición comprobará primero que el origen de la petición es válido y que la clave compartida (shared secret) es
válida. Una vez hecho esto deberá comprobar en el directorio corporativo si las credenciales del usuario son
válidas. Dependiendo del grupo al que pertenece el usuario (definido por @ seguido del nombre de grupo) le
asignará los parámetros de red que le correspondan, concretamente la dirección IP, la máscara de red asociada
a esta dirección, su puerta de enlace y los servidores DNS.
Así, el dispositivo móvil pasa a ser un dispositivo de red más en el SES, con un direccionamiento propio, que
accederá al resto de redes usando su enrutamiento y sus políticas de firewall.
Por lo tanto el RADIUS que usemos tiene que tener soporte para acceder a un directorio activo, soporte de
pools de direcciones y también soporte de grupos (realms).
Pero también nos enfrentamos a un problema en este caso: si no hay conexión con el servidor RADIUS no se
25
26
Necesidades del SES
podría entrar en el switch. Para evitar esto los equipos tienen la opción de que pasados 3 intentos de conexión
fallidos al RADIUS usan la lista de usuarios locales que tengan definidos, pero solo en ese caso extremo, y así
siempre tendremos acceso al switch, aunque para este caso extremo en los switches se configurará un único
usuario.
El funcionamiento en este caso es el siguiente: el equipo (switch) lanza la petición al servidor RADIUS,
pasándole las credenciales del usuario. El servidor RADIUS comprueba estas credenciales y si son correctas
le manda el Access-Accept al equipo y también el grado de acceso permitido (administrador, operador, etc)
dependiendo del perfil del usuario.
Con esta solución, además de agilizar el acceso a los equipos podemos mantener fácilmente un registro de las
conexiones que han tenido.
6.1.4.1 WPA
Aunque no forma parte en sí del objetivo del proyecto vamos a explicar un poco el funcionamiento de WPA:
Wireless Protected Access.
Hasta hace no mucho, la única manera de proteger una red wireless (nos referimos al nivel de enlace, puesto
que en niveles superiores siempre podemos poner otro grado más de protección, como por ejemplo un túnel
IPSEC) era mediante lo que se conoce como WEP (Wired Equivalent Privacy, privacidad equivalente al
cable). Pero este protocolo se reveló inseguro, puesto que si un atacante capturaba paquetes de la red durante
un tiempo (una hora podría ser suficiente) era relativamente fácil averiguar la clave WEP usada en la red.
Además, el que haya muchos paquetes en la red y el uso de claves WEP de poca longitud todavía hace más
fácil el trabajo a los atacantes.
Para solucionar estos problemas, se creó por parte del consorcio WiFI Alliance (asociación sin ánimo de lucro
formada por más de 200 empresas que tienen como objetivo el estandarizar todo lo relacionado con las
comunicaciones inalámbricas) el WPA, que ofrece nuevos mecanismos de cifrado, así como otros mecanismos
de autenticación que generalmente van asociados a este protocolo. Recordemos que la autenticación garantiza
la identidad del usuario, mientras que el cifrado se encarga de 'ocultar' el tráfico que pasa por un enlace.
Un posible esquema de uso para WPA es el siguiente:
P
ara implantar la solución se han seleccionado los sistemas que veremos a continuación, todos ellos
ejecutándose en un servidor testing de Debian, concretamente la versión Debian Buster 7.2.0-19. Se ha
elegido como S.O. Debian por su continua actualización a últimas versiones disponibles así como su
facilidad para instalar y configurar nuevos paquetes.
29
30
Solución adoptada: Freeradius y Kerberos
7.1.2 Kerberos
En este caso teníamos claro que la solución iba a ser la oficial de Kerberos, que no es otra que la
implementación de Kerberos hecha por el MIT, concretamente los paquetes de la versión 5 del sistema
Kerberos para la distribución Debian (versión 1.16-2).
Existen otras versiones de Kerberos como pueden ser:
Heimdal Kerberos, versión desarrollada en Suecia y que es la más parecida y compatible con
la versión del MIT.
Active Directory, el conocido directorio activo de Microsoft, no es una implementación de
Kerberos como tal, pero sí está basado en su funcionamiento.
TrustBroker: es una versión comercial, desarrollada por la empresa Cybersafe.
Shishi: una versión GNU de la implementación versión 5 de Kerberos.
Aunque hemos visto que hay otras versiones, la del MIT es la más completa, la que más tiempo lleva
desarrollándose, sobre la que hay más documentación y está implementada en más soluciones a nivel global,
tanto en sistemas operativos (Linux, Unix, Windows, etc) como en servicios adaptados para poder usar la
infraestructura.
7.3 Ventajas/inconvenientes
Como hemos visto en la introducción, Freeradius y Kerberos soportan todo lo necesario para cumplir los
requisitos del SES. Vamos a ver las ventajas frente a soluciones comerciales. Algunas de las ventajas
expuestas no son exclusividad de los componentes elegidos, sino que son aplicables al software libre en
general.
Ventajas:
No tienen costes de adquisición ni de licencias.
Son productos muy escalables.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 31
Inconvenientes
Inexistencia de soporte por parte de una empresa.
No certificado por ningún fabricante (aunque hay empresas que ofrecen soluciones comerciales
válidas certificadas por su departamento de ingeniería, como es el caso del operador de telefonía
móvil que da servicio al SES.
Configuración tediosa y difícil a base de ficheros de texto.
7.4 Instalación
7.4.1 Freeradius
Freeradius ya no está disponible en la lista de paquetes de Debian por lo que no hay disponibles archivos
binarios y tenemos que descargar el código fuente y compilarlo e instalarlo nosotros mismos.
Podemos usar la instalación por defecto o elegir los parámetros de compilación; esta opción es algo más
complicada, pero a cambio tendremos una versión compilada con las opciones preferidas por nosotros. Las
opciones que tenemos para la compilación son las siguientes:
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS] optimize for fast installation
[default=yes]
--with-logdir=DIR Directory for logfiles [LOCALSTATEDIR/log]
--with-radacctdir=PATH Directory for detail files [LOGDIR/radacct]
--with-raddbdir=DIR Directory for config files [SYSCONFDIR/raddb]
--with-threads Use threads, if available. (default=yes)
--with-snmp Compile in SNMP support. (default=yes)
--disable-ltdl-install Do not install libltdl
--with-experimental-modules Use experimental and unstable modules.
(default=no)
--enable-developer urns on super-duper-extra-compile-warnings when
using gcc
Como los parámetros por defecto son suficientes para nosotros, simplemente ejecutamos:
tar xvfz freeradius-VERSION.tar.gz
cd freeradius-VERSION
./configure
make
make install
32
Solución adoptada: Freeradius y Kerberos
Los tres últimos comandos llevarán bastante tiempo ya que en ellos se comprueba que el equipo tenga todo lo
necesario y se lleva a cabo la compilación.
Y eso ya nos crea los ejecutables y todos los ficheros necesarios para el funcionamiento del servidor. Para
poder ejecutar esos comandos nuestro sistema deberá poseer un compilador de C y el gestor de dependencias
‘make’. Si como es nuestro caso tenemos un sistema “limpio” (tan solo instalamos el sistema base de debian,
sin nada más) debemos instalarlo con los comandos:
apt-get install gcc make
El sistema de paquetes automáticamente nos instalará todo lo necesario para que funcione.
7.4.2 Kerberos
Para instalar Kerberos lo podemos hacer de forma similar a Freeradius descargándonos su código fuente y
compilándolo nosotros, o bien elegir el sistema de paquetes de Debian, que es la opción más rápida y sencilla,
ya que no existe compilación. Para la instalación del servidor son necesarios los siguientes paquetes: krb5-
kdc, krb5-admin-server, por lo que simplemente ejecutando
apt-get install krb5-kdc krb5-admin-server
ya tenemos en nuestro sistema todo lo que necesitamos.
7.5 Configuración
Primeramente vamos a ver como se configuraría cada servicio por separado y posteriormente veremos los
pasos a seguir para conseguir la integración entre ellos, que serán dos: Freeradius usa Kerberos para la
autenticación y éste a su vez lee la información de los usuarios del Directorio Activo.
7.5.1 Freeradius
Toda la configuración de Freeradius se hace en base a ficheros de texto, si bien hay alternativas que ofrecen
una gestión a través de una interfaz web, usando PHP en el desarrollo, pero esta posibilidad no está todavía lo
suficientemente rodada y carece de muchas de las funcionalidades posibles. Vamos a ver únicamente los
ficheros utilizados en este proyecto, aunque Freeradius tiene más ficheros que los aquí listados.
Como en otros ficheros de configuración de Unix y Linux un '#' al principio de una línea indica que esa línea
es un comentario y no se tiene en cuenta al leer el fichero. Usaremos estos comentarios en los ficheros para
explicar qué significa exactamente cada parámetro. Los ficheros originales también son bastante
autoexplicativos e incluyen comentarios para ayudar en la configuración.
La ruta por defecto de los ficheros de configuración es /usr/local/etc/raddb.
Indicar también que aunque Freeradius posee un montón de características y soporta múltiples protocolos
haremos las modificaciones necesarias en sus ficheros de configuración para que solo demos soporte a lo que
realmente utilizamos. Para ello “comentaremos” con ‘#’ las líneas que no nos interesen en lugar de borrarlo
por si en un futuro lo volviésemos a activar. Esto nos permitirá una ejecución y una depuración mucho más
rápida.
Este fichero contiene los equipos (no clientes “humanos”, sino máquinas, es decir los servidores de acceso a la
red, como pueda ser un switch o la controladora inalámbrica) autorizados para acceder al servidor RADIUS,
con su correspondiente IP, una clave compartida y una descripción. Por supuesto la clave compartida también
hay que configurarla en cada uno de los servidores de acceso a la red.
Por lo tanto en este fichero tendremos que añadir todos los equipos que tengan que hablar con el servidor
RADIUS, es decir todos los switches, controladora inalámbrica, etc.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 33
En el servidor RADIUS original, al usuario que no estaba en el fichero users ni tenía una cuenta local en la
máquina del servidor (lo segundo y único que se miraba) se le denegaba el acceso. Solo había una entrada por
defecto permitida si no se encontraba el usuario en el fichero. En Freeradius existe la posibilidad de tener más
de una entrada por defecto, que el servidor va comprobando “saltando” de una a otra en su orden de aparición,
parando el proceso en caso de encontrar alguna coincidencia. Usando la opción Fall-Through=yes, le decimos
al servidor que continúe comprobando el resto del fichero, incluso habiendo encontrado ya una coincidencia,
permitiendo un control mucho mayor para establecer la coincidencia. El fichero users de Freeradius soporta
incluso espacios en blanco en el nombre de usuario.
En este fichero se almacenan varios datos del usuario como pueden ser su nombre de usuario, contraseña, tipo
de servicio, IP, etc. Para cada tipo de usuario hay distinta información que podemos añadir.
Nosotros usaremos este fichero para añadir manualmente los usuarios que no estén en el Directorio Activo,
como son los invitados y los usuarios que creemos para los switches y equipos de red y por otro lado
indicaremos también en este fichero que la autenticación del resto de usuarios (el 99,99% de ellos) se haga a
través de Kerberos como veremos más adelante en la integración de RADIUS y Kerberos.
7.5.1.3.1 Ejemplo general
Un ejemplo de usuario en este fichero sería:
steve Cleartext-Password := "testing"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 172.16.3.33,
Framed-IP-Netmask = 255.255.255.0,
Framed-Routing = Broadcast-Listen,
Framed-Filter-Id = "std.ppp",
Framed-MTU = 1500,
Framed-Compression = Van-Jacobsen-TCP-IP
En este fichero encontramos toda la configuración relacionada con el protocolo EAP (Extensible
Authentication Protocol). En versiones anteriores de Freeradius, esta configuración estaba incluida dentro del
fichero general radiusd.conf, pero por razones de modularidad se ha decidido ubicarlo en un fichero distinto.
Incluye toda la información necesaria para poder utilizar este protocolo desde qué tipo de autenticación EAP
usar hasta dónde se encuentran los certificados para poder garantizar la autenticidad de los mensajes EAP.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 35
Este es sin duda el fichero más importante del servidor, ya que en él está la configuración básica y se hace la
llamada a otros ficheros. También en el fichero radiusd.conf se hace referencia a otros ficheros del sistema
operativo, del directorio de instalación del programa, etc.
Como ya hemos dicho antes, Freeradius es modular y a través de su API y de este fichero, el servidor pasa las
distintas opciones y comandos a los distintos módulos. Para entender mejor el funcionamiento del fichero
debemos saber que en Freeradius se usan los siguientes operadores:
Atributo=Valor especifica el valor de un atributo, pero solo si no hay otro 'item' del mismo atributo.
Atributo:=Valor especifica el valor de un atributo, sobreescribiendo el valor antiguo si lo tuviese
Atributo==Valor comprueba que exista el atributo y lo compara con el especificado
Atributo += Valor añade ese atributo a la lista de items
Atributo!=Valor comprueba que el atributo exista y no tenga el valor especificado.
Atributo>Valor comprueba que haya un atributo en la lista con un valor mayor al especificado
Atributo < Valor igual que el anterior, pero siendo menor el valor
Atributo <= Valor igual o menor
Atributo=~expresión comprueba que la petición contenga un atributo que cumpla la expresión.
Atributo!~expresión comprueba que la petición contenga un atributo que no cumpla la expresión.
Atributo=*valor comprueba que la petición tenga ese atributo, independientemente del valor que tenga.
Atributo!*valor comprueba que la petición no tenga ese atributo, independientemente del valor del mismo.
Mostramos a continuación las partes más relevantes del fichero, donde se definen los directorios a usar y
donde se hace la referencia al resto de ficheros de configuración:
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
$INCLUDE proxy.conf
$INCLUDE clients.conf
modules {
$INCLUDE mods-enabled/
36
Solución adoptada: Freeradius y Kerberos
}
policy {
$INCLUDE policy.d/
}
$INCLUDE sites-enabled/
Al igual que el fichero eap.conf, éste también estaba incluído en radiusd.conf, pero dada su importancia se hizo
un fichero adicional. En este fichero tenemos distintas secciones que se encargan de la pre-autorización, la
autenticación, el registro y otras acciones adicionales que se pueden ejecutar después de la autenticación, etc.
Vemos las secciones más importantes del fichero:
server default {
listen {
type = auth
ipaddr = *
port = 1812
} }
authorize {
filter_username
mschap
eap {
ok = return
}
Files
Pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type Kerberos {
krb5
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
eap
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 37
}
accounting {
detail
post-auth {} # en esta sección se ejecutarían acciones después de
autenticar
pre-proxy {} # en esta sección se ejecutarían acciones antes de reenviar
la petición a otro RADIUS
post-proxy {}
7.5.2 Kerberos
La instalación en Debian consta de instalar básicamente dos paquetes: el krb5-kdc, que es el KDC en sí, y el
krb5-admin-server que se encargará del resto. Cuando ejecutamos los comandos de instalación el sistema nos
advierte que para crear el reino de Kerberos tendremos que ejecutar el siguiente comando:
krb5_newrealm
Que nos pide una password y los nombres de reino (nombres DNS) que queremos usar y su resultado es que
ya tenemos los ficheros básicos para Kerberos creados.
También tenemos que crear el directorio donde se va a almacenar la base de datos:
mkdir -p /usr/local/var/krb5kdc/
y crearla
kdb5_util -s create
En este fichero se definen los realms así como otros parámetros relativos a la configuración del servidor. En
este caso el reino Kerberos será JOSE.RTS.
[libdefaults]
default_realm = JOSE.RTS
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
JOSE.RTS = {
kdc = kdc01.jose.rts
admin_server = kdc01.jose.rts
}
[domain_realm]
.jose.rts = JOSE.RTS
jose.rts = JOSE.RTS
En este fichero se especifica los parámetros relativos al KDC (Key Distribution Center)
38
Solución adoptada: Freeradius y Kerberos
[kdcdefaults]
kdc_ports = 750,88
[realms]
JOSE.RTS = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
#supported_enctypes = aes256-cts:normal aes128-cts:normal
default_principal_flags = +preauth
}
Este fichero no viene creado por defecto, lo tenemos que crear nosotros y es una lista de control de acceso
(ACL por sus siglas en inglés) que nos permitirá restringir quién puede administar el KDC.
En nuestro caso por simplicidad simplemente tiene la siguiente línea:
*/admin@JOSE.RTS *
que permite que cualquier usuario que se conecte como administrador pueda modificar la base de datos.
Y por último creamos un usuario de prueba, aunque valdría cualquiera que tuviésemos ya creado, por
supuesto:
kadmin.local: add_principal krbtesting
nos pedirá una contaseña para dicho usuario y con eso hemos finalizado la parte del servidor Kerberos.
En cuanto al servidor Freeradius tenemos que añadir la autenticación Kerberos en el fichero
/usr/local/etc/raddb/sites-enabled/default, añadiendo lo siguiente en la parte de authentication justo después del
módulo PAM:
Auth-Type Kerberos {
krb5
}
También tenemos que editar el fichero /usr/local/etc/raddb/mods-enabled/krb5, para indicarle cual es nuestro
servidor Kerberos y dónde está la keytab que generamos anteriormente, para ello le añadimos lo siguiente:
keytab = /usr/local/etc/raddb
service_principal = radius/radius.jose.rts
Por último tenemos que editar el fichero users y añadir antes de la última línea que impide el paso a todos los
usuarios la siguiente línea:
DEFAULT AUTH-Type = kerberos
Si la pusiéramos al principio del fichero autenticaría todos los usuarios contra Kerberos, pero entonces todos
los usuarios que tuviésemos configurados en el fichero users no servirían para nada y no es lo que queremos.
Y ahora hay que crear los mismos dos principales en el otro KDC y añadir también nuestro dominio, pero
como eso ya es el directorio activo lo hacen mis compañeros de la sección de Sistemas.
7.6.1 Freeradius
Para arrancar el servidor simplemente ejecutaremos el comando:
radiusd
y si no hay ningún error el servidor empezará a ejecutarse en background.
Otra opción para ejecutarlo (parándolo previamente porque no puede haber varias instancias simultáneamente)
es añadir al comando la opción –X, que lo ejecuta en modo debug y así podemos ver lo que le llega y lo que
envía, lo cual viene muy bien para hacer las pruebas y comprobar que todo funciona como debe, tras mostrar
mucha más información se quedaría tal que así:
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 41
inner-tunnel
Listening on proxy address * port 41837
Listening on proxy address :: port 55833
Ready to process requests
Para asegurarnos que los usuarios funcionan correctamente podemos usar la herramienta radtest, que hace
peticiones de autenticación al servidor RADIUS
radtest radius1 radius123 localhost 0 testing123
Sent Access-Request Id 78 from 0.0.0.0:38744 to
127.0.0.1:1812 length 77
User-Name = "radius1"
User-Password = "radius123"
NAS-IP-Address = 10.165.60.6
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "radius123"
Received Access-Accept Id 78 from 127.0.0.1:1812 to 0.0.0.0:0
length 26
Service-Type = Framed-User
Podemos comprobar que hemos recibido un Access-Accept y que además nos ha asignado el Service-Type
Framed-User, tal y como está configurado en el fichero users.
7.6.2 Kerberos
En Kerberos como ya hemos visto tenemos que ejecutar dos servicios independientes, el KDC y el admin
center:
krb5kdc
kadmind
Ahora ya podríamos conectarnos al sistema de administración y por ejemplo crear usuarios:
kadmin.local
Authenticating as principal jose/admin@JOSE.RTS with password.
kadmin.local: ank nuevo_usuario
WARNING: no policy specified for nuevo_usuario@JOSE.RTS; defaulting to
no policy
Enter password for principal "nuevo_usuario@JOSE.RTS":
Re-enter password for principal "nuevo_usuario@JOSE.RTS":
Principal "nuevo_usuario@JOSE.RTS" created.
Con el comando kinit podemos comprobar un usuario y ver su TGT con el comando klist
root@radius:~# kinit nuevo_usuario
Password for nuevo_usuario@JOSE.RTS:
root@radius:~# klist
Ticket cache: FILE:/tmp/krb5cc_1000_Q10TLB
42
Solución adoptada: Freeradius y Kerberos
Por supuesto estos comandos los podemos ejecutar también en una máquina remota (en esa máquina no es
necesario instalar el paquete del kdc) y el resultado sería el mismo, pero el ticket viajaría por la red.
E
N este capítulo vamos a ver como incrementar la seguridad de los servidores RADIUS y Kerberos, tanto
de las conexiones que se realizan para accederlos como de los propios servidores y clientes.
Uno de los grandes inconvenientes de los dos sistemas proviene de una de sus mayores ventajas: su gran
expansión. El descubrimiento de un fallo de seguridad en el servidor puede afectar a millones de usuarios en
todo el mundo. Pero por supuesto también habrá mucha gente tratando de resolverlo y obtener un parche de
seguridad lo antes posible, por lo que su gran expansión es ante todo su mayor virtud.
Trataremos cada uno de los sistemas por separado.
8.1 RADIUS
Hay fallos de seguridad que son inherentes al protocolo RADIUS y otros pueden ser debidos a un mal uso del
mismo. Veremos como mitigar los primeros y cómo hacer para no cometer los segundos.
Uno de los problemas es la clave compartida. Se podría atacar esta clave teniendo un sniffer (escaneador de
redes, uno de los más conocidos es el software Wireshark) que viese peticiones Access-Request válidas y sus
correspondientes respuestas. Una vez obtenidos estos dos paquetes, se podrían hacer cálculos con MD5 usando
el código, el identificador, la longitud, el “request authenticator” y los atributos. Por supuesto esto es
computacionalmente muy complicado y se puede evitar fácilmente usando claves compartidas de gran
longitud, y que no sean solo de caracteres alfanuméricos. Si solo se pueden usar caracteres de teclado, la
longitud mínima debe ser de al menos 22 caracteres y consistiendo de letras mayúsculas, minúsculas, números
y caracteres de puntuación. Si se puede configurar la clave compartida como una secuencia de dígitos
hexadecimales (no todos los servidores ni todos los clientes soportan esta opción), se deberá usar al menos una
clave de 32 dígitos hexadecimales.
El campo Request-authenticator y la clave compartida son usadas para obtener la llave con la que se cifra el
atributo User-Password y otros atributos. Si un atacante coloca un sniffer en la red y captura tráfico entre el
cliente y el servidor RADIUS, puede crear un diccionario con los request-authenticators y la correspondiente
clave para cifrar los atributos sensibles. Si el valor del request-authenticator se repite mucho porque varios
servidores de acceso distintos tienen la misma clave compartida, hacemos más fácil la tarea de averiguar la
clave compartida. Por ello otra acción que se puede tomar es definir una clave compartida distinta para cada
pareja cliente-servidor RADIUS.
Tampoco hay autenticación de los paquetes Access-Request en la RFC del protocolo. Por lo tanto usando
técnicas de spoofing (falsear la dirección IP origen de un paquete) podíamos generar falsas peticiones Access-
Request y obtener así información del servidor. Esto se puede evitar usando técnicas de anti-spoofing, que en
el SES están implementadas en el firewall. Otro modo de evitar este inconveniente es exigir el campo
Message-Authenticator en todos los mensajes Access-Request (normalmente este campo solo es requerido en
45
46
Seguridad
los mensajes para tener autenticación EAP). Recordemos que este campo es el hash MD5 del paquete Access-
Request completo usando como llave la clave compartida. Por lo tanto tenemos que asegurar que los
servidores de acceso a la red envíen los paquetes Access-Request con el correspondiente campo Message-
Authenticator y que el servidor RADIUS descarte todos aquellos paquetes que no cumplan esta condición o en
los que falle la verificación de este campo. Este descarte se hace silenciosamente, sin advertir de ello al
solicitante, puesto que no es lo mismo que un Access-Reject.
Otro de los fallos del protocolo es que los mensajes en sí no están cifrados, con lo que alguien que tenga
acceso físico a la red podría colocar un sniffer y ver los paquetes. Este riesgo se ve bastante minimizado en el
entorno del centro de proceso de datos (CPD) puesto que tiene acceso restringido, pero para clientes que estén
en otros departamentos o incluso en otros edificios sí puede suponer un problema. Para ofrecer una mayor
seguridad en este aspecto podríamos usar un túnel IPSEC entre los clientes y el servidor RADIUS, cifrando así
el contenido de todo el tráfico que circule entre los equipos. La RFC 3162 describe el uso de IPSEC con
detalle. En este proyecto, esta solución no se ha implementado, por su complejidad y su coste.
8.2 Kerberos
El protocolo Kerberos es ya de partida bastante seguro puesto que se desarrolló pensando precisamente en ello.
Su seguridad no fue algo que surgió espontáneamente, estaba en su ADN. Además ha ido evolucionando a lo
largo de muchísimos años, haciéndose cada vez más seguro. Todos sus mensajes van cifrados por lo que es
inmune a ataques con analizadores de red.
Una de las medidas de seguridad que se ha añadido es la que ya comentamos en cuando a la pre-autenticación,
por lo que es imprescindimble que esta característica esté habilitada siempre.
Otro aspecto a tener en cuenta es usar siempre la última versión del protocolo, es decir la versión 5. El servidor
también soporta la anterior versión, la 4, pero tenemos que prohibir su uso, puesto que es más inseguro.
Debido a su importancia y a que es el almacen de claves, es servidor KDC tiene que estar fuertemente
protegido, con su sistema operativo configurado convenientemente a nivel de permisos y accesos, así como
detrás de un firewall con la máxima protección posible, ya que si un atacante tuviese acceso podría emitir
tickets no válidos, borrar la base de datos, etc.
Uno de los problemas inherentes del protocolo Kerberos es la duración del ticket. No se debe especificar un
tiempo demasiado largo porque eso puede ocasionar problemas si se llega a interceptar ese ticket. Pero
tampoco demasiado corto porque en ese caso estamos obligando al usuario a que se autentique de nuevo, lo
que además va un poco en contra de la filosofía inicial de hacer que el usuario solo se autentique una vez. Por
lo tanto hay que llegar a un compromiso. Como norma general el tiempo de validez del ticket se suele
establecer en función de la jornada de trabajo, pero en determinados usos, por ejemplo si la máquina es de uso
público y para conexiones de corta duración, ese tiempo se puede bajar lo que queramos para tener más
garantías.
Otro de los problemas del uso de Kerberos en una organización no es un problema del protocolo en sí, sino de
su implementación. Si tenemos un servicio que no podemos o no queremos “kerberizar” eso supone que ese
servicio pueda tener una autenticación distinta, y por lo tanto corremos el riesgo de que sea débil. Esto nos
puede ocasionar una brecha de seguridad en ese punto. Por lo tanto no podemos obviar nunca el tema de la
seguridad, ya que es como una cadena que es tan débil o tan fuerte como lo sean sus eslabones.
Un inconveniente asociado a lo anterior es que si un usuario tiene que tener usar varias claves para diferentes
sistemas es posible que use la misma para todos, por lo que de nada nos vale que un sistema proteja
fuertemente las contraseñas si otro no lo hace y es atacado y quedan expuestas todas las claves, las del sistema
atacado y las de Kerberos por ser las mismas.
Para prevenir este tipo de problemas podemos cambiar el tipo de autenticación frente al usuario en el proceso
inicial de autenticación (recordemos que es ese el único momento en que el usuario tiene que poner su clave).
Inicialmente Kerberos se desarrolló con mecanismos de clave simétrica, que tienen el inconveniente que
ambas claves (las del usuario y las del servidor) tienen que ser almacenadas de algún modo en el servidor.
Aunque este almacenamiento sea seguro, obliga a un alta inicial del usuario en el sistema, y en ese
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 47
A
demás del sistema de autenticación en sí que hemos ido instalando y configurando también forman
parte de la solución los elementos que se conectan a dicho sistema. En este capítulo veremos cómo
configurar los distintos clientes del sistema, ya que sin esta configuración no podremos aprovechar
nada de lo que hemos realizado. Los equipos que tenemos que configurar son: switches, clientes 802.1X,
controladora inalámbrica y clientes inalámbricos.
9.1Configuración de un switch
Tenemos que configurar el switch para que la autenticación de los usuarios se haga mediante RADIUS.
Vamos a ver cómo hacerlo en un antiguo switch 3com 4400 y un más moderno Cisco 2960. En cada uno de
los switches hay que realizar dos tareas
Configurar el switch para que el acceso a la gestión del mismo sea por RADIUS.
Configurar el protocol 802.1X para que los equipos conectados al switch se autentiquen.
9.1.1 Acceso
El switch tiene gestión vía web, a través de puerto de consola serie y también a través de telnet/SSH.
Usaremos este último por su comodidad y rapidez.
Cuando nos conectamos al switch por primera vez nos aparece la siguiente pantalla:
Login: admin
Password:
Menu options: --------------3Com SuperStack 3 Switch 4400----
bridge - Administer bridge-wide parameters
feature - Administer system features
gettingStarted - Basic device configuration
logout - Logout of the Command Line Interface
physicalInterface - Administer physical interfaces
protocol - Administer protocols
49
50
Configuración y comprobación del resto de equipos
Dicha información la podemos comprobar también si queremos con el comando summary. Una vez
configurado el servidor RADIUS volvemos al menú anterior con quit, y en este menú nos aparece:
Select menu option (security/radius): quit
Menu options: --------------3Com SuperStack 3 Switch 4400----------
device - Administer device security
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 51
9.1.2 802.1X
Volvemos de nuevo al menú anterior y escogemos esta vez la opción network, dentro de este menú solo hay
una opción que es access, por lo que usamos esa:
Menu options: --------------3Com SuperStack 3 Switch 4400---------------
access - Administer network access security
Type "quit" to return to the previous menu or ? for help
------------------------------------SW_Pruebas (1)----------------------
Select menu option (security/network): access
Menu options: --------------3Com SuperStack 3 Switch 4400---------------
detail - Display port users
localAuth - Administer local authentication database
portPrivacy - Configure port privacy
portSecurity - Configure port security
secureAddresses - Administer MAC addresses
summary - Display port security settings
systemMode - Enable/disable network security
systemSummary - Display summary information
Type "quit" to return to the previous menu or ? for help
Para habilitar los distintos modos de funcionamiento que vimos anteriormente tenemos que ejecutar el
comando portSecurity:
52
Configuración y comprobación del resto de equipos
Y una vez escogido el modo que queramos hay que habilitar la seguridad en la red con el comando
systemMode
Select menu option (security/network/access): systemMode
Enter system mode (enable,disable)[disable]:
Y con esto terminamos con las opciones de seguridad para un switch 3com. Vía web todo es similar solo que
lo hacemos con un navegador y va más lento y puede haber problemas con navegadores actuales, por lo que se
recomienda usar el modo texto.
9.2.1 Acceso
Los switches Cisco modelo 2960 también tienen administración vía web, pero es muy básica y no incluye
ninguna de las opciones de seguridad. Tampoco las incluye el software de gestión de Cisco llamado Cisco
Network Assistant (CNA), por lo que al igual que hicimos con 3com usaremos telnet/SSH para conectarnos al
equipo.
En los equipos Cisco no hay pantallas de configuración como en 3com, sino que ejecutan un potente sistema
operativo llamado IOS con multitud de comandos y opciones por lo que ofrecen muchas más funcionalidades,
aunque evidentemente su gestión es algo más compleja.
Para entrar a la configuración ejecutamos el comando:
SW_CISCO_PRUEBAS#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
SW_CISCO_PRUEBAS(config)#
Lo primero que hay que hacer para empezar activar la seguridad es configurar un nuevo modelo AAA:
SW_CISCO_PRUEBAS(config)#aaa new-model
SW_CISCO_PRUEBAS(config-radius-server)#?
RADIUS server sub-mode commands:
address Specify the radius server address
automate-tester Configure server automated testing.
backoff Retry backoff pattern(Default is retransmits
with constant delay)
exit Exit from RADIUS server configuration mode
key Per-server encryption key
no Negate a command or set its defaults
non-standard Attributes to be parsed that violate RADIUS
standard
pac Protected Access Credential key
retransmit Number of retries to active server (overrides
default)
timeout Time to wait (in seconds) for this radius server
to reply (overrides default)
Con la anterior instrucción simplemente le hemos dado el nombre. Ahora especificamos el resto de
parámetros:
SW_CISCO_PRUEBAS(config-radius-server)#address ipv4 10.165.60.6
auth-port 1812 acct-port 1813
Y aún nos falta por incluir la shared secret
SW_CISCO_PRUEBAS(config-radius-server)#key testing123
Para ir al menú anterior tenemos que teclear exit, ahora para configurar la autenticación de la administración
del switch a través de RADIUS tenemos que ejecutar los siguientes comandos:
Cisco(config)# aaa authentication login default group radius local
Cisco(config)#line vty 0 15
Cisco(config-line)#login authentication radius_jose
Con la primera línea habilitamos que se pueda usar el servidor RADIUS para autenticar los usuarios y al final
ponemos local para que si el servidor RADIUS no está disponible podamos acceder al switch usando un
usuario local. Las line vty del 0 al 15 son las interfaces virtuales que posee el switch para las conexiones
remotas. Con esto le estamos diciendo que en estas conexiones autentique el usuario con el servidor RADIUS.
9.2.2 802.1X
Y para hacer que el switch autentique los usuarios que se conectan por 802.1X tenemos que hacer lo siguiente
SW_CISCO_PRUEBAS(config)#aaa authentication dot1x default group radius
SW_CISCO_PRUEBAS(config)#dot1x system-auth-control
SW_CISCO_PRUEBAS(config)#interface fastEthernet 0/1
SW_CISCO_PRUEBAS(config-if)#dot1x port-control auto
SW_CISCO_PRUEBAS(config-if)#end
54
Configuración y comprobación del resto de equipos
Con estos comandos especificamos que la autenticación 802.1X se lleve a cabo a través del servidor RADIUS,
lo habilitamos en el switch, y especificamos qué interfaces estarán en este modo (por supuesto se pueden poner
todas) y por último aplicamos el modo de funcionamiento, en este caso modo auto.
A continuación editamos las propiedades de seguridad de la red que hemos creado, primero en la pestaña
Layer2:
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 55
Por último en la pestaña general también le tenemos que especificar la interfaz, que ya la teníamos
previamente creada e incluye la configuración de red y DHCP:
Habilitamos el broadcast SSID para que los usuarios puedan ver la red.
56
Configuración y comprobación del resto de equipos
Podemos ver las distintas opciones que tenemos. También desmarcamos la casilla “Validar un certificado del
servidor” ya que no es necesaria en nuestro caso. Y comprobamos que la autenticación que se usa es EAP-
MSCHAP v2.
De esta forma, cuando el pc se conecte al switch éste iniciará el proceso de negociación y el equipo le
solicitará las credenciales al usuario o le enviará las usadas en el inicio de sesión.
Si el cliente no tiene instalado el certificado SSL del servidor es possible que nos salga un aviso de seguridad
puesto que el certificado que estamos usando es autofirmado, no está firmado por una entidad certificadora de
confianza.
En el caso de los switches 3com es necesario añadir manualmente los usuarios que se tengan que autenticar al
fichero users del servidor RADIUS, puesto que es requisito necesario en estos switches que el RADIUS
indique en su respuesta Access-Accept el nivel de acceso, que se especifica con el atributo de fabricante
3Com-User-Access-Level, como ya vimos anteriormente.
Así, al servidor le llega la siguiente petición:
(1) Received Access-Request Id 10 from 10.165.18.27:2048 to
10.165.60.6:1812 length 108
(1) User-Name = "usuario3com"
(1) User-Password = "1234"
(1) NAS-Port-Type = Virtual
(1) NAS-IP-Address = 10.165.18.27
(1) Service-Type = Administrative-User
(1) Framed-MTU = 1024
(1) Calling-Station-Id = "10.165.18.175"
(1) Message-Authenticator = 0x0139272f18f9a3e8cf0aa8e714848fe7
Y ésta es su respuesta:
(1) pap: User authenticated successfully
(1) [pap] = ok
(1) } # Auth-Type PAP = ok
(1) Sent Access-Accept Id 10 from 10.165.60.6:1812 to 10.165.18.27:2048
length 0
(1) 3Com-User-Access-Level = 3Com-Administrator
(1) Finished request
9.5.2 Cisco
Al intentar conectarnos al switch, éste nos pide usuario y contraseña:
Y su respuesta:
(12) Sent Access-Accept Id 21 from 10.165.60.6:1812 to 10.165.18.27:2048
length 0
(12) MS-MPPE-Recv-Key =
0x4f84853b538cf72ec007a16810c33408281008e0c93779cc93fe3c08e05b5664
(12) MS-MPPE-Send-Key =
0xa14855b2218e088fac0b5ba86095908c8ab5b186416bbe630e17084da23a5e07
(12) EAP-Message = 0x030a0004
(12) Message-Authenticator = 0x00000000000000000000000000000000
(12) User-Name = "radius1"
(12) Finished request
Como en este switch también se ha configurado el accounting (registro), vemos también la solicitud de
accounting que realiza el switch al servidor:
(14) Received Accounting-Request Id 22 from 10.165.18.27:2048 to
10.165.60.6:1813 length 90
(14) NAS-IP-Address = 10.165.18.27
(14) NAS-Port = 101
(14) Acct-Status-Type = Start
(14) Acct-Session-Id = "1.0.30d136"
(14) Service-Type = Framed-User
(14) NAS-Port-Type = Ethernet
(14) User-Name = "radius1"
(14) Calling-Station-Id = "70-5A-B6-95-BC-0B"
(14) Not sending reply to client.
(14) Finished request
Esta petición no llega al cliente conectado puesto que es algo que se establece sólamente entre el switch y el
servidor RADIUS. Y la respuesta a esta petición de accounting es:
(12) } # accounting = ok
(12) Sent Accounting-Response Id 38 from 10.165.60.6:1813 to
10.165.18.27:2048 length 0
(12) Finished request
Confirmando al switch que el registro se ha llevado a cabo.
62
Configuración y comprobación del resto de equipos
9.6.2 Cisco
Una vez que tenemos configurado la autenticación en el switch cuando conectamos un equipo, el switch envía
el Access-Request al servidor RADIUS y éste le responde con el Access-Accept si es un usuario válido.
Entonces la controladora hace la petición de usuario y contraseña al cliente final y vuelve a mandar un access-
request al RADIUS:
(8) Received Access-Request Id 250 from 10.165.18.216:32768 to
10.165.60.6:1812 length 362
(8) User-Name = "radius1"
(8) Calling-Station-Id = "10-b1-f8-af-15-08"
(8) Called-Station-Id = "00-24-14-e8-a8-40:wlan-802"
(8) NAS-Port = 29
(8) NAS-IP-Address = 10.165.18.216
(8) NAS-Identifier = "Controller-4"
(8) Airespace-Wlan-Id = 2
(8) Service-Type = Framed-User
(8) Framed-MTU = 1300
(8) NAS-Port-Type = Wireless-802.11
(8) Tunnel-Type:0 = VLAN
(8) Tunnel-Medium-Type:0 = IEEE-802
(8) Tunnel-Private-Group-Id:0 = "101"
(8) EAP-Message =
0x020300af1980000000a516030100a00100009c0303ae86225477b9cf0963f17dbb23114
e9aaa50ee13659dcae08b2ff8b0c9a861a000003ec02cc030009fc02bc02f009ecca9cca8
64
Configuración y comprobación del resto de equipos
c00ac024c014c0280039006bc009c023c013c02700330067c007c011009d009c0035003d0
02f003c00050004000a01
(8) State = 0xd5576227d4547b4071e54e5924bc02a3
(8) Message-Authenticator = 0x42f8762a0977157ea331f3eb1c8f445a
Ahora continúa el traspaso de mensajes necesario para el establecimiento que no incluyo por su longitud, y al
final del proceso el RADIUS envía el Access-Accept a la controladora y ésta ya puede ofrecer la conexión al
usuario:
(16) Sent Access-Accept Id 2 from 10.165.60.6:1812 to 10.165.18.216:32768
length 0
(16) MS-MPPE-Recv-Key =
0x4d850ea9a648ced559b2b91592a5ac642e8ffc601cc616d289deb8144d928f39
(16) MS-MPPE-Send-Key =
0x30726a6b4b8660bcc879e6abef269a2b17dfed541e0fb392e2f42f836e63318b
(16) EAP-Message = 0x030b0004
(16) Message-Authenticator = 0x00000000000000000000000000000000
(16) User-Name = "radius1"
66
BIBLIOGRAFÍA
Para la elaboración de este proyecto se han utilizado tanto libros como búsqueda de información online.
Libros:
Implementation Guide Switch 4400. 3Com
Radius for Unix Administrators. Lucent Technologies.
Radius Administrator's Guide. Livingston Enterprises.
Radius. Jonathan Hassell. O'Reilly.
Radius Protocol Security and best practices. Microsoft.
http://www.freeradius.org
http://web.mit.edu/kerberos
http://www.kerberos.org
http://www.cisco.com
http://www.microsoft.com
http://www.ietf.org
http://www.open1x.org
http://www.linuxjournal.com
http://sourceforge.net
http://www.openssl.org
67
ANEXO. FICHEROS DE CONFIGURACIÓN
A.1 Freeradius
En esta sección mostraremos los archivos de configuración completos del software Freeradius. Los ficheros
están ubicados en la ruta /usr/local/etc/raddb
A.1.1 clients.conf
#######################################################################
#
# Define RADIUS clients (usually a NAS, Access Point, etc.).
#
# Defines a RADIUS client.
#
# '127.0.0.1' is another name for 'localhost'. It is enabled by default,
# to allow testing of the server after an initial installation. If you
# are not going to be permitting RADIUS queries from localhost, we suggest
# that you delete, or comment out, this entry.
#
#
#
# Each client has a "short name" that is used to distinguish it from
# other clients.
#
# In version 1.x, the string after the word "client" was the IP
# address of the client. In 2.0, the IP address is configured via
# the "ipaddr" or "ipv6addr" fields. For compatibility, the 1.x
# format is still accepted.
#
client localhost {
68
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 69
#
# A note on DNS: We STRONGLY recommend using IP addresses
# rather than host names. Using host names means that the
# server will do DNS lookups when it starts, making it
# dependent on DNS. i.e. If anything goes wrong with DNS,
# the server won't start!
#
# The server also looks up the IP address from DNS once, and
# only once, when it starts. If the DNS record is later
# updated, the server WILL NOT see that update.
#
#
# The transport protocol.
#
# If unspecified, defaults to "udp", which is the traditional
# RADIUS transport. It may also be "tcp", in which case the
# server will accept connections from this client ONLY over TCP.
#
proto = *
#
# The shared secret use to "encrypt" and "sign" packets between
70
Anexo. Ficheros de configuración
# the NAS and FreeRADIUS. You MUST change this secret from the
# default, otherwise it's not a secret any more!
#
# The secret can be any string, up to 8k characters in length.
#
# Control codes can be entered vi octal encoding,
# e.g. "\101\102" == "AB"
# Quotation marks can be entered by escaping them,
# e.g. "foo\"bar"
#
# A note on security: The security of the RADIUS protocol
# depends COMPLETELY on this secret! We recommend using a
# shared secret that is composed of:
#
# upper case letters
# lower case letters
# numbers
#
# And is at LEAST 8 characters long, preferably 16 characters in
# length. The secret MUST be random, and should not be words,
# phrase, or anything else that is recognisable.
#
# The default secret below is only for testing, and should
# not be used in any real environment.
#
secret = testing123
#
# Old-style clients do not send a Message-Authenticator
# in an Access-Request. RFC 5080 suggests that all clients
# SHOULD include it in an Access-Request. The configuration
# item below allows the server to require it. If a client
# is required to include a Message-Authenticator and it does
# not, then the packet will be silently discarded.
#
# allowed values: yes, no
require_message_authenticator = no
#
# The short name is used as an alias for the fully qualified
# domain name, or the IP address.
#
# It is accepted for compatibility with 1.x, but it is no
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 71
#
# the following three fields are optional, but may be used by
# checkrad.pl for simultaneous use checks
#
#
# The nas_type tells 'checkrad.pl' which NAS-specific method to
# use to query the NAS for simultaneous use.
#
# Permitted NAS types are:
#
# cisco
# computone
# livingston
# juniper
# max40xx
# multitech
# netserver
# pathras
# patton
# portslave
# tc
# usrhiper
# other # for all other types
#
nas_type = other # localhost isn't usually a NAS...
#
# The following two configurations are for future use.
# The 'naspasswd' file is currently used to store the NAS
# login name and password, which is used by checkrad.pl
# when querying the NAS for simultaneous use.
#
# login = !root
# password = someadminpas
#
# As of 2.0, clients can also be tied to a virtual server.
# This is done by setting the "virtual_server" configuration
72
Anexo. Ficheros de configuración
#
# A pointer to the "home_server_pool" OR a "home_server"
# section that contains the CoA configuration for this
# client. For an example of a coa home server or pool,
# see raddb/sites-available/originate-coa
# coa_server = coa
#
# Response window for proxied packets. If non-zero,
# then the lower of (home, client) response_window
# will be used.
#
# i.e. it can be used to lower the response_window
# packets from one client to a home server. It cannot
# be used to raise the response_window.
#
# response_window = 10.0
#
# Connection limiting for clients using "proto = tcp".
#
# This section is ignored for clients sending UDP traffic
#
limit {
#
# Limit the number of simultaneous TCP connections from a client
#
# The default is 16.
# Setting this to 0 means "no limit"
max_connections = 16
#
# The lifetime, in seconds, of a TCP connection. After
# this lifetime, the connection will be closed.
#
# Setting this to 0 means "forever".
lifetime = 0
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 73
#
# The idle timeout, in seconds, of a TCP connection.
# If no packets have been received over the connection for
# this time, the connection will be closed.
#
# Setting this to 0 means "no timeout".
#
# We STRONGLY RECOMMEND that you set an idle timeout.
#
idle_timeout = 30
}
}
# IPv6 Client
client localhost_ipv6 {
ipv6addr = ::1
secret = testing123
}
client sw_cisco {
ipaddr = 10.165.18.27
secret = testing123
}
client sw_3com {
ipaddr = 10.165.18.27
secret = testing123
}
client controladora_wifi {
ipaddr = 10.165.18.216
74
Anexo. Ficheros de configuración
secret = testing123
}
#client example.org {
# ipaddr = radius.example.org
# secret = testing123
#}
#
# You can now specify one secret for a network of clients.
# When a client request comes in, the BEST match is chosen.
# i.e. The entry from the smallest possible network.
#
#client private-network-1 {
# ipaddr = 192.0.2.0/24
# secret = testing123-1
#}
#client private-network-2 {
# ipaddr = 198.51.100.0/24
# secret = testing123-2
#}
#######################################################################
#
# Per-socket client lists. The configuration entries are exactly
# the same as above, but they are nested inside of a section.
#
# You can have as many per-socket client lists as you have "listen"
# sections, or you can re-use a list among multiple "listen" sections.
#
# Un-comment this section, and edit a "listen" section to add:
# "clients = per_socket_clients". That IP address/port combination
# will then accept ONLY the clients listed in this section.
#
#clients per_socket_clients {
# client socket_client {
# ipaddr = 192.0.2.4
# secret = testing123
# }
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 75
#}
A.1.2 users
#
# Configuration file for the rlm_files module.
# Please see rlm_files(5) manpage for more information.
#
# This file contains authentication security and configuration
# information for each user. Accounting requests are NOT processed
# through this file. Instead, see 'accounting', in this directory.
#
# The first field is the user's name and can be up to
# 253 characters in length. This is followed (on the same line) with
# the list of authentication requirements for that user. This can
# include password, comm server name, comm server port number, protocol
# type (perhaps set by the "hints" file), and huntgroup name (set by
# the "huntgroups" file).
#
# If you are not sure why a particular reply is being sent by the
# server, then run the server in debugging mode (radiusd -X), and
# you will see which entries in this file are matched.
#
# When an authentication request is received from the comm server,
# these values are tested. Only the first match is used unless the
# "Fall-Through" variable is set to "Yes".
#
# A special user named "DEFAULT" matches on all usernames.
# You can have several DEFAULT entries. All entries are processed
# in the order they appear in this file. The first entry that
# matches the login-request will stop processing unless you use
# the Fall-Through variable.
#
# Indented (with the tab character) lines following the first
# line indicate the configuration values to be passed back to
# the comm server to allow the initiation of a user session.
# This can include things like the PPP configuration values
# or the host to log the user onto.
#
# You can include another `users' file with `$INCLUDE users.other'
#
76
Anexo. Ficheros de configuración
#
# Deny access for a specific user. Note that this entry MUST
# be before any other 'Auth-Type' attribute which results in the user
# being authenticated.
#
# Note that there is NO 'Fall-Through' attribute, so the user will not
# be given any additional resources.
#
#lameuser Auth-Type := Reject
# Reply-Message = "Your account has been disabled."
#
# Deny access for a group of users.
#
# Note that there is NO 'Fall-Through' attribute, so the user will not
# be given any additional resources.
#
#DEFAULT Group == "disabled", Auth-Type := Reject
# Reply-Message = "Your account has been disabled."
#
#
# This is a complete entry for "steve". Note that there is no Fall-Through
# entry so that no DEFAULT entry will be used, and the user will NOT
# get any attributes in addition to the ones listed here.
#
#steve Cleartext-Password := "testing"
# Service-Type = Framed-User,
# Framed-Protocol = PPP,
# Framed-IP-Address = 172.16.3.33,
# Framed-IP-Netmask = 255.255.255.0,
# Framed-Routing = Broadcast-Listen,
# Framed-Filter-Id = "std.ppp",
# Framed-MTU = 1500,
# Framed-Compression = Van-Jacobsen-TCP-IP
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 77
#
# The canonical testing user which is in most of the
# examples.
#
#bob Cleartext-Password := "hello"
# Reply-Message := "Hello, %{User-Name}"
#
#
# This is an entry for a user with a space in their name.
# Note the double quotes surrounding the name. If you have
# users with spaces in their names, you must also change
# the "filter_username" policy to allow spaces.
#
# See raddb/policy.d/filter, filter_username {} section.
#
#"John Doe" Cleartext-Password := "hello"
# Reply-Message = "Hello, %{User-Name}"
78
Anexo. Ficheros de configuración
#
# Dial user back and telnet to the default host for that port
#
#Deg Cleartext-Password := "ge55ged"
# Service-Type = Callback-Login-User,
# Login-IP-Host = 0.0.0.0,
# Callback-Number = "9,5551212",
# Login-Service = Telnet,
# Login-TCP-Port = Telnet
#
# Another complete entry. After the user "dialbk" has logged in, the
# connection will be broken and the user will be dialed back after which
# he will get a connection to the host "timeshare1".
#
#dialbk Cleartext-Password := "callme"
# Service-Type = Callback-Login-User,
# Login-IP-Host = timeshare1,
# Login-Service = PortMaster,
# Callback-Number = "9,1-800-555-1212"
#
# user "swilson" will only get a static IP number if he logs in with
# a framed protocol on a terminal server in Alphen (see the huntgroups file).
#
# Note that by setting "Fall-Through", other attributes will be added from
# the following DEFAULT entries
#
#swilson Service-Type == Framed-User, Huntgroup-Name == "alphen"
# Framed-IP-Address = 192.0.2.65,
# Fall-Through = Yes
#
# If the user logs in as 'username.shell', then authenticate them
# using the default method, give them shell access, and stop processing
# the rest of the file.
#
#DEFAULT Suffix == ".shell"
# Service-Type = Login-User,
# Login-Service = Telnet,
# Login-IP-Host = your.shell.machine
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 79
#
# The rest of this file contains the several DEFAULT entries.
# DEFAULT entries match with all login names.
# Note that DEFAULT entries can also Fall-Through (see first entry).
# A name-value pair from a DEFAULT entry will _NEVER_ override
# an already existing name-value pair.
#
#
# Set up different IP address pools for the terminal servers.
# Note that the "+" behind the IP address means that this is the "base"
# IP address. The Port-Id (S0, S1 etc) will be added to it.
#
#DEFAULT Service-Type == Framed-User, Huntgroup-Name == "alphen"
# Framed-IP-Address = 192.0.2.32+,
# Fall-Through = Yes
#
# Sample defaults for all framed connections.
#
#DEFAULT Service-Type == Framed-User
# Framed-IP-Address = 255.255.255.254,
# Framed-MTU = 576,
# Service-Type = Framed-User,
# Fall-Through = Yes
#
# Default for PPP: dynamic IP address, PPP mode, VJ-compression.
# NOTE: we do not use Hint = "PPP", since PPP might also be auto-detected
# by the terminal server in which case there may not be a "P" suffix.
# The terminal server sends "Framed-Protocol = PPP" for auto PPP.
#
DEFAULT Framed-Protocol == PPP
Framed-Protocol = PPP,
Framed-Compression = Van-Jacobson-TCP-IP
#
# Default for CSLIP: dynamic IP address, SLIP mode, VJ-compression.
#
DEFAULT Hint == "CSLIP"
80
Anexo. Ficheros de configuración
Framed-Protocol = SLIP,
Framed-Compression = Van-Jacobson-TCP-IP
#
# Default for SLIP: dynamic IP address, SLIP mode.
#
DEFAULT Hint == "SLIP"
Framed-Protocol = SLIP
#
# Last default: rlogin to our main server.
#
#DEFAULT
# Service-Type = Login-User,
# Login-Service = Rlogin,
# Login-IP-Host = shellbox.ispdomain.com
# #
# # Last default: shell on the local terminal server.
# #
# DEFAULT
# Service-Type = Administrative-User
#########################################################
# You should add test accounts to the TOP of this file! #
# See the example user "bob" above. #
#########################################################
A.1.3 ./mods-enabled/eap
##
## $Id: f67cbdbff9b6560cec9f68da1adb82b59723d2ef $
#######################################################################
#
# Whatever you do, do NOT set 'Auth-Type := EAP'. The server
# is smart enough to figure this out on its own. The most
# common side effect of setting 'Auth-Type := EAP' is that the
# users then cannot use ANY other authentication method.
#
eap {
# Invoke the default supported EAP type when
# EAP-Identity response is received.
#
# The incoming EAP messages DO NOT specify which EAP
# type they will be using, so it MUST be set here.
#
# For now, only one default EAP type may be used at a time.
#
# If the EAP-Type attribute is set by another module,
# then that EAP type takes precedence over the
# default type configured here.
default_eap_type = peap
# There are many EAP types, but the server has support
# for only a limited subset. If the server receives
# a request for an EAP type it does not support, then
# it normally rejects the request. By setting this
# configuration to "yes", you can tell the server to
# instead keep processing the request. Another module
# MUST then be configured to proxy the request to
# another RADIUS server which supports that EAP type.
#
# If another module is NOT configured to handle the
# request, then the request will still end up being
# rejected.
82
Anexo. Ficheros de configuración
ignore_unknown_eap_types = no
#
# Help prevent DoS attacks by limiting the number of
# sessions that the server is tracking. For simplicity,
# this is taken from the "max_requests" directive in
# radiusd.conf.
max_sessions = ${max_requests}
# Supported EAP-types
#
# We do NOT recommend using EAP-MD5 authentication
# for wireless connections. It is insecure, and does
# not provide for dynamic WEP keys.
#
md5 {
}
#
# EAP-pwd -- secure password-based authentication
#
# pwd {
# group = 19
#
# server_id = theserver@example.com
# Cisco LEAP
#
# We do not recommend using LEAP in new deployments. See:
# http://www.securiteam.com/tools/5TP012ACKE.html
#
# Cisco LEAP uses the MS-CHAP algorithm (but not
# the MS-CHAP attributes) to perform it's authentication.
#
# As a result, LEAP *requires* access to the plain-text
# User-Password, or the NT-Password attributes.
# 'System' authentication is impossible with LEAP.
#
leap {
}
#
# If OpenSSL supports TLS-PSK, then we can use
# a PSK identity and (hex) password. When the
# following two configuration items are specified,
# then certificate-based configuration items are
# not allowed. e.g.:
#
# private_key_password
# private_key_file
# certificate_file
# ca_file
# ca_path
#
86
Anexo. Ficheros de configuración
#
# For DH cipher suites to work, you have to
# run OpenSSL to create the DH file first:
#
# openssl dhparam -out certs/dh 2048
#
dh_file = ${certdir}/dh
#
# If your system doesn't have /dev/urandom,
# you will need to create this file, and
# periodically change its contents.
#
# For security reasons, FreeRADIUS doesn't
# write to files in its configuration
# directory.
#
# random_file = /dev/urandom
#
# This can never exceed the size of a RADIUS
# packet (4096 bytes), and is preferably half
# that, to accommodate other attributes in
# RADIUS packet. On most APs the MAX packet
# length is configured between 1500 - 1600
# In these cases, fragment size should be
# 1024 or less.
#
# fragment_size = 1024
ca_path = ${cadir}
#
# If check_cert_issuer is set, the value will
# be checked against the DN of the issuer in
# the client certificate. If the values do not
# match, the certificate verification will fail,
# rejecting the user.
#
# This check can be done more generally by checking
# the value of the TLS-Client-Cert-Issuer attribute.
# This check can be done via any mechanism you
# choose.
#
# check_cert_issuer = "/C=GB/ST=Berkshire/L=Newbury/O=My Company Ltd"
#
# If check_cert_cn is set, the value will
# be xlat'ed and checked against the CN
88
Anexo. Ficheros de configuración
#
# You can selectively disable TLS versions for
# compatability with old client devices.
#
# If your system has OpenSSL 1.1.0 or greater, do NOT
# use these. Instead, set tls_min_version and
# tls_max_version.
#
# disable_tlsv1_2 = no
# disable_tlsv1_1 = no
# disable_tlsv1 = no
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 89
#
# Set min / max TLS version. Mainly for Debian
# "trusty", which disables older versions of TLS, and
# requires the application to manually enable them.
#
# If you are running Debian trusty, you should set
# these options, otherwise older clients will not be
# able to connect.
#
# Allowed values are "1.0", "1.1", and "1.2".
#
# The values must be in quotes.
#
# tls_min_version = "1.0"
# tls_max_version = "1.2"
#
# Elliptical cryptography configuration
#
# Only for OpenSSL >= 0.9.8.f
#
ecdh_curve = "prime256v1"
#
# Session resumption / fast reauthentication
# cache.
#
# The cache contains the following information:
#
# session Id - unique identifier, managed by SSL
# User-Name - from the Access-Accept
# Stripped-User-Name - from the Access-Request
# Cached-Session-Policy - from the Access-Accept
#
# The "Cached-Session-Policy" is the name of a
# policy which should be applied to the cached
# session. This policy can be used to assign
# VLANs, IP addresses, etc. It serves as a useful
# way to re-apply the policy from the original
# Access-Accept to the subsequent Access-Accept
# for the cached session.
#
# On session resumption, these attributes are
90
Anexo. Ficheros de configuración
#
# Lifetime of the cached entries, in hours. The sessions will be
# deleted/invalidated after this time.
#
lifetime = 24 # hours
#
# Internal "name" of the session cache. Used to
# distinguish which TLS context sessions belong to.
#
# The server will generate a random value if unset.
# This will change across server restart so you MUST
# set the "name" if you want to persist sessions (see
# below).
#
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 91
#
# Simple directory-based storage of sessions.
# Two files per session will be written, the SSL
# state and the cached VPs. This will persist session
# across server restarts.
#
# The default directory is ${logdir}, for historical
# reasons. You should ${db_dir} instead. And check
# the value of db_dir in the main radiusd.conf file.
# It should not point to ${raddb}
#
# The server will need write perms, and the directory
# should be secured from anyone else. You might want
# a script to remove old files from here periodically:
#
# find ${logdir}/tlscache -mtime +2 -exec rm -f {} \;
#
# This feature REQUIRES "name" option be set above.
#
#persist_dir = "${logdir}/tlscache"
}
#
# As of version 2.1.10, client certificates can be
# validated via an external command. This allows
# dynamic CRLs or OCSP to be used.
#
# This configuration is commented out in the
# default configuration. Uncomment it, and configure
# the correct paths below to enable it.
#
# If OCSP checking is enabled, and the OCSP checks fail,
# the verify section is not run.
#
# If OCSP checking is disabled, the verify section is
# run on successful certificate validation.
#
verify {
# If the OCSP checks succeed, the verify section
# is run to allow additional checks.
#
# If you want to skip verify on OCSP success,
92
Anexo. Ficheros de configuración
#
# OCSP Configuration
# Certificates can be verified against an OCSP
# Responder. This makes it possible to immediately
# revoke certificates without the distribution of
# new Certificate Revocation Lists (CRLs).
#
ocsp {
#
# Enable it. The default is "no".
# Deleting the entire "ocsp" subsection
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 93
#
# The OCSP Responder URL can be automatically
# extracted from the certificate in question.
# To override the OCSP Responder URL set
# "override_cert_url = yes".
#
override_cert_url = yes
#
# If the OCSP Responder address is not extracted from
# the certificate, the URL can be defined here.
#
url = "http://127.0.0.1/ocsp/"
#
# If the OCSP Responder can not cope with nonce
# in the request, then it can be disabled here.
#
# For security reasons, disabling this option
# is not recommended as nonce protects against
# replay attacks.
#
# Note that Microsoft AD Certificate Services OCSP
# Responder does not enable nonce by default. It is
# more secure to enable nonce on the responder than
# to disable it in the query here.
# See http://technet.microsoft.com/en-
us/library/cc770413%28WS.10%29.aspx
#
# use_nonce = yes
#
# Number of seconds before giving up waiting
# for OCSP response. 0 uses system default.
#
# timeout = 0
#
# Normally an error in querying the OCSP
# responder (no response from server, server did
94
Anexo. Ficheros de configuración
## EAP-TLS
#
# As of Version 3.0, the TLS configuration for TLS-based
# EAP types is above in the "tls-config" section.
#
tls {
# Point to the common TLS configuration
tls = tls-common
#
# As part of checking a client certificate, the EAP-TLS
# sets some attributes such as TLS-Client-Cert-CN. This
# virtual server has access to these attributes, and can
# be used to accept or reject the request.
#
# virtual_server = check-eap-tls
}
## EAP-TTLS
#
# The TTLS module implements the EAP-TTLS protocol,
# which can be described as EAP inside of Diameter,
# inside of TLS, inside of EAP, inside of RADIUS...
#
# Surprisingly, it works quite well.
#
ttls {
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 95
#
# As of version 3.0.5, this configuration item
# is deprecated. Instead, you should use
#
# update outer.session-state {
# ...
#
# }
96
Anexo. Ficheros de configuración
#
# This will cache attributes for the final Access-Accept.
#
# The reply attributes sent to the NAS are usually
# based on the name of the user 'outside' of the
# tunnel (usually 'anonymous'). If you want to send
# the reply attributes based on the user name inside
# of the tunnel, then set this configuration entry to
# 'yes', and the reply to the NAS will be taken from
# the reply to the tunneled request.
#
# allowed values: {no, yes}
#
use_tunneled_reply = no
#
# The inner tunneled request can be sent
# through a virtual server constructed
# specifically for this purpose.
#
# If this entry is commented out, the inner
# tunneled request will be sent through
# the virtual server that processed the
# outer requests.
#
virtual_server = "inner-tunnel"
#
# Unlike EAP-TLS, EAP-TTLS does not require a client
# certificate. However, you can require one by setting the
# following option. You can also override this option by
# setting
#
# EAP-TLS-Require-Client-Cert = Yes
#
# in the control items for a request.
#
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 97
## EAP-PEAP
#
##################################################
#
# !!!!! WARNINGS for Windows compatibility !!!!!
#
##################################################
#
# If you see the server send an Access-Challenge,
# and the client never sends another Access-Request,
# then
#
# STOP!
#
# The server certificate has to have special OID's
# in it, or else the Microsoft clients will silently
# fail. See the "scripts/xpextensions" file for
# details, and the following page:
#
# http://support.microsoft.com/kb/814394/en-us
#
# For additional Windows XP SP2 issues, see:
#
# http://support.microsoft.com/kb/885453/en-us
#
#
# If is still doesn't work, and you're using Samba,
# you may be encountering a Samba bug. See:
#
# https://bugzilla.samba.org/show_bug.cgi?id=6563
#
# Note that we do not necessarily agree with their
# explanation... but the fix does appear to work.
#
##################################################
98
Anexo. Ficheros de configuración
#
# The tunneled EAP session needs a default EAP type
# which is separate from the one for the non-tunneled
# EAP module. Inside of the TLS/PEAP tunnel, we
# recommend using EAP-MS-CHAPv2.
#
peap {
# Which tls-config section the TLS negotiation parameters
# are in - see EAP-TLS above for an explanation.
#
# In the case that an old configuration from FreeRADIUS
# v2.x is being used, all the options of the tls-config
# section may also appear instead in the 'tls' section
# above. If that is done, the tls= option here (and in
# tls above) MUST be commented out.
#
tls = tls-common
#
# As of version 3.0.5, this configuration item
# is deprecated. Instead, you should use
#
# update outer.session-state {
# ...
#
# }
#
# This will cache attributes for the final Access-Accept.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 99
#
use_tunneled_reply = no
#
# The inner tunneled request can be sent
# through a virtual server constructed
# specifically for this purpose.
#
# If this entry is commented out, the inner
# tunneled request will be sent through
# the virtual server that processed the
# outer requests.
#
virtual_server = "inner-tunnel"
#
# The SoH reply will be turned into a request which
# can be sent to a specific virtual server:
#
# soh_virtual_server = "soh-server"
#
# Unlike EAP-TLS, PEAP does not require a client certificate.
# However, you can require one by setting the following
# option. You can also override this option by setting
#
# EAP-TLS-Require-Client-Cert = Yes
#
# in the control items for a request.
#
# Note that the majority of supplicants do not support using a
100
Anexo. Ficheros de configuración
#
# This takes no configuration.
#
# Note that it is the EAP MS-CHAPv2 sub-module, not
# the main 'mschap' module.
#
# Note also that in order for this sub-module to work,
# the main 'mschap' module MUST ALSO be configured.
#
# This module is the *Microsoft* implementation of MS-CHAPv2
# in EAP. There is another (incompatible) implementation
# of MS-CHAPv2 in EAP by Cisco, which FreeRADIUS does not
# currently support.
#
mschapv2 {
# Prior to version 2.1.11, the module never
# sent the MS-CHAP-Error message to the
# client. This worked, but it had issues
# when the cached password was wrong. The
# server *should* send "E=691 R=0" to the
# client, which tells it to prompt the user
# for a new password.
#
# The default is to behave as in 2.1.10 and
# earlier, which is known to work. If you
# set "send_error = yes", then the error
# message will be sent back to the client.
# This *may* help some clients work better,
# but *may* also cause other clients to stop
# working.
#
# send_error = no
# identity = "FreeRADIUS"
}
## EAP-FAST
#
# The FAST module implements the EAP-FAST protocol
#
# fast {
# Point to the common TLS configuration
#
# tls = tls-common
#
# If 'cipher_list' is set here, it will over-ride the
# 'cipher_list' configuration from the 'tls-common'
# configuration. The EAP-FAST module has it's own
# over-ride for 'cipher_list' because the
# specifications mandata a different set of ciphers
# than are used by the other EAP methods.
#
# cipher_list though must include "ADH" for anonymous provisioning.
# This is not as straight forward as appending "ADH" alongside
# "DEFAULT" as "DEFAULT" contains "!aNULL" so instead it is
# recommended "ALL:!EXPORT:!eNULL:!SSLv2" is used
#
# Note - for OpenSSL 1.1.0 and above you may need
# to add ":@SECLEVEL=0"
#
# cipher_list = "ALL:!EXPORT:!eNULL:!SSLv2"
#
# This value MUST be secret, and MUST be generated using
# a secure method, such as via 'openssl rand -hex 32'
#
# pac_opaque_key = "0123456789abcdef0123456789ABCDEF"
A.1.4 radiusd.conf
######################################################################
#
# Read "man radiusd" before editing this file. See the section
# titled DEBUGGING. It outlines a method where you can quickly
# obtain the configuration you want, without running into
# trouble.
#
# Run the server in debugging mode, and READ the output.
#
# $ radiusd -X
#
# We cannot emphasize this point strongly enough. The vast
# majority of problems can be solved by carefully reading the
# debugging output, which includes warnings about common issues,
# and suggestions for how they may be fixed.
#
# There may be a lot of output, but look carefully for words like:
# "warning", "error", "reject", or "failure". The messages there
# will usually be enough to guide you to a solution.
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 103
#
# If you are going to ask a question on the mailing list, then
# explain what you are trying to do, and include the output from
# debugging mode (radiusd -X). Failure to do so means that all
# of the responses to your question will be people telling you
# to "post the output of radiusd -X".
######################################################################
#
# The location of other config files and logfiles are declared
# in this file.
#
# Also general configuration for modules can be done in this
# file, it is exported through the API to modules that ask for
# it.
#
# See "man radiusd.conf" for documentation on the format of this
# file. Note that the individual configuration items are NOT
# documented in that "man" page. They are only documented here,
# in the comments.
#
# The "unlang" policy language can be used to create complex
# if / else policies. See "man unlang" for details.
#
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
#
# name of the running server. See also the "-n" command-line option.
name = radiusd
#
# libdir: Where to find the rlm_* modules.
#
# This should be automatically set at configuration time.
#
# If the server builds and installs, but fails at execution time
# with an 'undefined symbol' error, then you can use the libdir
# directive to work around the problem.
#
# The cause is usually that a library has been installed on your
# system in a place where the dynamic linker CANNOT find it. When
# executing as root (or another user), your personal environment MAY
# be set up to allow the dynamic linker to find the library. When
# executing as a daemon, FreeRADIUS MAY NOT have the same
# personalized configuration.
#
# To work around the problem, find out which library contains that symbol,
# and add the directory containing that library to the end of 'libdir',
# with a colon separating the directory names. NO spaces are allowed.
#
# e.g. libdir = /usr/local/lib:/opt/package/lib
#
# You can also try setting the LD_LIBRARY_PATH environment variable
# in a script which starts the server.
#
# If that does not work, then you can re-configure and re-build the
# server to NOT use shared libraries, via:
#
# ./configure --disable-shared
# make
# make install
#
libdir = ${exec_prefix}/lib
#
# correct_escapes: use correct backslash escaping
#
# Prior to version 3.0.5, the handling of backslashes was a little
# awkward, i.e. "wrong". In some cases, to get one backslash into
# a regex, you had to put 4 in the config files.
#
# Version 3.0.5 fixes that. However, for backwards compatibility,
# the new method of escaping is DISABLED BY DEFAULT. This means
# that upgrading to 3.0.5 won't break your configuration.
#
# If you don't have double backslashes (i.e. \\) in your configuration,
# this won't matter to you. If you do have them, fix that to use only
# one backslash, and then set "correct_escapes = true".
#
# You can check for this by doing:
#
# $ grep '\\\\' $(find raddb -type f -print)
#
correct_escapes = true
# re-send the request, and the server will respond quickly with the
# cached reply.
#
# If this value is set too low, then duplicate requests from the NAS
# MAY NOT be detected, and will instead be handled as separate requests.
#
# If this value is set too high, then the server will cache too many
# requests, and some new requests may get blocked. (See 'max_requests'.)
#
# Useful range of values: 2 to 10
#
cleanup_delay = 5
# with it.
#
# allowed values: {no, yes}
#
hostname_lookups = no
#
# Logging section. The various "log_*" configuration items
# will eventually be moved here.
#
log {
#
# Destination for log messages. This can be one of:
#
# files - log to "file", as defined below.
# syslog - to syslog (see also the "syslog_facility", below.
# stdout - standard output
# stderr - standard error.
#
# The command-line option "-X" over-rides this option, and forces
# logging to go to stdout.
#
destination = files
#
# Highlight important messages sent to stderr and stdout.
#
# Option will be ignored (disabled) if output if TERM is not
# an xterm or output is not to a TTY.
#
colourise = yes
#
# The logging messages for the server are appended to the
# tail of this file if destination == "files"
#
# If the server is running in debugging mode, this file is
# NOT used.
#
file = ${logdir}/radius.log
#
# Which syslog facility to use, if ${destination} == "syslog"
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 109
#
# The exact values permitted here are OS-dependent. You probably
# don't want to change this.
#
syslog_facility = daemon
# SECURITY CONFIGURATION
#
# There may be multiple methods of attacking on the server. This
# section holds the configuration items which minimize the impact
# of those attacks
#
security {
# chroot: directory where the server does "chroot".
#
# The chroot is done very early in the process of starting
# the server. After the chroot has been performed it
# switches to the "user" listed below (which MUST be
# specified). If "group" is specified, it switches to that
# group, too. Any other groups listed for the specified
# "user" in "/etc/group" are also added as part of this
# process.
#
# The current working directory (chdir / cd) is left
# *outside* of the chroot until all of the modules have been
# initialized. This allows the "raddb" directory to be left
# outside of the chroot. Once the modules have been
# initialized, it does a "chdir" to ${logdir}. This means
# that it should be impossible to break out of the chroot.
#
# If you are worried about security issues related to this
# use of chdir, then simply ensure that the "raddb" directory
# is inside of the chroot, end be sure to do "cd raddb"
# BEFORE starting the server.
#
# If the server is statically linked, then the only files
# that have to exist in the chroot are ${run_dir} and
# ${logdir}. If you do the "cd raddb" as discussed above,
# then the "raddb" directory has to be inside of the chroot
# directory, too.
#
# chroot = /path/to/chroot/directory
# user/group: The name (or #number) of the user/group to run radiusd as.
#
# If these are commented out, the server will run as the
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 111
#
# max_attributes: The maximum number of attributes
# permitted in a RADIUS packet. Packets which have MORE
# than this number of attributes in them will be dropped.
#
# If this number is set too low, then no RADIUS packets
# will be accepted.
#
# If this number is set too high, then an attacker may be
112
Anexo. Ficheros de configuración
#
# reject_delay: When sending an Access-Reject, it can be
# delayed for a few seconds. This may help slow down a DoS
# attack. It also helps to slow down people trying to brute-force
# crack a users password.
#
# Setting this number to 0 means "send rejects immediately"
#
# If this number is set higher than 'cleanup_delay', then the
# rejects will be sent at 'cleanup_delay' time, when the request
# is deleted from the internal cache of requests.
#
# As of Version 3.0.5, "reject_delay" has sub-second resolution.
# e.g. "reject_delay = 1.4" seconds is possible.
#
# Useful ranges: 1 to 5
reject_delay = 1
#
# status_server: Whether or not the server will respond
# to Status-Server requests.
#
# When sent a Status-Server message, the server responds with
# an Access-Accept or Accounting-Response packet.
#
# This is mainly useful for administrators who want to "ping"
# the server, without adding test users, or creating fake
# accounting packets.
#
# It's also useful when a NAS marks a RADIUS server "dead".
# The NAS can periodically "ping" the server with a Status-Server
# packet. If the server responds, it must be alive, and the
# NAS can start using it for real requests.
#
# See also raddb/sites-available/status
#
status_server = yes
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 113
#
# allow_vulnerable_openssl: Allow the server to start with
# versions of OpenSSL known to have critical vulnerabilities.
#
# This check is based on the version number reported by libssl
# and may not reflect patches applied to libssl by
# distribution maintainers.
#
allow_vulnerable_openssl = no
}
# PROXY CONFIGURATION
#
# proxy_requests: Turns proxying of RADIUS requests on or off.
#
# The server has proxying turned on by default. If your system is NOT
# set up to proxy requests to another server, then you can turn proxying
# off here. This will save a small amount of resources on the server.
#
# If you have proxying turned off, and your configuration files say
# to proxy a request, then an error message will be logged.
#
# To disable proxying, change the "yes" to "no", and comment the
# $INCLUDE line.
#
# allowed values: {no, yes}
#
proxy_requests = yes
$INCLUDE proxy.conf
# CLIENTS CONFIGURATION
#
# Client configuration is defined in "clients.conf".
#
# The 'clients.conf' file contains all of the information from the old
# 'clients' and 'naslist' configuration files. We recommend that you
# do NOT use 'client's or 'naslist', although they are still
# supported.
#
# Anything listed in 'clients.conf' will take precedence over the
# information from the old-style configuration files.
114
Anexo. Ficheros de configuración
#
$INCLUDE clients.conf
#
# For more information, see 'max_request_time', above.
#
max_servers = 32
######################################################################
#
# SNMP notifications. Uncomment the following line to enable
# snmptraps. Note that you MUST also configure the full path
# to the "snmptrap" command in the "trigger.conf" file.
#
#$INCLUDE trigger.conf
# MODULE CONFIGURATION
#
# The names and configuration of each module is located in this section.
#
# After the modules are defined here, they may be referred to by name,
# in other sections of this configuration file.
#
modules {
#
# Each module has a configuration as follows:
#
# name [ instance ] {
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 117
# config_item = value
# ...
# }
#
# The 'name' is used to load the 'rlm_name' library
# which implements the functionality of the module.
#
# The 'instance' is optional. To have two different instances
# of a module, it first must be referred to by 'name'.
# The different copies of the module are then created by
# inventing two 'instance' names, e.g. 'instance1' and 'instance2'
#
# The instance names can then be used in later configuration
# INSTEAD of the original 'name'. See the 'radutmp' configuration
# for an example.
#
#
# As of 3.0, modules are in mods-enabled/. Files matching
# the regex /[a-zA-Z0-9_.]+/ are loaded. The modules are
# initialized ONLY if they are referenced in a processing
# section, such as authorize, authenticate, accounting,
# pre/post-proxy, etc.
#
$INCLUDE mods-enabled/
}
# Instantiation
#
# This section orders the loading of the modules. Modules
# listed here will get loaded BEFORE the later sections like
# authorize, authenticate, etc. get examined.
#
# This section is not strictly needed. When a section like
# authorize refers to a module, it's automatically loaded and
# initialized. However, some modules may not be listed in any
# of the following sections, so they can be listed here.
#
# Also, listing modules here ensures that you have control over
# the order in which they are initialized. If one module needs
# something defined by another module, you can list them in order
# here, and ensure that the configuration will be OK.
#
# After the modules listed here have been loaded, all of the modules
118
Anexo. Ficheros de configuración
######################################################################
#
# Policies are virtual modules, similar to those defined in the
# "instantiate" section above.
#
# Defining a policy in one of the policy.d files means that it can be
# referenced in multiple places as a *name*, rather than as a series of
# conditions to match, and actions to take.
#
# Policies are something like subroutines in a normal language, but
# they cannot be called recursively. They MUST be defined in order.
# If policy A calls policy B, then B MUST be defined before A.
#
######################################################################
policy {
$INCLUDE policy.d/
}
######################################################################
#
# Load virtual servers.
#
# This next $INCLUDE line loads files in the directory that
# match the regular expression: /[a-zA-Z0-9_.]+/
#
# It allows you to define new virtual servers simply by placing
# a file into the raddb/sites-enabled/ directory.
#
$INCLUDE sites-enabled/
######################################################################
120
Anexo. Ficheros de configuración
#
# All of the other configuration sections like "authorize {}",
# "authenticate {}", "accounting {}", have been moved to the
# the file:
#
# raddb/sites-available/default
#
# This is the "default" virtual server that has the same
# configuration as in version 1.0.x and 1.1.x. The default
# installation enables this virtual server. You should
# edit it to create policies for your local site.
#
# For more documentation on virtual servers, see:
#
# raddb/sites-available/README
#
######################################################################
A.1.5 ./sites-enabled/default
######################################################################
#
# As of 2.0.0, FreeRADIUS supports virtual hosts using the
# "server" section, and configuration directives.
#
# Virtual hosts should be put into the "sites-available"
# directory. Soft links should be created in the "sites-enabled"
# directory to these files. This is done in a normal installation.
#
# If you are using 802.1X (EAP) authentication, please see also
# the "inner-tunnel" virtual server. You will likely have to edit
# that, too, for authentication to work.
#
# $Id: 3616050e7625eb6b5e2ba44782fcb737b2ae6136 $
#
######################################################################
#
# Read "man radiusd" before editing this file. See the section
# titled DEBUGGING. It outlines a method where you can quickly
# obtain the configuration you want, without running into
# trouble. See also "man unlang", which documents the format
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 121
# of this file.
#
# This configuration is designed to work in the widest possible
# set of circumstances, with the widest possible number of
# authentication methods. This means that in general, you should
# need to make very few changes to this file.
#
# The best way to configure the server for your local system
# is to CAREFULLY edit this file. Most attempts to make large
# edits to this file will BREAK THE SERVER. Any edits should
# be small, and tested by running the server with "radiusd -X".
# Once the edits have been verified to work, save a copy of these
# configuration files somewhere. (e.g. as a "tar" file). Then,
# make more edits, and test, as above.
#
# There are many "commented out" references to modules such
# as ldap, sql, etc. These references serve as place-holders.
# If you need the functionality of that module, then configure
# it in radiusd.conf, and un-comment the references to it in
# this file. In most cases, those small changes will result
# in the server being able to connect to the DB, and to
# authenticate users.
#
######################################################################
server default {
#
# If you want the server to listen on additional addresses, or on
# additional ports, you can use multiple "listen" sections.
#
# Each section make the server listen for only one type of packet,
# therefore authentication and accounting have to be configured in
# different sections.
#
# The server ignore all "listen" section if you are using '-i' and '-p'
# on the command line.
#
listen {
# Type of packets to listen for.
# Allowed values are:
# auth listen for authentication packets
# acct listen for accounting packets
# proxy IP to use for sending proxied packets
# detail Read from the detail file. For examples, see
122
Anexo. Ficheros de configuración
# raddb/sites-available/copy-acct-to-home-server
# status listen for Status-Server packets. For examples,
# see raddb/sites-available/status
# coa listen for CoA-Request and Disconnect-Request
# packets. For examples, see the file
# raddb/sites-available/coa
#
type = auth
# Note: "type = proxy" lets you control the source IP used for
# proxying packets, with some limitations:
#
# * A proxy listener CANNOT be used in a virtual server section.
# * You should probably set "port = 0".
# * Any "clients" configuration will be ignored.
#
# See also proxy.conf, and the "src_ipaddr" configuration entry
# in the sample "home_server" section. When you specify the
# source IP address for packets sent to a home server, the
# proxy listeners are automatically created.
#
# Connection limiting for sockets with "proto = tcp".
#
# This section is ignored for other kinds of sockets.
#
limit {
#
# Limit the number of simultaneous TCP connections to the socket
#
# The default is 16.
# Setting this to 0 means "no limit"
max_connections = 16
#
# The lifetime, in seconds, of a TCP connection. After
# this lifetime, the connection will be closed.
#
# Setting this to 0 means "forever".
lifetime = 0
#
# The idle timeout, in seconds, of a TCP connection.
# If no packets have been received over the connection for
# this time, the connection will be closed.
#
# Setting this to 0 means "no timeout".
#
# We STRONGLY RECOMMEND that you set an idle timeout.
#
idle_timeout = 30
}
}
#
# This second "listen" section is for listening on the accounting
# port, too.
#
listen {
ipaddr = *
# ipv6addr = ::
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 125
port = 0
type = acct
# interface = eth0
# clients = per_socket_clients
limit {
# The number of packets received can be rate limited via the
# "max_pps" configuration item. When it is set, the server
# tracks the total number of packets received in the previous
# second. If the count is greater than "max_pps", then the
# new packet is silently discarded. This helps the server
# deal with overload situations.
#
# The packets/s counter is tracked in a sliding window. This
# means that the pps calculation is done for the second
# before the current packet was received. NOT for the current
# wall-clock second, and NOT for the previous wall-clock second.
#
# Useful values are 0 (no limit), or 100 to 10000.
# Values lower than 100 will likely cause the server to ignore
# normal traffic. Few systems are capable of handling more than
# 10K packets/s.
#
# It is most useful for accounting systems. Set it to 50%
# more than the normal accounting load, and you can be sure that
# the server will never get overloaded
#
# max_pps = 0
# Only for "proto = tcp". These are ignored for "udp" sockets.
#
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
}
}
# IPv6 versions of the above - read their full config to understand options
listen {
type = auth
ipv6addr = :: # any. ::1 == localhost
port = 0
# interface = eth0
# clients = per_socket_clients
126
Anexo. Ficheros de configuración
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipv6addr = ::
port = 0
type = acct
# interface = eth0
# clients = per_socket_clients
limit {
# max_pps = 0
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
}
}
#
# Some broken equipment sends passwords with embedded zeros.
# i.e. the debug output will show
#
# User-Password = "password\000\000"
#
# This policy will fix it to just be "password".
#
# filter_password
#
# The preprocess module takes care of sanitizing some bizarre
# attributes in the request, and turning them into attributes
# which are more standard.
#
# It takes care of processing the 'raddb/mods-config/preprocess/hints'
# and the 'raddb/mods-config/preprocess/huntgroups' files.
preprocess
# If you intend to use CUI and you require that the Operator-Name
# be set for CUI generation and you want to generate CUI also
# for your local clients then uncomment the operator-name
# below and set the operator-name for your clients in clients.conf
# operator-name
#
# If you want to generate CUI for some clients that do not
# send proper CUI requests, then uncomment the
# cui below and set "add_cui = yes" for these clients in clients.conf
# cui
#
# If you want to have a log of authentication requests,
# un-comment the following line.
# auth_log
#
# The chap module will set 'Auth-Type := CHAP' if we are
# handling a CHAP request and Auth-Type has not already been set
chap
#
# If the users are logging in with an MS-CHAP-Challenge
# attribute for authentication, the mschap module will find
128
Anexo. Ficheros de configuración
#
# If you have a Cisco SIP server authenticating against
# FreeRADIUS, uncomment the following line, and the 'digest'
# line in the 'authenticate' section.
digest
#
# The WiMAX specification says that the Calling-Station-Id
# is 6 octets of the MAC. This definition conflicts with
# RFC 3580, and all common RADIUS practices. Un-commenting
# the "wimax" module here means that it will fix the
# Calling-Station-Id attribute to the normal format as
# specified in RFC 3580 Section 3.21
# wimax
#
# Look for IPASS style 'realm/', and if not found, look for
# '@realm', and decide whether or not to proxy, based on
# that.
# IPASS
#
# If you are using multiple kinds of realms, you probably
# want to set "ignore_null = yes" for all of them.
# Otherwise, when the first style of realm doesn't match,
# the other styles won't be checked.
#
suffix
# ntdomain
#
# This module takes care of EAP-MD5, EAP-TLS, and EAP-LEAP
# authentication.
#
# It also sets the EAP-Type attribute in the request
# attribute list to the EAP type from the packet.
#
# The EAP module returns "ok" or "updated" if it is not yet ready
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 129
#
# Pull crypt'd passwords from /etc/passwd or /etc/shadow,
# using the system API's to get the password. If you want
# to read /etc/passwd or /etc/shadow directly, see the
# mods-available/passwd module.
#
# unix
#
# Read the 'users' file. In v3, this is located in
# raddb/mods-config/files/authorize
files
#
# Look in an SQL database. The schema of the database
# is meant to mirror the "users" file.
#
# See "Authorization Queries" in mods-available/sql
-sql
#
# If you are using /etc/smbpasswd, and are also doing
# mschap authentication, the un-comment this line, and
# configure the 'smbpasswd' module.
# smbpasswd
#
130
Anexo. Ficheros de configuración
#
# Enforce daily limits on time spent logged in.
# daily
#
expiration
logintime
#
# If no other module has claimed responsibility for
# authentication, then try to use PAP. This allows the
# other modules listed above to add a "known good" password
# to the request, and to do nothing else. The PAP module
# will then see that password, and use it to do PAP
# authentication.
#
# This module should be listed last, so that the other modules
# get a chance to set Auth-Type for themselves.
#
pap
#
# If "status_server = yes", then Status-Server messages are passed
# through the following section, and ONLY the following section.
# This permits you to do DB queries, for example. If the modules
# listed here return "fail", then NO response is sent.
#
# Autz-Type Status-Server {
#
# }
}
# Authentication.
#
#
# This section lists which modules are available for authentication.
# Note that it does NOT mean 'try each module in order'. It means
# that a module from the 'authorize' section adds a configuration
# attribute 'Auth-Type := FOO'. That authentication type is then
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 131
# In general, you SHOULD NOT set the Auth-Type attribute. The server
# will figure it out on its own, and will do the right thing. The
# most common side effect of erroneously setting the Auth-Type
# attribute is that one authentication method will work, but the
# others will not.
#
# The common reasons to set the Auth-Type attribute by hand
# is to either forcibly reject the user (Auth-Type := Reject),
# or to or forcibly accept the user (Auth-Type := Accept).
#
# Note that Auth-Type := Accept will NOT work with EAP.
#
# Please do not put "unlang" configurations into the "authenticate"
# section. Put them in the "post-auth" section instead. That's what
# the post-auth section is for.
#
authenticate {
#
# PAP authentication, when a back-end database listed
# in the 'authorize' section supplies a password. The
# password can be clear-text, or encrypted.
Auth-Type PAP {
pap
}
Auth-Type Kerberos {
krb5
}
#
# Most people want CHAP authentication
# A back-end database listed in the 'authorize' section
# MUST supply a CLEAR TEXT password. Encrypted passwords
# won't work.
Auth-Type CHAP {
chap
}
#
# MSCHAP authentication.
Auth-Type MS-CHAP {
132
Anexo. Ficheros de configuración
mschap
}
#
# For old names, too.
#
mschap
#
# If you have a Cisco SIP server authenticating against
# FreeRADIUS, uncomment the following line, and the 'digest'
# line in the 'authorize' section.
digest
#
# Pluggable Authentication Modules.
# pam
#
# Allow EAP authentication.
eap
#
# The older configurations sent a number of attributes in
# Access-Challenge packets, which wasn't strictly correct.
# If you want to filter out these attributes, uncomment
# the following lines.
#
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 133
# Auth-Type eap {
# eap {
# handled = 1
# }
# if (handled && (Response-Packet-Type == Access-Challenge)) {
# attr_filter.access_challenge.post-auth
# handled # override the "updated" code from attr_filter
# }
# }
}
#
# Pre-accounting. Decide which accounting type to use.
#
preacct {
preprocess
#
# Merge Acct-[Input|Output]-Gigawords and Acct-[Input-Output]-Octets
# into a single 64bit counter Acct-[Input|Output]-Octets64.
#
# acct_counters64
#
# Session start times are *implied* in RADIUS.
# The NAS never sends a "start time". Instead, it sends
# a start packet, *possibly* with an Acct-Delay-Time.
# The server is supposed to conclude that the start time
# was "Acct-Delay-Time" seconds in the past.
#
# The code below creates an explicit start time, which can
# then be used in other modules. It will be *mostly* correct.
# Any errors are due to the 1-second resolution of RADIUS,
# and the possibility that the time on the NAS may be off.
#
# The start time is: NOW - delay - session_length
#
# update request {
# &FreeRADIUS-Acct-Session-Start-Time = "%{expr: %l - %{%{Acct-Session-
Time}:-0} - %{%{Acct-Delay-Time}:-0}}"
# }
134
Anexo. Ficheros de configuración
#
# Ensure that we have a semi-unique identifier for every
# request, and many NAS boxes are broken.
acct_unique
#
# Look for IPASS-style 'realm/', and if not found, look for
# '@realm', and decide whether or not to proxy, based on
# that.
#
# Accounting requests are generally proxied to the same
# home server as authentication requests.
# IPASS
suffix
# ntdomain
#
# Read the 'acct_users' file
files
}
#
# Accounting. Log the accounting data.
#
accounting {
# Update accounting packet by adding the CUI attribute
# recorded from the corresponding Access-Accept
# use it only if your NAS boxes do not support CUI themselves
# cui
#
# Create a 'detail'ed log of the packets.
# Note that accounting requests which are proxied
# are also logged in the detail file.
detail
# daily
#
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 135
#
# Log traffic to an SQL database.
#
# See "Accounting queries" in mods-available/sql
-sql
#
# If you receive stop packets with zero session length,
# they will NOT be logged in the database. The SQL module
# will print a message (only in debugging mode), and will
# return "noop".
#
# You can ignore these packets by uncommenting the following
# three lines. Otherwise, the server will not respond to the
# accounting request, and the NAS will retransmit.
#
# if (noop) {
# ok
# }
#
# See "Autz-Type Status-Server" for how this works.
#
# Acct-Type Status-Server {
#
136
Anexo. Ficheros de configuración
# }
}
#
# See "Simultaneous Use Checking Queries" in mods-available/sql
# sql
}
# Post-Authentication
# Once we KNOW that the user has been authenticated, there are
# additional steps we can take.
post-auth {
#
# If you need to have a State attribute, you can
# add it here. e.g. for later CoA-Request with
# State, and Service-Type = Authorize-Only.
#
# if (!&reply:State) {
# update reply {
# State := "0x%{randstr:16h}"
# }
# }
#
# For EAP-TTLS and PEAP, add the cached attributes to the reply.
# The "session-state" attributes are automatically cached when
# an Access-Challenge is sent, and automatically retrieved
# when an Access-Request is received.
#
# The session-state attributes are automatically deleted after
# an Access-Reject or Access-Accept is sent.
#
update {
&reply: += &session-state:
}
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 137
#
# If you want to have a log of authentication replies,
# un-comment the following line, and enable the
# 'detail reply_log' module.
# reply_log
#
# After authenticating the user, do another SQL query.
#
# See "Authentication Logging Queries" in mods-available/sql
-sql
#
# Un-comment the following if you want to modify the user's object
# in LDAP after a successful login.
#
# ldap
#
# Calculate the various WiMAX keys. In order for this to work,
# you will need to define the WiMAX NAI, usually via
#
# update request {
# WiMAX-MN-NAI = "%{User-Name}"
# }
#
# If you want various keys to be calculated, you will need to
# update the reply with "template" values. The module will see
# this, and replace the template values with the correct ones
# taken from the cryptographic calculations. e.g.
#
# update reply {
138
Anexo. Ficheros de configuración
# WiMAX-FA-RK-Key = 0x00
# WiMAX-MSK = "%{EAP-MSK}"
# }
#
# You may want to delete the MS-MPPE-*-Keys from the reply,
# as some WiMAX clients behave badly when those attributes
# are included. See "raddb/modules/wimax", configuration
# entry "delete_mppe_keys" for more information.
#
# wimax
#
# Access-Reject packets are sent through the REJECT sub-section of the
# post-auth section.
#
# Add the ldap module name (or instance) if you have set
# 'edir_account_policy_check = yes' in the ldap module configuration
#
# The "session-state" attributes are not available here.
#
Post-Auth-Type REJECT {
# log failed authentications in SQL, too.
-sql
attr_filter.access_reject
#
140
Anexo. Ficheros de configuración
#
# When the server decides to proxy a request to a home server,
# the proxied request is first passed through the pre-proxy
# stage. This stage can re-write the request, or decide to
# cancel the proxy.
#
# Only a few modules currently have this method.
#
pre-proxy {
# Before proxing the request add an Operator-Name attribute identifying
# if the operator-name is found for this client.
# No need to uncomment this if you have already enabled this in
# the authorize section.
# operator-name
#
# When the server receives a reply to a request it proxied
# to a home server, the request may be massaged here, in the
# post-proxy stage.
#
post-proxy {
#
# If you are proxying LEAP, you MUST configure the EAP
# module, and you MUST list it here, in the post-proxy
# stage.
#
# You MUST also use the 'nostrip' option in the 'realm'
# configuration. Otherwise, the User-Name attribute
# in the proxied request will not match the user name
# hidden inside of the EAP packet, and the end server will
# reject the EAP request.
#
eap
#
# If the server tries to proxy a request and fails, then the
# request is processed through the modules in this section.
#
# The main use of this section is to permit robust proxying
# of accounting packets. The server can be configured to
# proxy accounting packets as part of normal processing.
# Then, if the home server goes down, accounting packets can
# be logged to a local "detail" file, for processing with
# radrelay. When the home server comes back up, radrelay
# will read the detail file, and send the packets to the
# home server.
#
# With this configuration, the server always responds to
142
Anexo. Ficheros de configuración
A.2 Kerberos
En esta sección mostraremos los archivos de configuración completos del sistema Kerberos
A.2.1 /etc/krb5.conf
[libdefaults]
default_realm = JOSE.RTS
# default_tgs_enctypes = des3-hmac-sha1
# default_tkt_enctypes = des3-hmac-sha1
# permitted_enctypes = des3-hmac-sha1
[realms]
Diseño e implantación de un servidor RADIUS basándose en servidores Kerberos 143
DOMINIOSES.RTS = {
kdc = dc.dominioses.rts
admin_server = dc.dominioses.rts
}
JOSE.RTS = {
kdc = kdc01.jose.rts
admin_server = kdc01.jose.rts
}
[domain_realm]
.dominioses.rts = DOMINIOSES.RTS
dominioses.rts = DOMINIOSES.RTS
.jose.rts = JOSE.RTS
jose.rts = JOSE.RTS
A.2.2 /etc/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 750,88
[realms]
JOSE.RTS = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
#supported_enctypes = aes256-cts:normal aes128-cts:normal
default_principal_flags = +preauth
}
145