分散監視 (Distributed Monitoring)


・ NSCA ( NetSaint Service Check Acceptor )
NSCAは、アドオンパッケージですが、中央サーバー(CMS)上ではデーモンとして nsca を使い、DMS(Distriuted Monitoring Server)上ではクライアントとして send_nsca を使う、ということである。

  中央サーバー上のNagios側は受身の体勢ですので、リモートのホストから送られてくる情報を待ち受けるためにnscaと いうデーモン を稼動しておくことになります。

それでは、この NSCA のインストールと設定について以下の通りである。

(1)事前準備
さて、NSCAはリモートホストとデータのやり取りを行うため、セキュリティに関して十分な注意が必要となります。

そこで、NSCAにはやり取りするデータを暗号化する機能を装備していますので、これを使うことにしましょう。
NRPEではなく、NRPEPを使うようにしましょう、ということです。

データ暗号化の機能を利用するためには、「 libmcrypt 」というライブラリが必要となりますので、「Mycrypt 」サイトからダウンロードしてきます。
そして、以下の方法でCMSとDMSの両方にインストールします。

   # tar xvzf libmcrypt-2.5.3.tar.gz
   # cd libmcrypt-2.5.3
   # ./configure
   # make
   # make check
   # make install

インストールが済んだら、libmcryptライブラリがインストールされたパスを「 LD_LIBRARY_PATH 」という環境変数に追加しなければなりません。
これを忘れると、NSCAのコンパイルで「LIBMCRYPTがないぞ〜」と怒られますし、データの暗号化ができません。
ちなみに、私はlibmcryptライブラリがインストールされた /usr/local/lib のディレクトリを /etc/ld.so.conf のファイルに追加し、ldconfig

を実行する方法をとりました。
すなわち、

   # vi /etc/ld.so.conf    (適当なエディタで /etc/ld.so.conf を開く)
     (表示された内容の最終行に) /usr/local/lib (を追記する。)
     :wq           (修正した内容を上書きする)
   # ldconfig
 (重要:これを実行しなければ反映されない。)

ということである。

(2)コンパイルとインストール
さて、CMSとDMSが同じOSや構成のマシンであればいいのですが、そうでない場合には必ずそれぞれのマシンでNSCAをコンパイルする必要がありま す。

CMS・DMSともに、ダウンロードしたnsca-2.4.tar.gz を適当なディレクトリに展開し、いつものコマンドでコンパイルは終了です。

   # tar xvzf nsca-2.4.tar.gz
   # cd  nsca-2.4
   # ./configure
   # make all

 
さて、以上により作成された nsca-2.4/src というディレクトリにある nscasend_nsca が目的のバイナリファイルである。
また、nsca-2.4 のディレクトリにある nsca.cfgsend_nsca.cfg もそれぞれの定義ファイルとして使用します。

インストールといっても、これらのファイルを任意の場所にコピーするだけでよいのだが、今回はCMS及びDMSに次のようにコ ピーした。ただし、グループ、所有者は nagios にしておいた方がいいようである。

  CMS DMS
バイナリファイル /usr/local/nagios/bin/nsca /usr/local/nagios/bin/send_nsca
定義ファイル /usr/loca/nagios/var/nsca.cfg /usr/local/nagios/var/send_nsca.cfg
#chown nagios /usr/local/nagios/var/nsca.cfg
#xhgrp
nagios /usr/local/nagios/var/nsca.cfg  など

(3)DMS(Distributing Monitoring Server) 側の設定
DMS側では、send_nsca.cfg に暗号化の設定を行うだけでである。

それでは、send_nsca.cfg の内容を見てみましょう。

# ENCRYPTION PASSWORD
# This is the password/passphrase that should be used to encrypt the
# outgoing packets. Note that the nsca daemon must use the same
# password when decrypting the packet!
# IMPORTANT: You don't want all the users on this system to be able
# to read the password you specify here, so make sure to set
# restrictive permissions on this config file!

#password=

# ENCRYPTION METHOD
# This option determines the method by which the send_nsca client will
# encrypt the packets it sends to the nsca daemon. The encryption
# method you choose will be a balance between security and performance,
# as strong encryption methods consume more processor resources.
# You should evaluate your security needs when choosing an encryption
# method.
#
# Note: The encryption method you specify here must match the
# decryption method the nsca daemon uses (as specified in
# the nsca.cfg file)!!
# Values:
# 0 = None (Do NOT use this option)
# 1 = Simple XOR (No security, just obfuscation, but very fast)
#
# 2 = DES
# 3 = 3DES (Triple DES)
# 4 = CAST-128
# 5 = CAST-256
# 6 = xTEA
# 7 = 3WAY
# 8 = BLOWFISH
# 9 = TWOFISH
# 10 = LOKI97
# 11 = RC2
# 12 = ARCFOUR
#
# 14 = RIJNDAEL-128
# 15 = RIJNDAEL-192
# 16 = RIJNDAEL-256
#
# 19 = WAKE
# 20 = SERPENT
#
# 22 = ENIGMA (Unix crypt)
# 23 = GOST
# 24 = SAFER64
# 25 = SAFER128
# 26 = SAFER+
#
encryption_method=1

設定する箇所としては太字で示した2箇所だけです。

いろいろな暗号化の方法が使えるようですが、今回は NRPEPと同じ TripleDESを使うことにしました。

ということで、 send_nsca.cfg に設定するエッセンスだけを抜き出すと次の2行となります。

   password=NetSaint
   encryption_method=3

passwordは当然のことながら、オリジナルのものを使用してくださいね。
なお、ここで設定した「password」と「encryption_method」は、CMSの nsca.cfg でも設定するようになっており、必ず同じ値にしなければなりません。

また、設定内容を他のユーザーから読まれないように、パーミッションの設定にも注意してください。


(4) CMS(Central Monitoring Server) 側の設定
同様に、CMS側のnsca.cfg の内容を見てみましょう。
今回は、コメントをはずしたエッセンスのみを示します。
なお、○付き数字は説明のために追加したものです。

@ server_port=5667

A #server_address=192.168.1.1

B allowed_hosts=127.0.0.1

C debug=0

D command_file=/usr/local/nagios/var/rw/netsaint.cmd

E alternate_dump_file=/usr/local/nagios/var/rw/nsca.dump

F aggregate_writes=1

G append_to_file=1

H max_packet_age=30

I password=NetSaint

J decryption_method=3

変更した項目は、赤字で示したところです。
設定内容については、直感的にわかるかと思いますので、簡単に説明しておきます。
@ : NSCAがデータをやり取りするポート番号。
A : 複数のNICがある場合、CMSサーバーが利用するIPアドレスを特定するときに使う。
B : NSCAとデータをやり取りできるホストのIPアドレス。
   127.0.0.1があればOK。
C : 「1」にした場合、メッセージをログします。
D : エクスターナルコマンドファイルです。(外部からの情報を書き込むファイル。)
E : NetSaintが稼動していないときに外部からの情報を書き込むファイルです。
F : aggregate writes を利用する。
   aggregate writesとは、まとめて送られてきたデータをそのまま書き込む機能です。
G : エクスターナルコマンドファイルに書き込めるようにする。
H : クライアントから送られてきたデータの有効時間。(単位:秒)
   replay攻撃を避けるため、できるだけ小さな値とする。最高は900秒(15分)。
I : send_nsca.cfg で設定したのと同じパスワード。
J : send_nsca.cfg で設定したものと同じ暗号化方法です。(3=Triple DES)

このnsca.cfg についても、send_nsca.cfg と同様、ファイルのパーミッションに注意し てください。

(5)NSCAの起動
さて、nsca.cfg に書かれているように、NSCA は 5667番のポートを使用し、TCPを使ってデータのやりとりをおこないます。
そこで、CMS の /etc/services のファイルに次の内容を追加します。
   nsca      5667/TCP        # NSCA for Nagios

さらに、下記の内容で nsca というファイルを /etc/xinetd.d/ ディレクトリに作成します。

   #  default: on
   #  description: NSCA
   service  nsca
   {
        disable          =  no
        flags             =  REUSE
        socket_type   =  stream
        wait              =  no
        user              =  nagios
        server           =  /usr/local/nagios/bin/nsca
        server_args    =  -c  /usr/local/nagios/var/nsca.cfg --inetd
        log_on_failure  +=  USERID
        only_from       =  192.168.0.XX
   }

以上で、リモートホスト上の設定が終了しましたので、xinetd をリスタートさせます。
   # /etc/init.d/xinetd restart

また、/etc/hosts.allow に次の内容を追加します。
   nsca:      DMSのIPアドレス

 拒否されている場合の /var/log/message に記録されるエラーメッセージは次の通りである。
Mar 20 11:38:25 thinkpad xinetd[1430]: libwrap refused connection to nsca from 1
92.168.0.40
 リモートサーバー 192.168.0.40 からの nsca によるアクセスを拒否している時の例である。
 このような場合は、 /etc/hosts.allow や /etc/hosts.deny ファイルを見直してやる必要がある。

   以上で NSCA(NetSaint Service Check Acceptor) の準備完了である。

前 ページ