swatchのインストールと携帯メールキャリア(受信)ブロックの監視

By nakayama - 08/10/30 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

今回は携帯のメール受信ブロックの監視でも
少し書きましたログ監視ツール『swatch』を使って
携帯メールの受信ブロックの監視を行なう方法を紹介したいと思います。

swatchはperlで書かれており、perlを先にインストールしておく必要があります。


インストール準備

swatchの最新版(3.2.3)は以下のURLからダウンロード。
http://sourceforge.net/projects/swatch/

swatchをインストールするにはモジュールとして以下の4つが必要になりますのでこちらもインストール。
Time::HiRes
File::Tail
Date::Parse
Date::Calc

Time::HiRes
http://search.cpan.org/~jhi/Time-HiRes-1.9715/HiRes.pm

File::Tail
http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm

Date::Parse
http://search.cpan.org/~gbarr/TimeDate-1.16/lib/Date/Parse.pm

Date::Calc
http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod

のURLからダウンロードするかCPANコマンドでインストールしてください。

# CPAN
cpan> install Time::HiRes
cpan> install File::Tail
cpan> install Date::Parse
cpan> install Date::Calc

swatchのインストール

# tar xvfz swatch-3.2.3.tar.gz
# cd swatch-3.0.8
# perl Makefile.PL
# make
# make install

受信ブロックログ検知用の設定

設定の例はソースを展開した ./swatch-3.0.8/examples にありますが
今回はキャリアブロック用の設定を行ないます。

/root/swatch/conf/swatch.conf のファイルを新規作成、下記設定を記述。

watchfor   /Connected_to_210\.153\.85\.241_but_connection_died/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_203\.138\.(180|181)\.([0-9]{1,3})_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_222\.15\.69\.195_but_connection_died/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_123\.108\.236\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_202\.179\.203\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_202\.179\.204\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_210\.169\.171\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_210\.169\.176\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_210\.228\.189\.\d{1,3}_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_210\.175\.1\.128_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"
watchfor   /Connected_to_210\.146\.60\.128_but_greeting_failed\.\/Remote_host_said:_421/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"

watchfor がログにその文字列が現れた時、pipe に記述されたコマンドを実行表します。

 watchfor   /Connected_to_210\.153\.85\.241_but_connection_died/i
        pipe "/usr/local/bin/php -q /root/swatch/alert.php"

上の記述ですと 『Connected_to_210.153.85.241_but_connection_died』 という文字列が現れた時、
『/usr/local/bin/php -q /root/swatch/alert.php』というコマンドにパイプさせています。
わざわざPHPのプログラムに処理を渡していますがアラートメールを送信するだけで良ければ

 watchfor   /Connected_to_210\.153\.85\.241_but_connection_died/i
       mail=alert@hogehoge.com,subject=Swatch Carrier Block 
       throttle 00:03:00

という書き方も出来ます。

ログが現れた場合、swatchで実行出来る内容は下記URLを参考にして下さい。
http://www.hope-net.jp/pukiwiki/index.php?Swatch
http://safe-linux.homeip.net/security/linux-swatch-02.html


swatch の起動ファイル

#! /bin/sh
#
# description: mail log monitor
. /etc/rc.d/init.d/functions
        RETVAL=0
# See how we were called.
case "$1" in
  start)
        echo -n "Starting Swatch: "
        /usr/bin/swatch -c /root/swatch/conf/swatch.conf -t /var/log/maillog >/dev/null
 2>&1 &
        RETVAL=$?
        echo
        ;;
  stop)
        echo -n "Stopping Swatch: "
        killproc tail
        RETVAL=$?
        echo
        ;;
  restart)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
  *)
        echo "Usage: swatch {start|stop|restart}"
        exit 1
esac

exit $RETVAL

運用注意点

ログローテートされるログを監視対象にしている場合、ログローテートされた後も新しく生成されたログではなく、
古いログを読みにいくようです。

参考:http://www.marronkun.net/linux/security/swatch_1.html

ログローテート時に /etc/rc.d/init.d/swatch もrestart する必要があります。
/etc/logrotate.d/syslog を編集

/var/log/message {
    postrotate
        /etc/rc.d/init.d/swatch restart
    endscript
}