Uncomplicated Firewall
来自项目主页:
- Ufw(即Uncomplicated Firewall的缩写),是一个管理网络防火墙的程序。它提供了一个命令行界面,并旨在简单(uncomplicated)易用。
nft
接受iptables语法(例如在/etc/ufw/before.rules
中),因此使用UFW管理规则的用户无需学习怎么对iptables或者nftables进行底层调用。安装[编辑 | 编辑源代码]
启动并启用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
使用以下命令来查看额外信息(包括默认策略):
# ufw status verbose
但这依然限制于用户指定的规则。为了查看所有设置的规则,可以使用:
# ufw show raw
或者手册中列出的其他报告。由于这些报告也总结了流量情况,其输出有些难以阅读,为了方便阅读,你可以使用另一种检查接受流量的方法:
# iptables -S | grep ACCEPT
请注意,只要你还在使用ufw
来管理iptables
,就不要将后者启用。
/etc/sysctl.d/*
中设置了特殊的网络环境变量,请相应更新/etc/ufw/sysctl.conf
中的内容(因为此配置会覆盖默认配置)。转发策略[编辑 | 编辑源代码]
如果你需要使用 VPN (例如OpenVPN或WireGuard),将在/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
文件,并按照默认配置做模板添加所需的数据。
例如,使用自定义的 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.rules
和 etc/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脚本。
ufw-docker install
来自动修复iptables规则。这个脚本也能帮你管理Docker相关的ufw规则,详细参见ufw-docker help
。GUI前端[编辑 | 编辑源代码]
如果你使用KDE,你可以直接在系统设置 > 防火墙对ufw进行管理。
Gufw[编辑 | 编辑源代码]
gufw包 是一个为 Ufw 提供的 GTK 前端,旨在使 Linux 防火墙的管理尽可能简单易用。它具有常见端口和 p2p 应用程序的预设设置。其依赖于软件包python包, ufw包,以及GTK支持。
See also[编辑 | 编辑源代码]
- Ubuntu UFW documentation
- ufw(8)
- Add blocklists to ufw using ipsets: https://github.com/poddmo/ufw-blocklist