我想设置一个默认拒绝传出连接的策略。
- 应该允许 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。
ufw
您在命令中看到的 UFW 防火墙规则并不是UFW 实际实施的完整规则集。在幕后,iptables
/netfilter
是 UFW 操作的内容,默认 UFW 规则允许进行很多事情,以便您的互联网等行为正常。不幸的是,要修复这些规则,您必须编辑一些配置文件。/etc/ufw/before6.rules
是您要编辑的文件。找到这两行:您可以执行以下两项操作之一:将 更改
ACCEPT
为DROP
此处,或者简单地将这两行注释掉以继承一般策略设置的默认策略(通常 DROP 我相信您的情况?)。如果您绝对不想PING
通过 ICMP 接收或发送 s,那么您需要将它们更改为DROP
.所以这些行看起来像这样(是的,添加我在这个块中添加的注释):
列表中的其余 ICMPv6 项目应单独保留 - 与 IPv4 中的 ICMP 不同,IPv6 互操作性需要发送/接收某些其他类型的数据包才能在 IPv6 支持下正常运行,因此 IPv6 更依赖于其 ICMP比 IPv4 还要好。所以你应该把剩下的规则从 UFW 单独拿出来。
然后您应该运行
sudo ufw disable && sudo ufw enable && sudo ufw reload
以确保 UFW 实际上从更改的定义中更新其规则。请注意,如果您的意图是禁用IPv6 支持,那么您需要进行一些网络配置级别的更改,以真正让事情正常运行并默认禁用 IPv6 支持。这样,即使 DNS 解析为 IPv6 记录,系统也不支持 IPv6,也不会尝试使用它。(话虽这么说,
ufw
设计简单,完全禁用 IPv6 比您想象的要困难得多 - 也超出了这个问题的范围)