[Předchozí: Seznamy a Makra]
[Obsah]
[Další: Filtrování paketů]
PF: Tabulky
Obsah
Úvod
Tabulka se používá k uložení skupiny IPv4 a/nebo IPv6 adres. Vyhledávání
v tabulce jsou velmi rychlá a spotřebují méně paměti a procesorového času
než seznamy. Z těchto důvodů je tabulka
ideální pro udržování velké skupiny adres, protože vyhledávací čas v tabulce
s 50.000 adresami je jen nepatrně větší oproti tabulce s 50 adresami. Tabulky
mohou být použity nasledujícími způsoby:
- zdrojové a/nebo cílové adresy v pravidlech.
- překládací a přesměrovávací adresy nat-to a rdr-to
pravidel.
- cílové adresy v route-to, reply-to a
dup-to pravidlech.
Tabulky se vytvářejí buď v
pf.conf nebo použitím
pfctl(8).
Konfigurace
V pf.conf se tabulky vytvářejí pomocí table
direktivy. Nasledující atributy mohou být specifikovány pro každou tabulku:
- const - obsah tabulky nemůže být změněn jakmile je vytvořena.
Když tento atribut není specifikován, tak
pfctl(8) může být použit pro přídání nebo odebrání adres z tabulky
kdykoliv. Dokonce i když je
securelevel(7) nastaveno na 2 nebo více.
- persist - přinutí jádro udržovat tabulku v paměti i když
se na ni neodkazují žádná pravidla. Bez tohoto atributu jádro tabulku
automaticky odstraní jakmile se odstraní poslední pravidlo, které se
na tabulku odkazovalo.
Například:
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
Addresses can also be specified using the negation (or "not") modifier
such as:
table <goodguys> { 192.0.2.0/24, !192.0.2.5 }
Tabulka goodguys bude nyní platná pro všechny adresy v
192.0.2.0/24 sití kromě 192.0.2.5.
Všimněte si, že jména tabulek jsou vždy uzavřena do < >
špičatých závorek.
Tabulky mohou být také vytvořeny z textových souborů obsahujících
IP adresy a sítě:
table <spammers> persist file "/etc/spammers"
block in on fxp0 from <spammers> to any
Soubor /etc/spammers může obsahovat seznam IP adres
a/nebo CIDR
bloky sítí, jeden na každý řádek.
Jakýkoliv řádek začínající s # je považován za komentář a
ignorován.
Manipulace pomocí pfctl
Tabulky je možno spravovat za chodu pomocí
pfctl(8). Například pro přidání záznamů do
<spammers> tabulky vytvořené v předchozím kroku:
# pfctl -t spammers -T add 218.70.0.0/16
Také to vytvoří <spammers> tabulku pokud ještě neexistovala.
Pro vypsání adres v tabulce:
# pfctl -t spammers -T show
Přepínač -v může být použit s -T show pro zobrazení
statistik pro každý záznam v tabulce. Pro odstranění adres z tabulky:
# pfctl -t spammers -T delete 218.70.0.0/16
Pro více informací o manipulaci tabulek s pfctl si prosím
přečtěte
pfctl(8) man stránku.
Specifikování adres
Mimo specifikování pomocí IP adres mohou být systémy specifikovány
take pomocí jejich jména. Když je jméno přeloženo na IP adresu, tak všechny
výsledné IPv4 a IPv6 adresy jsou uloženy do tabulky. IP adresy mohou také
být do tabulky zadány specifikováním platného jména síťového rozhraní,
skupiny síťového rozhraní nebo klíčového slova self. Tabulka poté
bude obsahovat všechny IP adresy přiřazené pro danné rozhraní nebo skupinu
nebo systém (včetně lokálního rozhraní).
Jediný limit při specifikování adres je, že 0.0.0.0/0 a
0/0 nebudou v tabulkách fungovat.
Alternativou je zadat adresu na "tvrdo" nebo použít
makro.
Vyhledání adres
Vyhledání adresy v tabulce vrátí nejbližší odpovídající záznam. To umožňuje
vytváření tabulek jako např.:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }
block in on dc0
pass in on dc0 from <goodguys>
Jakýkoliv paket přicházející přes dc0 bude mít jeho zdrojovou adresu
vyhledánu v tabulce <goodguys>:
- 172.16.50.5 - nejbližší záznam je 172.16.0.0/16; paket odpovídá tabulce
a bude propuštěn dále
- 172.16.1.25 - nejbližší záznam je !172.16.1.0/24; paket odpovídá záznamu
v tabulce, ale záznam je negovaný (používá "!" modifikátor); paket neodpovídá
tabulce a bude blokován
- 172.16.1.100 - přesně odpovídá 172.16.1.100; paket odpovídá tabulce
a bude propuštěn dále
- 10.1.4.55 - neodpovídá tabulce a bude blokován
[Předchozí: Seznamy a Makra]
[Obsah]
[Další: Filtrování paketů]
www@openbsd.org
$OpenBSD: tables.html,v 1.11 2012/11/04 08:15:48 ajacoutot Exp $