5 データベースへの安全な接続
概要
このセクションでは、以下の間で安全なTLS接続を確立するためのZabbixのセットアップ手順と設定例を説明します。
| データベース | Zabbixコンポーネント |
|---|---|
| MySQL | Zabbix Webインターフェース、Zabbix サーバー、Zabbix プロキシ |
| PostgreSQL | Zabbix Webインターフェース、Zabbix サーバー、Zabbix プロキシ |
DBMS内で接続の暗号化を設定するには、詳細について各ベンダーの公式ドキュメントを参照してください。
- MySQL: ソースおよびレプリカのレプリケーション用データベースサーバー。
- MySQL: グループレプリケーションなどのデータベースサーバー。
- PostgreSQL 暗号化オプション。
すべての例は、CentOS 8で公式リポジトリから利用可能なMySQL CE (8.0) および PgSQL (13) のGAリリースに基づいています。
要件
暗号化を設定するには、次が必要です。
- デベロッパーサポートされているOSとOpenSSL1.1.X以上 または OpenSSLの代用品。
特に新規インストールの場合は、サポート終了したOSは避けることをお勧めします。
- デベロッパーが提供する公式リポジトリからインストールおよび保守されるデータベースエンジン(RDBMS)やオペレーティングシステムには、暗号化サポートが実装されていない古いバージョンのデータベースソフトウェアが付属していることがよくあります。たとえば、RHEL7ベースのシステムでのPostgreSQL9.2や暗号化サポートのないMariaDB5.5などです。
用語
このオプションを設定すると、Zabbixサーバー/プロキシおよびWebインターフェースからデータベースへの接続にTLS接続の使用が強制されます。
required- IDの検証を行わず、転送モードとしてTLSを使用して接続しますverify_ca- TLSを使用して接続し、証明書を検証しますverify_full- TLSを使用して接続し、証明書を検証し、さらにDBHostで指定されたデータベースのID(CN)がその証明書と一致することを検証します
Zabbixの設定
Webインターフェースからデータベース
Webインターフェースのインストール中に、データベースへの安全な接続を設定できます。
- トランスポート暗号化を有効にするにはデータベース接続設定ステップでデータベースのTLS暗号化チェックボックスをオンにします。
- 証明書による暗号化を有効にするには、TLS暗号化フィールドがオンになっている場合に表示されるデータベースの証明書確認チェックボックスをオンにします。
MySQLの場合、データベースホストがlocalhostに設定されていると、ソケットファイル(Unixの場合)または共有メモリ(Windowsの場合)を使用する接続を暗号化できないため、データベースのTLS暗号化チェックボックスが無効になります。 PostgreSQLの場合、データベースホストフィールドの値がスラッシュで始まるか、フィールドが空の場合、TLS暗号化チェックボックスは無効になります。
次のパラメータは、証明書モードのTLS暗号化で使用可能になります。(両方のチェックボックスがマークされている場合)
| パラメータ | 説明 |
|---|---|
| データベースのTLS CAファイル | 有効なTLS認証局(CA)ファイルへのフルパスを指定します。 |
| データベースのTLSキーファイル | 有効なTLSキーファイルへのフルパスを指定します。 |
| データベースのTLS証明書ファイル | 有効なTLS証明書ファイルへのフルパスを指定します。 |
| データベースのホスト検証 | このチェックボックスをオンにすると、ホスト検証がアクティブになります。 PHP MySQLライブラリではピア証明書の検証手順をスキップできないため、MySQLでは無効になっています。 |
| データベースのTLS暗号化方式リスト | 有効な暗号のカスタムリストを指定します。暗号リストの形式は、OpenSSL標準に準拠している必要があります。 MySQLでのみ使用できます。 |
TLSパラメータは有効なファイルを指している必要があります。存在しないファイルまたは無効なファイルを指している場合は、認証エラーが発生します。 証明書ファイルが書き込み可能である場合、Webインターフェースはシステム情報レポートに「データベースのTLS証明書ファイルは読み込み専用にしてください」という警告を表示します。 (PHPユーザーが証明書の所有者である場合にのみ表示されます)。
パスワードで保護された証明書はサポートされていません。
使用例
ZabbixのWebインターフェースでは、GUIインターフェースを使用して、利用可能なオプション required、verify_ca、verify_full を定義します。必要なオプションは、インストールウィザードの Configure DB connections ステップで指定します。これらのオプションは、次のように設定ファイル (zabbix.conf.php) にマッピングされます。
| GUI設定 | 設定ファイル | 説明 | 結果 |
|---|---|---|---|
![]() |
... // TLS接続に使用。 $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = ''; $DB['CERT_FILE'] = ''; $DB['CA_FILE'] = ''; $DB['VERIFY_HOST'] = false; $DB['CIPHER_LIST'] = ''; ... |
Database TLS encryption をチェックする Verify database certificate は未チェックのままにする |
required モードを有効化します。 |
![]() |
... $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = ''; $DB['CERT_FILE'] = ''; $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem'; $DB['VERIFY_HOST'] = false; $DB['CIPHER_LIST'] = ''; ... |
1. Database TLS encryption と Verify database certificate をチェックする 2. Database TLS CA file のパスを指定する |
verify_ca モードを有効化します。 |
![]() |
... // 厳密に定義されたCipherリストを使用するTLS接続に使用。 $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = '<key_file_path>'; $DB['CERT_FILE'] = '<key_file_path>'; $DB['CA_FILE'] = '<key_file_path>'; $DB['VERIFY_HOST'] = true; $DB['CIPHER_LIST'] = '<cipher_list>'; ... または: ... // Cipherリストを定義しないTLS接続に使用 - MySQLサーバーによって選択される $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = '<key_file_path>'; $DB['CERT_FILE'] = '<key_file_path>'; $DB['CA_FILE'] = '<key_file_path>'; $DB['VERIFY_HOST'] = true; $DB['CIPHER_LIST'] = ''; ... |
1. Database TLS encryption と Verify database certificate をチェックする 2. Database TLS key file のパスを指定する 3. Database TLS CA file のパスを指定する 4. Database TLS certificate file のパスを指定する 5. Database TLS cipher list を指定する(任意) |
MySQLで verify_full モードを有効化します。 |
![]() |
... $DB['ENCRYPTION'] = true; $DB['KEY_FILE'] = '<key_file_path>'; $DB['CERT_FILE'] = '<key_file_path>'; $DB['CA_FILE'] = '<key_file_path>'; $DB['VERIFY_HOST'] = true; $DB['CIPHER_LIST'] = ' '; ... |
1. Database TLS encryption と Verify database certificate をチェックする 2. Database TLS key file のパスを指定する 3. Database TLS CA file のパスを指定する 4. Database TLS certificate file のパスを指定する 5. Database host verification をチェックする |
PostgreSQLで verify_full モードを有効化します。 |
関連情報: MySQLの暗号化設定例, PostgreSQLの暗号化設定例。
Zabbix サーバー/プロキシの設定
データベースへのセキュアな接続は、Zabbixのserverおよび/またはproxy設定ファイル内のそれぞれの パラメータで設定できます。
| Configuration | Result |
|---|---|
| なし | 暗号化なしでデータベースに接続します。 |
1. DBTLSConnect=required を設定 |
サーバー/プロキシは、データベースへのTLS接続を確立します。暗号化されていない接続は許可されません。 |
1. DBTLSConnect=verify_ca を設定2. DBTLSCAFile を設定 - TLS認証局ファイルを指定 |
サーバー/プロキシは、データベース証明書を検証した後、データベースへのTLS接続を確立します。 |
1. DBTLSConnect=verify_full を設定2. DBTLSCAFile を設定 - TLS認証局ファイルを指定 |
サーバー/プロキシは、データベース証明書とデータベースホストの識別情報を検証した後、データベースへのTLS接続を確立します。 |
1. DBTLSCAFile を設定 - TLS認証局ファイルを指定2. DBTLSCertFile を設定 - クライアント公開鍵証明書ファイルを指定3. DBTLSKeyFile を設定 - クライアント秘密鍵ファイルを指定 |
サーバー/プロキシは、データベースへの接続時にクライアント証明書を提供します。 |
1. DBTLSCipher を設定 - クライアントがTLS 1.2までのTLSプロトコルを使用する接続で許可する暗号スイートの一覧または DBTLSCipher13 - クライアントがTLS 1.3プロトコルを使用する接続で許可する暗号スイートの一覧 |
(MySQL) 提供された一覧の暗号スイートを使用してTLS接続が確立されます。 (PostgreSQL) このオプションを設定するとエラーと見なされます。 |



