即使默认策略是拒绝所有传出,UFW 也允许传出 IPv6

即使默认策略是拒绝所有传出,UFW 也允许传出 IPv6

我想设置一个策略来默认拒绝传出连接。

  1. 应允许 DNS 查找
  2. 应允许特定 IP 进行传出连接

因此我制定了以下规则:

sudo ufw default deny outgoing
sudo ufw allow out 53
sudo ufw allow out from any to 123.123.123.123

查看:

sudo ufw status numbered

输出:

Status: active
     To                         Action      From
     --                         ------      ----
[ 1] 123.123.123.123            ALLOW OUT   Anywhere                   (out)
[ 2] 53                         ALLOW OUT   Anywhere                   (out)
[ 3] 53 (v6)                    ALLOW OUT   Anywhere (v6)              (out)

当我 ping google.com 时,我期望 DNS 解析能够正常工作,但实际 ping 失败。但整个 ping 功能都在正常工作。我注意到它使用 IPv6 进行 ping。而在禁用防火墙的情况下,它使用 IPv4。

PING google.com(fra15s12-in-x0e.1e100.net (2a00:1450:4001:815::200e)) 56 data bytes
64 bytes from fra15s12-in-x0e.1e100.net (2a00:1450:4001:815::200e): icmp_seq=1 ttl=115 time=3.90 ms
64 bytes from fra15s12-in-x0e.1e100.net (2a00:1450:4001:815::200e): icmp_seq=2 ttl=115 time=3.96 ms
64 bytes from fra15s12-in-x0e.1e100.net (2a00:1450:4001:815::200e): icmp_seq=3 ttl=115 time=3.94 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.903/3.936/3.965/0.025 ms

防火墙似乎成功阻止了 IPv4,因此 ping 命令尝试使用 IPv6 并成功。防火墙不知为何没有阻止 IPv6。

答案1

ufw您在命令中看到的 UFW 防火墙规则是不是UFW 实际实施的整套规则。在底层,iptablesUFWnetfilter操纵着很多东西,允许通过默认的 UFW 规则,以便您的互联网等正常运行。不幸的是,要修复那些规则,您必须编辑一些配置文件。

/etc/ufw/before6.rules是您要编辑的文件。找到以下两行:

-A ufw6-before-output -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type echo-reply -j ACCEPT

您可以做以下两项操作之一:要么将此处ACCEPT的更改DROP为 ,要么简单地注释掉这两行以继承一般策略设置的默认策略(我相信您的情况通常是 DROP?)。如果您绝对不想PING通过 ICMP 接收或发送 ,那么您需要将这些更改为DROP

因此这些行看起来像这样(是的,添加我在此块中添加的注释):

# Drop ICMPv6 outbound for echo replies and echo requests (PING)
-A ufw6-before-output -p icmpv6 --icmpv6-type echo-request -j DROP
-A ufw6-before-output -p icmpv6 --icmpv6-type echo-reply -j DROP

列表中的其余 ICMPv6 项目应保持不变 - 与 IPv4 中的 ICMP 不同,IPv6 互操作性需要发送/接收某些其他类型的数据包才能在 IPv6 支持下正常运行,因此 IPv6 比 IPv4 更依赖于其 ICMP。所以你应该不遵守 UFW 的其他规则

然后您应该运行sudo ufw disable && sudo ufw enable && sudo ufw reload以确保 UFW 确实根据改变的定义更新其规则。


请注意,如果您的目的是禁用IPv6 支持,那么您需要进行一些网络配置级别的更改,以便真正让内容正常运行并默认禁用 IPv6 支持。这样,即使 DNS 解析为 IPv6 记录,系统也不支持 IPv6,也不会尝试使用它。(话虽如此,ufw设计为简单并且彻底禁用 IPv6 比你想象的要困难得多 - 也超出了这个问题的范围)

相关内容