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

介紹

UFW(Uncomplicated Firewall)是一個簡化的防火牆管理界面,它隱藏了像是iptablesnftables這樣的低層次封包過濾技術的複雜性。如果你想開始保護你的網絡,又不確定應該使用哪個工具,UFW可能是你的正確選擇。

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

先決條件

要按照本教程,你將需要一台安裝有Debian 11的伺服器,以及一個sudoroot用戶,你可以通過按照初始設置Debian 11教程中的步驟1至3進行設置。

步驟1 – 安裝UFW

Debian 不會預設安裝 UFW。如果您遵循整個初始伺服器設置教程,您將已安裝並啟用了 UFW。如果沒有,請使用apt現在安裝它:

  1. sudo apt install ufw

接下來,您將設置 UFW 並在以下步驟中啟用它。

步驟 2 — 使用 UFW 與 IPv6(可選)

本教程是針對 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 連接。從設置默認策略開始。

步驟 3 — 設置默認策略

如果您剛開始使用防火牆,首先要定義的規則是您的默認策略。這些規則處理未明確匹配任何其他規則的流量。默認情況下,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)

這些命令將默認設置為拒絕入站並允許出站連接。這些防火牆默認值本身可能足夠用於個人電腦,但是服務器通常需要對來自外部用戶的入站請求做出反應。您將在下一步中開始此過程。

步驟 4 — 允許 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 做了這個。

您可以對使用非加密網頁伺服器的 HTTP(端口 80)進行同樣的操作。要允許此類流量,您可以輸入:

  1. sudo ufw allow http

您也可以對使用加密網頁伺服器的 HTTPS(端口 443)進行同樣的操作。要允許此類流量,您可以輸入:

  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

連接到特定網路接口

如果您想創建一個僅適用於特定網路接口的防火牆規則,您可以通過指定允許進入接口,然後是網路接口的名稱來完成。

在繼續之前,查找您的網路接口將很有幫助。要這樣做,請使用這個命令:

  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 地址或子网拒绝特定连接,可能是因为您知道您的服务器正在受到攻击。另外,如果您希望将默认传入策略更改为 allow(这并不推荐),您将需要为任何不希望允许连接的服务或 IP 地址创建 deny 规则。

要编写 deny 规则,您可以使用上述描述的命令,将 allow 替换为 deny

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

  1. sudo ufw deny http

或者,如果您希望拒绝来自 203.0.113.4 的所有连接,您可以使用以下命令:

  1. sudo ufw deny from 203.0.113.4

现在,您可以学习如何实现删除规则。

步驟 8 — 刪除規則

知道如何刪除防火牆規則與知道如何建立它們一樣重要。刪除規則有兩種方式:按規則編號或按實際規則。這與建立規則時指定規則的方式相似。

按編號刪除

如果您使用規則編號來刪除防火牆規則,首先要做的事情是獲取防火牆規則清單。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 規則。

按實際規則刪除

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

  1. sudo ufw delete allow http

您还可以使用allow 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