Miklix

如何在 Ubuntu 伺服器上設定防火牆

已發佈: 2025年2月15日 晚上9:34:44 [UTC]
最後更新: 2026年1月12日 上午8:37:34 [UTC]

本文解釋並提供了一些範例,說明如何使用 ufw(Uncomplicated FireWall 的縮寫)在 GNU/Linux 上設定防火牆——這個名字很貼切,它確實是一種非常簡單的方法,可以確保您不會打開比需要的更多的連接埠。


該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:

How to Set Up a Firewall on Ubuntu Server

本文資訊基於 Ubuntu Server 14.04 x64,可能不適用於其他版本。 (更新:我確認本文資訊在 Ubuntu Server 24.04 上基本上仍然有效,但在過去的十年中,ufw 防火牆變得更加“智能”,它為常用伺服器應用程式提供了設定檔(例如,您可以啟用“Nginx full”而不是分別啟用 80 和 443 連接埠),因此需要啟用“Nginx full”而不是分別啟用 80 和 443 連接埠),因此需要停用/啟用整個防火牆才能套用新規則。

當我剛開始接觸 GNU/Linux(Ubuntu)伺服器時,設定防火牆需要手動建立和維護一個可能非常複雜的 iptables 設定檔。不過,我最近發現了 ufw,它是 Uncomplicated Firewall(簡易防火牆)的縮寫——它確實非常簡單 :-)

我的 Ubuntu Server 14.04 安裝套件裡已經預先安裝了 ufw,但如果你的沒有,只需從軟體倉庫安裝:

sudo apt-get install ufw

UFW 實際上只是一個簡化 iptables 配置的工具——底層仍然是 iptables 和 Linux 核心防火牆正在執行過濾操作,因此 ufw 的安全性並不比它們更高或更低。然而,由於 ufw 大大簡化了防火牆的正確配置,它可以降低人為錯誤的風險,因此對於經驗不足的管理員來說可能更安全。

如果您的伺服器同時設定了 IPv4 和 IPv6,請確保 UFW 也啟用了 IPv6。編輯 `/etc/default/ufw` 文件,尋找包含 `IPV6=yes` 的行。我的伺服器上已經存在這一行,但如果不存在或顯示為 `no`,則需要進行編輯。

然後只需使用命令列啟用您想要開放的連接埠即可。如果您是透過 SSH 連接到伺服器,請確保也允許 SSH 訪問,否則可能會中斷您的連接,甚至在您啟用 SSH 時將您鎖定在伺服器之外——這取決於您是否擁有伺服器的實體訪問權限,這可能會有點不方便 ;-)

例如,如果您使用標準連接埠 22 上的 ssh,並且您正在設定一個同時支援未加密(連接埠 80 上的 HTTP)和加密(連接埠 443 上的 HTTPS)連接的 Web 伺服器,則您需要發出下列命令來設定 ufw:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

如果需要更多規則,只需按照上述步驟添加即可。

如果您擁有靜態 IP 位址,並且只需要從一個位置透過 SSH 連接,您也可以像這樣將 SSH 連接限制為單一來源位址:

sudo ufw allow from 192.168.0.1 to any port 22

當然,您也可以輸入您自己的 IP 位址。

完成後,輸入以下指令啟用ufw:

sudo ufw enable

搞定!防火牆已啟動,會在您重新啟動伺服器時自動啟動 :-)

如果您變更了ufw配置,可能需要先停用再重新啟用它才能使變更生效,如下所示:

sudo ufw disable
sudo ufw enable

若要查看目前配置,只需輸入:

sudo ufw status

如果 ufw 未啟用,則會顯示「未啟動」訊息;否則,將列出目前定義的規則。

分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

Mikkel Christensen

關於作者

Mikkel Christensen
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。