VPS 大門誰來守?資深工程師的 UFW 防火牆終極設定指南,讓你的 WordPress 固若金湯!
嗨,我是浪花科技的 Eric。很多朋友為了追求極致效能和完全的掌控權,興高采烈地從共享主機搬到了 VPS (虛擬專用伺服器)。看著 `top` 指令跑出來的滿滿資源,那種爽感不言而喻。但爽感之後,常常伴隨的是一種隱隱的不安:「我的網站…安全嗎?」
這感覺就像你搬進一棟豪宅,卻發現大門根本沒上鎖,任何人都能隨意進出。在網路世界,這個「大門」就是你的伺服器連接埠 (Ports),而「門鎖」就是我們今天要談的主角——防火牆。特別是在 Ubuntu/Debian 這類系統上,有一個既強大又平易近人的工具:UFW (Uncomplicated Firewall)。
好了,身為一個有點囉嗦的工程師,我得先強調一下:架設一個高效能的 WordPress 網站,效能調校跟安全防護絕對是一體兩面,缺一不可。 今天,就讓我帶你一步步設定 UFW,把你的 VPS 大門牢牢鎖上,讓那些網路上的不速之客望而卻步。
為什麼你的 WordPress VPS 非得設定防火牆不可?
「我的 WordPress 已經裝了安全外掛,還需要伺服器防火牆嗎?」這是我最常聽到的問題之一。答案是:絕對需要!
你可以這樣想像:
- WordPress 安全外掛 (如 WAF): 這像是你家門口的保全,他會檢查每個訪客的意圖(例如檢查 HTTP 請求是否包含惡意程式碼),但前提是訪客已經走到你家門口了。
- 伺服器防火牆 (UFW): 這更像是社區的圍牆和管制進出的大門。它在更早的階段就開始管制,凡是不在允許名單上的「車輛」(網路封包),連社區都進不來,根本沒機會靠近你家門口。
在茫茫的網際網路中,有無數的自動化機器人 (Bots) 每天 24 小時不停地掃描有漏洞的伺服器。它們會嘗試常見的連接埠,比如 SSH (22), FTP (21), Telnet (23) 等,試圖找到一個弱點入侵。如果沒有防火牆,你的伺服器就像在黑暗中發光的標靶,等著被攻擊。UFW 的作用,就是在網路層級擋掉這些不必要的流量,只開放你真正需要的服務,大幅降低伺服器的曝險面積。
UFW 基礎:從檢查安裝到預設規則
UFW 的全名是「Uncomplicated Firewall」,它的設計初衷就是簡化 `iptables` 這個功能強大但語法複雜的傳統 Linux 防火牆工具。對大多數 WordPress 站長來說,UFW 絕對是綽綽有餘了。
第一步:檢查 UFW 狀態
在動手之前,我們先確認一下 UFW 是否已經安裝並處於什麼狀態。打開你的 SSH 終端機,輸入以下指令:
sudo ufw status
如果回傳 `Status: inactive`,表示 UFW 已安裝但未啟用。如果系統提示找不到指令,那你就需要先安裝它(雖然大部分現代的 Ubuntu 發行版都已內建):
sudo apt-get update
sudo apt-get install ufw
第二步:建立最安全的「預設規則」
這是防火牆設定的黃金法則:預設全部拒絕,只允許必要的連線。 這樣可以確保你不會因為一時疏忽而漏掉某個需要關閉的連接埠。
執行以下兩條指令:
sudo ufw default deny incoming
sudo ufw default allow outgoing
deny incoming:拒絕所有「進來」的連線請求。這是最重要的安全防線。allow outgoing:允許所有「從伺服器出去」的連線。這能確保你的 WordPress 可以正常對外更新、呼叫 API 等。
現在,你的伺服器就像一個密室,沒有人能進來,但裡面的人可以自由與外界溝通。接下來,我們就要來開幾扇必要的門。
核心規則設定:為 WordPress 量身打造的防火牆策略
好了,重頭戲來了。我們將依序開啟 WordPress 網站運作所必需的幾個連接埠。
第一道門(最重要!):允許 SSH 連線
工程師的囉嗦時間: 這一步是生死關頭!如果你先啟用了防火牆,卻沒有設定允許 SSH 連線的規則,下一秒你就會被踢出伺服器,然後再也連不進去。相信我,半夜把自己鎖在伺服器外面,那種絕望感絕對不是什麼好玩的經驗。
所以,在啟用 UFW 之前,務必先執行:
sudo ufw allow ssh
這個指令會自動讀取 SSH 的設定檔,允許預設的 22 連接埠。如果你為了安全修改過 SSH 的連接埠(這是一個好習慣!),例如改成了 2222,那就要用這個指令:
sudo ufw allow 2222/tcp
第二、三道門:允許 Web 伺服器流量
網站要能被看見,當然要打開 HTTP (80) 和 HTTPS (443) 這兩個門。UFW 很聰明,它內建了一些常用應用程式的設定檔。
如果你用的是 Nginx:
sudo ufw allow 'Nginx Full'
這個 ‘Nginx Full’ 設定檔會同時開啟 80 和 443 連接埠。你也可以分開設定:
sudo ufw allow 'Nginx HTTP' # 只開 80
sudo ufw allow 'Nginx HTTPS' # 只開 443
如果你是用 Apache,指令也是類似的:
sudo ufw allow 'Apache Full'
或者,你也可以直接指定連接埠號碼,效果是一樣的:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
最後一步:啟用 UFW 並檢查狀態
確認以上規則都設定好了,深呼吸,然後啟用 UFW:
sudo ufw enable
系統會警告你這可能會中斷現有的 SSH 連線,輸入 `y` 並按下 Enter。因為我們已經設定好允許 SSH 的規則,所以連線並不會中斷。
啟用後,馬上檢查一下目前的規則是否都正確:
sudo ufw status verbose
你應該會看到類似這樣的輸出,清楚列出了預設政策和允許的規則:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
進階防禦工事:讓你的防火牆更聰明
基礎設定已經能擋掉 90% 的自動化攻擊了,但作為一個追求完美的工程師,我們還可以做得更多。
1. 限制 SSH 登入來源 IP
如果你的工作地點或家裡有固定的 IP 位址,強烈建議你只允許從這些 IP 連線到 SSH。這會讓安全性提升好幾個檔次。
# 先刪除原本允許所有 IP 的規則
sudo ufw delete allow ssh
# 新增只允許特定 IP 的規則
sudo ufw allow from 123.123.123.123 to any port 22 proto tcp
記得將 `123.123.123.123` 換成你自己的 IP 位址。
2. 防止暴力破解 (Rate Limiting)
對於像 SSH 這種重要的服務,我們可以啟用 UFW 的速率限制功能。如果某個 IP 在 30 秒內嘗試連線 6 次以上,就會被暫時封鎖。
sudo ufw limit ssh
這是一個非常簡單卻極其有效的防禦手段,可以有效遏止自動化的密碼猜測攻擊。
3. 開啟日誌 (Logging)
有紀錄才能追蹤。開啟 UFW 的日誌,可以幫助你在發生問題時,回溯是誰在什麼時候嘗試連線到哪個連接埠。
sudo ufw logging on
日誌檔案通常會存放在 `/var/log/ufw.log`。雖然平常沒事不會去看它,但需要的時候它就是破案的關鍵線索。
總結:地基打穩,才能安心蓋大樓
設定好 UFW 防火牆,就像是為你的 WordPress 網站打下了堅實的地基。它雖然不能防禦所有類型的攻擊(例如應用程式層級的 SQL Injection),但它能完美地完成它的任務:在網路層級過濾掉絕大多數的惡意流量和掃描,讓你的伺服器變得更加安靜和安全。
記住防火牆設定的核心思想:最小權限原則。只開絕對必要的門,其餘一律關閉。這套 **VPS 防火牆(UFW)最佳設定** 不僅適用於 WordPress,更是所有自行管理伺服器的基本功。有了這道堅固的防線,你才能更專注於內容創作和網站經營,而不是整天擔心受怕。
延伸閱讀:打造 WordPress 的縱深防禦體系
防火牆是第一道防線,但完整的安全策略是多層次的。當你完成了 UFW 設定後,強烈建議你繼續強化其他環節:
- 別只會裝外掛!資深工程師帶你從 0 到 1 打造 Ubuntu 終極 WordPress 安全堡壘
- 「網站大門忘了鎖?」資深工程師帶你架起 WordPress 銅牆鐵壁:WAF、Bot 防護與外掛設定終極指南
- 「SSL 又過期了?」別再半夜被客戶Call醒!終極 Certbot 自動續約聖經,一勞永逸搞定 HTTPS
如果你在設定過程中遇到任何問題,或是希望有更全面、更客製化的企業級伺服器安全規劃,浪花科技的團隊隨時準備好為你提供專業協助。畢竟,專心搞定程式碼和架構,是我們工程師最熱愛的事!
常見問題 (FAQ)
Q1: 什麼是 UFW?它跟 iptables 有什麼不同?
A1: UFW (Uncomplicated Firewall) 是一個使用者友善的防火牆管理工具,可以把它看作是 Linux 內核中強大但複雜的 `iptables` 的一個簡化介面。UFW 的指令更直觀易懂,專為簡化防火牆設定而設計,非常適合大多數網站伺服器的基礎防護需求。
Q2: 如果我不小心忘了設定 SSH 允許規則就啟用 UFW,該怎麼辦?
A2: 這是一個常見的失誤。如果你被鎖在外面,唯一的解決辦法通常是透過你的 VPS 服務商提供的緊急控制台 (Emergency Console) 或 VNC 連線登入。這種方式不依賴網路 SSH,而是直接模擬一個實體螢幕和鍵盤。登入後,再使用 `sudo ufw allow ssh` 或 `sudo ufw disable` 來重新取得控制權。
Q3: 一個標準的 WordPress 網站最少需要開啟哪些連接埠?
A3: 對於一個最基礎、最安全的 WordPress 網站,你至少需要開啟三個連接埠:SSH (預設 22/tcp,建議修改) 供你遠端管理、HTTP (80/tcp) 供訪客瀏覽、以及 HTTPS (443/tcp) 供加密的安全瀏覽。除此之外的所有連接埠都應該預設關閉。
Q4: 伺服器防火牆 (UFW) 跟 WordPress 的安全外掛 (WAF) 有什麼區別?我需要兩個都用嗎?
A4: 絕對需要,它們是不同層次的防禦。UFW 是網路層防火牆,負責管制 IP 和連接埠,像社區大門的警衛。WAF (Web Application Firewall) 是應用層防火牆,負責分析 HTTP 請求內容,防禦 SQL Injection、XSS 等攻擊,像你家門口的保全。兩者協同工作,構築「縱深防禦」,才能提供最全面的保護。






