nftables packet filter 1.0.0 release

Ang paglabas ng packet filter nftables 1.0.0 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). Ang mga pagbabagong kinakailangan para gumana ang nftables 1.0.0 release ay kasama sa Linux 5.13 kernel. Ang isang makabuluhang pagbabago sa numero ng bersyon ay hindi nauugnay sa anumang mga pangunahing pagbabago, ngunit ito ay bunga lamang ng pare-parehong pagpapatuloy ng pagnunumero sa decimal notation (ang nakaraang release ay 0.9.9).

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:

  • Ang suporta para sa elemento ng maskara na "*" ay idinagdag sa mga listahan ng hanay, na na-trigger para sa anumang mga pakete na hindi nasa ilalim ng iba pang mga elemento na tinukoy sa set. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; pagtanggap ng patakaran; ip saddr vmap @blocklist } }
  • Posibleng tukuyin ang mga variable mula sa command line gamit ang opsyong "--define". # cat test.nft table netdev x { chain y { type filter hook ingress device = $dev priority 0; pagbaba ng patakaran; } } # nft β€”define dev="{ eth0, eth1 }" -f test.nft
  • Sa mga listahan ng mapa, pinapayagan ang paggamit ng mga pare-parehong (stateful) na mga expression: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; pagtanggap ng patakaran; iif vmap { "lo" : jump wan_input } } }
  • Idinagdag ang command na "list hooks" para magpakita ng listahan ng mga handler para sa isang partikular na pamilya ng packet: # 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 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000225 chain ip ac [nf_tables] 4 } hook postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • Ang mga bloke ng queue ay nagbibigay-daan sa mga expression ng jhash, symhash, at numgen na pagsamahin upang ipamahagi ang mga packet sa mga pila sa espasyo ng gumagamit. … queue to symhash mod 65536 … queue flags bypass to numgen inc mod 65536 … queue to jhash oif . Ang meta mark mod 32 "queue" ay maaari ding isama sa mga listahan ng mapa upang pumili ng pila sa espasyo ng user batay sa mga arbitrary key. ... ang mga flag ng pila ay bypass sa oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Posibleng palawakin ang mga variable na may kasamang set na listahan sa ilang mga mapa. tukuyin ang mga interface = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; pagtanggap ng patakaran; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; pagtanggap ng patakaran; iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop } } }
  • Ang pagsasama-sama ng vmaps (verdict map) sa mga pagitan ay pinapayagan: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : tanggapin }
  • Pinasimpleng syntax para sa NAT mappings. Pinapayagan na tukuyin ang mga hanay ng address: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } o tahasang mga IP address at port: ... dnat to ip saddr map { 10.141.11.4 :192.168.2.3 : . 80 } o mga kumbinasyon ng mga saklaw at port ng IP: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Pinagmulan: opennet.ru

Magdagdag ng komento