介紹
建立一個功能正常的防火牆對於保護您的雲伺服器至關重要。以前,設置防火牆是通過複雜或深奧的工具進行的。這些工具中的許多(例如 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
:
確認IPV6
設置為yes
:
/etc/default/ufw# /etc/default/ufw
#
# 設置為yes以應用支持IPv6的規則(no表示僅在loopback上使用IPv6
# 被接受)。您將需要 '禁用' 然後 '啟用' 防火牆以使
# 更改生效。
IPV6=yes
…
在你做出更改后,保存並退出文件。如果你使用 nano
,請按 CTRL + X
,然後按 Y
,最後按 ENTER
。
現在重新啟動你的防火牆,首先禁用它:
OutputFirewall stopped and disabled on system startup
然後再次啟用它:
OutputFirewall is active and enabled on system startup
您的 UFW 防火牆現在已設置好,以在適當時為 IPv4 和 IPv6 配置防火牆。接下來,您將調整防火牆的連接的默認規則。
設置 UFW 默認值
您可以通過定義允許和拒絕連接的默認規則來提高防火牆的效率。UFW 的默認規則是拒絕所有傳入連接並允許所有傳出連接。這意味著任何試圖連接到您的服務器的人將無法連接,而服務器內的任何應用程序都可以連接到外部。要更新 UFW 設置的默認規則,首先處理傳入連接規則:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
接下來,處理傳出連接規則:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
注意:如果你想更嚴格一點,你可以拒絕所有傳出請求。這個選項基於個人偏好。例如,如果你有一個公開的雲服務器,它可以幫助防止任何類型的遠程 shell 連接。儘管如此,這會使你的防火牆更難管理,因為你將不得不為所有傳出連接設置規則。您可以使用以下命令將其設置為默認值:
允許防火牆連線
允許連線需要更改防火牆規則,您可以通過在終端中發出命令來執行此操作。例如,如果您現在打開了防火牆,它將拒絕所有傳入連線。如果您通過SSH連接到您的伺服器,這將是一個問題,因為您將無法訪問您的伺服器。通過啟用對伺服器的SSH連線來防止這種情況發生:
如果您的更改成功,您將收到以下輸出:
OutputRule added
Rule added (v6)
UFW附帶一些默認設置,例如上一個示例中使用的ssh
命令。或者,您可以允許對使用傳輸控制協議(TCP)的端口22/tcp
的傳入連線,從而達到相同的目的:
然而,如果您在運行allow ssh
之後嘗試此操作,您將收到以下消息,因為規則已經存在:
OutputSkipping adding existing rule
Skipping adding existing rule (v6)
如果您的SSH伺服器正在執行端口2222
,則可以使用相同的語法允許連線,但將其替換為端口2222
。請注意,如果您僅使用端口號碼,它也會影響tcp
和udp
:
OutputRule added
Rule added (v6)
保障 Web 伺服器
要使用 檔案傳輸協定(FTP) 存取保障 web 伺服器,您需要允許連接到端口 80/tcp
。
允許端口 80
的連接對於像 Apache 和 Nginx 這樣聽取 HTTP 連接請求的 web 伺服器非常有用。為此,請允許對端口 80/tcp
的連接:
通常 UFW 提供了所需的規則檔案供 Web 伺服器正常運作。如果沒有,Web 伺服器規則檔案可能存儲為“WWW”,並以 ftp
或 tcp
的形式開啟,就像以下示例一樣:
您還可以使用 ftp
或端口 21
來允許 FTP 連接:
對於 FTP 連接,您還需要允許對端口 20
的連接:
您的調整將取決於您需要開啟的端口和服務,可能需要進行測試。請記得保留您的 SSH 連接。
指定端口範圍
您也可以使用 UFW 指定要允許或拒絕的端口範圍。要做到這一點,您必須首先指定範圍的低端端口,然後跟隨冒號 (:
),然後是範圍的高端。最後,您必須指定要應用規則的協議(tcp
或 udp
)。
例如,以下命令將允許從 1000
到 2000
的每個端口的 TCP 訪問,包括這些端口:
同樣,以下命令將拒絕從 1234
到 4321
的每個端口的 UDP 連接:
指定 IP 地址
您可以允許來自特定 IP 地址的連接,如以下示例所示。請務必使用您自己的信息替換 IP 地址:
正如這些示例所示,當涉及通過選擇性允許某些端口和 IP 地址連接來調整防火牆規則時,您具有很大的靈活性。查看我們的指南以了解更多關於允許來自特定 IP 地址或子網的傳入連接的資訊。
拒絕連接
如果你想打开所有服务器端口 – 这并不推荐 – 你可以允许所有连接,然后拒绝你不想给予访问的端口。以下示例是如何拒绝访问端口 80
的:
删除规则
如果你想删除你管理的一些规则,使用 delete
并指定你想消除的规则:
OutputRule deleted
Rule deleted (v6)
如果规则很长而且复杂,有一种备选的两步方法。首先,生成当前规则的编号列表:
然后,使用这个编号列表,查看当前允许的规则,并通过引用其编号来删除规则:
OutputStatus: 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
:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)
启用 UFW
一旦你定义了要应用于防火墙的所有规则,你可以启用 UFW 以开始执行它们。如果你通过 SSH 连接,请确保将你的 SSH 端口,通常是端口 22
,设置为允许接收连接。否则,你可能会被锁定在服务器外:
OutputFirewall is active and enabled on system startup
確認您的更改是否已生效,請檢查狀態以審核規則清單:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
22/tcp ALLOW Anywhere
2222/tcp ALLOW Anywhere
20/tcp ALLOW Anywhere
80/tcp DENY Anywhere
…
您也可以使用verbose
以獲得更詳盡的輸出:
要停用 UFW,請執行以下操作:
OutputFirewall stopped and disabled on system startup
重設默認設置
如果出於某些原因您需要將雲服務器的規則重置為默認設置,您可以使用ufw reset
命令來完成。請注意,在重置所有設置之前,您會收到提示以寫入y
或n
,因為這樣做可能會中斷現有的 SSH 連接:
OutputResetting 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基本知識:常見防火牆規則和命令的指南。