我有一个由四个服务器联网在一起的环境。 一台服务器充当服务器,另外三台充当客户端,用于使用Phoromatic运行自动化testing和Linux基准testing。
这四个系统都在企业防火墙之后。 如果我在客户端上设置了“http_proxy”和“https_proxy”环境variables,他们可以连接到外部世界并下载testing等,但是当它们尝试使用代理连接到本地服务器时,它们将不会连接到服务器。 因为我想caching软件包的下载,testing等等,所以我在服务器系统上设置了一个Squid代理,并将其configuration为透明代理,但只能用于http请求。
我想要做的是通过caching处理http请求,并根据需要转发给父代理。 显然,我不能解密SSL会话,但我不知道如何让Squid代理转发父代理的https请求。 此外,squid代理与基于Web的Phoromatic服务器运行在同一个机器上,但使用用户可configuration的非标准端口,但是squid喜欢阻止对所述端口的请求,即使它被添加到configuration中也是允许的。
只要让客户端直接使用企业防火墙进行https和ftp请求,并且只需要使用Squidcaching来处理http请求,或者完全丢弃Squid代理,并让客户端设置为不使用本地主机的代理,就可以。
这让我非常沮丧,因为大部分时间我都擅长搜集信息,自己动手做事,而不必去挑选其他人的头脑,但是我想我有一个相当独特的情况! 是的,我尝试了Phoroon的Phoronix论坛无济于事。
服务器是运行Fedora 24的SuperMicro X8DTT双机箱系统。networkingconfiguration包括到交换机的GbE连接(用作到外部世界的连接)以及每个系统上的两个10Gb,也通过交换机连接,但是10Gb系统没有连接到外部世界 – 它们被用于带宽testing(10Gb卡的驱动程序是系统设置testing的)
我会很短(是的,它看起来并不像所有的东西,但是否则会更长,也是完全不可读的)。
squid
不是那么好。 对于10G带宽,你将不得不使用SMP squid
function,这是有缺点的。 像鱿鱼工人的不平衡负载,鱿鱼内部的SMP问题,等等。 如果你有以前使用squid
经验,这可能是可以解决的,但如果你第一次把它设定好的话,可能性就不大了。 我在服务器系统上设置了一个Squid代理,并将其configuration为透明代理,但只适用于http请求。
这是预期的,因为HTTP和HTTPS的工作方式不同,不能用代理以相同的方式处理。 当HTTPS请求透明地redirect到代理端口时,代理无法查看encryption通信,因此无法处理它。 透明的代理实际上更像是一个“中间人”,在用户不知道的情况下干扰了httpstream量,这可能是因为http协议缺乏安全性。
https://en.wikipedia.org/wiki/HTTPS
HTTPS(也称为TLS上的HTTP,[1] [2] HTTP over SSL,[3]和HTTP Secure [4] [5])是通过互联网上广泛使用的计算机networking进行安全通信的协议。 HTTPS由通过传输层安全性或其前身安全套接字层encryption的连接内的超文本传输协议(HTTP)进行通信。 HTTPS的主要动机是访问网站的身份validation以及保护交换数据的隐私和完整性。
在互联网上stream行的部署中,HTTPS提供了网站和与之通信的相关Web服务器的身份validation,以防止中间人攻击。 此外,它还提供客户端和服务器之间通信的双向encryption,防止窃听和篡改和/或伪造通信内容[6]。 在实践中,这提供了一个合理的保证,即正在与准备与之通信的网站(而不是冒名顶替者)进行通信,并确保用户与网站之间的通信内容不能被任何第三方。
正如你所看到的,HTTPS应该在中间攻击中防止人类攻击,而不允许攻击。 下面的Squid页面详细解释了所有的问题和困惑。
http://wiki.squid-cache.org/Features/HTTPS
当浏览器遇到https:// URL时,它会执行以下两项操作之一:
直接打开一个SSL / TLS连接到原始服务器或
使用CONNECT请求方法,通过Squid向源服务器打开TCP隧道。
下面讨论与这两种stream量types的Squid交互。
连接隧道
CONNECT方法是一种通过HTTP代理隧道传输任何types的连接的方法。 默认情况下,代理与指定的服务器build立TCP连接,使用HTTP 200(连接build立)响应进行响应,然后在客户端和服务器之间来回切换数据包,而不理解或解释隧道stream量。 有关隧道和CONNECT方法的详细信息,请参阅RFC 2817和通过Web代理服务器草稿的过期的基于TCP的隧道协议。
通过鱿鱼连接隧道
当浏览器通过Squidbuild立CONNECT隧道时,访问控制能够控制CONNECT请求,但是只有有限的信息是可用的。 例如,请求URL的许多公共部分不存在于CONNECT请求中:
URLscheme或协议(例如http://,https://,ftp://,voip://,itunes://或telnet://)
URLpath(例如/index.html或/ secure / images /),
和查询string(例如?a = b&c = d)
使用HTTPS,上述部分存在于stream经隧道的封装HTTP请求中,但Squid不能访问那些encryption的消息。 其他隧道协议甚至可能不使用HTTP消息和URL(例如,telnet)。
当浏览器被configuration为手动使用代理时,它使用上面提到的CONNECT方法,它工作。 话虽如此,有办法configuration透明代理拦截httpsstream量(ssl-bump),这不是leagal和不推荐,必须谨慎使用。
碰撞CONNECT隧道
{X}警告:{X} HTTPS旨在为用户提供隐私和安全的期望。 在未经用户同意或不知情的情况下对HTTPS隧道进行解密可能违反道德准则,可能在您的pipe辖范围内违法。 这里和其他地方描述的Squid解密function是为了在用户同意的情况下进行部署而devise的,或者至less在没有同意的情况下解密是合法的环境中。 这些function还说明了为什么用户应该小心信任HTTPS连接,以及为什么HTTPS保护链中最薄弱的环节相当脆弱。 从整个networking安全的angular度来看,解密HTTPS隧道是一种中间人攻击。 攻击工具相当于现实世界中的一颗primefaces弹:确保你明白自己在做什么,决策者有足够的信息做出明智的select。
Squid SslBump和相关function可用于在HTTPS CONNECT隧道通过Squid代理时对其进行解密。 这允许处理隧道HTTP消息,就好像它们是常规的HTTP消息一样,包括应用详细的访问控制和执行内容自适应(例如,检查信息泄露的请求体并检查对病毒的响应)。 configuration错误,Squid错误和恶意攻击可能导致未encryption的消息逃离Squid边界。
从浏览器的angular度来看,封装的消息不会被发送到代理。 因此,一般的拦截限制,如无法validation个别embedded式请求,也适用于此处。