獲取 Cloudflare IP 列表
在設定防火牆之前,必須先取得 Cloudflare 官方提供的 IP 位段。這包含 IPv4 與 IPv6 兩個部分。你可以直接從 Cloudflare 官網查看,或是使用 curl 指令在終端機抓取。
使用 UFW 設定步驟
UFW 是 Ubuntu 內建較簡單的防火牆工具。設定的邏輯是先拒絕所有連入 80 與 443 埠的流量,再逐一放行 Cloudflare 的 IP。
首先,確保你的 SSH 連線(通常是 22 埠)已經放行,否則你會把自己鎖在伺服器外:
Bash
sudo ufw allow 22/tcp
接著,利用迴圈將 Cloudflare 的 IP 加入允許清單:
Bash
# 允許 IPv4
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do sudo ufw allow from $ip to any port 80,443 proto tcp; done
# 允許 IPv6
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do sudo ufw allow from $ip to any port 80,443 proto tcp; done
最後啟用防火牆並檢查狀態:
Bash
sudo ufw enable
sudo ufw status
使用 iptables 設定方式
如果你偏好使用 iptables,原理相同,即針對特定的來源 IP 開放目的連接埠。
Bash
# 允許 IPv4
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do sudo iptables -I INPUT -p tcp -s $ip --dport 80 -j ACCEPT; sudo iptables -I INPUT -p tcp -s $ip --dport 443 -j ACCEPT; done
請注意,iptables 的設定在重啟後會失效,建議安裝 iptables-persistent 來儲存規則。
自動化更新腳本
Cloudflare 的 IP 偶爾會變動。為了避免失效,建議將上述指令寫成一個 shell 腳本,並利用 crontab 設定每週執行一次。這樣當 Cloudflare 增加新機房時,你的防火牆規則也會自動同步,確保網站服務不會中斷。
如何設定 crontab 來定期自動執行這些指令?
建立自動化更新腳本
為了確保防火牆規則永遠跟隨 Cloudflare 的最新 IP 清單,我們可以寫一個簡單的腳本。請在你的家目錄建立一個檔案,例如叫 update_cf_ips.sh。
Bash
#!/bin/bash
# 先刪除現有的 Cloudflare UFW 規則(可選,或直接覆蓋)
# 這裡建議直接執行允許指令,UFW 會自動處理重複的規則
# 下載最新的 IPv4 並加入 UFW
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
sudo ufw allow from $ip to any port 80,443 proto tcp
done
# 下載最新的 IPv6 並加入 UFW
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ufw allow from $ip to any port 80,443 proto tcp
done
# 重新載入防火牆
sudo ufw reload
儲存後,記得給予執行權限:
Bash
chmod +x update_cf_ips.sh
設定 Crontab 定期執行
接著我們使用 crontab 讓系統每週一凌晨三點自動執行這個腳本。
輸入以下指令進入編輯介面:
Bash
sudo crontab -e
在檔案最後面加入這行(請將路徑替換成你實際存放腳本的位置):
Plaintext
0 3 * * 1 /home/youruser/update_cf_ips.sh > /dev/null 2>&1
驗證規則是否生效
設定完成後,你可以從外部直接輸入你的伺服器 IP(而非網域名稱)來測試。如果防火牆運作正常,瀏覽器應該會顯示連線逾時,因為你的個人電腦 IP 不在 Cloudflare 的允許清單內。只有透過 Cloudflare 代理的流量才能順利讀取網頁。