寶塔面板自動(dòng)拉黑惡意IP到Cloudflare防火墻

寶塔面板免費(fèi)版本足夠用了,所以我們從來(lái)也不去折騰什么開新版本,當(dāng)然了土豪可以購(gòu)買專業(yè)版,但是對(duì)于小編來(lái)說(shuō),免費(fèi)版真的是足夠好用,如果我們動(dòng)手能力稍微強(qiáng)一點(diǎn),那么使用起來(lái)和專業(yè)版也是沒(méi)有什么差別的,而且都是自己動(dòng)手,這樣對(duì)于提高自己的服務(wù)器水平還是很有幫助的。

成都創(chuàng)新互聯(lián)公司主營(yíng)南漳網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app軟件開發(fā),南漳h5微信小程序開發(fā)搭建,南漳網(wǎng)站營(yíng)銷推廣歡迎南漳等地區(qū)企業(yè)咨詢

關(guān)于 Cloudflare 也講過(guò)不少了,不過(guò)今天還是要說(shuō)的是它,如果我們的網(wǎng)站遭遇 CC 和 DDoS 攻擊時(shí),我們可以啟用 Cloudflare 經(jīng)典的 5 秒盾防攻擊,如果把握不了攻擊的頻率的話,可以設(shè)置一個(gè)定時(shí)任務(wù),當(dāng)系統(tǒng)負(fù)載超過(guò)某一個(gè)值(一般來(lái)攻擊會(huì)導(dǎo)致系統(tǒng)負(fù)載爆增),調(diào)用 Cloudflare API 啟用 5 秒盾。

當(dāng)然,如果我們是寶塔用戶的話,那設(shè)置起來(lái)會(huì)更簡(jiǎn)單一點(diǎn),但是當(dāng)我們啟用 Cloudflare CDN 時(shí)候,需要在 Nginx 中啟用 Real IP 模塊,然后利用腳本分析網(wǎng)站日志,從日志中搜集異常 IP,然后使用 Cloudflare API 批量將惡意 IP 添加到 Cloudflare 的防火墻當(dāng)中。不過(guò)看這篇文章之前,我們需要了解下,如何啟用 Real IP 模塊。不過(guò)寶塔面板 6.9.0 默認(rèn)是已經(jīng)開啟了 Real IP 模塊,如圖:

寶塔面板自動(dòng)拉黑惡意IP到Cloudflare防火墻  

如果你的寶塔面板沒(méi)有開啟這個(gè)模塊,可以按照上文就設(shè)置。這篇文章我們就說(shuō)說(shuō)如何利用 shell 腳本,自動(dòng)拉黑惡意 IP 到 Cloudflare 防火墻,自動(dòng)切換 5 秒盾防 CC 攻擊。

一:定位惡意 IP

我們需要找到惡意 ip,可以利用腳本分析在一分鐘單個(gè) IP 訪問(wèn)的頻率,超過(guò)一定的頻率(一般來(lái)正常的訪問(wèn),一分鐘內(nèi)應(yīng)該不超過(guò) 60 次,你可以設(shè)置為更?。凑J(rèn)定為惡意 IP。寶塔面板的 shell 腳本如下:

  1. #/bin/bash
  2. #日志文件,如不是寶塔面板可以根據(jù)需要改成你自己的路徑
  3. logfile=/www/wwwlogs/
  4. last_minutes=1
  5. #開始時(shí)間1分鐘之前(這里可以修改,如果要幾分鐘之內(nèi)攻擊次數(shù)多少次,這里可以自定義)
  6. start_time= date +"%Y-%m-%d %H:%M:%S" -d '-1 minutes'
  7. echo $start_time
  8. #結(jié)束時(shí)間現(xiàn)在
  9. stop_time=`date +"%Y-%m-%d %H:%M:%S"`
  10. echo $stop_time
  11. cur_date="`date +%Y-%m-%d`"
  12. echo $cur_date
  13. #過(guò)濾出單位之間內(nèi)的日志并統(tǒng)計(jì)最高ip數(shù),請(qǐng)?zhí)鎿Q為你的日志路徑
  14. tac $logfile/www.daniao.org.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($2,RSTART+14,21);
  15. if(t>=st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10
  16. ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
  17. ip=`cat $logfile/log_ip_top10 | awk '{if($1>2)print $2}'`
  18. # 單位時(shí)間[1分鐘]內(nèi)單ip訪問(wèn)次數(shù)超過(guò)2次的ip記錄入black.txt,這里為了測(cè)試設(shè)置了2,你需要改成其它的數(shù)字
  19. for line in $ip
  20. do
  21. echo $line >> $logfile/black.txt
  22. echo $line
  23. # 這里還可以執(zhí)行CF的API來(lái)提交數(shù)據(jù)到CF防火墻
  24.   done

二:計(jì)劃任務(wù)

關(guān)于寶塔面板的計(jì)劃任務(wù)如何設(shè)置,就不多說(shuō)了,我們看看如何把上面的 ip 定位的腳本放在計(jì)劃任務(wù)中。點(diǎn)擊計(jì)劃任務(wù)選擇 Shell 腳本即可如圖:

寶塔面板自動(dòng)拉黑惡意IP到Cloudflare防火墻 

這個(gè)腳本,我們需要測(cè)試是否可用,我們?cè)O(shè)置的是每隔 3 分鐘執(zhí)行一次,所以我們可以自己手動(dòng)不停刷新自己的網(wǎng)站或者自己的測(cè)試站點(diǎn)即可。我們看看最終的效果,如圖:

寶塔面板自動(dòng)拉黑惡意IP到Cloudflare防火墻

幾乎無(wú)時(shí)無(wú)刻沒(méi)有掃描的,所以還是很有必要做一個(gè)防御的。

三:添加 IP 到 CF 防火墻

使用以下代碼就可以將惡意 IP 批量添加到 Cloudflare 的防火墻了,記得替換為你的 Cloudflare API。

  1.  #!/bin/bash
  2.     # Author: Zhys
  3.     # Date  : 2018
  4.     # 填Cloudflare Email郵箱
  5.     CFEMAIL="daniao@gmail.com"
  6.     # 填Cloudflare API key
  7.     CFAPIKEY="xxxxxxxxxxxxxxxx"
  8.     # 填Cloudflare Zones ID 域名對(duì)應(yīng)的ID
  9.     ZONESID="xxxxxxxxxxxxxxxxxxxx"
  10.     # /www/wwwlogs/black.txt存放惡意攻擊的IP列表
  11.     # IP一行一個(gè)。
  12.     IPADDR=$(</www/wwwlogs/black.txt)
  13.     # 循環(huán)提交 IPs 到 Cloudflare  防火墻黑名單
  14.     # 模式(mode)有 block, challenge, whitelist, js_challenge
  15.     for IPADDR in ${IPADDR[@]}; do
  16.     echo $IPADDR
  17.     curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules" \
  18.       -H "X-Auth-Email: $CFEMAIL" \
  19.       -H "X-Auth-Key: $CFAPIKEY" \
  20.       -H "Content-Type: application/json" \
  21.       --data '{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CC Attatch"}'
  22.     done
  23.     # 刪除 IPs 文件收拾干凈
  24.     rm -rf /data/wwwlogs/black.txt
四:自動(dòng)找出惡意 IP 并添加到防火墻

我們用寶塔面板當(dāng)然是越省事越好,我們可以把定位 ip 和封鎖 ip 到 CF 防火墻合并在一起。

#/bin/bash
    #日志文件,你需要改成你自己的路徑
    logfile=/www/wwwlogs/
    last_minutes=1
    #開始時(shí)間1分鐘之前(這里可以修改,如果要幾分鐘之內(nèi)攻擊次數(shù)多少次,這里可以自定義)
    start_time= date +"%Y-%m-%d %H:%M:%S" -d '-1 minutes'
    echo $start_time
    #結(jié)束時(shí)間現(xiàn)在
    stop_time=`date +"%Y-%m-%d %H:%M:%S"`
    echo $stop_time
    cur_date="`date +%Y-%m-%d`"
    echo $cur_date
    #過(guò)濾出單位之間內(nèi)的日志并統(tǒng)計(jì)最高ip數(shù),請(qǐng)?zhí)鎿Q為你的日志路徑
    tac $logfile/www.daniao.org.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($2,RSTART+14,21);
    if(t>=st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10
    ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
    ip=`cat $logfile/log_ip_top10 | awk '{if($1>2)print $2}'`
    # 單位時(shí)間[1分鐘]內(nèi)單ip訪問(wèn)次數(shù)超過(guò)2次的ip記錄入black.txt,這里為了測(cè)試設(shè)置了2,你需要改成其它的數(shù)字
    for line in $ip
    do
    echo $line >> $logfile/black.txt
    echo $line
    # 這里還可以執(zhí)行CF的API來(lái)提交數(shù)據(jù)到CF防火墻
    done
    # 填Cloudflare Email郵箱
    CFEMAIL="xxx@xxx.com"
    # 填Cloudflare API key
    CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    # 填Cloudflare Zones ID 域名對(duì)應(yīng)的ID
    ZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    # /www/wwwlogs/black.txt存放惡意攻擊的IP列表
    # IP一行一個(gè)。
    IPADDR=$(</www/wwwlogs/black.txt)
    # 循環(huán)提交 IPs 到 Cloudflare  防火墻黑名單
    # 模式(mode)有 block, challenge, whitelist, js_challenge
    for IPADDR in ${IPADDR[@]}; do
    echo $IPADDR
    curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules" \
      -H "X-Auth-Email: $CFEMAIL" \
      -H "X-Auth-Key: $CFAPIKEY" \
      -H "Content-Type: application/json" \
      --data '{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CC Attatch"}'
    done
    # 刪除 IPs 文件收拾干凈
     rm -rf /www/wwwlogs/black.txt
     
     這里我們可以編輯在第二中編輯的計(jì)劃任務(wù)的 Shell 腳本重新添加下即可。
     如果被猛烈的 CC 可以設(shè)置成每 1 分鐘就執(zhí)行一次,這里測(cè)試是設(shè)置成每 3 分鐘執(zhí)行一次腳本。
     自動(dòng)添加惡意 IP 到 CloudFlare 防火墻的效果如下:
     
     
這樣我們就實(shí)現(xiàn)了 CC 攻擊臨時(shí)救急的半自動(dòng)流量清洗的功能。


這個(gè)錯(cuò)誤頁(yè)面提示,該網(wǎng)站所有者已經(jīng)禁止了你的 ip 地址,額,總的來(lái)說(shuō)效果還不錯(cuò)。

五:總結(jié)
如果這時(shí)候真有惡意攻擊了,我們可以手動(dòng)開啟 5 秒盾腳本防 CC 攻擊,這樣就實(shí)現(xiàn)了一個(gè)遭受攻擊從來(lái)實(shí)現(xiàn)流量清洗的功能。
Cloudflare 真的是一個(gè)非常好用的防御 DDos 和 CC 攻擊的工具,免費(fèi)版本的 Cloudflare 結(jié)合 API 可以實(shí)現(xiàn)更加靈活的功能,
對(duì)于普通的防御足夠自己使用了。當(dāng)然了,寶塔面板結(jié)合 Cloudflare 使用起來(lái)也更方便和更簡(jiǎn)單。
如果你對(duì) Cloudflare 的設(shè)置不是太熟悉,可以看看之前的文章。平時(shí)我們的域名雖然不用 Cloudflare 的解析服務(wù),
但是不妨在解析放在上面,如果遇到問(wèn)題可以快速的切換過(guò)去。

當(dāng)前文章:寶塔面板自動(dòng)拉黑惡意IP到Cloudflare防火墻
文章路徑:http://muchs.cn/article0/chjjio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、電子商務(wù)、微信公眾號(hào)、品牌網(wǎng)站建設(shè)、云服務(wù)器、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)