Zabbix 中的每个预共享密钥 (PSK) 实际上是一对:
PSK 身份 string 是一个非空的 UTF-8 string。例如:"PSK ID Zabbix agentd”。这是一个唯一名称,用于标识此特定的 PSK 被 Zabbix 组件引用。请勿在此处放置敏感信息 PSK 身份 string - 它通过网络以明文形式传输。
PSK值是一个难以猜测的十六进制数字组成的string,例如: e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Zabbix中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标识string和2048位的PSK,无论使用何种加密库。
如果某些Zabbix组件支持更低的限制,用户有责任为这些组件配置符合允许长度的PSK标识和值。
超出长度限制会导致Zabbix组件之间的通信失败。
在Zabbix server使用PSK连接到agent之前,服务器会在数据库中(实际上是在configuration cache中)查找该agent配置的PSK标识和PSK值。接收到连接时,agent会使用其配置文件中的PSK标识和PSK值。如果双方具有相同的PSK标识string和PSK值,连接可能会成功。
每个PSK标识只能与一个值配对。用户有责任确保没有两个PSK具有相同的标识string但不同的值。未能做到这一点可能导致使用该PSK标识string的Zabbix组件之间出现不可预测的错误或通信中断。
例如,使用以下命令可以生成一个256位(32 字节)的PSK:
{=html}
<!-- -->
$ psktool -u psk_identity -p database.psk -s 32
为用户 'psk_identity' 生成一个随机密钥
密钥存储到 database.psk
$ cat database.psk
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
注意,上面的 "psktool" 会生成一个包含PSK身份标识及其对应PSK的数据库 file。Zabbix 仅需要PSK文件中包含PSK,因此应从文件中删除身份标识 string 和冒号(':')。
在 agent 主机 上,将 PSK 值写入文件,例如: /home/zabbix/zabbix_agentd.psk
。file 的第一行文本 string 必须包含 PSK,例如:
设置 PSK file 的访问权限 — 它必须仅对 Zabbix 用户可读。
在 agent 配置 file zabbix_agentd.conf
中编辑 TLS 参数, 例如,设置:
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 加密:
示例:
所有必填字段均以红色星号标记。
当 configuration cache 与数据库同步后,新连接将使用 PSK。检查 server 和 agent 日志文件中的错误消息。
在proxy上,将PSK值写入一个文件,例如, /home/zabbix/zabbix_proxy.psk
。file 必须在第一个位置包含 PSK 文本 string,例如:
设置 PSK file 的访问权限 - 该权限必须仅限 Zabbix 用户可读。
编辑 proxy 配置中的 TLS 参数 file zabbix_proxy.conf
,以用于 示例,设置:
proxy 将使用 PSK 连接到服务器。PSK 身份标识将是 "PSK 002"
(为尽量减少停机时间,请参见如何在 连接加密管理 中更改连接类型)。
在Zabbix前端为此proxy配置PSK。转到 管理→Proxies,选择proxy,进入“加密”选项卡。在 “proxy”的连接。将 PSK
粘贴到“PSK identity”字段中 PSK 002 e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9 “PSK”字段。点击“Update”。
重启 proxy。它将开始使用基于 PSK 的加密连接 服务器。检查服务器和proxy日志文件中的错误消息。
对于被动式 proxy,其操作流程也非常相似。唯一的区别是 - 在 proxy 配置 file 中设置 TLSAccept=psk
并设置“连接到 将proxy设置为PSK
。