So kann ich der bereits aktivierten Firewall einen Anker hinzufügen, indem ich so etwas mache:
$ pfctl -a anchor_name -f /etc/anchor_rules.txt
die Datei "anchor_rules.txt" könnte so etwas enthalten:
table <some-hosts> persist file /etc/someHostsToBlock.txt
block quick from any to some-hosts
Jetzt kann ich die Regeln im Anker sehen, indem ich Folgendes mache:
$ pfctl -a anchor_name -sr
No ALTQ support in kernel
ALTQ related functions disabled
block drop quick from any to some-hosts
Wenn ich jedoch den aktuellen aktiven Regelsatz zeige mit:
$ pfctl -sr
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all
Ich sehe den Anker namens „ anker_name “, den ich gerade hinzugefügt habe, nicht . Der Anker ist also nicht wirklich aktiv / geladen ...
Warum nicht und wie wird es geladen?
Nach meinem Verständnis von pf fehlt Ihr Hauptanker. Sie können entweder Apples Anker oder einen benutzerdefinierten Anker verwenden.
Ein benutzerdefinierter Anker wird bevorzugt:
Ändern Sie /private/etc/pf.conf:
Fügen Sie pf.conf zwei Zeilen wie folgt hinzu:
...
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
#
# usr.home anchor point
#
anchor "usr.home/*"
load anchor "usr.home" from "/etc/pf.anchors/usr.home"
Erstellen Sie eine Datei usr.home . Im folgenden Beispiel erstelle ich einen Anker-SSH, der den SSH-Zugriff von einem lokalen Netzwerk auf einige IPs des Hosts blockiert:
sudo nano /etc/pf.anchors/usr.home
und hinzufügen
#
# usr.home ruleset, referred to by the modified /etc/pf.conf file.
# See notes in that file regarding the anchor point in the main ruleset.
#
#
# SSH anchor point.
#
anchor "SSH"
load anchor "SSH" from "/etc/pf.rules/pfssh.rule"
Erstellen Sie nun ein neues Verzeichnis
sudo mkdir /etc/pf.rules
und die referenzierte Datei mit:
sudo nano /etc/pf.rules/pfssh.rule
und folgenden Inhalt:
block in quick inet proto { tcp, udp } from 10.0.0.0/8 to { 10.128.8.145, 10.129.8.145 } port 22
Analysieren und testen Sie Ihre pf.conf und Ihre Ankerdatei, um sicherzustellen, dass sie fehlerfrei sind:
sudo pfctl -vnf /etc/pf.conf
sudo pfctl -vnf /etc/pf.anchors/usr.home
pf neu laden:
sudo pfctl -d
sudo pfctl -e -f /etc/pf.conf
Sie können Ihrem Hauptanker usr.home zusätzliche Anker hinzufügen, wie im Hauptanker com.apple demonstriert.
Sie können auch zusätzliche dynamische Unteranker mit dem folgenden Befehl hinzufügen (hier füge ich eine temporäre Block-HTTP-Regel ähnlich der SSH-Regel hinzu - überprüfen Sie die Erstellung eines vorübergehenden Unterankers: usr.home/HTTP hier!):
echo "block drop in quick proto tcp from 10.0.0.0/8 to any port 80" | sudo pfctl -a usr.home/HTTP -f -
Der temporäre Anker überlebt keinen Neustart!
Ein möglicher Befehl zum sofortigen Entfernen der temporären Regel lautet:
echo "" | sudo pfctl -a usr.home/HTTP -f -
Ein praktisches Skript zum Überprüfen aller geladenen Anker und Regeln ist pfdump:
pfdump.sh:
#!/bin/bash
function pfprint() {
if [ -n "$1" ];then
sudo pfctl -a "$2" -s"$1" 2>/dev/null
else
sudo pfctl -s"$1" 2>/dev/null
fi
}
function print_all() {
local p=$(printf "%-40s" $1)
(
pfprint r "$1" | sed "s,^,r ,"
pfprint n "$1" | sed "s,^,n ,"
pfprint A "$1" | sed "s,^,A ,"
) | sed "s,^,$p,"
for a in `pfprint A "$1"`; do
print_all "$a"
done
}
print_all
Alle genannten Dateien benötigen am Ende eine leere neue Zeile!
Ich habe eine Weile gebraucht, um herauszufinden, wie es zu funktionieren scheint, ohne Systemdateien zu ändern. Eine offizielle Dokumentation zur richtigen Verwendung von pf unter macOS wäre großartig, aber ich konnte keine finden.
Um alle Anker anzuzeigen, müssen Sie zunächst sudo pfctl -vsA
.
Ihre "anchor_rules.txt" scheint falsch zu sein. Ich habe meine unter "/etc/pf.anchors/block" abgelegt. Zumindest unter macOS 12.0.1 habe ich Fehler mit bekommen sudo pfctl -vnf /etc/pf.anchors/block
. Die Arbeitsregeln sehen wie folgt aus. Aber ich bin mir nicht sicher, ob es das tut, was du denkst.
table <some-hosts> persist file "/etc/someHostsToBlock.txt"
block quick from any to <some-hosts>
Um den Anker zu laden und pf zu aktivieren, müssen Sie verwenden sudo pfctl -a 'com.apple/block' -f /etc/pf.anchors/block -e
.
Um pf zu starten und Ihren benutzerdefinierten Anker beim Systemstart zu laden, müssen Sie launchd verwenden.
/Library/LaunchDaemons/block.pfctl.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>block.pfctl</string>
<key>WorkingDirectory</key>
<string>/var/run</string>
<key>Program</key>
<string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>pfctl</string>
<string>-a</string>
<string>com.apple/block</string>
<string>-f</string>
<string>/etc/pf.anchors/block</string>
<string>-e</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
sudo launchctl load /Library/LaunchDaemons/block.pfctl.plist
Motsel
Tom
/private/etc/pf.conf
direkt modifizieren, bleiben diese Änderungen über Betriebssystem-Upgrades hinweg bestehen?macserv
/etc/pf.conf
beibehalten werden. Ich kann jedoch mit Sicherheit sagen , dass Änderungen an nicht erhalten bleiben/etc/pf.anchors/com.apple
. Hüten Sie sich vor Anleitungen oder Skripten, die eine Änderung dieser Datei beinhalten.Tom