Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

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 と値のサイズ制限があります。場合によっては、暗号化ライブラリの制限がより低くなることがあります。

コンポーネント PSK ID 最大サイズ PSK値 最小サイズ PSK値 最大サイズ
Zabbix 128 UTF-8 文字列 128-bit (16-bytes PSK, 16進数32桁) 2048-bit (256-bytes PSK, 16進数512桁)
GnuTLS 128 bytes (UTF-8 文字列を含む) - 2048-bit (256-byte PSK, 16進数512桁)
OpenSSL 1.0.x, 1.1.0 127 bytes (UTF-8 文字列を含む) - 2048-bit (256-byte PSK, 16進数512桁)
OpenSSL 1.1.1 127 bytes (UTF-8 文字列を含む) - 512-bit (64-byte PSK, 16進数128桁)
OpenSSL 1.1.1a 以降 127 bytes (UTF-8 文字列を含む) - 2048-bit (256-byte PSK, 16進数512桁)

Zabbix フロントエンドでは使用する暗号化ライブラリに関係なく、最大128文字の PSK ID 文字列と 2048 ビットの PSK を設定できます。Zabbix コンポーネントが下限をサポートしている場合、これらのコンポーネントに許可された長さで PSK ID文字列 と PSK 値を設定するのはユーザーの責任です。、Zabbix コンポーネント間で通信障害が発生します。

Zabbix サーバーが PSK を使用してエージェントに接続する前に、サーバーはそのエージェント用に構成された PSK ID と PSK 値をデータベース (実際には構成キャッシュ) で検索します。 接続を受信すると、エージェントは設定ファイルから PSK ID と PSK 値を使用します。 双方が同じ PSK ID 文字列と PSK 値を持っている場合、接続が成功します。

各 PSK ID は、1 つの値のみとペアにする必要があります。 ID 文字列が同じで値が異なる 2 つの PSK が存在しないことを確認するのは、ユーザーの責任です。 そうしないと、予測できないエラーが発生したり、この 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_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 フロントエンドでこのプロキシの PSK を構成します。 [管理]→[プロキシ] に移動し、プロキシを選択して、[暗号化] タブに移動します。 "プロキシからの接続"でPSKにチェックします。 "PSKアイデンティティ"フィールドに"PSK 002"を貼り付け、 "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"を"PSK"フィールドに入力して、"更新"をクリックします。

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

パッシブ プロキシの場合、手順は非常に似ています。 唯一の違いは、プロキシ構成ファイルでTLSAccept=pskを設定し、Zabbix フロントエンドで"プロキシへの接続"をPSKに設定することです。