本节提供Zabbix组件与数据库之间建立安全TLS连接的配置步骤及示例:
数据库类型 | Zabbix组件 |
---|---|
MySQL | Zabbix前端、Zabbix server、Zabbix proxy |
PostgreSQL | Zabbix前端、Zabbix server、Zabbix proxy |
关于数据库管理系统内部的连接加密设置,请参阅官方供应商文档:
所有示例均基于通过AlmaLinux 8官方仓库提供的MySQL社区版(8.0)和PostgreSQL(13)通用发行版。
设置加密需要满足以下条件:
建议避免使用已终止生命周期的操作系统, 尤其在新安装环境中
设置此选项将强制要求从Zabbix server/proxy到数据库以及前端到数据库使用TLS连接:
required
- 使用TLS作为传输模式进行连接,不进行身份验证verify_ca
- 使用TLS连接并验证证书verify_full
- 使用TLS连接,验证证书并确保数据库主机(CN)与证书中指定的身份匹配在前端安装过程中可配置数据库安全连接:
对于MySQL,若数据库主机设置为localhost,则数据库TLS加密复选框将禁用,因为使用套接字文件(Unix)或共享内存(Windows)的连接无法加密。
对于PostgreSQL,若数据库主机字段值以斜杠开头或为空,则TLS加密复选框将禁用。
在证书模式下的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参数必须指向有效文件。若指向不存在或无效文件,将导致授权错误。
若证书文件可写,前端会在System information报告中生成警告:"TLS证书文件必须为只读"(仅当PHP用户是证书所有者时显示)。
不支持密码保护的证书。
Zabbix前端通过图形界面定义可选配置项:required
、verify\_ca
、verify\_full
。在安装向导的配置数据库连接步骤中指定必要选项,这些选项会按以下方式映射到配置文件(zabbix.conf.php):
图形界面设置 | 配置文件 | 描述 | 结果 |
---|---|---|---|
![]() |
... // 用于TLS连接 $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = ''; $DB['CERT_FILE'] = ''; $DB['CA_FILE'] = ''; $DB['VERIFY_HOST'] = false; $DB['CIPHER_LIST'] = ''; ... |
勾选数据库TLS加密 保持验证数据库证书未勾选 |
启用required 模式 |
![]() |
... $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。勾选数据库TLS加密和验证数据库证书 2。指定数据库TLS CA文件路径 |
启用verify_ca 模式 |
![]() |
... // 用于严格定义加密套件的TLS连接 $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>'; ... 或: ... // 用于未定义加密套件的TLS连接 - 由MySQL服务器选择 $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。勾选数据库TLS加密和验证数据库证书 2。指定数据库TLS密钥文件路径 3。指定数据库TLS CA文件路径 4。指定数据库TLS证书文件路径 5。指定数据库TLS加密套件列表(可选) |
为MySQL启用verify_full 模式 |
![]() |
... $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。勾选数据库TLS加密和验证数据库证书 2。指定数据库TLS密钥文件路径 3。指定数据库TLS CA文件路径 4。指定数据库TLS证书文件路径 5。勾选数据库主机验证 |
为PostgreSQL启用verify_full 模式 |
另请参阅: Encryption configuration examples for MySQL、Encryption configuration examples for PostgreSQL
可以通过在Zabbix server和/或proxy配置文件中设置相应参数来配置与数据库的安全连接。
配置项 | 结果 |
---|---|
无 | 以非加密方式连接数据库。 |
1。设置DBTLSConnect=required |
server/proxy将建立TLS加密连接数据库,不允许非加密连接。 |
1。设置DBTLSConnect=verify_ca 2。设置 DBTLSCAFile - 指定TLS证书授权文件 |
server/proxy将在验证数据库证书后建立TLS加密连接。 |
1。设置DBTLSConnect=verify_full 2。设置 DBTLSCAFile - 指定TLS证书授权文件 |
server/proxy将在验证数据库证书和数据库主机身份后建立TLS加密连接。 |
1。设置DBTLSCAFile - 指定TLS证书授权文件2。设置 DBTLSCertFile - 指定客户端公钥证书文件3。设置 DBTLSKeyFile - 指定客户端私钥文件 |
server/proxy将在连接数据库时提供客户端证书。 |
1。设置DBTLSCipher - 客户端允许的加密套件列表(适用于TLS 1.2及以下版本协议)或 DBTLSCipher13 - 客户端允许的加密套件列表(适用于TLS 1.3协议) |
(MySQL) 将使用指定列表中的加密套件建立TLS连接。 (PostgreSQL) 设置此选项将被视为错误。 |