◆ Munin 2.0 の新機能、Native SSH Transport 概要
Munin 2.0 からは、”Native SSH Transport”機能が搭載されました。バージョン 2.0 以降であれば、SSH を経由して Munin の通信をトンネリングする事ができます。
SSH を通してデータをやりとりしますので、セキュリティ上のリスクが減るメリットがあります。従来は、Port 4949 をファイアウォールでオープンにしなくてはいけなかったり、平文で通信を行っているため通信上のリスクがありました。また、外部ネットワークへの通信(outbound)が遮断されている環境や NAT されたネットワークでは、これまで通信を行う事ができませんでした。それらは、今後 SSH 経由で munin-node のデータが取得できるようになります。
では、具体的にはどのような仕組みになっているのでしょうか。下図をご覧下さい。まずは、一般的な Munin のアーキテクチャを見てみましょう。
通常の Munin マスタ <-> Munin ノード間の通信には、TCP Port 4949 を経由しています。マスタ・ノード間が同一ネットワーク内であれば、何ら問題無いと思います。
ですが、ここに仮にファイアウォールが入ってくるとなると事情は変わってきます。ネットワーク(特に会社さんや学校では)によっては、厳しいポリシーが設けられている場合もあります。twitter で訊くところによると、ポートを1つあけるだけでも会議が必要になる事もあるそうですね、一般的には、様々申請が必要になるほか、munin-node に対する未知のセキュリティリスクも考慮したほうが望ましいでしょう。
この問題に対処すべく搭載されたのが、今回の SSH 対応機能です。次の概念図をご覧下さい。
通信が、munin-node の TCP ポート 4949 に代わり、SSH ( TCP ポート 22 ) 経由で munin-node からデータを取得します。
もう少し、詳しく見てみましょう。まず munin マスタが SSH を経由して、踏み台となるべくサーバ(図中は munin-node A , IP addr: 192.168.10.2 ) に接続します。このとき、内部では公開鍵認証(RSA)を使い、パスフレーズ無しのログインを試みます。
ログインが成功すると、そのサーバ内の nc ( netcat ) コマンドを 用いてデータ取得を試みます。自サーバ (127.0.0.1) の munin-node のポート 4949 や、外部 munin-node ( munin-node B, IP addr:192.168.10.3) へと接続します。そして、得られた結果を、Munin マスタが取得できるようになるのです。
設定上の留意点としては、以下の3点があげられます。
- Munin マスタの環境から、nc コマンドの踏み台サーバに SSH 接続を許可すること
- SSH は、 RSA 認証の設定を行う必要がある事
- 踏み台サーバには nc コマンドが入っている事
また、この SSH の踏み台となるサーバは、1つだけではなく、複数の環境を指定できます。踏み台のサーバは、nc コマンドを中継する役割があればよいので、必ずしも munin-node をセットアップする必要はありません。
◆ 設定手順
今回、次のような構成であると仮定します。
- Munin マスタが 1 台あるものとし、192.168.10.2 を SSH の踏み台とする
- munin-node は 2台(IP アドレス は、192.168.10.2 と 192.168.10.3 )
まず、Munin マスタ側で SSH の公開鍵設定を行います。”munin” ユーザ向けの SSH キーペアを作成します(RSA認証)。root から次のようにコマンドを実行します。
# sudo -u munin ssh-keygen -t rsa
実行すると、パスフレーズの入力指定が表示されます。いずれも空白のものとします。
Generating public/private rsa key pair. Enter file in which to save the key (/var/lib/munin/.ssh/id_rsa): Created directory '/var/lib/munin/.ssh'. Enter passphrase (empty for no passphrase): 【Enterを入力】 Enter same passphrase again: 【Enterを入力】
実行すると、次のように表示されます。
Your identification has been saved in /var/lib/munin/.ssh/id_rsa. Your public key has been saved in /var/lib/munin/.ssh/id_rsa.pub. The key fingerprint is: 07:ee:19:21:8e:4c:6d:1e:5f:65:eb:ce:f3:29:d9:d9 munin@localhost
特にエラーがなければ、キーペアが作成されます。この際、公開鍵の情報を、テキストエディタに控えておきます。対象ファイルは 【 /var/lib/munin/.ssh/id_rsa.pub 】です。
# cat /var/lib/munin/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAB(略)rxRbXw== munin@localhost
つぎは、SSH 踏み台サーバ兼 munin-node (192.168.10.2)で設定を行います。
作業は、munin アカウントのシェルを bash に変更し、先ほど作成した公開鍵を authorized_keys にセットします。まずは root 権限から、シェルの変更です。
# chsh -s /bin/bash munin
次に、公開鍵をセットする作業を行います。
# su - munin $ cd /var/lib/munin $ mkdir .ssh $ chmod 700 .ssh $ cd .ssh/ $ touch authorized_keys $ chmod 600 ./authorized_keys $ vi ./authorized_keys
ファイル authorized_keys の中に、先ほどの公開鍵を設置します。
設置後は、Munin マスタのサーバからの SSH 接続を試みてください。root の状態で、sudo で munin にスイッチして接続を試みます。初回接続時なので、接続後は”yes”と入力します。
# sudo -u munin ssh 192.168.10.2
The authenticity of host '192.168.10.2 (192.168.10.2)' can't be established.
RSA key fingerprint is 4b:ad:ec:b2:21:0e:fb:6e:83:5e:4c:6e:1e:87:63:cc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.2' (RSA) to the list of known hosts.
-bash-3.2$
もしここで接続できない場合は、次のように一般的な SSH 接続が可能かどうか、確認します
- SSH 接続が許可されているかどうか(Firewall, iptables, hosts.allow 等々)
- RSA認証が許可されているかどうか(/etc/ssh/sshd_config)
- munin アカウントのシェルが /bin/bash になっているか
※環境によっては、これでも接続できない場合があります。これは、デフォルトの munin アカウントはパスワードが設定されていないためです。/etc/shadow のエントリが「!!」になっていると、ログインが許可されない場合があります。その時は、「passwd munin」として、パスワードを指定してください(参考URL; GSI-Enabled OpenSSH Server Troubleshooting
http://grid.ncsa.illinois.edu/ssh/ts_server.html )。
SSH接続が問題無ければ、再び Munin マスタ側の設定に戻ります。
Munin マスタの /etc/munin/munin.conf では、次のように記述します。
[GroupName;node1] address ssh://192.168.10.2/usr/bin/nc 127.0.0.1 4949 use_node_name yes [GroupName;node2] address ssh://192.168.10.2/usr/bin/nc 192.168.10.3 4949 use_node_name yes
通常と異なるのは「ssh://<ホスト名>/usr/bin/nc」の箇所です。このホスト名の部分に、SSH 踏み台対象となるサーバの情報を記載します。「/usr/bin/nc」は、nc コマンドのパスです。もし環境によってパスが異なる場合は、書き換えます。
そして「127.0.0.1」や「192.168.10.3」は、SSH 踏み台サーバを起点として、munin-node の稼働しているサーバの IP アドレスと、ポート番号を指定します。それと、SSH 経緯の場合「use_node_name yes」が必須になります。
あとは、munin-node 側では、SSH 踏み台サーバからの munin-node への接続を許可(Port tcp 4949の通信)してください。このあたりの設定は、通常の Munin の設定と変わりません。
以上で設定は終わりです。5分間の cron の更新のタイミングを待つか、コマンド「sudo -u munin /usr/bin/munin-cron 」を実行して、データ収集&グラフ生成を試みてください。もし何も表示されない場合は、「tail -f /var/log/munin/munin-update.log」を実行し、正常にデータが取得できてるかどうかを確認してみてください。
◆ 参考
Native_ssh – Munin – Trac
http://munin-monitoring.org/wiki/Native_ssh
MuninSSHTunneling – Munin – Trac
http://munin-monitoring.org/wiki/MuninSSHTunneling
Waiting for Munin 2.0 – Native SSH transport – Personal Workflow Blog
http://blog.pwkf.org/post/2010/07/Waiting-for-Munin-2.0-Native-SSH-transport