4 自動封IP和解IP

2021-09-08 21:47:42 字數 2028 閱讀 1318

對於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,將不在...