iptables 用于透明 TCP 代理

iptables 用于透明 TCP 代理

我的情况如下。我的网络上有一台 iPad、一台 TiVo 和一台 dd-wrt ​​路由器,还有一台我想用来嗅探/解密 iPad 和 TiVo 之间流量的机器。

iPad 有一个应用程序,可以 A) 自动发现 TiVo 的 IP 和 B) 通过 SSL 与 TiVo 通信。iPad 在我的 wifi 网络上,而 TiVo 是有线的,保证数据包通过我的 dd-wrt ​​路由器;我可以用 tcpdump 嗅探它们,但它们是加密的。

我想尝试使用 tcpcatcher 来尝试使用 SSL 解密和重新加密的中间人攻击。我假设我可以在 dd-wrt ​​路由器上使用一些简单的 iptable 规则来转发/重定向/nat 在 ipad 和 tivo 之间传输的数据包,就像您可以为透明 http 代理所做的那样。但是,我还没有找到正确的规则来执行此操作,并且需要一些帮助。

答案1

使用 iptables 进行重定向可以按如下方式完成:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128

这是到代理服务器的标准 Web 重定向。此规则位于 NAT 表 PREROUTING 链中,用于从 eth1 接口进入的 TCP 协议端口 80 的数据包以及经过 NATTED 到 IP 和端口的 DESTINATION。

但是,一旦流量被重定向,您就必须在终端不知情的情况下将其返回到其原始目的地。我很想知道您是如何做到这一点的。

答案2

你可以使用我的tun2socks程序用于“TCP 捕获”部分。此程序会创建一个虚拟 TUN 网络接口,通过 SOCKS 代理转发所有传出的 TCP 连接。如果您添加路由规则(ip 规则)以将 Ipad 的连接转发到 tun2socks 的 TUN 接口,tun2socks 会将其转发到您的 SOCKS5 代理。在/作为 SOCKS 代理执行 MITM 攻击应该要容易得多。

请注意,从您的角度来看,这种方法类似于 iptables 重定向规则,但您不必做任何特殊的事情来找出连接的真实目的地 - 它将出现在 SOCKS5 协议标头中。

更新:将数据包从 Ipad 传送到 TUN 接口实际上比看起来要难。我假设您的路由器有一个br0桥接接口,用于桥接wlan0(Ipad 所在的位置)和eth0(Tivo 所在的位置)。请注意,我对 DD-WRT 不太熟悉,因此名称可能不同(请查看brctl show)。

现在的问题是,从 Ipad ( wlan0) 到 Tivo ( eth0) 的数据包没有被路由,但是桥接(即与交换机所做的相同)。这意味着即使您添加 IP 规则,它们也不会起作用,因为这些数据包不会通过路由器,至少从逻辑上讲是这样。要解决这个问题,您必须重定向来自 Ipad 的数据包,就好像它们直接指向的 MAC 地址br0而不是 Tivo 的 MAC 地址一样,后者位于eth0;这将使内核将它们视为传入的 IP 数据包,希望根据 IP 规则和路由表对它们进行路由。最后,命令是:

ebtables -t nat -A PREROUTING -i wlan0 -p ipv4 --ip-source <ip_of_ipad> --ip-destination <ip_of_tivo> --ip-protocol TCP -j dnat --to-destination <mac_of_br0>

这增加了ebtables规则将wlan0直接重定向到上接收的匹配数据包br0。如果捕获的数据包过多,您可能需要在此处添加更多条件。请注意,dnat并不意味着通常的 (IP) NAT - 在 ebtables 中,NAT 意味着更改帧的 MAC 地址,而不是 IP 地址。

您可以获取适用于 DD-WRT 的 tun2socks 编译版本这里;希望它能在您的设备上运行。

答案3

这是一个很好的教程实现这一点。基本上,您需要将数据包 DNAT 到代理服务器,并对其进行 SNAT,以便路由器从代理服务器获取响应(然后撤消 NAT)。iptables 规则应该是这样的(假设代理服务器的 IP 是 10.0.0.10):

iptables --table nat --append PREROUTING --in-interface eth0 --source !10.0.0.10 --protocol tcp --dport 80 --jump DNAT --to 10.0.0.10:3128
iptables --table nat --append POSTROUTING --out-interface eth0 --source 10.0.0.0/24 --destination 10.0.0.10 --jump MASQUERADE

第一条规则将发往端口 80 的数据包重定向到代理服务器(不包括来自代理服务器本身的数据包,因为它需要实际联系 Internet 上的 Web 服务器),第二条规则在发送到代理服务器时更改重定向数据包上的源地址。(我假设 FORWARD 链接受这些数据包,如果不是,您还需要另一条规则。)

相关内容