跳转到内容
来自 Arch Linux 中文维基

来自项目主页

Ufw(即 Uncomplicated Firewall 的缩写)是一个管理网络防火墙的程序。它提供了一个命令行界面,并旨在简单(uncomplicated)易用。
注意:注意 UFW 可以使用 iptablesnftables 作为防火墙后端。此外,由于 nft 接受 iptables 语法(例如在 /etc/ufw/before.rules 中),因此使用 UFW 管理规则的用户无需学习怎么对 iptables 或者 nftables 进行底层调用。

安装

安装软件包 ufw

启动启用 ufw.service 使其开机自启。注意,如果 iptables.service(或者其 ipv6 部分)也被启用了,ufw.service 将不会生效。

基本配置

以下是一个非常简单的配置示例,它将会默认拒绝所有连接,允许来自 192.168.0.1-192.168.0.255 局域网内的所有连接,允许所有目标为 Deluge(一个 BitTorrent 客户端)的连接,并启用了来自任何地方的 SSH 连接速率限制

# ufw default deny
# ufw allow from 192.168.0.0/24
# ufw allow Deluge
# ufw limit ssh

要想允许一个端口而不是任何地方进行连接,请参考下面的例子。这三条命令分别允许端口 51312 的 UDP 和 TCP 连接,允许端口 51313 的 UDP 连接,和允许范围从 51312 到 51314 端口的连接:

# ufw allow 51312
# ufw allow 51312/udp
# ufw allow 51312:51314

仅当首次安装后第一次使用 UFW 时需要执行:

# ufw enable
注意:请确保 ufw.service 已经被启用

最后,使用以下命令确认更改已被应用:

# ufw status
Status: active
To                         Action      From
--                         ------      ----
Anywhere                   ALLOW       192.168.0.0/24
Deluge                     ALLOW       Anywhere
SSH                        LIMIT       Anywhere
注意:状态报告仅限于用户添加的规则。在大多数情况下不会有什么问题,但最好还是了解一下内置规则是否存在。这些规则包括允许 UPNP、AVAHI 和 DHCP 回复的过滤器。具体信息请参考 ufw README 的“Default ruleset”一节。

使用以下命令来查看额外信息(包括默认策略):

# ufw status verbose

但这依然限制于用户指定的规则。为了查看所有设置的规则,可以使用:

# ufw show raw

或者手册中列出的其他报告。由于这些报告也总结了流量情况,其输出有些难以阅读,为了方便阅读,你可以使用另一种检查传入流量的方法:

# iptables -S | grep ACCEPT
# ip6tables -S | grep ACCEPT

请注意,只要你还在使用 ufw 来管理 iptables,就不要将后者启用

注意:如果你在 /etc/sysctl.d/* 中设置了特殊的网络环境变量,请相应更新 /etc/ufw/sysctl.conf 中的内容(因为此配置会覆盖默认配置)。

转发策略

如果你需要使用 VPN(例如 OpenVPNWireGuard),可以将 /etc/default/ufw 中的 DEFAULT_FORWARD_POLICY 变量从 "DROP" 调整到 "ACCEPT",以便无论用户如何设置如何都能转发所有数据包。要针对特定接口(例如 wg0)进行转发,用户可以在 *filter 块中添加以下行:

/etc/ufw/before.rules
# End required lines 

-A ufw-before-forward -i wg0 -j ACCEPT
-A ufw-before-forward -o wg0 -j ACCEPT

你可能还需要取消以下行的注释:

/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

添加其他应用

软件包还提供了一些常见守护进程和程序的默认端口配置。可以通过查看 /etc/ufw/applications.d 目录下的文件或使用如下指令查看:

# ufw app list

如果用户正在使用非标准端口运行任何应用程序,建议创建 /etc/ufw/applications.d/custom 文件,并按照默认配置做模板添加所需的数据。

警告:如果用户修改了任何由软件包提供的规则集,这些修改将在第一次更新 ufw 软件包时被覆盖。这就是为什么建议将自定义应用程序规则放在外面的原因!

例如,使用自定义的 TCP 端口范围 20202-20205 进行 deluge 下载:

[Deluge-my]
title=Deluge
description=Deluge BitTorrent client
ports=20202:20205/tcp

如果需要为同一应用程序定义 TCP 和 UDP 端口,只需使用竖线进行分隔,如下所示:该应用程序打开 TCP 端口 10000-10002 和 UDP 端口 10003:

ports=10000:10002/tcp|10003/udp

还可以使用逗号来定义端口。此示例打开 TCP 端口 10000-10002(包括端口 10000 和 10002)以及 UDP 端口 10003 和 10009:

ports=10000:10002/tcp|10003,10009/udp

删除应用

根据上面的 Deluge/Deluge-my 示例,以下操作将删除标准的 Deluge 规则,并用上面示例中的 Deluge-my 规则替换它们:

# ufw delete allow Deluge
# ufw allow Deluge-my

通过 status 指令查询结果:

# ufw status
Status: active
To                         Action      From
--                         ------      ----
Anywhere                   ALLOW       192.168.0.0/24
SSH                        ALLOW       Anywhere
Deluge-my                  ALLOW       Anywhere

IP地址黑名单

将 IP 地址添加到黑名单可能是一个可取的做法,可以简单地编辑 /etc/ufw/before.rules 文件,在文件底部在 "COMMIT" 的上方插入一个 iptables DROP 行来轻松实现。

/etc/ufw/before.rules
...
## blacklist section
# block just 199.115.117.99
-A ufw-before-input -s 199.115.117.99 -j DROP
# block 184.105.*.*
-A ufw-before-input -s 184.105.0.0/16 -j DROP

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

连接速率限制

ufw 有能力拒绝来自在过去 30 秒内尝试建立 6 次或更多连接的 IP 地址的连接。用户应该考虑在 SSH 之类的服务中使用这个选项。

利用上述基本配置,要启用速率限制,我们只需用 limit 参数替换 allow 参数。然后新规则将取代先前的规则。

# ufw limit SSH
Rule updated
# ufw status
Status: active
To                         Action      From
--                         ------      ----
Anywhere                   ALLOW       192.168.0.0/24
SSH                        LIMIT       Anywhere
Deluge-my                  ALLOW       Anywhere

用户规则

所有的用户规则都储存在 etc/ufw/user.rulesetc/ufw/user6.rules 中,分别用于 IPv4 与 IPv6。

技巧和窍门

禁用远程 ping

在以下文件中将 ACCEPT 改为 DROP

/etc/ufw/before.rules
# ok icmp codes
...
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

如果你正在使用 IPv6, 请一同更改 /etc/ufw/before6.rules 中的规则。

禁用 UFW 日志

禁用 UFW 日志可以让 UFW 停止填充内核(dmesg)和消息日志:

# ufw logging off

UFW 与 Docker

Docker 在默认状态下会编写 iptables 规则并忽视 ufw 规则,这可能会造成一些安全隐患。一种解决方案是使用 https://github.com/chaifeng/ufw-docker

提示:你可以安装 ufw-dockerAUR,并通过执行 ufw-docker install 来自动修复 iptables 规则。这个脚本也能帮你管理 Docker 相关的 ufw 规则,详细参见 ufw-docker help

GUI 前端

如果你在使用 KDE Plasma,可以安装 plasma-firewall,然后直接在 Wi-Fi & Networking > Firewall 中调整防火墙配置。

Gufw

gufw 是一个用于 Ufw 的 GTK 前端,旨在使 Linux 防火墙的管理尽可能简单易用。它具有常见端口和 p2p 应用程序的预设设置。其依赖于软件包 pythonufw 以及 GTK 支持。

参考