分散監視 (Distributed Monitoring)


・ NSCA ( NetSaint Service Check Acceptor )

NSCAは、応用編の「 リモートホスト管理 」のところで説明したNRPENRPEP等と同じようなアドオンパッケージですが、大きく異なる点は、 CMS(Central Monitoring Server)上ではデーモンとして nsca を使い、DMS(Distriuted Monitoring Server)上ではクライアントとして send_nsca を使う、ということです。

NRPEやNRPEPでは、NetSaint側から対象とするリモートのホストにコマンドを送信し、返ってきた結果をチェックしていましたので、チェックされる側のホストでデーモンが稼動していました。
しかし、今回はNetSaint側が受身の体勢ですので、リモートのホストから送られてくる情報を待ち受けるためにnscaというデーモンを稼動しておくことになります。

それでは、この NSCA のインストールと設定について説明していきましょう。


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

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

データ暗号化の機能を利用するためには、「 libmcrypt 」というライブラリが必要となりますので、「 Mcrypt 」サイトからダウンロードしてきます。
そして、以下の方法で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-1.2.0.tar.gz を適当なディレクトリに展開し、いつものコマンドでコンパイルは終了です。

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

ちなみに、libmcrypt をインストールしただけで環境変数への登録を忘れた場合には、./configure 実行時に以下のようなメッセージが表示されます。
何故、ここにそのメッセージを表示できているのか、というのは秘密です。(~_~;)

checking for libmcrypt-config... /usr/local/bin/libmcrypt-config
checking for libmcrypt - version >= 2.4.11... no
*** Could not run libmcrypt test program, checking why...
*** The test program compiled, but did not run. This usually means
*** that the run-time linker is not finding LIBMCRYPT or finding the wrong
*** version of LIBMCRYPT. If it is not finding LIBMCRYPT, you'll need to set you
r
*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point
*** to the installed location Also, make sure you have run ldconfig if that
*** is required on your system
***
*** If you have an old version installed, it is best to remove it, although
*** you may also be able to get things to work by modifying LD_LIBRARY_PATH
***


**************************************************************
MCRYPT LIBRARY (libmcrypt) COULD NOT BE LOCATED...

The mcrypt library could not be located on your system. This
means that you will NOT be able to use any crypto algorithms
in the NSCA client or daemon.

                        < 以 下 省 略 >

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

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

  CMS DMS
バイナリファイル /usr/local/netsaint/bin/nsca /usr/local/netsaint/bin/send_nsca
定義ファイル /usr/loca/netsaint/var/nsca.cfg /usr/local/netsaint/var/send_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/netsaint_dm/var/rw/netsaint.cmd

E alternate_dump_file=/usr/local/netsaint_dm/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 : エクスターナルコマンドファイルに書き込めるようにします。
   NetSaintのバージョン0.0.6 以上では、必ず「1」にしなければなりません。
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 NetSaint

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

   #  default: on
   #  description: NSCA
   service  nsca
   {
        disable          =  no
        flags             =  REUSE
        socket_type   =  stream
        wait              =  no
        user              =  netsaint
        server           =  /usr/local/netsaint_dm/bin/nsca
        server_args    =  -i  /usr/local/netsaint_dm/var/nsca.cfg
        log_on_failure  +=  USERID
        only_from       =  DMSのIPアドレス
   }

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

リスタート後、nsca が正しくxinetd に登録されたかを確認しましょう。
   # tail  /var/log/messages

として、
Oct 20 23:16:46 ms1 xinetd[2993]: service/protocol combination not in /etc/services: nsca/tcp

という表示があった場合、nscaが/etc/serveices に正しく登録されていませんので、もう一度設定内容を確認してください。(正しく登録された場合には、特に表示はありません。)


なお、xinetd でなく inetd を使用している場合には、/etc/inetd.conf ファイルに次の内容を追加します。
   nsca  stream  tcp  nowait netsaint /usr/sbin/tcpd
                     /usr/local/netsaint_dm/libexec/nsca  -i  /usr/local/netsaint_dm/etc/nsca.cfg
                                        (実際には、1行で記入します。)

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



以上で NSCA(NetSaint Service Check Acceptor) の準備も整いました。
いよいよ、CMSとDMSのNetSaintを設定し、分散監視(Distributed Monitoring)の開始です。

back HOME