Portsentryとの統合


Introduction

この例は Psionic SoftwareのPortsentryによって検知されたポートスキャンからNagiosで簡単に警告を生成する方法について説明しています。 以下の方法は警告を生成したいホスト(例:Portsentryが動いているホスト)はNagiosが稼働しているホストとは別のホストと想定しています。 もしNagiosが稼働しているホストと同じホストで警告を生成したいのであれば、多少サンプルを変更する必要があるでしょう。同様に監視サーバにnsca デーモンが、Portsentryが稼働しているホストにはnscaクライアント(send_nsca)がインストールされているものとしています。

サービスの定義

まず初めにオブジェクト設定ファイルにポートスキャン警告のためのサービスを定義します。警告を作成するホストはfirestormと言う名前で呼ばれていると想定したサンプルサービス定義は以下のようになります:

define service{
	host_name                       firestorm
	service_description             Port Scans
	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オプションが有効になっていることです。なぜなら、このサービスは警告が発せられるたびに通知してほしいからです。同様にこのサービスではアクティブサービスチェックも無効になっています。check_commandオプションのコマンドは、実際にはどのサービスでも使われていないものです。- its just there to keep Nagios from complaining. しかしながら、全ポートスキャンの警告はfirestormホストからnscaクライアント経由で受動的にNagiosに送られてくるためパッシブチェックオプションは有効になっています。

Portsentryの設定

Portsentryがポートスキャンを検知して監視サーバに警告を送るようにするためには、Portsentry設定ファイル(portsentry.conf)のKILL_RUN_CMDオプションにコマンドを定義してやる必要があります。それは以下のような感じです:

KILL_RUN_CMD="/usr/local/nagios/libexec/eventhandlers/handle_port_scan $TARGET$ $PORT$"

この行はfirestorm上の/usr/local/nagios/libexec/eventhandlers/ディレクトリにhandle_port_scanという名前のスクリプトがあるという前提になっています。

スクリプトの作成

最後にfirestorm上で監視サーバに警告を送信するhandle_port_scanスクリプトを作成してやります。そのスクリプトは以下のような感じです:

#!/bin/sh

# Arguments:
#	$1 = target
#	$2 = port

# Submit port scan to Nagios
/usr/local/nagios/libexec/eventhandlers/submit_check_result firestorm "Port Scans" 2 "Port scan from $1 on port $2.  Host has been firewalled."

このhandle_port_scanスクリプトでは、実際に監視サーバに警告を送信するのはsubmit_check_resultと言う名前のスクリプトであることに注意してください。監視ホストの名前をmonitorと仮定した上での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

設定終了

これで必要な設定はすべて完了しましたので、firestorm上のportsentryプロセスと監視サーバのNagiosを再起動させてください。これで完了です!firestorm上のPortsentryソフトウェアがポートスキャンを検知したらNagiosで警告がでるでしょう。このプラグインの出力は以下のような感じです:

Port scan from 24.24.137.131 on port 21. Host has been firewalled.