Co je to nftables?
Jedná se osubsystém linuxového jádra, který má za úkol filtrovat síťový provoz. Vývoj byl poprvé prezentován už vroce 2008a první verze se do Linuxu dostala vlednu roku 2014svydáním jádra 3.13. Nutno říct, že nftables není konkurenční projekt vytvořený na truc projektu netfilter/iptables. Za vývojem stojí stejní vývojáři, takže jde opřirozenou evoluci: nftables je následovníkem iptables.
Cílem projektu je vytvoření jednoduššího a univerzálnějšího řešení, které bude vjádře potřebovat výrazně méně kódu. Zároveň by mělo usnadnit život uživatelům (správcům), kteří dostanou do ruky jeden univerzální švýcarský nůž, namísto celé dílny plné různých nástrojů vpodobě iptables.
Virtuální stroj vjádře
Základem nftables je virtuální stroj vjádře, který je schopen zpracovávat jednoduchý bytekód. Ten je schopen provádět porovnání, aritmetiku či bitové operace. Dostane kdispozici samotná data (například paket), přístup kmetadatům (třeba příchozí rozhraní) a ke connection trackingu (sledování spojení). Na základě těchto informací je schopen provést rozhodnutí, co sdaty provéstdále.
Taková implementace je výrazně odlišná od přístupu iptables, který staví na principu modulů schopných pracovat sjednotlivými protokoly. Integrovaná znalost protokolů je pevnou součástí iptables a je natolik svázaná sfunkcí jednotlivých modulů, že bylo potřeba kód napsat čtyřikrát: zvlášť pro IPv4, IPv6, ARP a ethernetové rámce (bridging). Pro každý protokol je navíc nutné napsat samostatný modul, který je napsán se znalostí obsahu určitého typu provozu.
Proti tomu je virtuální stroj nftables napsán naprosto obecně, nezajímají ho konkrétní protokoly, formáty hlaviček a podobné vysokoúrovňové informace. Umí jen postupovat podle jednoduchého programu a provádět jednoduchá porovnávání a rozhodování. Řešení nftables je tedy „hloupější“, ale vtom je jehosíla.
Chytrost vjedné utilitě
Dramaticky se tak snižuje množství kódu vjádře ivuživatelském prostoru. Tradiční utility iptables
, ip6tables
, arptables
a ebtables
nahrazuje jediná utilita nft
. Ta implementuje celý firewall nad jednoduchým virtuálním strojem vjádře. Ona je zodpovědná za to, že zpravidel zadaných správcem vytvoří kód pro virtuálnístroj.
Výhodou je, že se znalost protokolů přesouvá do uživatelského prostoru, takže přidání podpory pro nový typ filtrování znamená jen aktualizaci jedné utility. Není potřeba kompilovat nový modul do jádra a zavádět ho, nebo dokonce překompilovat celé jádro a restartovat. Nová utilita jednoduše vytvoří nový bytekód a nakrmí jím starý virtuálnístroj.
Příjemné je také nové jednoduché API, které dokáže provádět atomické operace vjaderném rozhraní Netlink. Změna pravidla ve firewallu tak znamená jednu jedinou transakci, což drasticky zrychluje úpravy velkých a komplikovaných sad pravidel a předchází to problémům při souběhu, když probíhají změny vjádře.
Současnost jménem nftables
Pokud vám tohle všechno připadá jako hudba budoucnosti, tak vězte, že je to vlastně už naše současnost. Možná nftables používáte a ani jste si toho nevšimli. Součástí projektu je totiž také vrstva kompatibility (iptables-nft), která dokáže načítat pravidla původně napsaná pro iptables.
Současný stav (například vDebianu 10Buster) je takový, že známá utilita iptables
je nahrazena novou verzí, která na pozadí provádí překlad do nftables. Uživatel má stále pocit, že používá staré známé rozhraní, ve skutečnosti už ale pracuje snftables.
Vbalíčku iptables
jsou stále ještě binárky končící na -legacy
, na které je možné přepnout pomocí příkazu update-alternatives
. Ve výchozím stavu ale zmíněné čtyři příkazy ve skutečnosti volají binárky končící na -nft
. Tabulky iptables tak zůstávají prázdné a uživatel plní nftables. Příští verze Debianu také pravděpodobně za dva rokyvyhodí iptables zvýchozí instalace.
Rozdíly proti iptables
Pokud jste zvyklí na iptables, budou vás pravděpodobně zajímat rozdíly proti nftables. Vprvní řadě se liší syntaxe, která více připomíná ovládání utility ipči příkazu tcpdump. Přepínače se neuvozují pomlčkami, ale je možné je přirozeně zapisovat za sebou vrelativně volném pořadí.
Další změnou je, že všechny tabulky a řetězce jsou zcela volně konfigurovatelné. Zatímco iptables uživateli nabízejí připravené tabulky svestavěnými řetězci, nic takového vnftables nenajdete. Nepoužívané prázdné řetězce vás tak nestojí výkon a je na vás, abyste si je zaregistrovali do jádra, až když je budete potřebovat.
Tvorba pravidel je výrazně volnější a dává širší možnosti než uiptables. Jedno pravidlo může obsahovat více výrazů, které se postupně procházejí zleva doprava, pokud byl předcházející výraz vyhodnocen kladně. Padá tak omezení na jedno pravidlo– jedencíl.
Stejně tak je možné vrámci jednoho pravidla definovat více akcí (cílů). To vpraxi velmi usnadňuje správcům život, protože je možné vrámci jednoho rozhodnutí provést několik úkonů: započítat, zalogovat a pak třeba přejít do jiného řetězce. Zvyšuje se tím přehlednost a snižuje komplexita pravidel.
Firewall snftables také automaticky nemá počítadla na řetězcích a pravidlech. Pokud chcete nějaký provoz počítat, musíte si oto výslovně říct při zápisu nového pravidla.
Vdnešní době nasazování dual-stacku potěší fakt, že nftables mají podporu pro jednotné rozhraní filtrující zároveň IPv4 a IPv6. Nemusíte tak udržovat dva samostatné firewally, ale jednotná pravidla se mohou aplikovat na oba jinak nezávislé světy. Zjednodušuje se vám tím život a vyhnete se častým chybám, při kterých je nové pravidlo přidáno jen do jednoho ze dvou firewallů.
Nový firewall také integruje složitější datové struktury, které byly do toho původního buď doplněny dodatečně nebo neexistují vůbec. Vnftables tak můžete přímo používat infrastrukturu setů, které umožňují vytvářet rozsáhlé sady pravidel využívající libovolný dostupný selektor. Můžete tak vytvářet slovníky, mapy a rozsahy, které se snadno spravují a nabízejí vysoký výkon při prohledávání.
Nad tím vším je navíc možné od jádra 4.1provádět řetězení (concatenation) pomocí uspořádaných n-tic (tuple) selektorů. Můžete tak vjednom kroku provést porovnání nad celou skupinou selektorů, což opět zvyšuje přehlednost a výkon. Příklad: Je tento paket zvyjmenovaných zdrojových IP adres a zároveň používá protokolUDP?
Co zůstalo stejné
Pokud jste zvyklí na Netfilter, pak vás potěší to, že nftables vsíťovém stacku využívá stejnou infrastrukturu. Stejně tak používá stávající connection tracking, funkce pro NAT, logování a další součásti. Změnil se tedy jen nástroj pro rozhodování, zbytek funkcí jádra zůstává nezměněný.
Stále jsou tedy ve hře jaderné hooky, na které se umí nftables zavěsit a rozhodovat oosudu procházejícího provozu. Data směřující do našeho stroje procházejí přes prerouting a input, odchozí provoz pak analogicky míří přes output a postrouting. Pokud je vjádře zapnutá funkce směrovače (forwarding), pak procházející pakety jdou přes prerouting, forward a postrouting. Tenhle princip se snftables nemění.
Příště už prakticky
Vpříštím článku začneme spraktickými ukázkami a ukážeme si, jak se nftables ovládají pomocí utility nft
. Vytvoříme si tabulky, přidáme do nich řetězce a některé znich připojíme na správná místa vsíťovém stacku. Také si ukážeme, jak spravovat jednotlivá pravidla vřetězcích.