Выпуск пакетнага фільтра nftables 1.0.1

Апублікаваны выпуск пакетнага фільтра nftables 1.0.1, які ўніфікуе інтэрфейсы фільтрацыі пакетаў для IPv4, IPv6, ARP і сеткавых мастоў (нацэлены на замену iptables, ip6table, arptables і ebtables). Неабходныя для працы выпуску nftables 1.0.1 змены ўключаны ў склад ядра Linux 5.16-rc1.

У пакет nftables уваходзяць кампаненты пакетнага фільтра, якія працуюць у прасторы карыстача, у той час як на ўзроўні ядра працу забяспечвае падсістэма nf_tables, уваходная ў склад ядра Linux пачынальна з выпуску 3.13. На ўзроўні ядра падаецца толькі агульны інтэрфейс, які не залежыць ад канкрэтнага пратакола і які прадстаўляе базавыя функцыі вымання дадзеных з пакетаў, выкананні аперацый з дадзенымі і кіраванні струменем.

Непасрэдна правілы фільтрацыі і спецыфічныя для пратаколаў апрацоўшчыкі кампілююцца ў байткод у прасторы карыстача, пасля чаго дадзены байткод загружаецца ў ядро ​​пры дапамозе інтэрфейсу Netlink і выконваецца ў ядры ў адмысловай віртуальнай машыне, якая нагадвае BPF (Berkeley Packet Filters). Падобны падыход дазваляе значна скараціць памер кода фільтрацыі, які працуе на ўзроўні ядра і вынесці ўсе функцыі разбору правіл і логікі працы з пратаколамі ў прастору карыстача.

Асноўныя навіны:

  • Скарочана спажыванне памяці пры загрузцы вялікіх set-і map-спісаў.
  • Паскорана перазагрузка set- і map-спісаў.
  • Паскорана вывад выбраных табліц і ланцужкоў у вялікіх наборах правіл. Напрыклад, час выканання каманды "nft list ruleset" для вываду набору правілаў, які налічвае 100 тысяч радкоў, складае 3.049 секунды, а пры вывадзе толькі табліц nat і filter (nft list table nat, nft list table filter) скарачаецца да 1.969. і 0.697 секунд.
  • Паскорана выкананне запытаў з опцыяй "terse" пры апрацоўцы правіл з вялікімі set-і map-спісамі.
  • Дадзеная магчымасць фільтрацыі трафіку з ланцужка "egress", апрацоўванай на тым жа ўзроўні, што egress-апрацоўшчык у ланцужку netdev (hook egress), г.зн. на стадыі калі драйвер атрымлівае пакет ад сеткавага стэка ядра. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
  • Дазволена супастаўленне і змена байтаў у загалоўку і змесцівам пакета па зададзеным зрушэнні. # nft add rule xy @ ih, 32,32 0x14000000 counter # nft add rule xy @ ih, 32,32 set 0x14000000 counter

Крыніца: opennet.ru

Дадаць каментар