使用Cloudflare加速和保護你的Wordpress網站

Cloudflare是提供基於反向代理的內容傳遞網路及分布式域名解析的服務,也就是我們俗稱的CDN加速。它不僅可以緩存網站內容,加速網站提升用戶體驗,還能進行簡單的防火牆設置,讓你的網站和服務器更安全。

使用Cloudflare服務首先需要註冊一個帳戶,你還需要擁有網站域名的管理權。

§ 創建Cloudflare帳戶

打開 https://dash.cloudflare.com/sign-up 創建帳戶。

Create an account on Cloudflare
1. 輸入電子郵件 2.輸入密碼 3.點擊創建帳戶按鈕

§向Cloudflare添加新站點

登錄Cloudflare網站後在頂部的菜單中選擇添加新站點,在打開的頁面中輸入網址添加站點。

添加站點到Cloudflare
1. 輸入站點域名Domain 2. 點擊添加站點按鈕

然後選擇收費計劃方案。一般來說個人站點或者只是測試Cloudflare服務的話使用免費方案就夠了。

CloudFlare Plans
1. 選擇免費方案 2. 點擊繼續按鈕

之後,Cloudflare 將會掃描該站點的已有DNS紀錄,若找到將會自動導入,若無法找到則須手動添加。

waiting CloudFlare scanning exist DNS records
等待Cloudflare掃描現有DNS紀錄

檢視Cloudflare掃描到的已有DNS紀錄,如需變更可修改紀錄,也可在網站添加成功後任意時間進行修改。

Edit DNS records in CloudFlare
1. 點擊添加紀錄按鈕以增加DNS紀錄(可選,也可之後添加) 2. 點擊繼續按鈕

根據頁面上的提示,前往你的域名註冊機構網站,將Cloudflare添加為名稱服務器 nameserver ,刪除其他nameserver。

一些主流域名註冊機構如 GoDaddy、BlueHost 等修改Nameserver方法可參考:https://support.cloudflare.com/hc/en-us/articles/205195708-Changing-your-domain-nameservers-to-Cloudflare

Update nameserver to cloudflare
1. 點擊完成,檢查名稱服務器按鈕

完成之後就可以看到這個頁面,可以繼續進行一些簡單的設置,也可在之後前往各項設置進行修改。

almost done adding a new site to cloudflare
點擊開始使用按鈕

成功激活後你會收到一封標題為「[Cloudflare]:已将 example.com 添加到 Cloudflare Free计划中」的確認郵件。

Cloudflare active site email
Cloudflare 確認激活站點的郵件內容

Cloudflare提供了SSL/TLS、防火牆\緩存\規則\Scrape Shield等功能,本文主要介紹防火牆設置。

§ Cloudflare防火牆設置

啟用Cloudflare防火牆自動程序攻擊模式

enable Cloudflare firewall Bot Fight Mode
1 點擊防火牆 2選擇自動程序 3打開開關啟用自動程序攻擊模式Bot fight mode

開啟後等待一些時間,你有可能在防火牆攔截紀錄中找到相關紀錄。

Cloudflare firewall Bot Fight Mode records
Cloudflare防火牆攔截紀錄

Cloudflare 防火牆規則設置

針對Bad bots、spam attacks 等行為,我們在Cloudflare防火牆中除了啟用自動程序攻擊模式外,還需手動創建防火牆規則。

Add firewall rule in CloudFlare
1 點擊防火牆 2 點擊防火牆規則 3 點擊創建防火牆規則按鈕

免費帳戶可以創建5個防火牆規則。

Create a new firewall rule in CloudFlare
1. 輸入防火牆規則名稱 2.3.輸入防火牆規則,可切換表達式模式和使用表達式生成器 4.選擇匹配規則後的動作 5. 部署

一般來說,可以參考著創建以下2條防火牆規則:

(cf.threat_score ge 2 and not cf.client.bot)

這條通用規則為避免誤中,可以將動作選擇為JS質詢或者質詢。

cf.threat_score :威脅分數是Cloudflare用來確認IP信譽的分數,範圍是0~100,數字越大信譽約差。

cf.client.bot:合法機器人爬蟲

(http.user_agent contains "curl") or (http.user_agent contains "requests") or (http.user_agent contains "python") or (http.user_agent contains "java") or (http.user_agent contains "urllib") or (http.user_agent contains "Java") or (http.user_agent contains "Ruby") or (http.user_agent contains "Go-http-client") or (not http.user_agent contains "/" and not ip.src in $white_list) or (http.request.uri.path eq "/wp-login.php" and http.request.version eq "HTTP/1.1" and http.request.method eq "POST") or (http.user_agent contains "scalaj-http") or (http.user_agent contains "MJ12bot") or (http.user_agent contains "PetalBot") or (http.request.uri.path eq "/xmlrpc.php" and not http.request.uri.query contains "jetpack") or (http.user_agent contains "Readdig") or (http.user_agent contains "AhrefsBot") or (http.user_agent contains "okhttp") or (http.user_agent contains "SemrushBot") or (http.user_agent contains "DotBot") or (http.user_agent contains "BLEXBot") or (http.user_agent contains "Buck") or (http.user_agent contains "Mb2345Browser")

這條規則乃心酸總結,動作可以直接設置為阻止,寧可錯殺一百不可放過一個。

http.user_agent:用戶代理

http.request.uri.path:頁面路徑

http.request.version:HTTP版本

http.request.method:HTTP請求方法

ip.src:訪客IP地址

更多Cloudflare防火牆規則字段的說明,可以參考這篇「Cloudflare中firewall的编写方法」。

§ 一些小提示

NGINX LOG日誌中恢復原始訪問者IP紀錄

在Cloudflare中添加並激活網站後,你會發現服務器上的NGINX日誌紀錄中的訪客IP都變成了Cloudflare的IP,這給日常服務器監控帶來不便,因此我們需要修改NGINX的設定,使LOG中紀錄原始訪客IP。

修改方法參考 :

啟用Hotlink保護後RSS feed中圖片不可見

根據官方文檔的說明,啟用Hotlink保護將導致RSS feed中的圖片不可見,嗐,現在用RSS Feed的人越來越少了,圖片不可見就不可見吧,另外也可以在每一個feed中增加文字說明引導訪客前往原站點,覺得這比RSS feed只輸出摘要客氣多了。

可能會用到的工具

Y Cheung
Blogger, Programer & Traveler.
Shanghai