"Schrobben" (scrubbing) is de normalisatie van pakketten zodat er geen
ambiguïteiten in interpretatie zijn bij de ultieme bestemming van het pakket.
De scrub opdracht herassembleert ook gefragmenteerde pakketten, waarbij ze
sommige besturingssystemen voor enkele vormen van aanvallen beschermt, en
laat TCP pakketten vallen die ongeldige
flagcombinaties hebben. Een eenvoudige
vorm van de scrub opdracht:
scrub in all
Dit zal alle binnenkomende pakketten op alle interfaces schrobben.
Eén reden om niet te schrobben op een interface is als men NFS doorlaat
doorheen PF. Sommige niet-OpenBSD platformen verzenden (en verwachten)
vreemde pakketten -- gefragmenteerde pakketten met de "do not fragment"
bit ingesteld, die (juist) verworpen worden door scrub. Dit kan
opgelost worden door gebruik van de no-df optie. Een andere
reden is dat enkele spelletjes met meerdere spelers verbindingsproblemen
hebben wanneer ze doorheen PF gaan met scrub ingeschakeld.
Buiten deze ietwat ongewone gevallen, is alle pakketten schrobben een
ten zeerste aanbevolen praktijk.
De scrub opdrachtsyntaxis is heel gelijkaardig aan de
filter syntaxis, wat het gemakkelijk maakt om
selectief bepaalde pakketten te schrobben en andere niet.
Het no sleutelwoord kan gebruikt worden vóór scrub om
pakketten aan te geven die niet geschrobd zullen worden.
Net zoals bij nat regels, wint de
eerste overeenstemmende regel.
Veegt de don't fragment bit leeg in de IP pakkethoofding.
Van sommige besturingssystemen is bekend dat ze gefragmenteerde
pakketten genereren met de don't fragment bit ingesteld. Dit
is in het bijzonder waar bij NFS. Scrub zal zulke pakketten
laten vallen tenzij de no-df optie gespecificeerd wordt.
Omdat sommige besturingssystemen don't fragment pakketten
genereren met een nul IP identificatiehoofdingsveld, wordt het aanbevolen
no-df in samenwerking met random-id te gebruiken.
random-id
Vervangt het IP identificatieveld van pakketten door
random waarden om te compenseren voor besturingssystemen die voorspelbare
waarden gebruiken. Deze optie is alleen van toepassing op
pakketten die niet gefragmenteerd zijn na de optionele pakketherassemblage.
min-ttl num
Legt een minimale Time To Live (TTL) op
in IP pakkethoofdingen.
max-mss num
Legt een maximale Maximum Segment
Size (MSS) op in TCP pakkethoofdingen.
fragment reassemble
Buffert binnenkomende pakketfragmenten en herassembleert ze tot een
volledig pakket alvorens ze aan de filtermotor door te geven.
Het voordeel is dat filterregels alleen volledige pakketten hoeven af te
handelen en fragmenten kunnen negeren. Het nadeel is het verhoogde
geheugen nodig om de pakketfragmenten te bufferen. Dit is het
standaardgedrag wanneer er geen fragment gespecificeerd wordt.
Dit is ook de enige fragment optie die werkt met NAT.
fragment crop
Zorgt ervoor dat dubbele fragmenten gedropt worden en dat overlappingen
geknipt worden. In tegenstelling tot bij fragment reassemble,
worden fragmenten niet gebufferd maar doorgelaten zodra ze aankomen.
fragment drop-ovl
Gelijkaardig aan fragment crop
behalve dat alle dubbele of overlappende fragmenten gedropt worden evenals
gelijk welke verdere overeenkomstige fragmenten.
reassemble tcp
Normaliseert TCP verbindingen "statefully".
Bij gebruik van scrub reassemble tcp kan er geen richting (in/uit)
gespecificeerd worden.
De volgende normaliseringen worden uitgevoerd:
Geen enkele zijde van de verbinding wordt toegelaten hun IP TTL
te verlagen. Dit wordt gedaan om te beschermen tegen een aanvaller
die een pakket verstuurt zodat het de firewall bereikt, de bijgehouden
toestandsinformatie voor de verbinding beïnvloedt, en vervalt voordat
het de bestemmingshost bereikt. De TTL van alle pakketten wordt
verhoogd tot de hoogste waarde die gezien werd voor de verbinding.
Het moduleren van
RFC1323
timestamps in TCP pakkethoofdingen met een random getal. Dit kan
voorkomen dat een waarnemer de uptime van de host afleidt of raadt
hoeveel hosts er achter een NAT gateway zitten.
Voorbeelden:
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