timorunge.freeipa_server
freeipa_server
Este rol instala y configura el Servidor FreeIPA según tus necesidades.
Este playbook se encarga de la inicialización del usuario administrador de Kerberos (nombre de usuario: admin
, la contraseña es la que estableces en freeipa_server_admin_password
).
En combinación con freeipa
(Github), es posible (y está probado) usar freeipa_server
con la última versión de FreeIPA en Ubuntu >= 18.04 (echa un vistazo a la sección de ejemplos).
No es compatible con Ubuntu 20.04
Ubuntu 20.04 no tiene el paquete freeipa-server.
Requisitos
Este rol requiere Ansible 2.5.0 o superior.
Puedes usar pip para instalar (y definir) una versión estable:
pip install ansible==2.7.7
Todos los requisitos de la plataforma están listados en el archivo de metadatos.
Instalación
ansible-galaxy install timorunge.freeipa_server
Variables del rol
Es necesario establecer las siguientes variables para que este rol funcione (sin personalización). Estas variables no tienen ningún valor predeterminado:
# Contraseña del usuario administrador de kerberos - al menos 8 caracteres
# Tipo: Str
freeipa_server_admin_password: Passw0rd
# Dominio DNS principal de la implementación IPA
# Tipo: Str
freeipa_server_domain: example.com
# Contraseña del Directorio Manager - al menos 8 caracteres
# Tipo: Str
freeipa_server_ds_password: Passw0rd
# El nombre del host de esta máquina (FQDN)
# Tipo: Str
freeipa_server_fqdn: ipa.example.com
# Dirección IP del Servidor Maestro
# Tipo: Str
freeipa_server_ip: 172.20.0.2
# Nombre del reino kerberos de la implementación IPA
# Tipo: Str
freeipa_server_realm: EXAMPLE.COM
Las variables que se pueden pasar a este rol y una breve descripción sobre ellas son las siguientes. (Para todas las variables, consulta defaults/main.yml)
# Habilitar/Deshabilitar el manejo del repositorio epel de RedHat
# Tipo: Bool
freeipa_server_enable_epel_repo: true
# Establecer automáticamente una entrada en /etc/hosts
# Tipo: Bool
freeipa_server_manage_host: true
# Opción de tipo de instalación del servidor FreeIPA (maestro/replika)
# Tipo: Str
freeipa_server_type: master
# FQDN del servidor maestro FreeIPA
# Tipo: Str
freeipa_server_master_fqdn: ''
# Comando base para la instalación de FreeIPA
# Tipo: Str
freeipa_server_install_base_command: ipa-{{ 'server' if freeipa_server_type == 'master' else 'replica' }}-install --unattended {{ '--server=' + freeipa_server_master_fqdn if freeipa_server_type == 'replica' }}
# Las opciones de instalación predeterminadas de FreeIPA
# Tipo: List
freeipa_server_install_options:
- "--realm={{ freeipa_server_realm }}"
- "--domain={{ freeipa_server_domain }}"
- "--setup-dns"
- "--ds-password={{ freeipa_server_ds_password }}"
- "--admin-password={{ freeipa_server_admin_password }}"
- "--mkhomedir"
- "--hostname={{ freeipa_server_fqdn | default(ansible_fqdn) }}"
- "--ip-address={{ freeipa_server_ip }}"
- "--no-host-dns"
- "--no-ntp"
- "--idstart=5000"
- "--ssh-trust-dns"
- "--forwarder=8.8.8.8"
- "--auto-forwarders"
Ejemplos
Para mantener el documento claro, se han eliminado las opciones de instalación. Puedes encontrar las opciones de instalación en este documento o en las páginas man en línea para ipa-server-install.
1) Instalar el servidor FreeIPA como maestro con configuraciones predeterminadas
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa-master.example.com
freeipa_server_ip: 172.20.0.2
freeipa_server_realm: EXAMPLE.COM
roles:
- timorunge.freeipa_server
2) Instalar el servidor FreeIPA como réplica con configuraciones predeterminadas
- hosts: freeipa-server
vars:
freeipa_server_type: replica
freeipa_server_master_fqdn: ipa-master.example.com
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa-replica.example.com
freeipa_server_ip: 172.20.0.3
freeipa_server_realm: EXAMPLE.COM
roles:
- timorunge.freeipa_server
3) Instalar el servidor FreeIPA y habilitarlo automáticamente en todas las interfaces de red (IPv4)
Aún deberías establecer freeipa_server_ip
si deseas usar freeipa_server_manage_host
.
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa.example.com
freeipa_server_ip: 172.20.0.3
freeipa_server_realm: EXAMPLE.COM
freeipa_server_install_options:
- "--ip-address={{ ansible_all_ipv4_addresses | join(' --ip-address=') }}"
roles:
- timorunge.freeipa_server
4) Instalar el servidor FreeIPA con opciones de instalación personalizadas
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa.example.com
freeipa_server_ip: 172.20.0.2
freeipa_server_realm: EXAMPLE.COM
freeipa_server_install_options:
- "--realm={{ freeipa_server_realm }}"
- "--domain={{ freeipa_server_domain }}"
- "--setup-dns"
- "--ds-password {{ freeipa_server_ds_password }}"
- "--admin-password {{ freeipa_server_admin_password }}"
- "--mkhomedir"
- "--hostname={{ freeipa_server_fqdn | default(ansible_fqdn) }}"
- "--ip-address={{ freeipa_server_ip }}"
- "--ip-address=10.0.0.2"
- "--ip-address=192.168.20.2"
- "--no-host-dns"
- "--no-ntp"
- "--idstart=5000"
- "--ssh-trust-dns"
- "--forwarder=8.8.8.8"
- "--auto-forwarders"
- "--no-ui-redirect"
- "--no-ssh"
- "--no-sshd"
roles:
- timorunge.freeipa_server
Opciones de instalación del servidor FreeIPA
Una visión general de las opciones de instalación para ipa-server-install (4.6.4).
Uso: ipa-server-install [opciones]
Opciones:
--version muestra el número de versión del programa y sale
-h, --help muestra este mensaje de ayuda y sale
-U, --unattended la desinstalación desatendida nunca solicita al usuario
--uninstall desinstala una instalación existente. La desinstalación se puede
ejecutar con la opción --unattended
Opciones básicas:
-p DM_PASSWORD, --ds-password=DM_PASSWORD
Contraseña del Directorio Manager
-a ADMIN_PASSWORD, --admin-password=ADMIN_PASSWORD
contraseña del usuario administrador de kerberos
--ip-address=IP_ADDRESS
Dirección IP del Servidor Maestro. Esta opción se puede usar
varias veces
-n DOMAIN_NAME, --domain=DOMAIN_NAME
dominio DNS principal de la implementación IPA (no
necesariamente relacionado con el nombre actual del host)
-r REALM_NAME, --realm=REALM_NAME
nombre del reino kerberos de la implementación IPA (típicamente
un nombre en mayúsculas del dominio DNS principal)
--hostname=HOST_NAME
nombre totalmente calificado de este host
--ca-cert-file=FILE
Archivo que contiene certificados CA para los archivos
del certificado de servicio
--no-host-dns No usar DNS para la búsqueda de nombres de host durante la instalación
Opciones del servidor:
--setup-adtrust configurar la capacidad de confianza AD
--setup-kra configurar un dogtag KRA
--setup-dns configurar bind con nuestra zona
--idstart=IDSTART El valor inicial para el rango de IDs (predeterminado aleatorio)
--idmax=IDMAX El valor máximo para el rango de IDs (predeterminado:
idstart+199999)
--no-hbac-allow No instalar la regla HBAC allow_all
--no-pkinit desactiva los pasos de configuración de pkinit
--no-ui-redirect No redirigir automáticamente a la interfaz web
--dirsrv-config-file=FILE
La ruta al archivo LDIF que se utilizará para modificar
la configuración de dse.ldif durante la instalación de la
instancia del servidor de directorio
Opciones de certificado SSL:
--dirsrv-cert-file=FILE
Archivo que contiene el certificado SSL del Servidor de Directorio
y la clave privada
--http-cert-file=FILE
Archivo que contiene el certificado SSL del Servidor Apache y
la clave privada
--pkinit-cert-file=FILE
Archivo que contiene el certificado SSL del KDC Kerberos y
la clave privada
--dirsrv-pin=PIN La contraseña para desbloquear la clave privada del Servidor de Directorio
--http-pin=PIN La contraseña para desbloquear la clave privada del Servidor Apache
--pkinit-pin=PIN La contraseña para desbloquear la clave privada del KDC Kerberos
--dirsrv-cert-name=NAME
Nombre del certificado SSL del Servidor de Directorio que
instalar
--http-cert-name=NAME
Nombre del certificado SSL del Servidor Apache que instalar
--pkinit-cert-name=NAME
Nombre del certificado SSL del KDC Kerberos que instalar
Opciones del cliente:
--mkhomedir crear directorios de inicio para usuarios en su primer inicio de sesión
-N, --no-ntp no configurar ntp
--ssh-trust-dns configurar el cliente OpenSSH para confiar en los registros DNS SSHFP
--no-ssh no configurar el cliente OpenSSH
--no-sshd no configurar el servidor OpenSSH
--no-dns-sshfp no crear automáticamente registros DNS SSHFP
Opciones del sistema de certificados:
--external-ca Generar un CSR para el certificado CA IPA que será firmado
por una CA externa
--external-ca-type={generic,ms-cs}
Tipo de la CA externa
--external-ca-profile=EXTERNAL_CA_PROFILE
Especificar el perfil/template del certificado que usar en la
CA externa
--external-cert-file=FILE
Archivo que contiene el certificado CA IPA y la cadena de
certificados de la CA externa
--subject-base=SUBJECT_BASE
La base de sujeto del certificado (predeterminado O=<realm-name>).
Los RDN son en orden LDAP (el RDN más específico primero).
--ca-subject=CA_SUBJECT
El DN de sujeto del certificado CA (predeterminado CN=Autoridad
de Certificación, O=<realm-name>). Los RDN son en orden LDAP
(el RDN más específico primero).
--ca-signing-algorithm={SHA1withRSA,SHA256withRSA,SHA512withRSA}
Algoritmo de firma del certificado CA IPA
Opciones DNS:
--allow-zone-overlap
Crear zona DNS incluso si ya existe
--reverse-zone=REVERSE_ZONE
La zona DNS inversa a usar. Esta opción se puede usar
varias veces
--no-reverse No crear nueva zona DNS inversa
--auto-reverse Crear las zonas inversas necesarias
--zonemgr=ZONEMGR Dirección de correo electrónico del administrador de zona DNS.
Por defecto, es hostmaster@DOMINIO
--forwarder=FORWARDERS
Agregar un reenvío DNS. Esta opción se puede usar varias veces
--no-forwarders No agregar ningún reenvío DNS, usar servidores raíz
en su lugar
--auto-forwarders Usar reenvíos DNS configurados en /etc/resolv.conf
--forward-policy={first,only}
Política de reenvío DNS para reenvíos globales
--no-dnssec-validation
Desactivar la validación DNSSEC
Opciones de confianza AD:
--enable-compat Habilitar soporte para dominios de confianza para clientes antiguos
--netbios-name=NETBIOS_NAME
Nombre NetBIOS del dominio IPA
--rid-base=RID_BASE
Valor inicial para mapear UIDs y GIDs a RIDs
--secondary-rid-base=SECONDARY_RID_BASE
Valor inicial del rango secundario para mapear UIDs
y GIDs a RIDs
Opciones de desinstalación:
--ignore-topology-disconnect
no comprobar si la desinstalación del servidor desconecta la
topología (nivel de dominio 1+)
--ignore-last-of-role
no comprobar si la desinstalación del servidor elimina el último
servidor CA/DNS o maestro DNSSec (nivel de dominio 1+)
Opciones de registro y salida:
-v, --verbose imprimir información de depuración
-d, --debug alias para --verbose (obsoleto)
-q, --quiet salida solo errores
--log-file=FILE registrar en el archivo dado
Pruebas
Las pruebas se realizan con Vagrant (instalando Vagrant) que levanta las siguientes máquinas virtuales:
- EL
- 7
- Fedora
- 26
- 27
- Ubuntu
- 16.04 LTS (Xenial Xerus)
- 17.10 (Artful Aardvark)
- 18.04 LTS (Bionic Beaver)
La última versión estable de Ansible se instala en todas las máquinas virtuales y se aplica un playbook de prueba localmente.
Para más detalles y cheques adicionales, consulta el punto de entrada de Vagrant.
# Pruebas en todas las máquinas vagrant disponibles:
# Esto tomará un tiempo. Tómate un café. O dos. O cuarenta y dos.
cd tests
vagrant up --parallel && vagrant halt
for h in $(vagrant global-status --prune | grep freeipa_server | awk '{print $2}') ; do echo ${h} ; vagrant up --provision ${h} ; vagrant ssh ${h} -c "sudo /vagrant/vagrant-entrypoint.sh" && (echo "$(date): ${h}: pass" >> tests/results.log) || (echo "$(date): ${h}: fail" >> tests/results.log) ; vagrant halt ${h} ; done
vagrant destroy -f
Si Vagrant no puede montar los directorios, debes asegurarte de que has instalado las Adiciones de Invitado de VirtualBox.
Las pruebas de Travis se realizan con Docker y docker_test_runner. Las pruebas en Travis realizan verificaciones de estilo y sintaxis.
Para más detalles y cheques adicionales, consulta la configuración de docker_test_runner y el punto de entrada de Docker.
# Pruebas localmente:
curl https://raw.githubusercontent.com/timorunge/docker-test-runner/master/install.sh | sh
./docker_test_runner.py -f tests/docker_test_runner.yml
Seguridad
Este playbook no se encarga de asegurar el Servidor FreeIPA, lo cual se puede hacer con por ejemplo firewalld o iptables.
Dependiendo de tu configuración, debes abrir los siguientes puertos:
Puertos TCP:
- 80, 443: HTTP/HTTPS
- 389, 636: LDAP/LDAPS
- 88, 464: kerberos
- 53: bind
Puertos UDP:
- 88, 464: kerberos
- 53: bind
Respaldo
Asegúrate de respaldar los certificados CA almacenados en /root/cacert.p12. Estos archivos son necesarios para crear réplicas. La contraseña para estos archivos es la contraseña del Directorio Manager (freeipa_server_ds_password
).
En FreeIPA también puedes encontrar una página general sobre Respaldo y Restauración que cubre los temas más importantes.
Hay un rol de Ansible que realiza copias de seguridad básicas: Copia de Seguridad del Servidor FreeIPA (Repositorio de Github).
Dependencias
Ninguna
Licencia
Licencia BSD de 3 cláusulas "Nueva" o "Revisada"
Información del Autor
- Timo Runge
FreeIPA Identity Management Server provisioning.
ansible-galaxy install timorunge.freeipa_server