nftables pakketfilter release 0.9.5

gepubliceerd vrijgeven van pakketfilters ftables 0.9.5, ontwikkeld 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 werk op kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. Wijzigingen die nodig zijn om de nftables 0.9.5-release te laten werken, zijn in de kernel opgenomen Linux 5.7.

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 pakket- en verkeerstellers die verband houden met set-elementen is aan sets toegevoegd. Tellers worden ingeschakeld met behulp van het trefwoord “counter”:

    tabel ip x {
    stel y {
    type ip saddr
    teller
    elementen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    ketting z {
    type filter hook-uitgangsprioriteitfilter; beleid accepteren;
    ip daddr @y
    }
    }

  • Om de beginwaarden van tellers in te stellen, bijvoorbeeld om eerdere tellers na een herstart te herstellen, kunt u het commando “nft -f” gebruiken:

    # kattenregelset.nft
    tabel ip x {
    stel y {
    type ip saddr
    teller
    elementen = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
    teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
    }

    ketting z {
    type filter hook-uitgangsprioriteitfilter; beleid accepteren;
    ip daddr @y
    }
    }
    # nft -f regelset.nft
    #nft lijstregelset
    tabel ip x {
    stel y {
    type ip saddr
    teller
    elementen = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
    teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
    }

    ketting z {
    type filter hook-uitgangsprioriteitfilter; beleid accepteren;
    ip daddr @y
    }
    }

  • Tegenondersteuning is ook toegevoegd aan de flowtable:

    tafel ip foo {
    vloeiende bar {
    hook-ingangsprioriteit -100
    apparaten = { eth0, eth1 }
    teller
    }

    ketting vooruit {
    type filterhaak voorwaarts prioriteitsfilter;
    stroom toevoegen @bar teller
    }
    }

    U kunt de lijst met tellers bekijken met behulp van het commando “conntrack -L”:

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

  • In sets voor aaneenschakeling (aaneenschakeling, bepaalde bundels adressen en poorten die vergelijking vereenvoudigen), is het mogelijk om de “typeof” -richtlijn te gebruiken, die het gegevenstype van elementen bepaalt voor de samenstellende delen van de elementen van de set:

    tafel ip foo {
    witte lijst instellen {
    type ip saddr. TCP-dport
    elementen = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

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

  • Het type richtlijn is nu ook van toepassing op joins in kaartlijsten:

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

    kettingblad {
    type filterhaak prerouting prioriteitsfilter; beleidsdaling;
    metamarkering ingesteld ip daddr. tcp dport-kaart @addr2mark accepteren
    }
    }

  • Ondersteuning toegevoegd voor bereikkoppelingen in anonieme (naamloze) sets:

    # nft regel toevoegen inet filterinvoer ip daddr . TCP-dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443} accepteren

  • Er is de mogelijkheid om pakketten met 802.1q (VLAN)-vlaggen te verwijderen bij het verwerken van netwerkbruggen:

    # nft add rule bridge foo bar ether type vlan weigeren met tcp-reset

  • Ondersteuning toegevoegd voor matching op basis van TCP-sessie-ID (conntrack ID). Om de conntrack ID te bepalen, kunt u de “--output id” optie gebruiken:

    # conntrack -L —uitvoer-id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pakketten=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakketten=2 bytes=320 \
    [VERZEKERD] mark=0 gebruik=1 id=2779986232

    # nft regel toevoegen foo bar ct id 2779986232 teller

Bron: opennet.ru

Voeg een reactie