~/blog/wordpress-vps-ufw-firewall-hardening-guide.md
網站安全與防護 · 2025 / 09 / 22

VPS 大門誰來守? UFW 防火牆設定指南,讓你的 WordPress 固若金湯!

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
VPS 大門誰來守? UFW 防火牆設定指南,讓你的 WordPress 固若金湯!
目錄 table-of-contents.md

VPS 大門誰來守?UFW 防火牆設定指南,讓 WordPress 固若金湯

從共享主機搬到 VPS,你拿回了完整的掌控權,卻也同時扛起了「自己顧大門」的責任。本文直接給你結論:用 UFW 設定一道網路層防火牆,遵循「預設拒絕所有進入連線、只開放必要連接埠」的最小權限原則,就能在數分鐘內擋掉絕大多數自動化掃描與暴力破解。

對標準的 WordPress 站台來說,你只需要開放三個門:SSH(管理用)、HTTP(80)、HTTPS(443),其餘一律關閉。再加上限制 SSH 來源 IP 與速率限制,曝險面積就會大幅縮小。以下是完整、可直接照做的步驟,外加一個關鍵提醒:啟用防火牆「之前」一定要先放行 SSH,否則你會把自己鎖在伺服器外面。

為什麼 WordPress VPS 一定要設防火牆?

「我已經裝了安全外掛,還需要伺服器防火牆嗎?」答案是:需要,因為兩者守的是不同層次。

  • WordPress 安全外掛 / WAF:像是你家門口的保全,逐一檢查每個訪客的意圖(例如 HTTP 請求是否夾帶惡意程式碼)。但前提是——訪客已經走到你家門口了。
  • 伺服器防火牆(UFW):像是社區圍牆與管制進出的大門。不在允許名單上的「車輛」(網路封包)根本進不了社區,連靠近你家的機會都沒有。

網際網路上有無數自動化機器人(Bots)24 小時不停掃描有漏洞的伺服器,逐一試探常見連接埠,例如 SSH(22)、FTP(21)、Telnet(23),尋找入侵點。沒有防火牆的伺服器,就像在黑暗中發光的標靶。UFW 的價值,就是在網路層級先攔掉這些不必要的流量,只放行你真正需要的服務。

UFW 與 iptables 是什麼關係?

UFW 全名 Uncomplicated Firewall,設計初衷是簡化 Linux 上功能強大但語法繁瑣的 iptables。實際上 UFW 是 iptables 的前端介面:你下的每一條 UFW 規則,最終都會被轉譯成底層的 iptables 規則。對大多數 WordPress 站長來說,UFW 的直觀指令已經綽綽有餘,不必直接面對 iptables 的複雜語法。

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 22/tcp(建議自訂) 遠端管理伺服器 是(建議限來源 IP)
HTTP 80/tcp 一般網頁瀏覽、HTTPS 導向與憑證驗證
HTTPS 443/tcp 加密的安全網頁瀏覽

第一道門(最重要):放行 SSH

這一步是生死關頭。如果你先啟用防火牆,卻沒有設定放行 SSH 的規則,下一秒就會被踢出伺服器、再也連不進去。半夜把自己鎖在伺服器外面,絕對不是什麼好玩的經驗。

所以,在啟用 UFW 之前,務必先執行:

sudo ufw allow ssh

這個指令會放行 SSH 預設的 22 連接埠。如果你為了安全把 SSH 連接埠改過(這是好習慣),例如改成 2222,就要明確指定:

sudo ufw allow 2222/tcp

第二、三道門:放行 Web 伺服器流量

網站要被看見,當然要打開 HTTP(80)與 HTTPS(443)。UFW 內建了常用應用程式的設定檔(application profiles),可以直接用名稱套用。

如果你用的是 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

想知道系統上有哪些可用的應用程式設定檔,可以用:

sudo ufw app list

最後一步:啟用 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)

進階防禦工事:讓防火牆更聰明

基礎設定已經能擋掉絕大多數自動化攻擊,但若想做得更好,還有三招值得加上。

1. 限制 SSH 登入來源 IP

如果你的工作地點或家裡有固定 IP,強烈建議只允許從這些 IP 連線到 SSH,安全性會直接提升好幾個檔次——因為對其他所有來源而言,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 位址。要留意:如果你是使用浮動式(動態)IP,IP 一變動就會把自己擋在外面,這招比較適合有固定 IP 的環境。

2. 防止暴力破解(Rate Limiting)

對 SSH 這類重要服務,可以啟用 UFW 的速率限制。當同一個來源 IP 在短時間內(UFW 預設為 30 秒內 6 次以上)反覆嘗試連線,就會被暫時封鎖:

sudo ufw limit ssh

這是一招非常簡單卻極其有效的防禦,能有效遏止自動化的密碼猜測攻擊。如果你已經做了「限制來源 IP」,再疊加速率限制會更穩;若無法固定來源 IP,速率限制就是退而求其次的好選擇。

3. 開啟日誌(Logging)

有紀錄才能追蹤。開啟 UFW 日誌,能在出問題時回溯「誰在什麼時候嘗試連線到哪個連接埠」:

sudo ufw logging on

日誌檔通常存放在 /var/log/ufw.log。平常不會去看它,但需要時它就是破案的關鍵線索。

總結:地基打穩,才能安心蓋大樓

設定好 UFW,就像為 WordPress 網站打下堅實地基。它無法防禦所有類型的攻擊(例如應用程式層級的 SQL Injection 或 XSS),但能完美完成它的任務:在網路層級過濾掉絕大多數惡意流量與掃描,讓伺服器更安靜、更安全。

請牢牢記住核心思想——最小權限原則:只開絕對必要的門,其餘一律關閉。這套 UFW 設定不只適用於 WordPress,更是所有自行管理伺服器的基本功。打穩這道防線之後,你才能把心力放回內容創作與網站經營,而不是整天提心吊膽。

防火牆只是「縱深防禦」的第一層。網路層守好之後,接下來該往應用層強化:WAF 與 Bot 防護、防範 SQL Injection / XSS / CSRF 等攻擊。把每一層都補齊,才能真正滴水不漏。

如果你在設定過程中遇到問題,或希望有更全面、更客製化的企業級伺服器安全規劃,浪花科技的團隊隨時準備好提供專業協助。👉 立即聯繫浪花科技,讓我們為你的網站安全保駕護航!

延伸閱讀

// FAQ

常見問題

已經裝了 WordPress 安全外掛,還需要設定伺服器防火牆嗎?
需要,因為兩者守護不同層次。安全外掛或 WAF 像門口保全,逐一檢查已抵達網站的 HTTP 請求是否含惡意程式碼;伺服器防火牆(如 UFW)則像社區圍牆,在網路層先攔掉不在允許名單上的封包,讓它們連靠近網站的機會都沒有。兩者互補,缺一不可。
一個標準的 WordPress VPS 防火牆要開放哪些連接埠?
遵循最小權限原則,只開放三個必要的門:SSH(預設 22,建議自訂並限制來源 IP)用於遠端管理、HTTP(80)用於一般瀏覽與憑證驗證、HTTPS(443)用於加密連線。其餘一律關閉,可大幅縮小曝險面積。
用 UFW 設定 WordPress 防火牆的正確順序是什麼?
先用 sudo ufw default deny incoming 與 sudo ufw default allow outgoing 設定預設規則,再放行必要連接埠。關鍵是在執行 sudo ufw enable 啟用防火牆「之前」,務必先 sudo ufw allow ssh 放行 SSH,否則啟用後會立刻被鎖在伺服器外面連不進去。
啟用 UFW 後不小心把自己鎖在伺服器外面怎麼辦?
可透過 VPS 服務商提供的緊急控制台(Emergency Console)或 VNC 連線登入,這種方式不經過網路 SSH,而是直接模擬實體螢幕與鍵盤。登入後執行 sudo ufw allow ssh 補上規則,或先用 sudo ufw disable 暫時停用防火牆,重新取得控制權。
UFW 要如何防止 SSH 暴力破解?
對 SSH 執行 sudo ufw limit ssh 啟用速率限制,當同一來源 IP 在短時間內(UFW 預設為 30 秒內超過 6 次)反覆嘗試連線就會被暫時封鎖。若有固定 IP,更可用 sudo ufw allow from 你的IP to any port 22 proto tcp 只允許特定來源連線,安全性更高。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?