Firewall a NAT

Firewall

Pořadí pravidel v řetězcích

Vrátíme se teď na chvíli k pravidlům, která akceptují velké množství packetů a která jsme v příkladech psali vždy na co nejvyšší pozice v řetězcích. Máme na mysli například pravidla v INPUT řetězci z minulých příkladů:

  • propusť vše, co přišlo na rozhraní lo - iptables -A INPUT -i lo -j ACCEPT
  • propusť vše, co je dle conntracku established - iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

Čím výše v řetězci tato pravidla dáme, tím dříve se najde shoda pro packety běžících spojení a tím dříve budou akceptovány a procházení pravidel bude ukončeno. Tím se tedy dostáváme k hlavní poučce ohledně Linuxového firewallu: na pořadí pravidel záleží! Pořadím v první řadě určujeme smysl pravidel v řetězci a za druhé jím ovlivňujeme výkon - čím víc pravidel je před pravidlem, které bude mít shodu, tím víc práce se musí pro packet udělat otestováním pravidel, která shodu nemají.

Proto je v situaci, kdy nemá pořadí vliv na smysl řetězce, lepší dát pravidla, jež mají shodu s větším množstvím packetů, co nejvýše. To je zejména situace, kdy v řetězci máme jen jeden druh akcí - ACCEPT nebo DROP. Naopak příklad, kde na pořadí záleží, jsou naše dvě pravidla z minulé sekce:

  1. je-li zdrojová adresa 192.168.1.10, zahoď
  2. 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

Dejme tomu, že tedy přijde na síťové rozhraní eth0 TCP segment se zdrojovou adresou 192.168.1.10, cílovou adresou shodnou s adresou na některém síťovém rozhraní, zdrojovým portem 55412 a cílovým portem 22. V našem případě bude tedy packet prvním pravidlem zahozen, druhé pravidlo se neuplatní. Kdyby však byla pravidla v opačném pořadí, tak bude packet propuštěn pravidlem (2) a pravidlo (1) se vůbec nikdy neuplatní.