Veröffentlichung des Paketfilters nftables 0.9.5

Veröffentlicht Erscheinung des Paketfilters nftables 0.9.5, das sich als Ersatz fĂŒr iptables, ip6tables, arptables und ebtables entwickelt und eine Vereinheitlichung der Paketfilter-Schnittstellen fĂŒr IPv4, IPv6, ARP und NetzwerkbrĂŒcken ermöglicht. Das Paket nftables umfasst Komponenten des Paketfilters, die im Benutzermodus arbeiten, wĂ€hrend im Kernel die nf_tables-Subsysteme, die seit der Version 3.13 Teil des Linux-Kernels sind, die FunktionalitĂ€t bereitstellen. Die fĂŒr die Nutzung der Version nftables 0.9.5 erforderlichen Änderungen sind im Kernel enthalten. Linux 5.7.

Auf Kernel-Ebene wird nur eine allgemeine Schnittstelle bereitgestellt, die unabhĂ€ngig vom spezifischen Protokoll ist und grundlegende Funktionen zur Datenauslesung aus Paketen, zur AusfĂŒhrung von Operationen mit Daten und zur Steuerung des Datenflusses bietet. Die tatsĂ€chlichen Filterregeln und protokollspezifischen Handler werden im Benutzerspeicher in Bytecode kompiliert und dann ĂŒber die Netlink-Schnittstelle in den Kernel geladen, wo dieser Bytecode in einer speziellen virtuellen Maschine ausgefĂŒhrt wird, die BPF (Berkeley Packet Filters) Ă€hnelt. Dieser Ansatz ermöglicht es, die GrĂ¶ĂŸe des im Kernel laufenden Filtercodes erheblich zu reduzieren und alle Funktionen zur Regelanalyse und Logik fĂŒr die Protokollverarbeitung in den Benutzerspeicher auszulagern.

Hauptneuheiten:

  • Die SĂ€tze unterstĂŒtzen jetzt ZĂ€hler fĂŒr Pakete und Verkehr, die an den Elementen des Satzes gebunden sind. ZĂ€hler werden mit dem SchlĂŒsselwort „counter“ aktiviert:

    table ip x {
    set y {
    typeof ip saddr
    counter
    Elemente = { 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 anfĂ€nglichen ZĂ€hlerwerte festzulegen, zum Beispiel 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
    }
    }

  • UnterstĂŒtzung fĂŒr ZĂ€hler wurde auch in flowtable hinzugefĂŒgt:

    Tabelle 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 SĂ€tzen fĂŒr VerknĂŒpfungen (ZusammenfĂŒgungen, die bestimmte Kombinationen von Adressen und Ports vereinfachen) wurde die Möglichkeit hinzugefĂŒgt, die Direktive „typeof“ zu verwenden, die den Datentyp der Elemente fĂŒr die Teile der Elemente des Satzes definiert:

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

    Kette bar {
    Typ filter hook prerouting PrioritÀt filter; Richtlinie drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Die Direktive typeof ist jetzt auch fĂŒr VerknĂŒpfungen in map-Listen anwendbar:

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

    Kette bar {
    Typ filter hook prerouting PrioritÀt filter; Richtlinie drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • UnterstĂŒtzung fĂŒr VerknĂŒpfungen mit Bereichen in anonymen (nicht benannten) SĂ€tzen wurde 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, Pakete mit 802.1q (VLAN)-Flags beim Verarbeiten von NetzwerkbrĂŒcken zu verwerfen, wurde bereitgestellt:

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

  • UnterstĂŒtzung fĂŒr die Zuordnung anhand der TCP-Sitzungs-ID (conntrack ID) wurde 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

60GB SSD 8Gb DDR4