5 与数据库的安全连接

概述

本节提供Zabbix的安装步骤和配置示例: 在以下各项之间建立安全的 TLS 连接:

数据库 Zabbix 组件
MySQL Zabbix 前端,Zabbix server,Zabbix proxy
PostgreSQL Zabbix 前端,Zabbix server, Zabbix proxy

要在 DBMS 中设置连接加密,请参见官方供应商文档。 文档详情请参阅:

  • MySQL: 主数据库服务器和副本数据库服务器。
  • MySQL: 等。
  • PostgreSQL 加密选项。

所有示例均基于 MySQL CE(8.0)和 PgSQL 的 GA 发布版。 通过使用CentOS官方仓库提供的13。8

需求

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

  • 开发人员支持的操作系统,并安装 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配置

前端到数据库的接口

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

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

对于 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_caverify_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 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 协议连接的加密套件列表,最高支持 TLS 1.2

DBTLSCipher13 - 客户端允许用于 TLS 1.3 协议连接的加密套件列表
(MySQL) 使用提供的列表中的加密套件建立 TLS 连接。
(PostgreSQL) 设置此选项将被视为错误。