更新於 2024/12/06閱讀時間約 5 分鐘

用 Cloudflare 當 Wordpress 的防火牆

當使用 Wordpress 架站時,系統至少會有四層漏洞:
  1. 作業系統 (Linux/Windows) 網路層的漏洞。
  2. Web Server (Apache/Nginx) 的漏洞。通常是緩衝溢位,視 Server 的版本而定。
  3. PHP 的漏洞。通常是緩衝溢位,視 PHP 版本而定。
  4. Wordpress 的漏洞。通常是利用 wp-cofig.php 取得系統資訊;wp-login.php 攻擊。
駭客會用各種路徑,找出 wordpress 的漏洞。圖為 Cloudflare 的攻擊 Log。

零、關於 Cloudflare

Cloudflare 是 CDN 業者 (Content Delivery Network),它提供網站存取的服務,可以讓網站映射在不同處,讓用戶更快速看到網頁內容。
也因為這特性,所以 Cloudflare 可以隱藏用戶網站的資訊。也就是說,它可以阻斷作業系統網路層的攻擊。而網站也隱藏在它背後,也可以讓駭客不容易直接攻擊 Web Server。
Source: https://support.cloudflare.com/hc/en-us/articles/205177068-How-does-Cloudflare-work-

一、將網站隱藏在 Cloudflare 後面

將網域的 DNS Name Server 設定放在 Cloudflare 後,就可以將網站隱藏在 Cloudflare 後面了。可以擋掉絕大多數作業系統層與伺服器層漏洞。
要做的安全措施至少有二項:
  1. 在 Cloudflare 設定介面中,將網站的 Proxy status (Proxy 狀態) 設成 Proxied (透過 Proxy 處理)。讓用戶看不到 Web 網站的 IP。
  2. 在 Web Server 端設定防火牆 ,例如 ufw (Uncomplicated Firewall)、iptables/nftablesWindows Defender 防火牆,設定只有 Cloudflare 的 IP 可以存取 80/443 Port。可以防止陌生人亂入/誤入原始網站。

二、設定 Cloudflare 的防火牆規則

免費方案的用戶,可以設定五條防火牆規則。這五條規則是有順序的,所以我們需要將它設成下面的規則:
Pro 等級的用戶,可以設定 20 條防火牆規則
  1. 檢查後放行特定的地方可以操作 wp-login。例如公司的固定 IP,或者不確定時就設定成台灣的 IP。
(http.request.full_uri contains “wp-login” and ip.geoip.country eq “TW”)
2. 封鎖 wp-login 與 wp-config 操作。
(http.request.full_uri contains “wp-login”) or (http.request.full_uri contains “wp-config”) or (http.request.uri.query contains “wp-config”)
這順序不能設成先封鎖 wp-login,再允許特定的地址查問。否則就直接封鎖了,自己就不能登入 Wordpress 的後台操作。

三、付錢開 WAF 或許較安心

若是商用網站或想付些錢保護網站,建議每個月付 20 美金使用 Pro 服務,就可以使用 Cloudflare 的 WAF 應用程式防火牆服務。若不確定要開啟防火牆的哪些服務,就全部開啟;確定不開啟再關。它提供 Wordpress、Drupal、Joomla 等 PHP 應用套件的防火牆功能。
免費 Free 方案,不提供 WAF 應用程式防火牆功能
成為 Pro 等級以上的 Cloudflare 付費會員,就可以打開 WAF (Web 應用程式防火牆)
駭客可能會攻擊一些 PHP 的漏洞,若是 Pro 等級以上的會員,建議一定要打開 Cloudflare PHP 選項。

四、常常檢查記錄

這才是最重要的步驟!
設定好了不會高枕無憂,勤勞是唯一解。常常檢查 Cloudflare 與 Web Server 的 log 記錄,看看有什麼異常狀況,再依異常狀況做對應處理。
補充
Cloudflare 會過濾掉 HTTP Server 回傳資訊,類似下面的回傳 Header 會被拿掉:
Server: Apache/1.0
但是它不會過濾掉 CGI 的回傳資訊,會有類似下面的 Header
x-powered-by: PHP/7.6.5
這行資訊會給 Cracker 很大的協助,駭客可以利用該版本的漏洞想辦法進系統。
要解決這個問題,要調整 PHP 的設定檔 php.ini,要將內定是 On 的 expose_php 參數,設成 Off,如下
expose_php = Off
重開 Web Server 後,就可以了。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.