iptables での対策

残念でした - JULYの日記

どうも最近、ssh に対するブルートフォース・アタックがはやっているらしい。前に、1時間半ものの間、アタックされていいたのを書いたが、今度は 7/21 18:56:24(日本時間)から 23:48:24、約5時間に渡ってずーっと、ムダなアタックをしていました。たぶんツールは同じで、アタックに使う辞書が豊富になってきて、なんだろうけど、繰り返しますが、我が家の ssh サーバは公開鍵認証以外お断りなので、単なるログイン認証を繰り返しても、永遠に入れることはありませんので、あしからず。

ただ、こうも長時間にわたって続けられると、こいつのために帯域を取られているというのが癪に障る。別に、実害は無いんだけど、やはり気分が悪い。OpenSSH で認証に失敗した場合に、だんだん認証結果のレスポンスが遅くなるような仕組みがあれば、それを設定したいのだが、認証部分を PAM に渡して、PAM 側で遅延を発生させる方法はあるみたいだけど、公開鍵認証では出来ないみたい。

で、いろいろ探した結果、iptables で落とす方法で良い例を発見。http://www.musicae.ath.cx/diary/?200506c&to=200506272#200506272 に書かれている方法で、

#!/bin/sh
IPTABLES="/sbin/iptables"
EXTIF="eth0" 

$IPTABLES -N LSSHBRUTEFORCE
$IPTABLES -A LSSHBRUTEFORCE -m recent --name badSSH --set -j LOG --log-level DEBUG --log-prefix "iptables SSH REJECT "
$IPTABLES -A LSSHBRUTEFORCE -j REJECT

$IPTABLES -N SSHACCEPT
$IPTABLES -A SSHACCEPT -p tcp ! --syn -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A SSHACCEPT -p tcp --syn -m recent --name badSSH --rcheck --seconds 300 -j REJECT
$IPTABLES -A SSHACCEPT -p tcp --syn -m recent --name sshconn --rcheck --seconds 60 --hitcount 5 -j LSSHBRUTEFORCE
$IPTABLES -A SSHACCEPT -p tcp --syn -m recent --name sshconn --set
$IPTABLES -A SSHACCEPT -p tcp --syn -j ACCEPT

$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j SSHACCEPT

これを実行して、service iptables save で設定を保存。お見事! オリジナルの作者に感謝!!

実は、先の5時間近いアタックは、このフィルタを設定して止めたので、放っておいたら、さらに記録を伸ばしていたかも(^^;