FreeIPA es una solución de gestión de identidades para Linux que integra en un solo producto un directorio LDAP (389 Directory Server), Kerberos para la autenticación, una autoridad de certificación y una interfaz web. Frente a un OpenLDAP a secas, añade políticas de acceso por host (HBAC), políticas de contraseña y la inscripción automática de clientes con SSSD. En este tutorial instalarás el servidor FreeIPA en Rocky Linux 9, unirás un cliente Ubuntu 24.04 al dominio y controlarás qué usuarios pueden entrar por SSH en cada máquina.

Requisitos previos

FreeIPA se desarrolla y prueba sobre la familia Red Hat. Ubuntu 24.04 ya no incluye el paquete del servidor, pero sí el del cliente, así que la arquitectura de esta guía es:

  • Un servidor con Rocky Linux 9 (o AlmaLinux 9) dedicado a FreeIPA, por ejemplo un VPS de CubePath, con al menos 2 GB de RAM (4 GB recomendados) y 10 GB libres en disco. No instales otros servicios web o LDAP en él.
  • Uno o más clientes con Ubuntu 24.04 LTS.
  • Un usuario con privilegios sudo en todas las máquinas.
  • Un dominio DNS que controles. Es buena práctica dedicar a FreeIPA un subdominio propio; en esta guía se usan el dominio idm.example.com, el realm Kerberos IDM.EXAMPLE.COM (el dominio en mayúsculas) y el servidor ipa01.idm.example.com.
  • Registros A en tu DNS para el servidor y los clientes, o bien entradas en /etc/hosts de todas las máquinas.

Paso 1: Preparar el nombre de host del servidor

FreeIPA exige que el servidor tenga un nombre completo (FQDN) estable que resuelva a su IP real, no a 127.0.0.1. En el servidor Rocky Linux, fija el nombre de host:

sudo hostnamectl set-hostname ipa01.idm.example.com

Añade una entrada en /etc/hosts con la IP del servidor (sustituye your_server_ip):

sudo nano /etc/hosts
your_server_ip ipa01.idm.example.com ipa01

Comprueba que el nombre completo resuelve a esa IP:

hostname -f
getent hosts ipa01.idm.example.com
ipa01.idm.example.com
your_server_ip  ipa01.idm.example.com ipa01

El instalador también necesita que IPv6 esté habilitado al menos en la interfaz de loopback, aunque no uses IPv6 en la red. Compruébalo:

ip -6 addr show lo

Debe aparecer la dirección ::1/128. Si no aparece, revisa si has desactivado IPv6 con sysctl o con el parámetro de arranque ipv6.disable=1 y vuelve a activarlo.

Paso 2: Instalar los paquetes y abrir el cortafuegos

Actualiza el sistema e instala el servidor:

sudo dnf update -y
sudo dnf install -y ipa-server

firewalld incluye un servicio predefinido, freeipa-4, que abre todos los puertos que usan los clientes: HTTP/HTTPS, LDAP/LDAPS, Kerberos y kpasswd. Añádelo de forma permanente y recarga:

sudo firewall-cmd --permanent --add-service=freeipa-4
sudo firewall-cmd --reload

Verifica que el servicio está activo:

sudo firewall-cmd --list-services
cockpit dhcpv6-client freeipa-4 ssh

Paso 3: Ejecutar el instalador de FreeIPA

En esta guía FreeIPA no gestiona el DNS: sigues usando tu proveedor DNS habitual y los clientes se configuran indicando el servidor de forma explícita. Es la opción más sencilla cuando el servidor está en la nube.

Lanza el instalador interactivo:

sudo ipa-server-install

Responde a las preguntas así:

  • Do you want to configure integrated DNS (BIND)? no
  • Server host name: ipa01.idm.example.com (pulsa Intro para aceptar el valor detectado)
  • Please confirm the domain name: idm.example.com
  • Please provide a realm name: IDM.EXAMPLE.COM
  • Directory Manager password: una contraseña robusta para la cuenta de administración de bajo nivel del directorio. Guárdala en un lugar seguro; solo se usa en recuperaciones.
  • IPA admin password: la contraseña del usuario admin, que usarás a diario.
  • Continue to configure the system with these values? yes

La instalación tarda entre 5 y 15 minutos. Al terminar verás un resumen parecido a este:

The ipa-server-install command was successful

Comprueba que todos los componentes están en marcha:

sudo ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa: INFO: The ipactl command was successful

Paso 4: Autenticarte y acceder a la interfaz web

Las herramientas de FreeIPA usan tickets Kerberos. Obtén uno como admin:

kinit admin

Comprueba que tienes un ticket válido:

klist
Ticket cache: KCM:1000
Default principal: [email protected]

Valid starting       Expires              Service principal
09/25/2026 10:02:11  09/26/2026 09:36:55  krbtgt/[email protected]

La interfaz web está en https://ipa01.idm.example.com/ipa/ui/. Debes entrar por el nombre completo, no por la IP, porque el servidor redirige al FQDN. Si tu equipo no resuelve ese nombre, añade la entrada correspondiente a su archivo hosts. El navegador mostrará un aviso de certificado porque lo firma la CA interna de FreeIPA; puedes descargar esa CA desde https://ipa01.idm.example.com/ipa/config/ca.crt e importarla en tu equipo para eliminar el aviso.

Paso 5: Crear usuarios, grupos y políticas de contraseña

Todo lo que haces en la interfaz web se puede hacer con el comando ipa. Crea un grupo para los administradores de sistemas:

ipa group-add sysadmins --desc="Administradores de sistemas"

Crea un usuario. La opción --password pide una contraseña inicial:

ipa user-add jgarcia --first=Juan --last=Garcia [email protected] --shell=/bin/bash --password

Añade el usuario al grupo y comprueba el resultado:

ipa group-add-member sysadmins --users=jgarcia
ipa group-show sysadmins
  Group name: sysadmins
  Description: Administradores de sistemas
  GID: 1234500004
  Member users: jgarcia

FreeIPA asigna automáticamente los UID y GID de un rango propio, así que no tienes que gestionarlos a mano.

La contraseña que fija un administrador se marca como caducada: el usuario tendrá que cambiarla en su primer inicio de sesión. Es el comportamiento esperado.

Para endurecer la política global de contraseñas (longitud mínima, bloqueo tras intentos fallidos durante 5 minutos e historial de contraseñas):

ipa pwpolicy-mod --minlength=12 --maxfail=5 --lockouttime=300 --history=5

Revisa la política aplicada:

ipa pwpolicy-show

Paso 6: Unir un cliente Ubuntu 24.04 al dominio

Los pasos de esta sección se ejecutan en el cliente. Primero dale un nombre completo dentro del dominio:

sudo hostnamectl set-hostname client01.idm.example.com

Asegúrate de que el cliente resuelve el nombre del servidor. Si no usas DNS, añade la entrada a /etc/hosts:

your_server_ip ipa01.idm.example.com ipa01

Instala el paquete del cliente. Durante la instalación puede aparecer un asistente de configuración de Kerberos; deja los campos vacíos o con los valores propuestos, porque el instalador de FreeIPA los sobrescribe:

sudo apt update
sudo apt install freeipa-client

Inscribe la máquina en el dominio. --mkhomedir crea el directorio personal de cada usuario en su primer inicio de sesión:

sudo ipa-client-install --server=ipa01.idm.example.com --domain=idm.example.com --realm=IDM.EXAMPLE.COM --mkhomedir

Como no hay registros SRV de descubrimiento, el instalador pregunta si quieres continuar con esos valores fijos; responde yes. Después pide un usuario autorizado para inscribir equipos: introduce admin y su contraseña. Al final verás:

Client configuration complete.
The ipa-client-install command was successful

Comprueba que el cliente ve los usuarios del dominio:

id jgarcia
uid=1234500005(jgarcia) gid=1234500005(jgarcia) groups=1234500005(jgarcia),1234500004(sysadmins)

Inicia sesión por SSH en el cliente con la cuenta del dominio. Como la contraseña está caducada, el sistema te pedirá la actual y una nueva:

En el servidor, el nuevo equipo aparece en la lista de hosts:

ipa host-find

Paso 7: Controlar el acceso con reglas HBAC

Por defecto existe la regla allow_all, que permite a cualquier usuario del dominio entrar en cualquier máquina inscrita. En producción conviene sustituirla por reglas explícitas. Estos comandos se ejecutan en el servidor con un ticket de admin válido.

Crea una regla que permita a los grupos sysadmins y admins (el grupo del usuario admin) entrar por SSH en todos los hosts:

ipa hbacrule-add allow_sysadmins_ssh --hostcat=all --desc="SSH para administradores"
ipa hbacrule-add-user allow_sysadmins_ssh --groups=sysadmins --groups=admins
ipa hbacrule-add-service allow_sysadmins_ssh --hbacsvcs=sshd

Antes de desactivar allow_all, comprueba con hbactest que la regla nueva da acceso a quien debe. La opción --rules evalúa solo esa regla:

ipa hbactest --user=jgarcia --host=client01.idm.example.com --service=sshd --rules=allow_sysadmins_ssh
--------------------
Access granted: True
--------------------
  Matched rules: allow_sysadmins_ssh

Cuando el resultado sea el esperado, desactiva la regla general:

ipa hbacrule-disable allow_all

A partir de ahora, un usuario que no esté en sysadmins ni en admins recibirá Access granted: False en hbactest y no podrá iniciar sesión en los clientes. Los cambios pueden tardar unos minutos en aplicarse por la caché de SSSD; en el cliente puedes forzarlos con sudo sss_cache -E.

Solución de problemas

El instalador del servidor falla al comprobar el nombre de host. El FQDN resuelve a 127.0.0.1 o a otra IP. Revisa /etc/hosts y que hostname -f devuelve el nombre completo.

ipa-client-install no conecta con el servidor. Comprueba desde el cliente que resuelve ipa01.idm.example.com y que los puertos están abiertos, por ejemplo con curl -k https://ipa01.idm.example.com/ipa/config/ca.crt. Si falla, revisa sudo firewall-cmd --list-services en el servidor.

Un usuario del dominio no puede iniciar sesión en el cliente. Consulta sudo journalctl -u sssd -n 50 en el cliente y prueba la regla con ipa hbactest en el servidor. Un fallo de HBAC aparece en los logs como Access denied by HBAC rules.

Los comandos ipa devuelven un error de Kerberos. El ticket ha caducado (duran 24 horas por defecto). Obtén uno nuevo con kinit admin.

Los servicios no arrancan tras reiniciar el servidor. Arráncalos con sudo ipactl start y revisa cuál falla con sudo ipactl status. El Directory Server suele ser el primero en fallar cuando el disco está lleno.

Conclusión

Ya tienes un servidor FreeIPA en Rocky Linux 9 con usuarios y grupos centralizados, una política de contraseñas común, un cliente Ubuntu 24.04 inscrito y reglas HBAC que limitan quién entra en cada máquina. Como siguientes pasos, puedes añadir un servidor réplica con ipa-replica-install para tener alta disponibilidad, definir reglas de sudo centralizadas con ipa sudorule-add y emitir certificados para tus servicios internos con la CA integrada.