ะžะฟัƒะฑะปะธะบะพะฒะฐะฝ ะฒั‹ะฟัƒัะบ ะฟะฐะบะตั‚ะฝะพะณะพ ั„ะธะปัŒั‚ั€ะฐ nftables 0.9.9, ัƒะฝะธั„ะธั†ะธั€ัƒัŽั‰ะตะณะพ ะธะฝั‚ะตั€ั„ะตะนัั‹ ั„ะธะปัŒั‚ั€ะฐั†ะธะธ ะฟะฐะบะตั‚ะพะฒ ะดะปั IPv4, IPv6, ARP ะธ ัะตั‚ะตะฒั‹ั… ะผะพัั‚ะพะฒ (ะฝะฐั†ะตะปะตะฝ ะฝะฐ ะทะฐะผะตะฝัƒ iptables, ip6table, arptables ะธ ebtables). ะžะดะฝะพะฒั€ะตะผะตะฝะฝะพ ะพะฟัƒะฑะปะธะบะพะฒะฐะฝ ะฒั‹ะฟัƒัะบ ัะพะฟัƒั‚ัั‚ะฒัƒัŽั‰ะตะน ะฑะธะฑะปะธะพั‚ะตะบะธ libnftnl 1.2.0, ะฟั€ะตะดะพัั‚ะฐะฒะปััŽั‰ะตะน ะฝะธะทะบะพัƒั€ะพะฒะฝะตะฒั‹ะน API ะดะปั ะฒะทะฐะธะผะพะดะตะนัั‚ะฒะธั ั ะฟะพะดัะธัั‚ะตะผะพะน nf_tables. ะะตะพะฑั…ะพะดะธะผั‹ะต ะดะปั ั€ะฐะฑะพั‚ั‹ ะฒั‹ะฟัƒัะบะฐ nftables 0.9.9 ะธะทะผะตะฝะตะฝะธั ะฒะบะปัŽั‡ะตะฝั‹ ะฒ ัะพัั‚ะฐะฒ ัะดั€ะฐ Linux 5.13-rc1.

เบŠเบธเบ” nftables เบ›เบฐเบเบญเบšเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบฅเบฐเบ”เบฑเบš kernel เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบฅเบฐเบšเบปเบšเบเปˆเบญเบ nf_tables, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ Linux kernel เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ›เปˆเบญเบ 3.13. เบฅเบฐเบ”เบฑเบš kernel เบชเบฐเบซเบ™เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเปเบšเบšเป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบžเบฑเบเป€เบเบฑเบ”, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป„เบซเบผ.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ bytecode เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ bytecode เบ™เบตเป‰เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ kernel เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Netlink เปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ kernel เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบžเบดเป€เบชเบ”เบ—เบตเปˆเบฅเบฐเบ™เบถเบเป€เบ–เบดเบ‡ BPF (Berkeley Packet Filters). เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเปเบเปˆเบ™เปเบฅเบฐเบเป‰เบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เปเบเบเปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒเบ•เบปเป‰เบ™เบ•เป:

  • ะ ะตะฐะปะธะทะพะฒะฐะฝะฐ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะฒั‹ะฝะพัะฐ ะพะฑั€ะฐะฑะพั‚ะบะธ flowtable ะฝะฐ ัั‚ะพั€ะพะฝัƒ ัะตั‚ะตะฒะพะณะพ ะฐะดะฐะฟั‚ะตั€ะฐ, ะฒะบะปัŽั‡ะฐะตะผะฐั ะฟั€ะธ ะฟะพะผะพั‰ะธ ั„ะปะฐะณะฐ โ€˜offloadโ€™. Flowtable ะฟั€ะตะดัั‚ะฐะฒะปัะตั‚ ัะพะฑะพะน ะผะตั…ะฐะฝะธะทะผ ะพะฟั‚ะธะผะธะทะฐั†ะธะธ ะฟัƒั‚ะธ ะฟะตั€ะตะฝะฐะฟั€ะฐะฒะปะตะฝะธั ะฟะฐะบะตั‚ะพะฒ, ะฟั€ะธ ะบะพั‚ะพั€ะพะผ ะฟะพะปะฝะพะต ะฟั€ะพั…ะพะถะดะตะฝะธะต ะฒัะตั… ั†ะตะฟะพั‡ะตะบ ะพะฑั€ะฐะฑะพั‚ะบะธ ะฟั€ะฐะฒะธะป ะฟั€ะธะผะตะฝัะตั‚ัั ั‚ะพะปัŒะบะพ ะดะปั ะฟะตั€ะฒะพะณะพ ะฟะฐะบะตั‚ะฐ, ะฐ ะฒัะต ะพัั‚ะฐะปัŒะฝั‹ะต ะฟะฐะบะตั‚ั‹ ะฒ ะฟะพั‚ะพะบะต ะฟั€ะพะฑั€ะฐัั‹ะฒะฐั‚ัŒ ะฝะฐะฟั€ัะผัƒัŽ. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname ยซwanยป masquerade } }
  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ะฟั€ะธะบั€ะตะฟะปะตะฝะธั ะบ ั‚ะฐะฑะปะธั†ะต ั„ะปะฐะณะฐ ะดะปั ะฟั€ะธะฒัะทะบะธ ะบ ะฒะปะฐะดะตะปัŒั†ัƒ, ะบะพั‚ะพั€ั‹ะน ะฟะพะทะฒะพะปัะตั‚ ะพะฑะตัะฟะตั‡ะธั‚ัŒ ัะบัะบะปัŽะทะธะฒะฝะพะต ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ั‚ะฐะฑะปะธั†ั‹ ะฟั€ะพั†ะตััะพะผ. ะŸั€ะธ ะทะฐะฒะตั€ัˆะตะฝะธะธ ะฟั€ะพั†ะตััะฐ ะฟั€ะธะฒัะทะฐะฝะฝะฐั ะบ ะฝะตะผัƒ ั‚ะฐะฑะปะธั†ะฐ ะฐะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปัะตั‚ัั. ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ ะฟั€ะพั†ะตััะต ะพั‚ะพะฑั€ะฐะถะฐะตั‚ัั ะฒ ะดะฐะผะฟะต ะฟั€ะฐะฒะธะป ะฒ ั„ะพั€ะผะต ะบะพะผะผะตะฝั‚ะฐั€ะธั: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ัะฟะตั†ะธั„ะธะบะฐั†ะธะธ IEEE 802.1ad (VLAN stacking ะธะปะธ QinQ), ะพะฟั€ะตะดะตะปััŽั‰ะตะน ัั€ะตะดัั‚ะฒะฐ ะดะปั ะฟะพะดัั‚ะฐะฝะพะฒะบะธ ะฝะตัะบะพะปัŒะบะธั… ั‚ะตะณะพะฒ VLAN ะฒ ะพะดะธะฝ ะบะฐะดั€ Ethernet. ะะฐะฟั€ะธะผะตั€, ะดะปั ะฟั€ะพะฒะตั€ะบะธ ั‚ะธะฟะฐ ะฒะฝะตัˆะฝะตะณะพ Ethernet-ะบะฐะดั€ะฐ 8021ad ะธ vlan id=342 ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะพะฝัั‚ั€ัƒะบั†ะธัŽ โ€ฆ ether type 802.1ad vlan id 342 ะดะปั ะฟั€ะพะฒะตั€ะบะธ ะฒะฝะตัˆะฝะตะณะพ ั‚ะธะฟะฐ Ethernet-ะบะฐะดั€ะฐ 8021ad/vlan id=1, ะฒะปะพะถะตะฝะฝะพะณะพ 802.1q/vlan id=2 ะธ ะดะฐะปัŒะฝะตะนัˆะตะน ะธะฝะบะฐะฟััƒะปัั†ะธะธ IP-ะฟะฐะบะตั‚ะฐ: โ€ฆ ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ัƒะฟั€ะฐะฒะปะตะฝะธั ั€ะตััƒั€ัะฐะผะธ ะฟั€ะธ ะฟะพะผะพั‰ะธ ัƒะฝะธั„ะธั†ะธั€ะพะฒะฐะฝะฝะพะน ะธะตั€ะฐั€ั…ะธะธ cgroups v2. ะšะปัŽั‡ะตะฒั‹ะผ ะพั‚ะปะธั‡ะธะตะผ cgroups v2 ะพั‚ v1 ัะฒะปัะตั‚ัั ะฟั€ะธะผะตะฝะตะฝะธะต ะพะฑั‰ะตะน ะธะตั€ะฐั€ั…ะธะธ cgroups ะดะปั ะฒัะตั… ะฒะธะดะพะฒ ั€ะตััƒั€ัะพะฒ, ะฒะผะตัั‚ะพ ั€ะฐะทะดะตะปัŒะฝั‹ั… ะธะตั€ะฐั€ั…ะธะน ะดะปั ั€ะฐัะฟั€ะตะดะตะปะตะฝะธั ั€ะตััƒั€ัะพะฒ CPU, ะดะปั ั€ะตะณัƒะปะธั€ะพะฒะฐะฝะธั ะฟะพั‚ั€ะตะฑะปะตะฝะธั ะฟะฐะผัั‚ะธ ะธ ะดะปั ะฒะฒะพะดะฐ/ะฒั‹ะฒะพะดะฐ. ะะฐะฟั€ะธะผะตั€, ะดะปั ะฟั€ะพะฒะตั€ะบะธ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ะปะธ ะฟั€ะตะดะพะบ ัะพะบะตั‚ะฐ ะฝะฐ ะฟะตั€ะฒะพะผ ัƒั€ะพะฒะฝะต cgroupv2 ะผะฐัะบะต ยซsystem.sliceยป ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะพะฝัั‚ัƒะบั†ะธัŽ: โ€ฆ socket cgroupv2 level 1 ยซsystem.sliceยป
  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะฟั€ะพะฒะตั€ะบะธ ัะพัั‚ะฐะฒะฝั‹ั… ั‡ะฐัั‚ะตะน ะฟะฐะบะตั‚ะพะฒ SCTP (ะฝะตะพะฑั…ะพะดะธะผะฐั ะดะปั ั€ะฐะฑะพั‚ั‹ ั„ัƒะฝะบั†ะธะพะฝะฐะปัŒะฝะพัั‚ัŒ ะฟะพัะฒะธั‚ัั ะฒ ัะดั€ะต Linux 5.14). ะะฐะฟั€ะธะผะตั€, ะดะปั ะฟั€ะพะฒะตั€ะบะธ ะฝะฐะปะธั‡ะธั ะฒ ะฟะฐะบะตั‚ะต chunk-ะฐ ั ั‚ะธะฟะพะผ โ€˜dataโ€™ ะธ ะฟะพะปะตะผ โ€˜typeโ€™: โ€ฆ sctp chunk data exists โ€ฆ sctp chunk data type 0
  • ะŸั€ะธะผะตั€ะฝะพ ะฒ ะดะฒะฐ ั€ะฐะทะฐ ัƒัะบะพั€ะตะฝะพ ะฒั‹ะฟะพะปะฝะตะฝะธะต ะพะฟะตั€ะฐั†ะธะธ ะทะฐะณั€ัƒะทะบะธ ะฟั€ะฐะฒะธะป ะฟั€ะธ ะฟะพะผะพั‰ะธ ั„ะปะฐะณะฐ ยซ-fยป. ะขะฐะบะถะต ัƒัะบะพั€ะตะฝ ะฒั‹ะฒะพะดะฐ ัะฟะธัะบะฐ ะฟั€ะฐะฒะธะป.
  • ะŸั€ะตะดะพัั‚ะฐะฒะปะตะฝะฐ ะบะพะผะฟะฐะบั‚ะฝะฐั ั„ะพั€ะผะฐ ะฟั€ะพะฒะตั€ะบะธ ัƒัั‚ะฐะฝะพะฒะบะธ ะฑะธั‚ะพะฒ ะฒ ั„ะปะฐะณะฐั…. ะะฐะฟั€ะธะผะตั€, ะดะปั ะฟั€ะพะฒะตั€ะบะธ, ั‡ั‚ะพ ะฑะธั‚ั‹ ัะพัั‚ะพัะฝะธั snat ะธ dnat ะฝะต ัƒัั‚ะฐะฝะพะฒะปะตะฝั‹ ะผะพะถะฝะพ ัƒะบะฐะทั‹ะฒะฐั‚ัŒ: โ€ฆ ct status ! snat,dnat ะดะปั ะฟั€ะพะฒะตั€ะบะธ, ั‡ั‚ะพ ะฑะธั‚ syn ัƒัั‚ะฐะฝะพะฒะปะตะฝ ะฒ ะฑะธั‚ะพะฒะพะน ะผะฐัะบะต syn,ack: โ€ฆ tcp flags syn / syn,ack ะดะปั ะฟั€ะพะฒะตั€ะบะธ, ั‡ั‚ะพ ะฑะธั‚ั‹ fin ะธ rst ะฝะต ัƒัั‚ะฐะฝะพะฒะปะตะฝั‹ ะฒ ะฑะธั‚ะพะฒะพะน ะผะฐัะบะต syn,ack,fin,rst: โ€ฆ tcp flags != fin,rst / syn,ack,fin,rst
  • ะ ะฐะทั€ะตัˆะตะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะบะปัŽั‡ะตะฒะพะณะพ ัะปะพะฒะฐ ยซverdictยป ะฒ ะพะฟั€ะตะดะตะปะตะฝะธัั… typeof ะดะปั set/map: add map x m { typeof iifname . ip protocol . th dport : verdict ;}

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

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