nftables paketfilter 1.0.3 release

Utgivningen av paketfilter nftables 1.0.3 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). De ändringar som krävs för att nftables 1.0.3-versionen ska fungera ingår i Linux 5.18-kärnan.

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:

  • Uppsättningslistor stöder nu matchande nätverksgränssnittsnamn med en mask, till exempel, specificerad med "*"-symbolen: tabell inet testifsets { set simple_wild { typ ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } kedja v4icmp { typ filter krok ingångsprioritet 0; policy acceptera; iifname @simple_wild räknarepaket 0 byte 0 iifname { “abcdef*”, “eth0” } räknarepaket 0 byte 0 } }
  • Implementerat automatisk sammanslagning av korsande set-list-element under drift. Tidigare, när alternativet "auto-merge" ställdes in, utfördes sammanslagningen i stadiet för att deklarera reglerna, men nu fungerar det också när nya element läggs till stegvis under drift. Till exempel, på deklarationsstadiet, listuppsättningen y { flaggintervall auto-merge element = { 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 } } kommer att omvandlas till element = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } och sedan om du lägger till nya element # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } kommer att se ut som element = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    När du tar bort enskilda objekt från listan som faller inom befintliga intervallobjekt förkortas intervallet eller delas upp.

  • Stöd för att kombinera regler för multipel adressöversättning (NAT) till en kartlista har lagts till i regeloptimeraren, anropad när alternativet "-o/—optimize" är specificerat. Till exempel, för uppsättningen # cat ruleset.nft tabellen ip x { chain y { typ nat hook postrouting priority srcnat; minskning av politiken; ip saddr 1.1.1.1 tcp dport 8000 snat till 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat till 5.5.5.5:90 } }

    att köra "nft -o -c -f ruleset.nft" kommer att konvertera de separata "ip saddr"-reglerna till en kartlista: snat till 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å samma sätt kan råuttryck konverteras till kartlistor: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto 62 natp 78 160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 utp längd 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp längd 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62 78 160,128 0 0 38353439353637323038363633390 5303e goto nat_dns_saturn_XNUMX udp längd XNUMX-XNUMX @th,XNUMX XNUMXxXNUMXeXNUMXe goto nat_dns_saturn_XNUMX drop } }

    efter optimering får vi en kartlista: 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 }

  • Användning av råa uttryck i sammanlänkningsoperationer är tillåten. Till exempel: #nft lägg till regel xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } eller tabell x { set y { typeof ip saddr . @ih,32,32 element = { 1.1.1.1 . 0x14 } } }
  • Tillagt stöd för att ange heltalsrubrikfält i sammanlänkningsoperationer: tabell inet t { map m1 { typeof udp length . @ih,32,32 : domflaggor intervallelement = { 20-80 . 0x14 : acceptera, 1-10 . 0xa : drop } } kedja c { typ filter krok ingångsprioritet 0; minskning av politiken; udp längd. @ih,32,32 vmap @m1 } }
  • Tillagt stöd för att återställa TCP-alternativ (fungerar bara med Linux-kärna 5.18+): tcp-flaggor syn återställ tcp-alternativ sack-perm
  • Utförandet av kommandon för kedjeutgång ("nft list chain xy") har påskyndats.

Källa: opennet.ru

Lägg en kommentar