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
エージェントはサーバーに接続し、PSKを使用したサーバー(アクティブチェック)とzabbix_getからの接続のみを受けつけます。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フロントエンドでこのエージェントのPSK暗号化を設定します。
- データ収集→ ホストに移動
- ホストを選択して暗号化タブをクリック
例:

すべての必須入力フィールドには赤いアスタリスクが付いています。
設定キャッシュがデータベースと同期されると、新しい接続は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 フロントエンドでこのプロキシの PSK を構成します。 [管理]→[プロキシ] に移動し、プロキシを選択して、[暗号化] タブに移動します。 "プロキシからの接続"でPSKにチェックします。 "PSKアイデンティティ"フィールドに"PSK 002"を貼り付け、
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"を"PSK"フィールドに入力して、"更新"をクリックします。
プロキシを再起動して、 サーバーへの PSK ベースの暗号化された接続の使用を開始します。 サーバーとプロキシのログファイルでエラー メッセージを確認してください。
パッシブ プロキシの場合、手順は非常に似ています。 唯一の違いは、プロキシ構成ファイルでTLSAccept=pskを設定し、Zabbix フロントエンドで"プロキシへの接続"をPSKに設定することです。