Zabbix: autenticación de inicio de sesión único (SSO) en Active Directory
En este artículo, consideraremos una configuración paso a paso de una autenticación SSO (Inicio de sesión único) 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 de confianza deben estar configurados en IE).
Un escaparate:
Servidor Ubuntu 18.04 LTS;
Dominio de Active Directory con nivel funcional 2008 (o superior)
-
Zabbix Server 4.0.11, Apache2 como servidor web (guía de instalación de Zabbix)
Nota. Para implementar SSO, en este artículo se usará Apache2 con el módulo libapache2-mod-auth-kerb. Nginx no se discutirá aquí, pero tiene un spnego-http-auth-nginx-module que debe habilitarse por separado al compilar Nginx.
Autenticación Zabbix LDAP en Active Directory
En primer lugar, debe vincular a los usuarios del dominio con Zabbix. Para hacerlo basta con crear un usuario en Zabbix con el mismo login que tiene 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 usará 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 $trueEjecute 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. Marque Habilitar autenticación LDAP y complete los siguientes campos:
Anfitrión LDAP:
ldap://dc1.domain.localPuerto:
389-
DN básico:
DC=domain, DC=local Atributo de búsqueda:
sAMAccountNameVincular DN:
CN=zabbix_admin,OU=Users,DC=domain,DC=local
Puede leer la descripción de cualquier parámetro en la sección Autenticación LDAP 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 sus ajustes sean válidos realizando un inicio de sesión de prueba (el botón Probar). Especifique un nombre de usuario (creamos la cuenta anteriormente) y una contraseña de AD.
Si la prueba ha tenido éxito, 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 autenticación HTTP).
La autenticación LDAP está configurada.
Consejo. Si su servidor LDAP no está disponible, no podrá acceder a Zabbix. Para volver a la autenticación interna, abra MySQL y ejecute el siguiente comando:
update zabbix.config set authentication_type='0' where configid='1';Configurar una autenticación transparente (inicio de sesión único) en Zabbix (Apache2, usuario krb5)
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.localPara que la autenticación Kerberos funcione correctamente, sincroniza la hora con tu controlador de dominio. Instale el paquete ntpdate y vincúlelo al controlador de dominio.
apt-get install ntp ntpdate
ntpdate dc.domain.localChrony se usa para sincronizar la hora en CentOS 8. Los paquetes ntp y ntpdate no están disponibles en los repositorios oficiales.
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/zabbix.domain.local@DOMAIN.LOCAL -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn -setpassCopie el archivo C:\zabbix.keytab en el directorio /etc/apache2/ en su servidor Zabbix.
Instale los paquetes de Kerberos y un módulo para apache2:
#apt install krb5-user libapache2-mod-auth-kerbConfigurar krb5-usuario. Edite /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.LOCALEspecifique su dominio. En algunos lugares el nombre de dominio se escribe en mayúsculas, sigue esta regla.
Nota. Mire la línea que contiene la ruta del archivo keytab "default_keytab_name=/etc/apache2/zabbix.keytab" y asegúrese de que el archivo esté disponible allí. Otorgue permisos de lectura en www-data y ejecute:
chown www-data:www-data /etc/apache2/zabbix.keytabAsegúrese de que la autenticación Kerberos funcione en Linux:
kinit -kV -p HTTP/zabbix.domain.local -t /etc/apache2/zabbix.keytabEs posible que vea este error:
kinit: Client 'HTTP/zabbix.domain.local@DOMAIN.LOCAL’ not found in Kerberos database while getting initial credentialsEn este caso, intente autenticarse usando las credenciales de otro usuario:
kinit -pV LOGINSi la autenticación es exitosa, el problema está en su archivo keytab. Asegúrate de haberlo generado correctamente. Compruebe si ingresó el comando correcto para crear un archivo keytab.
Asegúrese de que exista un registro SPN para su cuenta de servicio Zabbix en AD. Introduzca el siguiente comando en el controlador de dominio:
setspn -l zabbix_adminVerás 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_adminAsegú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 keytab, se produce un error. De modo que puede establecer cualquier valor durante la prueba. Después de asegurarse de que el sistema funciona, especifique el nombre de servicio válido. Puedes comprobarlo usando:
klist -le /etc/apache2/zabbix.keytab¿Cómo configurar los navegadores para la autenticación Kerberos?
Para que Internet Explorer use la autenticación Kerberos en Zabbix, deberá agregar su URL a los sitios de Intranet local. Google Chrome utiliza la configuración de Internet Explorer, por lo que no necesita 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 el IE.
Haga clic en Sitios en la intranet local, marque 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.
Vaya a la pestaña Avanzado y marque Habilitar autenticación integrada de Windows.
Además, también puede colocar la URL de Zabbix en la zona de Intranet local mediante 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 -> Asignación de sitio a zona lista. 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:configpara su Mozilla Firefox:
network.automatic-ntlm-auth.trusted-uris
network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-urisSi encuentra algún problema, consulte el artículo detallado sobre la configuración de Kerberos en los navegadores.
Después de eso, la configuración ha terminado. Si intenta acceder a la URL de su servidor Zabbix, se autenticará automáticamente y no se le pedirá que ingrese su contraseña.
Depuración y solució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-disponible/000-defaults.conf:
LogLevel trace8Reinicie 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 usar los comandos kinit y klist .
kinit es una herramienta para obtener y almacenar en caché los tickets de Kerberos, por ejemplo:
kinit -V -k -t /etc/apache2/zabbix.keytab -p HTTP/zabbix.domain.local@DOMAIN.LOCALSi ha generado su archivo keytab correctamente, el comando se ejecutará y recibirá un mensaje de que la autenticación se ha realizado correctamente.
Con klist, puede ver los tickets de Kerberos almacenados en caché:
klist -a













