This is a translation of the original English documentation page. Help us make it better.

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

Преглед

Ова секција пружа неколико примера конфигурације шифровања за CentOS 8.2 и MySQL 8.0.21 и може се користити као водич за брзи почетак за шифровање везе са базом података. 

Ако је MySQL домаћин постављен на localhost, опције шифровања неће бити доступне. У овом случају веза између Zabbix корисничког интерфејса и база података користи socket датотеку (на Unix-у) или заједничку меморију (на Windows-у) и не може да се шифрује.

Листа шифровања комбинације није ограничена на оне наведене на овој страници. Постоји доступно много више комбинација.

Предуслови

Инсталирајте MySQL базу података из званичног репозиторијума.

Погледајте MySQL документацију за детаље о коришћењу MySQL репозиторијума.

MySQL сервер је спреман да прихвати безбедне везе користећи самопотписани сертификат.

Да бисте видели који корисници користе шифровану везу, покрените следећи упит (Performance Schema треба да буде укључена):

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 УКЉУЧЕНО t2.thread_id = t.thread_id WHERE sbt.variable_name = 'Ssl_version' и t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;

Шифровање само за транспорт

Конфигурација MySQL-а

Модерне верзије базе података су спремне одмах по подешавању за 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 документацију за више детаља о конфигурисању корисника.

Покрени да провериш везу (сокет веза се не може користити за тестирање безбедних веза):

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

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

Сервер

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

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

Шифровање са верификацијом ауторитета сертификата

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

Овај режим не ради на 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 X5 09 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 корисничког интерфејса и базе података:

  • Означите Database TLS шифровање и Верификујте сертификат базе података
  • Наведите путању до Database TLS датотеке кључа
  • Наведите путању до Database TLS CA датотеке
  • Наведите путању до Database TLS датотеке сертификата

Имајте на уму да је Database host verification означено и сиво - овај корак се не може прескочити за MySQL.

Ако је поље Database TLS листа шифара остављено празно, биће омогућене уобичајене шифре које дозвољавају и кориснички интерфејс (клијент) и сервер. Алтернативно, шифре се могу експлицитно подесити, у складу са захтевима за конфигурацију шифре.

Алтернативно, ово се може подесити у /etc/zabbix/web/zabbix.conf.php:

... // Користи се за TLS везу са строго дефинисаном листом шифара. $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'] = тачно; $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'; ... // или ... // Користи се за TLS везу без дефинисане листе шифара - изабрано од стране MySQL сервера $DB['ENCRYPTION'] = тачно; $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'] = тачно;$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
       ...