我使用的 VPN 提供商使用 OpenVPN。我不想让任何其他流量离开我的计算机,因此我已将 iptables 设置如下:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
### Inbound rules
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
### Outbound rules
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 1194 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
我只是允许 OpenVPN 流量和 DNS 查找(用于 OpenVPN 连接)。连接正常。
当我尝试访问http
网站时,问题就出现了。连接超时。但是可以正常https
工作!如果我这样做,iptables -P OUTPUT ACCEPT
一切都会很完美!
我在使用两者时都使用 Wireshark 进行了检查iptables -P OUTPUT DROP
,iptables -P OUTPUT ACCEPT
但没有发现任何不同,只是使用 DROP 时http
无法获取站点。
这可能是什么问题?
答案1
您可能需要对规则的其他元素进行双重测试 - 在我看来,它们不接受 HTTP 或 HTTPS 流量 - 我想知道在摆弄规则时是否添加了(并可能随后删除了)HTTPS 流量 - 保持“已建立”连接完好无损并为您提供错误的读数。您可以使用 iptables -vnL 来测试此理论,并观察在执行各种请求时规则的计数器如何变化。
我希望你需要添加
> iptables -A OUTPUT -o tun+ -p tcp --dport 80 -j ACCEPT
> iptables -A OUTPUT -o tun+ -p tcp --dport 80 -j ACCEPT
或者,如果您想要一个更通用的解决方案,让所有通过隧道的流量都能正常工作
> iptables -A output -o tun+ -j ACCEPT