nftables paketfilter 0.9.9 release

Utgivningen av paketfilter nftables 0.9.9 har publicerats, som förenar paketfiltreringsgränssnitt för IPv4, IPv6, ARP och nätverksbryggor (som syftar till att ersätta iptables, ip6table, arptables och ebtables). Samtidigt publicerades utgåvan av det kompletterande biblioteket libnftnl 1.2.0, vilket ger ett lågnivå-API för interaktion med nf_tables-undersystemet. De ändringar som krävs för att nftables 0.9.9-versionen ska fungera ingår i Linux-kärnan 5.13-rc1.

Paketet nftables inkluderar paketfilterkomponenter som körs i användarutrymme, medan arbetet på kärnnivå tillhandahålls av nf_tables-undersystemet, som har varit en del av Linux-kärnan sedan release 3.13. Kärnnivån tillhandahåller endast ett generiskt protokolloberoende gränssnitt som tillhandahåller grundläggande funktioner för att extrahera data från paket, utföra dataoperationer och flödeskontroll.

Filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i användarutrymmet, varefter denna bytekod laddas in i kärnan med hjälp av Netlink-gränssnittet och exekveras i kärnan i en speciell virtuell maskin som påminner om BPF (Berkeley Packet Filters). Detta tillvägagångssätt tillåter dig att avsevärt minska storleken på filtreringskoden som körs på kärnnivå och flytta alla funktioner för att analysera regler och logik för att arbeta med protokoll till användarutrymmet.

Huvudsakliga innovationer:

  • Möjligheten att flytta flödestabellbearbetning till nätverksadaptersidan har implementerats, aktiverad med "offload"-flaggan. Flödestabell är en mekanism för att optimera vägen för paketomdirigering, där den fullständiga passagen av alla regelbearbetningskedjor tillämpas endast på det första paketet, och alla andra paket i flödet vidarebefordras direkt. tabell ip global { flödestabell f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } kedja framåt { typ filter krok framåt prioritetsfilter; policy acceptera; ip-protokoll {tcp, udp} flow add @f} chain post {typ nat krok postrouting prioritetsfilter; policy acceptera; oifname "wan" maskerad } }
  • Lade till stöd för att fästa en ägarflagga till en tabell för att säkerställa exklusiv användning av tabellen av en process. När en process avslutas raderas den associerade tabellen automatiskt. Information om processen visas i regeldumpen i form av en kommentar: tabell ip x { # progname nft flaggor ägare kedja y { typ filter hook input priority filter; policy acceptera; räknarpaket 1 byte 309 } }
  • Tillagt stöd för IEEE 802.1ad-specifikationen (VLAN-stackning eller QinQ), som definierar ett sätt att ersätta flera VLAN-taggar i en enda Ethernet-ram. Till exempel, för att kontrollera typen av extern Ethernet-ram 8021ad och vlan id=342, kan du använda konstruktionen ... ether type 802.1ad vlan id 342 för att kontrollera den externa typen av Ethernet-ram 8021ad/vlan id=1, kapslad 802.1 q/vlan id=2 och ytterligare IP-paketinkapsling: ... eter typ 8021ad vlan id 1 vlan typ 8021q vlan id 2 vlan typ ip räknare
  • Lade till stöd för att hantera resurser med den förenade hierarkin cgroups v2. Den viktigaste skillnaden mellan cgroups v2 och v1 är användningen av en gemensam cgroups hierarki för alla typer av resurser, istället för separata hierarkier för att allokera CPU-resurser, för att reglera minnesförbrukning och för I/O. Till exempel, för att kontrollera om förfadern till en socket på den första nivån cgroupv2 matchar "system.slice"-masken, kan du använda konstruktionen: ... socket cgroupv2 nivå 1 "system.slice"
  • Lade till möjligheten att kontrollera komponenter i SCTP-paket (funktionaliteten som krävs för detta kommer att visas i Linux-kärnan 5.14). Till exempel, för att kontrollera om ett paket innehåller en bit med typen 'data' och fältet 'typ': ... sctp chunk data existerar ... sctp chunk datatyp 0
  • Utförandet av regelladdningsoperationen har accelererats med ungefär två gånger med "-f"-flaggan. Utmatningen av listan med regler har också påskyndats.
  • En kompakt form för kontroll av om flaggbitar är satta tillhandahålls. För att till exempel kontrollera att snat- och dnat-statusbitarna inte är inställda kan du ange: ... ct status ! snat,dnat för att kontrollera att syn-biten är inställd i bitmasken syn,ack: ... tcp flaggor syn / syn,ack för att kontrollera att fin- och första bitarna inte är inställda i bitmasken syn,ack,fin,rst: ... tcp-flaggor ! = fin, första / syn, ack, fin, första
  • Tillåt nyckelordet "beslut" i definitioner av uppsättning/karttyp: add map xm { typeof iifname . ip-protokoll th dport: dom ;}

Källa: opennet.ru

Lägg en kommentar