FreeIPA: Instalación y Configuración

Introducción
FreeIPA (Identity, Policy, Audit) es una plataforma de código abierto diseñada para proporcionar servicios de identidad centralizados, políticas y auditoría en entornos de tecnología de la información empresarial. Aquí tienes un resumen completo:
1. Identidad: FreeIPA ofrece servicios de identidad centralizados, lo que significa que proporciona un único punto de autenticación para usuarios y recursos en una red. Utiliza el protocolo estándar LDAP (Protocolo Ligero de Acceso a Directorios) para almacenar información de identidad como usuarios, grupos y políticas.
2. Autenticación y Autorización: Permite la autenticación de usuarios mediante varios métodos, incluidos contraseñas, certificados X.509 y autenticación de dos factores. Además, ofrece funciones de autorización, lo que significa que los administradores pueden definir políticas que controlen qué recursos y servicios pueden acceder los usuarios autenticados.
3. Directorio: FreeIPA incluye un servicio de directorio basado en LDAP que almacena información de identidad de usuarios, grupos, hosts y otros objetos de red. Este directorio es escalable y puede crecer para adaptarse a las necesidades de organizaciones de diferentes tamaños.
4. Política: Ofrece un marco para la gestión centralizada de políticas de seguridad. Los administradores pueden definir políticas de contraseñas, políticas de acceso a recursos y otras políticas de seguridad para garantizar la conformidad y la seguridad en toda la infraestructura de TI.
5. Auditoría: FreeIPA registra eventos de seguridad y auditoría en toda la infraestructura, lo que permite a los administradores rastrear quién accede a qué recursos y cuándo. Esto es crucial para cumplir con los requisitos de conformidad y para investigar incidentes de seguridad.
6. Integración con otros sistemas: FreeIPA se integra con otros sistemas de TI, como servidores de autenticación basados en Kerberos, sistemas de gestión de identidades y acceso, y servicios de directorio externos. Esto permite a las organizaciones aprovechar sus inversiones existentes en tecnología de seguridad y facilita la implementación de una solución de identidad robusta y completa.
En resumen, FreeIPA es una solución integral de gestión de identidades y acceso que proporciona autenticación, autorización, políticas de seguridad y auditoría en una plataforma unificada y de código abierto. Es especialmente útil para organizaciones que buscan mejorar la seguridad y la eficiencia en sus entornos de TI empresariales.
Puedes encontrar más información en la web oficial de freeIPA.
Preparación de Laboratorio
Para llevar a cabo esta demostración del funcionamiento de freeIPA, tendremos 3 servidores Fedora 35 y una workstation Fedora 35.Cada uno de ellos tendrás un rol distinto:
- fedora35-server1 : En este servidor instalaremos el nodo máster de FreeIPA.
- fedora35-server2: En este servidor instalaremos el nodo réplica de FreeIPA.
- fedora35-server3: Servidor independiente que será un cliente de LDAP.
- fedora35-workstation: Workstation que será un cliente con interfaz gráfica para las pruebas de doble factor de autenticación.
Instalación
Nodo Máster
Lo primero que debemos de hacer es dar un ‘nombre’ a nuestro servidor. Como comenté en el anterior punto, nuestro server1, será nuestro nodo máster.
# vi /etc/hosts
192.168.1.124 fedora-server1.aprendesysadmintest.com fedora-server1
192.168.1.73 fedora-server2.aprendesysadmintest.com fedora-server2
Ahora, instalamos los paquetes necesarios y empezamos con la configuración básica:
# dnf install freeipa-server freeipa-server-dns -y
# ipa-server-install
Do you want to configure integrated DNS (BIND)? [no]: yes
Server host name [fedora-server1.aprendesysadmintest.com]: [ENTER]
Please confirm the domain name [aprendesysadmintest.com]: [ENTER]
Please provide a realm name [APRENDESYSADMINTEST.COM]: [ENTER]
Directory Manager password: [PASSWORD]
Password (confirm): [PASSWORD]
The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.
IPA admin password:
[PASSWORD]
Password (confirm): [PASSWORD]
Checking DNS domain aprendesysadmintest.com., please wait ...
Do you want to configure DNS forwarders? [yes]: no
NetBIOS domain name [APRENDESYSADMIN]: [ENTER]
Do you want to configure chrony with NTP server or pool address? [no]: [ENTER]
The IPA Master Server will be configured with:
Hostname: fedora-server1.aprendesysadmintest.com
IP address(es): 192.168.1.124
Domain name: aprendesysadmintest.com
Realm name: APRENDESYSADMINTEST.COM
The CA will be configured with:
Subject DN: CN=Certificate Authority,O=APRENDESYSADMINTEST.COM
Subject base: O=APRENDESYSADMINTEST.COM
Chaining: self-signed
BIND DNS server will be configured to serve IPA domain with:
Forwarders: 192.168.1.1
Forward policy: only
Reverse zone(s): No reverse zone
Continue to configure the system with these values? [no]: yes
Intentaré explicar punto por punto lo que hemos configurado:
- Lo primero que hemos hecho, ha sido configurar el servicio DNS que viene integrado en la aplicación.
- A partir de nuestro hostname, ha extraído el nombre de dominio que en nuestro caso es aprendesysadmintest.com que lo usará también par el REALM NAME que es utilizado por el protocolo Kerberos.
- Hemos configurado la contraseña de los usuarios Directory Manager y IPA admin. El administrador del directorio, tiene acceso completo al Directorio para tareas de administración del sistema y será añadido a la instancia de servidor de directorio creada para IPA. El admin IPA, es una cuenta normal del sistema utilizada para la administración del servidor IPA.
- No hemos configurado DNS fowarders.
- Configuramos el nombre de dominio NetBios
- No configuramos chrony porque no tenemos un servicio de NTP.
Antes de empezar con la instalación nos mostrará un resumen de lo que hemos configurado, si estamos de acuerdo escribiremos un yes y empezará la instalación. Si nuestra instalación ha sido exitosa, nos aparecerá un mensaje como este:
Next steps:
1. You must make sure these network ports are open:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp
2. You can now obtain a kerberos ticket using the command: 'kinit admin'
This ticket will allow you to use the IPA tools (e.g., ipa user-add)
and the web user interface.
Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
The ipa-server-install command was successful
Nos está indicando que debemos de permitir la conexión de entrada de esos puertos, dependiendo de lo que hemos configurado, debemos de permitir dichas conexiones. Si usas iptables, te dejo este enlace que es un ejemplo de las reglas para permitir estos flujos.
Nodo Réplica
Configuramos el hosts para nuestro servidor replica
# vi /etc/hosts
192.168.1.73 fedora-server2.aprendesysadmintest.com fedora-server2
192.168.1.124 fedora-server1.aprendesysadmintest.com fedora-server1
Un vez configurado, instalamos ipa-client
# yum install freeipa-server
[root@fedora-server2 ~]# ipa-client-install
This program will set up IPA client.
Version 4.9.11
DNS discovery failed to determine your DNS domain
Provide the domain name of your IPA server (ex: example.com): aprendesysadmintest.com
Provide your IPA server name (ex: ipa.example.com): fedora-server1.aprendesysadmintest.com
The failure to use DNS to find your IPA server indicates that your resolv.conf file is not properly configured.
Autodiscovery of servers for failover cannot work with this configuration.
If you proceed with the installation, services will be configured to always acce ss the discovered server for all operations and will not fail over to other servers in case of failure.
Proceed with fixed values and no DNS discovery? [no]: yes
Do you want to configure chrony with NTP server or pool address? [no]: no
Client hostname: fedora-server2.aprendesysadmintest.com
Realm: APRENDESYSADMINTEST.COM
DNS Domain: aprendesysadmintest.com
IPA Server: fedora-server1.aprendesysadmintest.com
BaseDN: dc=aprendesysadmintest,dc=com
Continue to configure the system with these values? [no]: yes
Synchronizing time
No SRV records of NTP servers found and no NTP server or pool address was provided.
Using default chrony configuration.
Attempting to sync time with chronyc.
Time synchronization was successful.
User authorized to enroll computers: admin
Password for admin@APRENDESYSADMINTEST.COM:
Successfully retrieved CA cert
Subject: CN=Certificate Authority,O=APRENDESYSADMINTEST.COM
Issuer: CN=Certificate Authority,O=APRENDESYSADMINTEST.COM
Valid From: 2024-03-14 19:55:06
Valid Until: 2044-03-14 19:55:06
Enrolled in IPA realm APRENDESYSADMINTEST.COM
Created /etc/ipa/default.conf
Configured /etc/sssd/sssd.conf
Systemwide CA database updated.
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config.d/04-ipa.conf
Configuring aprendesysadmintest.com as NIS domain.
Configured /etc/krb5.conf for IPA realm APRENDESYSADMINTEST.COM
Client configuration complete.
The ipa-client-install command was successful
Desde el nodo máster, añadimos al servidor replica, como servidor IPA
[root@fedora-server1 ~]# ipa hostgroup-add-member ipaservers --hosts fedora-server2.aprendesysadmintest.com
Host-group: ipaservers
Description: IPA server hosts
Member hosts: fedora-server1.aprendesysadmintest.com, fedora-
server2.aprendesysadmintest.com
-------------------------
Number of members added 1
-------------------------
[root@fedora-server1 ~]#
Una vez añadido el hosts, es momento de instalar la función de réplica en nuestro nodo esclavo:
[root@fedora-server2 ~]# kinit admin
Password for admin@APRENDESYSADMINTEST.COM:
[root@fedora-server2 ~]# klist
Ticket cache: KCM:0:79440
Default principal: admin@APRENDESYSADMINTEST.COM
Valid starting Expires Service principal
03/15/2024 10:24:06 03/16/2024 10:21:54 krbtgt/APRENDESYSADMINTEST.COM@APRENDESYSADMINTEST.COM
[root@fedora-server2 ~]# ipa-replica-install
Lookup failed: Preferred host fedora-server2.aprendesysadmintest.com does not provide DNS.
The IP address 192.168.1.124 of host fedora-server1.aprendesysadmintest.com resolves to: fedora-server1.home.. Clients may not function properly. Please check your DNS setup. (Note that this check queries IPA DNS directly and ignores /etc/hosts.)
Continue? [no]: yes
Run connection check to master
Connection check OK
Disabled p11-kit-proxy
Configuring directory server (dirsrv). Estimated time: 30 seconds
Done.
WARNING: The CA service is only installed on one server (fedora-server1.aprendesysadmintest.com).
It is strongly recommended to install it on another server.
Run ipa-ca-install(1) on another master to accomplish this.
The ipa-replica-install command was successful
El comando se encargará de configurar todo lo necesario para que nuestro servidor se convierta en réplica. Me parece importante puntualizar que la instalación nos recomienda instalar el servicio de CA en otro host, ya que actualmente solo se encuentra en el primario. En este laboratorio vamos a instalar el servicio de CA en nuestra réplica para intentar redundar el máximo de servicios posibles.
[root@fedora-server2 ~]# ipa-ca-install
Directory Manager (existing master) password:
Run connection check to master
Connection check OK
Configuring certificate server (pki-tomcatd). Estimated time: 3 minutes
[1/28]: creating certificate server db
[2/28]: setting up initial replication
Starting replication, please wait until this has completed.
Update in progress, 5 seconds elapsed
Update succeeded
Done configuring certificate server (pki-tomcatd).
Updating DNS system records
Si nos vamos a nuestra web de administración, veremos que nuestros 2 nodos se encuentran listados:

Instalación clientes
Como comenté en el inicio del tutorial, tenemos 2 clientes, uno servidor y una workstation. antes de empezar con la instalación, vamos a crear un grupo de usuarios llamado operadores y 2 usuarios: “operador1” y “operador2”. Para comprobar la sincronización de los nodos de freeIPA, crearé el grupo en el nodo1 y los usuarios en el nodo2.
[root@fedora-server1 ~]# ipa group-add operadores
------------------------
Added group "operadores"
------------------------
Group name: operadores
GID: 1327200003
[root@fedora-server2 ~]# ipa user-add operador1 --cn=operador1 --gidnumber=1327200003 --shell=/bin/bash
[root@fedora-server2 ~]# ipa user-add operador2 --cn=operador2 --gidnumber=1327200003 --shell=/bin/bash
Ahora desde los clientes solo instalaremos freeipa-client y lanzaremos el comando ipa-client-install. Recuerda que antes de ejecutar el comando, debes de añadir los nombres de los nodos en el fichero /etc/hosts.
[root@fedora-server3 ~]# vi /etc/hosts
192.168.1.124 fedora-server1.aprendesysadmintest.com fedora-server1
192.168.1.73 fedora-server2.aprendesysadmintest.com fedora-server2
192.168.1.49 fedora-server3.aprendesysadmintest.com fedora-server3
[root@fedora-workstation1 ~]# cat /etc/hosts
192.168.1.124 fedora-server1.aprendesysadmintest.com fedora-server1
192.168.1.73 fedora-server2.aprendesysadmintest.com fedora-server2
192.168.1.53 fedora-workstation1.aprendesysadmintest.com fedora-workstation1
[root@fedora-server3 ~]# dnf install freeipa-client -y
[root@fedora-workstation1 ~]# dnf install freeipa-client -y
[root@fedora-workstation1 ~]# ipa-client-install
Provide the domain name of your IPA server (ex: example.com): aprendesysadmintest.com
Provide your IPA server name (ex: ipa.example.com): fedora-server1.aprendesysadmintest.com
Proceed with fixed values and no DNS discovery? [no]: yes
Do you want to configure chrony with NTP server or pool address? [no]:
Client hostname: fedora-workstation1.aprendesysadmintest.com
Realm: APRENDESYSADMINTEST.COM
DNS Domain: aprendesysadmintest.com
IPA Server: fedora-server1.aprendesysadmintest.com
BaseDN: dc=aprendesysadmintest,dc=com
Continue to configure the system with these values? [no]: yes
Client configuration complete.
The ipa-client-install command was successful
Si vamos a la lista de hosts, veremos que tenemos listado los 2 nuevos hosts.

Ahora con nuestros usuarios operador1 y operador2 pueden acceder a nuestros 4 equipos. Si no recuerdas la contraseña, desde la web puedes poner alguna contraseña eventual, luego cuando el usuario intente logarse, pedirá que cambie la contraseña.

Miscelánea / Errores
No crea del directorio de usuario
Si no se crea el home directory, es porque nos falta activar un característica de authselect. Desde la consola del host, ejecutamos lo siguiente:
[root@fedora-workstation1 ~]# authselect enable-feature with-mkhomedir
[root@fedora-workstation1 ~]# systemctl enable --now oddjobd.service
Con ello, en la proxima sesión del usuario, el sistema creará el directorio.
Configuración de OTP con Yubikeys
Para esta configuración dispongo de un Yubikey 5 NFC con 2 slots, con el que realizaremos la prueba. Desde nuestro nodo1, ejecutaremos lo siguiente:
[root@fedora-server1 ~]# ipa config-mod --user-auth-type=otp
Esto nos habilitará `por defecto para todos los hosts que el tipo de autenticación sea Password + OTP.
Ahora insertaremos la yubikey y ejecutaremos lo siguiente. En mi caso lo hago desde la workstation por comodidad:
[root@fedora-workstation1 ~]# kinit admin
Password for admin@APRENDESYSADMINTEST.COM:
[root@fedora-workstation1 ~]# klist
Ticket cache: KCM:0
Default principal: admin@APRENDESYSADMINTEST.COM
Valid starting Expires Service principal
03/15/2024 07:49:30 03/16/2024 07:36:22 krbtgt/APRENDESYSADMINTEST.COM@APRENDESYSADMINTEST.COM
[root@fedora-workstation1 ~]# kinit -T KCM:0 operador1
Password for operador1@APRENDESYSADMINTEST.COM:
[root@fedora-workstation1 ~]# kinit operador1
Password for operador1@APRENDESYSADMINTEST.COM:
[root@fedora-workstation1 ~]# ipa otptoken-add-yubikey --slot=2
------------------
Added OTP token ""
------------------
Unique ID: 78016f2e-cac4-4e88-b355-c5b54cbc1dab
Type: HOTP
Owner: operador1
Manager: operador1
Vendor: YubiCo
Model: YubiKey 4
Serial: 22406393
Algorithm: sha1
Digits: 6
YubiKey slot: 2
Con esto, hemos asignado esta yubikey para el usuario operador1. Vamos a probarlo:
En el primer factor, debemos de poner nuestra password y en el segundo factor el OTP:



Si queremos que esto se aplique también en las conexiones ssh, hacemos lo siguiente:
[root@fedora-server1 ~]# vi /etc/ssh/sshd-config
### Add to the bottom of the file
AuthenticationMethods keyboard-interactive
kbdInteractiveAuthentication yes
[root@fedora-server1 ~]# systemctl restart sshd
Una vez que reiniciamos el servidor, hacemos una conexión sobre ello

¡Y con esto concluimos nuestro tutorial! Espero que hayas encontrado esta guía útil y que te haya ayudado a alcanzar tus objetivos. Recuerda que estamos aquí para ayudarte en cualquier momento. ¡Hasta la próxima y sigue explorando!