我在一台机器上运行 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 的东西。对此的任何说明将不胜感激!
您不能透明地代理 HTTPS。当您使用透明代理时,客户端认为他们正在与远程服务器交谈。使用 HTTPS,他们将尝试创建 SSL 连接,该连接将通过将远程证书与主机名进行比较来验证远程主机。这不起作用,因为您的鱿鱼没有正确的证书。
但是,您可以代理 HTTPS 连接,因为知道如何代理 HTTPS 的客户端将打开与您的代理的连接并发出 CONNECT 请求,该请求基本上通过代理建立连接。
您最好的做法是阻止对端口 443 的直接访问,并告诉您的用户,如果他们想使用 HTTPS,则必须将浏览器配置为使用代理。
这假设了您的配置,但这应该接近您的需要。假设 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