Nat

在 MacOS 上使用 PF 將流量重定向到特定地址和埠

  • July 28, 2016

我想滲透測試一個移動應用程序。為此,我想攔截所有 WiFi 流量並將其轉發給在 VM 中執行的 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

數據包最終會進入 VM(使用 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,以便 VM 知道將數據包發送回我的 MacBook,然後再將它們轉發到手機。

我想,問題是你沒有配置兩個網路之間的轉發,(1)VM網路(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 連接到 VM)

最後,另一種選擇(不將您的 Mac 配置為路由器)是使用您的虛擬化軟體設置 NAT 並將埠轉發到您的 VM。如果您使用 VMware Fusion,請查看此處此處

然後,不要將流量轉發到 VM 上的埠,而是將其轉發到 vmnet8 介面上的轉發埠:

rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.1 port 8080

(vmnet8 上的 8080 埠應通過 VMware Fusion 轉發到您的 VM 上的 8080 埠)

引用自:https://serverfault.com/questions/791181