
如果你希望達到「保護敏感目錄,但又不誤殺正常圖片」且「排除多個網段與 IP」的效果,你需要修改原本的運算式。
目前的規則因為使用了 wildcard 且沒有限制檔案類型,會導致該資料夾下所有東西(含圖片、CSS、JS)都被封鎖。
推薦的 Expression 寫法
請在 Cloudflare WAF 規則編輯頁面點擊 Edit expression,並將以下內容貼入:
Plaintext
(
(http.request.uri.path contains "/wp-includes/" and not http.request.uri.path contains ".js" and not http.request.uri.path contains ".css" and not http.request.uri.path contains ".gif")
or
(http.request.uri.path contains "/wp-content/uploads/" and http.request.uri.path contains ".php")
)
and not (ip.src in {140.0.0.0/8 1.1.1.1})
請將 1.1.1.1 替換為你實際的其他管理 IP。
邏輯重點說明
- 精準防禦 wp-includes:這個目錄通常不應該被直接存取 PHP 檔案。但我排除了
.js與.css,因為有些佈景主題或外掛會需要載入這裡的靜態資源,這樣寫可以避免網站版面壞掉。 - uploads 目錄只擋 PHP:針對
/wp-content/uploads/,我們只封鎖.php檔案。這能精準擋掉上傳漏洞(Webshell),同時讓你所有的.jpg、.png圖片都能正常顯示。 - 白名單機制:後方的
and not (ip.src in { ... })會把你的 140 網段和其他指定 IP 排除在規則之外,讓你擁有最高權限。
設定後的檢查清單
- 檢查圖片:點擊你之前貼的那張圖片連結,確認是否能正常開啟。
- 檢查 VPS 負載:回到終端機輸入
top。- 如果 load average 降到 1.0 ~ 2.0 之間。
- 如果 %Cpu(s) 的 id (idle) 數值增加。
- 如果 php-fpm 的進程數量明顯減少。
這代表你的 WAF 已經在第一線發揮作用,把攻擊擋在 Cloudflare,你的伺服器終於可以「休息」處理正常的請求了。
