nmapでサーバー監視

nmapというと有名なポートスキャンツールで、ハッカーツールっぽいですが、うまく利用すればとても便利なソフトです。

今回はnmapを使ってサーバー監視をしたいと思います。
まずはインストール

nmapのインストール


# rpm -ivh nmap-x.x.x.rpm[
 

これで nmap が使えるようになります。
nmap の使い方は以下の通り

nmapの使い方


# nmap -sS -P0 -p 21 192.168.1.10
 

nmap オプション IPアドレス(ホスト名)

-sS : TCPを使ったハーフオープンスキャン
-P0 : ICMPを使わない
-p 21 : ポートを指定


上記のコマンドは Ping が通らないサーバーでも調査できます。
オプションはたくさんあるので、すべては紹介できませんが一部だけ紹介します。

-sT : TCPフルコネクトスキャン
-sU : UDPスキャン
-sP : Pingスキャン
-oN filename : 結果をテキストに保存
-g port : 発信元のポートを指定
-S : 発信元のIPを指定(偽装)


ここで、対象ポートを調査し、閉じていたら管理者にメール送信するシェルを作りたいと思います。

server_check.sh


#!/bin/sh
 
#ロックファイルの有無チェック
if [ ! -e lock.f ]; then
 
 FLAG=0;
 MSG="-ServerCheck-\n\n";
 MAILTO="メールアドレス";
 
#Port21check
if nmap -sS -P0 -p 21 192.168.1.10 | grep closed > /dev/null ; then
 FLAG=1
 MSG=$MSG"FTP(21)error\n"
fi
 
#Port22check
if nmap -sS -P0 -p 22 192.168.1.10 | grep closed > /dev/null ; then
 FLAG=1
 MSG=$MSG"SSH(22)error\n"
fi
 
#Port25check
if nmap -sS -P0 -p 25 192.168.1.10 | grep closed > /dev/null ; then
 FLAG=1
 MSG=$MSG"SMTP(25)error\n"
fi
 
#Port80check
if nmap -sS -P0 -p 80 192.168.1.10 | grep closed > /dev/null ; then
 FLAG=1
 MSG=$MSG"HTTP(80)error\n"
fi
 
#Port110check
if nmap -sS -P0 -p 110 192.168.1.10 | grep closed > /dev/null ; then
 FLAG=1
 MSG=$MSG"POP3(110)error\n"
fi
 
#メール送信
if [ $FLAG -eq 1 ]; then
 echo -e $MSG | mail -s "ServerError" $MAILTO ;
 touch lock.f ;
fi
 
fi
 

nmapでポートの開閉を調査し、「closed」という文字列が見つかった場合メール送信します。

これを cron で定期的に実行すれば、完成です。
一度エラーでメール送信した時は、ロックファイルを作り、再度 cron で実行されたときに永遠にメールを送信しつづけるのを防ぎます。
cronの設定はこちら