2 事前共有鍵の使用

概要

Zabbix の各事前共有キー (PSK) は、次のペアです。

  • 非秘匿 PSK ID 文字列、
  • 秘匿 PSK 文字列値。

PSK ID 文字列は、空ではないUTF-8の文字列です。 たとえば"PSK ID 001 Zabbix agentd"などです。この特定の PSK が Zabbix コンポーネントによって参照される一意の名前です。暗号化されずにネットワーク経由で送信されますので、機密情報を PSK ID 文字列に含めないでください。

PSK 文字列値は推測しにくい 16 進数の文字列です。たとえば、"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"などです。

サイズ制限

Zabbix では PSK ID と値にサイズ制限があります。場合によっては、 暗号ライブラリの制限のほうがより厳しいことがあります。

Component PSK identity max size PSK value min size PSK value max size
Zabbix 128 UTF-8文字 128-bit(16バイトのPSK、32桁の16進数として入力) 2048-bit(256バイトのPSK、512桁の16進数として入力)
GnuTLS 128バイト(UTF-8文字を含む場合があります) - 2048-bit(256バイトのPSK、512桁の16進数として入力)
OpenSSL 1.0.x, 1.1.0 127バイト(UTF-8文字を含む場合があります) - 2048-bit(256バイトのPSK、512桁の16進数として入力)
OpenSSL 1.1.1 127バイト(UTF-8文字を含む場合があります) - 512-bit(64バイトのPSK、128桁の16進数として入力)
OpenSSL 1.1.1a and later 127バイト(UTF-8文字を含む場合があります) - 2048-bit(256バイトのPSK、512桁の16進数として入力)

Zabbix Webインターフェースでは、使用している暗号ライブラリに関係なく、最大128文字のPSK ID文字列と2048-bit長のPSKを設定できます。
一部のZabbixコンポーネントでより低い制限がある場合、それらのコンポーネントで許可される長さのPSK IDと値を設定する責任はユーザーにあります。
長さの制限を超えると、Zabbixコンポーネント間の通信障害が発生します。

ZabbixサーバーがPSKを使用してエージェントに接続する前に、サーバーは そのエージェント用に設定されたPSK IDとPSK値をデータベース (実際には設定キャッシュ)で参照します。接続を受信すると、エージェントは 設定ファイル内のPSK IDとPSK値を使用します。両者が同じPSK ID文字列と PSK値を持っていれば、接続は成功する可能性があります。

各PSK IDは、1つの値とのみ対応付ける必要があります。PSK ID文字列は同じでも値が異なるPSKが2つ存在しないことを保証する責任はユーザーにあります。これを怠ると、このPSK ID文字列を使用するPSKを用いたZabbixコンポーネント間の通信で、予測不能なエラーや通信の中断が発生する可能性があります。

PSK の生成

たとえば、256 ビット (32 バイト) の PSK は、次のコマンドを使用して生成できます。

  • with OpenSSL:
<!-- -->
  $ openssl rand -hex 32
  af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
  • with GnuTLS:
<!-- -->
  $ psktool -u psk_identity -p database.psk -s 32
  Generating a random key for user 'psk_identity'
  Key stored to database.psk

  $ cat database.psk 
  psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb

上記の「psktool」は、PSK ID とそれに関連付けられた PSK を含むデータベース ファイルを生成することに注意してください。 Zabbix は PSK ファイルに PSK のみを想定しているため、識別文字列とコロン (':') をファイルから削除する必要があります。

サーバー-エージェント間通信のPSK設定(例)

エージェントのホスト上で、PSK値をファイルに書き込みます。例えば、 /home/zabbix/zabbix_agentd.psk です。ファイルには、最初の 文字列としてPSKを含める必要があります。例えば、次のようになります。

1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

PSKファイルのアクセス権を設定します。Zabbixユーザーのみが読み取り可能でなければなりません。

エージェント設定ファイル zabbix_agentd.conf のTLSパラメータを編集し、 例えば次のように設定します。

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001

エージェントはサーバーに接続し(アクティブチェック)、サーバーおよび zabbix_get からの接続について、PSKを使用する接続のみを受け付けます。PSK IDは "PSK 001" になります。

エージェントを再起動します。これで、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のWebインターフェースで、このエージェントのPSK暗号化を設定します。

  • データ収集 → ホスト に移動します
  • ホストを選択し、暗号化 タブをクリックします

例:

psk\_config.png

必須の入力フィールドには、赤いアスタリスクが付いています。

設定キャッシュがデータベースと同期されると、新しい接続でPSKが使用されます。エラーメッセージについては、サーバーおよびエージェントのログファイルを確認してください。

サーバー - アクティブプロキシ間通信用のPSK設定(例)

プロキシ上で、PSK値をファイルに書き込みます。例えば、 /home/zabbix/zabbix_proxy.psk です。このファイルには、最初の テキスト文字列としてPSKを含める必要があります。例えば、次のようになります。

e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

PSKファイルのアクセス権を設定します。Zabbixユーザーのみが読み取り可能でなければなりません。

プロキシ設定ファイル zabbix_proxy.conf のTLSパラメータを編集し、 例えば次のように設定します。

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

プロキシはPSKを使用してサーバーに接続します。PSK IDは "PSK 002" になります。

(ダウンタイムを最小限に抑えるには、接続の暗号化管理 の接続タイプの変更方法を参照してください。)

Zabbix WebインターフェースでこのプロキシのPSKを設定します。 Administration→Proxies に移動し、プロキシを選択してから、"Encryption" タブを開きます。 "Connections from proxy" で PSK を選択します。"PSK identity" フィールドに "PSK 002" を貼り付け、 "PSK" フィールドに "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" を入力します。 "Update" をクリックします。

プロキシを再起動します。すると、サーバーへのPSKベースの暗号化接続の使用を開始します。 エラーメッセージがないか、サーバーおよびプロキシのログファイルを確認してください。

パッシブプロキシの場合も、手順はほぼ同じです。唯一の違いは、 プロキシ設定ファイルで TLSAccept=psk を設定し、Zabbix Webインターフェースの "Connections to proxy" を PSK に設定することです。