Cloudflare 常用API - 自动开启5秒盾(off, essentially_off, low, medium, high, under_attack)

I. 主理人序

这是一个免费的,对所有用户等级开放的修改Cloudflare防御等级的API,使用该API可自由改变防*御等级(其值可设置为 off, essentially_off, low, medium, high, under_attack)*;

II. Cloudflare zoneid&keys

首先先明确下会用到的一些授权,包括你的Cloudflare注册邮箱,key(即API keys),zoneid等;

Cloudflare zoneid 在哪里.jpg
Cloudflare keys 在哪里.jpg

查看 API 秘钥

Cloudflare - Api-key.png

查看 API 密钥(Key)
要检索 API 密钥,请执行以下操作:

1.登录 Cloudflare 仪表板。
2.在我的个人资料下拉列表下,单击我的个人资料。
3.单击 API 令牌选项卡。
4.在 API 密钥部分中,选择以下两个选项之一:“全局 API 密钥”或“Origin CA 密钥”。选择您要查看的 API 密钥。

官方文档管理 API 令牌和密钥;(请自行切换语言)

III. 修改安全级别设置(示例)

安全级别.png

正常情况下,我们要设置防火墙的安全等级,我们可以在Cloudflare的控制面板-防火墙-设置-安全级别进行设置,简单,直观;(如上图位置);

为了应对不期而至的CC攻击,我们可能会需要一个自动提高安全级别的策略,把安全级别从 off 提高到 under_attack

官方示例

Cloudflare 常用API - 自动开启5秒盾(off, essentially_off, low, medium, high, under_attack);

API功能: Change Security Level setting(修改安全等级);
适用用户:REE/PRO/BUSINESS/ENTERPRISE;

Required parameters(必要参数)

Name /type Description /example Constraints
value string Value of the zone setting"medium" default value: mediumvalid values: off, essentially_off, low, medium, high, under_attack

cURL (example)

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/security_level" \
     -H "X-Auth-Email: [email protected]" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"value":"medium"}'

有没有很简单?是的,很简单。

现在,我们动手制作一个可执行Shell脚本,假设命名为:cf.security.sh

#!/bin/bash
#cf.security.sh
CFEMAIL="填写你的Cloudflare注册邮箱"
CFAPIKEY="填写你的API Key"
ZONEID="填写你的ZONEID"

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/${ZONEID}/settings/security_level" \
     -H "X-Auth-Email: ${CFEMAIL}" \
     -H "X-Auth-Key: ${CFAPIKEY}" \
     -H "Content-Type: application/json" \
     --data '{"value":"medium"}'

其中,"value" 的值可设置为:

off
essentially_off
low
medium
high
under_attack

执行 cf.security.sh,如果成功则返回如下提示

{"result":{"id":"security_level","value":"medium","modified_on":"2021-04-04T03:41:56.393080Z","editable":true},"success":true,"errors":[],"messages":[]}

Cloudflare dashboard - 防火墙 - 设置 - 中.png

如果 "success" 值为 true 则代表提交成功,此时可到 Cloudflare dashboard - 防火墙 - 设置 进行查看;

以上。

IV. 自动更改安全级别(Crontab)

以下仅做示例参考,还有很多判定方法值得考量(HTTP 502 错误数量,系统平均负载,异常的IP数量,HTTP 404 状态码数量(如果用 random 攻击的话等等));

#!/bin/bash
#cf.security.change.sh
##近期平均负载情况判定

usage=`echo $(cat /proc/loadavg | awk '{print $2}')` #获取当前系统平均负载值
max=2 #设置最大阈值

CFEMAIL="填写你的Cloudflare注册邮箱"
CFAPIKEY="填写你的API Key"
ZONEID="填写你的ZONEID"

if [ `echo "$usage > $max"|bc` -eq 1 ];
then
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/${ZONEID}/settings/security_level" \
     -H "X-Auth-Email: ${CFEMAIL}" \
     -H "X-Auth-Key: ${CFAPIKEY}" \
     -H "Content-Type: application/json" \
     --data '{"value":"under_attack"}'
fi

在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢? 命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。

via 理解Linux系统负载

我们上面的脚本中,意思是当最近5分钟系统负载大于2时,则修改 Cloudflare 防御等级为最高级(under_attack模式);

最后,设置一下 Crontab 每分钟自动执行脚本即可;


$  crontab -e

* * * * * /home/cf.security.change.sh;

以上。

最后修改:2021 年 05 月 16 日 12 : 01 PM