αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ nftables 1.0.7

αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž“αŸƒαžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ nftables 1.0.7 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž– αžŠαŸ„αž™αž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ IPv4, IPv6, ARP αž“αž·αž„αžŸαŸ’αž–αžΆαž“αž”αžŽαŸ’αžαžΆαž‰ (αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‡αŸ†αž“αž½αžŸ iptables, ip6table, arptables αž“αž·αž„ ebtables)αŸ” αž€αž‰αŸ’αž…αž”αŸ‹ nftables αžšαž½αž˜αž˜αžΆαž“αžŸαž˜αžΆαžŸαž’αžΆαžαž»αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž„αžΆαžšαž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„ nf_tables αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 3.13 αŸ” αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžαŸ‚αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž―αž€αžšαžΆαž‡αŸ’αž™αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžšαž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžšαŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž…αŸ’αžšαŸ„αŸ‡ αž“αž·αž„αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž˜αž–αž·αž’αžΈαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆ bytecode αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ bytecode αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ Netlink αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž“αžΉαž€αžƒαžΎαž‰αžŠαž›αŸ‹ BPF (Berkeley Packet Filters)αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαž‘αŸ†αž αŸ†αž“αŸƒαž€αžΌαžŠαžαŸ’αžšαž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž› αž αžΎαž™αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž‰αŸ‚αž€ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž·αž’αžΈαž€αžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž αŸ†αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αŸ–

  • Для систСм с ядром Linux 6.2+ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сопоставлСния ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² vxlan, geneve, gre ΠΈ gretap, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простыС выраТСния для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π² инкапсулированных ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…. НапримСр, для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ IP-адрСса Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· VxLAN, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° (Π±Π΅Π· нСобходимости ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ дСинкапсуляции Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° VxLAN ΠΈ привязки Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΊ интСрфСйсу vxlan0): … udp dport 4789 vxlan ip protocol udp … udp dport 4789 vxlan ip saddr 1.2.3.0/24 … udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° автоматичСского слияния остатков послС частичного удалСния элСмСнта set-списка, Ρ‡Ρ‚ΠΎ позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (Ρ€Π°Π½ΡŒΡˆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ). НапримСр, послС удалСния элСмСнта 25 ΠΈΠ· set-списка с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ 24-30 ΠΈ 40-50 Π² спискС останутся 24, 26-30 ΠΈ 40-50. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ автослияния, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… выпусках ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ ядра 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°Ρ†ΠΈΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΏΡ€ΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ трансляции адрСсов (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° выраТСния Β«lastΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ врСмя послСднСго использования элСмСнта ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ set-списка. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поддСрТиваСтся начиная с ядра Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния ΠΊΠ²ΠΎΡ‚ Π² set-списках. НапримСр, для опрСдСлСния ΠΊΠ²ΠΎΡ‚Ρ‹ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ IP-адрСса, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device Β«eth0Β» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device Β«eth0Β» priority filter; policy accept; ip daddr @y drop } }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС констант Π² set-списках. НапримСр, ΠΏΡ€ΠΈ использования Π² качСствС ΠΊΠ»ΡŽΡ‡Π° списка адрСса назначСния ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° VLAN ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«destroyΒ» для Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ delete Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ENOENT ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ удалСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ядро Linux 6.3-rc. destroy table ip filter

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹