Udgivelsen af nftables-pakken 1.1.6 er offentliggjort, hvilket standardiserer pakke filtreringsgrænseflader for IPv4, IPv6, ARP og netværksbroer (målrettet som en erstatning for iptables, ip6tables, arptables og ebtables). Samtidig blev den tilknyttede biblioteksudgave libnftnl 1.3.1 offentliggjort, som tilbyder et lavt niveau API til interaktion med nf_tables subsystemet.
Nftables-pakken inkluderer komponenter af pakke filtreringssystemet, der kører i brugerområdet, mens nf_tables subsystemet i kernen håndterer operationer i Linux kernen fra version 3.13. I kernen tilbydes kun et generelt interface, der ikke er afhængigt af en specifik protokol og giver grundlæggende funktioner til at hente data fra pakker, udføre dataoperationer og styre strømmen.
Reglerne for filtrering og protokolspecifikke behandlere kompileres til bytekode i brugerområdet, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-interfacet og udføres i kernen i en særlig virtuelle maskiner, der minder om BPF (Berkeley Packet Filters). Denne tilgang muliggør en betydelig reduktion i størrelsen af den filtrering, der kører i kernen, og flytter alle funktioner til parsing af regler og logik til håndtering af protokoller til brugerområdet.
Vigtige ændringer:
- Der ydes fuld støtte til skabeloner for letvægts tunneler som vxlan, geneve og 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 } } Før indlæsning af reglerne skal der oprettes et netværksinterface erspan1: ip link add dev erspan1 type erspan external
- Support for masks in network interface names has been added to netdev handlers. For instance, to add a base chain to the incoming traffic filter for all vlan devices, you can specify: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- On systems with Linux kernel 6.18+, support for L2 frame transmission in bridge network interfaces for local processing has been implemented. For example, to direct all Ethernet frames for the MAC address de:ad:00:00:be:ef to the IP stack, you can specify: 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 } }
- A new infrastructure for fuzz testing using the afl++ (American Fuzzy Lop++) toolkit has been added, enabled at the build stage via '. /configure --with-fuzzer'.
Kilde: opennet.ru
