設定 UFW 防火牆保護你的 VPS
在雲端運算日益普及的今天,Virtual Private Server (VPS) 已成為許多開發者與系統管理員的首選。然而,伺服器暴露在公開網路中,安全防護便成為重中之重。除了強化的 SSH 金鑰登入與定期更新系統外,配置防火牆是抵禦未經授權存取的第一道防線。
對於 Debian 和 Ubuntu 系列發行版而言,UFW (Uncomplicated Firewall) 是最直觀且易於管理的防火牆工具。它底層基於 iptables,但透過簡潔的命令列介面,讓管理複雜的網路規則變得輕鬆許多。這篇文章將帶領你逐步完成 UFW 的基礎設定,確保你的 VPS 既安全又暢通。
安裝與檢查 UFW 狀態
大多數現代 Linux 發行版預設並未安裝 UFW,或是處於停用狀態。首先,我們需要確認安裝狀態並啟動服務。
打開終端機,輸入以下指令來安裝 UFW(若已安裝則會提示已是最新版):
sudo apt update
sudo apt install ufw -y
安裝完成後,檢查防火牆的狀態:
sudo ufw status
若輸出顯示 Status: inactive,表示防火牆尚未啟用。在啟動之前,有一個極其重要的步驟:必須先允許 SSH 連線,否則一旦開啟防火牆,你可能會被自己擋在外面,導致無法透過 SSH 登入伺服器。
基礎規則設定:確保 SSH 不中斷
假設你使用的是標準的 SSH 埠口 22,請先執行以下指令允許 SSH 連線:
sudo ufw allow ssh
如果你修改了 SSH 埠口(例如改為 2222),請使用對應的埠口號碼:
sudo ufw allow 2222/tcp
UFW 支援多種協議與埠口範圍設定。例如,若要允許 TCP 協議的特定埠口,語法為 allow <port>/tcp;若需同時允許 UDP,則可寫成 allow <port>/tcp,udp。
除了 SSH,通常我們還需要開放 Web 服務。若你的 VPS 運行 Nginx 或 Apache,可以簡化指令:
sudo ufw allow 'Nginx Full'
sudo ufw allow 'Apache Full'
若你只使用 HTTP 或 HTTPS,也可以明確指定埠口:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
啟用防火牆與預設策略
完成必要規則的設定後,現在是啟動防火牆的時刻。UFW 提供了一個安全模式,在啟用時會短暫暫停規則套用,防止因配置錯誤導致連線中斷:
sudo ufw enable
系統會提示你確認,輸入 y 並按下 Enter。啟用後,再次檢查狀態:
sudo ufw status verbose
你應該會看到 Status: active 以及 Default: deny (incoming)。這表示預設策略是拒絕所有進入的連線,只有明確允許的埠口(如 SSH、HTTP)可以通行。這是防火牆的最佳實踐,遵循「最小權限原則」。
進階管理:刪除規則與重新載入
隨著服務架構的變化,你可能需要新增或移除規則。UFW 允許你透過埠口編號或服務名稱來管理規則。
若要刪除允許 HTTP 埠口的規則,可以使用:
sudo ufw delete allow 80/tcp
或者使用服務名稱:
sudo ufw delete allow 'Nginx Full'
若想查看所有已套用的規則編號以便精確刪除,可執行:
sudo ufw status numbered
輸出結果會列出每條規則的編號,例如:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
若要刪除編號為 2 的規則,執行:
sudo ufw delete 2
常見問題與排解
Q1:啟用 UFW 後無法 SSH 登入怎麼辦?
這是新手最常遇到的災難。如果你在不允許 SSH 的情況下啟用了 UFW,且無法透過控制台的 VNC 或控制台救援模式登入,你將完全失去對伺服器的控制權。
解決方案:
- 若你有控制台救援模式(Console Access),請透過該介面登入。
- 編輯
/etc/ufw/ufw.conf或/etc/default/ufw,將ENABLED=yes改為ENABLED=no。 - 或者,若規則尚未永久寫入,嘗試重啟服務:
sudo systemctl restart ufw。 - 預防勝於治療:務必在啟用前確認 SSH 規則已存在。
Q2:如何限制特定 IP 存取特定埠口?
有時我們不希望開放給所有人,而是只允許特定管理員的 IP 存取 SSH 或資料庫。
解決方案:
使用 from <IP> 參數進行限制。例如,只允許 IP 192.168.1.100 存取 SSH:
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
若要拒絕某個 IP 的所有連線,可執行:
sudo ufw deny from 192.168.1.200
小結
設定 UFW 是保護 VPS 簡單卻極具成效的一環。透過預設拒絕(Default Deny)的策略,我們能有效縮小攻擊表面。記住,防火牆規則的維護是一項持續的工作,隨著新服務的部署,請定期審視 sudo ufw status,確保沒有不必要的埠口暴露在外。
安全無小事,從正確設定防火牆開始,為你的雲端服務築起堅實的堡壘。