4 安全的连接数据库

概述

本章节提供了Zabbix的设置步骤和配置示例,用于在以下设备之间建立安全的TLS连接:

数据库 Zabbix 组件
MySQL Zabbix frontend, Zabbix server, Zabbix proxy
PostgreSQL Zabbix frontend, Zabbix server, Zabbix proxy

请参考各官方文档了解如何在DBMS中设置连接加密:

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

所有示例均基于 MySQL CE (8.0) 和 PgSQL (13) 的 GA 版本,可通过使用 AlmaLinux 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 配置

前端连接数据库

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

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

对于MySQL,如果Database host设置为localhost, Database TLS encryption 复选框是禁用的,因为连接使用 socket 文件 (Unix) 或共享内存(Windows) 是不能加密的。 对于 PostgreSQL,如果 Database host 字段的值以斜线开头或字段为空,则 TLS encryption 复选框被禁用。

以下参数在证书模式 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参数必须指向有效的文件。如果指向的文件不存在或无效,则会导致授权错误.
如果证书文件权限是可写的,前端会在 系统信息 报告中生成警告“TLS 证书文件必须是只读的。” (仅当 PHP 用户是证书的所有者时才显示)。 不支持受密码保护的证书。

用例

Zabbix 前端使用 GUI 界面定义可能的选项:必需的,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 加密
验证数据库证书 选项留空(不勾选)
启用“必需”模式。
...
$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>';
...

Or:

...
// 用于未定义密码列表的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' 模式。

另请参阅: MySQL 加密配置示例PostgreSQL 加密配置示例

Zabbix 服务器/代理配置

可以使用 Zabbix server 和/或 proxy 配置文件中的相应参数配置与数据库的安全连接。

配置 结果
未加密的数据库连接。
1. 设置 DBTLSConnect=required 服务器/代理与数据库建立 TLS 连接。 不允许未加密的连接。
1. 设置 DBTLSConnect=verify_ca
2. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件
服务器/代理在验证数据库证书后与数据库建立 TLS 连接。
1. 设置 DBTLSConnect=verify_full
2. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件
服务器/代理在验证数据库证书和数据库主机身份后与数据库建立 TLS 连接。
1. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件
2. 设置 DBTLSCertFile - 指定客户端公钥证书文件
3. 设置 DBTLSKeyFile - 指定客户端私钥文件
服务器/代理在连接到数据库时提供客户端证书。
1. 设置 DBTLSCipher - 客户端允许使用最高 TLS 1.2 的 TLS 协议进行连接的加密密码列表

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