Thiết lập MitM lớp 2:

                +------+
                | HOST |
+--------+      |------|      +--------+
| CLIENT | <--> | MITM | <--> | SERVER |
+--------+      +------+      +--------+

TLDR:

Rasperry Pi's eth0được kết nối với internet và wlan0hoạt động như một điểm truy cập bằng hostapd. Kết nối cả hai giao diện hoạt động tốt. Việc chuyển hướng lưu lượng HTTP (S) trên cầu nối sang Python mitmproxy không hoạt động. Các lệnh sau cung cấp cho các máy khách được kết nối với internet điểm truy cập, nhưng không có lưu lượng truy cập nào đi qua trình lắng nghe mitmproxy của Python 8080:

brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up

echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interface br0" >> /etc/dhcpcd.conf
echo "bridge=br0" >> /etc/hostapd/hostapd.conf

iptables -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -A POSTROUTING -o eth0 -j MASQUERADE

Những gì tôi đã thử:

  1. Quay lại hai bước và thiết lập NAT MitM lớp 3
  2. Tiến lên một bước và thiết lập một cầu nối mạng đơn giản
  3. Đang cố gắng thiết lập lại MitM lớp 3 và xử lý sự cố

Thiết lập MitM lớp 3:

+--------+      +------+      +--------+
| CLIENT | <--> | MITM | <--> | SERVER |
+--------+      +------+      +--------+

Thiết lập Lớp 3 không hoạt động với các quy tắc có thể thay đổi sau:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080

[Thẩm quyền giải quyết]

[Thẩm quyền giải quyết]

Sau khi thêm các quy tắc bổ sung sau, nó hoạt động tốt và toàn bộ lưu lượng HTTP (S) của các máy khách được kết nối với điểm truy cập của Pi đã chuyển qua mitmproxy Python:

iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Có ai đó giải thích cho điều đó không? Tôi không hiểu tại sao, bởi vì đối với định tuyến NAT, chỉ cần có một quy tắc duy nhất này là đủ:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Thiết lập cầu lớp 2

Tiếp theo, tôi đã thiết lập một cầu nối đơn giản mà không có ý định chặn bất kỳ lưu lượng HTTP (S) nào:

brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up

echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interface br0" >> /etc/dhcpcd.conf
echo "bridge=br0" >> /etc/hostapd/hostapd.conf

systemctl daemon-reload

Thiết lập này hoạt động tốt.

Thiết lập MitM lớp 2:

brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up

echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interface br0" >> /etc/dhcpcd.conf
echo "bridge=br0" >> /etc/hostapd/hostapd.conf

iptables -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -A POSTROUTING -o eth0 -j MASQUERADE

[Thẩm quyền giải quyết]

Các khách hàng của điểm truy cập Pi có quyền truy cập internet, nhưng lưu lượng truy cập không đi qua mitmproxy Python.

Với sự trợ giúp của Google, tôi đã phát hiện ra rằng iptables theo mặc định không hoạt động cho cầu nối lớp 2 và tôi cần kích hoạt điều đó:

modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

[Thẩm quyền giải quyết]

Ngoài ra, một số chỉnh sửa bổ sung không giải quyết được vấn đề:

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

[Thẩm quyền giải quyết]

Mọi thứ trở nên tồi tệ hơn khi không có khách hàng nào kết nối với điểm truy cập của Pi có thể truy cập internet. Tôi không hiểu vấn đề là gì. Có ý kiến ​​gì không?

Có thể điều đó sẽ giúp:

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
no answer