Netfilter

Netfilter se filtruje pomocí pravidel a tato pravidla se uspořádávají do řetězců (chains) v pořadí, v jakém se mají vykonat. V Linuxu se používá sémantika, že když packet prochází určitou fází zpracování v síťovém stacku, je poslán na vstup příslušného řetězce pravidel. Například příchozí packet ze síťové karty, o kterém se ví, že jeho cílovou IP adresu má počítač na některém síťovém rozhraní, je vložen do tabulky filter do řetězce INPUT (v terminologii iptables).

Packet je pak testován pravidly z řetězce v daném pořadí, dokud není nalezena shoda s testovaným pravidlem a nebo není dosaženo konce řetězce. Je-li nalezena shoda s pravidlem, vykoná se akce tímto pravidlem určená - to může být například zahození packetu (DROP), nebo propuštění (ACCEPT), čili prakticky vrácení do síťového stacku do místa, odkud byl firewall zavolán. Možností akcí je víc, ale k tomu se dostaneme později.

Pokud testování dojde až na konec řetězce, vykoná výchozí akci (default) pro daný řetězec, kterou opět můžeme nastavit na ACCEPT nebo DROP.

Pravidla v řetězci mohou být například:

  • je-li vstupní síťové rozhraní lo, akceptuj
  • je-li zdrojová adresa 192.168.1.10, zahoď
  • je-li vstupní rozhraní eth0, je-li zdrojová adresa ze subnetu 192.168.1.0/24, je-li packet TCP segment a cílový port je 22 nebo 80 nebo 443, akceptuj
  • povol ICMP zprávy
  • zahoď vše ostatní (to bude tedy výchozí pravidlo pro řetězec)