【问题标题】:intercepting http proxy - disadvantages compared to a normal proxy拦截 http 代理 - 与普通代理相比的缺点
【发布时间】:2012-03-05 16:47:51
【问题描述】:

我想知道考虑实现一个拦截代理(支持缓存)以实现网络过滤的目的有多“现实”。我还想支持 IPv6、客户端身份验证和缓存。

阅读实现拦截代理的 squid wiki http://wiki.squid-cache.org/SquidFaq/InterceptionProxy 的缺点列表,它提到了使用它时需要考虑的一些缺点(我想澄清一下):

  1. 需要带有 NAT 的 IPv4 - 代理拦截不支持 IPv6,为什么?
  2. 它可能导致路径 MTU (PMTUD) 失败 - 为什么?
  3. 代理身份验证不起作用 - 客户端认为它直接与原始服务器通信,在这种情况下有办法进行身份验证吗?
  4. 拦截缓存仅支持 HTTP 协议,不支持 gopher、SSL 或 FTP。您不能为 HTTP 以外的其他协议设置代理服务器的重定向规则,因为它不知道如何处理它 - 这似乎很合理,因为在这种情况下将流量重定向到代理的方式是通过防火墙更改从源服务器到代理自己地址的数据包的目标地址(目标 NAT)。在这种情况下,如果我想拦截除 http 之外的其他协议,我将如何知道连接的目的是什么,以便将其中继到该目的地?

【问题讨论】:

    标签: networking proxy network-programming network-protocols


    【解决方案1】:
    1. 可以通过多种方式拦截流量。它不一定需要使用 NAT(IPv6 不支持)。例如,透明拦截肯定不会使用 NAT(透明是指 Proxy 不会使用自己的地址而是使用客户端地址生成请求,从而欺骗 IP 地址)。

    2. PMTUD 用于检测客户端和服务器之间路径中可用的最大 MTU 大小,反之亦然,它对于避免客户端和服务器之间路径上的 Ip 数据包碎片很有用。中间使用Proxy时,即使检测到MTU,也不一定和client到proxy和proxy到server的一样。但这并不总是相关的,它取决于所提供的流量以及代理的行为方式。

    3. 如果代理代表客户端进行身份验证,它需要了解身份验证方法,并且可能需要客户端中存在的一些 cookie。可以这样想……如果代理可以代表您对受限资源的访问进行身份验证,则意味着任何人都可以代表您执行此操作,并且良好身份验证的目的是保护您免受此类可能性的影响。

    4. 我猜这是来自 Squid 家伙的一篇非常古老的帖子,但存在将您想要的任何内容重定向到特定服务器的技术。一种简单的方法是将您的服务器作为网络的默认网关,然后所有数据包都通过它,您可以将您喜欢的数据包重定向到您的应用程序(或另一台服务器)。而且您不限于 HTTP,但您仅限于应用程序协议的工作方式。

    【讨论】:

    • 感谢及时重播 EdwardH。关于第 4 点,您建议使用什么方法将数据包重定向到应用程序以进行 Web(或其他协议)过滤?为此,我特别考虑了一种 Windows 方法。它必须是通用的,这样我才能看到所有应用程序协议流量。
    • 我有使用 Linux 套接字编程的经验,即使目标地址不是您的地址,您也可以将流量重定向到应用程序。如果您要进入 Windows 操作系统领域,这将是一个我无法建议的挑战。我可以在这里补充的唯一一点是,有一个用于支持路由器或智能交换机与常规服务器之间重定向的协商协议,它称为 WCCP,有了它,您可以使用支持它的外部路由器/交换机,在您的服务器中添加支持并使用它。但它有几个限制。
    • @EdwaardH 您使用套接字重定向流量?因此,您通过将来自 FORWARD 链(例如 iptables)的流量作为字节流转发给您的应用程序来处理流量?基本上,在这种情况下,您的应用程序在协议级别运行 - 它看到构成 http 或 ftp 协议的字节流然后使用原始套接字?如果您知道任何开源或参考,即使是 linux,请告诉我。
    • 我计划在一两周内在 github 上发布一个通用代理,这是我为探索 Linux 网络功能所做的工作。这是一个演示文稿以了解总体思路:link。请注意,它是用 C 编写的。如果您有兴趣,我可以在发布时更新您(它将在 LGPL 许可下)。
    • 是的,如果您更新这篇文章中的链接,我认为对于堆栈溢出社区也是一个好主意。 Tnx。
    猜你喜欢
    • 2012-05-13
    • 2011-02-10
    • 2020-04-28
    • 1970-01-01
    • 2017-03-19
    • 2015-05-16
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多