Bridge + nftables:如何将传入的 HTTP/HTTPS 流量重定向到本地端口 8080?

Tob*_*ias 5 port redirect bridge nftables mitmproxy

我已经设置了一个网桥,并希望将穿过它的 HTTP/HTTPS 流量重定向到本地端口 (8080),以便我可以使用 mitmproxy 进一步处理它。

到目前为止,我使用的是 ebtables 和 iptables 规则的组合。不幸的是,我不得不知道 eatables 不再支持表 'brute',我应该使用nftables代替。

在此输入图像描述

使用的软件:

  • 卡利Linux 2019.4
  • nftables v0.9.2
  • 米特代理 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
Run Code Online (Sandbox Code Playgroud)

我的界面:

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)
Run Code Online (Sandbox Code Playgroud)

我的路由表:

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
Run Code Online (Sandbox Code Playgroud)

起初,我以为我的目标很容易实现。也就是说,事实证明 nftables 也不支持“brute”(请参阅​​这篇文章)。幸运的是,帖子中也提到了解决方法。

尽管如此,我还是花了相当长的时间才让它继续下去。所以我决定记录我正在做的事情。请随时发表评论或提供更好的解决方案。

谢谢你!

飞鸟

Tob*_*ias 5

这对我有用:

\n\n
root@kali:~# nft add table bridge t1\nroot@kali:~# nft add chain bridge t1 c1 { type filter hook prerouting priority 0\\; }\nroot@kali:~# nft add rule bridge t1 c1 tcp dport 80 meta pkttype set host ether daddr set 00:01:c0:1b:4b:31 counter\nroot@kali:~# nft add rule bridge t1 c1 tcp dport 443 meta pkttype set host ether daddr set 00:01:c0:1b:4b:31 counter\n\nroot@kali:~# nft add table inet t2\nroot@kali:~# nft add chain inet t2 c2 { type nat hook prerouting priority 0\\; }\nroot@kali:~# nft add rule inet t2 c2 tcp dport 80 counter redirect to 8080\nroot@kali:~# nft add rule inet t2 c2 tcp dport 443 counter redirect to 8080\n
Run Code Online (Sandbox Code Playgroud)\n\n

链“c1”中的规则负责将 HTTP(S) 流量的以太网目标地址更改为本地设备的 MAC 地址,而链“c2”中的规则将 tcp 目标端口 80/443 重定向到 8080,其中 mitmproxy正在听。

\n\n

最后,这就是我启动 mitmproxy 的方式:

\n\n
root@kali:~# mitmproxy \xe2\x80\x94-mode transparent \xe2\x80\x94-showhost \xe2\x80\x94-set block_global=false\n
Run Code Online (Sandbox Code Playgroud)\n\n

它并不完美,但至少,它似乎对我有用。

\n