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 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):
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
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.
Versleuteling inschakelen met certificaatverificatie voor verbindingen tussen Zabbix frontend en de database:
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:
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 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
Om versleuteling met volledige verificatie voor verbindingen tussen de Zabbix frontend en de database mogelijk te maken:
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'] = '';
...
Versleuteling inschakelen met volledige verificatie voor verbindingen tussen: Zabbix-server en de database, configureren /etc/zabbix/zabbix_server.conf: