うちのサーバではパケットのフィルタのためにiptablesを使っているんですが、こいつが突然狂い始めた。
ipt_recentモジュールを使ってbrute force対策を行っているわけだが、こいつの条件式が正しく動いてくれない。
関連部分を抜粋すると以下のような部分。
IPTABLES="/sbin/iptables"
$IPTABLES -N isbfssh
$IPTABLES -N bfssh
$IPTABLES -A isbfssh -m recent --name badssh --set -j LOG --log-level INFO --log-prefix "iptables SSH REJECT "
$IPTABLES -A isbfssh -j REJECT
$IPTABLES -A bfssh -p tcp --syn -m recent --name badssh --rcheck --seconds 300 -j REJECT
$IPTABLES -A bfssh -p tcp --syn -m recent --name sshconn --rcheck --seconds 60 --hitcount 5 -j isbfssh
$IPTABLES -A bfssh -p tcp --syn -m recent --name sshconn --set
斜字体の部分の判定が正しく行ってくれず、秒数もヒット数も無視して、sshconnに存在するだけで isbfssh に飛びやがる。
/proc/net/ipt_recentをチェックしながら動きを確かめたが、見事に存在するだけで条件一致に見なされる。
試しに、--secondsオプションのみの動作、--hitcountオプションのみの動作を確認してみたが、そのときは正しい動作をする。
つまり、--secondsと--hitcountの併用をするとバグった判定をするということだ。
しかし、それらを併用しないとなると、同じことをやろうとするとチェインのルールの書き方が煩雑になる。
困った。
誰か解決法知りませんか。
iptablesのバージョンは1.3.3-2。
この前apt-get upgradeしたときから狂ったんだろうが。。。原因は何なんだ。(;´Д`)
投稿者 邑波。 : 2005年11月10日 01:21