如何在Ubuntu和Debian雲服務器上使用UFW設置防火牆

介紹

建立一個功能正常的防火牆對於保護您的雲伺服器至關重要。以前,設置防火牆是通過複雜或深奧的工具進行的。這些工具中的許多(例如 iptables)具有許多內置功能,但需要用戶付出額外的努力來學習和理解它們。

另一個選擇是UFW,或Uncomplicated Firewall。UFW 是一個對 iptables 的前端,旨在提供比其他防火牆管理工具更為用戶友好的界面。UFW 在 Linux 社區中得到了良好的支持,通常在許多發行版中默認安裝。

在本教程中,您將使用 UFW 設置防火牆,以保護 Ubuntu 或 Debian 雲伺服器。您還將學習如何設置 UFW 默認規則來允許或拒絕端口和 IP 地址的連接,刪除您創建的規則,禁用和啟用 UFW,以及如果您喜歡的話,將一切重置回默認設置。

先決條件

為了遵循本教程,您需要一台運行Ubuntu或Debian的伺服器。您的伺服器應該具有一個非root用戶並具有sudo權限。要為Ubuntu設置這個,請按照我們的指南在Ubuntu 20.04上進行初始伺服器設置。要為Debian設置這個,請按照我們的指南在Debian 11上進行初始伺服器設置。這兩個初始伺服器設置指南都將確保您的機器上安裝了UFW並且您有一個安全的環境,您可以在其中練習創建防火牆規則。

使用IPv6與UFW

如果您的虛擬私人伺服器(VPS)配置了IPv6,請確保UFW配置為支持IPv6,以便它配置您的IPv4和IPv6防火牆規則。要做到這一點,打開您喜歡的文本編輯器中的UFW配置文件。這裡我們將使用nano

  1. sudo nano /etc/default/ufw

確認IPV6設置為yes

/etc/default/ufw
# /etc/default/ufw # # 設置為yes以應用支持IPv6的規則(no表示僅在loopback上使用IPv6 # 被接受)。您將需要 '禁用' 然後 '啟用' 防火牆以使 # 更改生效。 IPV6=yes

在你做出更改后,保存並退出文件。如果你使用 nano,請按 CTRL + X,然後按 Y,最後按 ENTER

現在重新啟動你的防火牆,首先禁用它:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

然後再次啟用它:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

您的 UFW 防火牆現在已設置好,以在適當時為 IPv4 和 IPv6 配置防火牆。接下來,您將調整防火牆的連接的默認規則。

設置 UFW 默認值

您可以通過定義允許和拒絕連接的默認規則來提高防火牆的效率。UFW 的默認規則是拒絕所有傳入連接並允許所有傳出連接。這意味著任何試圖連接到您的服務器的人將無法連接,而服務器內的任何應用程序都可以連接到外部。要更新 UFW 設置的默認規則,首先處理傳入連接規則:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

接下來,處理傳出連接規則:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

注意:如果你想更嚴格一點,你可以拒絕所有傳出請求。這個選項基於個人偏好。例如,如果你有一個公開的雲服務器,它可以幫助防止任何類型的遠程 shell 連接。儘管如此,這會使你的防火牆更難管理,因為你將不得不為所有傳出連接設置規則。您可以使用以下命令將其設置為默認值:

  1. sudo ufw default deny outgoing

允許防火牆連線

允許連線需要更改防火牆規則,您可以通過在終端中發出命令來執行此操作。例如,如果您現在打開了防火牆,它將拒絕所有傳入連線。如果您通過SSH連接到您的伺服器,這將是一個問題,因為您將無法訪問您的伺服器。通過啟用對伺服器的SSH連線來防止這種情況發生:

  1. sudo ufw allow ssh

如果您的更改成功,您將收到以下輸出:

Output
Rule added Rule added (v6)

UFW附帶一些默認設置,例如上一個示例中使用的ssh命令。或者,您可以允許對使用傳輸控制協議(TCP)的端口22/tcp的傳入連線,從而達到相同的目的:

  1. sudo ufw allow 22/tcp

然而,如果您在運行allow ssh之後嘗試此操作,您將收到以下消息,因為規則已經存在:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

如果您的SSH伺服器正在執行端口2222,則可以使用相同的語法允許連線,但將其替換為端口2222。請注意,如果您僅使用端口號碼,它也會影響tcpudp

  1. sudo ufw allow 2222/tcp
Output
Rule added Rule added (v6)

保障 Web 伺服器

要使用 檔案傳輸協定(FTP) 存取保障 web 伺服器,您需要允許連接到端口 80/tcp

允許端口 80 的連接對於像 Apache 和 Nginx 這樣聽取 HTTP 連接請求的 web 伺服器非常有用。為此,請允許對端口 80/tcp 的連接:

  1. sudo ufw allow 80/tcp

通常 UFW 提供了所需的規則檔案供 Web 伺服器正常運作。如果沒有,Web 伺服器規則檔案可能存儲為“WWW”,並以 ftptcp 的形式開啟,就像以下示例一樣:

  1. sudo ufw allow www

您還可以使用 ftp 或端口 21 來允許 FTP 連接:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

對於 FTP 連接,您還需要允許對端口 20 的連接:

  1. sudo ufw allow 20/tcp

您的調整將取決於您需要開啟的端口和服務,可能需要進行測試。請記得保留您的 SSH 連接。

指定端口範圍

您也可以使用 UFW 指定要允許或拒絕的端口範圍。要做到這一點,您必須首先指定範圍的低端端口,然後跟隨冒號 (:),然後是範圍的高端。最後,您必須指定要應用規則的協議(tcpudp)。

例如,以下命令將允許從 10002000 的每個端口的 TCP 訪問,包括這些端口:

  1. sudo ufw allow 1000:2000/tcp

同樣,以下命令將拒絕從 12344321 的每個端口的 UDP 連接:

  1. sudo ufw deny 1234:4321/udp

指定 IP 地址

您可以允許來自特定 IP 地址的連接,如以下示例所示。請務必使用您自己的信息替換 IP 地址:

  1. sudo ufw allow from your_server_ip

正如這些示例所示,當涉及通過選擇性允許某些端口和 IP 地址連接來調整防火牆規則時,您具有很大的靈活性。查看我們的指南以了解更多關於允許來自特定 IP 地址或子網的傳入連接的資訊。

拒絕連接

如果你想打开所有服务器端口 – 这并不推荐 – 你可以允许所有连接,然后拒绝你不想给予访问的端口。以下示例是如何拒绝访问端口 80 的:

  1. sudo ufw deny 80/tcp

删除规则

如果你想删除你管理的一些规则,使用 delete 并指定你想消除的规则:

  1. sudo ufw delete allow 80/tcp
Output
Rule deleted Rule deleted (v6)

如果规则很长而且复杂,有一种备选的两步方法。首先,生成当前规则的编号列表:

  1. sudo ufw status numbered

然后,使用这个编号列表,查看当前允许的规则,并通过引用其编号来删除规则:

  1. sudo ufw delete number
Output
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 22/tcp ALLOW IN Anywhere [ 3] 2222/tcp ALLOW IN Anywhere [ 4] 80 ALLOW IN Anywhere [ 5] 20/tcp ALLOW IN Anywhere …

例如,如果端口 80 在列表中的编号是 4,你会使用以下语法。在进行操作时,你可能会被询问是否要继续。你可以选择是 y 或否 n

  1. sudo ufw delete 4
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted (v6)

启用 UFW

一旦你定义了要应用于防火墙的所有规则,你可以启用 UFW 以开始执行它们。如果你通过 SSH 连接,请确保将你的 SSH 端口,通常是端口 22,设置为允许接收连接。否则,你可能会被锁定在服务器外:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

確認您的更改是否已生效,請檢查狀態以審核規則清單:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

您也可以使用verbose以獲得更詳盡的輸出:

  1. sudo ufw status verbose

要停用 UFW,請執行以下操作:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

重設默認設置

如果出於某些原因您需要將雲服務器的規則重置為默認設置,您可以使用ufw reset命令來完成。請注意,在重置所有設置之前,您會收到提示以寫入yn,因為這樣做可能會中斷現有的 SSH 連接:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530' Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530' Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

將設置重置為默認設置將停用 UFW 並刪除您之前定義的任何規則。然而,如果您修改了默認設置,則默認設置不會恢復到其原始設置。現在您可以重新開始使用 UFW 並根據您的喜好自定義規則和連接。

結論

在這個教程中,您學會了如何設置和配置您的雲伺服器,以允許或限制對一組端口或IP地址的訪問。此外,您還練習了刪除任何不再需要的規則,並確認這些更改是否已被您的UFW防火牆禁用然後重新啟用。最後,您學會了如何將您的UFW防火牆重置為默認設置。要了解更多有關UFW的可能性,請查看我們關於UFW基本知識:常見防火牆規則和命令的指南。

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server