Rilascio del filtro pacchetti nftables 0.9.4

Pubblicato rilascio del filtro pacchetti nftables 0.9.4, in fase di sviluppo come sostituto di iptables, ip6tables, arptables ed ebtables grazie alla uniformazione delle interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete. Il pacchetto nftables include componenti di filtro dei pacchetti che operano nello spazio utente, mentre a livello del kernel l'operatività è garantita dal sottosistema nf_tables, incluso nel kernel Linux a partire dalla versione 3.13. Le modifiche necessarie per il rilascio di nftables 0.9.4 sono incluse nella futura versione del kernel Linux 5.6.

A livello del kernel viene fornito solo un'interfaccia generale, non dipendente da un protocollo specifico e che offre funzioni di base per l'estrazione dei dati dai pacchetti, l'esecuzione di operazioni sui dati e la gestione del flusso. Le regole di filtraggio e i gestori specifici per i protocolli vengono compilati in bytecode nello spazio utente, dopo di che questo bytecode viene caricato nel kernel tramite l'interfaccia Netlink e viene eseguito nel kernel in una speciale macchina virtuale simile a BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio che opera a livello di kernel e di trasferire tutte le funzioni di analisi delle regole e logica di gestione dei protocolli nello spazio utente.

Novità principali:

  • Supporto per intervalli nelle concatenazioni (concatenation, specifici legami di indirizzi e porte che semplificano il confronto). Ad esempio, per un insieme "whitelist" i cui elementi sono concatenazioni, specificare il flag "interval" indicherà che l'insieme può includere intervalli nella concatenazione (per la concatenazione "ipv4_addr . ipv4_addr . inet_service" prima era possibile elencare corrispondenze esatte come "192.168.10.35 . 192.68.11.123 . 80", ora è possibile indicare gruppi di indirizzi "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):

    table ip foo {
    set whitelist {
    type ipv4_addr . ipv4_addr . inet_service
    flags interval
    elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip saddr . ip daddr . tcp dport @whitelist accept
    }
    }

  • Negli insiemi e nelle mappe è stata garantita l'uso della direttiva "typeof", che definisce il formato dell'elemento durante il confronto.
    Ad esempio:

    table ip foo {
    set whitelist {
    typeof ip saddr
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr @whitelist accept
    }
    }

    table ip foo {
    map addr2mark {
    typeof ip saddr : meta mark
    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • È stata aggiunta la possibilità di utilizzare concatenazioni nelle legature NAT, permettendo di specificare indirizzi e porte nella definizione delle trasformazioni NAT basate su mappe o insiemi nominativi:

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

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

  • Supporto per accelerazione hardware con l'assegnazione di alcune operazioni di filtraggio alla scheda di rete. L'accelerazione si attiva tramite lo strumento ethtool ("ethtool -K eth0 hw-tc-offload on"), dopo di che viene attivata in nftables per la catena principale tramite il flag "offload". Con l'uso del kernel Linux 5.6 è supportata l'accelerazione hardware per il confronto dei campi dell'intestazione e il controllo dell'interfaccia di ingresso in combinazione con la ricezione, il scarto, la duplicazione (dup) e il reindirizzamento (fwd) dei pacchetti. Nel seguente esempio, le operazioni di scarto dei pacchetti provenienti dall'indirizzo 192.168.30.20 vengono eseguite a livello della scheda di rete, senza trasferire i pacchetti al kernel:

    # cat file.nft
    table netdev x {
    chain y {
    tipo filtro hook dispositivo ingress eth0 priorità 10; flags offload;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f file.nft

  • Migliorata la segnalazione del luogo dell'errore nelle regole.

    # nft delete rule ip y z handle 7
    Errore: Impossibile elaborare la regola: Nessun file o directory di questo tipo
    elimina regola ip y z handle 7
    ^

    # nft delete rule ip x x handle 7
    Errore: Impossibile elaborare la regola: Nessun file o directory di questo tipo
    elimina regola ip x x handle 7
    ^

    # nft delete table twst
    Errore: Nessun file o directory di questo tipo; voleva dire tabella 'test' nella famiglia ip?
    elimina tabella twst
    ^^^^

    Nel primo esempio si mostra che la tabella «y» è assente nel sistema, nel secondo che manca il gestore «7», e nel terzo che viene fornito un suggerimento per un errore di battitura durante l'immissione del nome della tabella.

  • Aggiunto supporto per il controllo dell'interfaccia slave tramite specifica «meta sdif» o «meta sdifname»:

    … meta sdifname vrf1 …

  • Aggiunto supporto per l'operazione di shift a destra o a sinistra. Ad esempio, per spostare un'etichetta esistente di un pacchetto a sinistra di 1 bit e impostare il bit più basso a 1:

    … meta mark set meta mark lshift 1 or 0x1 …

  • Realizzata l'opzione «-V» per visualizzare informazioni avanzate sulla versione.

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

  • Le opzioni della riga di comando devono ora essere specificate prima dei comandi. Ad esempio, è necessario specificare «nft -a list ruleset», mentre l'esecuzione di «nft list ruleset -a» genererà un errore.

    Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster