« krfilter (Windows で) | メイン | swatch でログを監視し煩い host をハジく/VineLinux にて(その2~4) »

2005年12月12日

swatch でログを監視し煩い host をハジく/VineLinux にて(その1) [ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]

krfilter を導入しても、APNIC なホストから煩い connection はいっぱいくるのです。
sshd のログに Invalid user とか Failed password とか並びまくり。

鬱陶しいので、swatch にログ監視させて、10回失敗した IP アドレスを iptables でハジくようにしてみた。
もちろん、krfilter とも併用。

その1,では、 iptables 設定用スクリプトの仕組みを備忘録として。
OUTPUT 側は省略で。

iptables の流れとしては $IPADDR にグローバルIPアドレス、$EXTERNAL_IF にインターフェイス名(eth0とか)が入ってるとして、 shell script で、以下のようなノリで設定している。

0.使う -N 設定
以下のとおり使ってます。

iptables -N block_in
iptables -N block

iptables -N KRFILTER
iptables -N KRFILTERED

iptables -N check_attack
iptables -N block_attack

1. INPUT
 デフォルトは受け付けるルールにしている。
 ログも残さずハジくヤツはここでハジく。
 ログも残さず受け付けるヤツはここで受け容れる。(-i lo とか)
 該当しなければ 常に block_in に飛ぶ。

2,block_in と block
 怪しげなヤツ(外からの local ip address source なパケットなど)はログを残してサヨナラする。
 そうでなくて、--state NEW のものは、KRFILTER に飛ばす。
 KRFILTER に飛ばないヤツは(途中でも蹴落としたいので)NEWかどうかに関わらず check_attack に飛ばす。

#block_in の一部 (netbios 関連は省略)
iptables -A block_in -i $EXTERNAL_IF -s 10.0.0.0/8 -j block
iptables -A block_in -i $EXTERNAL_IF -s 172.16.0.0/12 -j block
iptables -A block_in -i $EXTERNAL_IF -s 192.168.0.0/16 -j block
iptables -A block_in -i $EXTERNAL_IF -s $IPADDR -j block # self source

iptables -A block_in -m state --state NEW -j KRFILTER
iptables -A block_in -j check_attack

# block
iptables -A block -j LOG --log-level debug --log-prefix 'iptables: block: '
iptables -A block -j DROP


3.KRFILTER と KRFILTERED
KRFILTER は、全て 1つ前の投稿で書いた、ヨソ様のスクリプト(ALL.sh.txt)で設定するが、設定したあとに、1コだけ追加する。

sh /path/ALL.sh.txt
iptables -A KRFILTER -j check_attack

これは、krfilter でひっかからなかったモノは、全て check_attack にゆき、そこも通過したら accept される。

KRFILTERED は、 block とほぼ同じなので省略。(--log-prefix のみかえてある)

4.check_attack と block_attack
check_attack は、別途 perl script (後述その3)を走らせて、それで設定している。
check_attack にひっかかったら、 block_attack に飛ぶ。
block_attack は、 block とほぼ同じなので省略。(--log-prefix のみかえてある)

ここを抜けたらようやくアクセスできる。


で、あとは

その2.attack_block.pl
swatch が、IPアドレスをパラメータに呼び出すスクリプト。
当該IPアドレスから、今、怪しいアクセスがありました! という通知の処理。
IPアドレスごとのアクセス失敗回数をファイルに記録しておくようにしてある。
さらに IPアドレスごとの、アクセス失敗回数を記録し、回数が上限を超えたら、ここで iptables で拒絶設定する。(check_attack に この IPアドレスなら -j block_attack へ、というルール)

その3.attack_block_again.pl
swatch で記録したアクセスブロックしたい IP アドレスリスト(ファイルに記録してあるもの)を参照して、 check_attack を再設定する perl スクリプト。

その4.swatch そのもの(/var/log/secure が更新されたら、その2のスクリプトを走らせるための設定)

を仕掛ければヨシと。

とりあえず、今日はここまで書いておこう(汗)

投稿者 JK : 2005年12月12日 01:53

トラックバック

このエントリーのトラックバックURL:
http://om.pizzica.to/mt-tb.cgi/39