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 值都有大小限制,在某些情况下,密码库的限制可能更低:

Component PSK identity max size PSK value min size PSK value max size
Zabbix 128 UTF-8 characters 128-bit (16-byte PSK, entered as 32 hexadecimal digits) 2048-bit (256-byte PSK, entered as 512 hexadecimal digits)
GnuTLS 128 bytes (may include UTF-8 characters) - 2048-bit (256-byte PSK, entered as 512 hexadecimal digits)
OpenSSL 1.0.x, 1.1.0 127 bytes (may include UTF-8 characters) - 2048-bit (256-byte PSK, entered as 512 hexadecimal digits)
OpenSSL 1.1.1 127 bytes (may include UTF-8 characters) - 512-bit (64-byte PSK, entered as 128 hexadecimal digits)
OpenSSL 1.1.1a and later 127 bytes (may include UTF-8 characters) - 2048-bit (256-byte PSK, entered as 512 hexadecimal digits)

Zabbix 前端 允许配置最长 128 个字符的 PSK 标识字符串,以及 2048 位长度的 PSK,不受所使用的密码库影响。
如果某些 Zabbix 组件支持的限制更低,则用户有责任为这些组件配置允许长度内的 PSK 标识和 PSK 值。
超过长度限制会导致 Zabbix 组件之间通信失败。

在 Zabbix 服务器 使用 PSK 连接 agent 之前,服务器会在数据库中(实际上是在配置缓存中)查找为该 agent 配置的 PSK 标识和 PSK 值。收到连接后,agent 会使用其配置文件中的 PSK 标识和 PSK 值。如果双方具有相同的 PSK 标识字符串和 PSK 值,连接就可能成功。

每个 PSK 标识只能对应一个值。用户有责任确保不存在两个具有相同标识字符串但值不同的 PSK。否则可能会导致不可预测的错误,或中断使用该 PSK 标识字符串的 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 和冒号(':')。

配置 server-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 将使用 PSK 连接到服务器(主动检查),并且只接受来自服务器和 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

所有必填输入字段都用红色星号标记。

当配置缓存与数据库同步后,新连接将使用 PSK。请检查服务器和 agent 日志文件中的错误信息。

配置 server - active 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 连接到 server。PSK 标识将为 "PSK 002"。

(如需尽量减少停机时间,请参阅如何在 Connection encryption management 中更改连接类型。)

在 Zabbix 前端中为该 proxy 配置 PSK。转到 Administration→Proxies,选择该 proxy,进入 "Encryption" 选项卡。在 "Connections from proxy" 中勾选 PSK。将 "PSK identity" 字段填入 "PSK 002",并将 "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" 填入 "PSK" 字段。点击 "Update"。

重启 proxy。它将开始使用基于 PSK 的加密连接连接到 server。检查 server 和 proxy 日志文件中的错误信息。

对于 passive proxy,步骤非常相似。唯一的区别是——在 proxy 配置文件中设置 TLSAccept=psk,并在 Zabbix 前端中将 "Connections to proxy" 设置为 PSK