Издадено е издание на пакетния филтър nftables 1.1.6, който стандартизира интерфейсите за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове (с цел замяната на iptables, ip6table, arptables и ebtables). Паралелно с това е публикувана и свързаната библиотека libnftnl 1.3.1, която предоставя нискоуровневи API за взаимодействие с подсистемата nf_tables.
В пакет nftables влизат компоненти на пакетния филтър, работещи в пространството на потребителя, докато на ниво ядро, работата се осигурява от подсистемата nf_tables, включена в ядрото на Linux, започвайки от версия 3.13. На ниво ядро се предоставя само общ интерфейс, независим от конкретен протокол, който предлага основни функции за извличане на данни от пакети, извършване на операции с данни и управление на потока.
Правилата за филтриране и специфичните за протоколите обработчици се компилират в байткод в пространството на потребителя, след което този байткод се зарежда в ядрото чрез интерфейса Netlink и се изпълнява в ядрото в специален, наподобяващ BPF (Berkeley Packet Filters). Подобен подход позволява значително да се намали размерът на кода за филтриране, работещ в ядрото, и да се изнесат всички функции за разбиране на правилата и логиката за работа с протоколите в пространството на потребителя. виртуална машина,което наподобява BPF (Berkeley Packet Filters). Подобен подход позволява значително да се намали размерът на кода за филтриране, работещ в ядрото, и да се изнесат всички функции за разбиране на правилата и логиката на работа с протоколите в пространството на потребителя.
Основни промени:
- Осигурена е пълна поддръжка на шаблони за леки тунели, като vxlan, geneve и erspan: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Преди зареждането на правилата, трябва да се създаде мрежов интерфейс erspan1: ip link add dev erspan1 type erspan external
- Добавена е поддръжка на маски в имената на мрежовите интерфейси в обработчиците netdev, например, за добавяне на основна верига в филтъра за входящ трафик за всички устройства vlan може да се укаже: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- В системите с ядро Linux 6.18+ е реализирана поддръжка за предаване на L2 кадри в интерфейс на мрежовите мостове за локална обработка, например, за насочване на IP стека навсякъде всички Ethernet кадри за MAC адреса de:ad:00:00:be:ef може да се укаже: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
- Добавена е нова инфраструктура за fuzzing тестиране с използването на инструментариума afl++ (american fuzzy lop++), активирана на етапа на компилиране чрез «./configure —with-fuzzer».
Източник: opennet.ru
