1 MySQL šifrēšanas konfigurācija
Pārskats
Šajā sadaļā ir sniegti vairāki šifrēšanas konfigurācijas piemēri CentOS 8.2 un MySQL 8.4.0 vidēm, un to var izmantot kā īso sākuma ceļvedi savienojuma ar datubāzi šifrēšanai.
Ja MySQL hosts ir iestatīts kā localhost, šifrēšanas opcijas nebūs pieejamas. Šajā gadījumā savienojums starp Zabbix lietotāja saskarne un datubāzi izmanto ligzdas failu (Unix vidē) vai koplietojamo atmiņu (Windows vidē), un to nevar šifrēt.
Šifrēšanas kombināciju saraksts neaprobežojas tikai ar šajā lapā norādītajām. Ir pieejams daudz vairāk kombināciju.
Priekšnosacījumi
Instalējiet MySQL datubāzi no oficiālās repozitorija.
Skatiet MySQL dokumentāciju, lai iegūtu detalizētu informāciju par MySQL repozitorija izmantošanu.
MySQL serveris ir gatavs pieņemt drošus savienojumus, izmantojot pašparakstītu sertifikātu.
Lai redzētu, kuri lietotāji izmanto šifrētu savienojumu, izpildiet šādu vaicājumu (Performance Schema jābūt ieslēgtai):
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;
Tikai transporta šifrēšana
MySQL konfigurācija
Mūsdienu datubāzes versijas ir gatavas darbam uzreiz pēc instalēšanas ar required šifrēšanas režīmu.
Pēc sākotnējās iestatīšanas un palaišanas tiks izveidots servera puses sertifikāts.
Izveidojiet lietotājus un lomas galvenajiem komponentiem:
mysql> CREATE USER
'zbx_srv'@'%' IDENTIFIED WITH caching_sha2_password BY '<strong_password>',
'zbx_web'@'%' IDENTIFIED WITH caching_sha2_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'@'%';
Ņemiet vērā, ka identitātes pārbaudei netiek izmantots X.509 protokols, taču lietotājs ir konfigurēts izmantot tikai šifrētus savienojumus. Plašāku informāciju par lietotāju konfigurēšanu skatiet MySQL dokumentācijā.
Palaidiet šo komandu, lai pārbaudītu savienojumu (drošu savienojumu testēšanai nevar izmantot socket savienojumu):
mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED
Pārbaudiet pašreizējo statusu un pieejamos šifru komplektus:
mysql> status
--------------
mysql Ver 8.4.0 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
Lietotāja saskarne
Lai iespējotu tikai transporta šifrēšanu savienojumiem starp Zabbix lietotāja saskarni un datubāzi:
- Atzīmējiet Database TLS encryption
- Atstājiet Verify database certificate neatzīmētu

Serveris
Lai iespējotu tikai transporta šifrēšanu savienojumiem starp serveri un datubāzi, konfigurējiet /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=required
...
Šifrēšana ar sertifikācijas iestādes verifikāciju
Nokopējiet nepieciešamo MySQL CA uz Zabbix lietotāja saskarnes serveri un piešķiriet atbilstošas atļaujas, lai tīmekļa serveris varētu nolasīt šo failu.
Šis režīms nedarbojas uz RHEL 7 vecāku MySQL bibliotēku dēļ.
Lietotāja saskarne
Lai iespējotu šifrēšanu ar sertifikāta pārbaudi savienojumiem starp Zabbix lietotāja saskarni un datubāzi:
- Atzīmējiet Database TLS encryption un Verify database certificate
- Norādiet ceļu uz Database TLS CA failu

Alternatīvi, to var iestatīt failā /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'] = '';
...
Problēmu novēršanai lietotājs var izmantot komandrindas rīku, lai pārbaudītu, vai savienojums ir iespējams nepieciešamajam lietotājam:
mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem
Serveris
Lai iespējotu šifrēšanu ar sertifikāta verifikāciju savienojumiem starp Zabbix serveri un datubāzi, konfigurējiet /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
...
Šifrēšana ar pilnu verifikāciju
MySQL konfigurācija
Iestatiet MySQL CE servera konfigurācijas opciju (/etc/my.cnf.d/server-tls.cnf) šādi:
[mysqld]
...
# šajos piemēros atslēgas atrodas MySQL CE datadir direktorijā
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
...
MySQL CE servera un klienta (Zabbix lietotāja saskarne) atslēgas jāizveido manuāli saskaņā ar MySQL CE dokumentāciju: SSL un RSA sertifikātu un atslēgu izveide, izmantojot MySQL vaiSSL sertifikātu un atslēgu izveide, izmantojot openssl
MySQL servera sertifikātā jābūt laukam Common Name, kas iestatīts uz FQDN nosaukumu, jo Zabbix lietotāja saskarne izmantos DNS nosaukumu saziņai ar datubāzi vai datubāzes hosta IP adresi.
Izveidojiet MySQL lietotāju:
mysql> CREATE USER
'zbx_srv'@'%' IDENTIFIED WITH caching_sha2_password BY '<strong_password>',
'zbx_web'@'%' IDENTIFIED WITH caching_sha2_password BY '<strong_password>'
REQUIRE X509
PASSWORD HISTORY 5;
Pārbaudiet, vai ir iespējams pieteikties ar šo lietotāju:
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
Lietotāja saskarne
Lai iespējotu šifrēšanu ar pilnu verifikāciju savienojumiem starp Zabbix lietotāja saskarni un datubāzi:
- Atzīmējiet Database TLS encryption un Verify database certificate
- Norādiet ceļu uz Database TLS key file
- Norādiet ceļu uz Database TLS CA file
- Norādiet ceļu uz Database TLS certificate file
Ņemiet vērā, ka Database host verification ir atzīmēts un iekrāsots pelēks — šo soli MySQL gadījumā nevar izlaist.
Ja lauks Database TLS cipher list ir atstāts tukšs, tiks iespējoti kopīgie šifri, ko atļauj gan lietotāja saskarne (klients), gan serveris. Alternatīvi, šifrus var iestatīt tieši, ievērojot šifru konfigurācijas prasības.

Alternatīvi, to var iestatīt failā /etc/zabbix/web/zabbix.conf.php:
...
// Used for TLS connection with strictly defined Cipher list.
$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';
...
// or
...
// Used for TLS connection without Cipher list defined - selected by 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'] = '';
...
Serveris
Lai iespējotu šifrēšanu ar pilnu verifikāciju savienojumiem starp Zabbix serveri un datubāzi, konfigurējiet /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
...