Издание на пакетния филтър nftables 0.9.9

Публикуван е 0.9.9 версия на пакетния филтър nftables, който обединява интерфейсите за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове (целящ да замени iptables, ip6tables, arptables и ebtables). В същото време е публикувана и версия 1.2.0 на съпътстващата библиотека libnftnl, която предоставя ниско ниво API за взаимодействие с подсистемата nf_tables. Необходимите за функционирането на nftables 0.9.9 промени са включени в ядрото на Linux 5.13-rc1.

В пакет nftables влизат компоненти на пакетния филтър, работещи в пространството на потребителя, докато на ниво ядро, работата се осигурява от подсистемата nf_tables, включена в ядрото на Linux, започвайки от версия 3.13. На ниво ядро се предоставя само общ интерфейс, независим от конкретен протокол, който предлага основни функции за извличане на данни от пакети, извършване на операции с данни и управление на потока.

Правилата за филтриране и специфичните за протоколите обработчици се компилират в байткод в пространството на потребителя, след което този байткод се зарежда в ядрото чрез интерфейса Netlink и се изпълнява в ядрото в специален, наподобяващ BPF (Berkeley Packet Filters). Подобен подход позволява значително да се намали размерът на кода за филтриране, работещ в ядрото, и да се изнесат всички функции за разбиране на правилата и логиката за работа с протоколите в пространството на потребителя. виртуална машина,което наподобява BPF (Berkeley Packet Filters). Подобен подход позволява значително да се намали размерът на кода за филтриране, работещ в ядрото, и да се изнесат всички функции за разбиране на правилата и логиката на работа с протоколите в пространството на потребителя.

Основни нововъведения:

  • Реализирана е възможността за прехвърляне на обработката на flowtable на страната на мрежовия адаптер, активирана чрез флага ‘offload’. Flowtable представлява механизъм за оптимизация на маршрутизацията на пакетите, при който пълното преминаване през всички вериги за обработка на правилата се прилага само за първия пакет, а всички останали пакети в потока се пропускат директно. table ip global { flowtable f { hook ingress priority 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 owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • Добавена поддръжка на спецификацията IEEE 802.1ad (VLAN stacking или QinQ), която определя средства за добавяне на множество тагове VLAN в един Ethernet кадър. Например, за проверка на типа на външния Ethernet кадър 8021ad и vlan id=342 може да се използва конструкцията … ether type 802.1ad vlan id 342 за проверка на външния тип Ethernet кадър 8021ad/vlan id=1, вложен 802.1q/vlan id=2 и по-нататъшна инкапсуляция на IP пакета: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type 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 x m { typeof iifname . ip protocol . th dport : verdict ;}

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster