sshへの総当たり攻撃を防ぐ。

なんか最近話題として流行っている様なのでメモ
今はお買い物以外出かけない状態(通称専業主婦)なので外に向けてsshのポートをあけてないから防ぐも何もなんですが、ポートをあけてた頃はswatchでログを監視してました。(そのときはNetBSDだったのでipfだったのだけど)
で、swatchrcに

watchfor /Illegal user/
exec echo $10 << /root/conf/ignore_ipaddr
exec /root/conf/swatch_ipf.sh $10

watchfor /Did not receive identification string/
exec echo 'block in log quick from $12 to any group 100' < /root/conf/swatch_ipf_deny
exec /sbin/ipf -f /root/conf/swatch_ipf_deny

swatch_ipf.sh

#!/bin/sh
FILENAME=/root/conf/ignore_ipaddr
NUM=`grep $1 $FILENAME | wc -l`
if [ $NUM -gt 3 ]
then
echo block in log quick from $1 to any group 100 < /root/conf/swatch_ipf_deny
ipf -f /root/conf/swatch_ipf_deny
fi

とかやってました。
たまに自分でユーザ名を間違える事もあるのでIllegal userは4回記録されたら拒否。
Did not receive identification stringの方はパスワード認証が失敗したときに出るログの様なので一発で拒否アドレス入りするようにしています。(パスワード認証は許可していないので自分のアクセスでこのログが出る事がないはずだから)
始めた頃は

# echo block in log quick from $1 to any group 100 | /usr/bin/mail -s "SSH ignore Block by swatch" ケータイのメールアドレス

とかやっていたのだけど、あまりにも多いのでやめました

公開鍵認証しか許可してないならここまでする必要も無いのかもしれないけど、ログがぐちゃぐちゃすると見づらいので早めに止めておきたいのです。
夏にはまた動き回る予定なので、FreeBSD+ipfw用に書き換えておかないといけないなぁ