nftables paka filtrilo 1.0.0 eldono

La liberigo de paka filtrilo nftables 1.0.0 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.0 funkciu estas inkluzivitaj en la Linukso 5.13-kerno. Signifa ŝanĝo en la versio-numero ne estas rilata al iuj fundamentaj ŝanĝoj, sed estas nur sekvo de la konsekvenca daŭrigo de numerado en dekuma notacio (la antaŭa eldono estis 0.9.9).

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:

  • Subteno por la "*" masko-elemento estis aldonita al aro-listoj, kiu estas ekigita por iuj pakaĵoj, kiuj ne apartenas al aliaj elementoj difinitaj en la aro. table x { map blocklist { type ipv4_addr : verdikto flags interval elements = { 192.168.0.0/16 : akcepti, 10.0.0.0/8 : akcepti, * : drop } } chain y { type filter hook prerouting prioritato 0; politiko akcepti; ip saddr vmap @blocklist } }
  • Eblas difini variablojn el la komandlinio uzante la opcion "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev prioritato 0; politika guto; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • En maplistoj, la uzo de konstantaj (ŝtataj) esprimoj estas permesita: tabelo inet filter { map portmap { type inet_service : verdict counter elements = { 22 nombrilaj pakoj 0 bajtoj 0 : salto ssh_input, * nombrilo pakoj 0 bajtoj 0 : drop } } ĉeno ssh_input { } ĉeno wan_input { tcp dport vmap @portmap } ĉeno prerouting { type filter hook prerouting prioritato kruda; politiko akcepti; iif vmap { "lo" : salti wan_input } } }
  • Aldonita "list hooks" komando por montri liston de pritraktiloj por donita paka familio: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 ĉeno ip ab [nf_tables] +0000000300 ĉeno inet mz [nf_tables] } hoko antaŭen { -0000000225 selinux_ipv4_forward 0000000000 ĉeno ip ac [nf_tables eligo] -0000000225 contre contreraro meti } hook postroute { +4 0000000225 selinux_ipv4_postroute } }
  • Vicoblokoj permesas jhash, symhash, kaj numgen-esprimojn esti kombinitaj por distribui pakaĵetojn al atendovicoj en uzantspaco. … atendovico al symhash mod 65536 … atendovico flagoj preterpasi al numgen inc mod 65536 … atendovico al jhash oif . metamark mod 32 "queue" ankaŭ povas esti kombinita kun maplistoj por elekti voston en uzantspaco bazita sur arbitraj ŝlosiloj. ... atendovicaj flagoj preterpasas al oifname-mapo { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Eblas vastigi variablojn kiuj inkluzivas aro-liston en plurajn mapojn. difini interfacojn = { eth0, eth1 } table ip x { chain y { type filter hook enigo prioritato 0; politiko akcepti; iifname vmap { lo : akcepti, $interfacoj : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook enigo prioritato 0; politiko akcepti; iifname vmap { "lo" : akcepti, "eth0" : drop, "eth1" : drop } } }
  • Kombini vmapojn (verdikta mapo) je intervaloj estas permesita: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : akcepti }
  • Simpligita sintakso por NAT-mapadoj. Permesita specifi adresintervalojn: ... snat al ip saddr-mapo { 10.141.11.4 : 192.168.2.2-192.168.2.4 } aŭ eksplicitaj IP-adresoj kaj havenoj: ... dnat al ip saddr-mapo { 10.141.11.4 : 192.168.2.3. . 80 } aŭ kombinaĵoj de IP-intervaloj kaj havenoj: ... dnat to ip saddr . tcp dport mapo { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

fonto: opennet.ru

Aldoni komenton