1
cf_rule/waf/readme.md

52 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2024-07-21 13:00:25 +08:00
## Cloudflare 的 WAF 規則,用於防止爬蟲與其他用途
> [!WARNING]
> 套用規則前請替換對應的域名,並將採取措施設爲 **封禁/block**
> 規則中也不允許註釋,記得刪掉
### [default.clj](./default.clj) ⬅️ 點擊鏈接查看完整規則
配置前部分指定哪些域名的哪些路徑或其他規則不允許被訪問,後部分設定觸發規則的請求參數
```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 下來翻着看