根据每个连接选择性地使用透明代理

根据每个连接选择性地使用透明代理

TL;DR - 我计划使用应用程序级防火墙仅将 HTML 内容请求转发到透明代理。因此,返回 HTML 文件的 google.com 的初始 GET 请求(例如)将被转发到 Squid(透明代理),但所有后续的静态资产(CSS、JS、图像文件等)请求都不会通过代理。

您能想到这可能会对用户会话产生什么影响吗?

一些背景知识

我们现场有一个路由器,但想使用 AWS 上托管的透明代理 + ICAP 服务器进行内容过滤。最初,我们计划将所有端口 80 流量转发到透明代理,但担心每个请求在通过我们的 EC2 实例路由时会产生额外的 50-100 毫秒,更重要的是会产生不可接受的带宽成本。最近我们发现路由器的防火墙可以使用深度数据包检查进行过滤(因此可以将传出的请求与“Accept text/html.*”标头进行匹配)。

乍一看,这似乎是一个更易于管理的解决方案,但我的网络经验有限,我想在走得太远之前发现任何“陷阱”和/或例子,说明这显然是一个可怕的想法。

答案1

根据我的经验,透明 HTTP 代理通常对用户会话几乎没有影响。

不过,你的策略和你真正想要实现的目标在我看来似乎不太清楚。我认为 HTTP 的工作方式的现实会给你带来问题。也许你可以从最终结果的角度多谈谈你真正想要实现的目标。我并不是说这是一个“糟糕的主意”,而是你希望获得什么完全不清楚。

从 HTTP 协议的角度来看,您的策略存在一个重大问题。根据定义,您的第 7 层防火墙在发出请求之前无法知道所请求资源的 MIME 类型。您可以对文件名进行匹配(查看它是否以“.html”结尾等),但任何 URL 都可以返回任意 MIME 类型。这.b0rk 文件text/html,但防火墙上的匹配规则.html不会.htm“知道”这一点。必须向远程服务器发出请求,并且远程服务器必须做出响应,然后才能知道 MIME 类型。

为什么您认为其他类型的文件(CSS、Javascript、图像等)是“静态的”。它们当然不必如此。任何 URL 引用的对象都可以是“动态的”。

如果您担心带宽成本,为什么不直接在本地托管透明代理呢?本地代理不会产生十分之一秒的请求到达代理的延迟,而且您不会产生与从第三方数据中心发送所有数据相关的潜在带宽成本。当代理缓存对象并让它缓存所有内容(它可以缓存的)时,您还会看到本地带宽利用率有所改善。

我曾经通过 Squid-cache 实例运行过一个 1,000 座位的教育网络,而这个网络运行的硬件在今天看来简直是微不足道。除非你谈论的是一个非常非常大的网络,否则一台非常普通的机器就可以为你处理负载。如果你担心单点故障,你可以考虑使用Web 缓存通信协议(WCCP),如果您的边缘设备支持,则可以在几个缓存之间进行故障转移。

如果您打算通过这种方式扫描 HTML 中的“恶意”代码,那么我认为您的想法是错误的。我更担心 Javascript 和application/octet-stream对象中的恶意代码,而不是对象text/html。无论如何,我对扫描持怀疑态度,因为任何东西都可能被充分混淆,从而被扫描漏掉(请参阅停机问题)。除非您要进行 SSL 拦截,否则您还会错过通过 HTTPS 传输的任何内容。扫描捕获已知漏洞,我确实认为这是 IT 安全架构的有效组成部分,但 0day 漏洞几乎总是会溜走。

相关内容