OpenBSD PF Regeln altern lassen und rauswerfen

morph

Well-Known Member
Moin zusammen,

ich brauche mal einen Denkanstoß.

Ich muss immer mal wieder Regeln auf meinem PF einstellen, die nur eine bestimmte Zeit gültig sein sollen. Sagen wir mal 1 Jahr. Wenn das Jahr rum ist, soll die Regel bzw eine IP aus der Regel gelöscht werden.
Das würde ich gern automatisieren. Am Ende soll das in etwa so funktionieren wie eine Timerange auf einer Cisco ASA.

Die erste Idee die ich spontan hatte: ein Table aus einem File laden . In dem File hat jede IP-Adresse ein definiertes Kommentarfeld, in dem die Gültigkeit vermerkt ist. Jetzt würde ich einmal am Tag einen Cron-Job drüberlaufen lassen und prüfen wo ein abgelaufenes Kommentarfeld ist und die dazu gehörende IP aus dem Table löschen.

Gibt es einen eleganteren Weg? Läuft sowas schon irgendwo?

MfG
morph
 
Schau mal in 'pfctl -T expire'*. Bei Laufzeiten von einem Jahr ist aber die Idee mit Comment evtl nicht verkehrt.

*The Book of PF: Seite 70/71
 
hi

alternativ die regeln die altern sollen in eine anchor packen , und dann eine kleines script bauen welches genau
diesen anchor nach einem jahr auskomentiert .

holger
 
Hi,

@double-p : pfctl -T expire habe ich mir angeschaut, aber vielleicht noch nicht richtig verstanden. So wie ich das aus der Manpage rauslese macht das eher Sinn, wenn man z.B. ein Spam-Table live erstellt und regelmäßig die auffälligen IP-Adressen rauskicken will, die eine Zeit lang nicht auffällig geworden sind.

@mark05 : Wenn ich jedem Anchor ein Datum mitgebe an dem es rausfliegen soll, müsste ich mir nochmal überlegen wie ich die Anchors sortiere. Das würden bei 100 Rules a max 365 Anchors 36500 Dateien werden. Ich glaube das wird mir zu unübersichtlich.

Trotzdem vielen Dank für die Hinweise.

morph
 
So, nochmal eine kurze Rückmeldung für die Nachwelt.

Ich habe mir jetzt ein Script gebaut, das im tablesdirectory alle vorhandenen Files nach dem aktuellen Datum durchsucht und beim Auffinden die entsprechende Zeile rauswirft. Das ist alles noch ein bisschen rudimentär, aber es funktioniert. Man muss dann noch das gealterte table wieder in den Speicher laden. Das selbe Prinzip werde ich noch für die pf.conf anwenden, damit ich ganze Rules nach Ablauf der Gültigkeit wieder aus dem System bekomme.

Das Script sieht dann so aus:
#!/bin/ksh
# Parse das Directory in dem alle tables liegen und suche mit grep das aktuelle Datum in jedem Tablefile
# Loesche in jedem Tablefile die Zeile die das aktuelle Datum enthaelt und erstelle eine bereinigte Kopie
# Ueberschreibe das Tablefile mit der bereinigten Kopie
# Gueltigkeit YYYY-MM-DD muss als Kommentar in der gleichen Zeile stehen wie die IP-Adresse

cd tables/
for file in *
do
if [ -f "$file" ];then
cat "$file" | grep -v $(date +%F) > temptable."$file"
mv temptable."$file" "$file"
fi
done

morph
 
hi


ich weis nicht , klingt fer mich alles sehr aufwendig.


wie gesagt ich wuerde es via anchors loesen

erst einen leeren im normalen ruleset setzten

anchor scheduled-rules

dann eine file mit den rules erstellen die zeitlich aktiviert werden sollen

als drittes

via cron
pfctl -ascheduled-rules -f myrule.file


und wenn ich sie wieder loswerden will
pfctl ascheduled-rules -Frules


holger
 
Hallo holger,

ich will aber nicht, dass meine scheduled-rules von 0700-1500 laufen, sondern dass meine Regel am Tag der Erstellung eine variable Gültigkeit von maximal einem Jahr hat. Ich glaube da reden wir aneinander vorbei. Als weiteres Gimmick erreiche ich, dass ich einzelne IP-Adressen in meiner Rule individuell nach Gültigkeitsdatum rauswerfen lasse ohne dass ich selbst auch nur einen einzigen Handschlag mache. Die Regel wird mit Ablaufdatum versehen. Die IP-Adressen im table werden mit individuellen Ablaufdaten versehen. Dann lasse ich das Script über beides drüberlaufen und erreiche, dass alle heute abgelaufenen Regeln verschwinden ODER alle IP-Adressen aus dem table verschwinden die heute abgelaufen sind. Find ich eigentlich ganz cool.

morph
 
Zurück
Oben