banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

cloudflare自動開啟驗證碼

【原創文章】應某些朋友的反饋,說是現在很多攻擊平台和軟體,已經可以隨意打穿 cf 的五秒盾,因此以前使用的 cloudflare 五秒盾腳本就不那麼管用了,對於這個問題,大晚上的花了一點時間修改了笨牛發布的腳本,把它改成了開驗證碼,不過 api 變成了官方的,配置更加複雜一些,直接上腳本:

image

已得到原作者的口頭同意

#github https://github.com/CangShui/clouflarea-auto-firewall
email="[email protected]"
globalapi="7777777777777777777777777"
rulesid1="666666666666666666666666666"
rulesid2="8888888888888888888888888"
zoneid="333333333333333333333333333"
mode="cpu"  #判斷伺服器負載方式 load負載法  cpu  CPU百分比法  只能選一個
keeptime=240   #開盾負載下降後持續多少秒,進行嘗試關盾

if [ "$mode" = "cpu" ];
then
check=85   #5秒內CPU連續超過85 則開盾【可以根據您的伺服器負荷情況調整】
#系統空閒時間
TIME_INTERVAL=5
time=$(date "+%Y-%m-%d %H:%M:%S")
LAST_CPU_INFO=$(cat /proc/stat  grep -w cpu  awk '{print $2,$3,$4,$5,$6,$7,$8}')
LAST_SYS_IDLE=$(echo $LAST_CPU_INFO  awk '{print $4}')
LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO  awk '{print $1+$2+$3+$4+$5+$6+$7}')
sleep ${TIME_INTERVAL}
NEXT_CPU_INFO=$(cat /proc/stat  grep -w cpu  awk '{print $2,$3,$4,$5,$6,$7,$8}')
NEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO  awk '{print $4}')
NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO  awk '{print $1+$2+$3+$4+$5+$6+$7}')

#系統空閒時間
SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE}  awk '{print $1-$2}'`
#CPU總時間
TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T}  awk '{print $1-$2}'`
load=`echo ${SYSTEM_IDLE} ${TOTAL_TIME}  awk '{printf "%.2f", 100-$1/$2*100}'`
else
load=$(cat /proc/loadavg  colrm 5)
check=$(cat /proc/cpuinfo  grep "processor"  wc -l)

fi

if [ ! -f "/home/status.txt" ];then
echo "" > /home/status.txt
else
status=$(cat /home/status.txt)
echo $status
fi
now=$(date +%s)
time=$(date +%s -r /home/status.txt)



echo "當前$mode負載:$load"
if [[ $status -eq 1 ]]
then
echo "當前開盾中"
else
echo "當前未開盾"
fi

newtime=`expr $now - $time`
closetime=`expr $keeptime - $newtime`

if [[ $load <$check ]]&&[[ $status -eq 1 ]]&&[[ $newtime -gt $keeptime ]]   
then
echo -e "\n$mode負載低於$check,當前已開盾超過半小時($newtime秒),嘗試關盾"
cResult=$(
curl -X PUT \
     -H "X-Auth-Email: $email" \
     -H "X-Auth-Key: $globalapi" \
     -H "Content-Type: application/json" \
     -d '{
  "id": "$rulesid1",
      "paused": true,
      "description": "全部都驗證碼",
      "action": "challenge",
      "priority": 1000,
  "filter": {
        "id": "'$rulesid2'"
      }
     }' "https://api.cloudflare.com/client/v4/zones/$zoneid/firewall/rules/$rulesid1"
)
echo $cResult
size=${#cResult}
if [[ $size -gt 10 ]]
then
  echo 0 > /home/status.txt
  echo -e "\n關盾成功"
fi  
  
elif [[ $load <$check ]]
then
echo -e "\n$mode負載低於$check,不做任何改變,$newtime秒"
if [[ $status -eq 1 ]]
then
  echo -e "將於$closetime秒後關盾"
fi                        
exit
                      
elif [[ $load >$check ]] && [[ $status -eq 1 ]] && [[ $newtime -gt $keeptime ]]  
then
echo -e "\n$mode負載高於$check,當前已開盾超過$newtime秒,盾無效,請聯繫管理員定制其他方案"
exit
  
elif [[ $load >$check ]] && [[ $status -eq 1 ]]
then
echo -e "\n$mode負載高於$check,當前已開盾($newtime秒),請再觀察"
exit  
                      
elif [[ $load >$check ]]
then
echo -e "\n$mode負載高於$check,開啟防禦規則"  
cResult=$(
  curl -X PUT \
     -H "X-Auth-Email: $email" \
     -H "X-Auth-Key: $globalapi" \
     -H "Content-Type: application/json" \
     -d '{
  "id": "$rulesid1",
      "paused": false,
      "description": "全部都驗證碼",
      "action": "challenge",
      "priority": 1000,
  "filter": {
        "id": "'$rulesid2'"
      }
         }' "https://api.cloudflare.com/client/v4/zones/$zoneid/firewall/rules/$rulesid1"
    )
echo $cResult
size=${#cResult}
if [[ $size -gt 10 ]]
then
  echo 1 > /home/status.txt
  echo -e "\n開盾成功"
fi    
else
echo 0 > /home/status.txt  
fi

在使用腳本之前,你需要創建這樣一個 cloudflare firewall rules:

image

然後開始一步步填寫腳本裡的變量:

1. 第一行的 email 變量填的是你 cloudflare 帳號的登錄郵箱

2. 第二行的 globalapi 變量,填寫的是下圖這裡的 key,這個頁面需要右上角點頭像,然後點擊 my profile 裡 api tokens 菜單裡

image

3. rulesid1 和 rulesid2 需要打開 cloudflare firewall rules 頁面,如下圖操作:

image

先打開瀏覽器的控制台,然後找到你剛剛添加的規則,開啟或關閉他,在控制台的 network 功能裡找到如圖所示的請求,第一个 key 填在 rulesid1 變量,第二個 key 填在 rulesid2 變量裡

4.zoneid 這個變量打開你的域名總覽頁面,然後看右下角,如圖所示:

image

到這裡差不多就配置完了,默認的是 5 秒內 CPU 佔用持續超過 85 開啟驗證碼,然後 240 秒後佔用下降了自動關盾

配置完之後,你需要設置一個定時任務來執行腳本,如果你是寶塔的話應該就知道怎麼做了,設置個 1 分鐘就行了

image

image

效果圖

image

轉載自: 滄水的博客 » cloudflare 自動開啟驗證碼

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。