Я хочу протестировать мобильное приложение. Для этого я хочу перехватить весь трафик WiFi и перенаправить его в Burp, который работает на виртуальной машине.
Я включил «Общий доступ в Интернет» на своем Macbook, и теперь мой телефон подключается к ноутбуку через Wi-Fi. Затем я хочу перенаправить весь трафик на прокси Burp, который находится по адресу 172.16.122.128:8080.
Перенаправление на localhost работает:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 8080
Я помещаю это правило в файл и загружаю его с помощью pfctl -f pf.rules
. После этого я указал порт 8080, используя nc -l -p 8080
и когда я где-то просматриваю свой телефон, он действительно подключается к localhost.
Однако, когда я пытаюсь перенаправить на 172.16.122.128, это не работает:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.128 port 8080
Пакеты попадают в виртуальную машину (проверено с помощью Wireshark), но соединение не устанавливается. Это может быть связано с тем, что они происходят из 192.168.2.3. Нужен ли мне где-нибудь NAT? Как мне это правильно настроить?
Я нарисовал схему своей сети. (На самом деле виртуальная машина работает на моем ноутбуке, но здесь я нарисовал ее отдельно.)
Действуют следующие правила PF:
nat on vmnet8 from bridge100:network to any -> (vmnet8)
rdr pass on bridge100 inet proto tcp from any to any -> 172.16.122.128 port 8080
Это перенаправляет все запросы на 172.16.122.128, выполняя NAT между ними.
NAT необходим для трансляции адресов двух сетей, т.е. 192.168.2.0/24 и 172.16.122.0/24. Перенаправляющая часть уже работала (как описано в моем вопросе), но пакеты были перенаправлены с неправильным адресом источника. NAT изменяет этот исходный адрес на 172.16.122.1, чтобы виртуальная машина знала, что нужно отправлять пакеты обратно на мой MacBook, а затем снова пересылает их на телефон.
Я думаю, проблема в том, что вы не настроили пересылку между двумя сетями: (1) сетью виртуальных машин (172.16.122.0/24) и (2) вашей локальной сетью (192.168.2.0/24). Чтобы настроить переадресацию на вашем Mac, вам, вероятно, потребуется сделать следующее (извините, у меня нет Mac, поэтому я не могу попробовать):
1) Как написано на https://apple.stackexchange.com/a/192183:
sudo sysctl -w net.inet.ip.forwarding=1
sudo sysctl -w net.inet.ip.fw.enable=1
2) при необходимости добавьте статические маршруты к обеим сетям (я думаю, он у вас уже есть, так как вы можете подключиться с помощью nc с вашего Mac к виртуальной машине)
Наконец, еще один вариант (без настройки Mac в качестве маршрутизатора) - настроить NAT с помощью программного обеспечения виртуализации и перенаправить порт на вашу виртуальную машину. Если вы используете VMware Fusion, пожалуйста, посмотрите Вот или Вот.
Затем вместо перенаправления трафика на порт на вашей виртуальной машине перенаправьте его на перенаправленный порт интерфейса vmnet8:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.1 port 8080
(порт 8080 на vmnet8 должен быть перенаправлен на порт 8080 на вашей виртуальной машине с помощью VMware Fusion)
Если виртуальная машина - это Linux, вам необходимо обрабатывать входящий трафик Nat и управлять им. То есть:
Команды межсетевого экрана
# Enable forward
sudo sysctl -w net.ipv4.ip_forward=1
# FLUSH ALL RULES
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Forward
sudo iptables -A FORWARD -i eth0 -j ACCEPT
# Mangling rule. I think you can add the port right after the dest ip
sudo iptables -t nat -A POSTROUTING -s 192.168.2.3/32 -j SNAT --to 172.16.122.128