2 使用预共享秘钥
概述
Zabbix中的每个预共享密钥(PSK)实际上是一对:
- 非秘密 PSK 标识字符串,
- 秘密 PSK 字符串值。
PSK 标识字符串是非空 UTF-8 字符串。例如,"PSK ID 001 Zabbix agentd"。它是一个唯一的名称,Zabbix组件通过该名称引用此特定PSK。不要将敏感信息放在 PSK 标识字符串中 - 它是通过未加密的网络传输的。
PSK 值是一个难以猜测的十六进制数字字符串,例如, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"。
大小限制
在 Zabbix 中,PSK 标识和 PSK 值存在大小限制;在某些情况下,加密库的限制可能更低:
| 组件 | PSK 标识最大大小 | PSK 值最小大小 | PSK 值最大大小 |
|---|---|---|---|
| Zabbix | 128 个 UTF-8 字符 | 128 位(16 字节 PSK,以 32 个十六进制数字输入) | 2048 位(256 字节 PSK,以 512 个十六进制数字输入) |
| GnuTLS | 128 字节(可包含 UTF-8 字符) | - | 2048 位(256 字节 PSK,以 512 个十六进制数字输入) |
| OpenSSL 1.0.x, 1.1.0 | 127 字节(可包含 UTF-8 字符) | - | 2048 位(256 字节 PSK,以 512 个十六进制数字输入) |
| OpenSSL 1.1.1 | 127 字节(可包含 UTF-8 字符) | - | 512 位(64 字节 PSK,以 128 个十六进制数字输入) |
| OpenSSL 1.1.1a 及更高版本 | 127 字节(可包含 UTF-8 字符) | - | 2048 位(256 字节 PSK,以 512 个十六进制数字输入) |
Zabbix 前端允许配置最长 128 个字符的 PSK 标识字符串以及最长 2048 位的 PSK,而不考虑所使用的加密库。
如果某些 Zabbix 组件支持的限制更低,则用户有责任为这些组件配置长度符合要求的 PSK 标识和 PSK 值。
超出长度限制会导致 Zabbix 组件之间通信失败。
在 Zabbix 服务器使用 PSK 连接到 agent 之前,服务器会在数据库中查找为该 agent 配置的 PSK 标识和 PSK 值(实际上是在配置缓存中查找)。收到连接时,agent 使用其配置文件中的 PSK 标识和 PSK 值。如果双方具有相同的 PSK 标识字符串和 PSK 值,则连接可能成功。
每个 PSK 标识只能与一个值配对。用户有责任确保不存在两个具有相同标识字符串但值不同的 PSK。否则,可能会导致不可预测的错误,或造成使用该 PSK 标识字符串的 PSK 的 Zabbix 组件之间通信中断。
生成 PSK
例如,可以使用以下命令生成 256 位 (32 字节)PSK:
-
对于OpenSSL:
<!-- -->$ openssl rand -hex 32 af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
-
对于 GnuTLS:
<!-- --> $ psktool -u psk_identity -p database.psk -s 32 为用户 'psk_identity'生成随机密钥 密钥存储到 database.psk $ cat database.psk psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb请注意,上面的"psktool"会生成一个具有 PSK 标识及其关联 PSK 的数据库文件。 Zabbix 期望 PSK 文件中只有一个 PSK,因此应从文件中删除标识字符串和冒号 (':')。
为服务器-agent 通信配置 PSK(示例)
在 agent 所在主机上,将 PSK 值写入文件中,例如
/home/zabbix/zabbix_agentd.psk。该文件必须在第一行文本中包含 PSK,例如:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
设置 PSK 文件的访问权限——该文件必须仅对 Zabbix 用户可读。
编辑 agent 配置文件 zabbix_agentd.conf 中的 TLS 参数,
例如,设置:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
agent 将连接到服务器(主动检查),并且仅接受来自服务器
和 zabbix_get 的使用 PSK 的连接。PSK 标识将为“PSK
001”。
重启 agent。现在您可以使用 zabbix_get 测试连接,
例如:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk
(要尽量减少停机时间,请参阅如何在 连接加密 管理 中更改连接类型。)
在 Zabbix 前端中为此 agent 配置 PSK 加密:
- 转到:数据采集 → 主机
- 选择主机并单击 加密 选项卡
示例:

所有必填输入字段都用红色星号标记。
当配置缓存与数据库同步后,新连接将使用 PSK。请检查服务器和 agent 的日志文件以获取错误消息。
为服务器 - 主动 proxy 通信配置 PSK(示例)
在 proxy 上,将 PSK 值写入一个文件,例如
/home/zabbix/zabbix_proxy.psk。该文件必须在第一行文本字符串中包含 PSK,例如:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
设置 PSK 文件的访问权限——它必须只能由 Zabbix 用户读取。
编辑 proxy 配置文件 zabbix_proxy.conf 中的 TLS 参数,例如,设置:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
proxy 将使用 PSK 连接到服务器。PSK 标识将为“PSK 002”。
(为尽量减少停机时间,请参阅如何在连接加密管理中更改连接类型。)
在 Zabbix 前端中为此 proxy 配置 PSK。转到
Administration→Proxies,选择该 proxy,进入“Encryption”选项卡。在
“Connections from proxy”中勾选 PSK。将“PSK identity”字段设置为“PSK 002”,并将
“e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”粘贴到
“PSK”字段中。点击“Update”。
重启 proxy。它将开始使用基于 PSK 的加密连接连接到服务器。检查服务器和 proxy 日志文件中是否有错误消息。
对于被动 proxy,过程非常相似。唯一的区别是——在 proxy 配置文件中设置 TLSAccept=psk,并在 Zabbix 前端中将“Connections to
proxy”设置为 PSK。