前言:在Cloudflare的安全防護體系中,自定義規則是抵御特定威脅的“精準武器”。除了基礎的路徑攔截,日常運維中還有許多高頻場景需要針對性配置。本文將通過10個實用范例
,帶你掌握Cloudflare規則的靈活用法,覆蓋路徑防護、IP管控、請求頻率限制、UA過濾、地域封鎖等核心需求,構建更全面的安全防護網。
一、基礎范例:無視大小寫攔截特定URL路徑
(適用場景:阻止注冊頁、測試接口等敏感路徑的訪問)
需求
攔截 https://your-domain.com/user/register
及其所有大小寫變種(如 /User/Register
、/USER/REGISTER
),但允許同域名其他路徑正常訪問。
規則表達式
(http.host eq "your-domain.com" and lower(http.request.uri.path) eq "/user/register")
邏輯解析
lower(http.request.uri.path)
:將請求的URI路徑轉為小寫(如/User/Register
→/user/register
);- 與目標路徑
/user/register
精準匹配,無論原始路徑大小寫如何,均能觸發攔截。
動作設置
選擇“阻止(Block)”,攔截所有命中該規則的請求。
二、攔截敏感文件訪問(如配置文件、備份文件)
(適用場景:防止 .env
、.sql
等敏感文件被惡意爬取)
需求
禁止訪問網站根目錄下的配置文件(如 .env
、config.ini
)、數據庫備份文件(如 backup.sql
),無論這些文件是否實際存在(提前阻斷探測行為)。
規則表達式
(http.host eq "your-domain.com" and (http.request.uri.path ends_with ".env" or http.request.uri.path ends_with ".ini" or http.request.uri.path ends_with ".sql"))
邏輯解析
ends_with
函數:匹配“以特定后綴結尾”的路徑(如/admin/.env
、/backup/2023.sql
均會被命中);- 通過
or
連接多個條件,一次性覆蓋多種敏感文件類型。
動作設置
選擇“阻止(Block)”,并建議在“高級選項”中勾選“返回403狀態碼”,避免暴露文件是否存在的信息。
三、限制特定IP段訪問后臺管理路徑
(適用場景:僅允許公司內網IP訪問 /admin
等管理后臺)
需求
僅允許 192.168.1.0/24
(內網段)訪問 https://your-domain.com/admin
路徑,其他IP訪問時直接攔截。
規則表達式
(http.host eq "your-domain.com" and http.request.uri.path starts_with "/admin" and not ip.src in {192.168.1.0/24})
邏輯解析
starts_with "/admin"
:匹配所有以/admin
開頭的路徑(如/admin/login
、/admin/user
);ip.src in {192.168.1.0/24}
:判斷請求IP是否在內網段內;not
取反:僅當IP不在允許段且訪問/admin
路徑時,規則觸發。
動作設置
選擇“阻止(Block)”,非內網IP訪問管理后臺時會被直接攔截。
四、阻止惡意User-Agent的請求
(適用場景:攔截爬蟲、掃描工具等惡意客戶端的訪問)
需求
禁止包含“sqlmap”“nmap”“masscan”等關鍵詞的User-Agent訪問網站(這些通常是黑客掃描工具的標識)。
規則表達式
(http.host eq "your-domain.com" and (lower(http.user_agent) contains "sqlmap" or lower(http.user_agent) contains "nmap" or lower(http.user_agent) contains "masscan"))
邏輯解析
http.user_agent
:獲取請求頭中的客戶端標識(如瀏覽器、爬蟲的名稱);lower()
函數:統一轉為小寫,避免因大小寫差異漏判(如“SqlMap”“SQLMAP”均會被匹配);contains
:判斷User-Agent中是否包含指定關鍵詞。
動作設置
選擇“阻止(Block)”,或“挑戰(Challenge)”(要求驗證驗證碼),根據防護嚴格程度選擇。
五、限制API接口的請求頻率(防濫用)
(適用場景:防止 /api
接口被惡意調用導致服務器過載)
需求
對 https://your-domain.com/api
路徑設置頻率限制:單個IP每分鐘最多請求60次,超過則臨時攔截。
規則表達式
(http.host eq "your-domain.com" and http.request.uri.path starts_with "/api" and ratelimit(ip.src, 1m) > 60)
邏輯解析
ratelimit(ip.src, 1m) > 60
:統計單個IP(ip.src
)在1分鐘(1m
)內的請求次數,超過60次則觸發規則;- 結合
starts_with "/api"
,僅對API路徑生效,不影響網站其他頁面。
動作設置
選擇“臨時攔截(Block for 10 minutes)”,或“速率限制(Rate Limit)”(Cloudflare會自動返回429狀態碼)。
六、禁止非瀏覽器 UA 批量抓取
(適用場景:防止無瀏覽器標識的腳本爬蟲批量爬取數據,減少內容盜用或服務器資源消耗)
需求
當請求的User-Agent(客戶端標識)不包含常見瀏覽器關鍵字(如Mozilla、Chrome)時,觸發驗證機制,篩選合法用戶與腳本爬蟲。
規則表達式
(http.host eq "your-domain.com" and not http.request.headers["user-agent"] matches "(Mozilla|Chrome|Safari|Edg)")
邏輯解析
http.request.headers["user-agent"]
:精準提取請求頭中的UA字段;matches "(Mozilla|Chrome|Safari|Edg)"
:通過正則匹配UA是否包含常見瀏覽器核心標識(幾乎所有主流瀏覽器UA均以“Mozilla”開頭,Chrome、Safari等為具體瀏覽器名稱);not
取反:僅當UA不包含上述關鍵字時,規則觸發(排除合法瀏覽器,鎖定腳本爬蟲)。
動作設置
選擇“Managed Challenge”(托管挑戰):
- 對疑似爬蟲的請求彈出驗證碼或JS驗證,合法用戶完成驗證后可正常訪問;
- 相比直接“Block”,大幅降低誤殺風險(避免攔截特殊瀏覽器或合法工具)。
七、封鎖特定國家或地區
(適用場景:屏蔽業務不覆蓋、惡意流量高發的國家/地區,如境外攻擊源、無目標用戶的地區)
需求
根據業務需求,直接阻斷來自中國(CN)、俄羅斯(RU)等特定國家/地區的所有訪問(可根據實際風險調整國家列表)。
規則表達式
(http.host eq "your-domain.com" and (ip.geoip.country eq "CN" or ip.geoip.country eq "RU"))
邏輯解析
ip.geoip.country
:Cloudflare內置的地理定位字段,返回請求IP對應的兩位大寫國家代碼(如中國為CN、美國為US、日本為JP,完整代碼可參考Cloudflare官方文檔);eq "CN" or eq "RU"
:通過邏輯“或”匹配多個目標國家,可根據需求增減(如新增“KP”“IR”等);- 需確保域名已開啟Cloudflare地理定位功能(默認開啟,無需額外配置)。
動作設置
- 嚴格防護:選擇“Block”,直接返回403狀態碼,拒絕該地區所有請求;
- 寬松防護:可改為“Challenge”,允許該地區的合法用戶通過驗證訪問(適合業務可能覆蓋部分用戶的場景)。
八、阻止空 Referer 的 POST 請求
(適用場景:防范CSRF(跨站請求偽造)攻擊,POST請求通常用于提交敏感數據(如表單、支付),空Referer是CSRF的典型特征之一)
需求
僅攔截“POST方法+Referer為空”的請求,不影響GET方法(GET請求可能存在合法空Referer場景,如直接輸入URL訪問)。
規則表達式
(http.host eq "your-domain.com" and http.request.method eq "POST" and not http.request.headers["referer"] exists)
邏輯解析
http.request.method eq "POST"
:鎖定提交數據的請求方法,GET/DELETE等方法不觸發;not http.request.headers["referer"] exists
:判斷請求頭中是否缺少“Referer”字段(空Referer包含“Referer字段不存在”或“字段值為空”兩種情況,此表達式可覆蓋兩者);- 合法POST請求通常會攜帶Referer(標識請求來源頁面),空Referer大概率為惡意偽造請求。
動作設置
選擇“Block”:直接阻斷空Referer的POST請求,避免惡意提交數據,降低CSRF攻擊風險。
九、限制 URL 路徑深度(防目錄遍歷)
(適用場景:防止“目錄遍歷攻擊”,即黑客通過構造 ../../../etc/passwd
等路徑,試圖讀取服務器系統文件或敏感目錄)
需求
當請求的URL路徑層級≥6時觸發攔截,避免路徑過深導致的遍歷風險(正常業務路徑層級通常較少,如 /user/profile
層級為3)。
規則表達式
(http.host eq "your-domain.com" and length(split(lower(http.request.uri.path), "/")) ge 6)
邏輯解析
split(lower(http.request.uri.path), "/")
:將路徑按“/”分割為數組(如/a/b/c/d/e/f
分割后為["", "a", "b", "c", "d", "e", "f"]
),lower()
函數統一小寫,避免路徑大小寫干擾;length(...) ge 6
:計算分割后的數組長度,≥6即觸發規則(上述例子數組長度為7,滿足條件);- 路徑層級的計算:數組長度-1(因路徑開頭的“/”會導致第一個元素為空),如數組長度6對應實際層級5,可根據業務調整“ge 6”中的數值(如業務路徑最深為4層,可設為“ge 5”)。
動作設置
選擇“Block”:直接攔截過深路徑的請求,從源頭阻止目錄遍歷攻擊。
十、限速登錄接口(基于路徑+方法)
(適用場景:防止登錄接口被“暴力破解”,即黑客通過批量嘗試賬號密碼的方式非法登錄)
需求
對 /api/login
路徑的POST請求(登錄接口通常為POST提交賬號密碼)設置嚴格速率限制:單個IP每分鐘最多嘗試10次,超過則臨時攔截。
規則配置
1. 規則表達式(定位登錄接口)
(http.host eq "your-domain.com" and http.request.uri.path eq "/api/login" and http.request.method eq "POST")
2. 速率限制設置(需在Cloudflare“WAF → Rate limiting rules”中單獨創建)
限制維度 | 數值 | 說明 |
---|---|---|
統計對象 | 單個IP(ip.src) | 防止單IP高頻嘗試 |
時間窗口 | 1分鐘(1m) | 短窗口快速響應暴力破解 |
最大請求數 | 10次 | 可根據業務調整(如5次/1分鐘,更嚴格) |
邏輯解析
- 精準定位:通過“路徑(/api/login)+方法(POST)”雙重條件,僅對登錄接口生效,不影響其他API;
- 速率限制:相比普通自定義規則的
ratelimit
函數,Cloudflare“Rate limiting rules”支持更靈活的配置(如階梯限速、自定義響應碼),更適合登錄這類高敏感接口。
動作設置
選擇“Block”:超過10次/分鐘的IP將被臨時攔截(默認返回429狀態碼),可在規則中設置攔截時長(如10分鐘),限制黑客持續嘗試。
十一、規則配置的通用注意事項
- 代理狀態檢查:確保域名的DNS解析為“橙色云”(通過Cloudflare代理),否則規則無法生效;
- 執行順序:攔截類規則需放在“允許類規則”之前(可在Cloudflare控制臺拖動調整),避免允許規則優先觸發導致攔截失效;
- 測試驗證:通過
curl -v 目標URL
模擬請求(如指定空Referer、修改UA),或使用Cloudflare“規則測試器”(Rules Tester)驗證規則是否精準命中; - 日志跟蹤:在“分析和日志 > Log Explorer”中搜索規則名稱,查看攔截記錄,確認是否存在誤殺(如合法用戶被攔截需調整規則條件);
- 業務適配:所有規則需結合業務場景調整(如路徑深度、速率限制數值),避免因規則過嚴影響正常用戶訪問。
總結
Cloudflare自定義規則的核心是“精準匹配 + 靈活動作”:通過路徑、IP、UA、地理定位、請求方法等維度組合條件,再搭配Block/Challenge/Rate Limit等動作,可覆蓋從基礎攔截到高級防護的全場景需求。
本文的10個范例涵蓋了“爬蟲防護、地域封鎖、CSRF防御、暴力破解防護、目錄遍歷防護”等高頻場景,實際配置時可進一步組合條件(如“IP地域+路徑+速率限制”),構建更嚴密的安全防護體系。同時,需定期查看規則日志,根據攻擊趨勢調整條件,確保防護效果與用戶體驗的平衡。