2 使用预共享秘钥
概述
Zabbix中的每个预共享密钥(PSK)实际上是一对:
- 非秘密 PSK 标识字符串,
- 秘密 PSK 字符串值。
PSK 标识字符串是非空 UTF-8 字符串。例如,”PSK ID 001 Zabbix agentd”。它是一个唯一的名称,Zabbix组件通过该名称引用此特定PSK。不要将敏感信息放在 PSK 标识字符串中 - 它是通过未加密的网络传输的。
PSK 值是一个难以猜测的十六进制数字字符串,例如, “e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”。
PSK大小(长度)限制
Zabbix中的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标识和值
超过长度限制会导致Zabbix组件之间的通信故障。
在Zabbix server使用PSK连接到agent之前,server会在数据库(实际上在配置缓存中)中查找为该agent配置的PSK标识和PSK值。在接收到连接时,agent使用其配置文件中的PSK标识和PSK值。如果双方都具有相同的PSK标识字符串和PSK值,则连接可能会成功。
每个PSK标识只能与一个值配对。用户有责任确保不存在两个具有相同标识字符串但值不同的PSK。如果不这样做,可能会导致Zabbix组件之间使用带有此PSK标识字符串的PSK时出现不可预测的错误或通信中断。
生成 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,因此应从文件中删除标识字符串和冒号 (’:’)。
为server-agent通信配置PSK (example)
在agent主机上,将PSK值写入文件,例如“/home/zabbix/zabbi_agentd.PSK”。文件的第一个文本字符串中必须包含PSK,例如:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
设置PSK文件的访问权限-它必须只能由Zabbix用户读取。
编辑agent配置文件“zabbix_agented.conf”中的TLS参数, 例如,设置:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
agent将连接到server(主动检查),并使用PSK仅接受来自server和“zabbix_get”的连接。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加密:
- Go to: Data collection → Hosts
- Select host and click on Encryption tab
示例:
所有必填输入字段都用红色星号标记。
当配置缓存与数据库同步时,新连接将使用PSK。检查server和proxy日志文件中的错误消息。
为服务器配置 PSK - 主动式Proxy 通信(示例)
在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。 转到管理→Proxy, 选择proxy, 转到 “加密” 选项卡。 在”来自proxy的连接” 中,标记PSK
。将”PSK 002”粘贴到”PSK 标识”字段中,将”e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9” 粘贴到”PSK” 字段。 点击 “更新”。
重新启动proxy。它将开始使用基于 PSK 的加密连接到服务器。检查server 和proxy 日志文件中是否有错误消息。
对于被动proxy,该过程非常相似。唯一的区别是 - 在proxy配置文件中设置 TLSAccept=psk
,并将Zabbix前端中的 “连接到 proxy” 设置为 PSK
。