我正在尝试测试一个奇特的流量分析器应用程序,它在端口 8890 上运行。
我目前的计划是让任何 HTTP 请求进入 Squid 的 3128 端口,并让其处理该请求,然后在它发回响应之前,使用 iptables 将响应数据包(离开 3128 端口)重定向到 8890 端口。
我研究了这个问题一整晚,尝试了很多 iptables 命令,但我还是遗漏了一些东西,而且我的头发都掉了。
我想法类似这样的操作会起作用:
iptables -t nat -A OUTPUT -p tcp --sport 3128 -j REDIRECT --to-ports 8990
这个规则创建成功,但它从不重定向任何东西。
这有可能吗?如果可能,iptables 的哪些命令可以做到这一点?如果不可能,在给定多个远程浏览器客户端的情况下,在单个主机上,有什么方法可以做到吗?
我想知道带有 mod_proxy 的 Apache 是否可以代替 Squid 成为此设置的候选者?
如果我可以告诉 Squid(或 Apache 或任何其他 HTTP 代理)将响应发送到不同的本地端口而不是发送回远程客户端,那么这也可以起作用(即使没有 iptables)。
任何有关具有此功能的其他 HTTP 代理的建议都很好。
答案1
事实证明我原来的计划是不可能实现的。
但是我可以实现最初的预期目标,即允许任何远程客户端看到这个奇特的流量分析器正在工作,方法是在主机上运行 OpenVPN,然后以典型方式使用 iptables 从一个子网(隧道子网)捕获端口 80 的数据包并重定向到另一个子网(主机的正常子网)。这符合分析器的设计,它期望网关本身针对这种类型的重定向进行修改。
答案2
使用带有 TEE 的 iptables 应该可以让你到达你需要的地方。
http://www.bjou.de/blog/2008/05/howto-copyteeclone-network-traffic-using-iptables/