[Wstecz: Scrub (normalizacja pakietów)] [Spis treści] [Dalej: Kolejkowanie]
Podzestawy reguł są dołączane do głównego zestawu reguł przy pomocy zakotwiczeń (ang. anchors). Są cztery typy reguł zakotwiczeń anchor:
Na przykład:
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor goodguys
Ten zestaw reguł sankcjonuje politykę domyślnego blokowania dla zarówno przychodzącego jak i wychodzącego ruchu. Ruch jest następnie przepuszczany na zewnątrz wraz z śledzeniem stanu połączenia, a także tworzone jest zakotwiczenie nazwane goodguys. Zakotwiczenia mogą być wypełniane regułami na dwa sposoby:
Reguła load powoduje, że pfctl wypełnia regułami dane zakotwiczenie i nazwany zestaw reguł poprzez ich odczyt z pliku tekstowego. Na przykład:
load anchor goodguys:ssh from "/etc/anchor-goodguys-ssh"
Podczas ładowania głównego zestawu reguł, reguły zawarte w pliku /etc/anchor-goodguys-ssh zostaną załadowane do nazwanego zestawu reguł ssh podpiętego do zakotwiczenia goodguys.
Aby dodać reguły do zakotwiczenia przy pomocy pfctl, może zostać użyta komenda skonstruowana podobnie do poniższej:
# echo "pass in proto tcp from 192.0.2.3 to any port 22" \
| pfctl -a goodguys:ssh -f -
Dodaje ona regułę pass do zestawu nazwanego ssh dołączonego do zakotwiczenia goodguys. PF dokona następnie porównania tej reguły (a także każdej kolejnej, dodanej reguły filtrującej) z chwilą, gdy dotrze do linii anchor goodguys w głównym zestawie reguł.
Reguły mogą być także zapisywane i odczytywane z pliku tekstowego:
# cat >> /etc/anchor-goodguys-www
pass in proto tcp from 192.0.2.3 to any port 80
pass in proto tcp from 192.0.2.4 to any port { 80 443 }
# pfctl -a goodguys:www -f /etc/anchor-goodguys-www
Ostatnia komenda powoduje załadowanie reguł z pliku /etc/anchor-goodguys-www do nazwanego zestawu reguł www w zakotwiczeniu goodguys.
Reguły filtrujące i translacyjne mogą być załadowane z nazwanego zestawu reguł z wykorzystaniem tych samych opcji i składni, co przy ładowaniu z głównego zestawu reguł. Z zastrzeżeniem, iż wykorzystywane makra muszą być zdefiniowane w danym zestawie, a makra głównego zestawu reguł nie będą widoczne w nazwanych zestawach reguł.
Każdy nazwany zestaw reguł, podobnie jak i główny zestaw reguł funkcjonuje niezależnie od innych zestawów. Operacje wykonywane na pojedynczym zestawie, takie jak wyczyszczenie (ang. flush), nie mają wpływu na pozostałe zestawy reguł. Ponad to, usunięcie zakotwiczenia z głównego zestawu reguł nie niszczy zakotwiczenia, ani żadnego nazwanego zestawu reguł, który jest do niego podpięty. Nazwany zestaw reguł nie jest niszczony aż do momentu wyczyszczenia wszystkich reguł przy pomocy pfctl(8). Kiedy punkt zakotwiczenia nie posiada żadnego, podpiętego zestawu także jest niszczony.
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor ssh in on $ext_if proto tcp from any to any port 22
Reguły zakotwiczenia ssh są przetwarzane jedynie dla pakietów TCP o docelowym porcie 22, i które nadchodzą przez fxp0. Reguły są następnie dodawane do zakotwiczenia anchor w następujący sposób:
# echo "pass in from 192.0.2.10 to any" | pfctl -a ssh:allowed -f -
Mimo iż reguły filtrujące nie precyzują interfejsu, protokołu czy portu, jedynie host 192.0.2.10 będzie miał prawo łączyć się przy pomocy SSH ze względu na definicje zakotwiczenia anchor.
Aby wyświetlić wszystkie reguły zestawu allowed podpiętego do zakotwiczenia ssh:
# pfctl -a ssh:allowed -s rules
Aby wyczyścić wszystkie reguły z tego samego zestawu:
# pfctl -a ssh:allowed -F rules
Gdy nazwa zestawu jest pominięta, akcja odnosi się do wszystkich reguł w zakotwiczeniu.
Pełna lista komend znajduje się na stronach man pfctl(8).
[Wstecz: Scrub (normalizacja pakietów)] [Spis treści] [Dalej: Kolejkowanie]