我有一个装有2个网卡的linux盒,用于检查通过端口80的流量。一张卡用于连接互联网,另一张卡连接至网络交换机。关键是要能够检查连接到该交换机的设备上用于调试目的的所有HTTP和HTTPS通信。
我为iptables编写了以下规则:
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
在192.168.2.1:1337上,我使用Charles(http://www.charlesproxy.com/)进行了透明的http代理记录。
端口80一切都很好,但是当我为指向端口1337的端口443(SSL)添加类似规则时,通过Charles收到有关无效消息的错误消息。
我之前曾在Charles的同一台计算机上使用过SSL代理(http://www.charlesproxy.com/documentation/proxying/ssl-proxying/),但是由于某种原因未能透明地进行SSL代理。我用Google搜索的一些资源说这是不可能的-如果有人可以解释原因,我愿意接受它作为答案。
需要注意的是,我拥有上述设置的完全访问权限,包括连接到子网的所有客户端-因此,我可以接受Charles的自签名证书。该解决方案不必特定于Charles,因为从理论上讲,任何透明代理都可以。
谢谢!
编辑:稍微玩了一下之后,我就能让它在特定主机上正常工作。当我将iptables修改为以下内容时(并以查尔斯打开1338作为反向代理):
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:1338
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 1338
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
我能够得到回应,但没有目标主机。在反向代理中,如果我仅指定1338中的所有内容都传递给我想击中的特定主机,它将正确执行握手操作,并且我可以打开SSL代理来检查通信。
设置不理想,因为我不想假设从1338起的所有内容都交给该主机-知道为什么要剥离目标主机了吗?
再次感谢