nftables pakkefilter 1.0.1 udgivelse

Frigivelsen af ​​pakkefilter nftables 1.0.1 er blevet offentliggjort, som forener pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). De ændringer, der kræves for at nftables 1.0.1-udgivelsen fungerer, er inkluderet i Linux-kernen 5.16-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:

  • Reduceret hukommelsesforbrug ved indlæsning af store sæt- og kortlister.
  • Genindlæsning af sæt- og kortlister er blevet fremskyndet.
  • Outputtet af udvalgte tabeller og kæder i store regelsæt er blevet accelereret. For eksempel er udførelsestiden for kommandoen "nft list ruleset" for at vise et sæt regler med 100 tusind rækker 3.049 sekunder, og når kun nat- og filtertabellerne udlæses ("nft list table nat", "nft list table filter" ”) reduceres til 1.969 og 0.697 sekunder.
  • Udførelsen af ​​forespørgsler med "--terse"-indstillingen er blevet fremskyndet ved behandling af regler med store sæt- og kortlister.
  • Det er muligt at filtrere trafik fra "egress" kæden, som behandles på samme niveau som egress handleren i netdev kæden (egress hook), dvs. på det stadie, hvor driveren modtager en pakke fra kernenetværksstakken. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } prioritet 0; metaprioritet sæt ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
  • Tillader matchning og modifikation af bytes i headeren og indholdet af en pakke ved en given offset. # nft tilføje regel xy @ih,32,32 0x14000000 tæller # nft tilføje regel xy @ih,32,32 sæt 0x14000000 tæller

Kilde: opennet.ru

Tilføj en kommentar