設定 UFW 防火牆保護你的 VPS 文章首圖

設定 UFW 防火牆保護你的 VPS

設定 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 或控制台救援模式登入,你將完全失去對伺服器的控制權。

解決方案:

  1. 若你有控制台救援模式(Console Access),請透過該介面登入。
  2. 編輯 /etc/ufw/ufw.conf/etc/default/ufw,將 ENABLED=yes 改為 ENABLED=no
  3. 或者,若規則尚未永久寫入,嘗試重啟服務:sudo systemctl restart ufw
  4. 預防勝於治療:務必在啟用前確認 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,確保沒有不必要的埠口暴露在外。

安全無小事,從正確設定防火牆開始,為你的雲端服務築起堅實的堡壘。