Bridge + nftables: Как перенаправить входящий HTTP / HTTPS трафик на локальный порт 8080?

Я установил мост и хотел бы перенаправить HTTP / HTTPS-трафик, проходящий через него, на локальный порт (8080), чтобы я мог в дальнейшем обрабатывать его с помощью mitmproxy.

До сих пор я использовал комбинация ebtables и iptables правила. К сожалению, мне пришлось узнать, что eatables больше не поддерживает таблицу 'broute' и что я должен использовать вместо нее nftables .

enter image description here

Используемое программное обеспечение:

  • 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
задан 28 December 2019 в 18:38
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" ответственны за изменение адреса назначения Ethernet HTTP (S) трафик к MAC-адресу локального устройства, в то время как правила в цепочке "c2" перенаправляют tcp целевые порты 80/443 к 8 080, где mitmproxy слушает.

Наконец, это - то, как я запустил mitmproxy:

root@kali:~# mitmproxy —-mode transparent —-showhost —-set block_global=false

Это не прекрасно, но по крайней мере, это, кажется, работает на меня.

0
ответ дан 29 December 2019 в 22:49

Теги

Похожие вопросы