Leiten Sie den Datenverkehr mithilfe von PF zusammen mit Internet Sharing um

Die Kurzversion:

Wie leite ich den gesamten Datenverkehr von en2-Port 80/443 auf 127.0.0.1:8080 um, wenn ich die Internetfreigabe in OS X Mountain Lion (10.8) aktiviert habe?

Etwas Hintergrund:

Ich schreibe eine Masterarbeit, in der ich die Kommunikationssicherheit für verschiedene Smartphone-Apps evaluiere. Ich habe mich entschieden, mein neues MacBook Air als Router zu verwenden.

Ich habe meinen Air über USB-Ethernet mit dem Internet verbunden und die Internetfreigabe für mein WLAN eingerichtet. Das funktioniert gut. Ich kann andere Geräte per WLAN mit meinem Air verbinden und auf das Internet zugreifen. Großartig!

Jetzt möchte ich diesen Datenverkehr abfangen und spontan ändern. Ich dachte, ich brauche dafür einen Proxy, aber ich brauche einen transparenten, bei dem ich keine Konfiguration auf dem Gerät vornehmen muss. Ich habe festgestellt, dass mitmproxy genau diese Funktionen bietet. Ich habe es also auf 127.0.0.1:8080 ausgeführt und bin bereit, den Datenverkehr abzufangen.

Leider stecke ich fest und versuche, meinen vom WLAN (en2) eingehenden Datenverkehr auf Port 80 und 443 auf 127.0.0.1:8080 umzuleiten. Die mitmproxy-Dokumentation schlägt eine Konfiguration für pfctl vor, aber sie funktioniert nicht. Mir ist aufgefallen, dass Apple eine Konfiguration für die Internetfreigabe bereitgestellt hat, die NAT aktiviert. Wenn ich also ihre Konfiguration nicht verwende, funktioniert die Internetfreigabe nicht mehr. Und wenn ich versuche, die rdr-Zeilen zu ihrer Konfiguration hinzuzufügen, wird dies nicht wirksam (versuchte es an mehreren Stellen in der Datei /etc/pf.conf). Mein Datenverkehr wird einfach an das Internet weitergeleitet, wobei der mitmproxy umgangen wird.

Antworten (2)

Ich habe die Antwort gefunden.

Ich habe meine Regeln als Teil des Ankers geladen, com.apple/100.InternetSharing/natpmpder für die Internetfreigabe verwendet wird.

Die Datei mitm.pf.confenthält die Regeln:

rdr on bridge0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr on bridge0 proto tcp from any to any port 443 -> 127.0.0.1 port 8080`

Laden Sie es mit dem Internet Sharing-Anker:

sudo pfctl -a com.apple/100.InternetSharing/natpmp -f mitm.pf.conf

In einer ähnlichen Situation habe ich die Firewall verwendet, um den Datenverkehr von einer Netzwerkkarte zum Proxy umzuleiten. Du könntest so etwas verwenden:

$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 80 in via en1
$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 443 in via en1

Wenn es für mich ok funktioniert hat.

Sie können auch das kostenlose WaterRoof- Programm als GUI verwenden, um die Firewall zu konfigurieren. Es fügt dem ipsw-Befehl nichts hinzu, es erleichtert Ihnen lediglich den Zugriff auf alle Optionen.

Diese Seite hat mir beim Einrichten meiner Konfiguration sehr geholfen:

http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/

Ich habe das versucht, aber aus irgendeinem Grund hat es nicht funktioniert. Es brach die Internetfreigabe vollständig. Außerdem gehe ich davon aus, dass Apple sich von ipfw von FreeBSD zugunsten von pf von OpenBSD wegbewegt.
Diese Antwort funktioniert nur für alte Macs. Apple hat IPFW eingestellt.