nftables-Paketfilter 0.9.4-Version

Veröffentlicht Paketfilterfreigabe nftables 0.9.4, entwickelt als Ersatz für iptables, ip6table, arptables und ebtables durch die Vereinheitlichung von Paketfilterschnittstellen für IPv4, IPv6, ARP und Netzwerkbrücken. Das nftables-Paket enthält Paketfilterkomponenten, die im Benutzerbereich ausgeführt werden, während die Arbeit auf Kernelebene vom Subsystem nf_tables bereitgestellt wird, das seit Version 3.13 Teil des Linux-Kernels ist. Die Änderungen, die erforderlich sind, damit die Version nftables 0.9.4 funktioniert, sind im zukünftigen Kernel-Zweig enthalten Linux 5.6.

Die Kernel-Ebene stellt lediglich eine generische protokollunabhängige Schnittstelle bereit, die grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zum Durchführen von Datenoperationen und zur Flusskontrolle bereitstellt. Die Filterregeln und protokollspezifischen Handler werden im Userspace in Bytecode kompiliert, woraufhin dieser Bytecode über die Netlink-Schnittstelle in den Kernel geladen und im Kernel in einer speziellen virtuellen Maschine ausgeführt wird, die an BPF (Berkeley Packet Filters) erinnert. Mit diesem Ansatz können Sie die Größe des auf Kernelebene ausgeführten Filtercodes erheblich reduzieren und alle Funktionen der Analyseregeln und Logik für die Arbeit mit Protokollen in den Benutzerbereich verschieben.

Wichtigste Neuerungen:

  • Unterstützung für Bereiche in Verbindungen (Verkettung, bestimmte Bündel von Adressen und Ports, die den Vergleich vereinfachen). Beispielsweise zeigt die Angabe des „Intervall“-Flags für einen Satz „Whitelist“, dessen Elemente ein Anhang sind, an, dass der Satz Bereiche im Anhang enthalten kann (für den Anhang „ipv4_addr . ipv4_addr . inet_service“ war es bisher möglich, genaue Listen aufzulisten Übereinstimmungen der Form „192.168.10.35. 192.68.11.123“, und jetzt können Sie Adressgruppen „80-192.168.10.35-192.168.10.40“ angeben:

    Tisch-IP foo {
    Whitelist festlegen {
    Geben Sie ipv4_addr ein. ipv4_addr. inet_service
    Flags-Intervall
    Elemente = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    Kettenschiene {
    Typ-Filter-Hook-Pre-Routing-Prioritätsfilter; Politikabfall;
    ip saddr. IP Daddr. TCP-Dport @whitelist akzeptieren
    }
    }

  • In Sets und Map-Listen ist es möglich, die „typeof“-Direktive zu verwenden, die beim Matching das Format des Elements bestimmt.
    Zum Beispiel:

    Tisch-IP foo {
    Whitelist festlegen {
    Art der IP-Adresse
    Elemente = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    Kettenschiene {
    Typ-Filter-Hook-Pre-Routing-Prioritätsfilter; Politikabfall;
    ip daddr @whitelist akzeptieren
    }
    }

    Tisch-IP foo {
    Kartenadresse2mark {
    Art der IP-Adresse: Metamarke
    Elemente = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Es wurde die Möglichkeit hinzugefügt, Joins in NAT-Bindungen zu verwenden, wodurch Sie eine Adresse und einen Port angeben können, wenn Sie NAT-Transformationen basierend auf Zuordnungslisten oder benannten Mengen definieren:

    NFT-Regel hinzufügen IP nat pre dnat ip addr . Port-zu-IP-Saddr-Karte {1.1.1.1: 2.2.2.2. dreißig }

    NFT Map IP NAT Destinations hinzufügen { Geben Sie ipv4_addr ein. inet_service: ipv4_addr. inet_service \\; }
    NFT-Regel hinzufügen IP nat pre dnat ip addr . Port zu IP-Saddr. TCP-Port-Karte @destinations

  • Unterstützung für Hardwarebeschleunigung mit einigen Filtervorgängen, die von der Netzwerkkarte ausgeführt werden. Die Beschleunigung wird über das Dienstprogramm ethtool („ethtool -K eth0 hw-tc-offload on“) aktiviert und anschließend in nftables für die Hauptkette mithilfe des Flags „offload“ aktiviert. Bei Verwendung des Linux-Kernels 5.6 wird Hardwarebeschleunigung für den Header-Feldabgleich und die Inspektion eingehender Schnittstellen in Kombination mit dem Empfangen, Verwerfen, Duplizieren (dup) und Weiterleiten (fwd) von Paketen unterstützt. Im folgenden Beispiel werden die Vorgänge zum Verwerfen von Paketen, die von der Adresse 192.168.30.20 kommen, auf der Ebene der Netzwerkkarte ausgeführt, ohne dass die Pakete an den Kernel weitergeleitet werden:

    # cat-Datei.nft
    Tabelle netdev x {
    Kette y {
    Typ Filter Hook Ingress Device ETH0 Priority 10; Flaggen entladen;
    IP Saddr 192.168.30.20 Drop
    }
    }
    # nft -f file.nft

  • Verbesserte Informationen über den Ort eines Fehlers in den Regeln.

    # NFT-Löschregel IP YZ-Handle 7
    Fehler: Regel konnte nicht verarbeitet werden: Keine solche Datei oder kein solches Verzeichnis
    Regel löschen IP-YZ-Handle 7
    ^

    # NFT-Löschregel IP xx Handle 7
    Fehler: Regel konnte nicht verarbeitet werden: Keine solche Datei oder kein solches Verzeichnis
    Regel löschen IP xx Handle 7
    ^

    # NFT-Löschtabelle Twst
    Fehler: Keine solche Datei oder kein solches Verzeichnis; Meinten Sie die Tabelle „Test“ in der Familien-IP?
    Tabelle twst löschen
    ^^^^

    Das erste Beispiel zeigt, dass die Tabelle „y“ nicht im System vorhanden ist, das zweite, dass der Handler „7“ fehlt, und das dritte, dass bei der Eingabe des Tabellennamens eine Tippfehleraufforderung angezeigt wird.

  • Unterstützung für die Überprüfung der Slave-Schnittstelle durch Angabe von „meta sdif“ oder „meta sdifname“ hinzugefügt:

    ... meta sdifname vrf1 ...

  • Unterstützung für Rechts- oder Linksschaltvorgänge hinzugefügt. Um beispielsweise ein vorhandenes Paketetikett um 1 Bit nach links zu verschieben und das Nebenbit auf 1 zu setzen:

    … Metamarke gesetzt Metamarke lshift 1 oder 0x1 …

  • Option „-V“ implementiert, um erweiterte Versionsinformationen anzuzeigen.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: ja
    minigmp: nein
    libxtables: ja

  • Befehlszeilenoptionen müssen jetzt vor Befehlen angegeben werden. Sie müssen beispielsweise „nft -a list Ruleset“ angeben, aber die Ausführung von „nft list Ruleset -a“ führt zu einem Fehler.

    Source: opennet.ru

Kommentar hinzufügen