以前も
不正アクセスのブロック対策をしていたのだけれど、あそこまでやっても大して意味もなさそうなので、今度は非常に簡単にピンポンダッシュやポートスキャンをしてくるところを遮断してしまう方法に切替えました。
手のうちを明かせば仕掛けは非常に簡単です。ピンポンダッシュはそのままsecureログに残ります。ポートスキャンはsnortを動かしていればこれもsecureログに残ります。ということでアクセスログを定期的にチェックして、ピンポンダッシュやポートスキャンしてくるアドレスをアクセス拒否しちゃうだけです。
#!/bin/sh
#secureログの場所
sshlog=/var/log/secure
#弾かれたくないIPアドレスがあったら記入
myip=aaa.bbb.ccc.ddd
while true
do
#sshの設定によってはInvalid/{print $10}の所が変わります
badip=`gawk '/Invalid/{print $10}' $sshlog | tail -1`
portscanip=`gawk '/PORTSCAN/{print $10}' $sshlog | tail -1`
/sbin/iptables -F
if [ $badip ];then
badipcount=`tail -n 50 $sshlog|gawk '/Invalid/{print $10}'-f|grep $badip|wc -l`
fi
if [ $portscanip != $myip ];then
/sbin/iptables -I INPUT 1 -s $portscanip -p all -j DROP
fi
#ピンポンダッシュの回数の上限 取り合えず5回にしてます
if [ $badipcount -gt 4 ]; then
/sbin/iptables -I INPUT 1 -s $badip -p all -j DROP
fi
#待機時間(秒) ここでは5分間にしてます。
sleep 300
done
これをバックグラウンドで走らせていれば、取り合えず直近のピンポンダッシュやポートスキャンはアクセス出来なくなります。解除は他のピンポンダッシュが来たりログがロテートされたときに行われます。
別にループさせないでクローンで動かしてもいいんですが、少しでも動作を早くしようかなということで無限ループで処理させてます。こんな簡単なスクリプトでもかなりの効果があります。
このスクリプトだと、数ヶ所から一気に悪戯されたら結構な時間悪戯されまくるなどの課題もありますが、そこまで気にする人は適当に自分で作れるよね。