4 安全的连接数据库
概述
本章节提供了Zabbix的设置步骤和配置示例,用于在以下设备之间建立安全的TLS连接:
数据库 | Zabbix 组件 |
---|---|
MySQL | Zabbix frontend, Zabbix server, Zabbix proxy |
PostgreSQL | Zabbix frontend, Zabbix server, Zabbix proxy |
请参考各官方文档了解如何在DBMS中设置连接加密:
- MySQL: source and replica replication database servers.
- MySQL: group replication, etc. database servers.
- PostgreSQL encryption options.
所有的示例都是基于 CentOS 8 官方提供的 MySQL CE(8.0)和 PgSQL(13) 的 GA 版本。
要求
设置加密需要以下内容:
- 需要具有 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 选项以启用加密传输 Configure DB connection.
- 当启用证书加密的TLS encryption字段时,勾选Verify database certificate复选框
对于MySQL,如果Database host设置为localhost, Database TLS encryption 复选框是禁用的,因为连接使用 socket 文件 (Unix) 或 共享内存(Windows) 是不能加密的
以下参数在证书模式 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 certificate files must be read-only.” 含义为System information(当PHP用户是证书的所有者时显示)。
不支持受密码保护的证书。
用例
Zabbix前端使用GUI界面定义可能的选项:required, verify_ca, verify_full。在安装向导步骤Configure DB connections中指定所需选项。这些选项按以下方式映射到配置文件(zabbix.conf.php):
图形化设置 | 配置文件 | 描述 | 结果 |
---|---|---|---|
… // Used for TLS connection. $DB[‘ENCRYPTION’] = true; $DB[‘KEY_FILE’] = ‘’; $DB[‘CERT_FILE’] = ‘’; $DB[‘CA_FILE’] = ‘’; $DB[‘VERIFY_HOST’] = false; $DB[‘CIPHER_LIST’] = ‘’; … | 检查 Database TLS encryption 保证选项 Verify database certificate 未选中 | Enable ‘required’ mode. | |
… $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. 检查 Database TLS encryption 和 Verify database certificate 2. 指定CA文件的路径 Database TLS CA file | Enable ‘verify_ca’ mode. | |
… // Used for TLS connection with strictly defined Cipher list. $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: … // Used for TLS connection without Cipher list defined - selected by MySQL server $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. 检查 Database TLS encryption 和 Verify database certificate 2. 指定key文件路径 Database TLS key file 3. 指定CA文件路径 Database TLS CA file 4. 指定证书文件路径 Database TLS certificate file 6. 指定TLS密码列表(可选) | Enable ‘verify_full’ mode for 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. 检查 Database TLS encryption 和 Verify database certificate 2. 指定key文件路径 Database TLS key file 3. 指定CA文件路径 Database TLS CA file 4. 指定证书文件路径 Database TLS certificate file 6. 检查 Database host verification | Enable ‘verify_full’ mode for PostgreSQL. |
详见: MySQL加密配置示例, PostgreSQL加密配置示例.
Zabbix server/proxy 配置
Zabbix server / proxy 配置文件中,可以配置数据库安全连接的相关参数.
配置 | 返回结果 |
---|---|
None | Connection to the database without encryption. |
1. Set DBTLSConnect=required | Server/proxy make a TLS connection to the database. An unencrypted connection is not allowed. |
1. Set DBTLSConnect=verify_ca 2. Set DBTLSCAFile - specify the TLS certificate authority file | Server/proxy make a TLS connection to the database after verifying the database certificate. |
1. Set DBTLSConnect=verify_full 2. Set DBTLSCAFile - specify TLS certificate authority file | Server/proxy make a TLS connection to the database after verifying the database certificate and the database host identity. |
1. Set DBTLSCAFile - specify TLS certificate authority file 2. Set DBTLSCertFile - specify the client public key certificate file 3. Set DBTLSKeyFile - specify the client private key file | Server/proxy provide a client certificate while connecting to the database. |
1. Set DBTLSCipher - the list of encryption ciphers that the client permits for connections using TLS protocols up to TLS 1.2 or DBTLSCipher13 - the list of encryption ciphers that the client permits for connections using TLS 1.3 protocol | (MySQL) TLS connection is made using a cipher from the provided list. (PostgreSQL) Setting this option will be considered as an error. |