如何在 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,但如果你的沒有,只需從軟體倉庫安裝:
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 80/tcp
sudo ufw allow 443/tcp
如果需要更多規則,只需按照上述步驟添加即可。
如果您擁有靜態 IP 位址,並且只需要從一個位置透過 SSH 連接,您也可以像這樣將 SSH 連接限制為單一來源位址:
當然,您也可以輸入您自己的 IP 位址。
完成後,輸入以下指令啟用ufw:
搞定!防火牆已啟動,會在您重新啟動伺服器時自動啟動 :-)
如果您變更了ufw配置,可能需要先停用再重新啟用它才能使變更生效,如下所示:
sudo ufw enable
若要查看目前配置,只需輸入:
如果 ufw 未啟用,則會顯示「未啟動」訊息;否則,將列出目前定義的規則。
