nftables packet filter 0.9.9 release

Ang paglabas ng packet filter nftables 0.9.9 ay nai-publish, na pinag-iisa ang packet filtering interface para sa IPv4, IPv6, ARP at network bridges (na naglalayong palitan ang mga iptable, ip6table, arptables at ebtables). Kasabay nito, ang paglabas ng kasamang library na libnftnl 1.2.0 ay na-publish, na nagbibigay ng mababang antas ng API para sa pakikipag-ugnayan sa nf_tables subsystem. Ang mga pagbabagong kinakailangan para gumana ang nftables 0.9.9 release ay kasama sa Linux kernel 5.13-rc1.

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:

  • Naipatupad na ang kakayahang ilipat ang pagpoproseso ng flowtable sa bahagi ng network adapter, na pinagana gamit ang flag na 'offload'. Ang Flowtable ay isang mekanismo para sa pag-optimize ng landas ng pag-redirect ng packet, kung saan ang kumpletong pagpasa ng lahat ng chain processing ng panuntunan ay inilalapat lamang sa unang packet, at lahat ng iba pang packet sa daloy ay direktang ipinapasa. table ip global { flowtable f { hook ingress priority filter + 1 device = { lan3, lan0, wan } flag offload } chain forward { type filter hook forward priority filter; pagtanggap ng patakaran; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; pagtanggap ng patakaran; oifname "wan" masquerade } }
  • Nagdagdag ng suporta para sa pag-attach ng flag ng may-ari sa isang talahanayan upang matiyak ang eksklusibong paggamit ng talahanayan sa pamamagitan ng isang proseso. Kapag natapos ang isang proseso, awtomatikong tatanggalin ang talahanayang nauugnay dito. Ang impormasyon tungkol sa proseso ay ipinapakita sa mga panuntunan dump sa anyo ng isang komento: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; pagtanggap ng patakaran; mga counter packet 1 byte 309 } }
  • Nagdagdag ng suporta para sa detalye ng IEEE 802.1ad (VLAN stacking o QinQ), na tumutukoy sa isang paraan para sa pagpapalit ng maraming VLAN tag sa isang Ethernet frame. Halimbawa, para suriin ang uri ng external na Ethernet frame 8021ad at vlan id=342, maaari mong gamitin ang construction ... ether type 802.1ad vlan id 342 para tingnan ang external na uri ng Ethernet frame 8021ad/vlan id=1, nested 802.1 q/vlan id=2 at karagdagang IP packet encapsulation: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Nagdagdag ng suporta para sa pamamahala ng mga mapagkukunan gamit ang pinag-isang hierarchy cgroups v2. Ang pangunahing pagkakaiba sa pagitan ng mga cgroup v2 at v1 ay ang paggamit ng isang karaniwang hierarchy ng cgroups para sa lahat ng uri ng mga mapagkukunan, sa halip na mga hiwalay na hierarchy para sa paglalaan ng mga mapagkukunan ng CPU, para sa pag-regulate ng pagkonsumo ng memorya, at para sa I/O. Halimbawa, upang suriin kung ang ninuno ng isang socket sa unang antas na cgroupv2 ay tumutugma sa "system.slice" mask, maaari mong gamitin ang construction: ... socket cgroupv2 level 1 "system.slice"
  • Idinagdag ang kakayahang suriin ang mga bahagi ng mga SCTP packet (ang pag-andar na kinakailangan para dito ay lilitaw sa Linux 5.14 kernel). Halimbawa, upang suriin kung ang isang packet ay naglalaman ng isang tipak na may uri ng 'data' at patlang na 'uri': ... sctp chunk data ay umiiral ... sctp chunk data type 0
  • Ang pagpapatupad ng pagpapatakbo ng pag-load ng panuntunan ay pinabilis ng humigit-kumulang dalawang beses gamit ang flag na "-f". Ang output ng listahan ng mga panuntunan ay pinabilis din.
  • Isang compact form para sa pagsuri kung ang mga flag bit ay nakatakda. Halimbawa, upang suriin na ang snat at dnat status bit ay hindi nakatakda, maaari mong tukuyin ang: ... ct status ! snat,dnat upang suriin kung ang syn bit ay nakatakda sa bitmask syn,ack: ... tcp flags syn / syn,ack upang suriin na ang fin at unang bit ay hindi nakatakda sa bitmask syn,ack,fin,rst: ... tcp flags! = fin,rst / syn,ack,fin,rst
  • Payagan ang "verdict" na keyword sa set/map typeof definitions: magdagdag ng map xm { typeof iifname . ip protocol ika-dport : hatol ;}

Pinagmulan: opennet.ru

Magdagdag ng komento