nftables pakketfilter release 0.9.4

gepubliceerd vrijgeven van pakketfilters ftables 0.9.4, dat zich ontwikkelt als vervanging voor iptables, ip6table, arptables en ebtables door pakketfilterinterfaces voor IPv4, IPv6, ARP en netwerkbruggen te verenigen. Het nftables-pakket bevat pakketfiltercomponenten die in de gebruikersruimte draaien, terwijl het kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. De wijzigingen die nodig zijn om de release van nftables 0.9.4 te laten werken, zijn opgenomen in de toekomstige kerneltak Linux 5.6.

Op kernelniveau is er alleen een generieke protocolonafhankelijke interface die basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van bewerkingen op gegevens en het regelen van de stroom. 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:

  • Ondersteuning voor reeksen in joins (aaneenschakeling, bepaalde bindingen van adressen en poorten die het matchen vereenvoudigen). Voor een "whitelist"-set waarvan de elementen een bijlage zijn, geeft het specificeren van de "interval"-vlag bijvoorbeeld aan dat de set bereiken in de bijlage kan bevatten (voor de bijlage "ipv4_addr . ipv4_addr . inet_service" was het voorheen mogelijk om exacte komt overeen met "192.168.10.35", en nu kunt u groepen adressen "192.68.11.123-80-192.168.10.35" specificeren:

    tafel ip foo {
    witte lijst instellen {
    typ ipv4_addr. ipv4_addr . inet_service
    vlaggen interval
    elementen = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
    }

    kettingblad {
    type filterhaak prerouting prioriteitsfilter; beleidsdaling;
    ip saddr. ip vader. tcp dport@whitelist accepteren
    }
    }

  • In sets en map-lijsten is het mogelijk om de "typeof"-richtlijn te gebruiken, die het formaat van het element bij het mappen bepaalt.
    Bijvoorbeeld:

    tafel ip foo {
    witte lijst instellen {
    type ip saddr
    elementen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kettingblad {
    type filterhaak prerouting prioriteitsfilter; beleidsdaling;
    ip daddr @whitelist accepteren
    }
    }

    tafel ip foo {
    kaart addr2mark {
    type ip saddr: metamarkering
    elementen = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • De mogelijkheid toegevoegd om bijlagen te gebruiken in NAT-bindingen, waarmee u een adres en poort kunt specificeren bij het definiëren van NAT-vertalingen op basis van kaartlijsten of benoemde sets:

    nft regel toevoegen ip nat pre dnat ip addr . poort naar ip saddr map { 1.1.1.1 : 2.2.2.2 . dertig }

    nft kaart ip nat-bestemmingen toevoegen {type ipv4_addr. inet_service: ipv4_addr. inet_service\\; }
    nft regel toevoegen ip nat pre dnat ip addr . poort naar ip saddr. tcp dport map @destinations

  • Ondersteuning voor hardwareversnelling met het verwijderen van enkele filterbewerkingen op de schouders van de netwerkkaart. Versnelling wordt ingeschakeld via het hulpprogramma ethtool ("ethtool -K eth0 hw-tc-offload on"), waarna het wordt geactiveerd in nftables voor de hoofdketen met behulp van de vlag "offload". Bij gebruik van de Linux 5.6-kernel wordt hardwareversnelling ondersteund voor het matchen van headervelden en inspectie van inkomende interfaces in combinatie met het ontvangen, laten vallen, dupliceren (dup) en doorsturen (fwd) van pakketten. In het onderstaande voorbeeld worden bewerkingen voor het laten vallen van pakketten die afkomstig zijn van het adres 192.168.30.20 uitgevoerd op netwerkkaartniveau, zonder de pakketten door te geven aan de kernel:

    # cat-bestand.nft
    tabel netdev x {
    keten y {
    type filterhaak ingangsapparaat eth0 prioriteit 10; vlaggen lossen;
    ip saddr 192.168.30.20 laten vallen
    }
    }
    # nft -f bestand.nft

  • Verbeterde informatie over de plaats van een fout in de regels.

    # nft verwijder regel ip yz handle 7
    Fout: kan regel niet verwerken: dit bestand of deze map bestaat niet
    verwijder regel ip yz handvat 7
    ^

    # nft regel verwijderen ip xx handvat 7
    Fout: kan regel niet verwerken: dit bestand of deze map bestaat niet
    verwijder regel ip xx handvat 7
    ^

    # nft verwijder tabel twst
    Fout: niet zo'n bestand of map; bedoelde je table 'test' in family ip?
    tabeldraai verwijderen
    ^^^^

    Het eerste voorbeeld laat zien dat de tabel 'y' niet aanwezig is in het systeem, het tweede laat zien dat de '7'-handler ontbreekt, en het derde toont een typefout bij het typen van de tabelnaam.

  • Ondersteuning toegevoegd voor het controleren van de slave-interface door "meta sdif" of "meta sdifname" op te geven:

    … meta sdifnaam vrf1 …

  • Ondersteuning toegevoegd voor bediening naar rechts of naar links. Om bijvoorbeeld een bestaand pakketlabel met 1 bit naar links te verschuiven en de onderste bit op 1 te zetten:

    … metamarkering set metamarkering lshift 1 of 0x1 …

  • Geïmplementeerde "-V" optie om uitgebreide versie-informatie weer te geven.

    #nft -V
    nftables v0.9.4 (Jive op Vijf)
    cli:leesregel
    json: ja
    minigmp: nee
    libxtables: ja

  • Opdrachtregelopties moeten nu vóór opdrachten worden opgegeven. U moet bijvoorbeeld "nft -a list regelset" specificeren, en het uitvoeren van "nft list regelset -a" zal resulteren in een fout.

    Bron: opennet.ru

Voeg een reactie