如何在Debian 11上使用UFW设置防火墙

介紹

UFW,或稱為Uncomplicated Firewall,是一個簡化的防火牆管理介面,隱藏了較低層次的封包過濾技術(如iptablesnftables)的複雜性。如果您想開始保護您的網絡,並且不確定應該使用哪個工具,UFW可能是您的正確選擇。

本教程將向您展示如何在Debian 11上使用UFW設置防火牆。

先決條件

要按照本教程進行操作,您需要一台安裝有Debian 11並具有sudoroot用戶的服務器,您可以通過按照第1至3步Debian 11初始服務器設置教程中進行設置。

步驟1 – 安裝UFW

Debian 預設並未安裝 UFW。如果您已按照整個初始伺服器設定教程的步驟進行操作,則已經安裝並啟用了 UFW。否則,請使用apt進行安裝:

  1. sudo apt install ufw

下面的步驟將引導您設置並啟用 UFW。

第二步 — 使用 IPv6 與 UFW(可選)

本教程是以 IPv4 為基礎撰寫的,但如果您啟用了 IPv6,也可以使用它。如果您的 Debian 伺服器已啟用 IPv6,請確保 UFW 被配置以支援 IPv6。這將確保 UFW 除了 IPv4 外,還管理 IPv6 的防火牆規則。要配置這一點,請使用nano或您喜歡的編輯器打開 UFW 配置文件/etc/default/ufw

  1. sudo nano /etc/default/ufw

在文件中尋找IPV6,確保其值為yes

/etc/default/ufw excerpt
IPV6=yes

保存並關閉文件。如果您使用的是nano,請按CTRL+X,然後按Y,再按ENTER保存並退出文件。

現在啟用 UFW 時,它將被配置為編寫 IPv4 和 IPv6 的防火牆規則。不過,在啟用 UFW 之前,您需要確保防火牆已配置以允許通過 SSH 連接。首先設置默認策略。

第三步 — 設置預設策略

如果您剛開始使用防火牆,首先需要定義的是預設策略。這些規則處理那些不明確符合其他規則的流量。UFW 的預設設定是拒絕所有的入站連接並允許所有的出站連接。這意味著任何嘗試連接到您的伺服器的人都將無法連接,而伺服器內的應用程式則可以連接外部世界。

將 UFW 規則恢復為預設設定,以確保您可以按照本教程進行操作。使用以下命令設置 UFW 使用的預設值:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

您將收到以下類似的輸出:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

這些命令將預設設置為拒絕入站連接並允許出站連接。這些防火牆預設值可能已經足夠滿足個人電腦的需求,但伺服器通常需要對來自外部用戶的入站請求作出回應。您將在下一步開始進行此過程。

第四步 — 允許 SSH 連接

您目前無法啟用UFW防火牆,因為它會拒絕所有的入站連接,包括您訪問伺服器的嘗試。這意味著,如果您希望伺服器對這些類型的請求做出回應,您需要創建明確允許合法入站連接的規則,例如SSH或HTTP連接。如果您使用的是雲伺服器,您可能希望允許入站SSH連接,以便您可以連接並管理伺服器。

要配置伺服器以允許入站SSH連接,請使用以下命令:

  1. sudo ufw allow ssh

這將創建防火牆規則,允許在預設情況下SSH守護程序監聽的端口22上的所有連接。UFW知道allow ssh綁定的是哪個端口,因為它在/etc/services文件中列出了該服務。

不過,您也可以通過指定端口而非服務名稱來撰寫等效的規則。例如,以下命令與上述命令產生相同的結果:

  1. sudo ufw allow 22

如果您配置了SSH守護程序使用不同的端口,則必須指定相應的端口。例如,如果您的SSH伺服器監聽在端口2222上,您可以使用相同的命令,只需將22替換為2222

現在,您的防火牆已配置為允許入站SSH連接,您可以啟用它。

第5步 – 啟用UFW

要啟用UFW,請使用以下命令:

  1. sudo ufw enable

您將收到一個警告,內容是該命令可能會中斷現有的SSH連接。您已經設置了一個允許SSH連接的防火牆規則,所以可以繼續進行。請使用y鍵回答提示,然後按下ENTER鍵。

防火牆現在已啟用。要查看您設置的規則,運行以下命令:

  1. sudo ufw status verbose

本教程的其餘部分將詳細介紹如何使用UFW,包括允許和拒絕不同類型的連接。

第6步-允許其他連接

此時,您應該允許服務器所需的其他所有連接。您應該允許的連接取決於您的具體需求。您已經知道如何根據服務名稱或端口編寫允許連接的規則;您已經為端口22上的SSH進行了這樣的設置。

您可以為端口80上的HTTP進行這樣的設置,這是未加密的Web服務器使用的端口。要允許此類流量,您應該輸入:

  1. sudo ufw allow http

您也可以為端口443上的HTTPS進行同樣的設置,這是加密的Web服務器使用的端口。要允許此類流量,您應該輸入:

  1. sudo ufw allow https

在這兩種情況下,指定端口也是可行的,HTTP為80,HTTPS為443。例如:

  1. sudo ufw allow 80

然而,除了指定端口或已知服務外,還有其他允許連接的方法。這將在下一部分中討論。

特定的端口范围

您可以使用UFW指定端口范围。例如,一些应用程序使用多个端口而不是单个端口。

例如,要允许使用端口60006007X11连接,请使用以下命令:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

在使用UFW指定端口范围时,必须指定规则应适用的协议(tcpudp)。之前没有提到这一点是因为不指定协议会自动允许两种协议,在大多数情况下是可以的。

特定的IP地址

在使用UFW时,您还可以指定IP地址。例如,如果您想要允许来自特定IP地址的连接,例如工作或家庭IP地址203.0.113.4,您需要指定from,然后是IP地址:

  1. sudo ufw allow from 203.0.113.4

您还可以通过添加to any port后跟端口号来指定允许IP地址连接的特定端口。例如,如果您想要允许203.0.113.4连接到端口22(SSH),请使用此命令:

  1. sudo ufw allow from 203.0.113.4 to any port 22

子網路

如果您想允許一個IP地址的子網路,可以使用CIDR表示法來指定網絡遮罩。例如,如果您想允許從203.0.113.1203.0.113.254範圍的所有IP地址,可以使用以下命令:

  1. sudo ufw allow from 203.0.113.0/24

同樣地,您還可以指定子網路203.0.113.0/24允許連接的目標端口。以端口22(SSH)為例:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

連接到特定網絡接口

如果您想創建僅適用於特定網絡接口的防火牆規則,可以通過指定allow in on,後跟網絡接口的名稱來實現。

在繼續之前查找網絡接口將很有幫助。要這樣做,使用以下命令:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

突出顯示的輸出指示網絡接口名稱。它們通常具有像eth0enp3s2這樣的名稱。

例如,如果您的服務器有一個名為eth0的公共網絡接口,您可以使用以下命令允許HTTP流量:

  1. sudo ufw allow in on eth0 to any port 80

這樣做將允許您的服務器接收來自公共互聯網的HTTP請求。

或者,如果您想讓 MySQL 數據庫服務器(端口3306)在私有網絡接口eth1上監聽連接,您可以使用以下命令:

  1. sudo ufw allow in on eth1 to any port 3306

這將允許私有網絡上的其他服務器連接到您的 MySQL 數據庫。

步驟 7 — 拒絕連接

如果您尚未更改傳入連接的默認策略,UFW 將配置為拒絕所有傳入連接。通常,這簡化了通過要求您創建明確允許特定端口和 IP 地址的規則來創建安全防火牆策略的過程。

有時,您可能希望基於源 IP 地址或子網掩碼拒絕特定的連接,因為您知道您的服務器正在從該地區遭受攻擊。此外,如果您想將默認傳入策略更改為允許(不建議這樣做),則需要為任何不希望允許連接的服務或 IP 地址創建拒絕規則。

要編寫拒絕規則,您可以使用上述描述的命令,將允許替換為拒絕

例如,要拒絕 HTTP 連接,您可以使用以下命令:

  1. sudo ufw deny http

或者如果您想從203.0.113.4拒絕所有連接,您可以使用以下命令:

  1. sudo ufw deny from 203.0.113.4

現在,您可以學習如何實施刪除規則。

第八步 – 刪除規則

知道如何刪除防火牆規則和知道如何建立它們一樣重要。有兩種方式可以指定要刪除的規則:根據規則號碼或根據規則本身。這與創建規則時指定的方式類似。

根據規則號碼

如果您使用規則號碼來刪除防火牆規則,首先要做的是獲取防火牆規則列表。UFW status 命令帶有 numbered 選項,可以在每個規則旁邊顯示號碼:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

如果您決定要刪除允許在端口 80 上進行 HTTP 連接的規則 2,您可以在以下 UFW delete 命令中指定這一點:

  1. sudo ufw delete 2

這將顯示一個確認提示,您可以用 y/n 回答。輸入 y 將刪除規則 2。請注意,如果您啟用了 IPv6,您還需要刪除相應的 IPv6 規則。

根據實際規則

替代规则编号的方法是指定要删除的实际规则。例如,如果您想删除允许http规则,可以这样写:

  1. sudo ufw delete allow http

您还可以使用允许80来指定规则而不是服务名:

  1. sudo ufw delete allow 80

如果存在,此方法将同时删除IPv4和IPv6规则。

第9步 — 检查UFW状态和规则

您可以随时使用以下命令检查UFW的状态:

  1. sudo ufw status verbose

如果UFW被禁用(默认情况),输出将是这样的:

Output
Status: inactive

如果UFW处于活动状态(如果您遵循了第3步),输出将显示其处于活动状态,并列出您设置的任何规则。例如,如果防火墙设置为允许来自任何地方的SSH(端口22)连接,则输出可能包含类似以下内容:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

如果要检查UFW如何配置防火墙,可以使用status命令。

第10步 — 禁用或重置UFW(可选)

如果您决定不使用UFW,可以使用此命令禁用它:

  1. sudo ufw disable

任何您使用UFW创建的规则都将不再生效。如果您需要重新激活它,您可以随时运行sudo ufw enable

如果您已经配置了UFW规则,但是决定重新开始,您可以使用重置命令:

  1. sudo ufw reset

这将禁用UFW并删除您之前定义的任何规则。请注意,如果您在任何时候修改了默认策略,它们的原始设置将不会更改。这将为您提供一个全新的UFW起点。

总结

您的防火墙现已配置为允许(至少)SSH连接。请确保允许您的服务器需要的任何其他传入连接,同时限制不必要的连接。这将确保您的服务器既功能正常又安全。

要了解更多常见的UFW配置,请参阅这篇关于UFW基础知识:常见防火墙规则和命令的教程。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian-11-243261243130246d443771547031794d72784e6b36656d4a326e49732e