ZabbixエージェントとZabbixサーバー間の通信をPSKで暗号化する手順

Others,Zabbix

ZabbixエージェントとZabbixサーバーやZabbixプロキシ間の通信を暗号化するための手順です。
PSK(Pre Shared Key)を利用した暗号化手順を、WindowsとLinuxの場合に分けて確認しています。
PSKの文字列生成、ホストおよびconfファイルでの暗号化通信有効化、設定後のステータス確認、zabbix_getコマンドを利用した確認までの手順を紹介しています。

※本記事では、Pre Shared KeyをPSKとして表記しています。
※Zabbixのバージョンは、7.0LTS(7.0.17)を利用しています。
※WindowsはWindows Server 2025を利用しています。
※LinuxはRocky Linuxは、Rocky Linux release 9.5(Blue Onyx)を利用しています。
※Zabbix Agent 2で手順を確認していますが、Zabbix Agentも同様の手順でインストールできます。
※手順の確認はrootユーザーで実施しています。環境に合わせてsudoコマンド利用してください。

スポンサーリンク

Zabbixの暗号化通信の概要

Zabbixコンポーネント間の通信暗号化方法には2種類ある

Zabbixサーバー、Zabbixプロキシ、Zabbixエージェント間の通信を暗号化することができます。
暗号化方法には、PSK(Pre Shared Key)を利用する方法と、証明書を利用する方法があります。

暗号化

PSKを利用した暗号化は、生成した事前共有キーの文字列を設定するだけで通信の認証と暗号化が可能なため、簡単に設定できます。

事前共有鍵の使用

通信の認証や暗号化の強度は高くしたい場合は、証明書を利用します。
一方で、証明書を利用した場合は証明書の管理が必要となるため、運用の手間が増します。

証明書の利用

※暗号化していない場合と比較して、通信にかかわる処理の負荷が増えます。

ホストやプロキシ単位で暗号化通信の設定が可能

ホストやプロキシ単位で通信の暗号化を設定できます。
ZabbixサーバーとZabbixプロキシ間のみ暗号化し、ZabbixエージェントとZabbixプロキシ間は平文通信とする、といった一部の通信のみ暗号化する設定も可能です。
ホストやプロキシごとに暗号化方式やPSKの内容を個別に設定することもできます。

Webインタフェースとconfファイルそれぞれ暗号化設定が必要

通信を暗号化するためには、Webインタフェースとconfファイルで設定が必要です。

Webインタフェースで、ホストやプロキシの設定を開いて暗号化の有無や、暗号化方式を選択します。
アクティブチェック、パッシブチェックそれぞれを設定します。

confファイルは、暗号化方式などによって設定箇所が異なります。
Zabbixエージェントとの通信を暗号化する場合は、以下の設定が必要になります。

    • TLSConnect
      • アクティブチェック時に利用 
      • サーバーやプロキシへ接続する際の接続方式を指定
      • デフォルト値はunencrypted(暗号化なしで接続)
    • TLSAccept
      • パッシブチェック時に利用 
      • zabbix_getの場合にも利用
      • サーバーやプロキシから接続される際の接続方式を指定
      • デフォルト値はunencrypted(暗号化なしで接続)
    • TLSPSKIdentity
      • PSKアイデンティティを記載
      • ZabbixがPSK管理するための名前
      • 暗号化されずに通信される
    • TLSPSKFile
      • PSKを記載したファイルのパスを指定

※Zabbixプロキシの場合は、アクティブプロキシかパッシブプロキシかどちらか1つになります。

PSKのサイズや利用できる文字列

PSKで設定できる文字数には制限があります。

事前共有鍵の使用

    • PSKアイデンティティ
      • 128文字(UTF-8)
    • PSK
      • 最小 : 16進数32桁(128-bit )
      • 最大 : 16進数512桁( 2048-bit)

WindowsでZabbixエージェントとの通信をPSKで暗号化するための手順

公式サイトの手順を参考に、設定を進めています。

事前共有鍵の使用

PSKとして利用する文字列を生成

PSKとして使用する文字列を生成します。

PSKとして利用する文字列を生成
PS C:\> -join (1..64 | ForEach-Object { “0123456789abcdef"[(Get-Random -Maximum 16)] }) | Out-File “C:\Program Files\Zabbix Agent 2\zabbix_agent2.psk" -Encoding ascii
PS C:\> Get-Content “C:\Program Files\Zabbix Agent 2\zabbix_agent2.psk"
08b308b946b4d916513e03e66f11c9bf5aa498ba5add7bbf77693cb43b17887b

※1つの発行例です。
※PSKファイルを、Zabbixエージェントと同じディレクトリに配置しています。

zabbix_agent2.confで暗号化通信を有効化

テキストエディタなどでzabbix_agent2.confを編集します。
今回は、パッシブチェックおよびアクティブチェックの両方で通信を暗号化しています。
PSKアイデンティティ名はPSK001としています。

※標準では、C:\Program Files\Zabbix Agent 2\配下にzabbix_agent2.confが作成されています。

zabbix_agent2.confを編集
 
# TLSConnect(アクセスチェックの暗号化方式)を設定
353 ####### TLS-RELATED PARAMETERS #######
354
355 ### Option: TLSConnect
364 # TLSConnect=unencrypted
365
366 TLSConnect=psk

# TLSAccept(パッシブチェックの暗号化方式)を設定
368 ### Option: TLSAccept

376 #Default:
377 #TLSAccept=unencrypted
378
379 TLSAccept=psk

# PSKアイデンティティ名を設定
428 ### Option: TLSPSKIdentity

432 # Default:
433 # TLSPSKIdentity=
434 
435 TLSPSKIdentity=PSK001

# PSKアイデンティティのファイル配置場所を設定
437 ### Option: TLSPSKFile

440 # Default:
441 # TLSPSKFile=
442
443 TLSPSKFile=C:\Program Files\Zabbix Agent 2\zabbix_agent2.psk

※該当する編集箇所のみを抜粋しています。行番号はZabbixのバージョンや他の設定内容によって異なる場合があります。

Zabbixエージェントを再起動

Zabbixエージェントを再起動して、zabbix_agent2.confの設定内容を反映させます。

Zabbixエージェントを再起動

# zabbix_agent2.confの文法誤りをチェック
PS C:\>
zabbix_agent2 -T
Validating configuration file “C:\\Program Files\\Zabbix Agent 2\\zabbix_agent2.conf"
Validation successful

# zabbix_agentを停止

PS C:\>
zabbix_agent2 -x
zabbix_agent2 [7524]: 'Zabbix Agent 2’ stopped successfully
# zabbix_agentを起動
PS C:\> zabbix_agent2 -s
zabbix_agent2 [7264]: 'Zabbix Agent 2’ started successfully

※ZabbixエージェントへのPATHを通した状態で、コマンドを実行しています。
※WindowsのサービスメニューからZabbixエージェントのサービスを再起動することでも、設定変更内容が反映されます。

ホストの設定画面で暗号化通信を有効化

ホストの暗号化タブで設定を行います。
ホストへの接続はパッシブチェック、ホストからの接続はアクティブチェックに該当します。
今回は、両方ともPSKによる暗号化通信を設定しています。

ホストで暗号化設定

この時点では、ホスト設定でエージェント暗号化を有効にしてないため、エージェントの状態はエラーとなります。

エージェントのステータスがエラーになった状態(Zabbixエージェントの暗号化通信設定手順)

ホスト設定の暗号化タブで設定を行います。
デフォルトでは暗号なしが選択されているので、PSKを選択します。
PSKアイデンティティ名と、PSKの値を入力し更新します。

ホスト設定画面の暗号化タブの表示例(Zabbixエージェントの暗号化通信設定手順)
PSKを有効化して設定した場合の例(Zabbixエージェントの暗号化通信設定手順)

更新後しばらくすると、エージェントの状態が緑色に戻ります。

※エージェント暗号化の表示は、右側がホストへの接続(パッシブチェック)、左側がホストからの接続(アクティブチェック)の状態を表しています。

PSKを有効化した後のエージェントの状態とエージェント暗号化の表示例(Zabbixエージェントの暗号化通信設定手順)

エージェント暗号化の状態の詳細については、公式サイトの記載を確認してください。接続の暗号化管理に記載があります。

暗号化

zabbix_getコマンドで確認

zabbix_getコマンドで通信の暗号化設定の状態を確認します。

※zabbix_getコマンドで確認できるのは、パッシブチェックの状態のみです。

Zabbix Agentのコマンドを確認

# zabbix_agent2.confの文法誤りをチェック
PS C:\>
zabbix_get -s 127.0.0.1 -k “system.sw.os" –tls-connect=psk –tls-psk-identity="PSK001″ `
–tls-psk-file="C:\\Program Files\\Zabbix Agent 2\\zabbix_agent2.psk"
Windows Server 2025 Datacenter Azure Edition

※ZabbixエージェントへのPATHを通した状態で、コマンドを実行しています。

—広告—

LinuxでZabbixエージェントとの通信をPSKで暗号化するための手順

公式サイトの手順を参考に、設定を進めています。

事前共有鍵の使用

PSKとして利用する文字列を生成

PSKとして使用する文字列を生成します。
生成したPSKファイルの権限設定も行います。

※今回は、OpenSSLのコマンドを利用して生成しています。

PSKとして利用する文字列を生成

[root@vm-02 ~]# openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk
[root@vm-02 ~]# chown zabbix:zabbix /etc/zabbix/zabbix_agentd.psk
[root@vm-02 ~]# chmod 600 /etc/zabbix/zabbix_agentd.psk
[root@vm-02 ~]# cat /etc/zabbix/zabbix_agentd.psk
5a34707067e022775aa5fb5d65c52a73e7d85198d14b7a2ea007772f9dd080ff

zabbix_agent2.confで暗号化通信を有効化

zabbix_agent2.confを編集して暗号化通信を有効化します。
今回は、パッシブチェックおよびアクティブチェックの両方で通信を暗号化しています。
PSKアイデンティティ名はPSK002としています。

※今回の環境では、/etc/zabbix/配下にzabbix_agent2.confが作成されています。

zabbix_agent2.confを設定
[root@vm-02 ~]# vi /etc/zabbix/zabbix_agent2.conf
 

# TLSConnect(アクセスチェックの暗号化方式)を設定
359 ####### TLS-RELATED PARAMETERS #######

360
361 ### Option: TLSConnect
370 # TLSConnect=unencrypted
371
372 TLSConnect=psk

# TLSAccept(パッシブチェックの暗号化方式)を設定
374 ### Option: TLSAccept

382 #Default:
383 #TLSAccept=unencrypted
384
385 TLSAccept=psk

# PSKアイデンティティ名を設定
430 ### Option: TLSPSKIdentity

434 # Default:
435 # TLSPSKIdentity=
436
437 TLSPSKIdentity=PSK002
438

# PSKアイデンティティのファイル配置場所を設定
439 ### Option: TLSPSKFile

443 # Default:
444 # TLSPSKFile=
445
446 TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

ホストの設定画面で暗号化通信を有効化

ホストの暗号化タブで設定を行います。
ホストへの接続はパッシブチェック、ホストからの接続はアクティブチェックに該当します。
今回は、両方ともPSKによる暗号化通信を設定しています。

ホストの設定画面で暗号化通信の設定
ホスト設定の暗号化タブで設定を行います。
デフォルトでは暗号なしが選択されているので、PSKを選択します。
PSKアイデンティティ名と、PSKの値を入力し更新します。
ホスト設定画面の暗号化タブの表示例(Zabbixエージェントの暗号化通信設定手順)
PSKを有効化して設定した場合の例(Zabbixエージェントの暗号化通信設定手順)

エージェントの状態やエージェント暗号化の表示を確認

エージェントの状態とエージェント暗号化の表示を確認します。
エージェント暗号化の表示は、右側がホストへの接続(パッシブチェック)、左側がホストからの接続(アクティブチェック)の状態を表しています。

暗号化

ステータスを確認
エージェント暗号化でPSKが選択されていることが確認できます。
エージェントの状態を確認します。
アクティブチェック、パッシブチェックともに利用可能になっていることが確認できます。
PSKを有効化した後のエージェントの状態とエージェント暗号化の表示例(Zabbixエージェントの暗号化通信設定手順)

zabbix_getコマンドで確認

zabbix_getコマンドで通信の暗号化設定の状態を確認します。
ローカルホストからアクセスし確認するため、zabbix_agent2.confのServer設定で127.0.0.1からのアクセスが許可されていない場合は、エラーが表示されます。

※zabbix_getコマンドで確認できるのは、パッシブチェックの状態のみです。

zabbix_getコマンドで確認

# zabbix_getコマンドで確認した例
[root@vm-02 ~]#
zabbix_get -s 127.0.0.1 -k “vm.memory.size[available]" –tls-connect=psk –tls-psk-identity="PSK002″ –tls-psk-file=/etc/zabbix/zabbix_agentd.psk
7510781952

# Serverの設定で許可されていない場合のエラーの例
[root@vm-02 ~]#
zabbix_get -s 127.0.0.1 -k “system.cpu.load[all,avg1]" –tls-connect=psk –tls-psk-identity="PSK001″ –tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get [39519]: Get value error: TCP successful, cannot establish TLS to [[127.0.0.1]:10050]: SSL_connect() set result code to SSL_ERROR_SSL: file ssl/record/rec_layer_s3.c line 689 func : error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert “decode error"

※zabbix_getコマンドをインストールした状態で確認しています。

設定ミスにより利用不可となった場合の例

ZabbixサーバーとZabbix Agent間のTLS(PSK)通信の確立に失敗している場合は、ステータスが利用不可として表示されます。

    • 主な確認ポイント
      • PSKの値が一致しているか
      • PSKアイデンティティ名が一致しているか?
      • PSKファイルの読み込み権限やパスが正しいか?
エラーメッセージの表示例
設定が間違っている場合は、ステータスが利用不可となります。 エージェントの状態が利用不可となった場合の表示例(Zabbixエージェントの暗号化通信設定手順)

【エラーメッセージ例】
Get value from agent failed: TCP successful, cannot establish TLS to [[IPアドレス]:10050]: SSL_connect() set result code to SSL_ERROR_SSL: file ssl/record/rec_layer_s3.c line 696 func : error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert “decode error"

※エラー例は、PSKファイルのパスを間違っていた場合です。

—広告—

最後に

今回は、ZabbixエージェントとZabbixサーバーやZabbixプロキシ間の通信を暗号化する手順について確認しました。
PSK(Pre Shared Key)を利用した暗号化の設定手順について、PSKの文字列生成、Webインタフェースおよびconfファイルでの暗号化設定内容、設定後のステータス確認、zabbix_getコマンドを利用したテストまでを確認しました。
簡単に設定できて、とても便利だと感じました。

引き続き、いろいろ試してみたいと思います。

Zabbixエージェントのインストール手順については、こちらで確認しています。

Zabbixでホストを追加登録する場合の手順については、こちらで紹介しています。

Zabbixサーバーの構築手順については、こちらで紹介しています。

ZabbixサーバーのHAクラスター構成手順については、こちらで紹介しています。

Zabbix プロキシの構築手順については、こちらで紹介しています。
Zabbix プロキシグループの設定やHA構成の手順も確認しています。

Zabbixのアクションのメール送信でSendGridを使う方法は、こちらで紹介しています。

Zabbixを利用したAzureのリソース監視設定方法ついては、こちらで紹介しています。

スポンサーリンク