完全透明的代理

信息安全 linux 中间人 代理人 路由器 iptables
2021-08-28 17:04:51

默认情况下,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 数据包和其他流量相匹配。

这是一张可视化我的设置的图片,因为我在解释方面非常糟糕:

透明代理设置。

2个回答

默认情况下,mitmproxy 将使用自己的本地 IP 地址进行服务器端连接。我想要的是 mitmproxy 使用客户端的 IP 地址进行服务器端连接。

在大多数设置中(同一局域网上的被攻击主机/攻击者主机,都位于 Internet 路由器后面,Internet 上的目标站点),您的问题不是一个问题,主要是因为 Internet 主机将始终看到您的 Internet 路由器公共地址。

唯一存在问题的设置是目标站点是否位于同一 LAN 上。在这种情况下,正如@antonio-zunic 所说,实现这一目标的唯一方法是进行 ARP 欺骗。

您不能使用客户端的 ip...代理是客户端向其索取数据的中间设备/软件。客户端要求代理联系服务器,代理联系服务器。如果您想绕过代理的客户端配置,您必须应用 arpspoof 命令(arpspoof -i -t -r,使用这些您不必通过路由器将流量路由到代理。