使用 UFW 限制僅允許 Cloudflare IP 存取網站服務(Ubuntu)

| Linux | 4 Reads

這是一篇針對「在 Ubuntu 上使用 UFW 只允許 Cloudflare IP 存取網站服務」的完整部落格文章草稿,含概念說明、指令步驟與自動更新建議:


使用 UFW 限制僅允許 Cloudflare IP 存取網站服務(Ubuntu)

在使用 Cloudflare 為網站提供 DDoS 保護、CDN 加速等功能時,最佳做法是只允許 Cloudflare 的 IP 存取你的伺服器,阻擋所有其他來源,這樣才能最大程度保護你的主機不被繞過。

本文將介紹如何透過 Ubuntu 預設防火牆工具 ufw(Uncomplicated Firewall)實現這個設定。


為什麼不用 iptables?

如果你直接使用 iptables 設定規則,那麼這些規則在重開機後會消失,因此你還得安裝 iptables-persistent 來保存。但如果你用的是 ufw,它會自動處理保存與還原設定,更簡單好用,Ubuntu 也推薦使用 ufw 作為日常防火牆管理工具。


Cloudflare 的 IP 清單

Cloudflare 使用固定的 IP 段對外提供服務,他們會不定期更新這些 IP,因此你應該使用 官方來源


防火牆設定步驟

步驟 1:允許 SSH 或其他遠端管理連線

防火牆設定錯誤可能導致你連不上伺服器,因此第一步要確保你不會鎖住自己:

sudo ufw allow ssh

如果你用的是不同 port 或用的是 fail2ban,記得一併開放相關 port。


步驟 2:允許 Cloudflare IP 存取網站服務(如 80 與 443)

以 Cloudflare IPv4 中的其中一段為例:

sudo ufw allow from 173.245.48.0/20 to any port 80 proto tcp
sudo ufw allow from 173.245.48.0/20 to any port 443 proto tcp

你應該依照 官方 IP 清單 把所有 IPv4 與 IPv6 段一一加入。若 IP 太多,也可以寫 script 自動處理(文末有進階建議)。


步驟 3:封鎖其他所有來源對網站的存取

當 Cloudflare 的 IP 都加好後,記得將其他來源一律封鎖:

sudo ufw deny 80/tcp
sudo ufw deny 443/tcp

步驟 4:啟用 UFW 並檢查狀態

如果尚未啟用防火牆,請執行:

sudo ufw enable

檢查目前所有規則:

sudo ufw status numbered

你應該會看到類似:

To                         Action      From
--                         ------      ----
80/tcp                     DENY        Anywhere
80/tcp                     ALLOW       173.245.48.0/20
443/tcp                    DENY        Anywhere
443/tcp                    ALLOW       173.245.48.0/20

自動更新 Cloudflare IP(進階建議)

由於 Cloudflare 的 IP 可能會變化,建議你定期自動更新防火牆規則。你可以:

  1. 寫一個 script 抓取 Cloudflare 最新 IP 清單。

  2. 清除舊的規則、重新套用。

  3. 用 cron job 每天或每週自動執行。

我可以另寫一篇文章介紹這部分自動化流程,如果你有興趣請留言告訴我!


小結

透過 ufw 搭配 Cloudflare 的 IP 白名單,我們可以有效保護伺服器不被繞過 CDN 直接打擊。這樣做不僅能提升安全性,也能強化 Cloudflare 的防護效果。

記得確保你的遠端登入方式(如 SSH)始終可用,否則可能會把自己鎖在伺服器外喔!

This article was last edited at