为什么使用 Chrome/Chromium 时 iptables 无法阻止 Google 网站?

为什么使用 Chrome/Chromium 时 iptables 无法阻止 Google 网站?

我使用了以下命令,取自这里

# Allow loopback device (internal communication)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT

# Set default policies to drop all communication unless specifically allowed
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

这似乎成功阻止了几乎所有来源的互联网流量,但不知何故,通过 Chromium(在 Pi 4 Model B 上的 Raspbian Buster 上)访问的 Google 服务被允许通过(例如,youtube.com 加载不受阻碍)。搜索并没有真正帮助我理解这个问题;我发现的最接近的结果是这个问题,但据我所知,答案是指定域的规则过滤器无法成功应用于数据包,而我使用的规则根本不指定域。他们应该丢弃除本地和环回之外的所有数据包,无论域或浏览器如何,对吧?

作为背景,这是在 NAS 上,我对暴露在互联网上感到偏执。我在通过 OpenVPN 访问互联网的 Pi 上有类似的规则,当 VPN 连接断开时,会观察到类似的行为:除了奇怪的是通过 Chromium 访问的 Google 服务之外,不允许任何流量。主要问题是关于 NAS 消除 VPN 的担忧。

sudo iptables-save编辑:在评论中添加每个请求,在浏览器中加载 YouTube 并且规则生效时的输出:

# Generated by xtables-save v1.8.2 on Mon Apr 27 13:24:52 2020
*filter
:INPUT DROP [7:2304]
:FORWARD DROP [0:0]
:OUTPUT DROP [482:36138]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -j ACCEPT
COMMIT
# Completed on Mon Apr 27 13:24:52 2020

我不相信有代理,尽管我不熟悉网络中该术语的确切定义。 Google 向我表明,我从调制解调器(而不是中间服务器)将路由器连接到 ISP 是相关的吗?

另外,针对已删除的评论,我的 ISP 似乎支持 IPv6。

编辑2:输出ping -c6 2001:67c:2564:a119::77

PING 2001:67c:2564:a119::77(2001:67c:2564:a119::77) 56 data bytes
64 bytes from 2001:67c:2564:a119::77: icmp_seq=1 ttl=49 time=132 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=2 ttl=49 time=130 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=3 ttl=49 time=127 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=4 ttl=49 time=147 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=5 ttl=49 time=129 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=6 ttl=49 time=128 ms

--- 2001:67c:2564:a119::77 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 12ms
rtt min/avg/max/mdev = 126.981/132.157/147.250/6.932 ms

编辑 3:目前的最终编辑。只是想附加我按照解决方案中的建议得到的工作规则:

# Allow loopback device (internal communication)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo ip6tables -A INPUT -i lo -j ACCEPT
sudo ip6tables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT

# Allow VPN establishment
# Only 2 ports open, 1 for DNS and 1 for VPN
# If establishing through an IP and not a name, the ones with port 53 can be removed
# Port 1198 may be different depending on the VPN
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 1198 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 1198 -j ACCEPT

# Accept all TUN connections (tun = VPN tunnel)
sudo iptables -A OUTPUT -o tun+ -j ACCEPT
sudo iptables -A INPUT -i tun+ -j ACCEPT

# Set default policies to drop all communication unless specifically allowed
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
sudo ip6tables -P INPUT DROP
sudo ip6tables -P OUTPUT DROP
sudo ip6tables -P FORWARD DROP

请注意,此处没有 ip6tables 的本地流量规则,但如果您的本地网络运行 IPv6 而不是 IPv4,则可能需要它。在这种情况下,更改iptablesip6tables替换本地流量规则中的 IP 地址即可。

答案1

ping 的结果表明您的计算机能够利用 IPv6 与外界通信。因此,当 Chromium 无法获得 IPv4 连接时,它将使用 IPv6。如果您想防止这种情况发生,您必须研究使用ip6tables.

相关内容