如何通过tcpdump捕获SQUID代理流量的实际信息?

如何通过tcpdump捕获SQUID代理流量的实际信息?

squid在一个小型设置中用作代理,该设置具有一个内部网卡和一个外部网卡。现在使用 tcp,我可以捕获两侧的流量,但我面临一些问题。如果我捕获外部 NIC 的流量,那么它仅将外部 NIC IP 作为客户端 IP,如果我从内部捕获流量,则目标 IP 始终是 SQUID 内部 IP。我想要的是实际的客户端和服务器IP。我怎样才能做到呢?

我的操作系统是 CentOS 7.2

答案1

除非您使用透明代理,否则您看到的行为是正常的:

  • 客户端连接到代理以检索内容,因此您可以看到从客户端到代理并返回的数据包;
  • 代理代表客户端连接到目标服务器,因此您可以看到从代理到目标服务器并返回的数据包。

在IP层面,没有办法将两者连接起来。如果您的代理是缓存代理,那么在某些情况下将不需要连接任何内容:如果代理在其缓存中有信息,则它可以自行服务客户端的请求。但如果你查看数据包内部,你应该找到你要找的东西:

  • 从客户端到代理的请求将包含目标服务器名称(查找HostHTTP 标头);
  • 从代理到目标服务器的请求可能(取决于您的代理配置)包含客户端的 IP 地址(查找X-Forwarded-ForHTTP 标头)。

请注意,在第二种情况下,使用缓存代理,您只能找到请求给定可缓存资源的第一个客户端的 IP 地址。

如果您尝试处理加密连接,事情会变得更加复杂;我会让你读一下(参见Wireshark 关于该主题的页面鱿鱼的)...

相关内容