swatch を導入してみる!ぞ! に関するメモ(2002/01/09, 更新日:2003/04/24) 
 

swatchとは

swatch(The Simple WATCHer)は、OSが出力する各種ログ(syslog, sendmail, httpd等)を常時監視し特定キーワードが出力された段階で、管理者に通知(メール、その他のアクションも可能)できる仕組みを持ちます。使用方法としては、root ユーザになった時のパスワード不一致、sshd アクセス等のセキュリティに関するキーワードが出現した時にメールにて通知するという簡易 IDC として用いることができます。

実際問題として、大/小に関わらずシステム管理者というのは、外側(インターネット側)からの脅威にいつも脅かされいるため、OSが出力する各種ログを見ている必要があります。ただ管理者と言っても所詮は人間のため、攻撃にあったであろう形跡を見落としてしまう可能性があるため、こういったツールを使用することによるメリットは大きいと思います。ただし「特定キーワード」によるパータンマッチしか行わないため、設置方法を間違えると管理者に対しての通知が行われない場合もあります。Logwatch もよいかも♪

swatch は、Perl で記述されているため当然の事ながら Perl が必要となります。セキュリティ上 Perl を動作できない環境である場合は、swatch のインストール&設置を行う事ができません。

 本家 : http://swatch.sourceforge.net/ : ダウンロード

 参考 : @IT:サーバのログ監視ツールを使いこなそう(2/3) 

 参考 : Perl / CPAN

swatch の入手と Perlモジュールの取得

2003/04/01現在の最新版は swatch 3.0.8 です。swatch のインストールには、下記の「perl用追加モジュール」が必要となります。

Time::HiRes (Time-HiRes-01.20.tar.gz)
File::Tail  (File-Tail-0.98.tar.gz)
Bit::Vector (Bit-Vector-6.1.tar.gz)
Date::Calc  (Date-Calc-5.3.tar.gz)
Date::Parse (TimeDate-1.14.tar.gz)

Perlモジュールのコンパイル&インストール

ここでは、Time-HiRes-01.20.tar.gz を例にします。他のモジュールも同様の作業です。perl用追加モジュールを先にインストールしないと、swatch をインストールすることはできません。途中 "Warning: prerequisite xxx::xxx"と表示されるようでしたら、モジュールのインストールの順番が間違っていますので、先に Warning が出力されたモジュールをインストールしてください。

$ tar zxfv Time-HiRes-01.20.tar.gz
$ cd Time-HiRes-01.20
$ perl Makefile.PL
$ make
$ make test
$ su
# make instal

  Point : "make test" でエラーが発生する場合がありますが、特に問題は無いのでにしない!

swatchモジュールのコンパイル&インストール

swatch を任意のディレクトリで解凍し、以下のコマンドを実行しインストールしてください。途中 "Warning: prerequisite xxx::xxx"と表示されるようでしたら、その場合は perl用追加モジュールが足りない事を指していますので必要なモジュールをダウンロードし、同様の作業でインストールしてください。

$ gzip -dc swatch-3.0.8.tar.gz | tar xvf -
$ cd swatch-3.0.8
$ perl Makefile.PL
$ make 
$ make test
$ su
# make install
     ※ /usr/bin/swatch にインストールされます

swatch定義ファイル

swatch は、定義ファイルと呼ばれるファイルに特定のキーワードが出現したときの条件&動作(アクション)を記述することにより動作します。その定義ファイルは、任意の場所に作成することが可能(起動オプションで指定可能)ですが、 ここでは管理しやすいように /etc の下に作成することとして話を進めます。

定義ファイルを "/etc/.swatchrc" とし以下の記述をします。ここでの条件&動作(アクション)は「誰かがroot になった」ときとして記述していますので、この条件にマッチング(一致)すると "murata@sea-bird.org"宛にメールが送信されます。

watchfor /session opened for user root/
mail=murata@sea-bird.org

swatch定義ファイルの書き方

swatch は、キーワード条件式と動作を対にしたコマンドを記述します。

キーワード条件式として "watchfor" or "ignore" があり、このコマンド以降に "/"で挟んだ中にマッチング(一致)すべき条件を、正規表現として記述します。この条件式にマッチング(一致)した場合、動作(アクション)が実行されます。

動作(アクション)は、一般的に "mail"(一致した行をメールで送信)コマンドを使用しますが、その他にも echo(ターミナルに表示)、beep(beep音)、コマンド実行(exec)など沢山の動作を行うことができます。使用用途により動作を組み合わせて使用することも可能です。

キーワード条件式と動作に関しては、「@IT:サーバのログ監視ツールを使いこなそう(2/3) 」を参照してください。ただし紹介記事は swatch 3.0.4 となっているため、swatch 3.0.8 で拡張されたキーワード条件式と動作については触れられていないため、最新の情報は man なりを見るなりして確認してください。

swatchを起動する

root権限になり swatch を起動します。ここでは、syslog(message)を監視する起動方法を記述します。syslog 以外のファイルを監視したい場合は、"-t" オプションで別途監視ファイルを指定し別起動してください。

$ su
# /usr/bin/swatch -c /etc/.swatchrc -t /var/log/messages &

※ swatch を実行すると以下のプロセスが生成されます。ようは tail コマンドで実行した結果をプロセス間通信(パイプ)で取得しているだけだったりして・・・・。

/usr/bin/tail -n 1 -f /var/log/messages

swatchの実行結果

「誰かがroot になった」場合、以下のメールが "murata@sea-bird.org" 宛に送信されます。

To: murata@sea-bird.org
Subject: Message from Swatch

Jan 8 19:45:47 ns PAM_pwdb[7568]: (su) session opened for user root by admin(uid=500)

応用編

swatch のその他の使用方として、「pop認証に失敗」「sshによるアクセス」「sshによるアクセス失敗」が発生した場合なども簡単に記述することができます。

また、下記の設定は 各種OS/ソフトのバージョンにより syslog に出力される結果が違うため、あらかじめ syslog を見てから設置してください。

# pop認証に失敗した場合
watchfor /qpopper\[.*\]: \[AUTH\] Failed attempted login to/
mail=murata@sea-bird.org

# sshによるアクセスが発生した場合
watchfor /sshd1\[.*\]: log: Connection from/
mail=murata@sea-bird.org

# sshによるアクセス失敗が発生した場合
watchfor /sshd1\[.*\]: fatal: Connection closed/
mail=murata@sea-bird.org

メールヘッダーの変更および、特殊処理の実行方法

swatchで監視対象となったメールのメールヘッダーは、"Message from Swatch" と固定されてしまいます。このメールヘッダーを変更する場合には、多少の技が必要です。

ここでは、「sshによるアクセス失敗」が発生した場合に、メールヘッダーとして "halt sshd user denied" と表示する方法を下記に示します。。

.swatchrc の記述
 watchfor /sshd1\[.*\]: fatal: Connection closed/
 exec /home/users/admin/tmp/swatch_pr.sh $0

swatch_pr.sh の記述
 #!/bin/sh
 echo $* | mail -s 'halt sshd user denied' murata@sea-bird.org

自動起動させる

マシンが起動した時に、自動的に swatch を起動させることも可能です。Qube3j の場合は /etc/rc.d/rc.local に以下の記述を行う事で可能です。

if [ -f /etc/.swatchrc -a -x /usr/bin/swatch ] ; then
 /usr/bin/swatch -c /etc/.swatchrc -t /var/log/messages &
fi

その他 : 3.0.6以降の問題

上記でも説明しましたが swatch は、tail コマンドを使用するように作成されています。そのため 3.0.6 以降では、tail コマンド実行の際に指定するオプションが "-1 -f" から "-n 1 -f" に変更となっているため swatch 起動時にエラーが発生する可能性があります。

対処方としては、下記のプログラムを修正し '-n 1 -f' から '-1 -f' に変更し、再度 make;make install を実行してください。

swatch:355:my $tail_program_args = '-n 1 -f';
blib/script/swatch:358:my $tail_program_args = '-n 1 -f';

またMTA の設定によっては、コマンド実行に 'mail' が使用できない場合があります。その場合は、'exec' コマンドを使用しシェル等のラッパプログラム内から、MTAを実行してください。