IOS系统配置全局代理抓包指南

     分类: 个人笔记,网络安全 发布时间: 2025-10-15 11:33 3人浏览

一、背景

在对iOS应用进行安全测试时,常规的HTTP代理抓包方式(即在Wi-Fi设置中配置代理)常常失效。许多应用为了安全或其它原因,会选择绕过系统代理直接进行网络通信。为了捕获这些直连流量,我们需要一套更底层的全局流量拦截方案。
本方案的核心思路是利用透明代理:通过在iOS设备上使用WireGuard建立VPN连接,将设备的所有网络流量强制发送到电脑上。然后,在Mac上通过防火墙规则,将流经的HTTP/HTTPS流量重定向到Burp Suite,从而实现对所有App的全局抓包,绕开应用层的直连限制。

二、架构与流量路径

在开始之前,先明确我们的配置架构:

网络环境

  • (可选)一台树莓派(Kali Linux)作为独立 Wi-Fi 热点。
  • Mac电脑和iOS设备都连接到同一个Wi-Fi,确保它们在同一个局域网内。

角色分配

  • Mac 电脑:运行 Burp Suite,同时作为 WireGuard 服务端
  • iOS 设备:作为 WireGuard 客户端,是我们的抓包目标。

流量路径

iOS App → WireGuard隧道 → Mac (utun虚拟网卡) → pf防火墙(重定向) → Burp Suite → pf防火墙(NAT) → 互联网


三、配置步骤

第 1 步:在 Mac 上安装并配置 WireGuard 服务端

1. 安装 WireGuard 工具

使用Homebrew安装。

brew install wireguard-tools

2. 生成密钥对

我们需要为服务器(Mac)和客户端(iOS)各生成一对密钥。在一个安全目录下执行:

# 生成服务端密钥
wg genkey > server_private.key
wg pubkey < server_private.key > server_public.key

# 生成客户端密钥
wg genkey > client_private.key
wg pubkey < client_private.key > client_public.key

记下这四个文件内容,后面会用到。

3. 创建服务端配置文件(wg0.conf)

创建服务端配置文件 (wg0.conf): 这是整个方案最核心的部分。创建一个名为wg0.conf的文件,填入以下内容。注意替换其中的占位符。

# =================================================================
# === WireGuard 服务端配置 (wg0.conf) for macOS with Burp Suite ===
# =================================================================

[Interface]
# [Interface] 部分定义了WireGuard服务端自身的网络接口信息。

# PrivateKey: 服务器的私钥。
# 这是服务器的身份凭证,绝对不能泄露。使用 `wg genkey` 命令生成。
PrivateKey = AKdd4eNx/54Wm15N3N1w5aAn037wirFbajDLFJZa108=

# Address: 服务器在VPN网络中的IP地址和子网。
# 10.0.0.1 是分配给服务器(这台Mac)的VPN内部IP。
# /24 定义了整个VPN子网的范围 (10.0.0.0 到 10.0.0.255),所有连接到此服务器的客户端都将位于这个网段内。
Address = 10.0.0.1/24

# ListenPort: 服务器监听的公网UDP端口。
# 客户端将通过这个端口连接到服务器。您需要确保Mac的防火墙允许此端口的入站UDP流量。
ListenPort = 51820

# --- 自动化网络配置脚本 ---
# PostUp: 当WireGuard接口成功启动后,自动执行此行命令。
# 这行命令是实现“能上网”和“流量进Burp”两个核心功能的关键。它由三个独立的命令通过分号(;)串联而成。
# 命令分解:
# 1. `sudo sysctl -w net.inet.ip.forwarding=1`:
#    开启macOS的内核IP转发功能。这允许Mac像路由器一样,将数据包从一个网络接口(如WireGuard的utun虚拟网卡)转发到另一个网络接口(如连接互联网的en0 Wi-Fi网卡)。这是让iOS设备通过Mac能上网的前提。
# 2. `sudo pfctl -E`:
#    启用(Enable)macOS内置的防火墙pf (Packet Filter)。NAT和端口重定向功能都依赖于pf服务。
# 3. `printf '...' | sudo pfctl -f -`:
#    这是最核心的部分,它动态生成两条防火墙规则,并通过管道(|)传递给pfctl命令来加载。
#    - `printf '...\n...'`: 使用`printf`命令生成规则。相比`echo`,`printf`能更可靠地处理换行符`\n`,确保两条规则被正确地分行解析。
#    - `nat on en0 from 10.0.0.0/24 to any -> (en0)`: 这是NAT(网络地址转换)规则。
#      - `nat on en0`: 在名为`en0`的网络接口上执行NAT。(注意: `en0`必须是你Mac连接互联网的实际网卡名)。
#      - `from 10.0.0.0/24`: 规则应用于所有源地址为VPN网段的流量(即所有来自iOS客户端的流量)。
#      - `to any`: 目标地址是任何地方(即互联网)。
#      - `-> (en0)`: 将这些流量的源IP地址伪装成Mac在`en0`接口上的IP地址。这样,互联网上的服务器会将响应包发回给Mac,Mac再通过NAT将包传回给iOS设备。
#    - `rdr on %i inet proto tcp from 10.0.0.2 to any port {80, 443} -> 127.0.0.1 port 8080`: 这是RDR(端口重定向)规则,用于实现透明代理。
#      - `rdr on %i`: 在WireGuard的虚拟接口上执行重定向。`%i`是一个由`wg-quick`提供的变量,会自动替换为真实的接口名(例如`utun4`)。
#      - `inet proto tcp`: 规则仅应用于IPv4的TCP协议流量。
#      - `from 10.0.0.2`: 仅重定向来自特定iOS设备(IP为10.0.0.2)的流量。
#      - `to any port {80, 443}`: 目标端口是80 (HTTP) 或 443 (HTTPS) 的流量。
#      - `-> 127.0.0.1 port 8080`: 将符合条件的流量重定向到本机(127.0.0.1)的8080端口,也就是Burp Suite正在监听的端口。
#    - `| sudo pfctl -f -`: `pfctl -f`用于加载规则文件,`-`表示从标准输入(即管道的前半部分)读取规则。
PostUp = sudo sysctl -w net.inet.ip.forwarding=1; sudo pfctl -E; printf 'nat on en0 from 10.0.0.0/24 to any -> (en0)\nrdr on %i inet proto tcp from 10.0.0.2 to any port {80, 443} -> 127.0.0.1 port 8080\n' | sudo pfctl -f -

# PostDown: 当WireGuard接口关闭时(例如执行`wg-quick down`),自动执行此行命令,用于清理网络环境。
#
# 命令分解:
# 1. `sudo sysctl -w net.inet.ip.forwarding=0`: 关闭IP转发功能,恢复系统默认设置。
# 2. `sudo pfctl -d`: 禁用(Disable)pf防火墙服务。
# 3. `sudo pfctl -F all`: 清空(Flush)所有类型的防火墙规则(包括NAT, RDR, Filter等),确保不留下任何残留规则影响系统正常网络。
PostDown = sudo sysctl -w net.inet.ip.forwarding=0; sudo pfctl -d; sudo pfctl -F all

# =================================================================
# === Peer (客户端) 配置 ===
# =================================================================

[Peer]
# [Peer] 部分定义了允许连接到此服务器的客户端(也称为“对等端”)。可以有多个[Peer]块。

# PublicKey: 客户端的公钥。
# 这是客户端的身份标识,与服务器的私钥配对。使用`wg pubkey`从客户端的私钥生成。
PublicKey = lbqJrEksYG9FqbJvKGv+IsxOuI7Smw1bD++6g+9gag4=

# AllowedIPs: 允许此客户端在VPN网络中使用的IP地址。
# 这个设置非常重要,它有两个作用:
# 1. 安全性: 服务器只接受来自该Peer公钥、且源IP地址为10.0.0.2的数据包。
# 2. 路由: 服务器知道,当有数据包要发送到10.0.0.2时,应该加密并发送给这个Peer。
AllowedIPs = 10.0.0.2/32

注意:
en0 需要通过 ifconfig 命令确认,它是Mac用于上网的物理网卡(Wi-Fi或有线)。
%i 是一个占位符,wg-quick 会在运行时自动将其替换为真实的虚拟网卡名(如 utun4)。


第 2 步:在 iOS 上配置 WireGuard 客户端

  1. 从美区App Store下载并安装官方WireGuard应用(注意国区App Store无此应用)。
  2. 在应用内,选择“从文件或压缩包创建”或“从二维码创建”。
  3. 创建一个client.conf文件,内容如下:
[Interface]
# 填入你的客户端私钥 (client_private.key 的内容)
PrivateKey = eHYUPv4/k5zIOW7GLJDdTRDk43bUdUXg4TuIRXu9yVU=
Address = 10.0.0.2/32
DNS = 8.8.8.8
[Peer]
# 填入你的服务端公钥 (server_public.key 的内容)
PublicKey = xYvfGBMKiFRxHdpKCz0SZTp2zc5yQadfo+Hkmys2kyI=
# AllowedIPs设为0.0.0.0/0,表示将所有流量都通过VPN发送
AllowedIPs = 0.0.0.0/0
# Endpoint是你的Mac在树莓派Wi-Fi网络中的IP地址和监听端口,端口默认为51820
Endpoint = 192.168.50.43:51820
  1. 将此文件导入到iOS的WireGuard应用中,可将client.conf文件中的内容输入草料二维码生成,生成对应二维码,通过扫描二维码直接导入。

第 3 步:配置 Burp Suite

开启透明代理模式:

  1. 打开 Burp Suite ,进入 Proxy → Options
  2. Proxy Listeners 中,选中正在使用的代理(如在第二步服务器配置文件中写入的 127.0.0.1:8080),点击 Edit
  3. 切换到 Request Handling 标签页
  4. 勾选 Support invisible proxying。此选项必须开启
    IOS系统配置全局代理抓包指南插图

安装并信任 CA 证书

  1. 确保 iOS 已能通过 WireGuard 上网。
  2. 在 iOS 浏览器访问:http://10.0.0.1:8080(WireGuard服务端的VPN IP)。
    IOS系统配置全局代理抓包指南插图1
  3. 下载并安装 PortSwigger CA 证书。
  4. 进入iOS的 设置 → 通用 → 关于 → 证书信任设置,完全信任刚刚安装的 PortSwigger CA 证书。
    IOS系统配置全局代理抓包指南插图2

第 4 步:启动与验证

启动 WireGuard 服务端(在 Mac 上)

假设wg0.conf在当前目录下,执行:

sudo wg-quick up ./wg0.conf

执行时可能会提示输入密码,因为PostUp脚本需要sudo权限。

启动客户端(在 iOS 上)

在iOS上连接WireGuard: 打开WireGuard应用,激活刚刚创建的连接。若连接成功,应该可以看到最新的握手信息,以及接收/发送数据量同步增长。
IOS系统配置全局代理抓包指南插图3

验证抓包效果

  1. 在iOS上打开浏览器,访问任意网站,确认可以正常上网(验证NAT功能正常)。
  2. 打开任意 App 并产生网络请求。
  3. 回到 Mac 上的 Burp Suite → Proxy → HTTP history,此时应能看到来自iOS设备的所有HTTP/HTTPS流量。

参考链接

WireGuard + Burp Suite 透明代理实现 iOS 全局抓包


上一篇文章:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注