【原创文章】应某些朋友的反馈,说是现在很多攻击平台和软件,已经可以利用cookie随意打穿cf的五秒盾,因此以前使用的cloudflare五秒盾脚本就不那么管用了, 穿盾现在确实很容易做到了,但是验证码你还能穿吗? 对于这个问题大晚上熬夜整了能自动开验证码的脚本,api使用的官方的,配置有点复杂懂的自然懂,直接上脚本:
注意我写了有两种脚本!一种是靠其他服务器curl Nginx状态码来判断的,一种是自身运行判断cpu负载的!
第一种:curl状态码判断版,最好放在其他服务器上运行
#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
第二种:在本机运行,获取自己cpu负载来判断
#https://github.com/CangShui/clouflarea-auto-firewall
email="[email protected]"
globalapi="876666627b"
rulesid1="1146666665"
rulesid2="c8666666ce"
zoneid="f266666c18"
maxload="5" #范围0~10.设置10即为满载时开盾,5即一半负载时开盾
keeptime=1200 #可访问后持续多少秒,进行尝试关盾
cfile="/home/cf_uptime/"
lasttime=$( cat $cfile"xtime.txt" 2>/dev/null )
#==================================================#
mkdir "$cfile" 2>/dev/null
cpu_num=$( grep -c 'model name' /proc/cpuinfo ) #cpu总核数
cpu_load=$( uptime | awk '{print $10}' | awk '{sub(/.$/,"")}1' ) #系统1分钟的平均负载
cpu_load=$(echo "$cpu_load * 100" | bc | awk '{print int($0)}' )
cpu_maxload=`expr $cpu_num \* $maxload \* 10`
nowtime=$(date +%s)
echo -e "cpu_load数值为:$cpu_load ,cpu_maxload数值为:$cpu_maxload"
if [[ $lasttime -eq "" ]]
then
echo -e "未开验证码"
else
echo -e "数据正常"
gaptime=`expr $nowtime - $lasttime`
echo -e "距离上次开盾已经:$gaptime S ,上次时间为:$lasttime"
fi
if [[ $cpu_load -gt $cpu_maxload ]]&&[[ $lasttime -eq "" ]]
then
echo "一分钟平均负载已超过阈值,开验证码"
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"
rm -rf $cfile"xtime.txt"
lasttime=$(date +%s)
echo $lasttime >> $cfile"xtime.txt"
echo -e "\n开验证码成功"
else
if [[ $cpu_load -lt $cpu_maxload ]]&&[[ $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
if [[ $cpu_load -ge $cpu_maxload ]]&&[[ $gaptime -ge $keeptime ]]
then
echo -e "\n开盾时间已有$gaptime,超过$keeptime,但是负载仍然较高暂不关验证码,请自行排查原因"
else
if [[ $lasttime -eq "" ]]
then
echo -e ""
else
echo -e "\n开盾时间有$gaptime,未超过$keeptime,不关验证码或无需开验证码"
fi
fi
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这个变量打开你的域名总览页面,然后看右下角,如图所示:
目前反馈问题汇总:
无任何报错,但cpu_load数值一直为0或者不是整数:
问题出自这一段命令
uptime | awk '{print $10}' | awk '{sub(/.$/,"")}1'
问题是因为不同系统模板uptime这一条的返回值结构不一样,
尝试更换这一句中的print $10,这一句是指取uptime返回值的第十行数值
有些系统可能不在第10行因此cpu_load数值有问题(比如aws在第八行
报bc未安装,需要装个bc:
centos输入yum install -y bc
ubuntu输入apt install -y bc
配置完之后, 如果是通过curl判断的脚本建议你使用一个能良好访问cloudflare的vps来跑脚本,如果是判断本机负载的脚本就直接在源站跑就行了,然后你需要设置一个定时任务来执行脚本,宝塔的话很容易设置定时任务,设置个1分钟就行了
效果图
评论区一堆奇怪报错的,问题就在于你们没转码成unix格式就直接运行
Windows的能用吗
哥,验证码盾可以穿,旁路协议就可以
cpu_load数值为:3 ,cpu_maxload数值为:80
数据正常
距离上次开盾已经:1200 S ,上次时间为:1584710161
开盾时间已有1200,超过1200,且一分钟平均负载已低于阈值,尝试关盾
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 350 0 77 100 273 161 573 –:–:– –:–:– –:–:– 574
{“success”:false,”errors”:[{“code”:10000,”message”:”Authentication error”}]}
这个会有影响不
/autofw.sh: line 19: syntax error in conditional expression
/autofw.sh: line 19: syntax error near `]]
‘
/autofw.sh: line 19: `if [[ $lasttime -eq “” ]]
‘
autofw.sh: line 19: syntax error in conditional expression
/home/autofw.sh: line 19: syntax error near `]]
‘
/home/autofw.sh: line 19: `if [[ $lasttime -eq “” ]]
‘
cpu_load数值为:0 ,cpu_maxload数值为:100
未开验证码
cloudflare firewall rules开启后一直需要验证码才能访问。
行21: [[: 1576236795
1576236795: 表达式中有语法错误 (错误符号是 “1576236795”)
数据正常
expr: 语法错误
autofw.sh: line 15: bc: command not
这个脚本有个奇怪的问题,比如我们把check=85,就是说判断cpu占用率大于85就开盾,但是当cpu真实占用率大于8.5%并且小于10%的时候,这个shell也会判断为cpu占用率大于85%,并且开盾,但是一旦cpu真实占用率大于10%并且小于85%后又会判断cpu使用率小于85%从而关盾,请作者验证
貌似不行- -不知道为啥
/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
—————————————————————————-
大佬你之前发的ons游戏合集链接早挂了,跪求合集链接