nftables-Paketfilter 0.9.5-Version

Veröffentlicht Paketfilterfreigabe nftables 0.9.5, 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 User-Space-Paketfilterkomponenten, während die Arbeit auf Kernel-Ebene vom nf_tables-Subsystem bereitgestellt wird, das seit Version 3.13 Teil des Linux-Kernels ist. Die Änderungen, die erforderlich sind, damit die Version nftables 0.9.5 funktioniert, sind im Kernel enthalten Linux 5.7.

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:

  • Den Sets wurde Unterstützung für Paket- und Verkehrszähler hinzugefügt, die Set-Elementen zugeordnet sind. Zähler werden mit dem Schlüsselwort „counter“ aktiviert:

    Tisch-IP x {
    setze y {
    Art der IP-Adresse
    Zähler
    Elemente = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    Kette z {
    Typfilter-Hook-Ausgabeprioritätsfilter; Politik akzeptieren;
    ip daddr @y
    }
    }

  • Um die Anfangswerte von Zählern festzulegen, um beispielsweise nach einem Neustart vorherige Zähler wiederherzustellen, können Sie den Befehl „nft -f“ verwenden:

    # cat Ruleset.nft
    Tisch-IP x {
    setze y {
    Art der IP-Adresse
    Zähler
    Elemente = { 192.168.10.35 Zählerpakete 1 Byte 84, 192.168.10.101 \
    Zähler p 192.168.10.135 Zählerpakete 0 Bytes 0 }
    }

    Kette z {
    Typfilter-Hook-Ausgabeprioritätsfilter; Politik akzeptieren;
    ip daddr @y
    }
    }
    # nft -f Ruleset.nft
    #nft-Listenregelsatz
    Tisch-IP x {
    setze y {
    Art der IP-Adresse
    Zähler
    Elemente = { 192.168.10.35 Zählerpakete 1 Byte 84, 192.168.10.101 \
    Zähler p 192.168.10.135 Zählerpakete 0 Bytes 0 }
    }

    Kette z {
    Typfilter-Hook-Ausgabeprioritätsfilter; Politik akzeptieren;
    ip daddr @y
    }
    }

  • Der Flowtable wurde auch Zählerunterstützung hinzugefügt:

    Tisch-IP foo {
    Flowtable-Leiste {
    Hook-Eingangspriorität -100
    Geräte = { eth0, eth1 }
    Zähler
    }

    Kette vorwärts {
    Typ Filter Hook Vorwärtsprioritätsfilter;
    flow @bar counter hinzufügen
    }
    }

    Sie können die Liste der Zähler mit dem Befehl „conntrack -L“ anzeigen:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 Pakete=9 Bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 Pakete=8 Bytes=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    Pakete=1005763 Bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    Pakete=967505 Bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • In Sätzen zur Verkettung (Verkettung, bestimmte Bündel von Adressen und Ports, die den Vergleich vereinfachen) kann die Direktive „typeof“ verwendet werden, die den Datentyp von Elementen für die Bestandteile der Elemente des Satzes bestimmt:

    Tisch-IP foo {
    Whitelist festlegen {
    Art der IP-Adresse TCP-Port
    Elemente = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

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

  • Die typeof-Direktive gilt jetzt auch für Joins in Map-Listen:

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

    Kettenschiene {
    Typ-Filter-Hook-Pre-Routing-Prioritätsfilter; Politikabfall;
    Metamarke gesetzt IP Daddr . TCP-Dport-Karte @addr2mark akzeptieren
    }
    }

  • Unterstützung für Bereichsverknüpfungen in anonymen (unbenannten) Mengen hinzugefügt:

    # NFT Regel hinzufügen Inet Filter Eingabe IP Daddr . TCP-Port\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } akzeptieren

  • Es besteht die Möglichkeit, Pakete mit 802.1q (VLAN)-Flags bei der Verarbeitung von Netzwerkbrücken zu verwerfen:

    # NFT Regel hinzufügen Bridge Foo Bar Ether Typ VLAN ablehnen mit TCP-Reset

  • Unterstützung für den Abgleich anhand der TCP-Sitzungskennung (Conntrack-ID) hinzugefügt. Um die Conntrack-ID zu ermitteln, können Sie die Option „--output id“ verwenden:

    # conntrack -L – Ausgabe-ID
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
    Bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 Pakete=2 Bytes=320 \
    [VERSICHERT] mark=0 use=1 id=2779986232

    # NFT Regel hinzufügen Foo Bar CT ID 2779986232 Zähler

Source: opennet.ru

Kommentar hinzufügen