nftables paketfilter 0.9.4 release

publiceras paketfilterutlösning nftables 0.9.4, utvecklas som en ersättning för iptables, ip6table, arptables och ebtables genom att förena paketfiltreringsgränssnitt för IPv4, IPv6, ARP och nätverksbryggor. Paketet nftables inkluderar paketfilterkomponenter som körs i användarutrymme, medan arbetet på kärnnivå tillhandahålls av nf_tables-undersystemet, som har varit en del av Linux-kärnan sedan release 3.13. De ändringar som krävs för att nftables 0.9.4-versionen ska fungera ingår i den framtida kärngrenen Linux 5.6.

Kärnnivån tillhandahåller endast ett generiskt protokolloberoende gränssnitt som tillhandahåller grundläggande funktioner för att extrahera data från paket, utföra dataoperationer och flödeskontroll. Filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i användarutrymmet, varefter denna bytekod laddas in i kärnan med hjälp av Netlink-gränssnittet och exekveras i kärnan i en speciell virtuell maskin som påminner om BPF (Berkeley Packet Filters). Detta tillvägagångssätt tillåter dig att avsevärt minska storleken på filtreringskoden som körs på kärnnivå och flytta alla funktioner för att analysera regler och logik för att arbeta med protokoll till användarutrymmet.

Huvudsakliga innovationer:

  • Stöd för intervall i anslutningar (konkatenering, vissa paket med adresser och portar som förenklar jämförelsen). Till exempel, för en uppsättning "vitlista" vars element är en bilaga, kommer angivande av "intervall"-flaggan att indikera att uppsättningen kan inkludera intervall i bilagan (för bilagan "ipv4_addr . ipv4_addr . inet_service" var det tidigare möjligt att lista exakt matchningar av formatet "192.168.10.35. 192.68.11.123", och nu kan du ange grupper av adresser "80-192.168.10.35-192.168.10.40").192.68.11.123").

    table ip foo {
    ange vitlista {
    skriv ipv4_addr . ipv4_addr. inet_service
    flaggintervall
    element = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    kedjesvärd {
    typ filter krok prerouting prioritetsfilter; minskning av politiken;
    ip saddr. ip daddr. tcp dport @vitlista acceptera
    }
    }

  • I uppsättningar och kartlistor är det möjligt att använda "typeof"-direktivet, som bestämmer formatet på elementet vid matchning.
    Till exempel:

    table ip foo {
    ange vitlista {
    typ av ip saddr
    element = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kedjesvärd {
    typ filter krok prerouting prioritetsfilter; minskning av politiken;
    ip daddr @vitlista acceptera
    }
    }

    table ip foo {
    map addr2mark {
    typ av ip saddr: metamärke
    element = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Lade till möjligheten att använda joins i NAT-bindningar, vilket gör att du kan ange en adress och port när du definierar NAT-transformationer baserat på kartlistor eller namngivna uppsättningar:

    nft add-regel ip nat pre dnat ip-adr. port till ip saddr map { 1.1.1.1 : 2.2.2.2 . trettio}

    nft lägg till karta ip nat destinationer { skriv ipv4_addr. inet_service: ipv4_addr. inet_service \\; }
    nft add-regel ip nat pre dnat ip-adr. port till ip saddr. tcp dport map @destinations

  • Stöd för hårdvaruacceleration med vissa filtreringsoperationer som utförs av nätverkskortet. Acceleration aktiveras via ethtool-verktyget ("ethtool -K eth0 hw-tc-offload on"), varefter det aktiveras i nftables för huvudkedjan med "offload"-flaggan. När du använder Linuxkärnan 5.6 stöds hårdvaruacceleration för matchning av rubrikfält och inspektion av inkommande gränssnitt i kombination med att ta emot, kassera, duplicera (dup) och vidarebefordra (fwd) paket. I exemplet nedan utförs operationerna för att tappa paket som kommer från adressen 192.168.30.20 på nätverkskortsnivå, utan att skicka paketen till kärnan:

    # cat file.nft
    tabell netdev x {
    kedja y {
    typ filterkrok inträngningsanordning eth0 prioritet 10; flaggor avlastning;
    ip saddr 192.168.30.20 släpp
    }
    }
    # nft -f file.nft

  • Förbättrad information om platsen för ett fel i reglerna.

    # nft radera regel ip yz handtag 7
    Fel: Kunde inte bearbeta regel: Ingen sådan fil eller katalog
    ta bort regel ip yz handtag 7
    ^

    # nft radera regel ip xx handtag 7
    Fel: Kunde inte bearbeta regel: Ingen sådan fil eller katalog
    ta bort regel ip xx handtag 7
    ^

    # nft radera tabell twst
    Fel: Ingen sådan fil eller katalog; menade du tabell "test" i familjens ip?
    ta bort tabell twst
    ^^^^

    Det första exemplet visar att tabellen "y" inte finns i systemet, det andra att "7"-hanteraren saknas och det tredje att en skrivfelsprompt visas när du skriver tabellnamnet.

  • Lade till stöd för att kontrollera slavgränssnittet genom att ange "meta sdif" eller "meta sdifname":

    ... meta sdifname vrf1 ...

  • Tillagt stöd för höger- eller vänsterväxlingsoperationer. Till exempel, för att flytta en befintlig paketetikett vänster med 1 bit och ställa in den mindre biten till 1:

    … metamarkering set metamarkering lshift 1 eller 0x1 …

  • Implementerat "-V"-alternativ för att visa utökad versionsinformation.

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

  • Kommandoradsalternativ måste nu anges före kommandon. Till exempel måste du ange "nft -a list ruleset", och att köra "nft list ruleset -a" kommer att resultera i ett fel.

    Källa: opennet.ru

Lägg en kommentar