Release des Paketfilters nftables 0.9.5

Veröffentlicht Veröffentlichung des Paketfilters nftables 0.9.5, das sich als Ersatz fĂŒr iptables, ip6tables, arptables und ebtables entwickelt, indem es die Schnittstellen zur Paketfilterung fĂŒr IPv4, IPv6, ARP und NetzwerkbrĂŒcken vereinheitlicht. Im Paket nftables sind Komponenten enthalten, die im Benutzermodus Paketfilterfunktionen bereitstellen, wĂ€hrend die nf_tables-Subsystem im Kernel die Arbeit abwickelt, das seit Version 3.13 Bestandteil des Linux-Kernels ist. Die fĂŒr den Betrieb von nftables 0.9.5 erforderlichen Änderungen sind im Kernel enthalten. Linux 5.7.

Auf Kernel-Ebene wird lediglich eine allgemeine Schnittstelle bereitgestellt, die unabhĂ€ngig von einem bestimmten Protokoll ist und grundlegende Funktionen fĂŒr das Extrahieren von Daten aus Paketen, das AusfĂŒhren von Datenoperationen und das Verwalten von Datenströmen bietet. Die eigentlichen Filterregeln und protokollspezifischen Handler werden in Bytecode im Benutzermodus kompiliert, anschließend wird dieser Bytecode ĂŒber die Netlink-Schnittstelle in den Kernel geladen und dort in einer speziellen virtuellen Maschine ausgefĂŒhrt, die an BPF (Berkeley Packet Filters) erinnert. Dieser Ansatz ermöglicht eine signifikante Reduzierung der GrĂ¶ĂŸe des auf Kernel-Ebene arbeitenden Filtercodes und verlagert alle Funktionen zur Regelparsing und Logik fĂŒr die Protokollbearbeitung in den Benutzermodus.

Hauptneuheiten:

  • Es wurde UnterstĂŒtzung fĂŒr Paket- und VerkehrszĂ€hlstĂ€nde hinzugefĂŒgt, die an die Elemente der Menge gebunden sind. ZĂ€hler werden mit dem SchlĂŒsselwort „counter“ aktiviert:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Um die Anfangswerte der ZĂ€hler festzulegen, z. B. um vorherige ZĂ€hler nach einem Neustart wiederherzustellen, kann der Befehl „nft -f“ verwendet werden:

    # cat ruleset.nft
    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Die UnterstĂŒtzung fĂŒr ZĂ€hler wurde auch in die flowtable integriert:

    table ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    counter
    }

    chain forward {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    Die Liste der ZĂ€hler kann mit dem Befehl „conntrack -L“ angezeigt werden:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=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 \
    packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • In den VerbindungssĂ€tzen (Konkatenation, bestimmte Adress- und Portkombinationen zur Vereinfachung der Zuordnung) wird die Verwendung der Direktive „typeof“ unterstĂŒtzt, die den Datentyp der Elemente fĂŒr die Bestandteile des Satzes definiert:

    table ip foo {
    set whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Die Direktive typeof ist jetzt auch auf Verbindungen in map-Listen anwendbar:

    table ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • UnterstĂŒtzung von Verbindungen mit Bereichen in anonymen (nicht benannten) SĂ€tzen hinzugefĂŒgt:

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept

  • Die Möglichkeit zum Wegwerfen von Paketen mit 802.1q (VLAN) Flags bei der Verarbeitung von NetzwerkbrĂŒcken wurde bereitgestellt.

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • UnterstĂŒtzung der Zuordnung anhand der TCP-Sitzungs-ID (conntrack ID) hinzugefĂŒgt. Die conntrack ID kann mit der Option „—output id“ ermittelt werden:

    # conntrack -L —output 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 packets=2 bytes=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

Quelle: opennet.ru

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster