4 安全的连接数据库

概述

本章节提供了Zabbix的设置步骤和配置示例,用于在以下设备之间建立安全的TLS连接:

数据库Zabbix 组件
MySQLZabbix frontend, Zabbix server, Zabbix proxy
PostgreSQLZabbix frontend, Zabbix server, Zabbix proxy

请参考各官方文档了解如何在DBMS中设置连接加密:

  • MySQL: source and replica replication database servers.
  • MySQL: group replication, etc. database servers.
  • PostgreSQL encryption options.

所有的示例都是基于 CentOS 8 官方提供的 MySQL CE(8.0)和 PgSQL(13) 的 GA 版本。

要求

设置加密需要以下内容:

  • 需要具有 OpenSSL 1.1.X 及以上版本的操作系统或其他替代方案。

不建议使用不再更新维护的操作系统,尤其是在新安装的情况下。

数据库引擎(RDBMS)的安装及维护由官方存储库的开发人员提供。操作系统通常自带的数据库版本较老,没有实现加密支持,例如基于RHEL 7 及 PostgreSQL 9.2、MariaDB 5.5 均没有加密支持。

术语

通过设置此选项强制Zabbix Server/proxy/前端使用TLS连接数据库:

  • required - 使用无需身份检查的TLS作为数据传输的连接;
  • verify_ca - 使用TLS连接并验证证书;
  • verify_full - 使用TLS连接,验证证书及DBHost指定的数据库身份(CN)匹配的证书;

Zabbix 配置

前端连接数据库

在前端安装的过程中可以配置使用数据库的安全连接:

  • 勾选 Database TLS encryption 选项以启用加密传输 Configure DB connection.
  • 当启用证书加密的TLS encryption字段时,勾选Verify database certificate复选框

对于MySQL,如果Database host设置为localhost, Database TLS encryption 复选框是禁用的,因为连接使用 socket 文件 (Unix) 或 共享内存(Windows) 是不能加密的

以下参数在证书模式 TLS 加密时可用 (如果两个复选框都勾选):

参数描述
Database TLS CA file指定有效的TLS证书颁发机构(CA)文件的完整路径
Database TLS key file指定有效的TLS密钥文件的完整路径
Database TLS certificate file指定有效TLS证书文件的完整路径
Database host verification标记此复选框以激活主机验证.
对MYSQL禁用,因为PHP MYSQL库不允许跳过对端证书验证步骤。
Database TLS cipher list指定有效密码的自定义列表。密码列表的格式必须符合OpenSSL标准。
仅对MySQL可用。

TLS参数必须指向有效的文件。如果指向的文件不存在或无效,则会导致授权错误.
如果证书文件权限是可写的, 前端会弹出警告“TLS certificate files must be read-only.” 含义为System information(当PHP用户是证书的所有者时显示)。
不支持受密码保护的证书。

用例

Zabbix前端使用GUI界面定义可能的选项:required, verify_ca, verify_full。在安装向导步骤Configure DB connections中指定所需选项。这些选项按以下方式映射到配置文件(zabbix.conf.php):

图形化设置配置文件描述结果
4 安全的连接数据库 - 图1
// Used for TLS connection.
$DB[‘ENCRYPTION’] = true;
$DB[‘KEY_FILE’] = ‘’;
$DB[‘CERT_FILE’] = ‘’;
$DB[‘CA_FILE’] = ‘’;
$DB[‘VERIFY_HOST’] = false;
$DB[‘CIPHER_LIST’] = ‘’;
检查 Database TLS encryption
保证选项 Verify database certificate 未选中
Enable ‘required’ mode.
4 安全的连接数据库 - 图2
$DB[‘ENCRYPTION’] = true;\ $DB[‘KEY_FILE’] = ‘’;
$DB[‘CERT_FILE’] = ‘’;
$DB[‘CA_FILE’] = ‘/etc/ssl/mysql/ca.pem’;
$DB[‘VERIFY_HOST’] = false;
$DB[‘CIPHER_LIST’] = ‘’;
1. 检查 Database TLS encryptionVerify database certificate
2. 指定CA文件的路径 Database TLS CA file
Enable ‘verify_ca’ mode.
4 安全的连接数据库 - 图3
// Used for TLS connection with strictly defined Cipher list.
$DB[‘ENCRYPTION’] = true;
$DB[‘KEY_FILE’] = ‘<key_file_path>’;
$DB[‘CERT_FILE’] = ‘<key_file_path>’;
$DB[‘CA_FILE’] = ‘<key_file_path>’;
$DB[‘VERIFY_HOST’] = true;
$DB[‘CIPHER_LIST’] = ‘<cipher_list>’;


Or:


// Used for TLS connection without Cipher list defined - selected by MySQL server
$DB[‘ENCRYPTION’] = true;
$DB[‘KEY_FILE’] = ‘<key_file_path>’;
$DB[‘CERT_FILE’] = ‘<key_file_path>’;
$DB[‘CA_FILE’] = ‘<key_file_path>’;
$DB[‘VERIFY_HOST’] = true;
$DB[‘CIPHER_LIST’] = ‘’;
1. 检查 Database TLS encryptionVerify database certificate
2. 指定key文件路径 Database TLS key file
3. 指定CA文件路径 Database TLS CA file
4. 指定证书文件路径 Database TLS certificate file
6. 指定TLS密码列表(可选)
Enable ‘verify_full’ mode for MySQL.
4 安全的连接数据库 - 图4
$DB[‘ENCRYPTION’] = true;
$DB[‘KEY_FILE’] = ‘<key_file_path>’;
$DB[‘CERT_FILE’] = ‘<key_file_path>’;
$DB[‘CA_FILE’] = ‘<key_file_path>’;
$DB[‘VERIFY_HOST’] = true;
$DB[‘CIPHER_LIST’] = ‘ ‘;

1. 检查 Database TLS encryptionVerify database certificate
2. 指定key文件路径 Database TLS key file
3. 指定CA文件路径 Database TLS CA file
4. 指定证书文件路径 Database TLS certificate file
6. 检查 Database host verification
Enable ‘verify_full’ mode for PostgreSQL.

详见: MySQL加密配置示例, PostgreSQL加密配置示例.

Zabbix server/proxy 配置

Zabbix server / proxy 配置文件中,可以配置数据库安全连接的相关参数.

配置返回结果
NoneConnection to the database without encryption.
1. Set DBTLSConnect=requiredServer/proxy make a TLS connection to the database. An unencrypted connection is not allowed.
1. Set DBTLSConnect=verify_ca
2. Set DBTLSCAFile - specify the TLS certificate authority file
Server/proxy make a TLS connection to the database after verifying the database certificate.
1. Set DBTLSConnect=verify_full
2. Set DBTLSCAFile - specify TLS certificate authority file
Server/proxy make a TLS connection to the database after verifying the database certificate and the database host identity.
1. Set DBTLSCAFile - specify TLS certificate authority file
2. Set DBTLSCertFile - specify the client public key certificate file
3. Set DBTLSKeyFile - specify the client private key file
Server/proxy provide a client certificate while connecting to the database.
1. Set DBTLSCipher - the list of encryption ciphers that the client permits for connections using TLS protocols up to TLS 1.2

or DBTLSCipher13 - the list of encryption ciphers that the client permits for connections using TLS 1.3 protocol
(MySQL) TLS connection is made using a cipher from the provided list.
(PostgreSQL) Setting this option will be considered as an error.