Firewall a NAT
Firewall a NAT
Na úvod je třeba říci, že v současné době (konec roku 2020) máme v Linuxu několik implementací funkcionality, kterou při troše zjednodušení označíme jako "firewall".
Mimochodem: Linux měl první "firewall" ve verzi 2.0 - ipfw/ipfwadm, což byl packetový filtr převzatý z FreeBSD. Následoval firewall ipchains ve verzi Linuxu 2.2 a po něm teprve přišel projekt Netfilter, který se ovládá pomocí (a spousta lidí jej zná pod názvem) iptables
. Ani u iptables
se vývoj nezastavil. Momentálně je v Linuxovém světě dvojice "frontendů" pro Netfilter v jádře: Moderní nft
a vedle toho iptables
. Aby to nebylo jednoduché, iptables
jsou dvě různé odrůdy: iptables-nft
, což je vlastně jen překladač pravidel z formátu příkazové řádky iptables
to formátu nft
. A pak jsou na některých systémech stále iptables-legacy
, což jsou původní iptables
, které interagují rovnou s jádrem (tedy ne přes modernější nft
). My se podíváme na iptables
i nft
a protože u iptables
nebudeme zabíhat do detailů, tak nám rozdíly mezi iptabes-nft
a iptables-legacy
nebudou vadit. Nicméně se hodí vědět, že tato komplikace existuje a že se můžeme ve specifických situacích nachytat na rozdíly. Také si je dobré uvědomit, že firewally nelze přímočaře kombinovat. Respektive v závislosti na verzích a použití kombinace nft
a iptables-legacy
vznikají různé nežádoucí interakce. My se jimi však nebudeme zabývat, protože obecně kombinovat firewally nemá smysl a je lépe se toho vyvarovat. Jediná úplně bezpečná kombinace je, že nft
vidí pravidla vytvořená přes iptables-nft
.
Vznikají však i novinky, stojící na úplně jiných technologických základech - projekt XDP (Express Data Path) umožňuje používat k filtrování eBPF a to těsně po opuštění síťové karty a ještě před tím, než packet vstoupí do síťového stacku a je pro něj vůbec alokována paměť. eBPF není zas tak úplná novinka, ve skutečnosti jde o přizpůsobení filtrovacího virtuálního stroje, který je v kernelu už docela dlouho, ale používal se především k filtrování při zachytávání packetů pomocí libpcap - to je backend, který používá nám známý tcpdump
.
My se technologiemi, které umožňují obcházet Linuxový síťový stack (XDP, eBPF, DPDK, ...) teď zabývat nebudeme, ale přesto stojí za to upozornit na jejich existenci a zbývá předem podotknout, že výkonová omezení, o kterých budeme psát dále v souvislosti s Netfilterem, nejsou absolutní. K jejich překonání s pomocí pokročilých technologií, které obchází síťový stack, vede však celkem složitá cesta.
Odkazy: