主理人序
这是一个免费的,对所有用户等级开放的防火墙访问规则创建API,使用该API可自由创建IP访问规则;
Cloudflare zoneid&keys
首先先明确下会用到的一些授权,包括你的Cloudflare注册邮箱,key(即API keys),zoneid等;
查看 API 密钥(Key)
要检索 API 密钥,请执行以下操作:
1.登录 Cloudflare 仪表板。
2.在我的个人资料下拉列表下,单击我的个人资料。
3.单击 API 令牌选项卡。
4.在 API 密钥部分中,选择以下两个选项之一:“全局 API 密钥”或“Origin CA 密钥”。选择您要查看的 API 密钥。
官方文档:管理 API 令牌和密钥;(请自行切换语言)
创建防火墙访问规则(示例)
正常情况下,我们想要阻止某个IP(或ASN或IP段)访问我们的网站,我们可以在Cloudflare的控制面板-防火墙-工具进行设置,简单,直观;大家可以了解一下自己此时的IP(IP.SB),并创建该IP的访问规则如Block,然后重新访问自己的网站试试(如未生效,可在无痕模式下打开网站);
如果我们要批量提交IP并执行Block(禁止访问)的话要怎么做呢?此时就需要使用到Cloudflare提供的免费API了!
什么是API?
官方举例
Cloudflare 常用API - 批量提交异常IP并执行相应操作(block, challenge, whitelist, js_challenge)
API功能:Create Access Rule(用户级防火墙访问规则 - 创建访问规则);
适用用户:REE/PRO/BUSINESS/ENTERPRISE;
cURL (example)
curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"mode":"challenge","configuration":{"target":"ip","value":"198.51.100.4"},"notes":"This rule is on because of an event that occured on date X"}'
现在,我们动手制作一个可执行Shell脚本,假设命名为:cf.block.sh
;
#!/bin/bash
#cf.block.sh
CFEMAIL="填写你的Cloudflare注册邮箱"
CFAPIKEY="填写你的API Key"
curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
-H "X-Auth-Email: $CFEMAIL" \
-H "X-Auth-Key: $CFAPIKEY" \
-H "Content-Type: application/json" \
--data '{"mode":"challenge","configuration":{"target":"ip","value":"198.51.100.4"},"notes":"Xddos-block"}'
PS:最新版本的API文档中似乎隐去了 ZoneID的引用,不用再加以认证;
运行 cf.block.sh
,成功的话会返回如下提示
:
{
"result": {
"id": "fbe91b5409724825c2a654d2d8fe6087",
"paused": false,
"modified_on": "2021-04-04T02:26:56.373970627Z",
"allowed_modes": [
"whitelist",
"block",
"challenge",
"js_challenge"
],
"mode": "challenge",
"notes": "Xddos-block",
"configuration": {
"target": "ip",
"value": "198.51.100.4"
},
"scope": {
"id": "f2f53e358b09b2502e6d936176206ef3",
"email": "会显示你的邮箱",
"type": "user"
},
"created_on": "2021-04-04T02:26:56.373870627Z"
},
"success": true,
"errors": [],
"messages": []
}
如果 "success" 值为 true
则代表提交成功,此时可到 Cloudflare dashboard - 防火墙 - 工具 进行查看;
Perfect!
现在,在回过头来看官方示例:
curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"mode":"challenge","configuration":{"target":"ip","value":"198.51.100.4"},"notes":"This rule is on because of an event that occured on date X"}'
其中所使用的命令行工具是 curl
,用以模拟发起 HTTP 请求;而 HTTP 请求方法 又有 9 种;
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
以上,那么问题来了:之前封禁的IP如何批量解封(删除规则)呢?用的是DELETE,需要进行两个操作,在此不表。(参阅)
批量提交恶意IP(示例)
刚刚是单个IP提交,现在试试批量提交,你需要有:
1.存储这个恶意IP的文本,例如badip.txt
;
2.badip.txt
内容如下:(大家可以拿来测试用)
62.171.177.80
103.84.71.10
176.119.156.142
103.87.170.115
157.119.50.114
207.74.74.6
110.77.185.83
157.7.142.243
103.124.137.50
3.使用 for 循环进行提交;
#!/bin/bash
#cf.batchban.sh
CFEMAIL="填写你的Cloudflare注册邮箱"
CFAPIKEY="填写你的API Key"
IPADDR=$(</home/badip.txt)
for i in ${IPADDR[@]}; do
curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
-H "X-Auth-Email: $CFEMAIL" \
-H "X-Auth-Key: $CFAPIKEY" \
-H "Content-Type: application/json" \
--data '{"mode":"block","configuration":{"target":"ip","value":"'$i'"},"notes":"Xddos-block"}'
done
如何从访问日志捕获恶意IP
搞定!如何捕获恶意IP请听下回分解;(每个人的实现方法不同,在此不表)
附注
(for 循环脚本,批量提交异常IP表,在此感谢原脚本作者:https://www.9sep.org/)
版权属于:毒奶
联系我们:https://limbopro.com/6.html
毒奶搜索:https://limbopro.com/search.html
机场推荐:https://limbopro.com/865.html IEPL专线/100Gb/¥15/月起
毒奶导航:https://limbopro.com/daohang/index.html本文链接:https://limbopro.com/archives/15330.html
本文采用 CC BY-NC-SA 4.0 许可协议,转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!