De release van het pakketfilter nftables 1.0.1 is gepubliceerd, dat de interface voor pakketfiltering voor IPv4, IPv6, ARP en netwerkschakels uniformiseert (gericht op de vervanging van iptables, ip6tables, arptables en ebtables). De noodzakelijke wijzigingen voor de werking van nftables 1.0.1 zijn opgenomen in de Linux-kernel 5.16-rc1.
De nftables-pakket bevat gebruikersruimte componenten van de pakketfilter, terwijl op kernniveau het nf_tables subsysteem de werking verzorgt, dat deel uitmaakt van de Linux-kernel sinds versie 3.13. Op kernniveau wordt slechts een algemene interface geboden, niet afhankelijk van een specifiek protocol en die basisfunctionaliteiten biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en het beheren van stromingen.
Directe filtratieregels en protocolspecifieke verwerkers worden in bytecode gecompileerd in de gebruikersruimte, waarna deze bytecode via de Netlink-interface in de kern wordt geladen en in de kern wordt uitgevoerd in een speciale een virtuele machine, die doet denken aan BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtering code die op kernniveau draait aanzienlijk te verkleinen en alle functies voor het parseren van regels en de logica voor de werking met protocollen naar de gebruikersruimte te verplaatsen.
Belangrijkste vernieuwingen:
- Het geheugenverbruik bij het laden van grote set- en maplijsten is verminderd.
- De herstarttijd van set- en maplijsten is versneld.
- De uitvoertijd van geselecteerde tabellen en ketens in grote regelsets is versneld. Bijvoorbeeld, de tijd voor de uitvoering van de opdracht "nft list ruleset" om een regelset van 100.000 regels weer te geven, bedraagt 3,049 seconden, terwijl dit bij het weergeven van alleen de nat- en filtertabellen ("nft list table nat", "nft list table filter") is verminderd tot 1,969 en 0,697 seconden.
- De uitvoering van aanvragen met de optie "--terse" bij het verwerken van regels met grote set- en maplijsten is versneld.
- Er is nu een mogelijkheid om verkeer te filteren vanuit de keten "egress", dat wordt verwerkt op hetzelfde niveau als de egress-handler in de netdev-keten (hook egress), dat wil zeggen op het moment dat de driver een pakket van de netwerkstack van de kernel ontvangt. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- Het is toegestaan om bytes in de header en inhoud van een pakket te matchen en te wijzigen op een opgegeven offset. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Bron: opennet.ru
