VPN 终止开关可缓解 Tunnelvision 攻击

VPN 终止开关可缓解 Tunnelvision 攻击

大家可能都听说过针对 VPN 的 Tunnelvision 攻击。基本上,它是这样的:恶意 LAN 中的攻击者滥用 DHCP 选项 121 在 VPN 用户的系统上设置比大多数 VPN 使用的路由更具体的路由。通过滥用此选项,本地网络上的攻击者可以设置优先级高于目标 VPN 创建的虚拟网络接口路由的路由规则。因此可以窃听目标计算机。

那么解决方案是什么呢?

一种方法是忽略 DHCP 选项 121,但更好的办法可能是实施“VPN 终止开关” - 阻止所有互联网活动,除非,它将前往 VPN 服务器。

以下是我的脚本。首先运行这个(只有一次):

MyVPN="xx.xx.xx.xx"

sudo ufw default deny incoming
sudo ufw default deny outgoing

# If you are using default OpenVPN istallation on 1194/UDP:
sudo ufw allow out to $MyVPN port 1194 proto udp

# If you are using OpenVPN on 443/TCP:
sudo ufw allow out to $MyVPN port 443 proto tcp

# If you are using default Wireguard installation on 451194/UDP:
sudo ufw allow out to $MyVPN port 51194 proto udp

# Assuming OpenVPN uses tun0 interface:
sudo ufw allow out on tun0 from any to any

# Assuming Wireguard uses wg0 interface:
sudo ufw allow out on wg0 from any to any

# If we want to allow connections from VPN network to our computer (again, OpenVPN - tun0, Wireguard - wg0)
sudo ufw allow in on tun0 from any to any
sudo ufw allow in on wg0 from any to any    

# Enable UFW
sudo ufw enable

现在“VPN 终止开关”已打开。

如果你想把它离开

sudo ufw default allow outgoing

如果你想扭转局面

sudo ufw default deny outgoing

(您可以在 OpenVPN 或 Wireguard 的“post up”/“post down”命令中使用这些命令)。因此,当您的 VPN 连接建立时,会自动打开开关。

现在,存在几个问题。

1.这很有效,但在我打开开关后,NetworkManager 的 WiFi 图标(我正在使用 WiFi 连接到计算机上的 LAN)显示我未连接到互联网。为什么,因为wlp3s0网络接口(我的 WiFi)正在尝试连接到connectivity-check.ubuntu.com。并且它被“VPN 终止开关”阻止。请注意,如果我connectivity-check.ubuntu.com从终端 ping,则连接已建立,但这是因为终端使用了tun0/wg0接口。

现在的问题是,UFW 无法允许(或阻止)与域(FQDN)的连接,但可以允许(或阻止)与 IP 地址的连接。并且connectivity-check.ubuntu.com有一个始终在变化的 IP 地址池。

一个快速而粗糙的解决方案是使用/etc/hosts文件,但是如果 Canonical 更改其服务器的 IP 地址怎么办?

因此,一个选择是将所有流量从wlp3s0VPN(tun0/wg0接口)重定向。

我的问题是:

  • 怎么做?
  • wlp3s0如果我从接口重定向所有流量,是否会出现严重的缺点?

2.我读到过,允许某些连接wlp3s0(和其他本地接口)是明智之举。例如 DHCP 和类似协议。

所以我的问题是:如何仅在特定的本地接口上允许 DHCP 协议?

顺便说一句,Android 有一个非常好的功能,称为“阻止不使用 VPN 的连接”。不幸的是,Ubuntu 没有这样的设置。有没有计划实现这个功能?是否有一些 GUI 应用程序已经实现了这个“终止开关”?

相关内容