本节提供Zabbix在以下组件之间建立安全TLS连接的设置步骤和配置示例:
数据库 | Zabbix组件 |
---|---|
MySQL | Zabbix前端, Zabbix server, Zabbix proxy |
PostgreSQL | Zabbix前端, Zabbix server, Zabbix proxy |
有关在数据库管理系统内设置连接加密的详细信息,请参阅官方供应商文档:
所有示例均基于通过AlmaLinux 8官方仓库提供的MySQL CE(8.0)和PgSQL(13)GA版本
设置加密需要满足以下条件:
开发者支持的操作系统,需安装OpenSSL >=1.1.X或
alternative.
建议避免使用处于生命周期终止状态的OS 特别是在新安装的情况下
设置此选项将强制要求从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)file的完整路径 |
Database TLS key file | 指定有效的TLS密钥file的完整路径 |
Database TLS certificate file | 指定有效的TLS证书file的完整路径 |
Database host verification | 勾选此复选框以激活主机验证 MySQL禁用此选项,因为PHP MySQL库不允许跳过对等证书验证步骤 |
Database TLS cipher list | 指定自定义的有效密码列表。密码列表格式必须符合OpenSSL标准 仅适用于MySQL |
TLS参数必须指向有效文件。如果指向不存在或无效的文件,将导致授权错误。
如果证书文件可写,前端会在System information报告中生成警告"TLS证书文件必须为只读"(仅当PHP用户是证书所有者时显示)。
不支持密码保护的证书。
Zabbix前端通过图形界面定义可选配置项: required
, verify\_ca
, verify\_full
. 在安装向导的配置数据库连接步骤中指定必要参数. 这些选项会以下列方式映射到配置文件file(zabbix.conf.php):
图形界面设置 | 配置文件file | 描述 | 结果 |
---|---|---|---|
![]() |
... // 用于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文件file路径 |
启用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密钥文件file路径 3. 指定数据库TLS CA文件file路径 4. 指定数据库TLS证书文件file路径 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密钥文件file路径 3. 指定数据库TLS CA文件file路径 4. 指定数据库TLS证书文件file路径 5. 勾选数据库主机验证 |
为PostgreSQL启用verify_full 模式 |
另请参阅: Encryption configuration examples for MySQL, Encryption configuration examples for PostgreSQL.
可通过在Zabbix server 和/或 proxy 配置文件中的相应参数 file 来配置数据库的安全连接。
配置项 | 结果 |
---|---|
无 | 以非加密方式连接数据库。 |
1. 设置 DBTLSConnect=required |
server/proxy 建立TLS加密连接至数据库。不允许非加密连接。 |
1. 设置 DBTLSConnect=verify_ca 2. 设置 DBTLSCAFile - 指定TLS证书颁发机构 file |
server/proxy 在验证数据库证书后建立TLS加密连接。 |
1. 设置 DBTLSConnect=verify_full 2. 设置 DBTLSCAFile - 指定TLS证书颁发机构 file |
server/proxy 在验证数据库证书及数据库 主机 身份后建立TLS加密连接。 |
1. 设置 DBTLSCAFile - 指定TLS证书颁发机构 file2. 设置 DBTLSCertFile - 指定客户端公钥证书 file3. 设置 DBTLSKeyFile - 指定客户端私钥 file |
server/proxy 在连接数据库时提供客户端证书。 |
1. 设置 DBTLSCipher - 客户端允许的TLS 1.2及以下协议加密套件列表或 DBTLSCipher13 - 客户端允许的TLS 1.3协议加密套件列表 |
(MySQL) 使用指定列表中的加密套件建立TLS连接。 (PostgreSQL) 设置此选项将被视为错误。 |