本节提供Zabbix的安装步骤和配置示例: 在以下各项之间建立安全的 TLS 连接:
数据库 | Zabbix 组件 |
---|---|
MySQL | Zabbix 前端,Zabbix server,Zabbix proxy |
PostgreSQL | Zabbix 前端,Zabbix server, Zabbix proxy |
要在 DBMS 中设置连接加密,请参见官方供应商文档。 文档详情请参阅:
所有示例均基于 MySQL CE(8.0)和 PgSQL 的 GA 发布版。 通过使用CentOS官方仓库提供的13。8
要设置加密,需要满足以下条件:
建议避免使用处于生命周期终止状态的操作系统,尤其是在新安装的情况下
设置此选项将强制从 Zabbix server/proxy 和前端到数据库使用 TLS 连接:
required
- 使用 TLS 作为传输模式进行连接,不进行身份验证检查verify_ca
- 使用 TLS 连接并验证证书verify_full
- 使用 TLS 连接,验证证书,并验证 DBHost 指定的数据库身份(CN)与其证书匹配在前端安装过程中可以配置与数据库的安全连接:
对于 MySQL,如果 数据库 主机 设置为 localhost,则 数据库TLS加密 复选框会被禁用,因为使用套接字 file(在 Unix 上)或共享内存 memory(在 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前端使用图形用户界面(GUI)来定义可能的选项:required
、
verify_ca
、verify_full
。在安装向导的“配置数据库连接”步骤中指定所需的选项。这些选项以如下方式映射到配置文件file(zabbix.conf.php):
GUI设置 | 配置文件 | 描述 | 结果 |
---|---|---|---|
![]() |
... // 用于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 模式。 |
![]() |
... // 用于严格定义Cipher列表的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>'; ... 或者: ... // 用于未定义Cipher列表的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 cipher列表”(可选) |
启用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 协议连接的加密套件列表,最高支持 TLS 1.2或 DBTLSCipher13 - 客户端允许用于 TLS 1.3 协议连接的加密套件列表 |
(MySQL) 使用提供的列表中的加密套件建立 TLS 连接。 (PostgreSQL) 设置此选项将被视为错误。 |