4 数据库安全连接

概述

本节提供Zabbix组件与数据库之间建立安全TLS连接的配置步骤及示例:

数据库类型 Zabbix组件
MySQL Zabbix前端、Zabbix server、Zabbix proxy
PostgreSQL Zabbix前端、Zabbix server、Zabbix proxy

关于数据库管理系统内部的连接加密设置,请参阅官方供应商文档:

  • MySQL: 源数据库服务器与副本复制服务器
  • MySQL: 组复制等数据库服务器
  • PostgreSQL: 加密选项

所有示例均基于通过AlmaLinux 8官方仓库提供的MySQL社区版(8.0)和PostgreSQL(13)通用发行版。

需求

设置加密需要满足以下条件:

  • 开发者支持的操作系统,需安装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连接,验证证书并确保数据库主机(CN)与证书中指定的身份匹配

Zabbix配置

前端到数据库的接口

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

  • 配置数据库连接步骤中勾选数据库TLS加密复选框以启用传输加密。
  • TLS加密字段被勾选时,出现的验证数据库证书复选框需勾选以启用证书加密。

对于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前端通过图形界面定义可选配置项:requiredverify\_caverify\_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 MySQLEncryption configuration examples for PostgreSQL

Zabbix server/proxy 配置

可以通过在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) 设置此选项将被视为错误。