Ich versuche, den ausgehenden Datenverkehr zum Zielport 80 erfolglos zum lokalen Proxy-Port 127.0.0.1:8080 umzuleiten
/etc/pf.anchors/com.forwarding
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
/etc/pf.conf
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "myproxy"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "myproxy" from "/etc/pf.anchors/com.forwarding"
Dann:
sudo sysctl net.inet.ip.forwarding=1
sudo pfctl -ef /etc/pf.conf
Der lokale Verkehr 127.0.0.1:80 wird auf 127.0.0.1:8080 umgeleitet, aber nicht der externe, der in Richtung Internet.
Sie können nur eingehenden Datenverkehr umleiten. Jeglicher ausgehender Datenverkehr zu Port 80 ist von Ihrer rdr-Regel nicht betroffen.
Um ausgehenden Datenverkehr an Port 80 umzuleiten, müssen Sie ihn zuerst an lo0 umleiten und dann an den Proxy-Port umleiten:
Die Reihenfolge in der Konfigurationsdatei ist zwangsläufig rdr eingehende Pakete , dann Pakete filtern (wie pass), aber chronologisch trifft zuerst die 2. Regel (auf en0), die dann die erste Regel (auf lo0) aktiviert.
# Step "2". redirect those same packets that were routed to lo0 below
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
# Step "1". Route new IPv4 TCP connections leaving en0 to lo0
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state
in pf.conf würde das so aussehen:
...
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state
Im obigen Beispiel gehe ich davon aus, dass en0 Ihre einzige ausgehende en- Schnittstelle ist.
Entladen Sie Ihre aktuelle pf.conf und stoppen Sie pf: sudo pfctl -d
. Fügen Sie dann die beiden zusätzlichen Zeilen oben hinzu. Überprüfen Sie nach dem Ändern von pf.conf die Syntax der Datei, mit sudo pfctl -vnf /etc/pf.conf
der die folgende Ausgabe resultieren sollte:
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.
scrub-anchor "/*" all fragment reassemble
nat-anchor "/*" all
rdr-anchor "/*" all
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
anchor "/*" all
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 flags S/SA keep state
dummynet-anchor "/*" all
und bei Erfolg mit laden sudo pfctl -e -f /etc/pf.conf
.
Eine ordnungsgemäße System- und Proxykonfiguration (und gut funktionierende Apps) erfordern keine solchen PF-Regeln!
Fahrrad
Aminowitsch
Fahrrad