使用 iptables 设置防火墙仅允许 VPN

使用 iptables 设置防火墙仅允许 VPN

我将 IPredator VPN 与 openVPN 结合使用,我想确保如果连接断开,我不会在没有 VPN 的情况下从互联网提交数据。我听说我可以使用 iptables 和范围来做到这一点。我怎样才能做到这一点?我怎样才能找到我的 VPN 分配给我的 IP 范围?

答案1

在启动 VPN 之前,请复制netstat -rnifconfig -a。启动您的 VPN,这两个命令的差异将告诉您 VPN 在路由方面创建了哪些网络,以及您被分配了哪些 IP 来获得这些网络的可见性。您还需要获取提供 VPN(或流量)的服务器的 IPVPN 服务器将无法访问它)。我还假设您的 VPN 服务器使用udp而不是tcp,如果它确实使用,tcp您将需要更新第二条规则以反映这一点。

一旦你有了这些,你就可以OUTPUT在 iptables 中添加规则来设置你的主机可以看到的内容

 iptables -F OUTPUT
 iptables -I OUTPUT -d VPNSERVER -p udp -j ACCEPT -m comment --comment "Allow traffic to VPN SERVER"
 iptables -I OUTPUT -s VPNIP -d VPNNETWORK/CIDR -j ACCEPT -m comment --comment "Allow all traffic to VPN newtork"
 iptables -I OUTPUT -j DROP -m comment --comment "Drop all other traffic"

iptables -F OUTPUT刷新您现有的规则,请注意这一点,但需要按照您最初的问题要求进行操作。

VPNSERVER将是您的 VPN 服务器的 IP。 VPNIP将是 VPN 分配给您的 IP。 将是出现在类似的VPNNETWORK/CIDR路由网络netstat -rn10.1.0.0/24

调试这些规则时,记录正在删除的内容可能会很方便,因为某些协议可能需要一些额外的处理:

 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 

这应该足以阻止OUTBOUND从您的 PC 到互联网的流量,并且只允许流量到达 VPN 服务器及其提供的网络。

OP 指出 Arch Linux 不附带netstatifconfig。在这种情况下,替代方案是:

ip addr show将向您显示界面并ip route show显示您拥有的路线。

相关内容