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, кој е дел од кернелот Линукс од објавувањето 3.13. Нивото на јадрото обезбедува само генерички интерфејс независен од протокол кој обезбедува основни функции за извлекување податоци од пакети, извршување операции со податоци и контрола на протокот.

Самите правила за филтрирање и ракувачите специфични за протоколот се компајлираат во бајтекод на кориснички простор, по што овој бајтекод се вчитува во кернелот со помош на интерфејсот на Netlink и се извршува во кернелот во специјална виртуелна машина што личи на BPF (Berkeley Packet Filters). Овој пристап овозможува значително да се намали големината на кодот за филтрирање што работи на ниво на јадрото и да се преместат сите функции на правилата за парсирање и логиката на работа со протоколи во корисничкиот простор.

Главните иновации:

  • Способноста за преместување на обработката на плочката на страната на мрежниот адаптер е имплементирана, овозможена со користење на знамето „преземање“. Flowtable е механизам за оптимизирање на патеката на пренасочување на пакетите, во која целосниот премин на сите синџири за обработка на правила се применува само на првиот пакет, а сите други пакети во протокот се препраќаат директно. табела ip global { flowtable f { hook ingress priority filter + 1 device = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; политика прифати; ip протокол { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; политика прифати; oifname „wan“ маскенбал } }
  • Додадена е поддршка за прикачување знаме на сопственикот на табела за да се обезбеди ексклузивна употреба на табелата преку процес. Кога некој процес ќе заврши, табелата поврзана со него автоматски се брише. Информациите за процесот се прикажани во депонијата на правилата во форма на коментар: табела ip x { # progname nft flags сопственикот синџир y { тип филтер за приоритетна влезна кука за филтер; политика прифати; бројач-пакети 1 бајти 309 } }
  • Додадена е поддршка за спецификацијата IEEE 802.1ad (VLAN stacking или QinQ), која дефинира средство за замена на повеќе VLAN ознаки во една Ethernet рамка. На пример, за да го проверите типот на надворешната рамка за етернет 8021ad и vlan id=342, можете да ја користите конструкцијата ... етер тип 802.1ad vlan id 342 за да го проверите надворешниот тип на рамка за етернет 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 е употребата на заедничка хиерархија на cgroups за сите видови ресурси, наместо посебни хиерархии за распределба на ресурсите на процесорот, за регулирање на потрошувачката на меморија и за I/O. На пример, за да проверите дали предокот на штекерот на првото ниво cgroupv2 се совпаѓа со маската „system.slice“, можете да ја користите конструкцијата: ... socket cgroupv2 ниво 1 „system.slice“
  • Додадена е можност за проверка на компонентите на SCTP пакетите (функционалноста потребна за ова ќе се појави во кернелот Linux 5.14). На пример, за да проверите дали пакетот содржи парче со тип „податоци“ и поле „тип“: ... sctp chunk data постои ... sctp chunk тип на податоци 0
  • Извршувањето на операцијата за вчитување на правилата е забрзано приближно два пати користејќи го знамето „-f“. Излезот на списокот со правила исто така е забрзан.
  • Обезбедена е компактна форма за проверка дали се поставени битови со знаменце. На пример, за да проверите дали битовите за статусот snat и dnat не се поставени, можете да наведете: ... ct status ! snat,dnat за да проверите дали битот syn е поставен во битмаска syn,ack: ... tcp означува syn / syn,ack за да провери дали битовите fin и rst не се поставени во битмаска syn,ack,fin,rst: ... tcp знаменца = перка, прва / син, ак, перка, прва
  • Дозволете го клучниот збор „пресуда“ во дефинициите за типот на множество/мапа: додадете мапа xm { typeof iifname . ip протокол th dport : пресуда ;}

Извор: opennet.ru

Додадете коментар