De release van de nftables package filter 0.9.9 is gepubliceerd, die de filtering interfaces voor IPv4, IPv6, ARP en netwerkmiddelen unifieert (gericht op vervanging van iptables, ip6tables, arptables en ebtables). Tegelijkertijd is de bijbehorende bibliotheek libnftnl 1.2.0 uitgebracht, die een low-level API biedt voor interactie met het nf_tables subsysteem. De noodzakelijke wijzigingen voor de werking van nftables 0.9.9 zijn opgenomen in de Linux kernel 5.13-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:
- De mogelijkheid voor offloading van flowtable verwerking naar de netwerkadapter is geĆÆmplementeerd, in te schakelen met de āoffloadā vlag. Flowtable is een optimalisatiemechanisme voor het routeren van pakketten, waarbij de volledige verwerking van alle regels alleen op het eerste pakket wordt toegepast, terwijl alle volgende pakketten in de flow direct worden doorgestuurd. 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 } }
- Ondersteuning toegevoegd voor het koppelen van een eigenaar vlag aan een tabel, die exclusief gebruik van de tabel door een proces mogelijk maakt. Wanneer het proces eindigt, wordt de aan het proces gekoppelde tabel automatisch verwijderd. Informatie over het proces wordt weergegeven in de regels dump als een opmerking: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
- Ondersteuning toegevoegd voor de IEEE 802.1ad specificatie (VLAN stacking of QinQ), die middelen definieert voor het invoegen van meerdere VLAN-tags in één Ethernet-frame. Bijvoorbeeld, om het type externe Ethernet-frame 8021ad en vlan id=342 te controleren, kan de constructie ⦠ether type 802.1ad vlan id 342 worden gebruikt om het externe Ethernet-frame type 8021ad/vlan id=1, genest 802.1q/vlan id=2 en de verdere encapsulatie van het IP-pakket te controleren: ⦠ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
- Ondersteuning voor het beheer van resources met behulp van een uniforme hiƫrarchie van cgroups v2 is toegevoegd. Het belangrijkste onderscheid tussen cgroups v2 en v1 is het gebruik van een gemeenschappelijke hiƫrarchie van cgroups voor alle soorten resources, in plaats van afzonderlijke hiƫrarchieƫn voor CPU-resourceverdeling, geheugenconsumptie en invoer/uitvoer. Bijvoorbeeld, om te controleren of de ouder van de socket op het eerste niveau van cgroupv2 overeenkomt met de maskering "system.slice", kan de volgende constructie worden gebruikt: ... socket cgroupv2 niveau 1 "system.slice"
- De mogelijkheid is toegevoegd om de onderdelen van SCTP-pakketten te controleren (de noodzakelijke functionaliteit zal beschikbaar zijn in de Linux-kernel 5.14). Bijvoorbeeld, om te controleren of er in het pakket een chunk met type 'data' en veld 'type' aanwezig is: ... sctp chunk data bestaat ... sctp chunk data type 0
- De uitvoering van de operatie voor het laden van regels is met bijna de helft versneld met het vlaggetje "-f". Ook is het weergeven van de lijst met regels versneld.
- Een compacte vorm van controle op het instellen van bits in vlaggen is beschikbaar gesteld. Bijvoorbeeld, om te controleren of de statusbits snat en dnat niet zijn ingesteld, kan worden aangegeven: ... ct status ! snat,dnat om te controleren of de syn-bit is ingesteld in de bitmasker syn,ack: ... tcp vlaggen syn / syn,ack om te controleren of de bits fin en rst niet zijn ingesteld in de bitmasker syn,ack,fin,rst: ... tcp vlaggen != fin,rst / syn,ack,fin,rst
- Het gebruik van het sleutelwoord "verdict" is toegestaan in de definities van typeof voor set/map: add map x m { typeof iifname . ip protocol . th dport : verdict ;}
Bron: opennet.ru
