Megjelent az nftables 1.1.6 verzió, amely egységesíti a csomagszűrési interfészeket IPv4, IPv6, ARP és hálózati hidak számára (a célja az iptables, ip6tables, arptables és ebtables helyettesítése). Ezzel egyidőben megjelent a kapcsolódó libnftnl 1.3.1 könyvtár is, amely alacsony szintű API-t biztosít az nf_tables alrendszerrel való interakcióhoz.
Az nftables csomagba tartoznak a felhasználói térben működő csomagszűrő komponensek, míg a kernel szintjén az nf_tables alrendszer látja el a feladatot, amely a Linux kernel 3.13-as verziójától kezdve érhető el. A kernel szintjén csak egy általános interfész áll rendelkezésre, amely független a konkrét protokolltól, és alapvető funkciókat biztosít a csomagokból származó adatok kinyerésére, az adatokkal végzett műveletekre és az adatfolyam kezelésére.
Közvetlenül a szűrési szabályok és a protokollspecifikus kezelők felhasználói térben bájt kódba vannak fordítva, majd ezt a bájt kódot a Netlink interfész segítségével betöltik a kernelbe, ahol speciális környezetben végrehajtásra kerül. virtuális gépben, amely a BPF (Berkeley Packet Filters) eljárásra emlékeztet. Ez a megközelítés jelentősen csökkenti a kernel szinten működő szűrési kód méretét, miközben az összes szabályok parszolásával és a protokollokkal kapcsolatos logikával kapcsolatos funkciót a felhasználói térbe helyezi.
Főbb változások:
- Teljes támogatás biztosítva van a könnyű alagútminták számára, mint például vxlan, geneve és 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 } } A szabályok betöltése előtt létre kell hozni a network interface-t erspan1: ip link add dev erspan1 type erspan external
- Támogatás került hozzáadásra a hálózati interfészek nevében lévő maszkok számára a netdev kezelőkben, például a belépő forgalom szűrőjének alapláncának hozzáadásához minden vlan eszköz esetén megadhatjuk: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- Linux 6.18+ kernellel rendelkező rendszereken megvalósult az L2 keretek átvitelének támogatása a hálózati hidak interfészére helyi feldolgozás érdekében, például az IP-stack irányításához minden Ethernet keretet a de:ad:00:00:be:ef MAC-címhez megadhatjuk: 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 } }
- Új infrastruktúra került hozzáadásra a fuzzing teszteléshez az afl++ (american fuzzy lop++) eszközkészletével, amely a build fázisban aktiválható a „./configure —with-fuzzer” segítségével.
Forrás: opennet.ru
