Cette section fournit plusieurs exemples de configuration de chiffrement pour CentOS 8.2 et MySQL 8.0.21 et peut être utilisé comme guide de démarrage rapide pour chiffrer la connexion à la base de données.
Si l'hôte MySQL est défini sur localhost, les options de chiffrement ne seront pas disponible. Dans ce cas, une connexion entre l'interface Zabbix et la base de données utilise un fichier socket (sous Unix) ou une mémoire partagée (sous Windows) et ne peut pas être crypté.
La liste de combinaisons de cryptage ne se limitent pas à celles répertoriées sur cette page. Il y a beaucoup plus de combinaisons disponibles.
Installez la base de données MySQL à partir du référentiel officiel.
Voir la documentation MySQL pour plus de détails sur l'utilisation du référentiel MySQL.
Le serveur MySQL est prêt à accepter des connexions sécurisées à l'aide d'un certificat auto-signé.
Pour voir quels utilisateurs utilisent une connexion chiffrée, exécutez la requête suivante (le schéma de performances doit être activé) :
mysql> 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'
ORDRE BY tls_version ;
Les versions modernes de la base de données sont prêtes à l'emploi pour le mode de cryptage 'required'. Un certificat côté serveur sera créé après la configuration et le lancement initiaux.
Créez des utilisateurs et des rôles pour les principaux composants :
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'@'%';
Notez que le protocole X.509 n'est pas utilisé pour vérifier l'identité, mais l'utilisateur est configuré pour utiliser uniquement des connexions cryptées. Voir Documentation MySQL pour plus de détails sur la configuration des utilisateurs.
Exécuter pour vérifier la connexion (la connexion socket ne peut pas être utilisée pour tester les connexions sécurisées) :
Vérifiez l'état actuel et les suites de chiffrement disponibles :
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
Pour activer le chiffrement de transport uniquement pour les connexions entre Zabbix frontend et la base de données :
Pour activer le chiffrement de transport uniquement pour les connexions entre le serveur et la base de données, configurez /etc/zabbix/zabbix_server.conf :
...
DBHost=10.211.55.9
NomDB=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=obligatoire
...
Copiez l'autorité de certification MySQL requise sur le serveur frontal Zabbix, attribuez les autorisations pour autoriser le serveur Web à lire ce fichier.
Le mode Vérify CA ne fonctionne pas sur SLES 12 et RHEL 7 en raison d'anciennes bibliothèques MySQL.
Pour activer le chiffrement avec vérification de certificat pour les connexions entre l'interface Zabbix et la base de données :
Alternativement, cela peut être défini dans /etc/zabbix/web/zabbix.conf.php :
...
$DB['ENCRYPTION'] = vrai ;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = faux ;
$DB['CIPHER_LIST'] = '';
...
Dépannez l'utilisateur à l'aide de l'outil de ligne de commande pour vérifier si la connexion est possible pour l'utilisateur requis :
Pour activer le chiffrement avec vérification de certificat pour les connexions entre le serveur Zabbix et la base de données, configurez /etc/zabbix/zabbix_server.conf :
...
DBHost=10.211.55.9
NomDB=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=verify_ca
DBTLSCAFile=/etc/ssl/mysql/ca.pem
...
Définissez l'option de configuration du serveur MySQL CE (/etc/my.cnf.d/server-tls.cnf) sur :
[mysqld]
...
# dans cet exemple, les clés sont situées dans le répertoire datadir de MySQL CE
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
...
Les clés pour le serveur et le client MySQL CE (interface Zabbix) doivent être créées manuellement conformément à la documentation MySQl CE : Création de certificats et de clés SSL et RSA à l'aide de MySQL ou Création de certificats et de clés SSL à l'aide d'openssl
Le certificat du serveur MySQL doit contenir le champ Nom commun défini sur le nom FQDN car l'interface Zabbix utilisera le nom DNS pour communiquer avec la base de données ou l'adresse IP de l'hôte de la base de données.
Créez un utilisateur MySQL :
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;
Vérifiez s'il est possible de se connecter avec cet utilisateur :
$ 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
Pour activer le chiffrement avec vérification complète des connexions entre l'interface Zabbix et la base de données :
Notez que la vérification de l'hôte de la base de données est cochée et grisée - cette étape ne peut pas être ignorée pour MySQL.
La liste de chiffrement doit être vide, afin que l'interface et le serveur puissent négocier celui requis supporté par les deux extrémités.
Alternativement, cela peut être défini dans /etc/zabbix/web/zabbix.conf.php :
...
// Utilisé pour la connexion TLS avec une liste de chiffrement strictement définie.
$DB['ENCRYPTION'] = vrai ;
$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' ;
...
// ou
...
// Utilisé pour la connexion TLS sans liste de chiffrement définie - sélectionné par le serveur MySQL
$DB['ENCRYPTION'] = vrai ;
$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'] = '';
...
Pour activer le chiffrement avec vérification complète des connexions entre le serveur Zabbix et la base de données, configurez /etc/zabbix/zabbix_server.conf :