iptables 规则删除后仍然生效

iptables 规则删除后仍然生效

场景:
我用 openvpn 搭建了一个服务器(S)。
并且可能有多个 vpn 客户端(C1~C10)在“S”后面提供 SSH/FTP/HTTP。
互联网上的多个用户(U1~U10)将通过“S”登录以访问他们自己的机器(C1~C10)。

假设 U3 ip 为 60.60.60.60,
S ip 为 220.220.220.220,
C3 vpn ip 为 10.8.0.6
,转发端口为“55555”

如果用户(U3)输入正确的用户/密码
--> 'S' 将查询哪个客户端(C3)属于该用户并获取其 IP,
然后动态将用户(U3)转发到他的客户端(C3):

//(only the 60.60.60.60 can access 10.8.0.6)  
iptables -t nat -I PREROUTING -i eth0 -s 60.60.60.60 -p tcp --dport 55555 -j DNAT --to-destination 10.8.0.6:80

到目前为止一切顺利。

但在用户注销后,我使用以下命令删除此规则

iptables -t nat -D PREROUTING -i eth0 -s 60.60.60.60 -p tcp --dport 55555 -j DNAT --to-destination 10.8.0.6:80

这条规则在 iptables -t nat -L -n 中已经不存在了,
但是用户 U3 仍然可以通过 220.220.220.220:55555 直接访问 C3

即使我输入以下内容并重新启动,该规则仍然有效。

iptables -t -nat -F

救命!有人能告诉我哪里出了问题吗,或者有更好的方法吗


我已发现问题所在。

我使用 HTTP 测试了上述内容,但在“U3”端有一个代理服务器。

也就是说,你看到的是代理缓存的旧数据。

尝试其他协议,例如SSH或者NC,结果是正确的。

但是...这意味着如果用户使用代理,这个 iptables 机制可能无法正常工作,

我该如何解决这个问题?

答案1

但是...这意味着如果用户使用代理,这个 iptables 机制可能无法正常工作。我该如何解决这个问题?

您可以提供内容Cache-Control: no-cache, no-store并希望代理尊重这一点。

RFC 2616 Fielding 等人

相关内容