Loading... # Zabbix 结合 TLS 实现安全加密与认证(实战速配)🔒📈 下面直接给出**原理简介 → PSK vs 证书比较 → 生成证书/PSK 的实用命令(逐行解释) → 服务端/Agent 配置示例(逐行解释)→ 验证与排错要点**。重要概念以 `<span style="color:red">红色</span>` 标注,文中关键事实引用官方文档出处以便核验。✨ ([zabbix.com](https://www.zabbix.com/documentation/4.0/es/manual/encryption?utm_source=chatgpt.com "17. Encryption")) --- ## 核心要点(速读) * Zabbix 支持三种连接方式:`<span style="color:red">unencrypted</span>`、`<span style="color:red">psk</span>`、`<span style="color:red">cert</span>`,并通过 `TLSConnect` / `TLSAccept` 控制(Agent/Proxy/Server/Host 配置)。([zabbix.com](https://www.zabbix.com/documentation/4.0/es/manual/encryption?utm_source=chatgpt.com "17. Encryption")) * 证书模式(mTLS)基于 CA 签名,提供**双向认证与更强的非对称加密保障**;PSK 适合轻量/自动化部署,但密钥管理需谨慎。([zabbix.com](https://www.zabbix.com/documentation/current/en/manual/encryption?utm_source=chatgpt.com "17 Encryption")) --- ## PSK vs 证书对比表(面试/设计速查)📋 | 维度 | `<span style="color:red">PSK</span>` | `<span style="color:red">证书(cert)</span>` | | ---------- | -------------------------------------: | ----------------------------------------------- | | 认证强度 | 对称密钥,强度取决于密钥长度 | 非对称(CA签名),支持撤销与细粒度管理 | | 部署复杂度 | 低(生成密钥即可) | 中高(需 CA、签名、分发) | | 自动化 | 易于脚本分发(注意保密) | 可结合内部 PKI 自动化颁发/撤销 | | 推荐场景 | 小规模、受控网络 | 企业级、需要审计与撤销支持 | --- ## 一:生成 **自签 CA + Server/Agent 证书**(OpenSSL 示例) ```bash # 1. 生成 CA 私钥与自签证书(有效期 10 年) openssl genrsa -out zabbix-ca.key 4096 openssl req -x509 -new -nodes -key zabbix-ca.key -sha256 -days 3650 -subj "/CN=Zabbix-CA" -out zabbix-ca.crt # 2. 为 Server 生成私钥与 CSR openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=zabbix.example.com" -out server.csr # 3. 用 CA 签名 Server 证书(含 SAN) openssl x509 -req -in server.csr -CA zabbix-ca.crt -CAkey zabbix-ca.key \ -CAcreateserial -out server.crt -days 365 -sha256 \ -extfile <(printf "subjectAltName=DNS:zabbix.example.com,IP:10.0.0.5") ``` **逐行解释**: * `openssl genrsa -out zabbix-ca.key 4096`:生成 4096-bit CA 私钥,保管该文件非常重要。 * `openssl req -x509 ... -out zabbix-ca.crt`:用私钥生成自签 CA 证书(`-x509`),设置 CN 为 `Zabbix-CA`。 * `openssl genrsa -out server.key 2048`:为 Zabbix Server 生成私钥(2048 位)。 * `openssl req -new ... -out server.csr`:基于私钥创建证书签名请求(CSR),CN 设置为 server 的主机名。 * `openssl x509 -req ... -extfile <(...)`:使用 CA 对 CSR 签名生成 `server.crt`,并通过 `subjectAltName` 指定主机名/IP,保证 TLS 校验通过(浏览器/客户端会检查 SAN)。 > 把 `zabbix-ca.crt` 分发到所有 Agent/Proxy 主机作为受信任根证书。 --- ## 二:生成 PSK(示例) ```bash # 在 server 侧生成高熵 PSK(32 字节 hex) head -c 32 /dev/urandom | xxd -p -c 256 > zabbix.psk # 内容示例: e3b0c44298fc1c149afbf4c8996fb924... ``` **解释**: * `head -c 32 /dev/urandom`:读取 32 字节随机数据(高熵)。 * `xxd -p`:以十六进制格式输出,便于在 Zabbix GUI 或配置文件中使用。 * 将该 PSK 与 **身份(PSK identity)** 一并在 Zabbix 前端和 Agent/Proxy 配置中登记(前端 Encryption 页面填写)。 --- ## 三:服务端(zabbix\_server / zabbix\_proxy)配置示例(证书模式) 在 `zabbix_server.conf` 或 `zabbix_proxy.conf` 中加入: ```ini TLSAccept=cert TLSConnect=cert TLSCAFile=/etc/zabbix/ssl/zabbix-ca.crt TLSCertFile=/etc/zabbix/ssl/server.crt TLSKeyFile=/etc/zabbix/ssl/server.key # 可选:指定更强的密码套件和 TLS1.3 算法 TLSCipherCert13=TLS_AES_256_GCM_SHA384 ``` **逐项解释**: * `TLSAccept=cert`:接受基于证书的入站连接。 * `TLSConnect=cert`:对外连接(例如到 Web/Proxy/Agent)使用证书方式。 * `TLSCAFile` / `TLSCertFile` / `TLSKeyFile`:分别指定 CA、服务器证书、服务器私钥路径。 * `TLSCipherCert13`:可显式指定 TLS1.3 的密码套件以提高加密强度(需 OpenSSL 与系统支持)。 ([zabbix.com](https://www.zabbix.com/documentation/current/en/manual/encryption?utm_source=chatgpt.com "17 Encryption")) --- ## 四:Agent 配置(`zabbix_agentd.conf`)示例(证书模式) ```ini TLSAccept=cert TLSConnect=cert TLSCAFile=/etc/zabbix/ssl/zabbix-ca.crt TLSCertFile=/etc/zabbix/ssl/agent.crt TLSKeyFile=/etc/zabbix/ssl/agent.key Server=zabbix.example.com ServerActive=zabbix.example.com ``` **说明**:与 Server 类似,Agent 需要配置 CA 与自己证书,并将 `Server`/`ServerActive` 指向 Server(或 Proxy)。Agent 重启后会尝试基于证书进行握手;若 Server 辨认 Agent 的证书链,则建立连接。([zabbix.com](https://www.zabbix.com/documentation/current/en/manual/encryption/using_certificates?utm_source=chatgpt.com "1 Using certificates")) --- ## 五:在 Zabbix 前端设置 Host 的加密参数 在 Host 的 **Encryption** 选项卡里: * 选择连接类型(`PSK` 或 `Certificate`); * 若为 PSK:填写 `PSK identity` 与 `PSK` 值(与 agent 配置或 `TLSPSKFile` 对应)。 * 若为 Cert:确保 Agent 的证书 CN / SAN 与 Host 配置一致并选择 `Certificate`。 (前端配置与 Agent/Server 的 `TLS*` 参数需要匹配,否则连接会被拒绝)([zabbix.com](https://www.zabbix.com/documentation/4.0/es/manual/encryption?utm_source=chatgpt.com "17. Encryption")) --- ## 六:验证与排错命令(必会) ```bash # 查看 agent 日志(常见 TLS 错误) sudo tail -n 200 /var/log/zabbix/zabbix_agentd.log # 用 openssl 测试连接并查看证书链 openssl s_client -connect zabbix.example.com:10051 -CAfile zabbix-ca.crt -showcerts # 检查 zabbix_server 日志 sudo tail -n 200 /var/log/zabbix/zabbix_server.log ``` **解释**: * agent/server 日志会直接给出握手失败原因(证书不受信、CN/SAN 不匹配、证书已过期、PSK 校验失败等)。 * `openssl s_client` 可用于模拟 TLS 握手与观察证书链、协商的协议与套件。 --- ## 七:实务建议与注意事项 ✅ * 始终把 `<span style="color:red">CA 根证书</span>` 放到受控目录并限制权限,避免被滥用。 * 若使用证书模式,建议结合 **证书撤销机制 (CRL/OCSP)** 与自动化颁发(内部 PKI)以便撤销失效证书。 * 在混合环境中(部分主机用 PSK、部分用 cert),`TLSAccept` 可以同时包含多个值(例如 `psk,cert`)以兼容不同主机。([Gist](https://gist.github.com/jpluimers/ba946c54845abab2e0ab1fd1039593e0?utm_source=chatgpt.com "Windows zabbix_agentd.conf example")) * 监控日志并制定密钥/证书轮换策略(例如每年或按合规要求),并对证书到期做告警。🔁 --- 如需,我可以基于你的环境(Server/Agent 的 OS、Zabbix 版本、是否有内部 PKI)给出**一键化脚本**用于生成 CA/证书或批量分发 PSK,并输出需要在前端填写的字段清单与常见错误的日志样例供比对。 最后修改:2025 年 09 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏