Linux系統防CC攻擊自動拉黑IP增強版(Shell指令碼)_Linux

來源:互聯網
上載者:User

前天沒事寫了一個防CC攻擊的Shell指令碼,沒想到這麼快就要用上了,原因是因為360網站衛士的緩衝黑名單突然無法過濾後台,導致WordPress無法登入!雖然,可以通過修改本地hosts檔案來解決這個問題,但是還是想暫時取消CDN加速和防護來測試下伺服器的效能最佳化及安全防護。

前天寫的Shell指令碼是加入到crontab計劃任務執行的,每5分鐘執行一次,今天實際測試了下,可還是可以用的,但是感覺5分鐘時間有點過長,無法做到嚴密防護。於是稍微改進了下代碼,現在簡單的分享下!

一、Shell代碼

#!/bin/bash#Author:ZhangGe#Desc:Auto Deny Black_IP Script.#Date:2014-11-05#取得參數$1為並發閾值,若留空則預設允許單IP最大100並發(實際測試發現,2M頻寬,十來個並發伺服器就已經無法訪問了!)if [[ -z $1 ]];then    num=50else     num=$1fi#巧妙的進入到指令碼工作目錄cd $(cd $(dirname $BASH_SOURCE) && pwd)#請求檢查、判斷及拉黑主功能函數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段的判斷功能,可根據需要自行修改以下代碼(請參考前天寫的指令碼)            #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        #存在並發超過閾值的單IP就發送郵件        if [[ `cat ./sendmail` == 1 ]];then sendmsg;fi    fi}#發郵件函數function sendmsg(){    netstat -nutlp | grep "sendmail" >/dev/null 2>&1 || /etc/init.d/sendmail start >/dev/null 2>&1    echo -e "From: 發郵件地址@qq.com\nTo:收郵件地址@qq.com\nSubject:Someone Attacking your system!!\nIts Ip is" >./message    cat ./black_ip.txt >>./message    /usr/sbin/sendmail -f 發郵件地址@qq.com -t 收郵件地址@qq.com -i <./message    >./sendmail}#間隔10s無限迴圈檢查函數while truedo     check    #每隔10s檢查一次,時間可根據需要自訂    sleep 10done

二、執行指令碼
將以上代碼儲存為deny_blackip.sh之後,使用如下命令後台執行指令碼(後面的50表示並發數,可自行調整):

複製代碼 代碼如下:

nohup ./deny_blackip.sh 50 &

執行後會出現如下資訊:

[root@Mars_Server iptables]# nohup ./deny_blackip.sh 50 & [1] 23630[root@Mars_Server iptables]# nohup: ignoring input and appending output to `nohup.out'

表示如果指令碼產生輸出資訊,將會寫入到nohup.out檔案,可以看到目前的目錄已經產生了一個空的nohup.out:

[root@Mars_Server iptables]# ll nohup.out-rw------- 1 root root 0 Nov 5 21:15 nohup.out

好了,現在你執行執行ps aux 應該可以找到如下進程:

root   23630 0.0 0.2  5060 1224 pts/0  S  21:15  0:00 /bin/bash ./deny_blackip.shroot   23964 0.0 0.0  4064  508 pts/0  S  21:19  0:00 sleep 10

①、類比CC攻擊的伺服器截圖:


②、被CC攻擊的伺服器截圖:

③、攻擊IP被拉黑後的警示郵件:

測試時,類比55個並發攻擊了20s,立馬就被拉黑了,效果很明顯!

四、附加說明

①、指令碼發郵件需要安裝sendmail,若未安裝請執行yum -y install sendmail安裝並啟動即可;

②、若要停止後台啟動並執行指令碼,只要使用ps aux命令找到該指令碼的pid線程號,然後執行kill -9 pid號即可結束;

③、關於指令碼的單IP並發限制,我實際測試同時開啟部落格多個頁面並持續重新整理,頂多也就產生十來個並發,所以單IP超過50個並發就已經有很大的問題了!當然,文章的閾值設為50也只是建議值,你可以根據需求自行調整;

④、寫這個指令碼,主要是為了彌補用crontab執行時間間隔最低只能是1分鐘的不足,可以讓CC防護更嚴密,甚至每隔1S執行一次!雖說指令碼不怎麼佔用資源,不過還是建議10s執行一次為佳,不用太過極端是吧?

⑤、對於白名單過濾,只要將白名單IP儲存到指令碼同一目錄下的white_ip.txt檔案中即可,若發現攻擊IP在白名單中,指令碼不會直接拉黑,而是發一封郵件給你,讓你自己判斷這個白名單攻擊你是為毛?如果白名單需要支援IP段,請參考我前天寫的指令碼即可。

就囉嗦這麼多,主要還是自己用,然後分享出來給有需要的人一些參考,個人vps伺服器雖說很少有人攻擊,但是基本的安裝防護還是必須要做的!希望本文對你有所協助!

原文:http://zhangge.net/4649.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.