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.
Zabbix: inicio de sesión LDAP exitoso

Si la prueba ha sido exitosa, guarde su configuración y cambie el tipo de autenticación en Zabbix de Interna a LDAP.

zabbix usa autenticación LDAP

Habilite la autenticación HTTP (Configuración HTTP -> Habilitar la autenticación HTTP).

Habilite la autenticación HTTP en Zabbix

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';

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

Chrony se utiliza para sincronizar la hora en CentOS 8. El ntp y ntpdate Los paquetes 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/[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.

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.keytab

Asegúrese de que la autenticación Kerberos funcione en Linux:

kinit -kV -p HTTP/zabbix.domain.local –t /etc/apache2/zabbix.keytab

kinit comprobar la autenticación kerberos

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

setspn HTTP para zabbix

Asegúrese de que el nombre de inicio de sesión del usuario haya cambiado a HTTP / zabbix.domain.local.

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

¿Cómo configurar navegadores para la autenticación Kerberos?

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.

Sitios de intranet locales 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.

Configuración de la zona de intranet local

Ingrese la URL de su servidor Zabbix.

agregar la URL de zabbix a la zona local

Ve a la Avanzado pestaña y comprobar Habilitar la autenticación de Windows integrada.

Habilitar la autenticación de Windows integrada en Internet Explorer

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).

GPO: Lista de asignación de sitio a zona

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

uris de confianza en firefox

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

Apache 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

Recomendado para ti