5种代理模式
mitmproxy操作模式有5种:
- 正向代理( Regular Proxy)(常规模式)
- 透明代理(Transparent Proxy)
- 反向代理(Reverse Proxy)
- 上游代理(Upstream Proxy)
- socks代理(SOCKS Proxy)
如何选择使用?
- 一般在服务端会使用反向代理
- 当你不需要将客户端配置为显式使用HTTP代理。可以使用透明代理
- 当你不许需要使用mitmproxy作为第二层代理,使用常规代理
- 需要使用mitproxy作为第二层代理,使用上游代理(Upstream Proxy Mode)
1. 正向代理( Regular Proxy)
Mitmproxy的常规模式是最简单和最容易设置的。
开始使用mitmproxy。
通过显式设置HTTP代理,将客户端配置为使用mitmproxy。
快速检查:您应该已经能够通过代理访问未加密的HTTP站点。
打开magic domain mitm.it并为您的设备安装证书。
不幸的是,一些应用程序绕过系统HTTP代理设置 - Android应用程序是一个常见的例子。在这些情况下,您需要使用mitmproxy的透明模式。
如果您要代理外部设备,您的网络可能如下所示:
方括号表示源和目标IP地址。您的客户端显式连接到mitmproxy,mitmproxy显式连接到目标服务器。
2. 透明代理(Transparent Proxy)
在透明模式下,流量被定向到网络层的代理,无需任何客户端配置。这使得透明代理非常适合无法更改客户端行为的情况。在下图中,在路由器和互联网之间插入了运行mitmproxy的机器:
方括号表示源和目标IP地址。圆括号标记以太网/数据链路层上的下一跳。这种区别很重要:当数据包到达mitmproxy机器时,它仍然必须发送到目标服务器。这意味着在流量到达mitmproxy之前不应该应用网络地址转换,因为这会删除目标信息,使得mitmproxy无法确定真实目的地。
模式透明错误
通用配置
有许多方法可以配置网络以进行透明代理。我们将看两个常见的场景:
配置客户端以使用自定义网关/路由器/“下一跳”
在路由器上实现自定义路由
在大多数情况下,建议使用第一种选择,因为它易于使用。
(a)自定义网关
在目标IP完好无损的情况下获得到mitmproxy机器的流量的一种简单方法是简单地使用mitmproxy框配置客户端作为默认网关。
在这种情况下,我们会:
将代理计算机配置为透明模式。您可以在透明部分找到说明。
配置客户端以使用代理计算机的IP作为默认网关。
快速检查:此时,您应该已经能够通过代理访问未加密的HTTP站点。
打开magic domain mitm.it并为您的设备安装证书。
通过DHCP向客户端提供设置,可以自动在客户端上设置自定义网关。这样可以设置一个拦截网络,其中所有客户端都自动代理,这可以节省时间和精力。
透明模式故障排除
不正确的透明模式配置是常见的错误来源。如果它不适合您,请尝试以下方法:
打开mitmproxy的事件日志 - 你看到clientconnect消息吗?如果不是,则数据包不会到达代理。一个常见原因是ICMP重定向的发生,这意味着您的计算机通过直接联系您的路由器告诉客户端有更快的方式访问互联网(请参阅有关如何禁用它们的透明部分)。如果有疑问, Wireshark可以帮助您查看是否有东西到达您的机器。
确保您没有在客户端上显式配置HTTP代理。在透明模式下不需要这样做。
重新检查透明部分中的说明。你错过了什么?
如果您遇到此处应列出的任何其他陷阱,请告知我们!
(b)自定义路由
在某些情况下,您可能需要更精细地控制哪些流量到达mitmproxy实例,哪些流量不到达。例如,您可以选择仅将流量转移到透明代理中的某些主机。有很多方法可以实现这一点,而且很大程度上取决于您正在使用的路由器或数据包过滤器。在大多数情况下,配置将如下所示:
3. 反向代理(Reverse Proxy)
mitmproxy通常与使用代理访问Internet的客户端一起使用。使用反向代理模式,您可以使用mitmproxy像普通的HTTP服务器一样:
有各种用例:
假设您有一个在http://example.local/上运行的内部API 。您现在可以在http: //debug.example.local/上以反向代理模式设置mitmproxy,并动态地将客户端指向这个新的API端点,该端点为他们提供相同的数据,并为您提供调试信息。同样,您可以将您的真实服务器移动到不同的IP /端口,并在原始位置设置mitmproxy以调试和/或重定向所有会话。
假设您是一名在http://example.com/上工作的Web开发人员(开发版本在http:// localhost:8000 /上运行)。您可以修改hosts文件,以便example.com指向127.0.0.1,然后在端口80上以反向代理模式运行mitmproxy。您可以在example.com域上测试您的应用程序,并获取所有请求记录在mitmproxy中。
假设您有一些应该获得SSL支持的玩具项目。只需将mitmproxy设置为端口443上的反向代理,您就完成了(mitmdump -p 443 --mode reverse:http://localhost:80/)。Mitmproxy自动检测TLS流量并动态拦截它。有针对此特定任务的更好工具,但是mitmproxy是设置SSL语音服务器的非常快速和简单的方法。
想要在服务器前添加不支持SSL的压缩代理吗?您甚至可以生成终止SSL(–mode reverse:http://…)的mitmproxy实例,将其指向压缩代理并让压缩代理指向启动SSL的mitmproxy(–mode reverse:https://…),然后指向真实服务器。如你所见,这是一个相当灵活的事情。
主机头
在反向代理模式下,mitmproxy会自动重写Host标头以匹配上游服务器。这允许mitmproxy容易地连接到开放web上的现有端点(例如mitmproxy --mode reverse:https://example.com)。您可以使用该keep_host_header选项禁用此行为。
但是,请记住,返回的文档中的绝对URL或HTTP重定向不会被mitmproxy重写。这意味着如果您在返回的网页中单击“ http://example.com ” 的链接,您将直接转到该URL,绕过mitmproxy。
解决此问题的一种可能方法是修改操作系统的hosts文件,以便“example.com”解析为您的代理的IP,然后直接访问example.com来访问代理。确保您的代理仍然可以解析原始IP,或在mitmproxy中指定IP。
注意:互动使用
反向代理模式通常不足以在不同的URL创建交互式网站的副本。提供给客户端的HTML保持不变 - 只要用户单击非相对URL(或下载非相对图像资源),流量就不再通过mitmproxy。
4. 上游代理(Upstream Proxy)
如果要通过在不同的代理设备前添加mitmproxy来链接代理,可以使用mitmproxy的上游模式。在上游模式下,所有请求都无条件地传输到您选择的上游代理。
mitmproxy在上游代理模式下支持显式HTTP和显式HTTPS。理论上你可以在一行中链接多个mitmproxy实例,但这在实践中没有任何意义(即在我们的测试之外)。
5. socks代理(SOCKS Proxy)
在此模式下,mitmproxy充当SOCKS5代理。
本文转载地址:http://www.chenxm.cc/article/817.html