16
2025
06
14:05:06

mitmproxy实现虚拟机流量转发

概述

mitmproxy 进行虚拟机流量转发方案,A虚拟机自身产生的流量,通过 A虚拟机系统代理设置转发至B主机上的Burp Suite,再由 B主机上的Burp Suite配置上游代理转发回A虚拟机上的mitmproxy,最终通过 A虚拟机已连接的VPN 进行转发的需求。这种循环代理的配置能够确保A虚拟机的所有网络流量都经过Burp Suite进行拦截和分析,并最终通过VPN安全出口,实现在B主机上对A虚拟机流量进行代理。

架构

image.png

核心问题

  1. A 虚拟机需要将其自身流量通过系统代理正确转发到 B 主机。
  2. B 主机上的 Burp Suite 需要接收来自 A 虚拟机的流量,并正确配置上游代理以转发回 A 虚拟机上的 mitmproxy
  3. A 虚拟机上的 mitmproxy 需要处理 Burp Suite 返回的流量,并确保其通过 VPN 隧道发出。
  4. HTTPS 代理的 CONNECT 方法在整个链路上需要被正确处理。

解决方案: mitmproxy

mitmproxy 是一个免费且开源的交互式 HTTPS 代理工具,它支持 HTTP/1、HTTP/2、HTTP/3、WebSockets 以及其他 SSL/TLS 保护协议的流量拦截、检查、修改和重放。其强大的功能使其成为解决此问题的理想选择。

方案拓扑

image.png

配置手册

配置 A 虚拟机系统代理

将 A 虚拟机的 Windows 系统代理设置为 B 主机上的 Burp Suite 监听地址和端口。这将确保 A 虚拟机自身产生的所有网络流量都先经过 B 主机上的 Burp Suite。

  1. 在 A 虚拟机上,打开 "设置" (Settings) -> "网络和 Internet" (Network & Internet) -> "代理" (Proxy)。
  2. 在 "手动设置代理" (Manual proxy setup) 部分,将 "使用代理服务器" (Use a proxy server) 选项设置为 "开" (On)。
  3. 在 "地址" (Address) 字段中填写 B 主机的 IP 地址 (例如:192.168.1.101,请替换为您的 B 主机实际IP)。
  4. 在 "端口" (Port) 字段中填写 Burp Suite 监听的端口,通常是 8080
  5. 勾选 "不使用代理服务器的地址" (Don't use the proxy server for local (intranet) addresses) 选项,以避免本地流量也经过代理。
  6. 点击 "保存" (Save)。

实际上我用的是这个项目:proxy-gui[1],简单设置个系统代理即可
image.png

mitmproxy配置

打开 A 虚拟机上的命令提示符 (CMD) 或 PowerShell,运行以下命令安装 mitmproxy

  • 1
pip install mitmproxy

启动 mitmproxy (或 mitmweb)

推荐使用 mitmweb,它提供了 Web 界面,方便查看和管理流量。mitmproxy 在此方案中作为 Burp Suite 的上游代理,也是最终将流量通过 VPN 发送出去的组件。
在 A 虚拟机上,打开命令提示符 (以管理员身份运行可能更好,以确保端口绑定权限),运行以下命令:

  • 1
mitmweb--listen-host 0.0.0.0--listen-port 8081--mode regular

  • --listen-host 0.0.0.0

    :这使得 mitmproxy 监听所有可用的网络接口,允许 B 主机通过 A 虚拟机的 IP 地址连接到它。
  • --listen-port 8081

    :指定 mitmproxy 监听的端口。您可以选择任何未被占用的端口。
  • --mode regular

    :指定 mitmproxy 以常规 HTTP 代理模式运行。
A 虚拟机防火墙配置

防火墙关闭

配置B主机 (Burp Suite与证书)

B主机需要进行相应设置,包括安装 mitmproxy 的CA证书以及配置Burp Suite的上游代理。Burp Suite 将接收来自 A 虚拟机系统代理的流量,并将其转发回 A 虚拟机上的 mitmproxy

1. 安装 mitmproxy CA 证书 (处理 HTTPS 流量的关键)

当 mitmweb 运行时,它会生成自己的 CA 证书用于拦截 HTTPS 流量。为了让 B 主机信任这些被 mitmproxy 拦截和重新签名的 HTTPS 流量,您需要将 mitmproxy 的 CA 证书安装到 B 主机的操作系统信任存储或浏览器中。

  1. 在 B 主机上,打开浏览器,访问 http://<A虚拟机IP地址>:8081
  2. 此时,mitmproxy 的 Web 界面会显示一个链接 http://mitm.it。点击该链接。
  3. 在 mitm.it 页面上,选择适用于您 B 主机操作系统的证书下载选项 (例如 "Windows"),下载并安装证书。通常,您需要将证书安装到 "受信任的根证书颁发机构" 中。
2. 配置 Burp Suite 的上游代理

在 B 主机上启动 Burp Suite。

  1. 导航到 "Proxy" -> "Options" 选项卡。
  2. 向下滚动到 "Proxy Listeners" 部分,确保 Burp Suite 监听在 B 主机的 0.0.0.0:8080 (或您的 B 主机实际IP地址:8080),以确保能接收来自 A 虚拟机的流量。
  3. 继续向下滚动到 "Upstream Proxy Servers" 部分。
  4. 点击 "Add" 按钮添加一个新的上游代理规则。
  5. 在弹出的 "Add upstream proxy rule" 对话框中进行以下配置:
    • Destination host:

       * (星号表示此上游代理规则适用于所有目标主机)。
    • Proxy host:

       填写 A 虚拟机的 IP 地址 (例如 192.168.1.100,请替换为您的 A 虚拟机实际IP)。
    • Proxy port:

       8081 (这是 A 虚拟机上 mitmproxy 监听的端口)。
    • Proxy type:

       选择 HTTP
    • 其他选项通常保持默认即可,除非您的环境有特殊认证需求。
  6. 点击 "OK" 保存规则。

验证流量转发

完成所有配置步骤后,进行验证是确保一切按预期工作的关键环节。确认流量是否正确地从A虚拟机自身经由B主机和A虚拟机的VPN转发。

  1. 在 A 虚拟机上:

    • 确保 VPN 客户端已连接。
    • 确保 mitmproxy (或 mitmweb) 正在运行并监听 8081 端口,没有报错信息。
    • 从 A 虚拟机上的浏览器或其他应用程序发起网络请求

       (例如访问 http://example.com 或 https://google.com)。由于 A 虚拟机的系统代理已配置,这些请求将首先发送到 B 主机。
  2. 在 B 主机上:

    • 确保 Burp Suite 的代理监听器已激活 (Proxy -> Intercept -> Intercept is on/off, and check Proxy Listeners table)。
    • 检查 Burp Suite 的 "HTTP history" 选项卡,您应该能看到来自 A 虚拟机的流量被拦截。
  3. 再次检查 A 虚拟机:

    • 检查 A 虚拟机上 mitmproxy (或 mitmweb) 的控制台/Web 界面,您也应该能看到相同的流量记录。
    • 确认流量通过 VPN 出口:

       在 A 虚拟机上,访问如 whatismyip.com 或 ip.sb,确认显示的 IP 地址是 VPN 的出口 IP,而不是您的真实公网IP。
    • 如果所有步骤都正常,流量路径将是:A 虚拟机 (应用) -> A 虚拟机 (系统代理) -> B 主机 (Burp Suite) -> A 虚拟机 (mitmproxy) -> A 虚拟机 (VPN) -> 互联网。

  1. https://github.com/ai862/proxy-gui ↩




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://zblog.hqyman.cn/post/11605.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: