序文
この例では、TCPラッパーによって弾かれた接続をどのようにしてNagiosで警告を生成するか説明します。以下の説明ではNagiosと警告を生成させようとするホスト(TCPラッパーを使用しているホスト)は別のホストであると仮定しています。もしNagiosが稼働しているホストと同じホストで警告を生成したいのであれば、多少サンプルを変更する必要があるでしょう。同様に監視サーバにnsca デーモンが、TCPラッパーから警告を生成するホストにはnscaクライアント(send_nsca)がインストールされているものとしています。
サービスを定義する
まず初めにオブジェクト設定ファイルTCPラッパー警告のためのサービスを定義します。警告を作成するホストはfirestormと言う名前で呼ばれていると想定したサンプルサービス定義は以下のようになります:
define service{
host_name firestorm
service_description TCP Wrappers
is_volatile 1
active_checks_enabled 0
passive_checks_enabled 1
max_check_attempts 1
contact_groups security-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_none
}
ここで重要なのはこのサービスではvolatileオプションが有効になっていることです。なぜなら、このサービスは警告が発せられるたびに通知してほしいからです。同様にこのサービスではアクティブサービスチェックも無効になっていますが、一方でパッシブチェックは有効です。これはこのサービスはアクティブチェックを行うことがなく、全警告情報は、firestormホストのnscaクライアントから受動的に受け取ると言うことを意味しています。
TCPラッパーの設定
次にfirestormホストの/etc/hosts.denyファイルを修正します。TCPラッパーが接続を拒否する毎に監視サーバに警告を送信するためには、以下のような感じの設定になります:
ALL: ALL: RFC931: twist (/usr/local/nagios/libexec/eventhandlers/handle_tcp_wrapper %h %d) &
この行はfirestormの/usr/local/nagios/libexec/eventhandlers/ディレクトリにhandle_tcp_wrapperというスクリプトがあるということを前提にしています。ディレクトリとスクリプト名は好きなように変更できます。
スクリプトを作成する
最後にfirestorm上で監視サーバに警告を送信するhandle_tcp_wrapperスクリプトを作成します。このスクリプトは以下のような感じになります:
#!/bin/sh
/usr/local/nagios/libexec/eventhandlers/submit_check_result firestorm "TCP Wrappers" 2 "Denied $2-$1" > /dev/null 2> /dev/null
handle_tcp_wrapperスクリプトで注意してほしいのは実際に監視ホストに警告を送信しているスクリプトはsubmit_check_resultだと言うことです。 submit check_resultは以下のような感じになります(firestormホストのsend_nscaプログラムの場所を適切な位置に変更してください):
#!/bin/sh
# Arguments
# $1 = name of host in service definition
# $2 = name/description of service in service definition
# $3 = return code
# $4 = output
/bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg
Finishing Up
これで必要な設定はすべて終わりました。監視サーバのNagiosとfirestormのinetdを再起動してください。これで完了です!firestormのTCPラッパーが接続を拒否したら、Nagiosに警告が現れるでしょう。このプラグインの警告出力は以下のような感じです。
Denied sshd2-sdn-ar-002mnminnP321.dialsprint.net