第一個指令碼是通過尋找日誌中訪問次數過多的ip,並用iptables屏蔽。
#!/bin/bash
cur=`date +%H%M%S`
becur=`date -d "1 minute ago" +%H%M%S`
badip=`tail -n 10000 /home/www.centos.bz/log/access.log | egrep -v "\.(gif|jpg|jpeg|png|css|js)" | awk -v a="$becur" -v b="$cur" -F [' ':] '{t=$5$6$7;if (t>=a && t<=b) print $1}' | sort | uniq -c | awk '{if ($1>=20) print $2}'`
if [ ! -z "$badip" ];then
for ip in $badip;
do
if test -z "`/sbin/iptables -nL | grep $ip`";then
/sbin/iptables -I INPUT -s $ip -j DROP
fi
done
fi
將此代碼儲存為ban.sh,加入cronjob使每分鐘執行一次。
此指令碼的作用是:利用iptables屏蔽每分鐘訪問頁面超過20的IP,這些頁面已經排除圖片,css,js等靜態檔案。
第二個指令碼是通過在日誌中尋找cc攻擊的特徵進行屏蔽。
#!/bin/bash
keyword="cc-atack"
badip=`tail -n 5000 /home/www.centos.bz/log/access.log | grep "$keyword" | awk '{print $1}' | sort | uniq -c | sort -nr | awk '{print $2}'`
if [ ! -z "$badip" ];then
for ip in $badip;
do
if test -z "`/sbin/iptables -nL | grep $ip`";then
/sbin/iptables -I INPUT -s $ip -j DROP
fi
done
fi
keyword則是日誌中cc的特徵,替換成有效即可。