17. 暗号化
概要
Zabbixは、トランスポートレイヤーセキュリティ(TLS)プロトコルv.1.2、1.3 (cryptoライブラリによる)を使用した Zabbix コンポーネント間の
暗号化通信をサポートしています。証明書ベースと事前共有キーベースの暗号化がサポートされています。
暗号化は以下の接続に設定することができます:
- Zabbix server, Zabbix proxy, Zabbix agent, zabbix_sender と zabbix_get ユーティリティ間
- Zabbix データベース from Zabbix frontend and server/proxy
暗号化はオプションで、個々のコンポーネントに設定可能:
- proxy や agent の中には、server との間で証明書ベースの暗号化を使用するように設定できるものもあれば、事前共有鍵ベースの 暗号化を使用できるものもあり、また暗号化されていない通信を続けるものもあります。(以前と同様です)
- server(proxy)は、ホストごとに異なる暗号化設定を使用することができます。
Zabbixのデーモンプログラムでは、暗号化された接続と暗号化されていない接続に1つのリスニングポートを使用します。
暗号化を追加する場合、ファイアウォールに新しいポートを開く必要はありません。
制限事項
- 秘密鍵は起動時に Zabbix コンポーネントが読み込み可能なファイルにプレーンテキストで保存されます。
- 事前共有鍵は Zabbix フロントエンドで入力され、Zabbix データベースにプレーンテキストで保存されます。
- 内蔵の暗号化では、通信は保護されません。
- Zabbix フロントエンドが動作するウェブサーバとユーザのウェブブラウザ間
- Zabbix フロントエンドと Zabbix サーバ間
- 現在、暗号化された接続は完全な TLS ハンドシェイクで開かれ、セッションキャッシュとチケットは実装されていません。
- 暗号化を追加すると、ネットワーク遅延に応じてアイテムのチェックとアクションにかかる時間が増加します。
- 例えば、パケット遅延が100msの場合、TCP 接続を開き、暗号化されていないリクエストを送信するのに約200msかかります。 暗号化では、TLS 接続の確立に約1000msが追加されます。
- タイムアウトを増やす必要があるかもしれません。そうしないと、agent 上でリモートスクリプトを実行するいくつかのアイテムや アクションが、暗号化されていない接続では動作するのに、暗号化されているとタイムアウトで失敗する可能性があります。
- 暗号化は、network discoveryではサポートされていません。Zabbix agent が 暗号化されていない接続を拒否するように設定されている場合、ネットワークディスカバリーが実行するZabbix agent の チェックは成功しません。
暗号化をサポートした Zabbix のコンパイル
暗号化をサポートするために、Zabbix は以下のいずれかのライブラリとコンパイル、リンクする必要があります:
- GnuTLS - from version 3.1.18
- OpenSSL - versions 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x. Note that 3.0.x is supported since Zabbix 6.0.4.
- LibreSSL - tested with versions 2.7.4, 2.8.2:
- LibreSSL 2.6.x はサポートされていません。
- LibreSSL は OpenSSL の互換性のある代替品としてサポートされています。新しい
tls_*()LibreSSL 固有の API関数は使用されません。 LibreSSL を使用してコンパイルされた Zabbix コンポーネントは PSK を使用できず、証明書のみ使用可能です。
ライブラリの選択は、"configure "スクリプトにそれぞれのオプションを指定することで行います:
--with-gnutls[=DIR]--with-openssl[=DIR](also used for LibreSSL)
例えば、server と agent のソースを 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 のコネクションは以下を使用することができます:
- no encryption (default)
- RSA certificate-based encryption
- PSK-based encryption
Zabbix コンポーネント間の暗号化を指定するために、2つの重要なパラメータがあります:
- TLSConnect - 発信接続に使用する暗号化方式を指定します (非暗号化、PSK、または証明書)。
- TLSAccept - 着信接続で許可される接続の種類を指定します (非暗号化、PSK、または証明書)。 1つまたは複数の値を指定できます。
TLSConnectは、Zabbix proxy (アクティブモードで、server への接続のみを指定)とZabbix agent (アクティブチェック用)の
設定ファイルで使用されています。Zabbixフロントエンドでは、TLSConnectに相当するのは
Configuration → Hosts → <some host> → Encryptionタブの Connections to host フィールドと
Administration → Proxies → <some proxy> → Encryption タブの Connections to proxy フィールドになります。
接続に設定された暗号化方式が失敗した場合、他の暗号化方式は試されません。
TLSAcceptはZabbix proxy (パッシブモード、server からの接続のみ指定)と Zabbix agent (パッシブチェック用)の
設定ファイルで使用されています。Zabbixフロントエンドでは、TLSAcceptに相当するのは
Configuration → Hosts → <some host> → Encryption タブの Connections from host フィールドと
Administration → Proxies → <some proxy> → Encryption タブの Connections from proxy* フィールドになります。
通常、受信する暗号化には1種類の暗号化しか設定しません。しかし、ダウンタイムやロールバックを最小限に抑えながら、
暗号化方式を非暗号化から証明書方式に変更したい場合があります。これを実現するために:
- agent 設定ファイルに
TLSAccept=unencrypted,certを設定し、Zabbix agent を再起動する。 - zabbix_get を使用して、証明書を使用するエージェントへの接続をテストします。うまくいった場合、 Zabbix フロントエンドでその agent の暗号化を再設定することができます。 フロントエンドの Configuration → Hosts → <some host> → Encryption タブで Connections to host を "Certificate" に設定します。
- server 設定キャッシュが更新されたとき(およびホストが監視されている場合は proxy 設定が更新されたとき) proxy で監視しているホストの場合は proxy 設定も更新される) と、その agent への接続が暗号化されます。
- 期待通りに動作していれば、agent 設定ファイルに
TLSAccept=certを設定し、Zabbix agent を再起動することができます。 これで、agent は暗号化された証明書ベースの接続のみを受け入れるようになります。暗号化されていない、 PSKベースの接続は拒否されます。
同様に、server と proxy でも動作します。Zabbixフロントエンドのホスト設定でConnections from hostを "Certificate" に
設定すると、agent (アクティブチェック)とzabbix_sender(トラッパーアイテム)からは証明書ベースの暗号化接続のみが
許可されます。
ほとんどの場合、受信接続と送信接続で同じ暗号化タイプを使用するか、まったく暗号化しないように設定します。しかし、
技術的には非対称に設定することが可能です。
各ホストの暗号化設定は、Zabbixフロントエンドの Configuration → Hosts の Agent encryption 列に表示されます。 例:
| 例 | Connections to host | Allowed connections from host | Rejected connections from host |
|---|---|---|---|
![]() |
Unencrypted | Unencrypted | Encrypted, certificate and PSK-based encrypted |
![]() |
Encrypted, certificate-based | Encrypted, certificate-based | Unencrypted and PSK-based encrypted |
![]() |
Encrypted, PSK-based | Encrypted, PSK-based | Unencrypted and certificate-based encrypted |
![]() |
Encrypted, PSK-based | Unencrypted and PSK-based encrypted | Certificate-based encrypted |
![]() |
Encrypted, certificate-based | Unencrypted, PSK or certificate-based encrypted | - |
デフォルトでは、接続は暗号化されていません。暗号化は、各ホストとプロキシに個別に設定する必要があります。
zabbix_getとzabbix_senderの暗号化機能
zabbix_get と zabbix_sender manpages のマニュアルを参照してください。
暗号スイート
暗号スイートはデフォルトでは Zabbix 起動時に内部で設定され、Zabbix 4.0.19以前、4.4.7以前ではユーザが設定することは
できません。
Zabbix 4.0.19、4.4.7 から GnuTLS と OpenSSL のユーザ設定可能な暗号スイートがサポートされるようになりました。
ユーザはセキュリティポリシーに従って暗号スイートを configure することができます。
この機能の使用は任意です。(組み込みのデフォルトの暗号スイートはそのまま機能します)
デフォルト設定でコンパイルされた暗号ライブラリの場合、Zabbixのビルトインルールでは通常以下の暗号スイートを
使用します。(優先度の高いものから低いものの順):
| ライブラリ | Certificate ciphersuites | PSK ciphersuites |
|---|---|---|
| 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のトラブルシューティングに精通している
上級ユーザー向けの機能です。
組み込みの暗号スイート選択基準は、以下のパラメータを使用して上書きすることができます:
| 上書きスコープ | パラメータ | 値 | 説明 |
|---|---|---|---|
| Ciphersuite selection for certificates | TLSCipherCert13 | Valid OpenSSL 1.1.1 cipher strings for TLS 1.3 protocol (their values are passed to the OpenSSL function SSL_CTX_set_ciphersuites()). | Certificate-based ciphersuite selection criteria for TLS 1.3 Only OpenSSL 1.1.1 or newer. |
| TLSCipherCert | Valid OpenSSL cipher strings for TLS 1.2 or valid GnuTLS priority strings. Their values are passed to the SSL_CTX_set_cipher_list() or gnutls_priority_init() functions, respectively. | Certificate-based ciphersuite selection criteria for TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Ciphersuite selection for PSK | TLSCipherPSK13 | Valid OpenSSL 1.1.1 cipher strings for TLS 1.3 protocol (their values are passed to the OpenSSL function SSL_CTX_set_ciphersuites()). | PSK-based ciphersuite selection criteria for TLS 1.3 Only OpenSSL 1.1.1 or newer. |
| TLSCipherPSK | Valid OpenSSL cipher strings for TLS 1.2 or valid GnuTLS priority strings. Their values are passed to the SSL_CTX_set_cipher_list() or gnutls_priority_init() functions, respectively. | PSK-based ciphersuite selection criteria for TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Combined ciphersuite list for certificate and PSK | TLSCipherAll13 | Valid OpenSSL 1.1.1 cipher strings for TLS 1.3 protocol (their values are passed to the OpenSSL function SSL_CTX_set_ciphersuites()). | Ciphersuite selection criteria for TLS 1.3 Only OpenSSL 1.1.1 or newer. |
| TLSCipherAll | Valid OpenSSL cipher strings for TLS 1.2 or valid GnuTLS priority strings. Their values are passed to the SSL_CTX_set_cipher_list() or gnutls_priority_init() functions, respectively. | Ciphersuite selection criteria for TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
zabbix_get と zabbix_sender ユーティリティで暗号化スイート選択を
上書きするには、次のコマンドラインパラメータを使用します。:
--tls-cipher13--tls-cipher
新しいパラメータはオプションである。パラメータが指定されていない場合、内部のデフォルト値が使用されます。
パラメータが定義されている場合、空にすることはできません。
crypto ライブラリの TLSCipher* 値の設定に失敗すると、server、proxy、または agent は起動せず、エラーが記録されます。
各パラメータがどのような場合に適用されるかを理解することが重要です。
発信コネクション
最も単純なケースは、発信コネクションです:
- 証明書を使用した発信コネクションの場合 - TLSCipherCert13 または TLSCipherCert を使用します。
- PSK を使用する発信コネクションには、TLSCipherPSK13 と TLSCipherPSK を使用します。
- zabbix\get と zabbix\sender ユーティリティの場合、コマンドラインパラメータ
--tls-cipher13と--tls-cipherを 使用できます。(暗号化は一義的に--tls-connectパラメータで指定されます)
着信コネクション
着信コネクションの場合、ルールがコンポーネントや構成によって異なるため、少し複雑になります。
Zabbix agent の場合 :
| Agent connection setup | Cipher configuration |
|---|---|
| TLSConnect=cert | TLSCipherCert, TLSCipherCert13 |
| TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
| TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
Zabbix server と ** proxy** の場合:
| Connection setup | Cipher configuration |
|---|---|
| Outgoing connections using PSK | TLSCipherPSK, TLSCipherPSK13 |
| Incoming connections using certificates | TLSCipherAll, TLSCipherAll13 |
| Incoming connections using PSK if server has no certificate | TLSCipherPSK, TLSCipherPSK13 |
| Incoming connections using PSK if server has certificate | TLSCipherAll, TLSCipherAll13 |
上の2つの表でいくつかのパターンを見ることができます:
- TLSCipherAll および TLSCipherAll13は、証明書とPSKベースの暗号化方式を組み合わせたリストを使用する場合にのみ 指定できます。証明書が設定されている server(proxy)(PSK暗号スイートは、 cryptoライブラリがPSKをサポートしている場合、 server、proxy で常に設定されます)、証明書とPSKベースの両方の受信コネクションを受け入れるように設定された agent の場合
- その他の場合は、TLSCipherCert と TLSCipherPSK の両方またはどちらかで十分です。
以下の表は、TLSCipher* 組み込みのデフォルト値を示しています。これらは、独自のカスタム値のための良い出発点になる
可能性があります。
| Parameter | 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 |
| Parameter | 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 server、proxy、agent を何度も再起動するのは不便です。より便利なオプションは
zabbix_senderまたは openssl コマンドを使用することです。ここではその両方を紹介します。
1. zabbix_sender を使う
テスト用の設定ファイルを作成してみましょう。 zabbix_agentd.conf ファイルの構文で、/home/zabbix/test.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 agent との相互運用性を確保するために選ばれました。
新しいシステムでは、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 ではテストできません。TLSCipherAll と TLSCipherAll13 を
調整するには、agent、proxy、または server で実験する必要があります。
したがって、PFS 暗号スイートのみを許可するには、最大で 3 つのパラメータを追加する必要があります。
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
を zabbix_agentd.conf, zabbix_proxy.conf, zabbix_server_conf に追加する必要があります。
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




