跳转至内容

Uncomplicated Firewall

来自 ArchWiki

来自项目 主页

Ufw 是 Uncomplicated Firewall 的缩写,它是一个用于管理 netfilter 防火墙的程序。它提供命令行界面,旨在简洁易用。
注意 值得注意的是,UFW 可以使用 iptablesnftables 作为后端防火墙。由于 nft 接受 iptables 语法(例如在 /etc/ufw/before.rules 中),习惯使用 UFW 管理规则的用户无需学习 iptables 或 nftables 的底层调用。

安装

安装 ufw 包。

启动启用 ufw.service 使其在启动时可用。请注意,如果 iptables.service 也被启用(及其 ipv6 对应项),这将不起作用。

基本配置

一个非常简单的配置,默认拒绝所有,允许来自 192.168.0.1-192.168.0.255 LAN 的任何协议,并允许来自 *任何地方* 的传入 Deluge 和 *速率限制* 的 SSH 流量。

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

要从 *任何地方* 允许一个端口,请使用以下示例允许端口 51312 UDP 和 TCP,仅端口 51312 UDP,或端口范围从 51312 到 51314。

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

第一次安装包后,只需要执行下面这一行。

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

最后,通过 status 命令查询正在应用的规则。

# 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 中的“默认规则集”部分。

还可以使用以下命令查看额外信息,包括默认策略:

# ufw status verbose

但这仍然仅限于用户指定的规则。要查看所有规则设置,

# ufw show raw 

以及 manpage 中列出的进一步报告。由于这些报告还总结了流量,因此可能有些难以阅读。另一种检查已接受流量的方法是

# 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 软件包首次更新时被覆盖。这就是为什么自定义应用程序定义需要保留在非软件包文件中,如上所述!

示例:deluge 的自定义 TCP 端口范围为 20202-20205。

[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(含)和 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 进行速率限制

ufw 能够拒绝在过去 30 秒内尝试发起 6 次或更多连接的 IP 地址的连接。用户应考虑为 SSH 等服务使用此选项。

使用上述基本配置,要启用速率限制,只需将 allow 参数替换为 limit 参数。新规则将替换之前的规则。

# 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

用户规则

所有用户规则分别存储在 IPv4 的 etc/ufw/user.rules 和 IPv6 的 etc/ufw/user6.rules 中。

技巧与提示

禁用远程 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 中。

禁用 IPv6 处理

/etc/default/ufw 中将 IPV6=yes 更改为 IPV6=no 并重新加载规则。这将删除先前生成的规则以及新规则的生成。

禁用 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

图形化前端

如果您正在使用 KDE Plasma,您可以直接进入 *Wi-Fi & Networking > Firewall* 来访问和调整防火墙配置,前提是已安装 plasma-firewall

Gufw

gufw 是 Ufw 的一个 GTK 前端,旨在让 Linux 防火墙的管理尽可能易于访问和使用。它具有常见端口和 p2p 应用程序的预设。它需要 pythonufw 和 GTK 支持。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.