Dit gedeelte biedt verschillende voorbeelden van coderingsconfiguraties voor: CentOS 8.2 en MySQL 8.0.21 en kan worden gebruikt als een snelstartgids voor: versleuteling van de verbinding met de database.
Als MySQL-host is ingesteld op localhost, encryptie-opties niet: verkrijgbaar. In dit geval een verbinding tussen Zabbix frontend en de database gebruikt een socketbestand (op Unix) of gedeeld geheugen (op Windows) en kan niet worden versleuteld.
Lijst met codering combinaties is niet beperkt tot degene die op deze pagina worden vermeld. Er zijn een veel meer combinaties beschikbaar.
Installeer MySQL-database vanaf de officiële repository.
Zie MySQL documentatie voor details over het gebruik van MySQL-repo.
MySQL-server is klaar om beveiligde verbindingen te accepteren met behulp van een zelfondertekend certificaat.
Om te zien welke gebruikers een versleutelde verbinding gebruiken, voer je het volgende uit: query (Prestatieschema moet AAN staan):
mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value AS-codering, processlist_user AS-gebruiker, 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;
Moderne versies van de database zijn standaard klaar voor de 'vereiste' versleutelingsmodus. Een server-side certificaat wordt aangemaakt na initiële installatie en start.
Maak gebruikers en rollen aan voor de belangrijkste componenten:
mysql> CREATE USER
'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>',
'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>'
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'@'%';
Merk op dat het X.509-protocol niet wordt gebruikt om de identiteit te controleren, maar de gebruiker is geconfigureerd om alleen versleutelde verbindingen te gebruiken. Raadpleeg MySQL documentatie voor meer details over het configureren van gebruikers.
Voer het volgende uit om de verbinding te controleren (een socketverbinding kan niet worden gebruikt om beveiligde verbindingen te testen):
Controleer de huidige status en beschikbare ciphersuites:
mysql> status
--------------
mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 62
Current database:
Current user: zbx_srv@bfdb.local
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
Om alleen transportversleuteling in te schakelen voor verbindingen tussen Zabbix frontend en de database:
Om alleen-transportversleuteling in te schakelen voor verbindingen tussen server en de database, configureer /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUserr=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=required
...
Kopieer de vereiste MySQL CA naar de Zabbix frontend-server, wijs de juiste toe permissies om de webserver dit bestand te laten lezen.
Controleer of CA-modus niet werkt op SLES 12 en RHEL 7 vanwege: oudere MySQL-bibliotheken.
Om versleuteling met certificaatverificatie in te schakelen voor verbindingen tussen Zabbix frontend en de database:
Als alternatief kan dit worden ingesteld in /etc/zabbix/web/zabbix.conf.php:
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Los problemen op door de gebruiker te controleren met behulp van de opdrachtregeltool om te controleren of er een verbinding mogelijk is voor de vereiste gebruiker:
Versleuteling inschakelen met certificaatverificatie voor verbindingen tussen Zabbix-server en de database, configure /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
...
Stel de configuratieoptie van de MySQL CE-server (/etc/my.cnf.d/server-tls.cnf) in op:
[mysqld]
...
# in deze voorbeelden bevinden de sleutels zich in de MySQL CE-datadir-directory
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
...
Sleutels voor de MySQL CE-server en client (Zabbix frontend) moeten handmatig worden aangemaakt volgens de MySQL CE-documentatie: SSL- en RSA-certificaten en sleutels maken met MySQL of SSL-certificaten en sleutels maken met openssl
Het MySQL-servercertificaat moet het veld Common Name bevatten dat is ingesteld op de FQDN-naam, aangezien Zabbix frontend de DNS-naam zal gebruiken om met de database te communiceren, of het IP-adres van de databasehost.
Maak een MySQL-gebruiker aan:
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;
Controleer of het mogelijk is om in te loggen met die gebruiker:
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
Om versleuteling met volledige verificatie in te schakelen voor verbindingen tussen de Zabbix-frontend en de database:
Let op, het vakje "Databasehost verifiëren" is aangevinkt en grijs - deze stap kan niet worden overgeslagen voor MySQL.
De lijst met versleutelingsmethodes (Cipher list) moet leeg zijn, zodat de frontend en server de vereiste methode kunnen onderhandelen uit de ondersteunde methodes die door beide uiteinden worden ondersteund.
Dit kan ook worden ingesteld in het bestand /etc/zabbix/web/zabbix.conf.php:
...
// Gebruikt voor TLS-verbinding met strikt gedefinieerde Cipher-lijst.
$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';
...
// of
...
// Gebruikt voor TLS-verbinding zonder gedefinieerde Cipher-lijst - geselecteerd door de 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'] = '';
...
Versleuteling inschakelen met volledige verificatie voor verbindingen tussen: Zabbix-server en de database, configureren /etc/zabbix/zabbix_server.conf: