web-dev-qa-db-ja.com

MacOSでPFを使用してトラフィックを特定のアドレスとポートにリダイレクトする

モバイルアプリケーションをテストします。そのためには、すべてのWiFiトラフィックをインターセプトし、それをVMで実行されるBurpに転送します。

Macbookで「インターネット共有」を有効にしたので、私の電話はWiFiを使用してラップトップに接続します。次に、すべてのトラフィックを172.16.122.128:8080にあるBurpプロキシに転送します。

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でロードします。その後、nc -l -p 8080を使用してポート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が必要ですか?これを正しく構成するにはどうすればよいですか?

ネットワークレイアウトの絵を描きました。 (VMは実際には私のラップトップで実行されますが、ここでは個別に描画しました。) my network layout

3
Sjoerd

次の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は、2つのネットワーク、つまり192.168.2.0/24と172.16.122.0/24のアドレス間で変換するために必要です。転送部分はすでに機能していますが(私の質問で説明したとおり)、パケットは間違った送信元アドレスで転送されました。 NATは、その送信元アドレスを172.16.122.1に変更します。これにより、VMは、パケットをMacBookに送り返し、それを再びパケットを電話に転送します。

1
Sjoerd

おそらく、問題は2つのネットワーク間の転送を構成していないことです、(1)VM network(172.16.122.0/24)および(2)LAN(192.168.2.0/24) 。Macで転送を設定するには、おそらく次のことを行う必要があります(申し訳ありませんが、Macを持っていないため、試すことができません)。

1) https://Apple.stackexchange.com/a/19218 に記載されているとおり:

Sudo sysctl -w net.inet.ip.forwarding=1
Sudo sysctl -w net.inet.ip.fw.enable=1

2)必要に応じて両方のネットワークに静的ルートを追加します(MacからVMにncで接続できるので、おそらくすでに使用しています)

最後に、別のオプション(Macをルーターとして構成しない場合)は、仮想化ソフトウェアを使用してNAT=をセットアップし、ポートをVMに転送することです。VMwareFusionを使用している場合は、ご覧ください- ここ または ここ

次に、トラフィックをVMのポートに転送する代わりに、vmnet8インターフェイスの転送されたポートに転送します。

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

(vmnet8のポート8080は、VM VMware FusionによってVM $ ===)のポート8080に転送される必要があります)

1
Andrey Sapegin