5 Sichere Verbindung zur Datenbank

Übersicht

Dieser Abschnitt enthält Schritte zur Einrichtung von Zabbix sowie Konfigurationsbeispiele für sichere TLS-Verbindungen zwischen:

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

Um die Verbindungsverschlüsselung innerhalb des DBMS einzurichten, finden Sie Einzelheiten in der offiziellen Dokumentation des jeweiligen Anbieters:

  • MySQL: Quell- und Replikat-Replikationsdatenbankserver.
  • 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 offizielle Repositories für CentOS 8 verfügbar sind.

Voraussetzungen

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

  • Ein 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.

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

Das Setzen dieser Option erzwingt die Verwendung einer TLS-Verbindung zur Datenbank vom Zabbix Server/Proxy und Frontend zur Datenbank:

  • required - Verbindung über TLS als Transportmodus ohne Identitätsprüfungen herstellen
  • verify_ca - Verbindung über TLS herstellen und das Zertifikat verifizieren
  • verify_full - Verbindung über TLS herstellen, das Zertifikat verifizieren und prüfen, dass die durch DBHost angegebene Datenbankidentität (CN) mit ihrem Zertifikat übereinstimmt

Zabbix-Konfiguration

Frontend zur Datenbank

Eine sichere Verbindung zur Datenbank kann während der Installation des Frontends konfiguriert werden:

  • Aktivieren Sie im Schritt Configure DB connection das Kontrollkästchen Database TLS encryption, um die Transportverschlüsselung zu aktivieren.
  • Aktivieren Sie das Kontrollkästchen Verify database certificate, das erscheint, 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 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-Datei (CA) 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-Verifizierung zu aktivieren.
Für MYSQL deaktiviert, da die PHP-MySQL-Bibliothek das Überspringen der Validierung des Peer-Zertifikats nicht erlaubt.
Database TLS cipher list Geben Sie eine benutzerdefinierte Liste gültiger Chiffren an. Das Format der Chiffrenliste 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 schreibbar sind, erzeugt das Frontend im Bericht System information eine Warnung mit dem Hinweis „TLS certificate files must be read-only.“ (wird nur angezeigt, wenn der PHP-Benutzer Eigentümer des Zertifikats ist).

Passwortgeschützte Zertifikate werden nicht unterstützt.

Anwendungsfälle

Das Zabbix Frontend verwendet eine GUI-Oberfläche, 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 der Konfigurationsdatei (zabbix.conf.php) zugeordnet:

GUI-Einstellungen Konfigurationsdatei Beschreibung Ergebnis
...
// 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 nicht aktivieren
Modus required aktivieren.
...
$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
Modus verify_ca aktivieren.
...
// 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>';
...

Oder:

...
// 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)
Modus verify_full für MySQL aktivieren.
...
$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
Modus verify_full für PostgreSQL aktivieren.

Siehe auch: Beispiele für die Verschlüsselungskonfiguration für MySQL, Beispiele für die Verschlüsselungskonfiguration für 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. DBTLSConnect=required setzen Server/Proxy stellen eine TLS-Verbindung zur Datenbank her. Eine unverschlüsselte Verbindung ist nicht zulässig.
1. DBTLSConnect=verify_ca setzen
2. DBTLSCAFile setzen - die Datei der TLS-Zertifizierungsstelle angeben
Server/Proxy stellen nach der Überprüfung des Datenbankzertifikats eine TLS-Verbindung zur Datenbank her.
1. DBTLSConnect=verify_full setzen
2. DBTLSCAFile setzen - die Datei der TLS-Zertifizierungsstelle angeben
Server/Proxy stellen nach der Überprüfung des Datenbankzertifikats und der Identität des Datenbank-Host eine TLS-Verbindung zur Datenbank her.
1. DBTLSCAFile setzen - die Datei der TLS-Zertifizierungsstelle angeben
2. DBTLSCertFile setzen - die Datei des öffentlichen Client-Schlüsselzertifikats angeben
3. DBTLSKeyFile setzen - die Datei des privaten Client-Schlüssels angeben
Server/Proxy stellen beim Verbinden mit der Datenbank ein Client-Zertifikat bereit.
1. DBTLSCipher setzen - die Liste der Verschlüsselungsverfahren, die der Client für Verbindungen mit TLS-Protokollen bis TLS 1.2 zulässt

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