2 使用预共享秘钥

概述

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

  • 非秘密 PSK 标识字符串,
  • 秘密 PSK 字符串值。

PSK 标识字符串是非空 UTF-8 字符串。例如,”PSK ID 001 Zabbix agentd”。它是一个唯一的名称,Zabbix组件通过该名称引用此特定PSK。不要将敏感信息放在 PSK 标识字符串中 - 它是通过未加密的网络传输的。

PSK 值是一个难以猜测的十六进制数字字符串,例如, “e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”。

尺寸限制

Zabbix中的PSK标识和值有大小限制,在某些情况下,加密库可以具有下限:

组件PSK标识最大尺寸PSK值最小尺寸PSK值最大尺寸
Zabbix128个UTF-8字符128位(16字节PSK,输入为32个十六进制数字)2048位(256字节PSK,输入为512个十六进制数字)
GnuTLS128字节(可能包括UTF-8字符)-2048位(256字节PSK,输入为512个十六进制数字)
OpenSSL 1.0.x, 1.1.0127 字节(可能包括 UTF-8 字符)-2048 位(256 字节 PSK,输入为 512 个十六进制数字)
OpenSSL 1.1.1127 字节(可能包括 UTF-8 字符)-512 位(64 字节 PSK,输入为 128 个十六进制数字)
OpenSSL 1.1.1a 及更高版本127 字节(可能包括 UTF-8 字符)-2048 位(256 字节 PSK,输入为 512 个十六进制数字)

Zabbix 前端允许配置最多128 个字符长的 PSK 标识字符串和 2048 位长的 PSK,而不考虑使用哪种加密库。
如果某些Zabbix组件支持下限,则用户有责任为这些组件配置具有允许长度的PSK标识和值。
超过长度限制会导致Zabbix组件之间的通信故障。

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

用户有责任确保没有两个具有相同标识字符串但值不同的PSK。 否则,使用带有此PSK标识字符串的PSK的Zabbix组件之间的通信可能会出现不可预测的中断。

生成 PSK

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

  • 对于OpenSSL:
  1. $ openssl rand -hex 32
  2. 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,因此应从文件中删除标识字符串和冒号 (’:’)。

为服务器-代理通信配置 PSK(示例)

在代理主机上,将 PSK 值写入文件,例如,/home/zabbix/zabbix_agentd.psk。该文件必须在第一个文本字符串中包含 PSK,例如:

  1. 1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

设置PSK文件的访问权限 - 它必须只能由Zabbix用户读取。

在代理配置文件 zabbix_agentd.conf中编辑TLS参数,例如,设置:

  1. TLSConnect=psk
  2. TLSAccept=psk
  3. TLSPSKFile=/home/zabbix/zabbix_agentd.psk
  4. TLSPSKIdentity=PSK 001

代理将连接到服务器(活动检查)并只接受来自zabbix_get 使用PSK的服务器连接。 PSK 标识将是 “PSK 001”。

重新启动代理。现在,您可以使用 zabbix_get测试连接,例如:

  1. $ zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk \
  2. --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk

(为了最大限度地减少停机时间,请参阅如何在 连接加密管理)中更改连接类型

在 Zabbix 前端中为此代理配置 PSK 加密:

  • 转到: 配置→ 主机
  • 选择主机,然后单击 加密 选项卡

例如:

psk_config.png

所有必填字段都标有红色星号。

当配置缓存与数据库同步时,新连接将使用 PSK。检查服务器和代理日志文件中是否有错误消息。

为服务器配置 PSK - 活动代理通信(示例)

在代理上,将 PSK 值写入文件,例如, /home/zabbix/zabbix_proxy.psk。该文件必须在第一个文本字符串中包含 PSK,例如:

  1. e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

设置PSK文件的访问权限 - 它必须只能由Zabbix用户读取。

在代理配置文件 zabbix_proxy.conf中编辑TLS参数, 例如,设置:

  1. TLSConnect=psk
  2. TLSPSKFile=/home/zabbix/zabbix_proxy.psk
  3. TLSPSKIdentity=PSK 002

代理将使用 PSK 连接到服务器。PSK 标识将是 “PSK 002”。

(为最大限度地减少停机时间,请参阅 连接加密管理)。

在 Zabbix 前端中为此代理配置 PSK。 转到管理→代理, 选择代理, 转到 “加密” 选项卡。 在”来自代理的连接” 中,标记PSK。将”PSK 002”粘贴到”PSK 标识”字段中,将”e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9” 粘贴到”PSK” 字段。 点击 “更新”。

重新启动代理。它将开始使用基于 PSK 的加密连接到服务器。检查服务器和代理日志文件中是否有错误消息。

对于被动代理,该过程非常相似。唯一的区别是 - 在代理配置文件中设置 TLSAccept=psk,并将Zabbix前端中的 “连接到 代理” 设置为 PSK