2 使用预共享密钥

概述

Zabbix 中的每个预共享密钥 (PSK) 实际上是一对:

  • 非密钥的 PSK 身份 string
  • 密钥 PSK string 值。

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组件之间出现不可预测的错误或通信中断。

生成 PSK

例如,使用以下命令可以生成一个256位(32 字节)的PSK:

  • 使用 OpenSSL
  $ openssl rand -hex 32
         af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
  • with GnuTLS:
{=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(示例)

在 agent 主机 上,将 PSK 值写入文件,例如: /home/zabbix/zabbix_agentd.psk。file 的第一行文本 string 必须包含 PSK,例如:

1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

设置 PSK file 的访问权限 — 它必须仅对 Zabbix 用户可读。

在 agent 配置 file 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_config.png

所有必填字段均以红色星号标记。

当 configuration cache 与数据库同步后,新连接将使用 PSK。检查 server 和 agent 日志文件中的错误消息。

为服务器配置PSK以进行主动proxy通信(示例)

在proxy上,将PSK值写入一个文件,例如, /home/zabbix/zabbix_proxy.psk。file 必须在第一个位置包含 PSK 文本 string,例如:

e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

设置 PSK file 的访问权限 - 该权限必须仅限 Zabbix 用户可读。

编辑 proxy 配置中的 TLS 参数 file zabbix_proxy.conf,以用于 示例,设置:

加密连接=PSK
       `TLSPSKFile`=/home/zabbix/zabbix_proxy.psk
       TLSPSKIdentity=PSK 002

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