"Scrubbing" jest normalizacją pakietów, dzięki której nie ma wątpliwości co do
ich interpretacji po stronie odbiorcy. Dyrektywa 'scrub' defragmentuje także
pakiety, chroniąc niektóre systemy przed różnymi formami ataku, oraz odrzuca
pakiety TCP, które mają ustawione niepoprawne kombinacje
flag. Najprostszą formą dyrektywy
scrub jest:
scrub in all
Co oznacza normalizację wszystkich przychodzących pakietów na wszystkich
interfejsach sieciowych.
Jedynym powodem nie normalizowania pakietów na interfejsie sieciowym może
być przepuszczanie NFS przez PF na tym interfejsie. Niektóre, różne od
OpenBSD, platformy wysyłają (i oczekują na) dziwne pakiety - sfragmentowane
datagramy z ustawionym bitem "nie fragmentować", które są (słusznie)
odrzucane przez scrub. Problem ten może jednak być rozwiązany poprzez
użycie opcji no-df. Innym powodem mogą być kłopoty z połączeniem
w niektórych sieciowych grach komputerowych, których ruch przechodzi
przez PF z włączonym scrub. Poza tymi, skądinąd marginalnymi
przypadkami, normalizacja wszystkich pakietów jest bardzo wskazaną
praktyką.
Składnia dyrektywy scrub jest bardzo podobna do składni dyrektyw
filtrujących, która pozwala w prosty sposób
selektywnie normalizować poszczególne pakiety, i nie normalizować innych.
Słowo kluczowe no może być użyte przed scrub, aby
określić pakiety, które nie mają ulegać normalizacji.
Podobnie jak w przypadku reguł nat,
pierwsza pasująca jest jednocześnie ostatecznym dopasowaniem.
Usuwa bit nie fragmentować z nagłówka pakietu IP.
Niektóre systemy znane są z generowania sfragmentowanych pakietów
z ustawionym bitem nie fragmentować. Jest to szczególnie
prawdziwe dla NFS. Scrub będzie porzucać takie pakiety,
chyba że jest ustawiona opcja no-df. Ponieważ niektóre
systemy operacyjne generują nie fragmentowalne pakiety z
zerowym nagłówkiem identyfikacyjnym IP, jest zalecane używanie
no-df wraz z random-id.
random-id
Zastępuje pole identyfikacyjne IP pakietów losową
wartością. Opcja ta odnosi się jedynie do wychodzących pakietów,
które nie są fragmentowane po opcjonalnym zdefragmentowaniu.
min-ttl num
Wymusza minimalne Time To Live (TTL) dla nagłówków pakietów IP.
max-mss num
Wymusza maksymalne Maximum Segment Size (MSS) dla nagłówków pakietów TCP.
fragment reassemble
Buforuje przychodzące fragmenty pakietów i defragmentuje je do całych
pakietów przed przekazaniem ich do filtra pakietów. Zaletą tego rozwiązania
jest to, iż reguły filtrujące operują jedynie na kompletnych pakietach i mogą
ignorować pojedyńcze fragmenty. Wadą jest zwiększone zużycie pamięci,
niezbędne do przechowywania fragmentów pakietów. Jest to domyślne zachowanie,
jeśli żadna opcja fragment nie jest podana. Jest to zarazem jedyna
opcja fragment, która współpracuje z NAT.
fragment crop
Powoduje, że duplikaty fragmentów są porzucane, a nakładające się
są kadrowane. W odróżnieniu do fragment reassemble, fragmenty
nie są buforowane, lecz są przekazywane dalej jak tylko dotrą.
fragment drop-ovl
Ta opcja jest podobna do fragment crop, z tą różnicą, że
wszystkie zduplikowane i nakładające się fragmenty będą porzucane, łącznie
z wszystkimi powiązanymi z nimi fragmentami.
reassemble tcp
Normalizuj połączenia TCP w trybie śledzenia stanów.
Korzystając z scrub reassemble tcp, kierunek (wchodzący/wychodzący)
(ang. in/out) nie musi być określony.
Następujące normalizacje mają miejsce:
Żadna ze stron połączenia nie jest uprawniona do zredukowania swojego
TTL nagłówka IP. Dzieje się tak, aby zabezpieczyć nas przed napastnikami
wysyłającymi pakiet, który dociera do firewall`a, ma wpływ na przechowywane
w pamięci informacje o połączeniu stanowym, a następnie jego TTL jest
niewystarczające aby dotrzeć do węzła docelowego.
Wartość TTL dla wszystkich pakietów jest podnoszona do najwyższej
odnotowanej dla danego połączenia wartości.
Modulowanie
RFC1323
znaczników czasowych w nagłówkach pakietów TCP przy pomocy liczb losowych.
Może to zapobiec domyśleniu się przez obserwatora czasu pracy maszyny
(ang. uptime) lub zgadnięciu ile maszyn jest za bramką NAT.
Przykłady:
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