versió 0.9.4 del filtre de paquets nftables

publicat alliberament del filtre de paquets nftables 0.9.4, desenvolupant-se com a reemplaçament d'iptables, ip6table, arptables i ebtables mitjançant la unificació d'interfícies de filtratge de paquets per a IPv4, IPv6, ARP i ponts de xarxa. El paquet nftables inclou components de filtre de paquets que s'executen a l'espai d'usuari, mentre que el treball a nivell del nucli el proporciona el subsistema nf_tables, que forma part del nucli de Linux des del llançament 3.13. Els canvis necessaris perquè el llançament de nftables 0.9.4 funcioni s'inclouen a la futura branca del nucli Linux 5.6.

El nivell del nucli només proporciona una interfície genèrica independent del protocol que proporciona funcions bàsiques per extreure dades dels paquets, realitzar operacions de dades i controlar el flux. Les regles de filtratge i els controladors específics del protocol es compilen en bytecode a l'espai d'usuari, després del qual aquest bytecode es carrega al nucli mitjançant la interfície Netlink i s'executa al nucli en una màquina virtual especial que recorda BPF (Berkeley Packet Filters). Aquest enfocament us permet reduir significativament la mida del codi de filtratge que s'executa al nivell del nucli i moure totes les funcions d'anàlisi de regles i lògica per treballar amb protocols a l'espai d'usuari.

Principals innovacions:

  • Suport per a intervals de connexions (concatenació, determinats paquets d'adreces i ports que simplifiquen la comparació). Per exemple, per a un conjunt "llista blanca" els elements del qual són un fitxer adjunt, especificar la marca "interval" indicarà que el conjunt pot incloure intervals al fitxer adjunt (per al fitxer adjunt "ipv4_addr . ipv4_addr . inet_service" anteriorment era possible enumerar exactament coincideix amb la forma "192.168.10.35. 192.68.11.123", i ara podeu especificar grups d'adreces "80-192.168.10.35-192.168.10.40-192.68.11.123-192.168.11.125-80")

    taula ip foo {
    establir llista blanca {
    escriviu ipv4_addr . adreça_ipv4. servei_inet
    interval de banderes
    elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    barra de cadena {
    filtre de tipus ganxo de preenrutament filtre de prioritat; caiguda de la política;
    ip saddr. ip daddr. tcp dport @whitelist acceptar
    }
    }

  • En conjunts i llistes de mapes, és possible utilitzar la directiva "typeof", que determina el format de l'element quan coincideix.
    Per exemple:

    taula ip foo {
    establir llista blanca {
    tipus d'ip saddr
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    barra de cadena {
    filtre de tipus ganxo de preenrutament filtre de prioritat; caiguda de la política;
    ip daddr @whitelist acceptar
    }
    }

    taula ip foo {
    mapa addr2mark {
    tipus d'ip saddr: meta marca
    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • S'ha afegit la possibilitat d'utilitzar enllaços a les unions NAT, que us permet especificar una adreça i un port quan es defineixen transformacions NAT basades en llistes de mapes o conjunts amb nom:

    nft add rule ip nat pre dnat ip addr . port a ip saddr map { 1.1.1.1 : 2.2.2.2 . trenta }

    nft add map ip nat destinations { type ipv4_addr . inet_service: ipv4_addr. servei_inet \\; }
    nft add rule ip nat pre dnat ip addr . port a ip saddr. tcp dport map @destinations

  • Suport per a l'acceleració de maquinari amb algunes operacions de filtrat realitzades per la targeta de xarxa. L'acceleració s'habilita mitjançant la utilitat ethtool ("ethtool -K eth0 hw-tc-offload on"), després de la qual s'activa a nftables per a la cadena principal mitjançant la bandera "descàrrega". Quan s'utilitza el nucli Linux 5.6, s'admet l'acceleració de maquinari per a la concordança de camps de capçalera i la inspecció de la interfície d'entrada en combinació amb la recepció, el descart, la duplicació (dup) i l'enviament (fwd) de paquets. A l'exemple següent, les operacions d'eliminació de paquets procedents de l'adreça 192.168.30.20 es realitzen a nivell de targeta de xarxa, sense passar els paquets al nucli:

    # cat fitxer.nft
    taula netdev x {
    cadena y {
    tipus filtre ganxo dispositiu d'entrada eth0 prioritat 10; descàrrega de banderes;
    ip saddr 192.168.30.20 caiguda
    }
    }
    # nft -f fitxer.nft

  • Informació millorada sobre la ubicació d'un error a les regles.

    # nft delete rule ip yz handle 7
    Error: no s'ha pogut processar la regla: no hi ha cap fitxer o directori
    suprimeix la regla ip yz handle 7
    ^

    # nft delete rule ip xx handle 7
    Error: no s'ha pogut processar la regla: no hi ha cap fitxer o directori
    suprimiu la regla ip xx handle 7
    ^

    # nft suprimeix la taula twst
    Error: no hi ha cap fitxer o directori; volies dir la taula "prova" a la IP familiar?
    suprimir la taula twst
    ^^^^

    El primer exemple mostra que la taula "y" no es troba al sistema, el segon que falta el controlador "7" i el tercer que es mostra un missatge d'error ortogràfic en escriure el nom de la taula.

  • S'ha afegit suport per comprovar la interfície esclau especificant "meta sdif" o "meta sdifname":

    ... meta sdifname vrf1 ...

  • S'ha afegit suport per a operacions de canvi a la dreta o a l'esquerra. Per exemple, per desplaçar una etiqueta de paquet existent a l'esquerra 1 bit i establir el bit menor a 1:

    … marca meta marca meta marca lshift 1 o 0x1 …

  • S'ha implementat l'opció "-V" per mostrar informació de la versió ampliada.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: sí
    minigmp: no
    libxtables: sí

  • Les opcions de la línia d'ordres s'han d'especificar abans de les ordres. Per exemple, heu d'especificar "nft -a list ruleset" i executar "nft list ruleset -a" donarà lloc a un error.

    Font: opennet.ru

Afegeix comentari