我想设置一个策略来默认拒绝传出连接。
- 应允许 DNS 查找
- 应允许特定 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 实际实施的整套规则。在底层,iptables
UFWnetfilter
操纵着很多东西,允许通过默认的 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 比你想象的要困难得多 - 也超出了这个问题的范围)