Merkwürdiges Verhalten des PacketFilters

Jethro100

New Member
Für die Entwicklung auf unseren Macs benötige ich zwei weite IPs auf dem lo0 Interface. Das MacOS ja FreeBSD benutzt und auch der PacketFilter von BSD abstammt, dachte ich mir, ich schreibe hier und jemand hat eine Idee für mich.

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.3 netmask 0xff000000
inet 127.0.0.2 netmask 0xff000000
nd6 options=201<PERFORMNUD,DAD>


Dann kommt noch dazu, eine Portweiterleitung. Das mache ich dann mit dem Packetfilter. Port 808080 und 4438443

rdr pass on lo0 inet proto tcp from any to 127.0.0.2 port 80 -> 127.0.0.2 port 8080
rdr pass on lo0 inet proto tcp from any to 127.0.0.3 port 80 -> 127.0.0.3 port 8080
rdr pass on lo0 inet proto tcp from any to 127.0.0.2 port 443 -> 127.0.0.2 port 8443
rdr pass on lo0 inet proto tcp from any to 127.0.0.3 port 443 -> 127.0.0.3 port 8443


Bis dahin funktioniert auch alles. Alle Requests werden korrekt weitergeleitet. Nun aber das strange behavior.
Wenn ich direkt auf 8080 oder 8443 zugreife, funktioniert der erste Request. Jeder weitere wird geblockt. Deaktiviere ich den Packetfilter, geht 8080 und 8443 wieder. Aber auf den kann ich nicht verzichten.

curl -s http://127.0.0.2:8080/ (works)
curl -s http://127.0.0.2:8080/ (blocked)

Hat da vielleicht noch jemand eine Idee?

Viele Grüße

Jörg
 
Zuletzt bearbeitet:
Es fehlt der Rest deiner Firewall-Konfiguration.

Rob
Hi Rob,

es gibt nur diese 4 Regeln, da wir nur ein Portforwarding benötigen

in der pf.conf steht nur:

rdr-anchor "dev.forward"
load anchor "dev.forward" from "/etc/pf.anchors/dev.forward"

und in der Datei: /etc/pf.anchors/dev.forward sind die obrigen 4 Regeln drin
 
Mit rdr pass implizierst du pass sobald der redirect gemacht wird. Wenn du manuell auf die Ports zugreifen willst (ohne rdr) musst du noch weitere pass-Regeln hinzufügen:

Code:
pass on lo0 inet proto tcp from any to 127.0.0.2 port 8080
pass on lo0 inet proto tcp from any to 127.0.0.3 port 8080
pass on lo0 inet proto tcp from any to 127.0.0.2 port 8443
pass on lo0 inet proto tcp from any to 127.0.0.3 port 8443

Dies natürlich unter der Voraussetzung, dass das Default ein block all ist.

Rob
 
Hallo Rob,

genau das war das Problem. Default scheint es im PF von macOS auf block. Ist aber leider nirgendwo dokumentiert. Du hast mir damit ein ganze Stück weitergeholfen.

Danke und Gruß

Jörg
 
Zurück
Oben