跳转到内容

Uncomplicated Firewall

来自 Arch Linux 中文维基
(重定向自Ufw

本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队

附注: 请完成翻译。(在 Talk:Uncomplicated Firewall# 中讨论)

来自项目主页:

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

仅当第一次使用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 status verbose

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

# ufw show raw 

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

# iptables -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[编辑 | 编辑源代码]

Docke在默认状态下会编写iptables规则并忽视ufw规则,这可能会造成一些安全隐患。一种解决方案是使用ufw-docker脚本

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

GUI前端[编辑 | 编辑源代码]

如果你使用KDE,你可以直接在系统设置 > 防火墙对ufw进行管理。

Gufw[编辑 | 编辑源代码]

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

See also[编辑 | 编辑源代码]