我在一台机器上运行着 Ubuntu 和 Squid,它充当我网络上许多 PC 的透明代理和默认网关,这意味着所有互联网绑定活动都通过接口进行过滤,然后才进入路由器 (192.168.1.1)。HTTPS/SSL (443) 不起作用,因为端口 443 上的数据包会进入并遇到障碍,因为我没有为其指定规则。
如何使用 iptables 创建 443 个连接的直通?
- - - - - - - - - 编辑 - - - - - - - - - - - -
在将 SSL 的代理设置设置为指向 squid 框后,设法使 https 正常工作。但是,如果我正在制作一个 Linux 路由器(我就是这样做的),这是否意味着除非我运行代理,否则 SSL 永远不会工作?Linux 框的 IP 地址是 192.168.1.235,我已将运行 winXP 的测试计算机设置为其默认网关。肯定有一种方法可以让 443 SSL“通过”,甚至无需触及代理?
我也有点困惑为什么 https 可以工作...我没有任何路由或者任何在 iptables 中处理 443 的东西。如能对此提供任何帮助我将不胜感激!
答案1
您无法透明地代理 HTTPS。当您使用透明代理时,客户端会认为它们正在与远程服务器通信。使用 HTTPS,它们将尝试创建 SSL 连接,该连接将通过将远程证书与主机名进行比较来验证远程主机。这不会起作用,因为您的 squid 没有正确的证书。
但是,您可以代理 HTTPS 连接,因为知道如何代理 HTTPS 的客户端将打开与您的代理的连接并发出 CONNECT 请求,该请求基本上通过代理隧道建立连接。
您最好做的是阻止对端口 443 的直接访问,并告诉您的用户,如果他们想要使用 HTTPS,则必须配置他们的浏览器以使用代理。
答案2
这对您的配置有一些假设,但这应该接近您的需要。假设 LAN 端是 eth1:
iptables -I INPUT -i eth1 -p tcp --dport 443 -j ACCEPT
这会将所有从 LAN 侧传入、目标端口为 443 的数据包跳转到目标ACCEPT
,然后传出到路由器,我再次假设您已经完成设置。
希望有所帮助。
编辑:根据您关于只有一个界面的评论:
您将需要一个基于源地址的规则,然后根据需要修改地址:
iptables -I INPUT -p tcp -s 192.168.1.0/24 --dport 443 -j ACCEPT