Configurarea nivelului 2 MitM:
+------+
| GAZDA |
+--------+ |------| +--------+
| CLIENT | <--> | MITM | <--> | SERVER |
+--------+ +------+ +--------+
TLDR:
Un Rasperry Pi eth0
este conectat la internet și wlan0
acționează ca un punct de acces folosind hostapd. Conectarea ambelor interfețe funcționează bine. Redirecționarea traficului HTTP(S) de pe punte către mitmproxy Python nu funcționează. Următoarele comenzi oferă clienților conectați la punctul de acces internet, dar niciun trafic nu trece prin Python mitmproxy care ascultă 8080
:
brctl addbr br0
brctl addif br0 eth0
link ip set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interfață 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
Ce am incercat deja:
- Mergând doi pași înapoi și configurarea unui strat 3 NAT MitM
- Mergând cu un pas înainte și configurarea unui pod simplu de rețea
- Încercați să configurați din nou Layer 3 MitM și căutați problema pe Google
Configurarea nivelului 3 MitM:
+--------+ +------+ +--------+
| CLIENT | <--> | MITM | <--> | SERVER |
+--------+ +------+ +--------+
Configurarea Layer 3 nu a funcționat cu următoarele reguli iptable:
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
[Referinţă]
[Referinţă]
După adăugarea următoarelor reguli suplimentare, a funcționat bine și întregul trafic HTTP(S) al clienților conectați la punctul de acces al Pi a trecut prin mitmproxy Python:
iptables -A FORWARD -i eth0 -o wlan0 -m stare --state RELATED,STABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Are cineva o explicație pentru asta? Nu înțeleg de ce, deoarece pentru o rutare NAT este suficient să existe această singură regulă:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Configurarea podului Layer 2
În continuare, am configurat o punte simplă fără intenția de a intercepta orice trafic HTTP(S):
brctl addbr br0
brctl addif br0 eth0
link ip set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interfață br0" >> /etc/dhcpcd.conf
echo "bridge=br0" >> /etc/hostapd/hostapd.conf
systemctl daemon-reload
Această configurație a funcționat bine.
Configurarea nivelului 2 MitM:
brctl addbr br0
brctl addif br0 eth0
link ip set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
echo "interfață 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
[Referinţă]
Clienții punctului de acces al lui Pi au acces la internet, dar traficul nu trece prin mitmproxy Python.
Cu ajutorul Google, am aflat că iptables în mod implicit nu funcționează pentru un bridge layer 2 și trebuie să îl activez:
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
[Referinţă]
De asemenea, unele modificări suplimentare nu au rezolvat problema:
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
[Referinţă]
Lucrurile s-au înrăutățit, deoarece niciun client conectat la punctul de acces al lui Pi nu are acces la internet.
Nu văd care este problema. Vreo idee?
Poate asta ajuta:
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"