Uncomplicated Firewall

出自 ArchWiki
(重定向自Ufw

来自项目主页

Ufw 是 Uncomplicated Firewall(简单防火墙)的缩写,是一个用于管理 netfilter 防火墙的程序。它提供了一个命令行界面,旨在做到简单易用。
注意: 应该注意的是,UFW 可以使用 iptablesnftables 作为后端防火墙。习惯于调用 UFW 管理规则的用户无需采取任何操作来学习对 iptables 或 nftables 的底层调用,这要归功于 nft 接受 iptables 语法,例如在 /etc/ufw/before.rules 中。

安装

安装 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 

可以使用,以及手册页中列出的更多报告。由于这些报告还总结了流量,因此可能难以阅读。另一种检查接受流量的方法是

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

虽然这对于报告来说效果很好,但请记住,只要您使用 ufw 来管理 iptables,就不要启用 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

添加其他应用

PKG 附带了一些基于许多常见守护程序和程序的默认端口的默认设置。通过查看 /etc/ufw/applications.d 目录或在程序本身中列出它们来检查选项

# ufw app list

如果用户在非标准端口上运行任何应用程序,建议只需创建 /etc/ufw/applications.d/custom,其中包含所需的数据,并以默认设置为指南。

警告: 如果用户修改了任何 PKG 提供的规则集,则这些规则集将在首次更新 ufw 软件包时被覆盖。这就是为什么自定义应用程序定义需要驻留在非 PKG 文件中的原因,如上所述!

示例,具有 20202-20205 范围的自定义 tcp 端口的 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(包含)和 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 能够拒绝来自 IP 地址的连接,该 IP 地址在过去 30 秒内尝试发起 6 个或更多连接。用户应考虑对 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

用户规则

所有用户规则都分别存储在 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 填满内核 (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,您可以直接转到Wi-Fi 和网络 > 防火墙以访问和调整防火墙配置,前提是已安装 plasma-firewall

Gufw

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

参见