cloudflare自动开启验证码

发布于 / 系统运维 / 7 条评论

【原创文章】应某些朋友的反馈,说是现在很多攻击平台和软件,已经可以利用cookie随意打穿cf的五秒盾,因此以前使用的cloudflare五秒盾脚本就不那么管用了, 穿盾现在确实很容易做到了,但是验证码你还能穿吗? 对于这个问题大晚上熬夜整了能自动开验证码的脚本,api使用的官方的,配置有点复杂懂的自然懂,直接上脚本:

#https://github.com/CangShui/clouflarea-auto-firewall
email="[email protected]"
globalapi="11111111"
rulesid1="99999999"
rulesid2="222222222"
zoneid="3333333"
keeptime=1200  #可访问后持续多少秒,进行尝试关盾
curlnum=5      #测试多少次网站状态码,不建议高于10,数值越高网站压力越大
minsuc=4    #网站至少正常访问多少次,否则就开验证码
cfile="/home/cf_curl_code/"
lasttime=$( cat $cfile"xtime.txt" 2>/dev/null )
webhost="cangshui.com"  #你的网站域名
curlnum="5"
#==================================================#
#http状态返回404即正常,因为curl的地址是一个网站+随机字符+.html,状态返回403即为开盾状态,返回500-600为错误代码
mkdir "$cfile" 2>/dev/null
rm -rf $cfile$webhost".log"
i="1"
while [ $i -le $curlnum ]
do
i=$(($i+1))
randtxt=$( cat /dev/urandom | head -n 30 | md5sum | head -c 30 2>/dev/null )
echo "开始测试访问https://"$webhost"/"$randtxt".html"
code=$( curl -I -m 10 -o /dev/null -s -w %{http_code} "https://"$webhost"/"$randtxt".html" )
echo $code >> $cfile$webhost".log"
sleep 2s
done


num404=$( grep -c "404" $cfile$webhost".log" )
if [[ $num404 -ge $minsuc ]]
then
  echo -e "网站访问正常"  && exit
else 
  sed -i 's/404//g'  $cfile$webhost".log"
  sed -i '/^$/d' $cfile$webhost".log"
  httpcode=$( sed -n 1p $cfile$webhost".log" )
fi

nowtime=$(date +%s)
if [[ $lasttime -eq "" ]]&&[[ $httpcode -eq "403" ]]
then
  echo -e "验证码已开启,但未有开启时间记录"
  lasttime=$(date +%s)
  echo $lasttime >> $cfile"xtime.txt"
  gaptime=0
else  
  echo -e "数据正常"
  gaptime=`expr $nowtime - $lasttime`
  echo -e "距离上次开盾已经:$gaptime S ,上次时间为:$lasttime"
fi

if [[ $httpcode > "499" ]]&&[[ $httpcode < "600" ]]
then
     echo "\n状态码大于500,开验证码"
	 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"
     sleep 15s
	 randtxt=$( cat /dev/urandom | head -n 30 | md5sum | head -c 30 2>/dev/null )
     httpcode2=$( curl -I -m 10 -o /dev/null -s -w %{http_code} "https://"$webhost"/"$randtxt".html" )
        if [ $httpcode2 = "403" ]
        then
          lasttime=$(date +%s)
          rm -rf $cfile"xtime.txt"
          echo $lasttime >> $cfile"xtime.txt"
          echo -e "\n开验证码成功"
        else
          echo -e "\n开验证码失败,可能是暂未生效"
        fi
else
        if [[ $httpcode -eq "403" ]]&&[[ $gaptime -ge $keeptime ]]
        then
          echo -e "\n开盾时间已有$gaptime,超过$keeptime,尝试关盾"
          	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"
            rm -rf $cfile"xtime.txt"
        else
           echo -e "\n开盾时间有$gaptime,未超过$keeptime或未开盾" 
        fi
fi

  

在使用脚本之前,你需要创建这样一个cloudflare firewall rules:

然后开始一步步填写脚本里的变量:

1.第一行的email变量填的是你cloudflare账号的登录邮箱

2.第二行的globalapi变量,填写的是下图这里的key,这个页面需要右上角点头像,然后点击 my profile 里api tokens菜单里

3. rulesid1和rulesid2 需要打开 cloudflare firewall rules 页面,如下图操作:

先打开浏览器的控制台,然后找到你刚刚添加的规则,开启或关闭他,在控制台的network功能里找到如图所示的请求,第一个key填在 rulesid1 变量,第二个key填在 rulesid2变量里

4.zoneid这个变量打开你的域名总览页面,然后看右下角,如图所示:

到这里差不多就配置完了,默认的是5秒内CPU占用持续超过85开启验证码,然后240秒后占用下降了自动关盾

配置完之后, 如果是通过curl判断的脚本建议你使用一个能良好访问cloudflare的vps来跑脚本,如果是判断本机负载的脚本就直接在源站跑就行了,然后你需要设置一个定时任务来执行脚本,宝塔的话很容易设置定时任务,设置个1分钟就行了

效果图

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
转载原创文章请注明,转载自: 沧水的博客 » cloudflare自动开启验证码
  1. zip

    这个脚本有个奇怪的问题,比如我们把check=85,就是说判断cpu占用率大于85就开盾,但是当cpu真实占用率大于8.5%并且小于10%的时候,这个shell也会判断为cpu占用率大于85%,并且开盾,但是一旦cpu真实占用率大于10%并且小于85%后又会判断cpu使用率小于85%从而关盾,请作者验证

    1. Fate
      @zip +1 有时候低于10%也会开启验证码,不知道为啥
  2. Fate

    貌似不行- -不知道为啥
    /home/waf.sh: line 8: $’\r’: command not found
    /home/waf.sh: line 46: syntax error in conditional expression
    /home/waf.sh: line 46: syntax error near `]]

    /home/waf.sh: line 46: `if [[ $status -eq 1 ]]

    —————————————————————————-
    ★[2019-11-08 11:58:24] Successful
    —————————————————————————-

    1. 沧水
      @Fate 直接粘贴在shell里运行会出现这种情况吗?
      1. Fate
        @沧水 我发现先把笨牛的脚本先复制粘贴进去保存一下,然后把你写的博客脚本复制粘贴进去就解决了- -不知道什么玄学问题
  3. 无名小卒

    大佬你之前发的ons游戏合集链接早挂了,跪求合集链接

    1. 沧水
      @无名小卒 已补,重新压缩上传了,解压密码换了