nftables pakketfilter release 1.0.3

De release van pakketfilter nftables 1.0.3 is gepubliceerd, waarmee pakketfilterinterfaces voor IPv4, IPv6, ARP en netwerkbridges zijn verenigd (gericht op het vervangen van iptables, ip6table, arptables en ebtables). De wijzigingen die nodig zijn om de nftables 1.0.3-release te laten werken, zijn opgenomen in de Linux 5.18-kernel.

Het nftables-pakket bevat pakketfiltercomponenten die in de gebruikersruimte draaien, terwijl het werk op kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. Het kernelniveau biedt alleen een generieke protocol-onafhankelijke interface die basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en stroomcontrole.

De filterregels zelf en protocolspecifieke handlers worden gecompileerd in bytecode van de gebruikersruimte, waarna deze bytecode in de kernel wordt geladen met behulp van de Netlink-interface en in de kernel wordt uitgevoerd in een speciale virtuele machine die lijkt op BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtercode die op kernelniveau draait aanzienlijk te verkleinen en alle functies van parseerregels en de logica van het werken met protocollen naar de gebruikersruimte te verplaatsen.

Belangrijkste innovaties:

  • Setlijsten ondersteunen nu het matchen van netwerkinterfacenamen door middel van een masker, bijvoorbeeld gespecificeerd met het symbool “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } chain v4icmp {type filter hook invoerprioriteit 0; beleid accepteren; iifname @simple_wild tellerpakketten 0 bytes 0 iifname { “abcdef*”, “eth0” } tellerpakketten 0 bytes 0 } }
  • Automatische samenvoeging van elkaar kruisende setlistelementen tijdens gebruik geïmplementeerd. Vroeger, toen de optie “automatisch samenvoegen” was ingesteld, werd het samenvoegen uitgevoerd in de fase van het declareren van de regels, maar nu werkt het ook wanneer nieuwe elementen stapsgewijs worden toegevoegd tijdens de werking. In de declaratiefase stelt de lijst bijvoorbeeld y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } wordt omgezet in elementen = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } en als je vervolgens nieuwe elementen toevoegt # nft element toevoegen ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } ziet eruit als elementen = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Wanneer u afzonderlijke artikelen uit de lijst verwijdert die binnen bestaande assortimentsartikelen vallen, wordt het bereik ingekort of gesplitst.

  • Ondersteuning voor het combineren van NAT-regels (Multiple Address Translation) in een kaartenlijst is toegevoegd aan de regelsoptimalisatie, die wordt aangeroepen wanneer de optie “-o/—optimize” is opgegeven. Voor de set # cat ruleset.nft tabel ip x { chain y { type nat hook postrouting prioriteit srcnat; beleidsdaling; ip saddr 1.1.1.1 tcp dport 8000 snat naar 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat naar 5.5.5.5:90 } }

    het uitvoeren van “nft -o -c -f ruleset.nft” zal de afzonderlijke “ip saddr”-regels converteren naar een kaartenlijst: snat to ip saddr . tcp dport-kaart { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Op dezelfde manier kunnen ruwe expressies worden omgezet in kaartlijsten: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp lengte 47-63 @th,160,128 0x0e373135363130333131303735353203 ga naar nat_dns_dnstc udp lengte 62-78 @th,160,128 0x0e31393032383939353831343037320e ga naar nat_dns_this_5301 udp-lengte 62-78 @th,160,128 0x0e31363436323733373931323934300e ga naar nat_dns_saturn_5301 udp-lengte 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62e ga naar nat_dns_saturn_78 udp lengte 160,128-0 @th,0 38353439353637323038363633390x5303eXNUMXe ga naar nat_dns_saturn_XNUMX drop } }

    na optimalisatie krijgen we een kaartlijst: udp lengte . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203: ga naar nat_dns_dnstc, 62-78. 0x0e31393032383939353831343037320e: ga naar nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e: ga naar nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e: ga naar nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e: ga naar nat_dns_saturn_5303 }

  • Het gebruik van onbewerkte expressies bij aaneenschakelingsbewerkingen is toegestaan. Bijvoorbeeld: #nft voeg regel xy ip saddr toe. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } of tabel x { set y { typeof ip saddr . @ih,32,32 elementen = { 1.1.1.1 . 0x14 } } }
  • Ondersteuning toegevoegd voor het specificeren van headervelden met gehele getallen bij aaneenschakelingsbewerkingen: table inet t { map m1 { typeof udp length . @ih,32,32: oordeel markeert intervalelementen = { 20-80 . 0x14: accepteren, 1-10 . 0xa: drop } } chain c { type filter hook invoerprioriteit 0; beleidsdaling; udp-lengte. @ih,32,32 vmap @m1 } }
  • Ondersteuning toegevoegd voor het opnieuw instellen van TCP-opties (werkt alleen met Linux kernel 5.18+): tcp flags syn reset tcp Option sack-perm
  • De uitvoering van ketenuitvoeropdrachten (“nft list chain xy”) is versneld.

Bron: opennet.ru

Voeg een reactie