Sichere Verbindung zur Datenbank

Übersicht

Dieser Abschnitt enthält Zabbix-Einrichtungsschritte und Konfigurationsbeispiele für sichere TLS-Verbindungen zwischen:

Datenbank Zabbix-Komponenten
MySQL Zabbix Frontend, Zabbix Server, Zabbix Proxy
PostgreSQL Zabbix Frontend, Zabbix Server, Zabbix Proxy

Informationen zum Einrichten der Verbindungsverschlüsselung innerhalb des DBMS finden Sie in der offiziellen Dokumentation des jeweiligen Herstellers:

  • MySQL: Replikationsdatenbankserver für Quelle und Replikat.
  • MySQL: Datenbankserver für Gruppenreplikation usw.
  • PostgreSQL Verschlüsselungsoptionen.

Alle Beispiele basieren auf den GA-Releases von MySQL CE (8.0) und PgSQL (13), die über die offiziellen Repositorys unter CentOS 8 verfügbar sind.

Anforderungen

Folgendes ist für die Einrichtung der Verschlüsselung erforderlich:

  • Vom Entwickler unterstütztes Betriebssystem mit OpenSSL >=1.1.X oder einer Alternative.

Es wird empfohlen, Betriebssysteme mit End-of-Life-Status zu vermeiden, insbesondere bei Neuinstallationen

  • Datenbank-Engine (RDBMS), installiert und gepflegt aus dem offiziellen Repository des Entwicklers. Betriebssysteme werden oft mit veralteten Versionen von Datenbanksoftware ausgeliefert, für die keine Unterstützung für Verschlüsselung implementiert ist, zum Beispiel auf RHEL-7-basierten Systemen und PostgreSQL 9.2, MariaDB 5.5 ohne Unterstützung für Verschlüsselung.
Terminologie

Durch das Setzen dieser Option wird die Verwendung einer TLS-Verbindung zur Datenbank vom Zabbix Server/Proxy und vom Frontend zur Datenbank erzwungen:

  • required - Verbindung über TLS als Transportmodus ohne Identitätsprüfungen
  • verify_ca - Verbindung über TLS und Überprüfung des Zertifikats
  • verify_full - Verbindung über TLS, Überprüfung des Zertifikats und Überprüfung, dass die von DBHost angegebene Datenbankidentität (CN) mit ihrem Zertifikat übereinstimmt

Zabbix-Konfiguration

Frontend zur Datenbank

Eine sichere Verbindung zur Datenbank kann während der Frontend-Installation konfiguriert werden:

  • Aktivieren Sie das Kontrollkästchen Database TLS encryption im Schritt Configure DB connection, um die Transportverschlüsselung zu aktivieren.
  • Aktivieren Sie das Kontrollkästchen Verify database certificate, das angezeigt wird, wenn das Feld TLS encryption aktiviert ist, um die Verschlüsselung mit Zertifikaten zu aktivieren.

Für MySQL ist das Kontrollkästchen Database TLS encryption deaktiviert, wenn Database host auf localhost gesetzt ist, da eine Verbindung, die eine Socket-Datei (unter Unix) oder Shared Memory (unter Windows) verwendet, nicht verschlüsselt werden kann.
Für PostgreSQL ist das Kontrollkästchen TLS encryption deaktiviert, wenn der Wert des Feldes Database host mit einem Schrägstrich beginnt oder das Feld leer ist.

Die folgenden Parameter werden im Modus der TLS-Verschlüsselung mit Zertifikaten verfügbar (wenn beide Kontrollkästchen aktiviert sind):

Parameter Beschreibung
Database TLS CA file Geben Sie den vollständigen Pfad zu einer gültigen TLS-Zertifizierungsstellen-(CA)-Datei an.
Database TLS key file Geben Sie den vollständigen Pfad zu einer gültigen TLS-Schlüsseldatei an.
Database TLS certificate file Geben Sie den vollständigen Pfad zu einer gültigen TLS-Zertifikatsdatei an.
Database host verification Aktivieren Sie dieses Kontrollkästchen, um die Host-Überprüfung zu aktivieren.
Für MYSQL deaktiviert, da die PHP-MySQL-Bibliothek das Überspringen des Schritts zur Überprüfung des Peer-Zertifikats nicht zulässt.
Database TLS cipher list Geben Sie eine benutzerdefinierte Liste gültiger Cipher an. Das Format der Cipher-Liste muss dem OpenSSL-Standard entsprechen.
Nur für MySQL verfügbar.

TLS-Parameter müssen auf gültige Dateien verweisen. Wenn sie auf nicht vorhandene oder ungültige Dateien verweisen, führt dies zu einem Autorisierungsfehler.
Wenn Zertifikatsdateien beschreibbar sind, erzeugt das Frontend im Bericht System information eine Warnung, dass "TLS certificate files must be read-only." (wird nur angezeigt, wenn der PHP-Benutzer der Besitzer des Zertifikats ist).

Mit Passwörtern geschützte Zertifikate werden nicht unterstützt.

Anwendungsfälle

Das Zabbix-Frontend verwendet die GUI, um mögliche Optionen zu definieren: required, verify_ca, verify_full. Geben Sie die erforderlichen Optionen im Schritt Configure DB connections des Installationsassistenten an. Diese Optionen werden wie folgt in die Konfigurationsdatei (zabbix.conf.php) abgebildet:

GUI settings Configuration file Description Result
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Database TLS encryption aktivieren
Verify database certificate deaktiviert lassen
Aktiviert den Modus required.
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
1. Database TLS encryption und Verify database certificate aktivieren
2. Pfad zur Database TLS CA file angeben
Aktiviert den Modus verify_ca.
...
// Used for TLS connection with strictly defined Cipher list.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '<cipher_list>';
...

Or:

...
// Used for TLS connection without Cipher list defined - selected by MySQL server
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...
1. Database TLS encryption und Verify database certificate aktivieren
2. Pfad zur Database TLS key file angeben
3. Pfad zur Database TLS CA file angeben
4. Pfad zur Database TLS certificate file angeben
5. Database TLS cipher list angeben (optional)
Aktiviert den Modus verify_full für MySQL.
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = ' ';
...
1. Database TLS encryption und Verify database certificate aktivieren
2. Pfad zur Database TLS key file angeben
3. Pfad zur Database TLS CA file angeben
4. Pfad zur Database TLS certificate file angeben
5. Database host verification aktivieren
Aktiviert den Modus verify_full für PostgreSQL.

Siehe auch: Encryption configuration examples for MySQL, Encryption configuration examples for PostgreSQL.

Zabbix Server/Proxy-Konfiguration

Sichere Verbindungen zur Datenbank können mit den entsprechenden Parametern in der Zabbix-Server- und/oder Proxy-Konfigurationsdatei eingerichtet werden.

Konfiguration Ergebnis
Keine Verbindung zur Datenbank ohne Verschlüsselung.
1. Setzen Sie DBTLSConnect=required Server/Proxy stellen eine TLS-Verbindung zur Datenbank her. Eine unverschlüsselte Verbindung ist nicht zulässig.
1. Setzen Sie DBTLSConnect=verify_ca
2. Setzen Sie DBTLSCAFile - geben Sie die TLS-Zertifizierungsstellen-Datei an
Server/Proxy stellen nach der Überprüfung des Datenbankzertifikats eine TLS-Verbindung zur Datenbank her.
1. Setzen Sie DBTLSConnect=verify_full
2. Setzen Sie DBTLSCAFile - geben Sie die TLS-Zertifizierungsstellen-Datei an
Server/Proxy stellen nach der Überprüfung des Datenbankzertifikats und der Datenbank-Hostidentität eine TLS-Verbindung zur Datenbank her.
1. Setzen Sie DBTLSCAFile - geben Sie die TLS-Zertifizierungsstellen-Datei an
2. Setzen Sie DBTLSCertFile - geben Sie die Datei des öffentlichen Client-Schlüsselzertifikats an
3. Setzen Sie DBTLSKeyFile - geben Sie die private Client-Schlüsseldatei an
Server/Proxy stellen beim Verbinden mit der Datenbank ein Client-Zertifikat bereit.
1. Setzen Sie DBTLSCipher - die Liste der Verschlüsselungs-Cipher, die der Client für Verbindungen mit TLS-Protokollen bis einschließlich TLS 1.2 zulässt

oder DBTLSCipher13 - die Liste der Verschlüsselungs-Cipher, die der Client für Verbindungen mit dem TLS-1.3-Protokoll zulässt
(MySQL) Die TLS-Verbindung wird mit einem Cipher aus der angegebenen Liste hergestellt.
(PostgreSQL) Das Setzen dieser Option wird als Fehler betrachtet.