Uncomplicated Firewall
来自项目 主页
- Ufw 代表 Uncomplicated Firewall(简易防火墙),是一个用于管理 netfilter 防火墙的程序。它提供命令行界面,旨在做到简易易用。
nft
接受 iptables 语法,例如在 /etc/ufw/before.rules
中。安装
启动 并 启用 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
可以使用以下命令查看额外信息,包括默认策略
# ufw status verbose
但这仍然仅限于用户指定的规则。为了查看所有设置的规则
# ufw show raw
可以使用,以及手册页中列出的更多报告。由于这些报告还总结了流量,因此可能有些难以阅读。另一种检查已接受流量的方法
# iptables -S | grep ACCEPT # ip6tables -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
添加其他应用程序
PKG 附带了一些基于许多常见守护程序和程序的默认端口的默认设置。通过查看 /etc/ufw/applications.d
目录或在程序本身中列出它们来检查选项
# ufw app list
如果用户在非标准端口上运行任何应用程序,建议只需创建 /etc/ufw/applications.d/custom
,其中包含所需的数据,并将默认设置作为指南。
示例,具有 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 能够拒绝来自在过去 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
用户规则
所有用户规则都存储在 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 填满内核 (dmesg) 和消息日志
# ufw logging off
UFW 和 Docker
标准模式下的 Docker 编写自己的 iptables 规则并忽略 ufw 规则,这可能导致安全问题。可以在 https://github.com/chaifeng/ufw-docker 找到解决方案。
ufw-docker install
自动修复 iptables 规则。该软件包还可以管理您的 docker 相关 ufw 规则,请参阅 ufw-docker help
。图形界面前端
如果您正在使用 KDE Plasma,您可以直接转到Wi-Fi 和网络 > 防火墙以访问和调整防火墙配置,前提是已安装 plasma-firewall。
Gufw
gufw 是 Ufw 的 GTK 前端,旨在使管理 Linux 防火墙尽可能方便和容易。它具有常用端口和 p2p 应用程序的预设。它需要 python、ufw 和 GTK 支持。
参见
- Ubuntu UFW 文档
- ufw(8)
- 使用 ipsets 向 ufw 添加阻止列表:https://github.com/poddmo/ufw-blocklist