nftables packet filter 1.0.3 release

Ang paglabas ng packet filter nftables 1.0.3 ay nai-publish, na pinag-iisa ang packet filtering interface para sa IPv4, IPv6, ARP at network bridges (na naglalayong palitan ang mga iptables, ip6table, arptables at ebtables). Ang mga pagbabagong kinakailangan para gumana ang nftables 1.0.3 release ay kasama sa Linux 5.18 kernel.

Kasama sa package ng nftables ang mga bahagi ng packet filter na tumatakbo sa espasyo ng gumagamit, habang ang gawain sa antas ng kernel ay ibinibigay ng subsystem ng nf_tables, na naging bahagi ng Linux kernel mula noong inilabas ang 3.13. Ang antas ng kernel ay nagbibigay lamang ng isang generic na protocol-independent na interface na nagbibigay ng mga pangunahing function para sa pagkuha ng data mula sa mga packet, pagsasagawa ng mga operasyon ng data, at kontrol sa daloy.

Ang mga panuntunan sa pag-filter at mga humahawak na partikular sa protocol ay pinagsama-sama sa bytecode sa espasyo ng gumagamit, pagkatapos nito ay na-load ang bytecode na ito sa kernel gamit ang interface ng Netlink at isinagawa sa kernel sa isang espesyal na virtual machine na nakapagpapaalaala sa BPF (Berkeley Packet Filters). Ang diskarte na ito ay nagbibigay-daan sa iyo upang makabuluhang bawasan ang laki ng filtering code na tumatakbo sa antas ng kernel at ilipat ang lahat ng mga function ng mga panuntunan sa pag-parse at lohika para sa pagtatrabaho sa mga protocol sa espasyo ng gumagamit.

Mga pangunahing inobasyon:

  • Sinusuportahan na ngayon ng mga listahan ng set ang pagtutugma ng mga pangalan ng interface ng network sa pamamagitan ng isang mask, halimbawa, tinukoy gamit ang simbolo na β€œ*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { β€œabcdef*”, β€œothername”, β€œppp0” } } chain v4icmp { type filter hook input priority 0; pagtanggap ng patakaran; iifname @simple_wild counter packet 0 bytes 0 iifname { β€œabcdef*”, β€œeth0” } counter packets 0 bytes 0 } }
  • Ipinatupad ang awtomatikong pagsasama ng mga intersecting na elemento ng set-list sa panahon ng operasyon. Dati, kapag naitakda ang opsyong "auto-merge", ang pagsasama ay isinagawa sa yugto ng pagdedeklara ng mga panuntunan, ngunit ngayon ay gumagana rin ito kapag ang mga bagong elemento ay unti-unting idinagdag sa panahon ng operasyon. Halimbawa, sa yugto ng deklarasyon, ang list set y { flags 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 } } ay gagawing mga elemento = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } at pagkatapos ay kung magdagdag ka ng mga bagong elemento # nft magdagdag ng elemento ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } ay magmumukhang mga elemento = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Kapag nag-alis ka ng mga indibidwal na item mula sa listahang nasa loob ng mga umiiral nang item sa hanay, paiikliin o hahatiin ang hanay.

  • Ang suporta para sa pagsasama-sama ng maramihang mga panuntunan sa pagsasalin ng address (NAT) sa isang listahan ng mapa ay idinagdag sa optimizer ng mga panuntunan, na tinatawag kapag tinukoy ang opsyong β€œ-o/β€”optimize”. Halimbawa, para sa set # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; pagbaba ng patakaran; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } }

    Ang pagpapatupad ng "nft -o -c -f ruleset.nft" ay magko-convert sa hiwalay na "ip saddr" na mga panuntunan sa isang listahan ng mapa: snat to 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}

    Sa katulad na paraan, ang mga raw na expression ay maaaring i-convert sa mga listahan ng mapa: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto, 62nd_c na 78nd na goto 160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 haba ng udp 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 haba ng udp 62-78 @th,160,128 0x0e32393535373539353636383732310 5302e goto nat_dns_saturn_62 udp length 78-160,128 @th,0 0x38353439353637323038363633390e5303e goto nat_dns_saturn_XNUMX drop } }

    pagkatapos ng pag-optimize nakakakuha kami ng listahan ng mapa: udp length . @ika,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 }

  • Ang paggamit ng mga raw na expression sa mga operasyon ng concatenation ay pinapayagan. Halimbawa: #nft magdagdag ng panuntunan xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } o table x { set y { typeof ip saddr . @ih,32,32 elemento = { 1.1.1.1 . 0x14 } } }
  • Nagdagdag ng suporta para sa pagtukoy ng mga integer na patlang ng header sa mga pagpapatakbo ng concatenation: table inet t { map m1 { typeof udp length . @ih,32,32 : mga elemento ng pagitan ng mga flag ng hatol = { 20-80 . 0x14 : tanggapin, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; pagbaba ng patakaran; haba ng udp. @ih,32,32 vmap @m1 } }
  • Nagdagdag ng suporta para sa pag-reset ng mga opsyon sa TCP (gumagana lang sa Linux kernel 5.18+): tcp flags syn reset tcp option sack-perm
  • Ang pagpapatupad ng mga chain output command ("nft list chain xy") ay pinabilis.

Pinagmulan: opennet.ru

Magdagdag ng komento