Zabbix モジュール間の通信を暗号化する

13
Zabbixの通信を暗号化する!! ~拠点間通信をstunnelで暗号化~ 山根 健志(Takeshi YAMANE)/ふりっぱぁ Twitter : @fripper1214 fripper1214 at gmail.com 2014/06/29

description

Zabbix モジュール間の通信を暗号化する ~拠点間通信をstunnelで暗号化~

Transcript of Zabbix モジュール間の通信を暗号化する

Page 1: Zabbix モジュール間の通信を暗号化する

Zabbixの通信を暗号化する!!

~拠点間通信をstunnelで暗号化~

山根 健志(Takeshi YAMANE)/ふりっぱぁ

Twitter : @fripper1214

fripper1214 at gmail.com

2014/06/29

Page 2: Zabbix モジュール間の通信を暗号化する

自己紹介

山根 健志 (Takeshi YAMANE) https://twitter.com/fripper1214

https://www.facebook.com/takeshi.yamane.9

• 都内某社のプログラマ

• 開発だけでなく、導入支援やらHW周りやら色々‥

• 業務でもZabbixを愛用(2.0.x)

• アニメやら音楽やら色々好き

• 以前は自宅サーバとか置いていたけれど、今は引退‥

• Zabbixとの出会いは数年前(1.6.xの頃)

Page 3: Zabbix モジュール間の通信を暗号化する

Zabbixが行う通信は平文

• 現行バージョン(2.2.4)およびそれ以前のZabbixでは、監

視動作に関する通信は、全て暗号化されず、平文にて通

信されている‥

• 公衆回線経由だと業務に関する監視とか心配‥

⇨暗号化して、秘匿性を維持確保したい

• zabbix_server zabbix_agentd

• zabbix_proxy zabbix_agentd

• zabbix_server zabbix_proxy

• zabbix_sender ⇨ zabbix_server

• zabbix_sender ⇨ zabbix_proxy

• zabbix_get ⇨ zabbix_agentd

Page 4: Zabbix モジュール間の通信を暗号化する

暗号化のために使う手法

• 離れた地点を、暗号化した通信経路でつなぐ技術

• NTTやSoftBankなどの業者が提供する閉域VPN

⇨コストが掛かり過ぎる!高い!

• OpenVPN等を利用したインターネットVPN

⇨各拠点でサブネットやらルーティングやらを

考慮して設計する必要がある

•もっとカジュアルに暗号化したいなぁ

⇨httpsなどのように、TCPソケット通信単位で

SSLを使って暗号化すればいいじゃない!!

Page 5: Zabbix モジュール間の通信を暗号化する

SSL暗号化のために使う道具

• TCPソケット通信の暗号化処理・復号処理を行って

くれるようなツール

⇨ stunnel

https://www.stunnel.org/

• Linux・Windows、どちらも対応している

最新版は 5.02(2014/06/28現在)

CentOS等には公式rpmもあるが‥古い‥orz

Page 6: Zabbix モジュール間の通信を暗号化する

stunnelを使った通信の暗号化

• stunnelでは色々な使い方で通信暗号化ができるが、今

回のターゲット、Zabbixは接続元・接続先、双方が暗号

通信に非対応なので、接続元・接続先の双方にstunnel

を配置して、経路の暗号化を行う

接続元

モジュール

接続先

モジュール

接続元

モジュール

接続先

モジュール

平文による通信

平文による通信

stunnel

暗号化

stunnel

復号

平文による通信

暗号通信

Page 7: Zabbix モジュール間の通信を暗号化する

Zabbixの通信にstunnelを挟む(1)

• server(proxy) agentd 間の通信

双方向のtcp接続をそれぞれ転送しなければ監視不成立‥

⇨面倒だし、監視対象が増えると、「エージェント」監視用の

転送待受tcpポートの設定・管理等で破綻‥

server(proxy) agentd

「エージェント」監視関連通信 (get) 10050

10051

「ログ」「アクティブ」監視関連通信 (trapper)

server(proxy) agentd 10050

10051

10050

10051

11050

11051

Page 8: Zabbix モジュール間の通信を暗号化する

Zabbixの通信にstunnelを挟む(2)

• server proxy 間通信

zabbix_proxyは標準だとactive proxy設定

⇨ 片方向の通信経路だけ準備できれば良い

⇨ server側の待受は共通化できるので、

監視対象・拠点数が増えても大丈夫!!

server proxy

「passive proxyの場合」 10050

10051

「active proxyの場合」

server proxy 10051 10051 11051

agent agent

agent agent

Page 9: Zabbix モジュール間の通信を暗号化する

stunnelの導入

• ソースからインストールするなら‥

configure / make / make install

• yum / rpm でインストールするなら‥(CentOS6)

yum install stunnel

⇨標準だとinitスクリプトはインストールされない

Zabbixの通信用にサービス常駐させるので必要

⇨ http://www.gaztronics.net/scripts/stunnel.php

43行目のstunnel実行プログラムフルパスを修正

Page 10: Zabbix モジュール間の通信を暗号化する

stunnelの設定(1)

• とりあえず key/cert が必要

⇨opensslを使って作る

⇨以下コマンド例(いわゆるオレオレ証明書)

• 用意した証明書を配置する

root# openssl genrsa 2048 > server.key root# openssl req -new -key server.key > server.csr root# openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt root# cat server.key server.crt > server.pem

root# cp server.pem /etc/stunnel/ root# chmod 600 /etc/stunnel/server.pem

Page 11: Zabbix モジュール間の通信を暗号化する

stunnelの設定(2)

• stunnel.conf 内の設定

⇨先ほど用意した cert/key を設定

⇨転送接続に関する設定

⇨ server 側

⇨ agent 側

cert = /etc/stunnel/server.pem key = /etc/stunnel/server.pem

[zabbix-server] accept = 0.0.0.0:11051 ← 外部からの暗号接続を tcp:11051 で受信し connect = 127.0.0.1:10051 平文化して localhost の tcp:10051 へ接続

[zabbix-agent-to-server] client = yes accept = 127.0.0.1:10051 ← agent からの接続を tcp:10051 で受信し connect = 192.168.1.206:11051 暗号化して server の tcp:11051 へ接続

Page 12: Zabbix モジュール間の通信を暗号化する

Zabbix側の設定

• zabbix_server.conf 内の設定

ListenIP

外部からの接続は stunnel が受け、server 自身は stunnel から

接続されるだけになるので、127.0.0.1 で十分

• zabbix_proxy.conf 内の設定

Server

proxy が結果を送るべき server は localhost 上の stunnel。

127.0.0.1 とする

• zabbix_agentd.conf 内の設定

ServerActive

agent(active) が結果を送るべき server は localhost 上の stunnel。

127.0.0.1 とする

Page 13: Zabbix モジュール間の通信を暗号化する

これで安心!!

• 双方のホストで stunnel を常駐させ、常時通信を暗号化す

ることで、傍受・改ざんを回避!

⇨ これで安心だねっ\(-o-)/

<忘れちゃいけないこと:SSL 使った暗号化をやるなら‥>

・stunnelで使っている暗号化鍵の流出には注意!

・証明書・鍵の有効期限切れにも注意

・stunnel はバックエンドに openssl の機能を利用している

⇨ stunnel / openssl を適正に維持管理