nftables paka filtrilo 1.0.3 eldono

La liberigo de paka filtrilo nftables 1.0.3 estis publikigita, unuigante pakaĵetfiltrilinterfacojn por IPv4, IPv6, ARP kaj retaj pontoj (celitaj por anstataŭigi iptables, ip6table, arptables kaj ebtables). La ŝanĝoj necesaj por ke la eldono nftables 1.0.3 funkciu estas inkluzivitaj en la Linukso 5.18-kerno.

La nftables-pakaĵo inkluzivas pakatajn filtrilkomponentojn, kiuj funkcias en uzantspaco, dum la kernnivela laboro estas disponigita de la subsistemo nf_tables, kiu estis parto de la Linukso-kerno ekde eldono 3.13. La kernnivelo disponigas nur senmarkan protokol-sendependan interfacon kiu disponigas bazajn funkciojn por eltiri datenojn de pakaĵetoj, elfarante datumoperaciojn, kaj fluokontrolon.

La filtraj reguloj mem kaj protokol-specifaj pritraktiloj estas kompilitaj en uzantspacan bajtkodon, post kiu tiu bajtokodo estas ŝarĝita en la kernon uzante la Netlink-interfacon kaj efektivigita en la kerno en speciala virtuala maŝino simila al BPF (Berkeley Packet Filters). Ĉi tiu aliro ebligas signife redukti la grandecon de la filtra kodo funkcianta ĉe la kernnivelo kaj movi ĉiujn funkciojn de analizaj reguloj kaj la logikon labori kun protokoloj en uzantspacon.

Ĉefaj novigoj:

  • Aro-listoj nun subtenas kongruajn retinterfacajn nomojn per masko, ekzemple, specifita per la simbolo “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } ĉeno v4icmp { tipo filtrila hoko enigo prioritato 0; politiko akcepti; iifname @simple_wild nombrilo pakoj 0 bajtoj 0 iifname { “abcdef*”, “eth0” } nombrilo pakoj 0 bajtoj 0 } }
  • Efektivigite aŭtomata kunfandado de intersekciĝantaj aro-listoj dum operacio. Antaŭe, kiam la opcio "aŭtomata kunfandiĝo" estis agordita, la kunfandiĝo estis farita en la stadio de deklarado de la reguloj, sed nun ĝi ankaŭ funkcias kiam novaj elementoj estas pliige aldonitaj dum operacio. Ekzemple, ĉe la deklara stadio, la listo aro y { flags interval aŭto-kunfandi elementojn = { 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 } } estos igitaj elementoj = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } kaj tiam se vi aldonas novajn elementojn # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } aspektos kiel elementoj = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Kiam vi forigas individuajn erojn el la listo, kiuj apartenas al ekzistantaj intervaleroj, la intervalo estas mallongigita aŭ dividita.

  • Subteno por kombini plurajn adrestradukadon (NAT) regulojn en mapliston estis aldonita al la reguloj-optimumiganto, nomita kiam la opcio "-o/—optimize" estas specifita. Ekzemple, por la aro # cat ruleset.nft table ip x { chain y { type nat hook postrouting prioritato srcnat; politika guto; ip saddr 1.1.1.1 tcp dport 8000 snat al 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat al 5.5.5.5:90} }

    ekzekuti "nft -o -c -f ruleset.nft" konvertigos la apartajn "ip saddr" regulojn en mapliston: snat al ip saddr . tcp dport mapo { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Simile, krudaj esprimoj povas esti konvertitaj en maplistojn: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 ,62 78x160,128e0e goto nat_dns_this_0 udp-longo 31393032383939353831343037320-5301 @th,62 78x160,128e0e goto nat_dns_saturn_0 udp-longo 31363436323733373931323934300-5301 @th,62 78x160,128 0e goto nat_dns_saturn_0 udp length 32393535373539353636383732310-5302 @th,62 78x160,128e0e goto nat_dns_saturn_0 drop } 38353439353637323038363633390

    post optimumigo ni ricevas mapliston: 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 }

  • La uzo de krudaj esprimoj en kunligaj operacioj estas permesita. Ekzemple: #nft aldonu regulon xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2. 0x1e } aŭ tablo x { set y { typeof ip saddr . @ih,32,32 elementoj = { 1.1.1.1 . 0x14 } } }
  • Aldonita subteno por specifi entjerajn kapkampojn en kunligaj operacioj: table inet t { map m1 { typeof udp length . @ih,32,32 : verdikto flags intervalelementoj = { 20-80 . 0x14 : akcepti, 1-10 . 0xa : guto } } ĉeno c { tipo filtrila hoko enigo prioritato 0; politika guto; udp-longo. @ih,32,32 vmap @m1 } }
  • Aldonita subteno por restarigi TCP-opciojn (nur funkcias kun Linukso-kerno 5.18+): tcp flags syn reset tcp opcio sack-perm
  • La ekzekuto de ĉenaj eligkomandoj ("nft list chain xy") estis akcelita.

fonto: opennet.ru

Aldoni komenton