nftables pakkefilter 1.0.3 utgivelse

Utgivelsen av pakkefilter nftables 1.0.3 har blitt publisert, og samler pakkefiltreringsgrensesnitt for IPv4, IPv6, ARP og nettverksbroer (rettet mot å erstatte iptables, ip6table, arptables og ebtables). Endringene som kreves for at nftables 1.0.3-utgivelsen skal fungere er inkludert i Linux 5.18-kjernen.

nftables-pakken inkluderer pakkefilterkomponenter som kjører i brukerrom, mens kjernenivået leveres av nf_tables-undersystemet, som har vært en del av Linux-kjernen siden utgivelse 3.13. På kjernenivå er det bare et generisk protokolluavhengig grensesnitt som gir grunnleggende funksjoner for å trekke ut data fra pakker, utføre operasjoner på data og kontrollere flyten.

Selve filtreringsreglene og protokollspesifikke behandlere kompileres til brukerromsbytekode, hvoretter denne bytekoden lastes inn i kjernen ved hjelp av Netlink-grensesnittet og kjøres i kjernen i en spesiell virtuell maskin som ligner BPF (Berkeley Packet Filters). Denne tilnærmingen gjør det mulig å redusere størrelsen på filtreringskoden som kjører på kjernenivå betydelig og flytte alle funksjonene til parsingsregler og logikken for å jobbe med protokoller inn i brukerområdet.

Hovedinnovasjoner:

  • Settlister støtter nå samsvarende nettverksgrensesnittnavn med en maske, for eksempel spesifisert med "*"-symbolet: tabell inet testifsets { set simple_wild { type ifname flagger intervallelementer = { "abcdef*", "othername", "ppp0" } } kjede v4icmp { type filter krok inngangsprioritet 0; politikk akseptere; iifname @simple_wild tellerpakker 0 byte 0 iifname { “abcdef*”, “eth0” } tellerpakker 0 byte 0 } }
  • Implementert automatisk sammenslåing av kryssende settlisteelementer under drift. Tidligere, da alternativet "automatisk sammenslåing" ble angitt, ble sammenslåingen utført på stadiet for å deklarere reglene, men nå fungerer det også når nye elementer legges til trinnvis under drift. For eksempel, på deklarasjonsstadiet, settet listesettet y { flaggintervall automatisk sammenslåingselementer = { 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 } } vil bli omgjort til elementer = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } og hvis du legger til nye elementer # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } vil se ut som elementer = { 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 fjerner individuelle elementer fra listen som faller innenfor eksisterende områdeelementer, forkortes eller splittes området.

  • Støtte for å kombinere regler for flere adresseoversettelse (NAT) til en kartliste er lagt til regeloptimereren, kalt når alternativet "-o/—optimize" er spesifisert. For eksempel, for settet # cat ruleset.nft tabellen ip x { chain y { type nat krok postrouting priority srcnat; politikk fall; 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 } }

    å utføre "nft -o -c -f ruleset.nft" vil konvertere de separate "ip saddr"-reglene til en kartliste: 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åte kan råuttrykk konverteres til kartlister: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto 62 natst78-160,128 goto 0 0 31393032383939353831343037320x5301e62e goto nat_dns_this_78 utp-lengde 160,128-0 @th,0 31363436323733373931323934300x5301e62e goto nat_dns_saturn_78 udp-lengde 160,128-0 @th,0 32393535373539353636383732310x5302e62 78 160,128 0 0 38353439353637323038363633390 5303 XNUMX XNUMX XNUMXe goto nat_dns_saturn_XNUMX udp lengde XNUMX-XNUMX @th,XNUMX XNUMXxXNUMXeXNUMXe goto nat_dns_saturn_XNUMX drop } }

    etter optimalisering får vi en kartliste: 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 }

  • Bruk av råuttrykk i sammenkoblingsoperasjoner er tillatt. For eksempel: #nft legg til 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 elementer = { 1.1.1.1. 0x14 } } }
  • Lagt til støtte for å spesifisere heltallsoverskriftsfelt i sammenkoblingsoperasjoner: tabell inet t { map m1 { typeof udp length . @ih,32,32: dom flagger intervallelementer = { 20-80. 0x14 : godta, 1-10 . 0xa : drop } } kjede c { type filter krok inngangsprioritet 0; politikk fall; utp lengde. @ih,32,32 vmap @m1 } }
  • Lagt til støtte for tilbakestilling av TCP-alternativer (fungerer bare med Linux-kjerne 5.18+): tcp-flagger syn tilbakestill tcp-alternativet sack-perm
  • Utførelsen av kjedeutgangskommandoer ("nft list chain xy") har blitt fremskyndet.

Kilde: opennet.ru

Legg til en kommentar