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界面定义可能的选项:required, verify_ca, verify_full。在安装向导步骤配置数据库连接中指定所需选项。这些选项按以下方式映射到配置文件(zabbix.conf.php):
图形化设置 | 配置文件 | 描述 | 结果 |
---|---|---|---|
… // 用于 TLS 连接。 $DB [‘ENCRYPTION’] = true; $DB[‘KEYFILE’] = ‘’; $DB[‘CERT_FILE’] = ‘’; $ DB[‘CA_FILE’] = ‘’; $DB[‘VERIFY_HOST’] = false; $DB[‘CIPHER_LIST’] = ‘’;< br>… | 选中数据库 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 文件的路径 | 启用“验证_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 证书文件 6. 指定 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 证书文件 6. 检查数据库主机验证 | 为 PostgreSQL 启用“验证完整”模式。 |
另请参阅: 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) 设置此选项将被视为错误。 |