默认情况下,mitmproxy 将使用自己的本地 IP 地址进行服务器端连接。我想要的是 mitmproxy 使用客户端的 IP 地址进行服务器端连接。
提供以下配置以使其工作:
CLIENT_NET=192.168.1.0/24
TABLE_ID=100
MARK=1
echo "$TABLE_ID mitmproxy" >> /etc/iproute2/rt_tables
iptables -t mangle -A PREROUTING -d $CLIENT_NET -j MARK --set-mark $MARK
iptables -t nat \
-A PREROUTING -p tcp -s $CLIENT_NET \
--match multiport --dports 80,443 -j \
REDIRECT --to-port 8080
ip rule add fwmark $MARK lookup $TABLE_ID
ip route add local $CLIENT_NET dev lo table $TABLE_ID
Mitmproxy 正在侦听192.168.178.40
端口上的路由器 ( ):8080
但是,我的设置包含一个带有 2 个 NIC 的自定义 Debian 路由器。
- 一个面向互联网的
wlp2s0
(也用于通过 SSH 连接),地址为:192.168.178.40
- 一个 NIC 设置为
enp4s0
目标客户端的默认网关:10.0.0.1
客户端使用地址连接到默认网关10.0.0.12
默认情况下,我使用以下 IP 表规则将客户端流量重定向到端口 8080:
sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 443 -j REDIRECT --to-port 8008
虽然这可以按预期工作,但我希望能够欺骗客户端源地址,以便捕获的 HTTP(S) 请求与来自客户端的 TCP 数据包和其他流量相匹配。
这是一张可视化我的设置的图片,因为我在解释方面非常糟糕: