6 Sichere Verbindung zum Frontend

Überblick

Dieser Abschnitt enthält Schritte zur Einrichtung von Zabbix sowie Konfigurationsbeispiele für sichere TLS-Verbindungen zwischen dem Zabbix Frontend und dem Zabbix Server.

Konfiguration

Standardmäßig ist die Kommunikation zwischen dem Zabbix Frontend und dem Zabbix Server unverschlüsselt. Für eine höhere Sicherheit aktivieren Sie TLS auf beiden Seiten. Nachfolgend finden Sie ein Beispiel für die einfachste Vorgehensweise.

1. Zertifikate und Schlüssel generieren.

Erstellen Sie ein Arbeitsverzeichnis:

sudo mkdir -p /etc/zabbix/ssl && cd /etc/zabbix/ssl

Erstellen Sie ein CA-Zertifikat (passen Sie den Wert MyZabbixCA an den tatsächlichen allgemeinen Namen an):

sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyZabbixCA/"

Generieren Sie einen privaten Schlüssel und ein Zertifikat für den Zabbix Server (passen Sie den Wert zabbix-server.example.com an den tatsächlichen allgemeinen Namen an):

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr -subj "/CN=zabbix-server.example.com/"
sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out server.crt

Generieren Sie einen privaten Schlüssel und ein Zertifikat für das Zabbix Frontend (passen Sie den Wert zabbix-frontend-node an den tatsächlichen allgemeinen Namen an):

sudo openssl genrsa -out frontend.key 2048
sudo openssl req -new -key frontend.key -out frontend.csr -subj "/CN=zabbix-frontend-node/"
sudo openssl x509 -req -days 365 -in frontend.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out frontend.crt

2. Legen Sie die entsprechenden Berechtigungen fest.

Für den Zabbix Server (passen Sie Eigentümer und Gruppe an den Benutzer des Zabbix-Server-Daemons Ihrer Distribution an):

sudo chown root:zabbix /etc/zabbix/ssl/server.{crt,key} /etc/zabbix/ssl/ca.crt
sudo chmod 640 /etc/zabbix/ssl/server.key
sudo chmod 644 /etc/zabbix/ssl/server.crt /etc/zabbix/ssl/ca.crt

Für das Frontend (passen Sie Eigentümer und Gruppe an den Webserver-Benutzer Ihrer Distribution an):

sudo chown root:www-data /etc/zabbix/ssl/frontend.{crt,key}
sudo chmod 640 /etc/zabbix/ssl/frontend.key
sudo chmod 644 /etc/zabbix/ssl/frontend.crt

3. Konfigurieren Sie den Zabbix Server.

Fügen Sie in zabbix_server.conf Folgendes hinzu:

TLSFrontendAccept=cert
TLSCertFile=/etc/zabbix/ssl/server.crt
TLSKeyFile=/etc/zabbix/ssl/server.key
TLSCAFile=/etc/zabbix/ssl/ca.crt
# Optional:
# TLSFrontendCertIssuer=CN=MyZabbixCA
# TLSFrontendCertSubject=CN=zabbix-frontend-node

Starten Sie anschließend den Server neu:

sudo systemctl restart zabbix-server

4. Konfigurieren Sie das Zabbix Frontend.

Aktivieren Sie während der Installation der Weboberfläche die Option Verbindungen von der Weboberfläche verschlüsseln (und bei Bedarf die Option Aussteller und Betreff des Serverzertifikats überprüfen) und füllen Sie die Felder TLS-CA-Datei, TLS-Schlüsseldatei und TLS-Zertifikatsdatei (sowie bei Bedarf die Felder Aussteller des Server-TLS-Zertifikats und Betreff des Server-TLS-Zertifikats) aus:

Parameter Beschreibung
TLS-CA-Datei Geben Sie den vollständigen Pfad zur Zertifikatsdatei der Zertifizierungsstelle (CA) an, die zur Überprüfung des Serverzertifikats verwendet wird.
TLS-Schlüsseldatei Geben Sie den vollständigen Pfad zur privaten Clientschlüsseldatei an, die dem Clientzertifikat entspricht.
TLS-Zertifikatsdatei Geben Sie den vollständigen Pfad zur Clientzertifikatsdatei an, wenn eine gegenseitige TLS-Authentifizierung erforderlich ist.
Aussteller des Server-TLS-Zertifikats Geben Sie einen Distinguished Name (DN) des Ausstellers an, der mit dem Serverzertifikat abgeglichen werden soll.
Betreff des Server-TLS-Zertifikats Geben Sie einen Distinguished Name (DN) des Betreffs an, der mit dem Serverzertifikat abgeglichen werden soll.

Bearbeiten Sie bei bestehenden Installationen die folgenden Felder in zabbix.conf.php:

$ZBX_SERVER_TLS['ACTIVE'] = '1';
$ZBX_SERVER_TLS['CA_FILE'] = '/etc/zabbix/ssl/ca.crt';
$ZBX_SERVER_TLS['KEY_FILE'] = '/etc/zabbix/ssl/frontend.key';
$ZBX_SERVER_TLS['CERT_FILE'] = '/etc/zabbix/ssl/frontend.crt';
// Optional:
// $ZBX_SERVER_TLS['CERTIFICATE_ISSUER']  = 'CN=MyZabbixCA';
// $ZBX_SERVER_TLS['CERTIFICATE_SUBJECT'] = 'CN=zabbix-server.example.com';

5. Überprüfen Sie die Verschlüsselung, indem Sie bestätigen, dass im Zabbix Frontend oder in der Protokolldatei des Zabbix Servers keine Fehlermeldungen vorhanden sind:

tail -f /var/log/zabbix/zabbix_server.log

Fehlerbehebung

Eine falsche oder unvollständige TLS-Konfiguration kann Fehler im Zabbix Frontend verursachen oder darauf hinweisen, dass der Zabbix Server ausgeführt wird, die Verbindung jedoch nicht erfolgreich hergestellt werden kann:

Um das genaue Konfigurationsproblem zu identifizieren, setzen Sie die Protokollstufe des Zabbix Servers auf 4, reproduzieren Sie den Fehler im Frontend und überprüfen Sie das Protokoll des Zabbix Servers auf die entsprechende Fehlermeldung.

Die folgenden Fälle beschreiben häufige Fehler und deren mögliche Ursachen.

Die IP-Adresse des Frontends ist nicht zulässig

Das Protokoll des Zabbix-Servers enthält einen ähnlichen Fehler:

54283:20260819:105926.400 frontend connection from "127.0.0.1" is not allowed by FrontendAllowedIP

Die Verbindung wird nach dem TCP-Handshake getrennt, da die IP-Adresse des Frontends nicht autorisiert ist.

Fügen Sie die IP-Adresse des Frontends dem Parameter FrontendAllowedIP in zabbix_server.conf hinzu und starten Sie den Zabbix-Server neu.

Unverschlüsselte Verbindungen sind nicht zulässig

Das Protokoll des Zabbix-Servers enthält einen ähnlichen Fehler:

56884:20260819:111154.285 frontend connection of type "unencrypted" is not allowed by TLSFrontendAccept

Der Zabbix-Server ist so konfiguriert, dass er nur TLS-Verbindungen akzeptiert, beispielsweise mit TLSFrontendAccept=cert, aber das Frontend versucht, eine unverschlüsselte Verbindung herzustellen.

Aktivieren Sie die Verschlüsselung für das Frontend und konfigurieren Sie die erforderlichen TLS-Dateien in zabbix.conf.php, wie in Schritt 4 der Konfiguration beschrieben.

Frontend versucht TLS, während der Server unverschlüsselte Verbindungen erwartet

Das Protokoll des Zabbix-Servers enthält einen ähnlichen Fehler:

61091:20260819:115916.019 End of zbx_tls_accept():FAIL error:'TLS handshake set result code to 1: file ../ssl/record/rec_layer_s3.c line 317 func ssl3_read_n: error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert "decode error"'

Die genaue Fehlermeldung hängt von der OpenSSL-Version ab.

Der Zabbix-Server ist so konfiguriert, dass er nur unverschlüsselte Verbindungen akzeptiert, beispielsweise mit TLSFrontendAccept=unencrypted, während das Frontend versucht, eine TLS-Verbindung herzustellen.

Konfigurieren Sie den Zabbix-Server so, dass er TLS-Verbindungen akzeptiert, indem Sie TLSFrontendAccept=cert setzen und TLSCertFile sowie TLSKeyFile in zabbix_server.conf definieren. Alternativ können Sie die Verschlüsselung des Frontends in zabbix.conf.php deaktivieren.

Frontend-Zertifikat wird nicht als vertrauenswürdig eingestuft

Das Protokoll des Zabbix-Servers enthält einen ähnlichen Fehler:

62248:20260819:124203.812 End of zbx_tls_accept():FAIL error:'self-signed certificate: TLS handshake set result code to 1: file ../ssl/statem/statem_srvr.c line 3522 func tls_process_client_certificate: error:0A000086:SSL routines::certificate verify failed: TLS write fatal alert "unknown CA"'

Das Frontend hat ein Zertifikat präsentiert, aber der Zabbix-Server vertraut der Zertifizierungsstelle (CA), die es signiert hat, nicht.

Dasselbe Problem kann auch in den Systeminformationen des Frontends angezeigt werden:

fread(): SSL operation failed with code 1. OpenSSL Error messages:

error:0A000418:SSL routines::tlsv1 alert unknown ca [zabbix.php:17 → require_once() → ZBase->run() → ZBase->processRequest() → CController->run() → Widgets\SystemInfo\Actions\WidgetView->doAction() → CSystemInfoHelper::getData() → CSystemInfoHelper::getServerStatus() → CZabbixServer->getStatus() → CZabbixServer->request() → fread() → CConfigFile->{closure:/user/share/conf/zabbix.conf.php:89}() in conf/zabbix.conf.php:95]

Das Frontend zeigt möglicherweise auch „Incorrect response received from Zabbix server "localhost"“ an.

Überprüfen Sie, ob das Frontend-Zertifikat von der in zabbix_server.conf mit TLSCAFile angegebenen CA signiert wurde.

TLS-Schlüsseldatei ist nicht lesbar

Das Frontend zeigt möglicherweise „TLS key file: file is not readable.“ an.

Möglicherweise wird auch „Unable to connect to the Zabbix server due to TLS settings. Some functions are unavailable.“ angezeigt.

Der Benutzer des Webservers verfügt nicht über ausreichende Berechtigungen, um eine oder mehrere in zabbix.conf.php konfigurierte Zertifikat-, Schlüssel- oder CA-Dateien zu lesen. Dies kann auftreten, wenn Zertifikatdateien in einem eingeschränkten Verzeichnis wie /root/ oder im Home-Verzeichnis eines Benutzers gespeichert sind.

Verschieben Sie die Zertifikatdateien in ein für den Webserver zugängliches Verzeichnis und legen Sie die entsprechenden Berechtigungen fest, wie in Schritt 2 der Konfiguration beschrieben.

TLS-Dateien sind ungültig oder beschädigt

Das Frontend zeigt möglicherweise „Aufgrund der TLS-Einstellungen konnte keine Verbindung zum Zabbix-Server hergestellt werden. Einige Funktionen sind nicht verfügbar.“ an.

Dies kann auftreten, wenn die konfigurierten Zertifikats- oder Schlüsseldateien vorhanden und lesbar sind, ihr Inhalt jedoch leer, beschädigt oder anderweitig ungültig ist. In diesem Fall stellt das Frontend keine Verbindung zum Zabbix-Server her, und im Protokoll des Zabbix-Servers wird kein entsprechender Verbindungsversuch angezeigt.

Überprüfen Sie, ob die Zertifikats- und Schlüsseldateien gültige, korrekt formatierte Daten enthalten und ob der private Schlüssel dem Zertifikat entspricht.