Настройка MitM уровня 2:
+------+
| ХОЗЯИН |
+--------+ |------| +--------+
| КЛИЕНТ | <--> | МИТМ | <--> | СЕРВЕР |
+--------+ +------+ +--------+
TLDR:
Rasperry Pi eth0
подключен к интернету и wlan0
действует как точка доступа, используя hostapd. Мост обоих интерфейсов работает нормально. Перенаправление трафика HTTP(S) на мосту на mitmproxy Python не работает. Следующие команды дают клиентам, подключенным к Интернету точки доступа, но трафик не проходит через mitmproxy Python, прослушивающий 8080
:
brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
эхо "интерфейс br0" >> /etc/dhcpcd.conf
эхо "мост=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 Публикация -o eth0 -j МАСКАРАД
Что я уже пробовал:
- Вернемся на два шага назад и настроим NAT уровня 3 MitM.
- Делаем шаг вперед и настраиваем простой сетевой мост
- Пытаюсь снова настроить Layer 3 MitM и гуглю проблему
Настройка MitM уровня 3:
+--------+ +------+ +--------+
| КЛИЕНТ | <--> | МИТМ | <--> | СЕРВЕР |
+--------+ +------+ +--------+
Настройка уровня 3 не работала со следующими правилами 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
[Справка]
[Справка]
После добавления следующих дополнительных правил все заработало нормально, и весь трафик HTTP(S) клиентов, подключенных к точке доступа Pi, прошел через mitmproxy Python:
iptables -A FORWARD -i eth0 -o wlan0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A FORWARD -i wlan0 -o eth0 -j ПРИНЯТЬ
У кого-нибудь есть объяснение этому? Я не понимаю, почему, потому что для NAT-роутинга достаточно этого единственного правила:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Настройка моста уровня 2
Затем я настроил простой мост без намерения перехватывать какой-либо HTTP(S)-трафик:
brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
эхо "интерфейс br0" >> /etc/dhcpcd.conf
эхо "мост=br0" >> /etc/hostapd/hostapd.conf
systemctl демон-перезагрузка
Эта установка работала нормально.
Настройка MitM уровня 2:
brctl addbr br0
brctl addif br0 eth0
ip link set dev br0 up
echo "denyinterfaces wlan0 eth0" >> /etc/dhcpcd.conf
эхо "интерфейс br0" >> /etc/dhcpcd.conf
эхо "мост=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 Публикация -o eth0 -j МАСКАРАД
[Справка]
Клиенты точки доступа Pi имеют доступ в Интернет, но трафик не проходит через mitmproxy Python.
С помощью Google я узнал, что iptables по умолчанию не работает для моста уровня 2, и мне нужно включить это:
modprobe br_netfilter
эхо 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
[Справка]
Также некоторые дополнительные настройки не решили проблему:
эхо 0 > /proc/sys/net/ipv4/conf/default/rp_filter
эхо 0 > /proc/sys/net/ipv4/conf/all/rp_filter
[Справка]
Ситуация ухудшилась, поскольку ни один клиент, подключенный к точке доступа Pi, не имеет доступа в Интернет.
Я не понимаю, в чем проблема. Любые идеи?
Может быть, это поможет:
$ кошка /etc/os-релиз
PRETTY_NAME="Raspbian GNU/Linux 10 (бастер)"