我已经建立了一座桥,并希望将穿过它的 HTTP/HTTPS 流量重定向到本地端口(8080),以便我可以使用 mitmproxy 进一步处理它。
到目前为止,我一直在使用 ebtables 和 iptables 规则的组合。不幸的是,我不得不了解到 eatables 不再支持表“broute”,我应该使用nftables反而。
所用软件:
- KALI Linux 2019.4
- nftables v0.9.2
- mitmproxy v4.0.4
我如何创建这座桥:
root@kali:~# ip link add name br0 type bridge
root@kali:~# ip link set dev br0 up
root@kali:~# ip link set dev eth0 master br0
root@kali:~# ip link set dev eth2 master br0
我的接口:
root@kali:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.178.67 netmask 255.255.255.0 broadcast 192.168.178.255
ether 00:01:c0:1b:4b:31 txqueuelen 1000 (Ethernet)
root@kali:~# ifconfig eth2
eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:01:c0:1b:4b:b2 txqueuelen 1000 (Ethernet)
root@kali:~# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::e8c3:adff:fe19:f804 prefixlen 64 scopeid 0x20<link>
inet6 2003:e5:3f18:d100:201:c0ff:fe1b:4b31 prefixlen 64 scopeid 0x0<global>
ether 00:01:c0:1b:4b:31 txqueuelen 1000 (Ethernet)
我的路由表:
root@kali:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default fritz.box 0.0.0.0 UG 0 0 0 br0
192.168.178.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
起初,我以为我的目标很容易实现。但事实证明,nftables 也不支持 'broute'(请参阅此邮政)。幸运的是,帖子中也提到了一种解决方法。
尽管如此,我还是花了相当长的时间才开始。所以我决定记录我所做的事情。请随时发表评论或提供更好的解决方案。
谢谢你!
托比
答案1
以下是对我有用的方法:
root@kali:~# nft add table bridge t1
root@kali:~# nft add chain bridge t1 c1 { type filter hook prerouting priority 0\; }
root@kali:~# nft add rule bridge t1 c1 tcp dport 80 meta pkttype set host ether daddr set 00:01:c0:1b:4b:31 counter
root@kali:~# nft add rule bridge t1 c1 tcp dport 443 meta pkttype set host ether daddr set 00:01:c0:1b:4b:31 counter
root@kali:~# nft add table inet t2
root@kali:~# nft add chain inet t2 c2 { type nat hook prerouting priority 0\; }
root@kali:~# nft add rule inet t2 c2 tcp dport 80 counter redirect to 8080
root@kali:~# nft add rule inet t2 c2 tcp dport 443 counter redirect to 8080
链“c1”中的规则负责将 HTTP(S) 流量的以太网目标地址更改为本地设备的 MAC 地址,而链“c2”中的规则则将 mitmproxy 正在监听的 tcp 目标端口 80/443 重定向到 8080。
最后,这是我启动 mitmproxy 的方式:
root@kali:~# mitmproxy —-mode transparent —-showhost —-set block_global=false
它并不完美,但至少对我来说它是有用的。