此 VPN Kill Switch 实现是否足够安全?

此 VPN Kill Switch 实现是否足够安全?

我正在使用 Private Internet Access VPN,它没有为 Linux 发行版提供终止开关。因此,我使用 iptables 编写了一个简单脚本。

运行 Wireshark 后,我发现 wlp6s0 中的所有流量都来自我的公共 IP(VPN 提供商的 IP)。因此,我屏蔽了 wlp6s0 上的所有其他 IP,这样万一 VPN 连接断开,所有数据包都会被丢弃。

脚本如下:

#!/bin/sh
IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
iptables -A OUTPUT -o wlp6s0 ! -d $IP -j DROP
iptables -A INPUT -i wlp6s0 ! -s $IP -j DROP

这个脚本似乎可以工作。但是,我不确定我是否忽略了其他方面。有谁更了解 VPN 和 TUN/TAP 的工作原理,可以解释一下我的脚本是否足以在 VPN 断开连接的情况下保护我的隐私吗?

答案1

从安全角度来看,我发现有几个可能的泄漏:

  1. iptables 根本不会阻止 IPv6 流量。您需要添加镜像 iptables 规则的 ip6tables 规则。
  2. 在某些时候,您可能会拥有除 wlp6s0 之外面向 Internet 的网络接口。为了解决这个问题,我建议制定规则,允许流量流向 lo 和 tun0(或任何 VPN 接口),允许任何接口上的流量流向 VPN 服务器,并阻止所有其他流量。
  3. 您仅指定 VPN 服务器的 IP,而不指定协议或端口。如果 VPN 服务器还运行其他服务,则您允许流量以明文形式传输到该服务器。

您现有的规则还存在一些可用性问题:

  1. 看起来您是通过主机名而不是 IP 地址指定 VPN 服务器的。DNS 规则没有例外,如果您尚未使用 VPN,您将无法解析此主机名。显然,解决这个问题的最简单方法是使用 IP 而不是主机名,但如果它是动态的,您可能无法做到这一点。安全地修复这个问题并不像允许所有 DNS 流量到 resolver1.opendns.com 那么简单,因为您最终可能会将所有 DNS 流量泄露给他们。
  2. 您没有 DHCP 例外,因此无法获取动态 IP 地址。如果您使用静态 IP 地址,这无所谓,但如果不使用,则会导致您无法连接到网络。

相关内容