4 数据库安全连接

概述

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

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

有关在数据库管理系统内设置连接加密的详细信息,请参阅官方供应商文档:

  • MySQL: 源数据库服务器和副本复制数据库服务器

  • MySQL: 组复制等数据库服务器

  • PostgreSQL

    encryption options.

所有示例均基于通过AlmaLinux 8官方仓库提供的MySQL CE(8.0)和PgSQL(13)GA版本

需求

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

  • 开发者支持的操作系统,需安装OpenSSL >=1.1.X或

    alternative.

建议避免使用处于生命周期终止状态的OS 特别是在新安装的情况下

  • 数据库引擎(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 encryption field is checked to enable encryption with certificates.

时出现的验证数据库证书复选框需要勾选

对于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 配置

可通过在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证书颁发机构 file
2. 设置 DBTLSCertFile - 指定客户端公钥证书 file
3. 设置 DBTLSKeyFile - 指定客户端私钥 file
server/proxy 在连接数据库时提供客户端证书。
1. 设置 DBTLSCipher - 客户端允许的TLS 1.2及以下协议加密套件列表

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