介绍
UFW,或不复杂的防火墙,是一个简化的防火墙管理接口,隐藏了低级别的数据包过滤技术的复杂性,如iptables
和nftables
。
本教程将向您展示如何在 Debian 11 上使用 UFW 设置防火墙。
前提条件
要遵循本教程,您将需要一个 Debian 11 服务器和一个sudo
非 root 用户,您可以通过遵循 Debian 11 初始服务器设置教程中的 **步骤 1 到 3 来设置。
步骤 1 – 安装 UFW
Debian 默认情况下不安装 UFW. 如果您遵循了整个 初始服务器设置教程,您将安装并启用 UFW。
1sudo apt install ufw
您将设置 UFW 并在以下步骤中启用它。
步骤 2 — 使用IPv6与UFW(可选)
如果您的 Debian 服务器具有 IPv6 启用,您将想要确保 UFW 已配置为支持 IPv6。这将确保 UFW 将管理 IPv6 的防火墙规则,除 IPv4 外。
1sudo nano /etc/default/ufw
在文件中找到IPV6
,并确保值为是
:
1[label /etc/default/ufw excerpt]
2IPV6=yes
如果您正在使用nano
,请按CTRL+X
,然后按Y
,然后按ENTER
,以保存和退出文件。
现在,当 UFW 启用时,它将配置为写入 IPv4 和 IPv6 防火墙规则。 但是,在启用 UFW 之前,您需要确保防火墙配置为允许您通过 SSH 连接。
步骤 3 – 设置默认策略
如果你刚刚开始使用防火墙,第一个要定义的规则是你的默认策略. 这些规则处理的流量不明确匹配任何其他规则. 默认情况下,UFW 设置为拒绝所有传入连接,并允许所有传出连接. 这意味着任何试图到达你的服务器的人都无法连接,而服务器中的任何应用程序都可以到达外部世界。
将您的 UFW 规则重新设置为默认值,以便您可以确定您将能够跟随本教程。
1sudo ufw default deny incoming
2sudo ufw default allow outgoing
您将获得如下结果:
1[secondary_label Output]
2Default incoming policy changed to 'deny'
3(be sure to update your rules accordingly)
4Default outgoing policy changed to 'allow'
5(be sure to update your rules accordingly)
这些命令设置了默认值,以拒绝接入并允许输出连接. 这些默认值单独可能足以为个人计算机,但服务器通常需要响应来自外部用户的接入请求。
第4步:允许 SSH 连接
您还不能启用 UFW 防火墙,因为它会拒绝所有接入连接,包括您试图访问服务器的尝试,这意味着您需要创建明确允许合法的接入连接的规则 - 例如 SSH 或 HTTP 连接 - 如果您希望您的服务器响应这些类型的请求。
要将服务器配置为允许接入的 SSH 连接,请使用以下命令:
1sudo ufw allow ssh
这将创建防火墙规则,允许所有连接在端口22
,这是 SSH 示威者默认听取的端口. UFW 知道哪个端口与允许 ssh
关联,因为它在/etc/services
文件中列为服务。
但是,您实际上可以通过指定端口而不是服务名称来编写等效规则,例如,此命令会产生与上面的命令相同的结果:
1sudo ufw allow 22
例如,如果您的 SSH 服务器正在倾听 2222
端口,您可以使用相同的命令,但可以用 2222
代替 2222
。
现在您的防火墙已配置为允许接入的 SSH 连接,您可以启用它。
步骤 5 – 允许 UFW
要启用 UFW,请使用此命令:
1sudo ufw enable
您将收到一个警告,称该命令可能会干扰现有 SSH 连接. 您已经设置了一个允许 SSH 连接的防火墙规则,所以应该保持正常。
防火墙已启动. 若要查看您已设置的规则,请运行此命令:
1sudo ufw status verbose
本教程的其余部分涵盖了如何更详细地使用UFW,包括允许和拒绝不同类型的连接。
步骤 6 – 允许其他连接
在此时,你应该允许你的服务器需要的所有其他连接正常运作。你应该允许的连接取决于你的具体需求。你已经知道如何编写允许基于服务名称或端口的连接的规则;你在端口22
上为SSH做了这一点。
对于 HTTP,您可以在端口80
上执行此操作,这就是未加密的 Web 服务器所使用的。
1sudo ufw allow http
您也可以在端口443
上对HTTPS进行此操作,这是加密网页服务器所使用的。
1sudo ufw allow https
在这两种情况下,指定端口也会起作用,HTTP为80
和HTTPS为443
。
1sudo ufw allow 80
然而,除了指定端口或已知服务之外,还有其他方式允许连接。
具体港口范围
您可以使用 UFW 指定端口范围,例如,一些应用程序使用多个端口而不是单个端口。
例如,要允许使用端口6000
至6007
的X11
连接,请使用以下命令:
1sudo ufw allow 6000:6007/tcp
2sudo ufw allow 6000:6007/udp
在使用 UFW 指定端口范围时,您必须指定该规则应适用于的协议(‘tcp’或 ‘udp’)。
具体的IP地址
例如,如果您想要允许从特定 IP 地址(例如工作或家庭 IP 地址)的连接,则需要指定从
,然后是 IP 地址:
1sudo ufw allow from 203.0.113.4
您也可以通过添加到任何端口
,然后添加端口号来指定某个特定端口,IP 地址允许连接,例如,如果您希望允许203.0.113.4
连接到端口22
(SSH),请使用以下命令:
1sudo ufw allow from 203.0.113.4 to any port 22
子网
如果您想要允许 IP 地址的子网,您可以使用 CIDR 标注来指定一个 netmask. 例如,如果您想要允许从 203.0.113.1
到 203.0.113.254
的所有 IP 地址,您可以使用此命令:
1sudo ufw allow from 203.0.113.0/24
同样,您也可以指定203.0.113.0/24
子网允许连接的目标端口。
1sudo ufw allow from 203.0.113.0/24 to any port 22
连接到特定网络接口
如果您想要创建一个仅适用于特定网络接口的防火墙规则,则可以通过指定允许启用
,然后是网络接口的名称。
继续前要查找您的网络接口将是有帮助的. 要做到这一点,请使用以下命令:
1ip addr
1[secondary_label Output]
2. . .
32: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
4. . .
53: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
6. . .
突出输出表示网络界面名称,它们通常有类似eth0
或enp3s2
的名称。
例如,如果您的服务器有一个名为eth0的公共网络接口,您可以使用此命令允许 HTTP 流量:
1sudo ufw allow in on eth0 to any port 80
这样做将允许您的服务器从公共互联网接收HTTP请求。
或者,如果您希望 MySQL 数据库服务器(端口 3306
)在私人网络接口 eth1
上听取连接,则可以使用以下命令:
1sudo ufw allow in on eth1 to any port 3306
这将允许您私人网络上的其他服务器连接到您的MySQL数据库。
步骤7:拒绝连接
如果您尚未更改入口连接的默认策略,则 UFW 将被配置为拒绝所有入口连接,这通常简化了创建安全防火墙策略的过程,要求您创建明确允许特定端口和 IP 地址通过的规则。
然而,有时你会想要基于源 IP 地址或子网拒绝特定连接,也许是因为你知道你的服务器正在从那里受到攻击. 此外,如果你想将默认的入口策略更改为允许
(不建议),你需要为任何不希望允许连接的服务或 IP 地址创建拒绝
规则。
要写否定
规则,您可以使用上面描述的命令,用否定
代替允许
。
例如,要拒绝 HTTP 连接,您可以使用以下命令:
1sudo ufw deny http
或者,如果你想拒绝从203.0.113.4
的所有连接,你可以使用这个命令:
1sudo ufw deny from 203.0.113.4
现在,您可以学习如何执行删除规则。
第8步:删除规则
知道如何删除防火墙规则与知道如何创建它们一样重要. 指定要删除的规则有两种方式:通过规则号码或规则本身。
规则号码
如果您使用规则号码删除防火墙规则,您要做的第一件事就是获取防火墙规则列表。
1sudo ufw status numbered
1[secondary_label Output]
2Status: active
3
4 To Action From
5 -- ------ ----
6[ 1] 22 ALLOW IN 15.15.15.0/24
7[ 2] 80 ALLOW IN Anywhere
如果您决定要删除2
规则,该规则允许在端口80
上的 HTTP 连接,您可以在下面的 UFW删除
命令中指定此功能:
1sudo ufw delete 2
这样会显示一个确认提示,你可以用y/n
来回答。输入y
就会删除2
规则。
根据当前规则
对数规则的替代方法是指定要删除的实际规则,例如,如果你想删除‘允许 http’规则,你可以这样写:
1sudo ufw delete allow http
您还可以指定规则允许 80
而不是服务名称:
1sudo ufw delete allow 80
此方法将删除IPv4和IPv6规则,如果它们存在。
步骤 9 – 检查 UFW 状态和规则
您可以随时使用此命令检查 UFW 的状态:
1sudo ufw status verbose
如果 UFW 被禁用,这是默认的,输出将是这样的:
1[secondary_label Output]
2Status: inactive
如果 UFW 是活跃的,如果您遵循第 3 步,输出将表示它是活跃的,并列出您已设置的任何规则,例如,如果防火墙设置为允许 SSH (端口 22
) 连接从任何地方,输出可能会包含这样的东西:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
622/tcp ALLOW IN Anywhere
使用状态
命令来检查 UFW 如何配置防火墙。
步骤 10 – 禁用或重置 UFW (可选)
如果您决定不希望使用 UFW,您可以使用此命令禁用它:
1sudo ufw disable
您使用 UFW 创建的任何规则将不再活跃,如果需要稍后激活,您可以随时运行sudo ufw 启用
。
如果您已经配置了 UFW 规则,但决定要重新开始,则可以使用重置命令:
1sudo ufw reset
这将禁用 UFW 并删除您之前定义的任何规则. 请记住,如果您在任何时候修改它们,默认策略将不会改变原始设置。
结论
您的防火墙现在已配置为允许(至少)SSH连接。请确保允许您的服务器需要的任何其他接入连接,同时限制不必要的连接。
要了解更多常见的 UFW 配置,请参阅本教程在 UFW Essentials: Common Firewall Rules and Commands。