如何利用Cloudflare API + Python 自動批次清理WAF指定註解的IP 存取規則

一旦你的防火牆規則清單膨脹到上千條,手動刪除就像在沙漠裡數沙粒,耗時又痛苦。

這時候,自動化腳本就是救命稻草。

為什麼需要自動清理規則

在使用Cloudflare作為CDN 和WAF 的過程中,我們經常設定IP Access Rules來封鎖惡意請求。

這些規則可能帶有註釋,例如“Blocked by AI B”、“Wordfence Sync”或“已知攻擊者的IP 位址”。

隨著時間推移,規則數量會迅速增加。

如果不清理,控制台裡的規則會堆積成山,影響管理效率。

更糟的是,Cloudflare 控制台並沒有提供「一鍵按註解批次刪除」的功能。

這意味著你只能一則手動勾選刪除,效率極低。

解決思路

要解決這個問題,我們可以藉助Cloudflare REST API。

透過調用 firewall/access_rules/rules 接口,腳本可以:

  • 分頁獲取目前網域下的所有規則。
  • 匹配註釋字段中的關鍵字。
  • 自動發起DELETE 請求,大量清理目標規則。

這種方式不僅高效,還能避免人工誤操作。

如何利用Cloudflare API + Python 自動批次清理WAF指定註解的IP 存取規則
如何利用Cloudflare API + Python 自動批次清理WAF指定註解的IP 存取規則

前準備工作

在開始編寫腳本之前,你需要準備好幾個關鍵參數。

1. API Token

前往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 腳本。

儲存為 cloudflare_clean.py,替換其中的 API_TOKEN 和 ZONE_ID 可以。

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()

運行腳本

在終端機中輸入:

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

這說明官方已經提供了介面能力,只是沒有在控制台實作批次刪除功能。

結語

在資訊安全的世界裡,效率就是防禦力。

透過Python 腳本呼叫Cloudflare API,我們不僅解決了控制台的限制,也讓防火牆規則管理進入自動化時代。

這是一種技術與智慧的結合,也是網站安全營運的必然趨勢。

真正的高手,不是每天在控制台裡點滑鼠,而是用程式碼讓機器替自己完成繁瑣的工作。

所以,行動起來吧。

讓你的防火牆規則像精密的鐘錶一樣運轉,而不是一堆雜亂無章的數位垃圾。

安全的本質,是秩序。秩序的背後,是自動化。

發表評論

您的郵箱地址不會被公開。必填項已用*標註

回到頁首