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

Апублікаваны выпуск пакетнага фільтра 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 уваходзяць кампаненты пакетнага фільтра, якія працуюць у прасторы карыстача, у той час як на ўзроўні ядра працу забяспечвае падсістэма nf_tables, уваходная ў склад ядра Linux пачынальна з выпуску 3.13. На ўзроўні ядра падаецца толькі агульны інтэрфейс, які не залежыць ад канкрэтнага пратакола і які прадстаўляе базавыя функцыі вымання дадзеных з пакетаў, выкананні аперацый з дадзенымі і кіраванні струменем.

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

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

  • Рэалізаваная магчымасць вынасу апрацоўкі flowtable на бок сеткавага адаптара, якая ўключаецца пры дапамозе сцяга 'offload'. Flowtable уяўляе сабой механізм аптымізацыі шляху перанакіравання пакетаў, пры якім поўнае мінанне ўсіх ланцужкоў апрацоўкі правіл ужываецца толькі для першага пакета, а ўсе астатнія пакеты ў струмені прабіваць напроста. table ip global { flowtable f { аркадная priorita 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 policy accept; counter packets 1 bytes 309 } }
  • Дададзена падтрымка спецыфікацыі IEEE 802.1ad (VLAN stacking ці QinQ), вызначальнай сродкі для падстаноўкі некалькіх тэгаў VLAN у адзін кадр Ethernet. Напрыклад, для праверкі тыпу вонкавага Ethernet-кадра 8021ad і vlan id=342 можна выкарыстоўваць канструкцыю … інкапсуляцыі IP-пакета: … ether typ 802.1ad vlan id 342 vlan typ 8021q vlan id 1 vlan typ 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 xm { typeof iifname . ip protocol. th dport : verdict ;}

Крыніца: opennet.ru

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