เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบเบญเบ‡ packet nftables 1.0.7 เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบžเบตเบกเบกเบฒ, unifying packet filtering interfaces เบชเปเบฒเบฅเบฑเบš IPv4, IPv6, ARP เปเบฅเบฐเบ‚เบปเบงเป€เบ„เบทเบญเบ‚เปˆเบฒเบ (เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบ—เบปเบ”เปเบ—เบ™ iptables, ip6table, arptables เปเบฅเบฐ ebtables). เบŠเบธเบ” nftables เบ›เบฐเบเบญเบšเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบฅเบฐเบ”เบฑเบš kernel เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบฅเบฐเบšเบปเบšเบเปˆเบญเบ nf_tables, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ Linux kernel เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ›เปˆเบญเบ 3.13. เบฅเบฐเบ”เบฑเบš kernel เบชเบฐเบซเบ™เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเปเบšเบšเป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบžเบฑเบเป€เบเบฑเบ”, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป„เบซเบผ.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ bytecode เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ bytecode เบ™เบตเป‰เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ kernel เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Netlink เปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ kernel เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบžเบดเป€เบชเบ”เบ—เบตเปˆเบฅเบฐเบ™เบถเบเป€เบ–เบดเบ‡ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™