Jedná se o framework pro filtrování a manipulaci s pakety zabudovaný do jádra systému. Definuje několik přípojných bodů na kterých můžou moduly jádra registrovat vlastní callback funkce. Tento callback je pak zavolán pro každý paket, který prochází příslušným přípojným bodem.
Umožňuje například:
ip_tables
(ip6_tables
) je zřejmě jedním z nejznámějších
modulů využívajích netfilter. Prostřednictvím přípojných bodů netfiltru vytváří
stavový paketový filter pro IPv4 (resp. IPv6) - pro sledování spojení využívá
modul conntrack
. Obsahuje v sobě čtyři tabulky:
filter
input
, forward
, output
.
Je to výchozí tabulka a slouží pro filtrování paketů.
nat
prerouting
, postrouting
, output
a slouží k manipulaci s adresami paketu.
mangle
raw
prerouting
, output
a slouží především ke zrušení monitorování stavu spojení (na přípojné body
se registruje s větší prioritou a je tedy volán dřív než ip_conntrack
a další moduly iptables).
Modul conntrack
rozděluje pakety do následujících kategorií:
NEW
- paket ustanovuje spojeníESTABLISHED
- paket je součástí existujícího spojeníRELATED
- paket je součástí už existujícího spojení, ale
zároveň vytváří nové spojení (například přenost dat přes FTP)
INVALID
- není součástí žádného spojeníUNTRACKED
- paket není sledovánSNAT
- zdrojová adresa paketu se liší od cílové adresy odpovědiDNAT
- cílová adresa paketu se liší od zdrojové adresy odpovědi
Konfigurace tabulek se provádí příkazem iptables
(ip6tables
).
Základní syntaxe pro přidání/smazání pravidla je:
iptables [-t table] {-A|-D} chain rule-specification
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
chain
jeden z předdefinovaných (PREROUTING, FORWARD, INPUT,
OUTPUT, POSTROUTING) nebo můžeme použít vlastní (pomocí
iptables -N chainname
)
matchname
je název modulu, který se použije při porovnávání
paketu. Modulů existuje celá řada a každý má svoje specifické parametry.
(Např. state
).
targetname
říká, co se má s paketem provést. Například:
--reject-with
)
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -s "80.80.80.80" -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -L [-t table]
table
iptables-save
- exportuje pravidla na stdoutiptables-restore
- importuje pravidla z stdin