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 自动开启验证码

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