nftables pakkefilter 1.0.3 udgivelse

nftables 1.0.3-pakkefilterudgivelsen er blevet offentliggjort, som forener pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). Ændringer, der kræves for at nftables 1.0.3-udgivelsen fungerer, er inkluderet i Linux 5.18-kernen.

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:

  • Set-lister understøtter nu matchende netværksgrænsefladenavne med en maske, for eksempel angivet ved hjælp af tegnet "*": tabel inet testifsets { set simple_wild { type ifname flag interval elements = { "abcdef*", "othername", "ppp0" } } kæde v4icmp { type filter hook input prioritet 0; politik acceptere; iifname @simple_wild tællerpakker 0 bytes 0 iifname { "abcdef*", "eth0" } tællerpakker 0 bytes 0 } }
  • Implementeret automatisk forening af krydsende sætlisteelementer under drift. Tidligere, når du indstillede "auto-fletning"-indstillingen, blev fletningen udført på stadiet, hvor reglerne blev erklæret, men nu fungerer det også, når der trinvist tilføjes nye elementer i processen. For eksempel, i deklarationstrinnet er listen sat y { flag interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8. 3.3.3.4, 3.3.3.5 , 1.2.3.0 } } bliver til elementer = { 24/3.3.3.3, 3.3.3.5-4.4.4.4, 4.4.4.8-1.2.3.0 } og hvis vi tilføjer nye elementer # nft tilføj element ip xy { 1.2.4.255 -3.3.3.6, 1.2.3.0 } bliver til elementer = { 1.2.4.255-3.3.3.3, 3.3.3.6-4.4.4.4, 4.4.4.8-XNUMX }

    Når du fjerner individuelle elementer fra listen, der falder inden for eksisterende områdeelementer, reduceres eller opdeles området.

  • Tilføjet understøttelse til at kombinere flere adresseoversættelsesregler (NAT) til en kortliste i den regeloptimering, der kaldes ved angivelse af "-o/--optimize"-indstillingen. For eksempel, for sættet # cat ruleset.nft tabellen ip x { chain y { type nat hook postrouting priority srcnat; politik fald; ip saddr 1.1.1.1 tcp dport 8000 snat til 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat til 5.5.5.5:90 } }

    udførelse af "nft -o -c -f ruleset.nft" vil konvertere de separate "ip saddr" regler til en kortliste: snat til ip saddr . tcp dport map {1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001:5.5.5.5. 90}

    På samme måde kan råudtryk også konverteres til kortlister: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 length @ goto nat_62cdns78, goto 160,128 0 0x31393032383939353831343037320e5301e goto nat_dns_this_62 udp-længde 78-160,128 @th,0 0x31363436323733373931323934300e5301e goto nat_dns_saturn_62 udp-længde 78-160,128 @th,0 0th, 32393535373539353636383732310 5302, 62 78 160,128 0 0 38353439353637323038363633390 5303 XNUMX XNUMXe goto nat_dns_saturn_XNUMX udp længde XNUMX-XNUMX @th,XNUMX XNUMXxXNUMXeXNUMXe goto nat_dns_saturn_XNUMX}

    efter optimering får vi en kort-liste: udp length . @th,160,128 vmap { 47-63. 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • Brugen af ​​rå udtryk i sammenkædningsoperationer er tilladt. For eksempel: # nft tilføje regel xy ip saddr . @ih,32,32 { 1.1.1.1. 0x14, 2.2.2.2. 0x1e } eller tabel x { sæt y { typeof ip saddr . @ih,32,32 elementer = { 1.1.1.1. 0x14 } } }
  • Tilføjet understøttelse til angivelse af heltalsoverskriftsfelter i sammenkædningsoperationer: tabel inet t { map m1 { typeof udp length . @ih,32,32: domflags intervalelementer = {20-80. 0x14 : accepter, 1-10 . 0xa : drop } } kæde c { type filter krog input prioritet 0; politik fald; udp længde. @ih,32,32 vmap @m1 } }
  • Tilføjet understøttelse af nulstilling af TCP-indstillinger (virker kun med Linux-kerne 5.18+): tcp-flag syn reset tcp-option sack-perm
  • Hurtigere udførelse af kædeoutputkommandoer ("nft list chain xy").

Kilde: opennet.ru

Tilføj en kommentar