Cara membersihkan peraturan akses IP yang diulas secara automatik dan dalam kelompok dalam WAF menggunakan API Cloudflare dan Python

一旦你的防火墙规则列表膨胀到上千条,手动删除就像在沙漠里数沙粒,耗时又痛苦。

这时候,自动化脚本就是救命稻草。

为什么需要自动清理规则

在使用 Cloudflare 作为 CDN 和 WAF 的过程中,我们经常会设置 IP Access Rules 来封禁恶意请求。

这些规则可能带有注释,比如 “Blocked by AIB ”,“Wordfence Sync”“已知攻击者的 IP 地址”.

随着时间推移,规则数量会迅速增加。

如果不清理,控制台里的规则会堆积成山,影响管理效率。

更糟的是,Cloudflare 控制台并没有提供“一键按注释批量删除”的功能。

这意味着你只能一条条手动勾选删除,效率极低。

解决思路

要解决这个问题,我们可以借助 Cloudflare REST API.

通过调用 firewall/access_rules/rules 接口,脚本可以:

  • 分页获取当前域名下的所有规则。
  • 匹配注释字段中的关键字。
  • 自动发起 DELETE 请求,批量清理目标规则。

这种方式不仅高效,还能避免人工误操作。

Cara membersihkan peraturan akses IP yang diulas secara automatik dan dalam kelompok dalam WAF menggunakan API Cloudflare dan Python
Cara membersihkan peraturan akses IP yang diulas secara automatik dan dalam kelompok dalam WAF menggunakan API Cloudflare dan Python

前置准备工作

在开始编写脚本之前,你需要准备好几个关键参数。

1. API Token

Pergi ke Cloudflare API Tokens 页面 创建一个新的 Token。

必须赋予权限:Zone → Firewall Services → Edit.

2. Zone ID

登录 Cloudflare 控制台,进入域名的 Overview 页面,在右侧即可找到 32 位 Zone ID。

3. 安装依赖库

在 PowerShell 或终端中运行:

python -m pip install requests

这样就能安装 requests 库,确保脚本能正常调用 API。

完整 Python 脚本

下面是一份可直接使用的 Python 脚本。

Simpan sebagai cloudflare_clean.py,替换其中的 API_TOKENZONE_ID Itu sahaja.

import requests

API_TOKEN = "你的_API_TOKEN"
ZONE_ID = "你的_ZONE_ID"
TARGET_NOTE = "Blocked by AIB"

headers = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json",
}

def delete_matching_ip_rules_zone():
    page = 1
    deleted_count = 0

    while True:
        url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/firewall/access_rules/rules?page={page}&per_page=100"
        response = requests.get(url, headers=headers)

        if response.status_code != 200:
            print(f"请求失败: {response.text}")
            break

        data = response.json()
        rules = data.get("result", [])
        if not rules:
            break

        for rule in rules:
            rule_id = rule.get("id")
            rule_value = rule.get("configuration", {}).get("value")
            rule_notes = rule.get("notes", "")

            if TARGET_NOTE in rule_notes:
                del_url = f"{url}/{rule_id}"
                del_res = requests.delete(del_url, headers=headers)
                if del_res.json().get("success"):
                    print(f"✅ 删除成功: {rule_value}")
                    deleted_count += 1

        result_info = data.get("result_info", {})
        total_pages = result_info.get("total_pages", 1)
        if page >= total_pages:
            break
        page += 1

    print(f"清理完成,共删除 {deleted_count} 条规则。")

if __name__ == "__main__":
    delete_matching_ip_rules_zone()

Jalankan skrip

在终端中输入:

python /path/to/cloudflare_clean.py

脚本会自动扫描并删除带有指定注释的规则。

常见问题与排坑指南

1. Zone vs Account 权限

  • Zone 级别规则:只作用于单域名。
  • Account 级别规则:作用于整个账户,需要修改 API 路径为 /accounts/{ACCOUNT_ID}/....

2. 鉴权报错

如果出现 403 Authentication error,通常是权限范围设置错误。

确保 Token 权限包含 Firewall Services → Edit.

3. 分页机制

Cloudflare API 单次最多返回 100 条规则。

脚本通过 result_info.total_pages 自动翻页,确保完整扫描。

为什么自动化是必然选择

在实际生产环境中,规则数量可能轻松突破 5000 条.

人工删除不仅耗时,还容易遗漏。

通过自动化脚本,你可以:

  • 每天定时清理过期规则。
  • 保持防火墙规则列表整洁。
  • 避免误封正常用户。

这种方式能让网站安全管理更高效。

Cloudflare 官方文档明确指出:

“The API provides programmatic access to manage firewall rules, including creation, listing, and deletion.”
来源:Cloudflare API Documentation

这说明官方已经提供了接口能力,只是没有在控制台实现批量删除功能。

Kesimpulannya

在信息安全的世界里,效率就是防御力。

通过 Python 脚本调用 Cloudflare API,我们不仅解决了控制台的局限,还让防火墙规则管理进入自动化时代。

这是一种 技术与智慧的结合,也是网站安全运营的必然趋势。

真正的高手,不是每天在控制台里点鼠标,而是用代码让机器替自己完成繁琐的工作。

Jadi mari kita ambil tindakan.

让你的防火墙规则像精密的钟表一样运转,而不是一堆杂乱无章的数字垃圾。

安全的本质,是秩序。秩序的背后,是自动化。

发表 评论

Alamat e-mel anda tidak akan diterbitkan. 必填 项 已 用 * 标注

Tatal ke