nftables pakkefilter 0.9.4 udgivelse

offentliggjort frigivelse af pakkefilter nftables 0.9.4, som udvikler sig som en erstatning for iptables, ip6table, arptables og ebtables ved at forene pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer. nftables-pakken inkluderer pakkefilterkomponenter, der kører i brugerrum, mens kerneniveauet leveres af nf_tables-undersystemet, som har været en del af Linux-kernen siden udgivelse 3.13. Ændringerne, der kræves for at udgivelsen af ​​nftables 0.9.4 fungerer, er inkluderet i den fremtidige kernegren Linux 5.6.

På kerneniveau er der kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre operationer på data og kontrollere flow. Selve filtreringsreglerne og protokol-specifikke handlere kompileres til brugerrumsbytekode, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang gør det muligt betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingsregler og logikken i at arbejde med protokoller ind i brugerrummet.

Vigtigste innovationer:

  • Understøttelse af områder i joins (sammenkædning, visse bindinger af adresser og porte, der forenkler matchning). For et "hvidliste"-sæt, hvis elementer er en vedhæftet fil, vil angivelse af "interval"-flaget indikere, at sættet kan inkludere intervaller i den vedhæftede fil (for den vedhæftede fil "ipv4_addr . ipv4_addr . inet_service" var det tidligere muligt at angive en nøjagtig liste matcher som "192.168.10.35. 192.68.11.123", og nu kan du angive grupper af adresser "80-192.168.10.35-192.168.10.40".

    table ip foo {
    sæt hvidliste {
    skriv ipv4_addr . ipv4_addr . inet_service
    flag interval
    elementer = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
    }

    kædestang {
    type filter krog prerouting prioritetsfilter; politik fald;
    ip saddr. ip daddr. tcp dport@whitelist acceptere
    }
    }

  • I sæt og kortlister er det muligt at bruge "typeof"-direktivet, som bestemmer elementets format ved mapping.
    For eksempel:

    table ip foo {
    sæt hvidliste {
    type ip saddr
    elementer = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kædestang {
    type filter krog prerouting prioritetsfilter; politik fald;
    ip daddr @whitelist accepter
    }
    }

    table ip foo {
    map addr2mark {
    type ip saddr: metamærke
    elementer = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Tilføjet muligheden for at bruge vedhæftede filer i NAT-bindinger, som giver dig mulighed for at angive en adresse og port, når du definerer NAT-oversættelser baseret på kortlister eller navngivne sæt:

    nft tilføje regel ip nat før dnat ip adr. port til ip saddr map { 1.1.1.1 : 2.2.2.2 . tredive}

    nft tilføj kort ip nat destinationer { skriv ipv4_addr. inet_service: ipv4_addr. inet_service\\; }
    nft tilføje regel ip nat før dnat ip adr. port til ip saddr. tcp dport kort @destinations

  • Understøttelse af hardwareacceleration med fjernelse af nogle filtreringsoperationer på skuldrene af netværkskortet. Acceleration aktiveres gennem ethtool-værktøjet ("ethtool -K eth0 hw-tc-offload on"), hvorefter det aktiveres i nftables for hovedkæden ved hjælp af "offload"-flaget. Når du bruger Linux 5.6-kernen, understøttes hardwareacceleration til header-feltmatching og indgående grænsefladeinspektion i kombination med modtagelse, dropping, duplikering (dup) og videresendelse (fwd) pakker. I eksemplet nedenfor udføres operationer til at droppe pakker, der kommer fra adressen 192.168.30.20, på netværkskortniveau uden at sende pakkerne til kernen:

    # kat fil.nft
    tabel netdev x {
    kæde y {
    type filter krog indtrængen enhed eth0 prioritet 10; flag offload;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f fil.nft

  • Forbedret information om stedet for en fejl i reglerne.

    # nft slet regel ip yz håndtag 7
    Fejl: Kunne ikke behandle regel: Ingen sådan fil eller mappe
    slet regel ip yz handle 7
    ^

    # nft slet regel ip xx håndtag 7
    Fejl: Kunne ikke behandle regel: Ingen sådan fil eller mappe
    slet regel ip xx håndtag 7
    ^

    # nft slet tabel twst
    Fejl: Ingen sådan fil eller mappe; mente du tabel ‘test' i familie-ip?
    slet tabeltwist
    ^^^^

    Det første eksempel viser, at tabellen 'y' ikke er til stede i systemet, det andet viser, at '7'-handleren mangler, og det tredje viser et tip om tastefejl ved indtastning af tabelnavnet.

  • Tilføjet support til kontrol af slavegrænsefladen ved at specificere "meta sdif" eller "meta sdifname":

    ... meta sdifname vrf1 ...

  • Tilføjet understøttelse for skift til højre eller venstre. For eksempel for at flytte en eksisterende pakkeetiket til venstre med 1 bit og indstille den nederste bit til 1:

    … metamærkesæt metamærke lshift 1 eller 0x1 …

  • Implementeret "-V" mulighed for at vise udvidet versionsinformation.

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

  • Kommandolinjeindstillinger er nu obligatoriske før kommandoer. For eksempel skal du angive "nft -a list ruleset", og kørsel af "nft list ruleset -a" vil resultere i en fejl.

    Kilde: opennet.ru

Tilføj en kommentar