介紹
UFW(Uncomplicated Firewall)是一個簡化的防火牆管理界面,它隱藏了像是iptables
和nftables
這樣的低層次封包過濾技術的複雜性。如果你想開始保護你的網絡,又不確定應該使用哪個工具,UFW可能是你的正確選擇。
本教程將展示如何在Debian 11上使用UFW設置防火牆。
先決條件
要按照本教程,你將需要一台安裝有Debian 11的伺服器,以及一個sudo
非root用戶,你可以通過按照初始設置Debian 11教程中的步驟1至3進行設置。
步驟1 – 安裝UFW
Debian 不會預設安裝 UFW。如果您遵循整個初始伺服器設置教程,您將已安裝並啟用了 UFW。如果沒有,請使用apt
現在安裝它:
接下來,您將設置 UFW 並在以下步驟中啟用它。
步驟 2 — 使用 UFW 與 IPv6(可選)
本教程是針對 IPv4 環境編寫的,但如果啟用了 IPv6,也將適用。如果您的 Debian 伺服器已啟用了 IPv6,您將希望確保 UFW 已配置為支持 IPv6。這將確保 UFW 除了 IPv4 外,還管理 IPv6 的防火牆規則。要配置此功能,使用nano
或您喜歡的編輯器打開 UFW 配置文件/etc/default/ufw
:
在文件中找到IPV6
,確保其值為yes
:
IPV6=yes
保存並關閉文件。如果您使用nano
,請按CTRL+X
,然後按Y
,然後按ENTER
保存並退出文件。
現在啟用 UFW 時,它將被配置為寫入 IPv4 和 IPv6 的防火牆規則。但是,在啟用 UFW 之前,您將希望確保防火牆已配置為允許您通過 SSH 連接。從設置默認策略開始。
步驟 3 — 設置默認策略
如果您剛開始使用防火牆,首先要定義的規則是您的默認策略。這些規則處理未明確匹配任何其他規則的流量。默認情況下,UFW 設置為拒絕所有入站連接並允許所有出站連接。這意味著任何試圖連接到您的服務器的人都將無法連接,而服務器內的任何應用程序都將能夠連接到外部世界。
將 UFW 規則設置回默認值,以確保您能夠跟隨本教程。要設置 UFW 使用的默認值,請使用以下命令:
您將收到以下類似的輸出:
OutputDefault 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连接,请使用以下命令:
这将创建防火墙规则,允许所有在默认情况下SSH守护程序侦听的端口22
上的连接。UFW知道与allow ssh
相关联的端口是哪个,因为它在/etc/services
文件中列为一个服务。
然而,你实际上可以通过指定端口而不是服务名称来编写等效的规则。例如,这个命令产生与上面相同的结果:
如果你配置了SSH守护程序使用不同的端口,你将不得不指定适当的端口。例如,如果你的SSH服务器正在侦听端口2222
,你可以使用相同的命令,但将22
替换为2222
。
现在你的防火墙已配置为允许传入的SSH连接,你可以启用它。
步骤5 — 启用UFW
要启用UFW,请使用以下命令:
您將收到一個警告,指出該命令可能會干擾現有的 SSH 連接。您已設置了一個允許 SSH 連接的防火牆規則,所以繼續進行應該是安全的。以 y
回應提示並按 ENTER
鍵。
防火牆現在已啟用。要查看您設置的規則,執行以下命令:
本教程的其餘部分將詳細介紹如何使用 UFW,包括允許和拒絕不同類型的連接。
步驟 6 — 允許其他連接
此時,您應該允許伺服器需要的所有其他連接,具體允許的連接取決於您的具體需求。您已經知道如何編寫基於服務名稱或端口的允許連接的規則;您已經為端口 22
上的 SSH 做了這個。
您可以對使用非加密網頁伺服器的 HTTP(端口 80
)進行同樣的操作。要允許此類流量,您可以輸入:
您也可以對使用加密網頁伺服器的 HTTPS(端口 443
)進行同樣的操作。要允許此類流量,您可以輸入:
在這兩種情況下,指定端口也將起作用,HTTP 為 80
,HTTPS 為 443
。例如:
然而,除了指定端口或已知服務外,還有其他允許連接的方法。下面將討論這一點。
特定端口范围
您可以使用 UFW 指定端口范围。例如,某些应用程序使用多个端口而不是单个端口。
例如,要允许使用端口 6000
到 6007
的 X11
连接,请使用以下命令:
在使用 UFW 指定端口范围时,必须指定规则适用的协议(tcp
或 udp
)。之前没有提到这一点,因为不指定协议会自动允许两种协议,这在大多数情况下都可以。
特定 IP 地址
在使用 UFW 时,您还可以指定 IP 地址。例如,如果您想允许来自特定 IP 地址(例如工作或家庭 IP 地址 203.0.113.4
)的连接,则需要指定 from
,然后是 IP 地址:
您还可以通过添加 to any port
后跟端口号来指定允许 IP 地址连接的特定端口。例如,如果您想允许 203.0.113.4
连接到端口 22
(SSH),请使用此命令:
子網路
如果您想允許一個IP地址子網路,您可以使用CIDR表示法來指定網路遮罩。例如,如果您想允許從203.0.113.1
到203.0.113.254
的所有IP地址,您可以使用這個命令:
同樣地,您也可以指定子網路203.0.113.0/24
允許連接的目的地端口。再次以端口22
(SSH)為例:
連接到特定網路接口
如果您想創建一個僅適用於特定網路接口的防火牆規則,您可以通過指定允許進入接口
,然後是網路接口的名稱來完成。
在繼續之前,查找您的網路接口將很有幫助。要這樣做,請使用這個命令:
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
. . .
突出顯示的輸出指示了網路接口的名稱。它們通常有像eth0
或enp3s2
這樣的名稱。
例如,如果您的服務器有一個名為eth0
的公共網路接口,您可以使用這個命令允許HTTP流量到達它:
這樣做將允許您的服務器從公共互聯網接收HTTP請求。
或者,如果您希望一个 MySQL 数据库服务器(端口 3306
)监听私有网络接口 eth1
上的连接,您可以使用以下命令:
这将允许私有网络上的其他服务器连接到您的 MySQL 数据库。
第 7 步 — 拒绝连接
如果您尚未更改传入连接的默认策略,UFW 将配置为拒绝所有传入连接。一般来说,这简化了通过要求您创建明确允许特定端口和 IP 地址通过的规则来创建安全防火墙策略的过程。
有时,您可能希望基于源 IP 地址或子网拒绝特定连接,可能是因为您知道您的服务器正在受到攻击。另外,如果您希望将默认传入策略更改为 allow
(这并不推荐),您将需要为任何不希望允许连接的服务或 IP 地址创建 deny
规则。
要编写 deny
规则,您可以使用上述描述的命令,将 allow
替换为 deny
。
例如,要拒绝 HTTP 连接,您可以使用以下命令:
或者,如果您希望拒绝来自 203.0.113.4
的所有连接,您可以使用以下命令:
现在,您可以学习如何实现删除规则。
步驟 8 — 刪除規則
知道如何刪除防火牆規則與知道如何建立它們一樣重要。刪除規則有兩種方式:按規則編號或按實際規則。這與建立規則時指定規則的方式相似。
按編號刪除
如果您使用規則編號來刪除防火牆規則,首先要做的事情是獲取防火牆規則清單。UFW status
命令具有 numbered
選項,該選項在每個規則旁顯示編號:
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
如果您決定刪除允許端口 80
上的 HTTP 連接的規則 2
,您可以在以下 UFW delete
命令中指定此操作:
這將顯示一個確認提示,您可以使用 y/n
回答。輸入 y
將刪除規則 2
。請注意,如果您啟用了 IPv6,您還需要刪除相應的 IPv6 規則。
按實際規則刪除
替代规则编号的方法是指定要删除的实际规则。例如,如果您想删除allow http
规则,可以这样写:
您还可以使用allow 80
而不是服务名称来指定规则:
如果存在,此方法将删除IPv4和IPv6规则。
第9步 — 检查UFW状态和规则
您随时可以使用此命令检查UFW的状态:
如果UFW被禁用,这是默认设置,则输出将如下:
OutputStatus: inactive
如果UFW处于活动状态,应该是如果您按照第3步进行操作,则输出将显示它处于活动状态,并列出您设置的任何规则。例如,如果防火墙设置为允许来自任何地方的SSH(端口22
)连接,则输出可能包括以下内容:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
如果要检查UFW如何配置防火墙,请使用status
命令。
第10步 — 禁用或重置UFW(可选)
如果您决定不使用UFW,可以使用此命令禁用它:
任何您使用UFW创建的规则将不再生效。如果您需要以后重新激活它,可以随时运行sudo ufw enable
。
如果您已经配置了UFW规则,但决定重新开始,您可以使用重置命令:
这将禁用UFW并删除您先前定义的任何规则。请注意,默认策略不会在任何时候修改它们时恢复到原始设置。这将为您提供UFW的全新开始。
结论
您的防火墙现已配置为允许(至少)SSH连接。确保允许您的服务器需要的任何其他传入连接,同时限制不必要的连接。这将确保您的服务器既功能正常又安全。
要了解更多常见的UFW配置,请查看这篇关于UFW基础知识:常见防火墙规则和命令的教程。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian