Ова секција пружа неколико примера конфигурације шифровања за CentOS 8.2 и MySQL 8.0.21 и може се користити као водич за брзи почетак за шифровање везе са базом података.
Ако је MySQL домаћин постављен на localhost, опције шифровања неће бити доступне. У овом случају веза између Zabbix корисничког интерфејса и база података користи socket датотеку (на Unix-у) или заједничку меморију (на Windows-у) и не може да се шифрује.
Листа шифровања комбинације није ограничена на оне наведене на овој страници. Постоји доступно много више комбинација.
Инсталирајте MySQL базу података са [официјални репозиторијум(https://dev.mysql.com/downloads/repo/yum/).
Погледајте MySQL документацију за детаље о томе како да користите MySQL репозиторијум.
MySQL сервер је спреман да прихвати безбедне везе користећи самопотписане сертификат.
Да бисте видели који корисници користе шифровану везу, покрените следећи упит (Шема перформанси треба да буде укључена):
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_threadAS 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;
Модерне верзије базе података су спремне out-of-the-box за 'required' режим шифровања. Сертификат на страни сервера ће бити креиран након почетног подешавања и покретања.
Креирајте кориснике и улоге за главне компоненте:
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'@'%';
Имајте на уму да се X.509 протокол не користи за проверу идентитета, али је корисник конфигурисан да користи само шифроване везе. Погледајте MySQL документацију за више детаља о конфигурисању корисника.
Покрените да проверите везу (socket веза се не може користити за тестирање сигурних конекција):
Проверите тренутни статус и доступне пакете шифровања:
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)
Да бисте омогућили шифровање само за транспорт за везе између Zabbix корисничког интерфејса и база података:
Да бисте омогућили шифровање само за транспорт за везе између сервера и базе података, конфигуришите /etc/zabbix/zabbix_server.conf:
...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=required
...
Копирајте потребан MySQL CA на Zabbix сервер корисничког интерфејса, доделите одговарајуће дозволе да се веб серверу дозволи читање ове датотеке.
Верификација CA режима не ради на RHEL 7 због застарелих MySQL библиотека.
Да бисте омогућили шифровање са верификацијом сертификата за везе између Zabbix корисничког интерфејса и базе података:
Алтернативно, ово се може подесити у /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'] = '';
...
Решите проблеме корисника помоћу алата командне линије да бисте проверили да ли је веза успостављена за потребе корисника:
Да бисте омогућили шифровање са верификацијом сертификата за везе између Zabbix сервера и базе података, конфигуришите /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
...
Подесите опцију конфигурације MySQL CE сервера (/etc/my.cnf.d/server-tls.cnf) на:
[mysqld]
...
# у овим примерима кључеви се налазе у MySQL CE datadir директоријуму
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
...
Кључеви за MySQL CE сервер и клијент (Zabbix кориснички интерфејс) би требало да буду креирани ручно према MySQL CE документацији: Креирање SSL и RSA сертификата и кључева користећи MySQL или Креирање SSL сертификата и кључева помоћу openssl
Сертификат MySQL сервера треба да садржи Поље Заједнички назив постављено на FQDN име јер ће Zabbix кориснички интерфејс користити DNS име за комуникацију са базом података или IP адресу базе података домаћина.
Креирајте 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;
Проверите да ли је могуће да се пријавите са тим корисником:
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
Да бисте омогућили шифровање са потпуном верификацијом за везе између Zabbix корисничког интерфејса и базе података:
Имајте на уму да је Верификација домаћина базе података означена и засивљена - овај корак се не може прескочити за MySQL.
Листа шифара треба да буде празна, тако да кориснички интерфејс и сервер могли да преговарају о одговарајућој, подржаној на обе стране.
Алтернативно, ово може бити подешено на /etc/zabbix/web/zabbix.conf.php:
...
// Se utiliza para conexiones TLS con una lista de cifrado estrictamente 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
...
// Користи се за TLS конекцију без дефинисане листе шифри - изабрано од стране MySQL сервера
$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'] = '';
...
Да бисте омогућили шифровање са потпуном верификацијом за везе између Zabbix сервера и базе података, конфигуришите /etc/zabbix/zabbix_server.conf: