13 Configurar Kerberos amb Zabbix

Vista general

L'autenticació Kerberos es pot emprar al monitoratge Web i d'elements HTTP amb Zabbix.

Aquesta secció descriu un exemple de configuració de Kerberos amb el servidor Zabbix per monitorar el web www.example.com amb un Kerberos principal per a un procés de Zabbix a Debian/Ubuntu.

Configuració

1. Instal·leu el KDC i les utilitats del client:

sudo apt update
       sudo apt install krb5-kdc krb5-admin-server krb5-user

Durant la configuració del paquet, responeu les indicacions, p. ex.:

Reialme Kerberos versió 5 per defecte: EXAMPLE.COM
       Servidors Kerberos per al vostre reialme: localhost (o el vostre FQDN)
       Servidor administratiu per al vostre reialme Kerberos: localhost (o el vostre FQDN)

2. Assigneu un nom d'equip fàcil de descriure (opcional, per a proves locals).

Editeu /etc/hosts i afegiu una entrada per al vostre controlador de domini i servidor web si no teniu DNS:

sudo vi /etc/hosts

Línia d'exemple que podeu afegir:

192.168.1.100 dc01.example.com dc01

3. Configureu el client Kerberos i el domini KDC:

sudo vi /etc/krb5.conf

Exemple de configuració:

[libdefaults]
       default_realm = EXAMPLE.COM
       dns_lookup_realm = false
       dns_lookup_kdc = false
       rdns = false
       ticket_lifetime = 24h
       renew_lifetime = 7d
       forwardable = true
       
       [realms]
       EXAMPLE.COM = {
       kdc = dc01.example.com
       admin_server = dc01.example.com
       }
       
       [domain_realm]
       .example.com = EXAMPLE.COM
       example.com = EXAMPLE.COM

Si teniu previst utilitzar .localdomain o altres noms no públics, afegiu mapes explícits de domini→domini perquè el mapatge de nom d'equip→domini funcioni. Les incompatibilitats aquí provoquen errors No s'ha trobat el servidor a la base de dades Kerberos.

4. Inicialitzeu la base de dades Kerberos (d'un sol ús, equip KDC). Establiu un mot de pas mestre segur quan se us demani:

sudo krb5_newrealm

5. Creeu el principal HTTP/host.fqdn@REALM utilitzant el nom d'equip exacte que empraran els clients; preferiblement minúscules (per exemple, HTTP/[email protected]). Una incompatibilitat entre majúscules i minúscules provoca No s'ha trobat el servidor a la base de dades Kerberos.

sudo kadmin.local

Dins de kadmin.local:

addprinc [email protected] # principal administratiu
       addprinc -randkey HTTP/[email protected]
       ktadd -k /etc/apache2/http.keytab HTTP/[email protected]
       quit

Moveu la keytab a l'equip web (o manteniu-la local si és la mateixa màquina) i configureu els permisos que pugui utilitzar Apache:

chown www-data:www-data /etc/apache2/http.keytab
       chmod 600 /etc/apache2/http.keytab
       # verify
       sudo -u www-data -k /etc/apache2/http.keytab

6. Instal·leu i activeu el mòdul Apache GSSAPI:

sudo apt install libapache2-mod-auth-gssapi
       sudo a2enmod auth_gssapi
       sudo a2enmod headers
       sudo systemctl restart apache2

No totes les versions de mod_auth_gssapi admeten totes les directives Gssapi*. Si Apache falla amb Comanda no vàlida 'GssapiCredStore', elimineu la directiva no compatible o actualitzeu el mòdul.

7. Configureu un VirtualHost (ajusteu DocumentRoot / path a la vostra interfície d'usuari de Zabbix):

sudo vi /etc/apache2/sites-available/zabbix.conf

Dins de zabbix.conf:

<VirtualHost *:80>
       Nom del servidor dc01.example.com
       DocumentRoot /usr/share/zabbix/ui
       <Directori /usr/share/zabbix/ui>
       Opcions FollowSymLinks
       AllowOverride None
       Requereix que tots siguin atorgats
       AuthType GSSAPI
       AuthName "Inici de sessió Kerberos"
       GssapiCredStore keytab:/etc/apache2/http.keytab
       GssapiLocalName On
       Requereix usuari vàlid
       </Directori>
       RequestHeader set X-Remote-User %{REMOTE_USER}s env=REMOTE_USER
       RequestHeader no definit Autorització
       </VirtualHost>

Reinicieu Apache:

sudo systemctl restart apache2

8. Habiliteu/inicieu els serveis KDC i verifiqueu els ports d'escolta (equip KDC):

sudo systemctl enable --now krb5-kdc krb5-admin-server
       ss -tnlp | grep :80 # o: sudo netstat -tnlp | grep :80

9. Obtingueu un TGT per a proves (executeu-lo com a l'usuari que utilitzarà el tiquet).

Espereu veure krbtgt/[email protected] a la llista de tiquets. Executeu kinit com el mateix usuari del sistema operatiu que necessita el tiquet (per exemple, zabbix per a comprovacions web o www-data/Apache per a proves SSO interactives del navegador). Els tiquets emesos a un usuari de sistema operatiu diferent no seran visibles tret que s'ajustin KRB5CCNAME i els permisos.

kinit [email protected]
       klist

10. Proveu l'intercanvi de SPNEGO amb curl (des d'un client amb un TGT vàlid). Un 200 OK (o redirecció a l'aplicació) indica que SPNEGO ha tingut èxit:

curl -v --negotiate -u : http://dc01.example.com/

11. Opcionalment, si la interfície d'usuari de Zabbix ha d'acceptar inicis de sessió autenticats per HTTP, activeu l'autenticació HTTP al front end de Zabbix (ui/conf/zabbix.conf.php):

$ALLOW_HTTP_AUTH = true;

A la interfície d'usuari web, aneu a Usuaris > Autenticació i moveu-vos a la pestanya Configuració HTTP.

Marqueu la casella de selecció Habilita l'autenticació HTTP i feu clic a D'acord a la finestra emergent. Seleccioneu "Formulari d'inici de sessió HTTP" al menú desplegable Formulari d'inici de sessió predeterminat. Decideu si Inici de sessió que distingeix entre majúscules i minúscules s'adapta a la vostra política de directori. Feu clic al botó Actualitza per acabar.

12. Configuració del navegador (s'utilitza Firefox com a exemple): definiu network.negotiate-auth.trusted-uris com a host(s) que realitzen Negotiate (dc01.example.com) perquè el navegador enviï els tokens Kerberos automàticament.

Dins d'about:config:

network.negotiate-auth.trusted-uris = dc01.example.com

Ara, si visiteu http://dc01.example.com, hauríeu d'iniciar la sessió directament a Zabbix sense el formulari.

13. Mantingueu les claus/tiquets actualitzats. La vida útil predeterminada dels tiquets de Kerberos és d'aproximadament 10 hores. Afegiu un temporitzador cron/systemd per evitar caducitats:

#per al servei web
       kinit -kt /etc/apache2/http.keytab HTTP/[email protected]
       #per a l'usuari de supervisió
       kinit -kt /var/lib/zabbix/kerb.keytab [email protected]

14. Comprovacions de manteniment:

  • klist -k /etc/apache2/http.keytab — verifica que el principal de servei estigui present a keytab.
  • sudo tail -f /var/log/apache2/error.log — vigila els errors de GSSAPI (gss_acquire_cred[_from]() no ha pogut obtenir les credencials del servidor significa keytab/permisos o principal que falta).
  • curl --negotiate que retorna 401/403 sovint significa principal incorrecte, no hi ha tiquet, no coincideix la capçalera de l'equip o un problema de permisos del sistema de fitxers; revisa els registres i els mapatges de domini /etc/krb5.conf.

Notes de seguretat i permisos de fitxers

Els fitxers keytab només han de ser llegibles pel compte que els necessita. Exemples de permisos: 0400 propietat de zabbix:zabbix per a un keytab d'usuari zabbix, o 0440 i root:www-data per a un keytab d'Apache.

Eviteu emmagatzemar contrasenyes de text sense format de llarga durada a l'equip. Utilitzeu keytabs o principals de màquina units a un domini sempre que sigui possible.

Quan executeu proves o scripts que defineixen KRB5CCNAME o copien keytabs, comproveu la propietat i els permisos després de l'operació; un servidor web que rebutja les credencials sol ser un problema de permisos de fitxer.