You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

15 暗号化

概要

Zabbixは、暗号化ライブラリに応じて、トランスポート・レイヤー・セキュリティ(TLS)プロトコルv1.2および1.3を使用したZabbixコンポーネント間の暗号化通信をサポートしています。証明書ベースおよび事前共有鍵ベースの暗号化がサポートされています。

暗号化は以下の接続で設定できます:

  • Zabbixサーバー、Zabbixプロキシ、Zabbixエージェント、Zabbix Webサービス、zabbix_senderおよびzabbix_getユーティリティ間
  • Zabbixフロントエンドおよびサーバー/プロキシからZabbixデータベースへの接続
  • ZabbixフロントエンドとZabbixサーバー間

暗号化はオプションであり、個々のコンポーネントごとに設定できます:

  • 一部のプロキシやエージェントは、サーバーとの証明書ベースの暗号化を使用するように設定でき、他のものは事前共有鍵ベースの暗号化を使用し、さらに他のものは(従来通り)暗号化されていない通信を継続できます。
  • サーバー(プロキシ)は、異なるホストに対して異なる暗号化設定を使用できます。

Zabbixデーモンプログラムは、暗号化された接続と暗号化されていない接続の両方に対して1つのリスニングポートを使用します。暗号化を追加しても、ファイアウォールで新しいポートを開く必要はありません。

制限事項

  • 秘密鍵は、起動時にZabbixコンポーネントが読み取れるファイルに平文で保存されます。
  • 事前共有鍵はZabbixフロントエンドで入力され、Zabbixデータベースに平文で保存されます。
  • 組み込みの暗号化は、Zabbixフロントエンドを実行しているWebサーバーとユーザーのWebブラウザー間の通信を保護しません。
  • 現在、各暗号化接続は完全なTLSハンドシェイクで開始され、セッションキャッシュやチケットは実装されていません。
  • 暗号化を追加すると、ネットワーク遅延に応じてアイテムチェックやアクションの時間が増加します:
    • 例えば、パケット遅延が100msの場合、TCP接続を開いて暗号化されていないリクエストを送信するのに約200msかかります。暗号化を使用すると、TLS接続の確立に約1000msが追加されます。
    • タイムアウトを増やす必要がある場合があります。そうしないと、エージェントでリモートスクリプトを実行する一部のアイテムやアクションは、暗号化されていない接続では動作しますが、暗号化された接続ではタイムアウトで失敗する可能性があります。
  • ネットワークディスカバリでは暗号化はサポートされていません。ネットワークディスカバリによって実行されるZabbixエージェントチェックは暗号化されず、Zabbixエージェントが暗号化されていない接続を拒否するように設定されている場合、そのようなチェックは成功しません。

暗号化サポート付きでZabbixをコンパイルする

暗号化をサポートするには、Zabbixをサポートされているいずれかの暗号ライブラリでコンパイルおよびリンクする必要があります。

  • GnuTLS - バージョン3.1.18以降
  • OpenSSL - バージョン1.0.1、1.0.2、1.1.0、1.1.1、3.0.x
  • LibreSSL - バージョン2.7.4、2.8.2でテスト済み:
    • LibreSSL 2.6.xはサポートされていません
    • LibreSSLはOpenSSLの互換代替としてサポートされています。 新しいtls_*()LibreSSL固有のAPI関数は使用されません。 LibreSSLでコンパイルされたZabbixコンポーネントはPSKを使用できず、証明書のみが使用可能です。

ZabbixフロントエンドのSSL設定については、ベストプラクティスを参照してください。

ライブラリは、"configure"スクリプトにそれぞれのオプションを指定して選択します。

  • --with-gnutls[=DIR]
  • --with-openssl[=DIR](LibreSSLにも使用)

例えば、OpenSSLでサーバーとエージェントのソースを設定するには、次のようにします。

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl

異なるZabbixコンポーネントは、異なる暗号ライブラリでコンパイルできます(例:サーバーはOpenSSL、エージェントはGnuTLS)。

事前共有鍵(PSK)を使用する予定の場合は、PSKを使用するZabbixコンポーネントでGnuTLSまたはOpenSSL 1.1.0(またはそれ以降)のライブラリを使用することを検討してください。GnuTLSおよびOpenSSL 1.1.0ライブラリは、Perfect Forward Secrecyを備えたPSK暗号スイートをサポートしています。OpenSSLライブラリの古いバージョン(1.0.1、1.0.2c)もPSKをサポートしていますが、利用可能なPSK暗号スイートはPerfect Forward Secrecyを提供しません。

接続の暗号化管理

Zabbixの接続では以下を使用できます:

Zabbixコンポーネント間の暗号化を指定するために使用される重要なパラメータが2つあります:

  • TLSConnect - 発信接続にどの暗号化を使用するかを指定します(暗号化なし、PSKまたは証明書)
  • TLSAccept - 着信接続に許可される接続タイプを指定します(暗号化なし、PSKまたは証明書)。1つ以上の値を指定できます。

TLSConnectは、Zabbixプロキシの設定ファイル(アクティブモードではサーバーへの接続のみを指定)およびZabbixエージェント(アクティブチェック用)で使用されます。Zabbixフロントエンドでは、TLSConnectに相当するものがデータ収集 → ホスト → <あるホスト> → 暗号化タブのホストへの接続フィールド、および管理 → プロキシ → <あるプロキシ> → 暗号化タブのプロキシへの接続フィールドです。接続のために設定された暗号化タイプで失敗した場合、他の暗号化タイプは試行されません。

TLSAcceptは、Zabbixプロキシの設定ファイル(パッシブモードではサーバーからの接続のみを指定)およびZabbixエージェント(パッシブチェック用)で使用されます。Zabbixフロントエンドでは、TLSAcceptに相当するものがデータ収集 → ホスト → <あるホスト> → 暗号化タブのホストからの接続フィールド、および管理 → プロキシ → <あるプロキシ> → 暗号化タブのプロキシからの接続フィールドです。

通常、着信接続には1種類の暗号化のみを設定します。しかし、例えば暗号化なしから証明書ベースに切り替えるなど、ダウンタイムを最小限に抑え、ロールバックの可能性を残したまま暗号化タイプを切り替えたい場合があります。そのためには:

  • エージェントの設定ファイルでTLSAccept=unencrypted,certを設定し、Zabbixエージェントを再起動します
  • 証明書を使用してzabbix_getでエージェントへの接続をテストします。正常に動作すれば、Zabbixフロントエンドのデータ収集 → ホスト → <あるホスト> → 暗号化タブで、そのエージェントの暗号化をホストへの接続を「証明書」に設定して再設定できます。
  • サーバーの設定キャッシュが更新され(ホストがプロキシで監視されている場合はプロキシの設定も更新される)、そのエージェントへの接続が暗号化されます
  • すべてが期待通りに動作すれば、エージェントの設定ファイルでTLSAccept=certを設定し、Zabbixエージェントを再起動できます。これでエージェントは証明書ベースの暗号化接続のみを受け付けるようになります。暗号化なしおよびPSKベースの接続は拒否されます。

同様の方法でサーバーやプロキシでも動作します。Zabbixフロントエンドのホスト設定でホストからの接続が「証明書」に設定されている場合、エージェント(アクティブチェック)およびzabbix_sender(トラッパーアイテム)からの証明書ベースの暗号化接続のみが受け付けられます。

ほとんどの場合、着信および発信接続の両方で同じ暗号化タイプ、または暗号化なしを設定します。しかし、技術的には非対称に設定することも可能です。例えば、着信は証明書ベース、発信はPSKベースの暗号化などです。

各ホストの暗号化設定は、Zabbixフロントエンドのデータ収集 → ホストエージェント暗号化列に表示されます。例:

ホストへの接続 ホストからの許可された接続 ホストからの拒否された接続
none_none.png 暗号化なし 暗号化なし 暗号化、証明書およびPSKベースの暗号化
cert_cert.png 暗号化、証明書ベース 暗号化、証明書ベース 暗号化なしおよびPSKベースの暗号化
psk_psk.png 暗号化、PSKベース 暗号化、PSKベース 暗号化なしおよび証明書ベースの暗号化
psk_none_psk.png 暗号化、PSKベース 暗号化なしおよびPSKベースの暗号化 証明書ベースの暗号化
cert_all.png 暗号化、証明書ベース 暗号化なし、PSKまたは証明書ベースの暗号化 -

接続はデフォルトで暗号化されていません。暗号化は各ホストおよびプロキシごとに個別に設定する必要があります。

zabbix_getとzabbix_senderの暗号化機能

zabbix_getzabbix_sender manpages のマニュアルを参照してください。

暗号スイート

暗号スイートはデフォルトでZabbixの起動時に内部的に設定されます。

また、GnuTLSおよびOpenSSLではユーザーが設定した暗号スイートもサポートされています。ユーザーは 設定で セキュリティポリシーに従って暗号スイートを設定できます。この機能の使用は任意です(組み込みの デフォルト暗号スイートも引き続き動作します)。

デフォルト設定でコンパイルされた暗号ライブラリの場合、Zabbixの組み込み ルールは通常、以下の暗号スイート(優先度の高い順)となります。

ライブラリ 証明書暗号スイート PSK暗号スイート
GnuTLS 3.1.18 TLS_ECDHE_RSA_AES_128_GCM_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA1
TLS_RSA_AES_128_GCM_SHA256
TLS_RSA_AES_128_CBC_SHA256
TLS_RSA_AES_128_CBC_SHA1
TLS_ECDHE_PSK_AES_128_CBC_SHA256
TLS_ECDHE_PSK_AES_128_CBC_SHA1
TLS_PSK_AES_128_GCM_SHA256
TLS_PSK_AES_128_CBC_SHA256
TLS_PSK_AES_128_CBC_SHA1
OpenSSL 1.0.2c ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA256
AES128-SHA
PSK-AES128-CBC-SHA
OpenSSL 1.1.0 ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA
OpenSSL 1.1.1d TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA

ユーザー設定の暗号スイート

組み込みの暗号スイート選択基準は、ユーザー設定の暗号スイートで上書きできます。

ユーザー設定の暗号スイートは、TLS暗号スイート、そのセキュリティおよびミスの影響を理解し、TLSのトラブルシューティングに慣れている上級ユーザー向けの機能です。

組み込みの暗号スイート選択基準は、以下のパラメータを使用して上書きできます。

上書き範囲 パラメータ 説明
証明書用の暗号スイート選択 TLSCipherCert13 TLS 1.3プロトコル用の有効なOpenSSL 1.1.1 cipher strings(値はOpenSSL関数SSL_CTX_set_ciphersuites()に渡されます)。 TLS 1.3用の証明書ベースの暗号スイート選択基準

OpenSSL 1.1.1以降のみ。
TLSCipherCert TLS 1.2用の有効なOpenSSL cipher stringsまたは有効なGnuTLS priority strings。値はそれぞれSSL_CTX_set_cipher_list()またはgnutls_priority_init()関数に渡されます。 TLS 1.2/1.3(GnuTLS)、TLS 1.2(OpenSSL)用の証明書ベースの暗号スイート選択基準
PSK用の暗号スイート選択 TLSCipherPSK13 TLS 1.3プロトコル用の有効なOpenSSL 1.1.1 cipher strings(値はOpenSSL関数SSL_CTX_set_ciphersuites()に渡されます)。 TLS 1.3用のPSKベースの暗号スイート選択基準

OpenSSL 1.1.1以降のみ。
TLSCipherPSK TLS 1.2用の有効なOpenSSL cipher stringsまたは有効なGnuTLS priority strings。値はそれぞれSSL_CTX_set_cipher_list()またはgnutls_priority_init()関数に渡されます。 TLS 1.2/1.3(GnuTLS)、TLS 1.2(OpenSSL)用のPSKベースの暗号スイート選択基準
証明書とPSKの両方の暗号スイートリスト TLSCipherAll13 TLS 1.3プロトコル用の有効なOpenSSL 1.1.1 cipher strings(値はOpenSSL関数SSL_CTX_set_ciphersuites()に渡されます)。 TLS 1.3用の暗号スイート選択基準

OpenSSL 1.1.1以降のみ。
TLSCipherAll TLS 1.2用の有効なOpenSSL cipher stringsまたは有効なGnuTLS priority strings。値はそれぞれSSL_CTX_set_cipher_list()またはgnutls_priority_init()関数に渡されます。 TLS 1.2/1.3(GnuTLS)、TLS 1.2(OpenSSL)用の暗号スイート選択基準

zabbix_getおよび zabbix_senderユーティリティで暗号スイート選択を上書きするには、コマンドラインパラメータを使用します。

  • --tls-cipher13
  • --tls-cipher

新しいパラメータはオプションです。パラメータが指定されていない場合は、内部のデフォルト値が使用されます。パラメータが定義されている場合は空にできません。

暗号ライブラリでTLSCipher*値の設定に失敗した場合、サーバー、プロキシ、またはエージェントは起動せず、エラーが記録されます。

各パラメータがいつ適用されるかを理解することが重要です。

外部接続

最も単純なケースは外部接続です:

  • 証明書を使用した外部接続の場合は、TLSCipherCert13 または TLSCipherCert を使用します
  • PSK を使用した外部接続の場合は、TLSCipherPSK13 または TLSCipherPSK を使用します
  • zabbix_get および zabbix_sender ユーティリティの場合、コマンドラインパラメータ --tls-cipher13 または --tls-cipher を使用できます(暗号化は --tls-connect パラメータで明確に指定されます)
着信接続

着信接続の場合は、ルールがコンポーネントや設定に固有であるため、少し複雑です。

Zabbix エージェントの場合:

エージェント接続設定 暗号スイート設定
TLSConnect=cert TLSCipherCert, TLSCipherCert13
TLSConnect=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert TLSCipherCert, TLSCipherCert13
TLSAccept=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert,psk TLSCipherAll, TLSCipherAll13

Zabbix サーバーおよびプロキシの場合:

接続設定 暗号スイート設定
PSKを使用した発信接続 TLSCipherPSK, TLSCipherPSK13
証明書を使用した着信接続 TLSCipherAll, TLSCipherAll13
サーバーに証明書がない場合のPSKを使用した着信接続 TLSCipherPSK, TLSCipherPSK13
サーバーに証明書がある場合のPSKを使用した着信接続 TLSCipherAll, TLSCipherAll13

上記2つの表には、いくつかのパターンが見られます:

  • TLSCipherAllおよびTLSCipherAll13は、証明書ベースおよびPSKベースの暗号スイートの組み合わせリストが使用される場合のみ指定できます。これが発生するのは2つの場合です: 証明書が設定されたサーバー(暗号ライブラリがPSKをサポートしている場合、PSK暗号スイートは常にサーバーやプロキシで設定されます)、証明書ベースおよびPSKベースの着信接続の両方を受け入れるように設定されたエージェント
  • その他の場合は、TLSCipherCert*および/またはTLSCipherPSK*で十分です

以下の表は、TLSCipher* の組み込みデフォルト値を示しています。これらは独自のカスタム値を設定する際の良い出発点となります。

パラメータ GnuTLS 3.6.12
TLSCipherCert NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLSCipherPSK NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
TLSCipherAll NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
パラメータ OpenSSL 1.1.1d 1
TLSCipherCert13
TLSCipherCert EECDH+aRSA+AES128:RSA+aRSA+AES128
TLSCipherPSK13 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
TLSCipherPSK kECDHEPSK+AES128:kPSK+AES128
TLSCipherAll13
TLSCipherAll EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128

1 デフォルト値は、古いOpenSSLバージョン(1.0.1、1.0.2、1.1.0)、LibreSSL、およびOpenSSLがPSKサポートなしでコンパイルされている場合は異なります。

ユーザー設定の暗号スイートの例

以下に、ユーザー設定の暗号スイートの例を示します:

暗号文字列のテストとPFS暗号スイートのみの許可

どの暗号スイートが選択されたかを確認するには、設定ファイルで 'DebugLevel=4'を設定するか、zabbix_senderに-vvオプションを使用する必要があります。

目的の暗号スイートを得るには、TLSCipher*パラメータでいくつか試行錯誤が必要な場合があります。 TLSCipher*パラメータを調整するためだけにZabbixサーバー、プロキシ、エージェントを何度も再起動するのは不便です。 より便利な方法は、zabbix_senderやopensslコマンドを使用することです。両方の方法を紹介します。

1. zabbix_senderを使用する場合。

例えば/home/zabbix/test.confというテスト用設定ファイルを作成します。 zabbix_agentd.confファイルの構文で記述します:

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agent.psk

この例では有効なCA証明書とエージェント証明書、PSKが必要です。 証明書やPSKファイルのパスや名前は環境に合わせて調整してください。

証明書を使用せず、PSKのみを使用する場合は、より簡単なテストファイルを作成できます:

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=psk
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agentd.psk

選択された暗号スイートは、zabbix_senderを実行することで確認できます(OpenSSL 1.1.dでコンパイルされた例):

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA

ここでデフォルトで選択されている暗号スイートが確認できます。 これらのデフォルト値は、古いOpenSSLバージョン(1.0.1以降)で動作するZabbixエージェントとの相互運用性を確保するために選択されています。

新しいシステムでは、PFS(Perfect Forward Secrecy)付きの暗号スイートのみを許可するなど、セキュリティを強化することができます。 TLSCipher*パラメータを使用してPFS付きの暗号スイートのみを許可してみましょう。

PSKを使用する場合、OpenSSL 1.0.1および1.0.2を使用するシステムとの相互運用性は失われます。 証明書ベースの暗号化は動作するはずです。

test.conf設定ファイルに2行追加します:

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128

そして再度テストします:

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites            
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA        
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA        
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA        

"certificate ciphersuites"と"PSK ciphersuites"のリストが変わっていることがわかります。 以前より短くなり、期待通りTLS 1.3の暗号スイートとTLS 1.2のECDHE-*暗号スイートのみが含まれています。

2. TLSCipherAllおよびTLSCipherAll13はzabbix_senderではテストできません。 これらは上記の例で表示される"certificate and PSK ciphersuites"の値には影響しません。 TLSCipherAllおよびTLSCipherAll13を調整するには、エージェント、プロキシ、サーバーで試行する必要があります。

したがって、PFS暗号スイートのみを許可するには、最大3つのパラメータを

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128
         TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128

zabbix_agentd.conf、zabbix_proxy.conf、zabbix_server_confに追加する必要があります。 それぞれに証明書が設定されており、エージェントにもPSKがある場合です。

Zabbix環境がPSKベースの暗号化のみを使用し、証明書を使用しない場合は、1つだけで十分です:

  TLSCipherPSK=kECDHEPSK+AES128

仕組みが理解できたので、Zabbix以外でもopensslコマンドで暗号スイートの選択をテストできます。 3つのTLSCipher*パラメータ値すべてをテストしてみましょう:

  $ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
         $ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         $ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         

より詳細な出力が必要な場合は、openssl ciphers-Vオプションを付けて使用することもできます:

  $ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
                   0x13,0x02 - TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
                   0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
                   0x13,0x01 - TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
                   0xC0,0x13 - ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
                   0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA256
                   0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA1

同様に、GnuTLSの優先度文字列もテストできます:

  $ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         TLS_ECDHE_RSA_AES_128_GCM_SHA256                        0xc0, 0x2f      TLS1.2
         TLS_ECDHE_RSA_AES_128_CBC_SHA256                        0xc0, 0x27      TLS1.2
         
         Protocols: VERS-TLS1.2
         Ciphers: AES-128-GCM, AES-128-CBC
         MACs: AEAD, SHA256
         Key Exchange Algorithms: ECDHE-RSA
         Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
         PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
AES128からAES256への切り替え

Zabbixはデータ用のビルトインデフォルトとしてAES128を使用しています。証明書を使用していて、OpenSSL 1.1.1 の
AES256 に切り替えたい場合を考えてみましょう。

これは、zabbix_server.confに各パラメータを追加することで実現可能です:

  TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/server.crt
         TLSKeyFile=/home/zabbix/server.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
         TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
         TLSCipherPSK=kECDHEPSK+AES256:-SHA1
         TLSCipherAll13=TLS_AES_256_GCM_SHA384
         TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384

証明書関連の暗号スイートのみが使用されますが、より広い相互運用性のために、安全性の低い暗号を含むデフォルト値を 避けるために、 TLSCipherPSK* パラメータも定義されています。PSK暗号スイートは、server / proxy で完全に無効に することはできません。

zabbix_agentd.conf でも:

  TLSConnect=cert
         TLSAccept=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384