swatch


F&Fでは無意味cgiを叩きまくるものやレファラーspam、掲示板への宣伝書き込みなどが後を絶たない。
cgi系はサーバ負荷を挙げる要因になるので連続アクセスなどをチェックしてアクセスを遮断するなどの対策を行っている。
こうしたhttpdに関する所のみではなく、sshやftpによる不正ログインを試みる輩も相変わらず多い。
多くは他のサーバを攻撃して穴を開け、そのサーバに攻撃プログラムを仕込むようなスタイルだと思う。
IDは辞書を使うようで海外人名などでトライしてくるが、最近では日本人名辞書(spam発送などに使われる)も流通しているようなので安心は出来ない。
パスワードを破られることは皆無だとは思うのだが、やはり何らかの対策をしておくことは必要だろう。
例えば、
find -F /var/log/messages
とやれば/var/messagesの更新部分がどんどん出力されてくる。
これをシェルで処理しても良いのだが、perlで書かれたswatc
というプログラムがあるので今回はこれを使ってみることにする。
インストールは特に難しくはなく、幾つかのモジュールは必要とするが、それもcpanで入れればいい。

cpan install Date Calc
cpan install Date Parse
cpan install File Tail
cpan install Time HiRes
この後で本体をインストールする。
tar zxvf swatch-3.0.4.tar.gz
cd swatch-3.0.4
perl Makefile.PL
make
make test
su
make instal

インストールは簡単で、後は設定ファイルを作ればいい。
設定ファイルには幾つかのコマンドがあるのだが、詳しくは他に譲ることにする。
F&Fで作った設定ファイル(sshd検出部分のみ)はこんな感じ。
watchfor /\S\S\S .. \d\d \d\d \d\d www sshd\[\d+\] error PAM authentication error for \S+ \S+ \S+ from (\S+\.\S+\.\S+\.\S+)/
exec /home/ipfwset/ipfwset_count.pl $1 $1 swatch

最初のwatchforは/と/に挟まれた間の正規表現でログのマッチを取る。
ログの実態はJul 2 14 48 14 www sshd[65312] error PAM authentication error for illegal user july from 130.186.88.234
こんな感じになっているので、それを正規表現でマッチさせてIPアドレス部分を抜き出す格好だ。
このカッコ()で囲まれた部分の正規表現(\S+\.\S+\.\S+\.\S+)がIPアドレスを抜き出す部分で、この抜き出したIPアドレスは$1に入る。
ちなみに$0にはこのスクリプト自体の実行パスが入ってくる模様。
抜き出したIPアドレスをexecコマンドで/home/ipfwset/ipfwset_count.plに渡して実行させ、このスクリプトの中で連続アクセスカウントなどを行ってipfwをセットしている。
例えばftpでのアタックだと
Jul 2 12 01 06 www ftpd[64755] FTP LOGIN FAILED FROM mbweha.iconnect.z
こんな感じのログになるし、telnetだと
Jul 2 11 55 41 www login 2 LOGIN FAILURES FROM gatekeeper.cds.co.jp
こんな風になる。
なのでftpでのアタックに対応するwatchforは、/\S\S\S .. \d\d \d\d \d\d www sshd\[\d+\] FTP LOGIN FAILED FROM (\S+\.\S+\.\S+\.\S+)/
こんな感じになるだろう。
設定ファイルが出来上がったらコマンドラインから起動してみる。
/usr/local/bin/swatch --config-file=/etc/swatch/swatchrc --tail-file=/var/log/message
正しく正規表現に引っかかったかどうかは、設定ファイルにわざとエラーになる構文を入れておけば、そのアクションが起きたときにその旨表示されるし、もちろんwriteやechoなどのコマンドでスマートに行っても良い。
ipfwをセットするperlは適当に作ったもの。