【連載Zabbix】Zabbixコンポーネント間通信の暗号化

カスタマーサポート課の伊藤です。
サーバーワークスZabbixスペシャリスト 九龍として
Zabbix3.0、3.2の新機能を活用した監視手法をご紹介していきます。
前回は予測機能を利用したディスク監視についてご紹介しました。 今回は、Zabbixコンポーネント(Server,Proxy,Agent)間の通信暗号化についてご紹介します。 Zabbix 3.0からServer-Agent間、Proxy-Agent間、Server-Proxy間において、TLSによる暗号化が利用可能になりました。
暗号化の認証方式には、事前共有鍵(PSK)方式と、証明書方式を選択することができます。

PSK方式での通信暗号化

 無線LAN等の認証で利用されるような、事前に設定したパスコードを利用して暗号化を行う方式が事前共有鍵方式(pre-shared keys)方式になります。
ZabbixのPSKでは、128bitから2048bitの鍵を利用することが可能です。

事前準備

始めに、PSKアイデンティティとpre-shared keyを決めておきます。
PSKアイデンティティは128文字までの任意の文字列が利用できます。
pre-shared key 32桁から512桁の16進数値である必要があります。

32から512桁の16進数はOpenSSLやgnutls-utilsを使うことで、生成することができます。 OpenSSLの場合
openssl rand -hex <桁数>
$ openssl rand -hex 128

c2aabdc9b0f66a4f85dfa3b3da13144f00fdb5ae7bd517613f944d96b7099183e9df27081a2f46bce82201eaca587ff508b4878cee353301f7829e1f9bed9c86c3ad77bd06f10ab0846f3d40dbe74dadfd5ae90f7fc010fab3530e3781a998445865180e1debc52cf8004086ed5f9381f54854ae2005edfe96dd89c2a9c1c3c4

 gnutls-utilsの場合

psktool -u <アイデンティティ> -p <ファイル名> -s <桁数>
$psktool -u test -p test.psk -s 32
Generating a random key for user 'test'
Key stored to test.psk

$ cat test.psk
test:7a9705eadd5745ead115424d0129c191f99d56dd0fd7c32c22c120a9652f1c4b

これらのコマンドで作られた32桁以上、512桁以下の16進数を記録しておいて下さい。

ZabbixAgentの設定

既に暗号化無しで繋がっているZabbixAgentに対してPSK方式の暗号化を設定します。
Agentの設定項目はzabbix_agentd.conf内の
####### TLS-RELATED PARAMETERS #######
以下の4項目を設定します。
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=<PSKアイデンティティ>
TLSPSKFile=<PSK記載ファイルのフルパス>

設定例

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=test
TLSPSKFile=/etc/zabbix/tls/zabbix_agentd.psk

TLSConnect=AgentからServerへの接続時の接続方式です
unencrypted(暗号化無し),psk(pre-shared key方式),cert(証明書方式)から選択します。
TLSAccept=ServerからAgentへの接続時の受け入れ方式です
unencrypted(暗号化無し),psk(pre-shared key方式),cert(証明書方式)から選択します。
TLSPSKIdentity=接続名です。
128文字までの任意の文字列が利用できます。 TLSPSKFile=PSKを記載したファイルのフルパスを記載します。
ファイルにはPSKのみを記載してください、psktoolで作成した場合は、Identityと: を忘れずに削除してください。
ファイルの配置場所に制約はありませんが、Include=で設定されているディレクトリに配置すると、
Include=による補完と、フルパスがコンフリクトするため、Include=で指定されている以外のディレクトリに配置することをおすすめします。 設定が完了したらZabbix-Agentプロセスを再起動してください。

ZabbixServer GUIの設定

ZabbixServer側でも、Agentに設定した値と同じ物を設定します。 2016-11-17_17h32_23  正常に暗号化が行われるとエージェント暗号化の項目が緑色になります。2016-11-17_17h43_17

証明書による暗号化方式

証明書による暗号化方式では、サーバ・クライアント証明書が必要になります。
事前に、CA(認証局)証明書、サーバ・クライアント証明書、サーバ・クライアント秘密鍵を用意して下さい。

ZabbixServerの設定

 ZabbixServerの任意のディレクトリに、CA(認証局)証明書、サーバ・クライアント証明書、サーバ・クライアント秘密鍵を配置します。
$ pwd
/etc/zabbix/tls
$ ll
-rw------- 1 zabbix zabbix 4419 Nov 17 10:19 zabbix_ca_file
-rw------- 1 zabbix zabbix 4527 Nov 17 10:23 zabbix.crt
-rw------- 1 zabbix zabbix 1675 Nov 17 10:12 zabbix.key

今回は、/etc/zabbix/tlsというディレクトリを作成し3つのファイルを配置しています。 zabbix_server.confの
####### TLS-RELATED PARAMETERS #######
以下3項目を設定します。

TLSCAFile=/etc/zabbix/tls/zabbix_ca_file
TLSCertFile=/etc/zabbix/tls/zabbix.crt
TLSKeyFile=/etc/zabbix/tls/zabbix.key


TLSCAFile=CA(認証局)証明書のフルパスを記載します。
TLSCertFile=サーバ・クライアント証明書のフルパスを記載します。
TLSKeyFile=サーバ・クライアント秘密鍵のフルパスを記載します。 項目の記載が終わったら、Zabbix-Serverプロセスを再起動してください。

ZabbixAgentの設定

Agentの設定項目はzabbix_agentd.confの
####### TLS-RELATED PARAMETERS #######
以下の5項目を設定します。
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/etc/zabbix/tls/zabbix_ca_file
TLSCertFile=/etc/zabbix/tls/zabbix.crt
TLSKeyFile=/etc/zabbix/tls/zabbix.key

TLSConnect=AgentからServerへの接続時の接続方式です
unencrypted ,psk ,cert から選択します。
TLSAccept=ServerからAgentへの接続時の受け入れ方式です
unencrypted ,psk ,cert から選択します。
TLSCAFile=CA 証明書のフルパスを記載します。
TLSCertFile=サーバ・クライアント証明書のフルパスを記載します。
TLSKeyFile=サーバ・クライアント秘密鍵のフルパスを記載します。 設定が完了したらZabbix-Agentプロセスを再起動してください。

ZabbixServer GUIの設定

証明書情報はzabbix_server.confに記載されているため、GUIでは、「証明書」を選択するだけで証明書による暗号化通信を設定する事ができます。
2016-11-17_20h23_00証明書の偽装を防ぎたい場合は、CA(認証局)やサブジェクトを入力する事によって、特定の認証局の証明書以外は受け入れないように設定する事も可能です。 適切に設定が完了すると2016-11-17_20h29_55 エージェント暗号化の項目が緑色で表示されます。

ZabbixProxyの設定

ZabbixProxyを使う場合、Agent、Serverの設定はそのままです。
zabbix_proxy.confの ####### TLS-RELATED PARAMETERS ####### 以下の項目は
Agent,Serverの項目名と同一です。
ZabbixProxyはアクティブモードかパッシブモードいずれかの設定になりますので、双方向通信ではなく、片方向通信になります。
このため、「プロキシへの接続」か「プロキシからの接続」のいずれか片方を設定する事になります。2016-11-19_23h38_26

まとめ

これまでは、Zabbixの通信を暗号化しようとした場合、stunnelPertinoなどのネットワーク暗号化ツールを利用する必要がありました。 Zabbix3.0からはこれらの暗号化ツールを使わずに、Zabbix単体で通信の暗号化通信が可能になりました。
また、ZabbixServer側で暗号化設定を行う事で、pre-shared keyや証明書を持たないAgnetが、既存の監視対象と同じ名前で接続してきたときに、データを書き込まれるなどのなりすまし対策も行う事ができるようになりました。 なお、今回ご紹介した通信の暗号化ですが、Windows版Zabbixエージェンの場合残念ながら
Zabbix LLCからダウンロードできるパッケージでは対応してません。
Windows版のZabbixエージェントで暗号化通信を行いたい場合は、Zabbix Japanのシルバーサポート以上の契約を行った上でカスタマーポータルからTLS対応版をダウンロードする必要があります。 Serverworksでは、Zabbixサポートの販売も行っておりますので、お気軽にお問い合わせください。 次回は、監視手法のご紹介はお休みして、Zabbix Conference Japan 2016のレポートを予定しています。

AWS運用自動化サービス「Cloud Automator」無料トライアルはこちらから

COMMENT ON FACEBOOK