ufw status仅显示高层策略和显式添加的规则(如“80 ALLOW Anywhere”),不反映默认策略绕过、IPv6独立规则、Docker等直写nftables的bypass规则,也无法体现本地回环流量不受管控等底层细节。

Ubuntu如何查看系统防火墙规则

Ubuntu 默认用 ufw 管理防火墙,但规则实际由 nftables 执行;直接看 ufw status 只能查到高层策略,底层放行/拦截细节得看 nft list rulesetiptables -L -n -v

ufw status 能看到什么?哪些情况它会“说谎”

执行 sudo ufw status 命令,会展示当前的启用状态以及明确添加的规则(例如 22/tcp ALLOW Anywhere)。然而,它无法反映出这些情况:默认策略是否被绕过、IPv6规则是否独立生效、或者某些服务(像Docker)悄然插入的bypass规则。打个比方,你执行了 ufw allow 80 命令,但nginx实际监听在 127.0.0.1:80,此时 ufw status 依然会显示“ALLOW”,但连接却会失败——原因在于该规则仅对入向流量起作用,而本地回环不受ufw的管控。

建议搭配以下命令交叉验证:

为什么 iptables -L 看不到规则?该用 nft 还是 iptables

Ubuntu 22.04+ 默认用 nftables 后端,但保留了 iptables 命令兼容层。执行 sudo iptables -L -n -v 有时显示空或旧规则,是因为:

正确做法是优先用:sudo nft list ruleset。它输出完整结构(table → chain → rule),包括注释、字节计数、跳转目标。若习惯 iptables 语法,可加 | grep -A5 'chain input' 快速定位入站链。

如何确认某个端口是否真被放行

ufw status 显示 8080 ALLOW 不等于你能从外网访问它。需分三步验证:

特别注意:ufw 默认不管理转发流量(forward chain),如果你开了 NAT 或容器桥接,得额外查 nft list chain ip filter forward

日志里看不到被拦的包?可能根本没过 ufw

启用 sudo ufw logging on 后,只记录匹配 ufw 规则的包(比如命中 ufw-user-input 链)。但若包被更早的链(如 ufw-before-input)丢弃,或走的是 raw 表提前标记,就不会进 ufw 日志。

排查方法:

真正容易被忽略的点是:ufw 规则只作用于 IPv4 的 filter 表,而 nftables 的 inet family 同时管 IPv4/IPv6,且 Docker 默认创建独立的 nft 表,完全游离于 ufw 之外。

本文转载于:https://www.php.cn/faq/3030959.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。