1 MySQL encryptie configuratie

Overzicht

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.

Vereisten

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;

Vereiste modus

MySQL-configuratie

Moderne versies van de database zijn kant-en-klaar voor 'vereist' encryptiemodus. EEN server-side certificaat wordt gemaakt na de eerste installatie en lancering.

Maak gebruikers en rollen aan voor de hoofdcomponenten:

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

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. Zie MySQL documentatie voor meer details over het configureren van gebruikers.

Uitvoeren om de verbinding te controleren (socketverbinding kan niet worden gebruikt om de beveiliging te testen aansluitingen):

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

Controleer de huidige status en beschikbare coderingssuites:

mysql> status
       --------------
       mysql Ver 8.0.21 voor Linux op x86_64 (MySQL Community Server - GPL)
       
       Verbindings-ID: 62
       Huidige databank:
       Huidige gebruiker: [email protected]
       SSL: het gebruikte cijfer is TLS_AES_256_GCM_SHA384
       
       
       mysql> TOON SESSIESTATUS ZOALS 'Ssl_cipher_list'\G;
       ************************** 1e rij ********************* ******
       Variabele_naam: 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-DSG-CMAES128 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-RSA-AES256-RSA 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-SHA256:HAAES2: AES128-SHA
       1 rij in set (0,00 sec)
       
       FOUT:
       Geen zoekopdracht opgegeven

Voorkant

Om alleen-transportversleuteling in te schakelen voor verbindingen tussen Zabbix frontend en de database:

  • Controleer Database TLS-codering
  • Laat Verifieer databasecertificaat niet aangevinkt

Server

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

CA-modus verifiëren

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.

Voorkant

Versleuteling inschakelen met certificaatverificatie voor verbindingen tussen Zabbix frontend en de database:

  • Controleer Database TLS-codering en Verifieer databasecertificaat
  • Geef pad op naar Database TLS CA-bestand

Als alternatief kan dit worden ingesteld in /etc/zabbix/web/zabbix.conf.php:

...
       $DB['ENCRYPTIE'] = true;
       $DB['KEY_FILE'] = '';
       $DB['CERT_FILE'] = '';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = false;
       $DB['CIPHER_LIST'] = '';
       ...

Los problemen met de gebruiker op met behulp van de opdrachtregeltool om te controleren of de verbinding is mogelijk voor gewenste gebruiker:

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

Server

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

Controleer de volledige modus

MySQL configuratie

Stel de MySQL CE server configuratieoptie (* /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, omdat de Zabbix frontend de DNS-naam zal gebruiken om te communiceren met de database of het IP-adres van de databasehost.

Maak MySQL-gebruiker aan:

mysql> CREATE USER
         'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>',
         'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>'
         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

Frontend

Om versleuteling met volledige verificatie voor verbindingen tussen de Zabbix frontend en de database mogelijk te maken:

  • Vink het selectievakje Database TLS-encryptie en Databasecertificaat verifiëren aan
  • Specificeer het pad naar het Database TLS-sleutelbestand
  • Specificeer het pad naar het Database TLS CA-bestand
  • Specificeer het pad naar het Database TLS-certificaatbestand

Merk op dat Database hostverificatie aangevinkt en uitgeschakeld is - deze stap kan niet worden overgeslagen voor MySQL.

De lijst van ciphers moet leeg zijn, zodat de frontend en de server het vereiste algoritme kunnen onderhandelen dat wordt ondersteund door beide partijen.

Als alternatief kan dit worden ingesteld in /etc/zabbix/web/zabbix.conf.php:

...
       // Gebruikt voor TLS-verbinding met strikt gedefinieerde lijst van algoritmes.
       $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 lijst van algoritmes - geselecteerd door 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

Versleuteling inschakelen met volledige verificatie voor verbindingen tussen: Zabbix-server en de database, configureren /etc/zabbix/zabbix_server.conf:

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBU-gebruiker=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
       ...