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

Posted by Y Cheung on Fri, Aug 13, 2021

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

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

創建Cloudflare帳戶

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

註冊Cloudflare
1. 輸入電子郵件 2.輸入密碼 3.點擊創建帳戶按鈕

向Cloudflare添加新站點

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

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

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

選擇Cloudflare收費方案
1. 選擇免費方案 2. 點擊繼續按鈕

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

wating
等待Cloudflare掃描現有DNS紀錄

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

添加dns记录
1. 點擊添加紀錄按鈕以增加DNS紀錄(可選,也可之後添加) 2. 點擊繼續按鈕

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

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

done
1. 點擊完成,檢查名稱服務器按鈕

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

starting
點擊開始使用按鈕

點擊開始使用按鈕成功激活後你會收到一封標題為「已将 example.com 添加到 Cloudflare Free计划中」的確認郵件。

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

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

Cloudflare防火牆設置

啟用自動程序攻擊模式

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

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

blocking logs
Cloudflare防火牆攔截紀錄

設置防火牆規則

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

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

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

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

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

  1. 防火墙通用規則。為避免誤中,可以將動作選擇為JS質詢或者質詢。
1(cf.threat_score ge 2 and not cf.client.bot)

参数解析:

  • cf.threat_score :威脅分數是Cloudflare用來確認IP信譽的分數,範圍是0~100,數字越大信譽約差。
  • cf.client.bot:合法機器人爬蟲
  1. 自定义防火墙规则。這條規則乃心酸總結,動作可以直接設置為阻止,寧可錯殺一百不可放過一個。
1(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只輸出摘要客氣多了。

❇可能會用到的工具

  • 查詢IP地址詳情工具:https://ipinfo.io/
  • IP Address Fraud Check工具:https://scamalytics.com/ip
  • 查詢user agent工具:https://userstack.com/ ,https://user-agents.net/lookup