IOS系统配置全局代理抓包指南
一、背景
在对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 客户端
- 从美区App Store下载并安装官方
WireGuard
应用(注意国区App Store无此应用)。 - 在应用内,选择“从文件或压缩包创建”或“从二维码创建”。
- 创建一个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
- 将此文件导入到iOS的WireGuard应用中,可将
client.conf
文件中的内容输入草料二维码生成,生成对应二维码,通过扫描二维码直接导入。
第 3 步:配置 Burp Suite
开启透明代理模式:
- 打开 Burp Suite ,进入 Proxy → Options
- 在
Proxy Listeners
中,选中正在使用的代理(如在第二步服务器配置文件中写入的 127.0.0.1:8080),点击 Edit - 切换到 Request Handling 标签页
- 勾选 Support invisible proxying。此选项必须开启。
安装并信任 CA 证书
- 确保 iOS 已能通过 WireGuard 上网。
- 在 iOS 浏览器访问:
http://10.0.0.1:8080
(WireGuard服务端的VPN IP)。
- 下载并安装 PortSwigger CA 证书。
- 进入iOS的 设置 → 通用 → 关于 → 证书信任设置,完全信任刚刚安装的 PortSwigger CA 证书。
第 4 步:启动与验证
启动 WireGuard 服务端(在 Mac 上)
假设wg0.conf在当前目录下,执行:
sudo wg-quick up ./wg0.conf
执行时可能会提示输入密码,因为PostUp脚本需要sudo权限。
启动客户端(在 iOS 上)
在iOS上连接WireGuard: 打开WireGuard应用,激活刚刚创建的连接。若连接成功,应该可以看到最新的握手信息,以及接收/发送数据量同步增长。
验证抓包效果
- 在iOS上打开浏览器,访问任意网站,确认可以正常上网(验证NAT功能正常)。
- 打开任意 App 并产生网络请求。
- 回到 Mac 上的 Burp Suite → Proxy → HTTP history,此时应能看到来自iOS设备的所有HTTP/HTTPS流量。
参考链接
上一篇文章: 基于CMExam数据集的ChatGLM4模型微调方法
已是最新文章