目前,我的IPtable不分青红皂白地将所有传入的请求发送到我的Squid透明代理。 但是,由于我需要SSL来工作,我需要一种方法来避免拦截SSLstream量。
理念
有没有可能在iptable中做到这一点? 谢谢!
编辑:我添加更多关于我的设置的信息。
由于具体要求,我必须使用DNSredirect将stream量发送到Squid透明代理,而不是典型的路由器/网关redirect。
拦截方法
当前的IP表规则
显然,你正在使用一个典型的路由器/网关转发stream量到Squid,你可以转发端口80,忽略443,因为443stream量将直接跳过,鱿鱼。
不幸的是,用我目前的设置,如果我不转发443,任何HTTPS连接都会超时。
现在唯一的解决scheme是拦截所有443请求,将每个域映射到每个唯一的IP地址,并将请求发送回原始源IP。
我尝试使用Rinetd转发443到原来的网站的IP地址。 不幸的是,这种方法将我所有的443stream量转发到只有1个IP地址,因为它不会区分请求IP。
例如,我将443映射到Gmail.com的IP。 当我访问https://gmail.com时 ,它会正常工作。 但是,如果我访问https://hotmail.com ,它仍然会将我发送到gmail.com的IP
我需要find一个方法来映射每个IP与每个域,所以当我访问gmail.com,它会转发到gmail的IP; 当我访问hotmail.com时,它会将我转到hotmail.com的IP
你所描述的是一个“透明的SSL代理”,它不存在(对于前进的情况,它可以用于SSL加速器)。 让我们看看为什么:
此时需要交换证书等
但是…如何Squid框知道什么网站真正被访问(即什么远程主机连接)? 客户端不会告诉SSL服务器它期望的是哪个站点 – 它依赖于服务器已经知道了! 这是SSL的安全function的一部分。
这是与iptables相同的问题 – 它如何知道客户端真正想要的东西? 这些信息根本不可用(因为“虚构的DNS”服务器已将其丢弃)。
我知道代理SSL的唯一方法是通过CONNECT
方法; 为此,您需要将Squid框指定为显式代理。
老实说,问题是DNSredirect。 我很困惑,为什么你不能使用iptablesredirect端口80,只有443。