1 configuració del xifrat MySQL

Vista general

Aquesta secció ofereix diversos exemples de configuració de xifrat per a CentOS 8.2 i MySQL 8.0.21 i es pot emprar com a guia d'inici ràpid per xifrar la connexió de la base de dades.

Si l'equip MySQL és configurat a localhost, les opcions de xifrat no seran pas disponibles. En aquest cas, una connexió entre la interfície Zabbix i la base de dades empra un fitxer socket (a Unix) o memòria compartida (a Windows) i no es pot pas xifrar.

La llista de combinacions de xifrat no es limita a les que es llisten en aquesta pàgina. Hi ha moltes més combinacions disponibles.

Pre-requisits

instal·leu la base de dades MySQL des del repositori oficial.

Veieu la documentació MySQL per tindre més detalls sobre com emprar el repositori de MySQL.

El servidor MySQL pot acceptar connexions segures emprant un certificat auto-signat.

Per veure quins usuaris empren una connexió xifrada, executeu la següent comanda (l'esquema de rendiment ha d'ésser actiu):

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'
               ORDER BY tls_version;

Mode obligatori

Configuració de MySQL

Les versions modernes de la base de dades són llestes per mode de xifrat "obligatoris". El certificat de la banda del servidor es crearà després de la configuració i el llançament inicials.

Creeu usuaris i rols per als components principals:

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'@'%';

Tingueu en compte que el protocol X.509 no s'empra per comprovar la identitat, sinó que l'usuari és configurat per emprar només connexions xifrades. Veieu la documentació MySQL per obtindre més detalls sobre la configuració dels usuaris.

Executeu per comprovar la connexió (la connexió del sòcol no es pot emprar pas per provar les connexions segures):

$ mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED 

Testeu l'estat actual i les cadenes de xifrat 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

Frontend

Per activar el xifrat de transport només per les connexions entre la interfície Zabbix i la base de dades:

  • Marqueu Xifrat TLS de la base de dades
  • Deixeu Verificar el certificat de la base de dades desmarcat

Servidor

Per activar el xifrat de transport només per les connexions entre el servidor i la base de dades, configureu /etc/zabbix/zabbix_server.conf :

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBUser=zbx_srv
       DBPassword=<strong_password>
       DBTLSConnect=required
       ...

Verificar el mode CA

Copieu la CA de MySQL necessària al servidor frontal de Zabbix, assigneu permisos per permetre que el servidor web llegeixi aquest fitxer.

El mode Verificar CA no funciona a SLES 12 i RHEL 7 a causa de les antigues biblioteques de MySQL.

Frontend

Per habilitar l'encriptació amb la verificació del certificat per a les connexions entre el frontend de Zabbix i la base de dades:

  • Comproveu xifratge TLS de la base de dades i Verifiqueu el certificat de la base de dades
  • Especifiqueu el camí al fitxer CA TLS de la base de dades

Alternativament, ho podeu configurar a /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'] = '';
       ...

Resoleu problemes d'usuari mitjançant l'eina de línia d'ordres per comprovar si la connexió és possible per a l'usuari requerit:

$ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem

Servidor

Per activar el xifrat amb verificació de certificat per les connexions entre el servidor Zabbix i la base de dades, configureu /etc/zabbix/zabbix_server.conf :

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBUser=zbx_srv
       DBPassword=<strong_password>
       DBTLSConnect=verify_ca
       DBTLSCAFile=/etc/mysql/ca.perm
       ...

Verificar el mode Full

Configuració de MySQL

Establiu l'opció de configuració del servidor MySQL CE (/etc/my.cnf.d/server-tls.cnf) a:

[mysqld]
       ...
       # en aquest exemple, les claus són a la carpeta 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 claus per al servidor i el client MySQL CE (interfície Zabbix) s'han de crear manualment segons la documentació de MySQL CE: Creació de certificats i claus SSL i RSA amb MySQL o Creació de certificats i claus SSL amb openssl

::: nota important El certificat del servidor MySQL ha de contindre el camp de Nom Comú definit com a nom FQDN perquè la interfície Zabbix emprarà el nom DNS per comunicar-se amb la base de dades o l'adreça IP de l'equip de la base de dades. :::

Crear un usuari 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;

Verificar si és possible establir la connexió amb aquest usuari:

$ 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

Per habilitar el xifrat amb una verificació completa de les connexions entre el Frontend de Zabbix i la base de dades:

  • Comproveu el xifrat TLS de la base de dades i el certificat de la base de dades
  • Especifiqueu el camí al fitxer de claus TLS de la base de dades
  • Especifiqueu el camí al fitxer CA TLS de la base de dades
  • Especifiqueu el camí al fitxer del certificat TLS de la base de dades

Tingueu en compte que la Verificació de l'equip de la base de dades és marcada i en gris, aquesta passa no es pot pas saltar per a MySQL.

El llistat de xifrat hauria d'ésser buit, de manera que la interfície i el servidor puguin negociar el xifrat suportat per ambdós extrems.

Altrament, això es pot configurar a /etc/zabbix/web/zabbix.conf.php:

 ...
        // S'empra per a la connexió TLS amb una llista de xifratge estrictament definida. 
       $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';
       ...
       // o
       ...
       // Emprat per connexions TLS sense llista de xifratge definida - escollit per 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'] = '';
       ...

Servidor

Per activar el xifrat amb verificació completa de les connexions entre el servidor Zabbix i la base de dades, configureu /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
       ...