nftables пакет чыпкасы 0.9.9 чыгаруу

IPv0.9.9, IPv4, ARP жана тармак көпүрөлөрү (iptables, ip6table, arptables жана ebtables алмаштырууга багытталган) үчүн пакет чыпкалоо интерфейстерин бириктирген nftables 6 пакет фильтринин релиздери жарык көрдү. Ошол эле учурда, nf_tables подсистемасы менен өз ара аракеттенүү үчүн төмөнкү деңгээлдеги API камсыз кылуучу libnftnl 1.2.0 шериктештик китепканасынын релизи басылып чыкты. nftables 0.9.9 релизинин иштеши үчүн талап кылынган өзгөртүүлөр Linux 5.13-rc1 өзөгүндө камтылган.

nftables пакети колдонуучу мейкиндигинде иштеген пакет чыпкасынын компоненттерин камтыйт, ал эми ядро ​​деңгээлиндеги жумуш 3.13. чыгаруудан бери Linux ядросунун бир бөлүгү болгон nf_tables подсистемасы тарабынан камсыз кылынат. Ядро деңгээли пакеттерден маалыматтарды алуу, маалымат операцияларын аткаруу жана агымды башкаруу үчүн негизги функцияларды камсыз кылган жалпы протоколдон көз карандысыз интерфейсти гана камсыз кылат.

Фильтрлөө эрежелеринин өзү жана протоколго тиешелүү иштеткичтер колдонуучу мейкиндигиндеги байткодго түзүлөт, андан кийин бул байт код Netlink интерфейсинин жардамы менен ядрого жүктөлөт жана ядродо BPF (Беркли пакеттик чыпкалары) окшош атайын виртуалдык машинада аткарылат. Бул ыкма ядро ​​деңгээлинде иштеген чыпкалоочу коддун көлөмүн олуттуу түрдө кыскартууга жана талдоо эрежелеринин бардык функцияларын жана протоколдор менен иштөө логикасын колдонуучу мейкиндигине жылдырууга мүмкүндүк берет.

Негизги инновациялар:

  • Агым таблицасын иштетүүнү тармак адаптер тарабына жылдыруу мүмкүнчүлүгү ишке ашырылды, "түшүрүү" желеги аркылуу иштетилди. Flowtable – пакетти кайра багыттоо жолун оптималдаштыруу механизми, мында бардык эрежелерди иштетүү чынжырларынын толук өтүшү биринчи пакетке гана колдонулат, ал эми агымдагы бардык башка пакеттер түз жөнөтүлөт. стол IP глобал { flowtable f { илгичке кирүү приоритеттүү чыпка + 1 түзмөк = { lan3, lan0, wan } желектер түшүрүү } чынжыр алдыга {түр фильтр илгич алдыга артыкчылык чыпкасы; саясатты кабыл алуу; IP протоколу { tcp, UDP } flow add @f } чынжыр пост { type nat hook postrouting priority filter; саясатты кабыл алуу; oifname "wan" маскарад } }
  • Процесс менен үстөлдүн эксклюзивдүү колдонулушун камсыз кылуу үчүн үстөлгө ээсинин желегин тиркөө үчүн кошумча колдоо. Процесс аяктаганда, аны менен байланышкан таблица автоматтык түрдө жок кылынат. Процесс жөнүндө маалымат эрежелердин таштандысында комментарий түрүндө көрсөтүлөт: table ip x { # progname nft flags owner chain y { type filter hook киргизүү приоритеттүү фильтр; саясатты кабыл алуу; эсептегич пакеттер 1 байт 309 } }
  • IEEE 802.1ad спецификациясына колдоо кошулду (VLAN stacking же QinQ), ал бир нече VLAN тэгдерин бир Ethernet кадрына алмаштыруунун каражатын аныктайт. Мисалы, тышкы Ethernet кадрынын 8021ad жана vlan id=342 түрүн текшерүү үчүн, сиз конструкцияны колдонсоңуз болот ... ether 802.1ad vlan id 342 түрүн Ethernet кадрынын тышкы түрүн текшерүү үчүн 8021ad/vlan id=1, уяланган 802.1 q/vlan id=2 жана андан аркы IP пакеттин инкапсуляциясы: ... эфир түрү 8021ad vlan id 1 vlan түрү 8021q vlan id 2 vlan түрү IP эсептегич
  • Бирдиктүү иерархиялык cgroups v2 аркылуу ресурстарды башкаруу үчүн кошумча колдоо. Cgroups v2 жана v1 ортосундагы негизги айырмачылык CPU ресурстарын бөлүштүрүү үчүн өзүнчө иерархиялардын ордуна, эстутум керектөөсүн жөнгө салуу жана киргизүү/чыгаруу үчүн ресурстардын бардык түрлөрү үчүн жалпы топтордун иерархиясын колдонуу болуп саналат. Мисалы, биринчи деңгээлдеги cgroupv2 розеткасынын түпкү теги “system.slice” маскасына дал келгенин текшерүү үчүн, сиз төмөнкү конструкцияны колдонсоңуз болот: ... socket cgroupv2 1-деңгээл “system.slice”
  • SCTP пакеттеринин компоненттерин текшерүү мүмкүнчүлүгү кошулду (бул үчүн талап кылынган функция Linux ядросунда 5.14 пайда болот). Мисалы, пакетте "маалымат" түрү жана "тип" талаасы бар бөлчөк камтылганын текшерүү үчүн: ... sctp chunk data бар ... sctp chunk data type 0
  • Эреже жүктөө операциясынын аткарылышы "-f" желегин колдонуу менен болжол менен эки эсеге тездетилген. Эрежелердин тизмесин чыгаруу да тездетилди.
  • Желектин биттери коюлганын текшерүү үчүн компакт форма берилген. Мисалы, snat жана dnat статус биттери орнотулбаганын текшерүү үчүн төмөнкүнү белгилей аласыз: ... ct status ! snat,dnat syn бит бит маскасында коюлганын текшерүү үчүн syn,ack: ... tcp flags syn / syn,ack fin жана биринчи биттердин бит маскасында коюлбаганын текшерүү үчүн syn,ack,fin,rst: ... tcp желектери ! = fin,rst / syn,ack,fin,rst
  • Set/map typeof аныктамаларында "өкүм" ачкыч сөзүнө уруксат бериңиз: add map xm { typeof iifname . IP протоколу th dport: өкүм ;}

Source: opennet.ru

Комментарий кошуу