1
cf_rule/waf
2024-08-22 21:08:29 +08:00
..
default.clj move to sub directory 2024-08-22 21:08:29 +08:00
readme.md move to sub directory 2024-08-22 21:08:29 +08:00

Cloudflare 的 WAF 規則,用於防止爬蟲與其他用途

Warning

套用規則前請替換對應的域名,並將採取措施設爲 封禁/block
規則中也不允許註釋,記得刪掉

default.clj ⬅️ 點擊鏈接查看完整規則

配置前部分指定哪些域名的哪些路徑或其他規則不允許被訪問,後部分設定觸發規則的請求參數

(
    (
        # Gitea 站點
        http.host eq "gitea.trle5.xyz" and (
            (
                # 不允許爬取: commit 記錄, 合併請求預覽和代碼歸檔
                http.request.uri.path contains "/commit/" or
                http.request.uri.path contains "/compare/" or
                http.request.uri.path contains "/archive/"
            ) or (
                # 不允許請求包含查詢字符串
                http.request.uri.query contains "="
            )
        )
    )
    # 網盤里哪有什麼好爬的
    or http.host eq "alist.trle5.xyz" 
)
and (
    # 根據 UA 觸發規則
    http.user_agent contains "YandexBot" or 
    # 一些不老實的爬蟲 ban 後會換 UA得用 ASN 號來封
    ip.geoip.asnum eq 32934 or
    # 一些國家大多數請求都是爬蟲直接按國家來觸發
    ip.geoip.country eq "BR"
)

對於 Gitea 規則大致是:

  • 不允許查看 commit 修改內容
  • 不允許以某個 commit 作爲時間節點查看全部文件(最新文件和任意分支不受影響)
    • 防止 commit 記錄和文件過多導致無限爬,如果倉庫中有 20 個文件、commit 提交次數爲 15那爬蟲會爬取 20*15 次,即 300 次
  • 不允許查看合併請求預覽(整個頁面)
    • 不然你會在服務器日誌里看到一堆用一個 commit 去對比另一個 commit 或分支,複雜度爲 commit 數量 * (commit 數量 + 分支數量)
  • 不允許爬取代碼歸檔(分支和任意 commit)
    • 因爲每個 commit 都可以下載歸檔
  • 不允許攜帶任何查詢字符串
    • 光是合併請求和 issues 的一堆過濾方式都夠服務器喝一壺了

不用擔心會影響到正常用戶,這些規則默認只會對爬蟲觸發,就算有用戶不幸在規則內,也只是不能訪問部分頁面而已,想看 commit 記錄還是能 clone 下來翻着看