2014
09
12

Webサーバで特定ファイルへのアクセスを監視し、メールで知らせる

#!/bin/sh

# Monitoring the specific access to the web server and send notification mail.

logfile=/path/to/your/server_log

if [ ! -f $logfile ]; then
echo "$logfile: File does not exist"
exit 1
fi

grep -i "/cgi-bin/php" $logfile | awk '$6 == "\"POST" {print $0}' > /tmp/access.log
cat /tmp/access.log | mail -s access_detected your@mail.com



Webサーバの特定ファイルへのアクセスを監視し、メールで知らせるスクリプトです。いちいちサーバにログインしてログを確認するのが面倒なときに使えるかもです。
例に挙げたのはCVE-2012-1823, CVE-2012-2311の脆弱性を利用した不正アクセスを検知するためのスクリプトです。

リクエストURLに「/cgi-bin/php」を含み、かつPOSTメソッドでのアクセスを検知したら、/tmp/access.logに該当のアクセスログを記述します。
awkコマンドの"$0"「すべてのカラム」を意味します。この場合はアクセスログに載っている送信元IPやアクセス先のファイル名、ステータスコード、リファラーなどのすべてのフィールドを出力します。
そして、/tmp/access.logの内容をmailコマンドに渡してメールを送信しています。
grepコマンドで i オプションを指定してリクエストのファイル名の大文字・小文字の区別を無効化してますが、これは無くてもいいかもしれません。
あとはスクリプトをcronで定期実行させれば、通知メールが定期的に届きます。

※スクリプトの最初の方で監視対象のログファイルを指定して、指定したログファイルが存在しなかったらエラーメッセージを表示して終了します。

以上。

2015年4月19日追記
以下のように地味に改良。

#!/bin/sh

# Monitoring the specific access to the web server and send notification mail.

logfile=/path/to/log
file=/path/to/file
old_logline=0
keyword=pattern
mailsubject=subject of mail

while true
do
if [ ! -f $logfile ]; then
echo "$logfile: File does not exist"
exit 1
fi

current_logline=$(grep $keyword $logfile | wc -l)

while [ $current_logline -ne $old_logline ]
do
grep $keyword $logfile | awk '{print $0}' >> $file
cat $file | mail -s $mailsubject example@mail.com
old_logline=$current_logline

done
done



変更点
while文で常にスクリプトを回すことによってログ監視のリアルタイム性をあげた。
Comment



Only the blog author may view the comment.

[141]

It's actually a great and useful piece of info. I am happy that you shared this helpful information with
us. Please stay us up to date like this. Thanks
for sharing.

Trackback
Trackback URL

«  | HOME |  »

奇妙な風景 Unique Scene
<< >>

プロフィール


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


スポンサード リンク


FC2カウンター


検索フォーム


RSSリンクの表示


リンク


ブロとも申請フォーム


QRコード