13 Kerberos konfigurēšana ar Zabbix

Pārskats

Kerberos autentifikāciju var izmantot tīmekļa uzraudzībā un HTTP vienumos Zabbix.

Šajā lapā ir aprakstīts piemērs, kā konfigurēt Kerberos Zabbix serverim, lai Debian/Ubuntu vidē veiktu www.example.com tīmekļa uzraudzību, izmantojot Kerberos principālu Zabbix procesam.

Konfigurācija

1. Instalējiet KDC un klienta utilītprogrammas:

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

Pakotņu iestatīšanas laikā atbildiet uz uzvednēm, piemēram:

Default Kerberos version 5 realm: EXAMPLE.COM
Kerberos servers for your realm: localhost (or your FQDN)
Administrative server for your Kerberos realm: localhost (or your FQDN)

2. Kartējiet draudzīgu hosta nosaukumu (pēc izvēles, lokālai testēšanai).

Rediģējiet /etc/hosts un pievienojiet ierakstu savam DC un tīmekļa serverim, ja jums nav DNS:

sudo vi /etc/hosts

Piemēra rinda, ko varat pievienot:

192.168.1.100  dc01.example.com dc01

3. Konfigurējiet Kerberos klientu un KDC realm:

sudo vi /etc/krb5.conf

Piemēra iestatījumi:

[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

Ja plānojat izmantot .localdomain vai citus nepubliskus nosaukumus, pievienojiet skaidras domain→realm kartēšanas, lai darbotos hosta nosaukuma→realm kartēšana. Neatbilstības šeit izraisa Server not found in Kerberos database kļūdas.

4. Inicializējiet Kerberos datubāzi (vienreiz, KDC resursdatorā). Kad tiek prasīts, iestatiet drošu galveno paroli:

sudo krb5_newrealm

5. Izveidojiet HTTP/host.fqdn@REALM principalu, izmantojot tieši to hosta nosaukumu, ko izmantos klienti; priekšroka dodama mazajiem burtiem (piem., HTTP/[email protected]). Rakstzīmju reģistra/nosaukuma neatbilstība izraisa Server not found in Kerberos database.

sudo kadmin.local

kadmin.local iekšpusē:

addprinc [email protected]     # administratīvais principals
addprinc -randkey HTTP/[email protected]
ktadd -k /etc/apache2/http.keytab HTTP/[email protected]
quit

Pārvietojiet keytab uz tīmekļa hostu (vai atstājiet lokāli, ja tā ir tā pati mašīna) un iestatiet Apache lietojamas atļaujas:

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

6. Instalējiet un iespējojiet Apache GSSAPI moduli:

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

Ne visas mod_auth_gssapi versijas atbalsta katru Gssapi* direktīvu. Ja Apache neizdodas ar Invalid command 'GssapiCredStore', noņemiet neatbalstīto direktīvu vai atjauniniet moduli.

7. Konfigurējiet VirtualHost (pielāgojiet DocumentRoot / ceļu uz jūsu Zabbix lietotāja saskarni):

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

zabbix.conf iekšpusē:

<VirtualHost *:80>
    ServerName dc01.example.com
    DocumentRoot /usr/share/zabbix/ui
    <Directory /usr/share/zabbix/ui>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
        AuthType GSSAPI
        AuthName "Kerberos Login"
        GssapiCredStore keytab:/etc/apache2/http.keytab
        GssapiLocalName On
        Require valid-user
    </Directory>
    RequestHeader set X-Remote-User %{REMOTE_USER}s env=REMOTE_USER
    RequestHeader unset Authorization
</VirtualHost>

Restartējiet Apache:

sudo systemctl restart apache2

8. Iespējojiet/palaidiet KDC pakalpojumus un pārbaudiet klausīšanās portus (KDC resursdatorā):

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

9. Iegūstiet TGT testēšanai (palaidiet kā lietotājs, kurš izmantos biļeti).

Biļešu sarakstā vajadzētu redzēt krbtgt/[email protected]. Palaidiet kinit ar to pašu OS lietotāju, kuram nepieciešama biļete (piem., zabbix tīmekļa pārbaudēm vai www-data/Apache interaktīviem pārlūka SSO testiem). Biļetes, kas izsniegtas citam OS lietotājam, nebūs redzamas, ja vien netiks pielāgots KRB5CCNAME un atļaujas.

kinit [email protected]
klist

10. Pārbaudiet SPNEGO apmaiņu ar curl (no klienta ar derīgu TGT). 200 OK (vai novirzīšana uz lietotni) norāda, ka SPNEGO ir izdevies:

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

11. Pēc izvēles, ja Zabbix lietotāja saskarnei jāpieņem HTTP autentificēti pieteikšanās mēģinājumi, iespējojiet HTTP autentifikāciju Zabbix lietotāja saskarnē (ui/conf/zabbix.conf.php):

$ALLOW_HTTP_AUTH = true;

Tīmekļa lietotāja saskarnē dodieties uz Users > Authentication un pārejiet uz HTTP settings cilni. Atzīmējiet izvēles rūtiņu Enable HTTP authentication un uznirstošajā logā noklikšķiniet Ok. Nolaižamajā sarakstā Default login form atlasiet "HTTP login form". Izlemiet, vai Case-sensitive login atbilst jūsu direktorijas politikai. Lai pabeigtu, noklikšķiniet uz pogas Update.

12. Pārlūka konfigurācija (Firefox izmantots kā piemērs): iestatiet network.negotiate-auth.trusted-uris uz hostu(-iem), kas veic Negotiate (dc01.example.com), lai pārlūks automātiski nosūtītu Kerberos žetonus.

about:config iekšpusē:

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

Tagad, apmeklējot http://dc01.example.com, jums vajadzētu tikt uzreiz pieteiktam Zabbix bez formas.

13. Uzturiet atslēgas/biļetes svaigas. Kerberos biļetes noklusējuma derīguma termiņš ir aptuveni 10 stundas. Pievienojiet cron/systemd taimeri, lai izvairītos no termiņa beigām:

# tīmekļa pakalpojumam
kinit -kt /etc/apache2/http.keytab HTTP/[email protected]
# uzraudzības lietotājam
kinit -kt /var/lib/zabbix/kerb.keytab [email protected]

14. Uzturēšanas pārbaudes:

  • klist -k /etc/apache2/http.keytab — pārbaudiet, vai service principal ir keytab failā.
  • sudo tail -f /var/log/apache2/error.log — sekojiet GSSAPI kļūdām (gss_acquire_cred[_from]() failed to get server creds nozīmē keytab/atļauju problēmas vai trūkstošu principalu).
  • curl --negotiate atgriežot 401/403, bieži nozīmē nepareizu principalu, nav biļetes, hosta galvenes neatbilstību vai failu sistēmas atļauju problēmu; pārbaudiet žurnālus un /etc/krb5.conf domain kartējumus.

Drošības un failu atļauju piezīmes

Keytab failiem jābūt lasāmiem tikai tam kontam, kuram tie ir nepieciešami. Atļauju piemēri: 0400, īpašnieks zabbix:zabbix — zabbix lietotāja keytab failam, vai 0440 un root:www-data — Apache keytab failam.

Izvairieties no ilgtermiņa atklāta teksta paroļu glabāšanas hostā. Ja iespējams, izmantojiet keytab failus vai domēnam pievienotas datora galvenās identitātes.

Palaižot testus vai skriptus, kas iestata KRB5CCNAME vai kopē keytab failus, pēc darbības vēlreiz pārbaudiet īpašnieku un atļaujas — tīmekļa servera atteikums pieņemt akreditācijas datus bieži ir saistīts ar failu atļauju problēmu.