寶塔面板免費(fèi)版本足夠用了,所以我們從來(lái)也不去折騰什么開(kāi)新版本,當(dāng)然了土豪可以購(gòu)買(mǎi)專(zhuān)業(yè)版,但是對(duì)于小編來(lái)說(shuō),免費(fèi)版真的是足夠好用,如果我們動(dòng)手能力稍微強(qiáng)一點(diǎn),那么使用起來(lái)和專(zhuān)業(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軟件開(kāi)發(fā),南漳h5微信小程序開(kāi)發(fā)搭建,南漳網(wǎng)站營(yíng)銷(xiāo)推廣歡迎南漳等地區(qū)企業(yè)咨詢(xún)關(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)然,如果我們是寶塔用戶(hù)的話,那設(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)開(kāi)啟了 Real IP 模塊,如圖:
如果你的寶塔面板沒(méi)有開(kāi)啟這個(gè)模塊,可以按照上文就設(shè)置。這篇文章我們就說(shuō)說(shuō)如何利用 shell 腳本,自動(dòng)拉黑惡意 IP 到 Cloudflare 防火墻,自動(dòng)切換 5 秒盾防 CC 攻擊。
一:定位惡意 IP
#/bin/bash
#日志文件,如不是寶塔面板可以根據(jù)需要改成你自己的路徑
logfile=/www/wwwlogs/
last_minutes=1
#開(kāi)始時(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
關(guān)于寶塔面板的計(jì)劃任務(wù)如何設(shè)置,就不多說(shuō)了,我們看看如何把上面的 ip 定位的腳本放在計(jì)劃任務(wù)中。點(diǎn)擊計(jì)劃任務(wù)選擇 Shell 腳本即可如圖:
這個(gè)腳本,我們需要測(cè)試是否可用,我們?cè)O(shè)置的是每隔 3 分鐘執(zhí)行一次,所以我們可以自己手動(dòng)不停刷新自己的網(wǎng)站或者自己的測(cè)試站點(diǎn)即可。我們看看最終的效果,如圖:
幾乎無(wú)時(shí)無(wú)刻沒(méi)有掃描的,所以還是很有必要做一個(gè)防御的。
#!/bin/bash
# Author: Zhys
# Date : 2018
# 填Cloudflare Email郵箱
CFEMAIL="daniao@gmail.com"
# 填Cloudflare API key
CFAPIKEY="xxxxxxxxxxxxxxxx"
# 填Cloudflare Zones ID 域名對(duì)應(yīng)的ID
ZONESID="xxxxxxxxxxxxxxxxxxxx"
# /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 /data/wwwlogs/black.txt
四:自動(dòng)找出惡意 IP 并添加到防火墻 我們用寶塔面板當(dāng)然是越省事越好,我們可以把定位 ip 和封鎖 ip 到 CF 防火墻合并在一起。 #/bin/bash #日志文件,你需要改成你自己的路徑 logfile=/www/wwwlogs/ last_minutes=1 #開(kāi)始時(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)開(kāi)啟 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://redsoil1982.com.cn/article0/chjjio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、電子商務(wù)、微信公眾號(hào)、品牌網(wǎng)站建設(shè)、云服務(wù)器、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)