Linux系統(tǒng)防CC攻擊自動(dòng)拉黑IP增強(qiáng)版(Shell腳本)
前天沒事寫了一個(gè)防CC攻擊的Shell腳本,沒想到這么快就要用上了,原因是因?yàn)?60網(wǎng)站衛(wèi)士的緩存黑名單突然無法過濾后臺(tái),導(dǎo)致WordPress無法登錄!雖然,可以通過修改本地hosts文件來解決這個(gè)問題,但是還是想暫時(shí)取消CDN加速和防護(hù)來測(cè)試下服務(wù)器的性能優(yōu)化及安全防護(hù)。
前天寫的Shell腳本是加入到crontab計(jì)劃任務(wù)執(zhí)行的,每5分鐘執(zhí)行一次,今天實(shí)際測(cè)試了下,可還是可以用的,但是感覺5分鐘時(shí)間有點(diǎn)過長(zhǎng),無法做到嚴(yán)密防護(hù)。于是稍微改進(jìn)了下代碼,現(xiàn)在簡(jiǎn)單的分享下!
一、Shell代碼
#!/bin/bash #Author:ZhangGe #Desc:Auto Deny Black_IP Script. #Date:2014-11-05 #取得參數(shù)$1為并發(fā)閾值,若留空則默認(rèn)允許單IP最大100并發(fā)(實(shí)際測(cè)試發(fā)現(xiàn),2M帶寬,十來個(gè)并發(fā)服務(wù)器就已經(jīng)無法訪問了!) if [[ -z $1 ]];then num=50 else num=$1 fi #巧妙的進(jìn)入到腳本工作目錄 cd $(cd $(dirname $BASH_SOURCE) && pwd) #請(qǐng)求檢查、判斷及拉黑主功能函數(shù) function check(){ iplist=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'` if [[ ! -z $iplist ]]; then >./iplist/black_ip.txt for black_ip in $iplist do #白名單過濾中已取消IP段的判斷功能,可根據(jù)需要自行修改以下代碼(請(qǐng)參考前天寫的腳本) #exclude_ip=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'` #grep -q $exclude_ip ./white_ip.txt grep -q $black_ip ./white_ip.txt if [[ $? -eq 0 ]];then echo "$black_ip (white_ip)" >>./black_ip.txt else echo $black_ip >>./black_ip.txt iptables -nL | grep $black_ip ||(iptables -I INPUT -s $black_ip -j DROP & echo "$black_ip `date +%Y-%m-%H:%M:%S`">>./iplist/denylog.txt & echo 1 >./sendmail) fi done #存在并發(fā)超過閾值的單IP就發(fā)送郵件 if [[ `cat ./sendmail` == 1 ]];then sendmsg;fi fi } #發(fā)郵件函數(shù) function sendmsg(){ netstat -nutlp | grep "sendmail" >/dev/null 2>&1 || /etc/init.d/sendmail start >/dev/null 2>&1 echo -e "From: 發(fā)郵件地址@qq.com\nTo:收郵件地址@qq.com\nSubject:Someone Attacking your system!!\nIts Ip is" >./message cat ./black_ip.txt >>./message /usr/sbin/sendmail -f 發(fā)郵件地址@qq.com -t 收郵件地址@qq.com -i <./message >./sendmail } #間隔10s無限循環(huán)檢查函數(shù) while true do check #每隔10s檢查一次,時(shí)間可根據(jù)需要自定義 sleep 10 done
二、執(zhí)行腳本
將以上代碼保存為deny_blackip.sh之后,使用如下命令后臺(tái)執(zhí)行腳本(后面的50表示并發(fā)數(shù),可自行調(diào)整):
nohup ./deny_blackip.sh 50 &
執(zhí)行后會(huì)出現(xiàn)如下信息:
[root@Mars_Server iptables]# nohup ./deny_blackip.sh 50 & [1] 23630 [root@Mars_Server iptables]# nohup: ignoring input and appending output to `nohup.out'
表示如果腳本產(chǎn)生輸出信息,將會(huì)寫入到nohup.out文件,可以看到當(dāng)前目錄已經(jīng)生成了一個(gè)空的nohup.out:
[root@Mars_Server iptables]# ll nohup.out -rw------- 1 root root 0 Nov 5 21:15 nohup.out
好了,現(xiàn)在你執(zhí)行執(zhí)行ps aux 應(yīng)該可以找到如下進(jìn)程:
root 23630 0.0 0.2 5060 1224 pts/0 S 21:15 0:00 /bin/bash ./deny_blackip.sh root 23964 0.0 0.0 4064 508 pts/0 S 21:19 0:00 sleep 10
①、模擬CC攻擊的服務(wù)器截圖:
②、被CC攻擊的服務(wù)器截圖:
③、攻擊IP被拉黑后的報(bào)警郵件:
測(cè)試時(shí),模擬55個(gè)并發(fā)攻擊了20s,立馬就被拉黑了,效果很明顯!
四、附加說明
①、腳本發(fā)郵件需要安裝sendmail,若未安裝請(qǐng)執(zhí)行yum -y install sendmail安裝并啟動(dòng)即可;
②、若要停止后臺(tái)運(yùn)行的腳本,只要使用ps aux命令找到該腳本的pid線程號(hào),然后執(zhí)行kill -9 pid號(hào)即可結(jié)束;
③、關(guān)于腳本的單IP并發(fā)限制,我實(shí)際測(cè)試同時(shí)打開博客多個(gè)頁(yè)面并持續(xù)刷新,頂多也就產(chǎn)生十來個(gè)并發(fā),所以單IP超過50個(gè)并發(fā)就已經(jīng)有很大的問題了!當(dāng)然,文章的閾值設(shè)為50也只是建議值,你可以根據(jù)需求自行調(diào)整;
④、寫這個(gè)腳本,主要是為了彌補(bǔ)用crontab執(zhí)行時(shí)間間隔最低只能是1分鐘的不足,可以讓CC防護(hù)更嚴(yán)密,甚至每隔1S執(zhí)行一次!雖說腳本不怎么占用資源,不過還是建議10s執(zhí)行一次為佳,不用太過極端是吧?
⑤、對(duì)于白名單過濾,只要將白名單IP保存到腳本同一目錄下的white_ip.txt文件中即可,若發(fā)現(xiàn)攻擊IP在白名單中,腳本不會(huì)直接拉黑,而是發(fā)一封郵件給你,讓你自己判斷這個(gè)白名單攻擊你是為毛?如果白名單需要支持IP段,請(qǐng)參考我前天寫的腳本即可。
就啰嗦這么多,主要還是自己用,然后分享出來給有需要的人一些參考,個(gè)人vps服務(wù)器雖說很少有人攻擊,但是基本的安裝防護(hù)還是必須要做的!希望本文對(duì)你有所幫助!
相關(guān)文章
詳解ubuntu14.04如何設(shè)置靜態(tài)IP的方法
本篇文章主要介紹了ubuntu14.04如何設(shè)置靜態(tài)IP的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Linux查看分區(qū)文件系統(tǒng)類型的方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Linux查看分區(qū)文件系統(tǒng)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08在Ubuntu中實(shí)現(xiàn)人臉識(shí)別登錄的完整步驟
這篇文章主要給大家介紹了關(guān)于在Ubuntu中實(shí)現(xiàn)人臉識(shí)別登錄的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Linux下利用python實(shí)現(xiàn)語音識(shí)別詳細(xì)教程
早期語音識(shí)別系統(tǒng)僅能識(shí)別單個(gè)講話者以及只有約十幾個(gè)單詞的詞匯量。現(xiàn)代語音識(shí)別系統(tǒng)已經(jīng)取得了很大進(jìn)步,對(duì)于 Python 使用者而言,一些語音識(shí)別服務(wù)可通過 API 在線使用,且其中大部分也提供了 Python SDK,感興趣的小伙伴可以參考閱讀2023-03-03