nftables pakkefilter 0.9.4 utgivelse

publisert pakkefilterfrigjøring nftables 0.9.4, utvikles som en erstatning for iptables, ip6table, arptables og ebtables ved å forene pakkefiltreringsgrensesnitt for IPv4, IPv6, ARP og nettverksbroer. nftables-pakken inkluderer pakkefilterkomponenter som kjører i brukerrom, mens arbeidet på kjernenivå leveres av nf_tables-undersystemet, som har vært en del av Linux-kjernen siden utgivelse 3.13. Endringene som er nødvendige for at nftables 0.9.4-utgivelsen skal fungere er inkludert i den fremtidige kjernegrenen Linux 5.6.

Kjernenivået gir bare et generisk protokolluavhengig grensesnitt som gir grunnleggende funksjoner for å trekke ut data fra pakker, utføre dataoperasjoner og flytkontroll. Filtreringsreglene og protokollspesifikke behandlere kompileres til bytekode i brukerrommet, hvoretter denne bytekoden lastes inn i kjernen ved hjelp av Netlink-grensesnittet og kjøres i kjernen i en spesiell virtuell maskin som minner om BPF (Berkeley Packet Filters). Denne tilnærmingen lar deg redusere størrelsen på filtreringskoden som kjører på kjernenivå betraktelig og flytte alle funksjonene til parsingsregler og logikk for arbeid med protokoller inn i brukerområdet.

Hovedinnovasjoner:

  • Støtte for områder i tilkoblinger (sammenkobling, visse bunter med adresser og porter som forenkler sammenligning). For eksempel, for et sett "hviteliste" hvis elementer er et vedlegg, vil spesifisering av "intervall"-flagget indikere at settet kan inkludere områder i vedlegget (for vedlegget "ipv4_addr . ipv4_addr . inet_service" var det tidligere mulig å liste nøyaktig samsvarer med formen "192.168.10.35. 192.68.11.123", og nå kan du spesifisere grupper med adresser "80-192.168.10.35-192.168.10.40").192.68.11.123.

    table ip foo {
    sett hviteliste {
    skriv ipv4_addr . ipv4_addr. inet_service
    flaggintervall
    elementer = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    kjedestang {
    type filter krok prerouting prioritet filter; politikk fall;
    ip saddr. ip daddr. tcp dport @whitelist godta
    }
    }

  • I sett og kartlister er det mulig å bruke "typeof"-direktivet, som bestemmer formatet på elementet ved matching.
    For eksempel:

    table ip foo {
    sett hviteliste {
    type ip saddr
    elementer = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kjedestang {
    type filter krok prerouting prioritet filter; politikk fall;
    ip daddr @hviteliste godta
    }
    }

    table ip foo {
    kartadr2mark {
    type ip saddr: metamerke
    elementer = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Lagt til muligheten til å bruke sammenføyninger i NAT-bindinger, som lar deg spesifisere en adresse og port når du definerer NAT-transformasjoner basert på kartlister eller navngitte sett:

    nft add rule ip nat pre dnat ip adr. port til ip saddr kart { 1.1.1.1 : 2.2.2.2 . tretti }

    nft legg til kart ip nat-destinasjoner { skriv ipv4_addr. inet_service: ipv4_addr. inet_service \\; }
    nft add rule ip nat pre dnat ip addr. port til ip saddr. tcp dport kart @destinasjoner

  • Støtte for maskinvareakselerasjon med enkelte filtreringsoperasjoner utført av nettverkskortet. Akselerasjon er aktivert via ethtool-verktøyet ("ethtool -K eth0 hw-tc-offload on"), hvoretter det aktiveres i nftables for hovedkjeden ved å bruke "offload"-flagget. Når du bruker Linux-kjernen 5.6, støttes maskinvareakselerasjon for topptekstfelttilpasning og innkommende grensesnittinspeksjon i kombinasjon med mottak, forkasting, duplisering (dup) og videresending (fwd) pakker. I eksemplet nedenfor utføres operasjonene med å droppe pakker som kommer fra adressen 192.168.30.20 på nettverkskortnivå, uten å sende pakkene til kjernen:

    # katt fil.nft
    tabell netdev x {
    kjede y {
    type filter krok inntrengningsenhet eth0 prioritet 10; flagg avlastning;
    ip saddr 192.168.30.20 slipp
    }
    }
    # nft -f file.nft

  • Forbedret informasjon om plasseringen av en feil i reglene.

    # nft slette regel ip yz handle 7
    Feil: Kunne ikke behandle regel: Ingen slik fil eller katalog
    slett regel ip yz handle 7
    ^

    # nft slette regel ip xx håndtak 7
    Feil: Kunne ikke behandle regel: Ingen slik fil eller katalog
    slett regel ip xx håndtak 7
    ^

    # nft slette tabell twst
    Feil: Ingen slik fil eller katalog; mente du tabell «test» i familie-ip?
    slett tabell twst
    ^^^^

    Det første eksemplet viser at tabellen "y" ikke er i systemet, det andre at "7"-behandleren mangler, og det tredje at det vises en skrivefeil når du skriver inn tabellnavnet.

  • Lagt til støtte for å sjekke slavegrensesnittet ved å spesifisere "meta sdif" eller "meta sdifname":

    ... meta sdifname vrf1 ...

  • Lagt til støtte for høyre- eller venstreskiftoperasjoner. For eksempel, for å flytte en eksisterende pakkeetikett til venstre med 1 bit og sette den mindre biten til 1:

    … metamark sett metamark lshift 1 eller 0x1 …

  • Implementert "-V"-alternativ for å vise utvidet versjonsinformasjon.

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

  • Kommandolinjealternativer må nå spesifiseres før kommandoer. For eksempel må du spesifisere "nft -a list ruleset", og å kjøre "nft list ruleset -a" vil resultere i en feil.

    Kilde: opennet.ru

Legg til en kommentar