Linux lastb
コマンドを使用して、私のサーバーが世界中のさまざまなIPからブルートフォース攻撃を受けていることがわかりました。 lastb
でブルートフォース攻撃者を検出し、iptables
でブロックするスクリプトを開発しました。スクリプトは次のとおりです。
#!/bin/bash
cd /root/
windowSize=100
tresh=10
lastb | head -n $windowSize | awk '{print $3}' | uniq -c > .ips
nlines=`wc .ips -l | awk '{print $1}'`
END=`expr $nlines - 1 `
for i in `seq 0 $END`;
do
range=`expr $nlines - $i`
count=`tail .ips -n $range | head -n 1 | awk '{print $1}'`
if [ $count -gt $tresh ] ; then
IP=`tail .ips -n $range | head -n 1 | awk '{print $2}'`
if [ ! -z .blips ] ; then
touch .blips
fi ;
blocked=`cat .blips | grep $IP -c`
if [ $blocked = '0' ] ; then
echo blocking $IP
iptables -A INPUT -s $IP -j DROP
echo $IP >> .blips
fi ;
fi;
done
rm .ips
このスクリプトをcrondで1時間ごとに実行すると、問題が発生する可能性がありますか?
はい、システムに接続するIPアドレスが除外されていることを確認するための対策を講じていないため、システムから自分を締め出すことができます。
より良い解決策は、インストールすることです fail2ban これはあなたがやろうとしていることをするために広く使われています。
提案された解決策は、IPTABLESを保存しないという意味で欠けている(または賢い)ため、IPTABLESに加えられた変更は次回の起動時に失われます。
ブロックされたIPをコミットして保存する必要があります:/ sbin/service iptables save
変更が完了しました/ sbin/service iptables save rm .ips
一方、システムは自動化されているため、.blipsの変更を確認した後、手動でのみコミットするのが賢明かもしれません。
DenyHostsまたはFail2banは、ほとんどの自家製カスタムスクリプトよりもうまく機能します。