Ich habe eine App, die (während sie läuft und nur während sie läuft) Änderungen am Paketfilter ( pf
) vornehmen muss, damit sie bestimmten Datenverkehr blockiert oder zulässt. Diese Regeln sollten zusätzlich zu den eigenen Regeln des Benutzers enthalten sein /etc/pf.conf
- aber ich möchte nicht direkt bearbeiten, /etc/pf.conf
da dies extrem aufdringlich ist.
Ich kann dies trivial unter Linux iptables
und sogar unter Windows tun wfp
, ohne Dateien auf der Festplatte zu ändern. Kann ich dasselbe in OSX mit erreichen pf
?
Die Lösung muss nur in yosemite
(10.10) und höher funktionieren
Ich habe das selbst gelöst.
cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef -
Wo my_rules.conf
unsere eigenen Regeln enthalten sind, werden diese mit den Regeln verkettet pf.conf
, haben jedoch Vorrang, da sie pf.conf
im cat
Befehl angehängt werden.
pfctl -Ef -
Beachten Sie auch, dass wir die -
Kräfte pfctl
zum Lesen von stdin verwenden
Wir können diese Lösung noch einen Schritt weiterführen und unsere eigenen Regeln von stdin laden, indem wir Folgendes verwenden:
echo "block out all" | cat /etc/pf.conf - | sudo /sbin/pfctl -Ef -
-E
? Das man pfctl
Dokument ist nicht sehr klar: Es sagt, dass es die Filterung wie aktiviert, -e
aber es sagt auch: "(...) und inkrementiere den pf enable reference count." und ich habe nicht bekommen, was das genau ist.Dies hängt von der Art der Anwendung und der Programmiersprache ab. Der wahre programmgesteuerte Weg wäre das Öffnen /dev/pf
und Verwenden von ioctl
. Ich habe das nicht selbst gemacht, aber die folgenden Links sollten hilfreich sein.
Wenn der Aufruf pfctl
aus der App ausreicht, würde ich immer noch Anker verwenden.
Ohne Datei:echo "block out all" | sudo /sbin/pfctl -a 'com.apple/app_name' -f -
Mit einer Datei:sudo /sbin/pfctl -a 'com.apple/app_name' -f /path/to/file
Zohar81
Pferdetyp
cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef -
Das-
Argument topfctl
bewirkt, dass es von stdin liest, also verketten wir einfach pf.conf mit unseren eigenen Regeln, damit es von beiden gelesen wird, aber um sicherzustellen, dass unsere Regeln Vorrang haben (deshalb unsere Regeln werden zuletzt verkettet)Pferdetyp
Zohar81
pfctl
mit unterschiedlicher Konfiguration aufruft, die Ihre außer Kraft setzt? Ich kann die derzeit geltenden Regeln regelmäßig überprüfen, aber ich wünschte, ich könnte sofort eine Benachrichtigung erhalten, wenn sie sich ändert ... eine Idee, wie?