Firewall a NAT
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)