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

9

我正在尝试在我的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

你是否配置了客户端设备,将代理主机作为默认网关? - Tomer
3个回答

3
感谢您今天来到IRC频道。我已经找到了问题的根源,基本问题在于rdr规则适用于入站流量。这意味着它们不会重定向来自该盒子本身的流量。如果您考虑一下,这是不可避免的:我们无法区分非mitmproxy应用程序的出站连接和mitmproxy本身的出站连接。我们可以使用route-to将流量发送到lo0,然后重定向它,但这会导致一个无限循环,其中mitmproxy自己的出站连接也被重定向回mitmproxy。
因为我了解您的使用情况,所以建议您探索使用VirtualBox的方法。攻击计划是将VirtualBox网络设置为桥接模式,然后使用pf规则匹配源地址将流量重定向到mitmproxy。这样做应该能够满足您的需求,而且不会由于无限重定向而导致时间和空间上的奇点。
如果您需要进一步帮助,请再次访问IRC频道。

听起来似乎直接使用我的实际安卓手机(使用USB文件传输下载mitmproxy证书)比使用模拟器更容易? - Ben G
是的,这是更常见的用例,您当前的设置应该“只需工作”。 - cortesi
我遇到了完全相同的问题。然而,我正在使用我的真实手机,但是我的mitmproxy根本没有捕获到任何流量。 - Cripto
@user1048138,这听起来像是一个不同的问题。也许手机上的网关没有正确配置?如果需要帮助,请到IRC频道(irc.oftc.net上的#mitmproxy)寻求帮助。 - cortesi

2
你尝试过net.inet.ip.scopedroute=0吗?引自http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/
现在,如果你完成了上述设置,你会发现实际上什么都不起作用。这是由于OS X内核中的一个错误,需要将net.inet.ip.scopedroute标志翻转为0。我不完全确定它的作用,但互联网上的报道称它会破坏用户首选项中的网络共享。无论如何,它可以修复基于ipfw的转发,因此您可以使用sysctl来翻转它: $ sudo sysctl -w net.inet.ip.scopedroute=0 不幸的是,在OS X Lion中,该标志实际上无法从用户空间翻转,因此您需要将其设置为引导参数,然后重新启动计算机。您可以通过编辑/Library/Preferences/SystemConfiguration/com.apple.Boot.plist文件来实现这一点(继续...)

0

您正在使用端口4500而不是默认端口8080。您是否使用端口规范启动了mitmproxy:mitmproxy -T --host -p 4500

您是否按照设置Android设备证书的步骤进行操作?http://mitmproxy.org/doc/certinstall/android.html

另一个问题可能是您的Android手机网关设置:首选项-Wifi-长按您正在使用的网络-编辑网络-高级选项-将您的机器IP与mitmproxy设置为网关。

顺便说一下,我也有相同的警告,但它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接