Објавен е пакетниот филтер 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 е механизам за оптимизирање на патеката на пренасочување на пакетите, во која целосниот премин на сите синџири за обработка на правила се применува само на првиот пакет, а сите други пакети во протокот се препраќаат директно. табела 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 … податоци од делот sctp од тип 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
