麻烦获得透明与ssl工作的Squid转发代理

我有一个由四个服务器联网在一起的环境。 一台服务器充当服务器,另外三台充当客户端,用于使用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的)

我会很短(是的,它看起来并不像所有的东西,但是否则会更长,也是完全不可读的)。

  • 它看起来不像你需要代理。 像完全一样。
  • 在现代环境中, caching比率可以在0到40%之间(而我根据我的代理字节比例来判断),所以如果要保存这些数据量,当然可以使用代理。 但考虑一下:在当今的企业环境中,代理的作用更多的是授权用户访问WAN访问,而不是caching数据。 这是怀疑你的select的主要原因。
  • 如果您仍然需要代理,这并不意味着您必须解密HTTPS。 让它活下去 它不会被caching,所以呢。 这是在它的devise。
  • 如果您仍然坚持解密HT​​TPS,则可以使用sslBump技术 。 但是这在某些国家可能是非法的,而且这使事情变得复杂了很多。 像很多 。 我build议你不要只为了caching的目的而这样做。
  • 不通过代理服务本地stream量:它增加了延迟,它加载了代理,带有不必要的stream量(因为它比较廉价,LAN通道比WAN宽),这使debugging变得复杂,并且增加了寄生networking依赖性,因此是不明智的。
  • 因为我怀疑你需要代理,我怀疑你更需要一个父代理。 看起来你只是有这个东西….你知道,进入代理。 使用一个,如果你需要它。
  • 可能是代替你只需要一个快速和体面的networking服务器,行nginx的代理。 因此,在您的Web服务器超负荷的情况下,它可以作为具有l2caching的服务器场的平衡器。
  • squid不是那么好。 对于10G带宽,你将不得不使用SMP squidfunction,这是有缺点的。 像鱿鱼工人的不平衡负载,鱿鱼内部的SMP问题,等等。 如果你有以前使用squid经验,这可能是可以解决的,但如果你第一次把它设定好的话,可能性就不大了。
  • 最后,如果你决定坚持使用squid,那么它不一定是透明的:你可以为客户端configurationWPAD,让服务器决定如何访问Internet。

我在服务器系统上设置了一个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式请求,也适用于此处。