Kerberos es un protocolo de autenticación de redes de ordenador creado por el MIT que permite a dos ordenadores en una red insegura demostrar su identidad mutuamente de manera segura. Sus diseñadores se concentraron primeramente en un modelo de cliente-servidor, y brinda autenticación mutua: tanto cliente como servidor verifican la identidad uno del otro. Los mensajes de autenticación están protegidos para evitar eavesdropping y ataques de Replay.

 

Kerberos se basa en criptografía de clave simétrica y requiere un tercero de confianza. Además, existen extensiones del protocolo para poder utilizar criptografía de clave asimétrica.

Kerberos utiliza su propia terminología que es necesario conocer previamente

– Realm: Define el dominio de autenticación del que se hará cargo el servidor kerberos. Para un realm se suele utilizar el dominio DNS de la organización y se suele poner en mayúsculas.

– Principal:

  • Usuario: usuario@REALM
  • Maquina: fqdn@REALM
  • Servicio: servicio/fqdn@REALM

– Ticket: Se utilizan como identificadores de los principales y los facilita el servidor kerberos de la organización (autentication server de forma más precisa)

– KDC: Key Distribution Center

– Kerberos Server: se utiliza para modificar los principales.

Pasos previos

Para un correcto funcionamiento antes de instalar kerberos debemos tanto tener un servidor de hora ntp y un Servidor DNS instalado, en nuestra maquina barney ya tenemos un servidor dns configurado por lo cual solo deberemos añadir la siguiente linea

Configuración servidor DNS

Es importante configurar tanto la resolución directa, como la inversa y en el caso de tener un direccionamiento interno una resolución inversa del direccionamiento interno.

Named.conf.local

db.jlramirez

Añadimos las siguiente lineas dicho fichero

db.172.22

db.10.0.0

Guardamos y reiniciamos el servicio systemctl restart bind9.service

Y comprobamos que resuelve nombre nuestro servidor:

Configuración de clientes

En mi caso se trata de un subdominio por tanto todas las maquinas de mi red tiene como dominio principal 192.168.102.2 en el caso de no tenerlo debemos dirigirnos en los clientes a /etc/resolv.conf y añadir la siguiente linea:

Para un funcionamiento aun mas correcto es recomendable que el FQDN de cada una de nuestras maquinas de la red se encuentren correctamente configurados, comprobamos en ambas maquinas.

Para ello utilizamos el siguiente comando hostname -f, si no fuera el mismo modificamos el nombre del mismo en /etc/hostname

Servidor de hora

Vamos a instalar en ambas maquinas apt install ntp, en nuestro cliente establecemos a barney como servidor de hora de homer /etc/ntp.conf:

Si realizamos una consulta ntpd -np y vemos quien nos responde:

Configuración LDAP

Partimos de un árbol LDAP creado en practicas anteriores

En el cual configuramos NSS, libnss-ldap

Instalación de paquete para Servidor Kerberos5

Instalamos kdc, kadmin apt install krb5-kdc krb5-admin-server, en el proceso de instalación nos solicitara el nombre del servidor kerberos JLRAMIREZ.GONZALONAZARENO.ORG (en mayusculas) y el Kerberos realm, administrative realm que sera el nombre de la maquina servidor barney.jlramirez.gonzalonazareno.org.

Configuración kerberos

Ahora procederemos con la configuración de el servidor kerberos para ello primero editamos el fichero /etc/krb5.conf para que quede asi, comentaremos todas la lineas debajo de “realms”:

Los dos primero apartados libdefaults y domain_realm vienen definidos pero tenemos que añadir nuestro nombre de reino realms

Editamos fichero kdc.conf

El siguiente paso es modificar el puerto de escucha de Kerberos que sera en el puerto 88 para ello modificamos el fichero /etc/krb5kdc/kdc.conf:

Deshabilitamos la utilizacion de kerberos4

Para ello añadimos las siguientes lineas en /etc/default/krb5-kdc

Creacion realm

Ejecutamos krb5_newrealm, para realizarlo de una manera rápida vamos a instalar apt install rng-tools
y en otra terminal ejecutamos rngd -r /dev/urandom y podremos observar como en la terminal donde estamos ejecutando el primer comando nos solicita una contraseña.

Y reiniciamos lo servicios instalados

Ya podemos comprobar que los puertos especificados se encuentran escuchando:

Realizar una conexión local al servidor de kerberos

Como prueba vamos a listar lo que hemos definido anteriormente

Creamos un principal por cada uno de los servicios o usuarios

Vamos a crear un principal por cada uno de los servicios o usuarios que vamos a kerberizar. Los usuarios se autenticaran utilizando una contraseña, los equipos y servicios se crearan utilizando una contraseña aleatoria y la almacena en un fichero keytab

Almacenar claves cifradas de los principales de barney

Ahora ya tenemos creado el fichero de los principales con sus correspondientes claves cifradas

Creamos rol de administracion

Para ello vamos a descomentar la siguiente linea en /etc/krb5kdc/kadm5.acl

Accedemos a kadmin.local y creamos un principal para el administrador:

Info! Es importante recordar que el usuario puede variar segun el nombre del usuario al cual queramos conceder el ticket.

Configuración de cliente

Instalamos kerberos en el cliente homer apt install krb5-config krb5-user.

Fichero configuración kerberos

Ahora vamos a observar que el fichero /etc/krb5.conf quede asi, como en el paso anterior vamos a comentar todas la lineas que se vean en realms y domain_reals:

Autenticarse desde el cliente al servidor Kerberos

Ahora desde el cliente homer, vamos a autenticarnos al servidor Kerbero, el cual nos va a conceder un ticket por 10 horas

rayon-te-content

Info! Es importante tener abierto los puertos 749 tcp, 464 tcp, 464 udp y 88 upd.

También podemos loguearnos con nuestro usuario de ldap juanluis.ramirez y observamos como nos concede un ticket por 10 horas también:

SASL/GSSAPI

Instalamos Modulo para realizar consoltas SASL/GSSAPI

Instalamos el modulo de configuracion de LDAP apt install libsasl2-modules-gssapi-mit para que se puedan realizar las consultas con SASL/GSSAPI

Modificamos permisos del fichero krb5.keytab

Modificamos los permisos del fichero /etc/krb5.keytab por chmod 640 /etc/krb5.keytab y cambiamos el grupo propietario chgrp openldap /etc/krb5.keytab

Modificamos el fichero de configuracion de nuestro LDAP

Vamos a modificar /etc/ldap/slapd.d/cn\=config.ldif y añadimos las siguientes lineas:

Creamos fichero slapd.conf

Vamos a crear el fichero /etc/ldap/sasl2/slapd.conf y añadimos la siguiente linea:

Y reiniciamos el servicio systemctl restart slapd

Comprobamos si esta activo SALSL/GSSAPI en LDAP

Vamos a comprobar si SALSL/GSSAPI se encuentra activo

PAM

Dicha herramienta se encarga de la autenticación en el sistema todas las aplicaciones que necesiten autenticación van pasar por PAM

Instalar PAM para kerberos

Vamos a instalar PAM para kerberos tanto en homer como en barney:

Ahora nos vamos a la maquina homer e instalamos el siguiente paquete apt install --no-install-recommends libnss-ldapd

En el proceso de instalacion nos solicitara unos datos que vamos a configurar de la siguiente manera:

Crear directorio al vuelo

Vamos a añadir la siguiente linea en /etc/pam.d/common-session: