1 MySQL-Verschlüsselungskonfiguration
Übersicht
Dieser Abschnitt enthält mehrere Beispiele für Verschlüsselungskonfigurationen für CentOS 8.2 und MySQL 8.0.30 und kann als Schnellstartanleitung für die Verschlüsselung der Verbindung zur Datenbank verwendet werden.
Wenn der MySQL-Host auf localhost gesetzt ist, sind Verschlüsselungsoptionen nicht verfügbar. In diesem Fall verwendet die Verbindung zwischen dem Zabbix-Frontend und der Datenbank eine Socket-Datei (unter Unix) oder Shared Memory (unter Windows) und kann nicht verschlüsselt werden.
Die Liste der Verschlüsselungskombinationen ist nicht auf die auf dieser Seite aufgeführten beschränkt. Es sind viele weitere Kombinationen verfügbar.
Voraussetzungen
Installieren Sie die MySQL-Datenbank aus dem offiziellen Repository.
Weitere Informationen zur Verwendung des MySQL-Repositorys finden Sie in der MySQL-Dokumentation.
Der MySQL-Server ist bereit, sichere Verbindungen mit einem selbstsignierten Zertifikat zu akzeptieren.
Um zu sehen, welche Benutzer eine verschlüsselte Verbindung verwenden, führen Sie die folgende Abfrage aus (Performance Schema sollte aktiviert sein):
SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher, processlist_user AS user, processlist_host AS host
FROM performance_schema.status_by_thread AS sbt
JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher'
ORDER BY tls_version;
Nur-Transport-Verschlüsselung
MySQL-Konfiguration
Moderne Versionen der Datenbank sind standardmäßig für den Verschlüsselungsmodus required vorbereitet.
Nach der ersten Einrichtung und dem Start wird ein Zertifikat auf Serverseite erstellt.
Erstellen Sie Benutzer und Rollen für die Hauptkomponenten:
Für MySQL-Versionen 8.4+ sollte caching_sha2_password anstelle von mysql_native_password verwendet werden.
mysql> CREATE USER
'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',
'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
REQUIRE SSL
PASSWORD HISTORY 5;
mysql> CREATE ROLE 'zbx_srv_role', 'zbx_web_role';
mysql> GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, INDEX, REFERENCES ON zabbix.* TO 'zbx_srv_role';
mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON zabbix.* TO 'zbx_web_role';
mysql> GRANT 'zbx_srv_role' TO 'zbx_srv'@'%';
mysql> GRANT 'zbx_web_role' TO 'zbx_web'@'%';
mysql> SET DEFAULT ROLE 'zbx_srv_role' TO 'zbx_srv'@'%';
mysql> SET DEFAULT ROLE 'zbx_web_role' TO 'zbx_web'@'%';
Beachten Sie, dass das X.509-Protokoll nicht zur Identitätsprüfung verwendet wird, der Benutzer jedoch so konfiguriert ist, dass nur verschlüsselte Verbindungen verwendet werden. Weitere Informationen zur Konfiguration von Benutzern finden Sie in der MySQL-Dokumentation.
Führen Sie den folgenden Befehl aus, um die Verbindung zu prüfen (eine Socket-Verbindung kann nicht zum Testen sicherer Verbindungen verwendet werden):
mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED
Prüfen Sie den aktuellen Status und die verfügbaren Cipher Suites:
mysql> status
--------------
mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 62
Current database:
Current user: [email protected]
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G;
*************************** 1. row ***************************
Variable_name: Ssl_cipher_list
Value: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA
1 row in set (0.00 sec)
ERROR:
No query specified
Frontend
Um eine reine Transportverschlüsselung für Verbindungen zwischen dem Zabbix Frontend und der Datenbank zu aktivieren:
- Aktivieren Sie Database TLS encryption
- Lassen Sie Verify database certificate deaktiviert

Server
Um eine reine Transportverschlüsselung für Verbindungen zwischen Server und der Datenbank zu aktivieren, konfigurieren Sie /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=required
...
Verschlüsselung mit Verifizierung der Zertifizierungsstelle
Kopieren Sie die erforderliche MySQL-CA auf den Zabbix-Frontend-Server und weisen Sie die entsprechenden Berechtigungen zu, damit der Webserver diese Datei lesen kann.
Dieser Modus funktioniert unter RHEL 7 aufgrund älterer MySQL-Bibliotheken nicht.
Frontend
Um die Verschlüsselung mit Zertifikatsprüfung für Verbindungen zwischen dem Zabbix Frontend und der Datenbank zu aktivieren:
- Aktivieren Sie Database TLS encryption und Verify database certificate
- Geben Sie den Pfad zur Database-TLS-CA-Datei an

Alternativ kann dies in /etc/zabbix/web/zabbix.conf.php festgelegt werden:
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Zur Fehlerbehebung kann der Benutzer mit einem Befehlszeilenwerkzeug prüfen, ob eine Verbindung für den erforderlichen Benutzer möglich ist:
mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem
Server
Um die Verschlüsselung mit Zertifikatsprüfung für Verbindungen zwischen dem Zabbix Server und der Datenbank zu aktivieren, konfigurieren Sie /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=verify_ca
DBTLSCAFile=/etc/ssl/mysql/ca.pem
...
Verschlüsselung mit vollständiger Verifizierung
MySQL-Konfiguration
Setzen Sie die Konfigurationsoption des MySQL CE-Servers (/etc/my.cnf.d/server-tls.cnf) auf:
[mysqld]
...
# in diesen Beispielen befinden sich die Schlüssel im MySQL CE-Datadir-Verzeichnis
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
...
Die Schlüssel für den MySQL CE-Server und den Client (Zabbix Frontend) sollten gemäß der MySQL CE-Dokumentation manuell erstellt werden: Creating SSL and RSA certificates and keys using MySQL oder Creating SSL certificates and keys using openssl
Das Serverzertifikat von MySQL sollte im Feld Common Name den FQDN-Namen enthalten, da das Zabbix Frontend den DNS-Namen für die Kommunikation mit der Datenbank oder die IP-Adresse des Datenbank-Hosts verwendet.
MySQL-Benutzer erstellen:
Für MySQL-Versionen 8.4+ sollte caching_sha2_password anstelle von mysql_native_password verwendet werden.
mysql> CREATE USER
'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',
'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
REQUIRE X509
PASSWORD HISTORY 5;
Prüfen Sie, ob eine Anmeldung mit diesem Benutzer möglich ist:
mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=VERIFY_IDENTITY --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/client-cert.pem --ssl-key=/var/lib/mysql/client-key.pem
Frontend
Um die Verschlüsselung mit vollständiger Verifizierung für Verbindungen zwischen dem Zabbix Frontend und der Datenbank zu aktivieren:
- Aktivieren Sie Database TLS encryption und Verify database certificate
- Geben Sie den Pfad zur Database TLS key file an
- Geben Sie den Pfad zur Database TLS CA file an
- Geben Sie den Pfad zur Database TLS certificate file an
Beachten Sie, dass Database host verification aktiviert und ausgegraut ist - dieser Schritt kann für MySQL nicht übersprungen werden.
Wenn das Feld Database TLS cipher list leer bleibt, werden die von Frontend (Client) und Server gemeinsam zulässigen Cipher aktiviert. Alternativ können die Cipher explizit gemäß den cipher configuration requirements festgelegt werden.

Alternativ kann dies in /etc/zabbix/web/zabbix.conf.php festgelegt werden:
...
// Used for TLS connection with strictly defined Cipher list.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
$DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GC';
...
// or
...
// Used for TLS connection without Cipher list defined - selected by MySQL server
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
$DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...
Server
Um die Verschlüsselung mit vollständiger Verifizierung für Verbindungen zwischen dem Zabbix Server und der Datenbank zu aktivieren, konfigurieren Sie /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=verify_full
DBTLSCAFile=/etc/ssl/mysql/ca.pem
DBTLSCertFile=/etc/ssl/mysql/client-cert.pem
DBTLSKeyFile=/etc/ssl/mysql/client-key.pem
...