,Scrubbing' ist die Normalisierung von Paketen, sodass keine
Zweideutigkeiten bei der Interpretation bei dem ultimativen Ziel
der Pakete entstehen. Die scrub-Direktive setzt fragmentierte Pakete
ebenfalls wieder zusammen, schützt einige Betriebssysteme vor einigen
Formen von Attacken und lässt TCP-Pakete fallen, die eine ungültige
Flag-Kombination haben. Eine
einfache Form einer scrub-Direktive:
scrub in all
Dies wird ,scrub' auf alle eingehenden Pakete auf allen Interfaces
anwenden.
Ein Grund, auf einem Interface ,scrub' nicht auszuführen, ist, wenn
man NFS durch PF leitet. Einige Nicht-OpenBSD-Plattformen senden
(und erwarten) seltsame Pakete - fragmentierte Pakete, die das
,nicht fragmentieren'-Bit gesetzt haben, welche (ordnungsgemäß) von
scrub abgelehnt werden. Dies kann mit der Verwendung der
no-df-Option gelöst werden. Ein anderer Grund ist, dass einige
Multiplayer-Spiele Probleme mit Verbindungen haben, die durch PF mit
aktivem scrub geleitet werden. Wenn man von diesen etwas
ungewöhnlichen Fällen absieht, ist es dringend empfohlene
Praxis, ,scrub' auf alle Pakete anzuwenden.
Die Syntax der scrub-Direktive ist der
Filter-Syntax sehr ähnlich, was es
sehr einfach macht, bestimmte Pakete auszuwählen, auf die ,scrub'
angewendet werden soll und auf welche nicht.
Das no-Schlüsselwort kann vor scrub benutzt werden,
um bestimmte Pakete dem ,scrub' nicht zu unterziehen.
So wie es bei nat-Regeln auch
der Fall ist, gewinnt die erste zutreffende Regel.
Entfernt das nicht fragmentieren-Bit vom IP-Paket-Header.
Von einigen Betriebssystemen ist bekannt, dass sie fragmentierte
Pakete mit gesetztem nicht fragmentieren-Bit generieren. Dies
gilt insbesondere bei der Verwendung von NFS. Scrub wird
solche Pakete fallenlassen, außer die no-df-Option wurde
angegeben. Weil einige Betriebssysteme nicht fragmentieren-Pakete
mit einem leeren IP-identification-Header-Feld senden, wird das
Verwenden von no-df in Verbindung mit random-id
empfohlen.
random-id
Ersetzt das IP-identification-Feld von Paketen mit zufälligen
Werten, um Betriebssysteme auszugleichen, die vorhersehbare Werte
verwenden. Diese Option gilt nur für Pakete, die nach dem
optionalen Zusammensetzen der Pakete nicht fragmentiert sind.
min-ttl num
Erzwingt eine minimale Time To Live (TTL) in IP-Paket-Headern.
max-mss num
Erzwingt eine maximale Maximum Segment Size (MSS) in TCP-Paket-Headern.
fragment reassemble
Puffert eingehende Paketfragmente und setzt sie wieder in ein
ganzes Paket um, bevor sie in die Filter-Engine gesendet werden.
Der Vorteil ist, dass Filterregeln sich nur um komplette Pakete
kümmern müssen und somit fragmentierte vernachlässigen können.
Der Nachteil ist, dass mehr Speicher benötigt wird, um die Paketfragmente
zwischenzuspeichern. Dies ist das standardmäßige Verhalten, wenn
keine fragment-Option angegeben wurde. Dies ist ebenfalls die
einzige fragment-Option, die mit NAT zusammen arbeitet.
fragment crop
Veranlasst doppelte Fragmente fallen zu lassen und überlappende
abzuschneiden. Im Gegensatz zu fragment reassemble,
werden Fragmente nicht zwischengespeichert sondern, sobald sie ankommen,
durchgelassen.
fragment drop-ovl
fragment crop ähnlich, außer, dass doppelte und überlappende
Fragmente genauso wie weiter-korrespondierende Fragmente fallengelassen
werden.
reassemble tcp
normalisiert TCP-Verbindungen ,statefully'.
Wenn scrub reassemble tcp verwendet wird, darf eine Richtung
(rein/raus) nicht angegeben werden.
Die folgenden Normalisierungen werden durchgeführt:
Keiner Seite der Verbindung wird erlaubt, ihre IP-TTL zu
reduzieren. Dies wird gemacht, um Schutz gegen Angreifer zu
bieten, die Pakete so senden, dass sie die Firewall erreichen,
die Information des gehaltenen ,states' beeinflussen und
auslaufen, bevor sie den Ziel-Host erreichen können. Die TTL
von allen Paketen wird erhöht, um den höchsten Wert anzunehmen,
der bei der Verbindung beobachtet wurde.
Moduliere
RFC1323-Zeitstempel
in TCP-Paket-Headern mit einer Zufallszahl. Dies kann Beobachter
davon abhalten, die Uptime des Hosts zu ermitteln, oder davon
abhalten zu raten, wie viele Hosts hinter einem NAT-Gateway
liegen.
Beispiele:
scrub in on fxp0 all fragment reassemble min-ttl 15 max-mss 1400
scrub in on fxp0 all no-df
scrub on fxp0 all reassemble tcp