Перенаправление трафика на определенный адрес и порт с помощью PF в MacOS

Я хочу протестировать мобильное приложение. Для этого я хочу перехватить весь трафик Wi-Fi и перенаправить его в 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? Как я могу это правильно настроить?

Я нарисовал схему моей сети. (На самом деле виртуальная машина работает на моем ноутбуке, но здесь я нарисовал ее отдельно.) Нужен ли где-нибудь NAT? Как я могу это правильно настроить?

Я нарисовал схему моей сети. (На самом деле виртуальная машина работает на моем ноутбуке, но здесь я нарисовал ее отдельно.) Нужен ли где-нибудь NAT? Как я могу это правильно настроить?

Я нарисовал схему моей сети. (На самом деле виртуальная машина работает на моем ноутбуке, но здесь я нарисовал ее отдельно.) my network layout

2
задан 28 July 2016 в 10:28
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, а затем снова пересылает их на телефон.

1
ответ дан 3 December 2019 в 12:39

Думаю, проблема в том, что вы не настроили пересылку между 2 сетями: (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)

1
ответ дан 3 December 2019 в 12:39

Если виртуальная машина - это Linux, вам действительно нужно обрабатывать входящий трафик Nat и изменять его. То есть:

  1. Входящий пакет из 192.168.2.3 принят
  2. Измените адрес назначения пакета на 172.16.122.128 (mangle)
  3. Отправьте пакет на уровень маршрутизации 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
-1
ответ дан 3 December 2019 в 12:39

Теги

Похожие вопросы