[OpenBSD]

[Wstecz: Listy i makra] [Spis treści] [Dalej: Filtrowanie pakietów]

PF: Tabele


Spis treści


Wprowadzenie

Tabele są wykorzystywane do przechowywania grup adresów IPv4 i/lub IPv6. Wyszukiwania w tabelach są bardzo szybkie oraz zużywają mniej pamięci i czasu procesora niż listy. Z tego powodu, tabela jest idealna do przechowywania dużej grupy adresów, albowiem czas wyszukiwania w tabeli z 50,000 adresów jest tylko nieznacznie większy niż w tabeli z 50 adresami. Tabele mogą być efektywnie stosowane w wielu miejscach:

Tabele są tworzone albo w pf.conf albo przy pomocy pfctl(8).

Konfiguracja

W pf.conf tabele są tworzone przy pomocy dyrektywy table. Następujące atrybuty mogą być podawane dla każdej tabeli:

Przykład:

table <goodguys> { 192.0.2.0/24 }
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
   10.0.0.0/8 }
table <spammers> persist

block in on fxp0 from { <rfc1918>, <spammers> } to any
pass  in on fxp0 from <goodguys> to any

Adresy mogą być także podawane z użyciem modyfikatora negacji (lub "not") jak np:

table <goodguys> { 192.0.2.0/24, !192.0.2.5 }

Tabela goodguys będzie teraz pasowała do wszystkich adresów w sieci 192.0.2.0/24 poza adresem 192.0.2.5.

Zwróć uwagę, że nazwy tabel zawsze otoczone są nawiasami trójkątnymi < >.

Tabele mogą być także zainicjowane na podstawie plików tekstowych zawierających listy adresów IP i sieci:

table <spammers> persist file "/etc/spammers"

block in on fxp0 from <spammers> to any

Plik /etc/spammers zwiera listę adresów IP - i/lub bloki sieciowe CIDR, każdy w oddzielnej linii. Każda linia zaczynająca się od # jest traktowana jako komentarz i ignorowana.

Manipulacje za pomocą pfctl

Tabelami można manipulować ręcznie poprzez program pfctl(8). Dla przykładu, aby dodać wpisy do utworzonej wyżej tabeli <spammers> można użyć:
# pfctl -t spammers -Tadd 218.70.0.0/16

Komenda ta utworzy tabelę <spammers>, jeśli jeszcze nie istnieje. Aby wyświetlić adresy z tabeli stosuje się:

# pfctl -t spammers -Tshow
Argument -v może także być użyty wraz z -Tshow, aby wyświetlić statystyki dla każdego z wpisów. Aby usunąć adres z tabeli korzysta się z:
# pfctl -t spammers -Tdelete 218.70.0.0/16

Więcej informacji o manipulowaniu tabelami przy pomocy pfctl znajdziesz czytając stronę manuala pfctl(8).

Specyfikowanie adresów

Host może być zdefiniowany nie tylko przy pomocy adresu IP ale także przez podanie jego nazwy. Kiedy nazwa hosta rozwijana jest do adresu IP, wszystkie otrzymywane w ten sposób adresy IPv4 i IPv6 są wstawiane do tabeli. Adresy IP mogą być także wprowadzane do tabeli poprzez podanie odpowiedniej nazwy interfejsu sieciowego lub słowa kluczowego self. W takim wypadku, wszystkie adresy przypisane do tego interfejsu lub maszyny (włącznie z interfejsem loopback) będą dodane do tabeli.

Jedynym ograniczeniem przy podawaniu adresu jest to, że adresy 0.0.0.0/0 i 0/0 nie będą działać w przypadku tabel. Alternatywą jest wpisywanie tego adresu za każdym razem ręcznie lub skorzystanie z makra.

Dopasowywanie adresu

Wyszukanie adresu w tabeli zwróci najlepiej pasujący wpis. Pozwala to na tworzenie takich tabel jak ta:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0 all
pass  in on dc0 from <goodguys> to any

Adres każdego pakietu przychodzącego na interfejsie dc0 będzie porównywany z tabelą <goodguys>:

[Wstecz: Listy i makra] [Spis treści] [Dalej: Filtrowanie pakietów]


[wstecz] www@openbsd.org
$OpenBSD$