對於web伺服器來說,出現最普遍的問題就是**訪問慢甚至訪問不到,到伺服器上檢視後得出的結論是,這個**被cc攻擊了。什麼是cc攻擊?cc攻擊屬於ddos攻擊的一種,攻擊者會利用大量被劫持的「肉雞」對攻擊目標**發起請求,並且頻率很快,這樣會導致目標**的伺服器承受不住請求壓力而癱瘓。
本案例就是要自動封ip和解ip,具體需求如下:
1)每分鐘分析一次訪問日誌 /data/logs/access_log ,日誌片段如下:
2)把訪問量高於100的ip封掉;
3)封過的ip都要記錄到乙個日誌檔案中;
4)每隔30分鐘檢查一次被封的ip,把沒有請求或者請求很少的ip解封;
5)解封的ip記錄到另外乙個日誌檔案中。
#!/bin/bash
#把訪問量很大的ip封掉,如果30分鐘內被封ip的請求幾乎沒有就解封ip
#定義1分鐘以前的時間,用於過濾1分鐘以前的日誌
t1=`
date -d "-1 min" +%y:%h:%m`
log=/data/logs/access_log
block_ip(
)' /tmp/tmp_last_min.log |
sort -n |
uniq -c |
sort -n |
awk'$1>100 '
> /tmp/bad_ip.list
#計算ip的數量
n=`wc -l /tmp/bad_ip.list |
awk''
`
#當ip數大於0時,才會用iptables封掉它if[
$n -ne 0 ]
;then
for ip in
`cat /tmp/bad_ip.list`
doiptables -i input -s $ip -j reject
done
#將這些被封ip記錄到日誌裡
echo
"`date
` 封掉的ip有:"
>> /tmp/block_ip.log
cat /tmp/bad_ip.list >> /tmp/block_ip.log
fi}unblock_ip()'
> /tmp/good_ip.list
n=`wc -l /tmp/good_ip.list |
awk''
`
if[$n -ne 0 ]
;then
for ip in
`cat /tmp/good_ip.list`
doiptables -d input -s $ip -j reject
done
echo
"`date
` 解封的ip有:"
>> /tmp/unblock_ip.log
cat /tmp/good_ip.list >> /tmp/unblock_ip.log
fi#當解封完白名單ip後,將計數器清零,進入下乙個技術週期
iptables -z
}#取當前時間的分鐘數t=`
date +%m`
#當分鐘數為00或30時(即每隔30分鐘),執行解封ip的函式,其他時間只執行封ip的函式if[
$t==
"00"]||
[$t=="30"];
then
unblock_ip
block_ip
else
block_ip
fi
增加定時任務:
* * * * * /bin/bash /usr/local/sbin/blockip.sh &
>/tmp/blockip.log
使用iptables自動封IP的Shell指令碼
此指令碼用於分析統計secure日記檔案,對ssh登入錯誤次數較多的ip用iptables封掉,可以防止ssh被暴力破解。bin bash created by tenji in 2014 10 22 num 10 上限 for i in awk failed var log secure sort...
爬蟲防封IP
當抓取資料逐漸增大時,伺服器的負荷會加大,會直接封掉來訪ip 採取措施 1.建立請求頭部資訊 建立請求頭 strhtml requests.get url,headers headers 使用get方式,獲取網頁資料 2.我們就只修改user agent還不夠,爬蟲1秒鐘可以抓取很多,通過統計ip的...
IP位址自動封與解封的shell指令碼
本指令碼學習與阿銘的指令碼課程。用於防止公司 被ddos攻擊時,封禁 肉機 的ip位址。共分為以下步驟 1 每分鐘分析一次訪問日誌 data logs access log。2 把訪問量超過100的ip給封掉。3 將封過的ip位址全部記錄到乙個日誌log中。4 每隔一段時間檢查一次被封的ip,將不在...