En este artículo consideraremos una configuración paso a paso de una autenticación SSO (Single Sign-On) transparente para Zabbix 4.0 (o más reciente) en Active Directory usando Kerberos.
El resultado final es que un usuario se autentica automáticamente en la página principal de Zabbix sin ingresar las credenciales. Para hacerlo, un usuario debe iniciar sesión en Windows con la cuenta de dominio de Active Directory especificada en Zabbix. Además, el usuario debe configurar el navegador (la compatibilidad con Kerberos debe estar habilitada y los sitios de intranet confiables deben configurarse en IE).
Un escaparate:
- Ubuntu Server 18.04 LTS;
- Dominio de Active Directory con nivel funcional 2008 (o superior)
- Zabbix Server 4.0.11, Apache2 como servidor web (guía sobre la instalación de Zabbix)
Nota. Para implementar SSO, Apache2 con libapache2-mod-auth-curb El módulo se utilizará en este artículo. Nginx no se discutirá aquí, pero tiene módulo spnego-http-auth-nginx que debe habilitarse por separado al compilar Nginx.
Autenticación LDAP de Zabbix en Active Directory
En primer lugar, debe vincular los usuarios del dominio a Zabbix. Para ello, basta con crear un usuario en Zabbix con el mismo login que tienen en el dominio AD. Por ejemplo, si su inicio de sesión (atributo sAMAccountName) es user_5, un usuario en Zabbix debe tener el mismo inicio de sesión.
Hágalo para cada usuario que utilizará Zabbix.
Luego, cree una cuenta de usuario separada en Active Directory para vincular Zabbix a su dominio. En la práctica, puede usar cualquier cuenta de dominio, pero es mejor crear una cuenta de servicio separada. En mi caso será zabbix_admin. Para crear un usuario en AD, usaré el cmdlet New-ADUser de PowerShell:
New-ADUser -Name "zabbix_admin" -GivenName "zabbix_admin" -Surname "zabbix_admin" -SamAccountName "zabbix_admin" -AccountPassword (Read-Host -AsSecureString "Password:") -DisplayName "zabbix_admin" -Enabled $true
Ejecute el comando que se muestra arriba en la consola de PowerShell y establezca una contraseña de usuario. Su nuevo usuario se ubicará en el contenedor Usuarios en la raíz de su dominio.
Configuremos la autenticación LDAP en Zabbix. En la interfaz de Zabbix, vaya a la pestaña de configuración de LDAP en Administración -> Autenticación. Cheque Habilitar la autenticación LDAP y complete los siguientes campos:
- Host LDAP:
ldap://dc1.domain.local
- Puerto:
389
- DN base:
DC=domain, DC=local
- Atributo de búsqueda:
sAMAccountName
- Vincular DN:
CN=zabbix_admin,OU=Users,DC=domain,DC=local
Puede leer la descripción de cualquier parámetro en el Autenticación LDAP sección de la documentación de Zabbix: https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication.
Antes de completar la configuración, asegúrese de que su configuración sea válida realizando un inicio de sesión de prueba (el Prueba botón). Especifique un nombre de usuario (creamos la cuenta anteriormente) y una contraseña de AD.
Si la prueba ha sido exitosa, guarde su configuración y cambie el tipo de autenticación en Zabbix de Interna a LDAP.
Habilite la autenticación HTTP (Configuración HTTP -> Habilitar la autenticación HTTP).
La autenticación LDAP está configurada.
update zabbix.config set authentication_type="0" where configid='1';
Configure una autenticación transparente (inicio de sesión único) en Zabbix (Apache2, krb5-user)
En primer lugar, especifique el nombre FQDN de su servidor en / etc / hostname que debe coincidir con el registro DNS de su dominio. En mi caso es zabbix.domain.local.
También escriba el FQDN de su servidor para la dirección IP local y la dirección IP de su servidor en / etc / hosts.
127.0.0.1 localhost zabbix.domain.local 10.1.1.10 zabbix.domain.local
Para que la autenticación Kerberos funcione correctamente, sincronice la hora con su controlador de dominio. Instala el ntpdate package y vincularlo al controlador de dominio.
apt-get install ntp ntpdate
ntpdate dc.domain.local
Ahora necesita generar un archivo keytab en un controlador de dominio. Keytab es un archivo que contiene SPN y claves cifradas. Keytab se utiliza para la autenticación basada en Kerberos.
- Inicie sesión en su controlador de dominio y ejecute el símbolo del sistema como administrador. Vaya a C: .
- Introduzca la siguiente:
ktpass -princ HTTP/[email protected] -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn –setpass
- Copie el archivo C: zabbix.keytab al directorio / etc / apache2 / en su servidor Zabbix.
Instale los paquetes Kerberos y un módulo para apache2:
#apt install krb5-user libapache2-mod-auth-kerb
Configure krb5-user. Editar /etc/krb5.cnf:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = DOMAIN.LOCAL default_keytab_name = /etc/apache2/zabbix.keytab dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] DOMAIN.LOCAL = { kdc = dc.domain.local default_domain = DOMAIN.LOCAL admin_server = dc.domain.local } [domain_realm] .domain.local = DOMAIN.LOCAL domain.local = DOMAIN.LOCAL
Especifica tu dominio. En algunos lugares, el nombre de dominio está escrito en mayúsculas, siga esta regla.
chown www-data:www-data /etc/apache2/zabbix.keytab
Asegúrese de que la autenticación Kerberos funcione en Linux:
kinit -kV -p HTTP/zabbix.domain.local –t /etc/apache2/zabbix.keytab
Puede ver este error:
kinit: Client 'HTTP/[email protected]’ not found in Kerberos database while getting initial credentials
En este caso, intente autenticarse con las credenciales de otro usuario:
kinit -pV LOGIN
Si la autenticación es exitosa, el problema está en su archivo keytab. Asegúrate de haberlo generado correctamente. Verifique si ingresó el comando correcto para crear un archivo de tabla de claves.
Asegúrese de que exista un registro SPN para su cuenta de servicio Zabbix en AD. Ingrese el siguiente comando en el controlador de dominio:
setspn -l zabbix_admin
Verá un mensaje como este. Debe estar en formato HTTP / zabbix.domain.local. Si no hay registro, agréguelo.
setspn -a HTTP/zabbix.domain.local zabbix_admin
Asegúrese de que el nombre de inicio de sesión del usuario haya cambiado a HTTP / zabbix.domain.local.
Si no es así, cámbielo manualmente.
Luego edite el archivo de configuración de apache2 - /etc/apache2/sites-available/000-default.conf.
Agregue lo siguiente en la línea ServerName zabbix.domain.local:
<Location /> AuthType Kerberos AuthName "Kerberos authenticated" KrbAuthRealms DOMAIN.LOCAL #KrbServiceName HTTP/zabbix.domain.local KrbServiceName Any Krb5Keytab /etc/apache2/zabbix.keytab KrbMethodNegotiate On KrbSaveCredentials on KrbLocalUserMapping on Require valid-user </Location>
Si KrbServiceName no coincide con el nombre especificado en el archivo de tabla de claves, se produce un error. Entonces puedes configurar Alguna valor durante la prueba. Después de asegurarse de que el sistema esté funcionando, especifique el nombre de servicio válido. Puedes comprobarlo usando:klist -le /etc/apache2/zabbix.keytab
Para que Internet Explorer use la autenticación Kerberos en Zabbix, deberá agregar su URL a Intranet local sitios. Google Chrome utiliza la configuración de Internet Explorer, por lo que no es necesario configurarlo por separado.
Nota. La URL de su sitio Zabbix no debe pertenecer a la lista de sitios de confianza; de lo contrario, Kerberos no funcionará. El sitio debe especificarse solo en los sitios de Intranet.
Abra Opciones -> Seguridad en IE.
Hacer clic Sitios en la intranet local, verifique las opciones que se muestran en la captura de pantalla a continuación y haga clic en Avanzado.
Ingrese la URL de su servidor Zabbix.
Ve a la Avanzado pestaña y comprobar Habilitar la autenticación de Windows integrada.
Además, también puede poner la URL de Zabbix en la zona de Intranet local usando las Políticas de grupo (Configuración de la computadora -> Plantillas administrativas -> Componentes de Windows -> Internet Explorer -> Panel de control de Internet -> Página de seguridad -> Lista de asignación de sitio a zona. Utilice el código de zona 1 para los sitios de intranet).
Agregue la URL de su servidor Zabbix a los siguientes parámetros de about:config
para su Mozilla Firefox:
network.automatic-ntlm-auth.trusted-uris network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris
Después de eso, la configuración termina. Si intenta acceder a la URL de su servidor Zabbix, será autenticado automáticamente y no se le pedirá que ingrese su contraseña.
Depuración y resolución de problemas de autenticación Kerberos en Apache
Si tiene algún problema, habilite el modo de depuración en apache2:
Ingrese lo siguiente antes de la etiqueta de cierre en /etc/apache2/sites-available/000-defaults.conf:
LogLevel trace8
Reinicie Apache y verifique el error del módulo Kerberos en el archivo error.log.
Para hacerlo más conveniente, use este comando para filtrar las entradas por la dirección IP:
tail -f /var/log/apache2/error.log | grep ‘Your IP address’
Para trabajar con Kerberos y diagnosticarlo, puede utilizar kinit y klist comandos.
kinit es una herramienta para obtener y almacenar en caché tickets de Kerberos, por ejemplo:
kinit –V -k -t /etc/apache2/zabbix.keytab –p HTTP/[email protected]
Si ha generado su archivo de tabla de claves correctamente, el comando se ejecutará y recibirá un mensaje de que la autenticación se ha realizado correctamente.
Utilizando klist, puede ver los tickets Kerberos almacenados en caché:
klist -a