Перенаправление трафика на определенный адрес и порт с помощью PF на MacOS
Я хочу протестировать мобильное приложение. Для этого я хочу перехватить весь трафик WiFi и перенаправить его на Burp, который работает на виртуальной машине.
Я включил "Общий Интернет" на своем Macbook, так что теперь мой телефон подключается к ноутбуку через WiFi. Затем я хочу перенаправить весь трафик на прокси Burp, который находится по адресу 172.16.122.128:8080.
Перенаправление на локальный хост работает:
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? Как я могу настроить это правильно?
Я нарисовал картину моего сетевого макета. (На самом деле виртуальная машина работает на моем ноутбуке, но я выделил ее отдельно.)
3 ответа
Следующие правила 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, который затем перенаправляет их на телефон снова.
Я полагаю, проблема в том, что вы не настроили пересылку между 2 сетями, (1) сетью VM (172.16.122.0/24) и (2) вашей локальной сетью (192.168.2.0/24). Чтобы настроить переадресацию на вашем Mac, вам, вероятно, нужно сделать следующее (извините, у меня нет Mac, поэтому я не могу попробовать):
1) Как написано на /questions/202040/podderzhivaet-li-snow-leopard-serverhtaccess/202054#202054:
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, вам нужно натировать входящий трафик и манипулировать им. То есть:
- Входящий пакет от 192.168.2.3 принят
- Измените адрес назначения пакета на 172.16.122.128 (mangle)
- Отправьте пакет на уровень маршрутизации Linux
Команды брандмауэра
# 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