在Mac OS X上为透明代理设置端口转发时出现问题



我正试图在我的Mac OS X Lion(10.7.5)上设置一个透明代理,这样我就可以使用mitmproxy(拦截来自android应用程序的SSL流量)。我遵循了mitmproxy文档中的步骤,在Mac OS X上使用pf设置端口转发,它们都没有任何错误:

$ sudo sysctl -w net.inet.ip.forwarding=1
Password:
net.inet.ip.forwarding: 0 -> 1
$ sudo pfctl -f pf.conf
No ALTQ support in kernel
ALTQ related functions disabled
$ sudo pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

但它似乎没有任何效果。当我在浏览器中访问网站时,它会发出直接请求,而不会通过我指定的端口。这是pf.conf文件(en1是我的wifi):

rdr on en1 inet proto tcp to any port 80 -> 127.0.0.1 port 4500
rdr on en1 inet proto tcp to any port 443 -> 127.0.0.1 port 4500

感谢您今天光临IRC频道。我已经追踪到了这一点,基本问题是rdr规则适用于入站流量。这意味着他们不会重定向来自盒子本身的流量。如果你仔细想想,这是不可避免的:我们无法区分来自非mitmproxy应用程序的出站连接和来自mitmproxy本身的出站联系。我们可以使用route-to将流量发送到lo0,然后将其重定向,但这会导致一个无限循环,mitmproxy自己的出站连接也会重定向回mitmproxy。

因为我对您的用例有所了解,所以我建议您探索使用VirtualBox实现这一点的方法。攻击计划是将VirtualBox网络设置为桥接模式,然后使用源地址匹配的pf规则将流量重定向到mitmproxy。这应该是你想要的,而不是由于无限重定向而导致时间和空间的奇异性。

如果您需要进一步的帮助,请再次访问IRC频道。

您尝试过net.inet.ip.scopedroute=0吗?从…起http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/:

现在,如果你完成了上面的设置,你会注意到实际上什么都不管用。造成这种情况的原因是OS X内核中的一个Bug这需要将net.inet.ip.scopedroute标志翻转为0。我不是完全确定它的作用,但互联网报道称它坏了通过用户偏好进行网络共享。在任何情况下,它都会修复基于ipfw的转发,因此您可以使用sysctl:进行翻转

$ sudo sysctl -w net.inet.ip.scopedroute=0

不幸的是,在OS X Lion中,此标志实际上无法从用户空间,因此需要将其设置为启动参数,然后重新启动你的电脑。您可以通过编辑/Library/Preferences/SystemConfiguration/co.apple.Boot.plist文件(续…)

您使用的是端口4500,而不是默认端口8080。您是否从端口规范开始mitmproxy?:mitmproxy-T--主机-p 4500

您是否按照步骤在Android设备中设置证书?http://mitmproxy.org/doc/certinstall/android.html

另一个问题可能是你的android手机上的网关:首选项-Wifi-保持你正在使用的网络-编辑网络-高级选项-使用mitmproxy将你的机器的ip设置为网关。

顺便说一句,我有同样的警告和无ALTQ功能,但它有效。

最新更新