[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:
- jako adresy źródłowe i/lub docelowe w regułach
filtrujących, scrub,
NAT oraz przekierowujących.
- jako adresy translacyjne w regułach NAT.
- jako adresy przekierowujące w regułach
przekierowujących.
- jako adresy przeznaczenia w opcjach wyznaczania tras route-to,
reply-to i dup-to reguł filtrowania.
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:
- const - zawartość tabeli nie może być zmieniona po jej utworzeniu.
Jeśli ten atrybut nie jest podany, narzędzie
pfctl(8) może być wykorzystane do dodania lub usunięcia adresów
z tabeli w dowolnym momencie, nawet podczas pracy w
securelevel(7) równym dwa lub wyższym.
- persist - zmusza jądro do przechowywania tabeli nawet, jeśli
żadne reguły nie odnoszą się do niej. Bez tego atrybutu, jądro automatycznie
usunie tabelę wraz z opróżnieniem ostatniej reguły odnoszącej się do tej 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
dostępnych jest w manualu
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(ów) będą dodane do
tabeli.
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>:
- 172.16.50.5 - najbardziej trafny jest 172.16.0.0/16; pakiet pasuje do
tabeli i zostanie przepuszczony
- 172.16.1.25 - najbardziej trafny jest !172.16.1.0/24; pakiet pasuje do
wpisu w tabeli, ale wpis ten jest zanegowany (używa modyfikatora "!");
pakiet nie pasuje do tabeli i będzie zablokowany
- 172.16.1.100 - jest to dokładnie 172.16.1.100; pakiet pasuje do
tabeli i zostanie przepuszczony
- 10.1.4.55 - pakiet nie pasuje do tabeli i będzie zablokowany
[Wstecz: Listy i makra]
[Spis treści]
[Dalej: Filtrowanie pakietów]
www@openbsd.org
Originally [OpenBSD: tables.html,v 1.9 ]
$Translation: tables.html,v 1.5 2004/01/12 17:37:46 pl-team Exp $
$OpenBSD: tables.html,v 1.5 2004/01/16 21:01:34 jufi Exp $