nftables pakkefilter 0.9.9 udgivelse

Frigivelsen af ​​pakkefilter nftables 0.9.9 er blevet offentliggjort, som forener pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). Samtidig blev udgivelsen af ​​det ledsagende bibliotek libnftnl 1.2.0 udgivet, hvilket giver en lav-niveau API til interaktion med nf_tables-undersystemet. Ændringerne, der kræves for at nftables 0.9.9-udgivelsen fungerer, er inkluderet i Linux-kernen 5.13-rc1.

nftables-pakken inkluderer pakkefilterkomponenter, der kører i brugerrum, mens kerneniveauet leveres af nf_tables-undersystemet, som har været en del af Linux-kernen siden udgivelse 3.13. På kerneniveau er der kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre operationer på data og kontrollere flow.

Selve filtreringsreglerne og protokol-specifikke handlere kompileres til brugerrumsbytekode, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang gør det muligt betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingsregler og logikken i at arbejde med protokoller ind i brugerrummet.

Vigtigste innovationer:

  • Muligheden for at flytte flowtabelbehandling til netværksadaptersiden er blevet implementeret, aktiveret ved hjælp af 'offload'-flaget. Flowtable er en mekanisme til optimering af stien for pakkeomdirigering, hvor den komplette passage af alle regelbehandlingskæder kun anvendes på den første pakke, og alle andre pakker i flowet videresendes direkte. tabel ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flag offload } chain forward { type filter hook forward priority filter; politik acceptere; ip-protokol { tcp, udp } flow tilføje @f } kædepost { type nat hook postrouting prioritetsfilter; politik acceptere; oifname "wan" maskerade } }
  • Tilføjet understøttelse for at vedhæfte et ejerflag til en tabel for at sikre eksklusiv brug af tabellen ved en proces. Når en proces afsluttes, slettes den tilknyttede tabel automatisk. Information om processen vises i regeldumpet i form af en kommentar: tabel ip x { # progname nft flags ejerkæde y { type filter hook input priority filter; politik acceptere; tællerpakker 1 byte 309 } }
  • Tilføjet understøttelse af IEEE 802.1ad-specifikationen (VLAN-stabling eller QinQ), som definerer et middel til at erstatte flere VLAN-tags i en enkelt Ethernet-ramme. For eksempel, for at kontrollere typen af ​​ekstern Ethernet-ramme 8021ad og vlan id=342, kan du bruge konstruktionen ... ether type 802.1ad vlan id 342 til at kontrollere den eksterne type Ethernet-ramme 8021ad/vlan id=1, indlejret 802.1 q/vlan id=2 og yderligere IP-pakkeindkapsling: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Tilføjet support til styring af ressourcer ved hjælp af det forenede hierarki cgroups v2. Den vigtigste forskel mellem cgroups v2 og v1 er brugen af ​​et fælles cgroups-hierarki for alle typer ressourcer, i stedet for separate hierarkier til allokering af CPU-ressourcer, til regulering af hukommelsesforbrug og for I/O. For eksempel, for at kontrollere, om forfaderen til en socket på første niveau cgroupv2 matcher "system.slice"-masken, kan du bruge konstruktionen: ... socket cgroupv2 niveau 1 "system.slice"
  • Tilføjet muligheden for at kontrollere komponenter i SCTP-pakker (den funktionalitet, der kræves til dette, vises i Linux-kernen 5.14). For eksempel, for at kontrollere, om en pakke indeholder en chunk med typen 'data' og feltet 'type': ... sctp chunk data eksisterer ... sctp chunk data type 0
  • Udførelsen af ​​regelindlæsningsoperationen er blevet accelereret ca. to gange ved at bruge "-f"-flaget. Outputtet af listen over regler er også blevet fremskyndet.
  • En kompakt formular til kontrol af, om flagbits er sat, er tilvejebragt. For at kontrollere, at snat- og dnat-statusbits ikke er indstillet, kan du f.eks. angive: ... ct status ! snat,dnat for at kontrollere, at syn-bitten er sat i bitmasken syn,ack: ... tcp flag syn / syn,ack for at kontrollere, at fin og første bit ikke er sat i bitmasken syn,ack,fin,rst: ... tcp flag ! = fin, første / syn, ack, fin, første
  • Tillad nøgleordet "verdict" i definitioner af sæt/korttype: add map xm { typeof iifname . ip protokol th dport : dom ;}

Kilde: opennet.ru

Tilføj en kommentar