nftables packet filter versione 0.9.4

publicatu liberazione di filtru di pacchettu nftables 0.9.4, sviluppendu cum'è un sustitutu per iptables, ip6table, arptables è ebtables unificà l'interfacce di filtrazione di pacchetti per IPv4, IPv6, ARP è ponti di rete. U pacchettu nftables include cumpunenti di filtru di pacchettu chì funzionanu in u spaziu di l'utilizatori, mentre chì u travagliu à livellu di u kernel hè furnitu da u subsistema nf_tables, chì hè stata parti di u kernel Linux da a versione 3.13. I cambiamenti necessarii per a liberazione di nftables 0.9.4 per u travagliu sò inclusi in u futuru ramu di u kernel Linux 5.6.

U nivellu di u kernel furnisce solu una interfaccia generica indipendente da u protokollu chì furnisce funzioni basiche per l'estrazione di dati da i pacchetti, eseguisce operazioni di dati è u cuntrollu di flussu. I reguli di filtrazione è i manipulatori specifichi di u protokollu sò compilati in bytecode in u spaziu di l'utilizatori, dopu chì stu bytecode hè caricatu in u kernel utilizendu l'interfaccia Netlink è eseguitu in u kernel in una macchina virtuale speciale chì ricorda BPF (Berkeley Packet Filters). Stu approcciu permette di riduce significativamente a dimensione di u codice di filtrazione chì corre à u livellu di u kernel è move tutte e funzioni di e regule di analisi è a logica per travaglià cù protokolli in u spaziu di l'utilizatori.

Innuvazioni principali:

  • Supportu per intervalli in cunnessione (concatenazione, certi bundle di indirizzi è porti chì simplificà a comparazione). Per esempiu, per un settore "lista bianca" chì l'elementi sò un attache, specificà a bandiera "interval" indicà chì u settore pò include intervalli in l'attachment (per l'attachment "ipv4_addr . ipv4_addr . inet_service" prima era pussibule di listà esatta. scontri di a forma "192.168.10.35. 192.68.11.123", è avà pudete specificà gruppi di indirizzi "80-192.168.10.35-192.168.10.40-192.68.11.123-192.168.11.125.

    table ip foo {
    stabilisce a lista bianca {
    tipu ipv4_addr. ipv4_addr. inet_service
    intervallu di bandiere
    elementi = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    barra di catena {
    tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
    ip saddr. ip daddr. tcp dport @whitelist accetta
    }
    }

  • In i setti è i listi di carte, hè pussibule aduprà a direttiva "typeof", chì determina u formatu di l'elementu quandu currisponde.
    Per esempiu:

    table ip foo {
    stabilisce a lista bianca {
    tipu di ip saddr
    elementi = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    barra di catena {
    tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
    ip daddr @whitelist accetta
    }
    }

    table ip foo {
    mappa addr2mark {
    typeof ip saddr : meta marca
    elementi = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Aggiunta l'abilità di utilizà unisce in i vincoli NAT, chì vi permette di specificà un indirizzu è un portu quandu definisce e trasfurmazioni NAT basate nantu à liste di carte o insemi chjamati:

    nft add rule ip nat pre dnat ip addr . portu à 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. inet_service \\; }
    nft add rule ip nat pre dnat ip addr . portu à ip saddr. tcp dport map @destinations

  • Supportu per l'accelerazione hardware cù alcune operazioni di filtrazione realizate da a carta di rete. L'accelerazione hè attivata via l'utilità ethtool ("ethtool -K eth0 hw-tc-offload on"), dopu chì hè attivata in nftables per a catena principale utilizendu a bandiera "offload". Quandu si usa u kernel Linux 5.6, l'accelerazione hardware hè supportata per l'accoppiamentu di u campu di l'intestazione è l'ispezione di l'interfaccia in entrata in cumminazione cù a ricezione, a scarta, a duplicazione (dup) è a trasmissione (fwd) di pacchetti. In l'esempiu sottu, l'operazioni di caccià i pacchetti chì venenu da l'indirizzu 192.168.30.20 sò realizati à u livellu di a carta di rete, senza passà i pacchetti à u kernel:

    # cat file.nft
    table netdev x {
    catena y {
    tipu di filtru ganciu ingress device eth0 priorità 10; scaricamentu di bandiere;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f file.nft

  • Infurmazione mejorata nantu à u locu di un errore in e regule.

    # nft elimina a regula ip yz handle 7
    Errore: Ùn pudia micca processà a regula: Nisun schedariu o cartulare
    sguassate a regula ip yz handle 7
    ^

    # nft elimina a regula ip xx handle 7
    Errore: Ùn pudia micca processà a regula: Nisun schedariu o cartulare
    sguassate a regula ip xx handle 7
    ^

    # nft eliminà a tabella twst
    Errore: Nisun schedariu o cartulare; intendevi a tavola "test" in famiglia IP?
    sguassà table twst
    ^^^^

    U primu esempiu mostra chì a tavula "y" ùn hè micca in u sistema, u sicondu chì u gestore "7" manca, è u terzu chì un prompt di typo hè visualizatu quandu scrivite u nome di a tavola.

  • Aghjunghje supportu per verificà l'interfaccia slave specificendu "meta sdif" o "meta sdifname":

    ... meta sdifname vrf1 ...

  • Aghjunghje supportu per l'operazioni di shift right o left. Per esempiu, per trasfurmà una etichetta di pacchettu esistente lasciata da 1 bit è stabilisce u bit minore à 1:

    ... meta mark set meta mark lshift 1 o 0x1 ...

  • Implementata l'opzione "-V" per vede l'infurmazioni di versione estesa.

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

  • L'opzioni di a linea di cumanda deve esse specificatu prima di i cumandamenti. Per esempiu, avete bisognu di specificà "nft -a list ruleset", è eseguisce "nft list ruleset -a" risulterà in un errore.

    Source: opennet.ru

Add a comment