1 Конфигурација MySQL шифровања

Преглед

Ова секција пружа неколико примера конфигурације шифровања за 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;

Обавезан режим

MySQL конфигурација

Модерне верзије базе података су спремне 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 -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED

Проверите тренутни статус и доступне пакете шифровања:

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

Кориснички интерфејс

Да бисте омогућили шифровање само за транспорт за везе између Zabbix корисничког интерфејса и база података:

  • Проверите * Шифровање TLS базе података*
  • Оставите Провери сертификат базе података неозначеним

Сервер

Да бисте омогућили шифровање само за транспорт за везе између сервера и базе података, конфигуришите /etc/zabbix/zabbix_server.conf:

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

Верификација CA режима

Копирајте потребан MySQL CA на Zabbix сервер корисничког интерфејса, доделите одговарајуће дозволе да се веб серверу дозволи читање ове датотеке.

Верификација CA режима не ради на RHEL 7 због застарелих MySQL библиотека.

Кориснички интерфејс

Да бисте омогућили шифровање са верификацијом сертификата за везе између Zabbix корисничког интерфејса и базе података:

  • Проверите * TLS шифровање базе података* и Верификовање сертификата базе података
  • Наведите путању до датотеке TLS CA базе података

Алтернативно, ово се може подесити у /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'] = '';
       ...

Решите проблеме корисника помоћу алата командне линије да бисте проверили да ли је веза успостављена за потребе корисника:

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

Сервер

Да бисте омогућили шифровање са верификацијом сертификата за везе између 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 конфигурација

Подесите опцију конфигурације 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 корисничког интерфејса и базе података:

  • Проверите TLS шифровање базе података и проверите сертификат базе података
  • Наведите путању до датотеке TLS кључа базе података
  • Наведите путању до TLS CA датотеке базе података
  • Наведите путању до датотеке TLS сертификата базе података

Имајте на уму да је Верификација домаћина базе података означена и засивљена - овај корак се не може прескочити за 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:

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