iptables – 通过VPN强制所有stream量(并在没有VPN连接时丢弃所有stream量)

目标:确保来自所有networking接口(wlan0,rmnet0,rmnet1)的VPN隧道强制所有stream量,即所有stream量在未连接到VPN时被丢弃 。 换句话说,互联网stream量不应该被允许,只有通过VPN的stream量是可以接受的。

到目前为止… Android设备与iptables的二进制,wlan和3G连接VPN网关@ 10.10.10.10(不是真正的地址)。

iptables -P OUTPUT DROP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i tun0 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -j DROP iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o tun0 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -d 10.10.10.10 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -j DROP 

结果:

stream量似乎被阻止 – 但连接到VPN也是如此。

有任何想法吗? 鉴于此只是移动数据rmnet0接口而且在这里还没有WiFi。

在这种情况下,我不会使用conntrack,而是更简单一些

 iptables -A INPUT -i tun0 -j ACCEPT iptables -A INPUT -s 10.10.10.10 -j ACCEPT iptables -A OUTPUT -i tun0 -j ACCEPT iptables -A OUTPUT -d 10.10.10.10 -j ACCEPT 

不需要任何连接跟踪。 顺便说一下,您最后也不需要DROP规则, -P ... DROP可以解决这个问题。

您还需要确保在configuration中使用vpn服务器的IP,否则您也必须将DNS列入白名单:

 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT