Uscita del filtro pacchetti nftables 0.9.5

Pubblicato rilascio del filtro pacchetti nftables 0.9.5, che si sta sviluppando come sostituto di iptables, ip6table, arptables e ebtables grazie all'unificazione delle interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete. Il pacchetto nftables include componenti di filtraggio dei pacchetti che operano nello spazio utente, mentre a livello del kernel il lavoro è garantito dal sottosistema nf_tables, incluso nel kernel Linux a partire dalla versione 3.13. Le modifiche necessarie per il rilascio di nftables 0.9.5 sono incluse nel kernel Linux 5.7.

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:

  • Nei set è stata aggiunta la supporto per i contatori di pacchetti e traffico, associati agli elementi del set. I contatori vengono abilitati tramite la parola chiave «counter»:

    tabella ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Per impostare i valori iniziali dei contatori, ad esempio, per ripristinare i contatori precedenti dopo un riavvio, nel set si può utilizzare il comando «nft -f»:

    # cat ruleset.nft
    tabella ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    tabella ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Il supporto per i contatori è stato aggiunto anche alla flowtable:

    table ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    counter
    }

    chain forward {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    È possibile visualizzare l'elenco dei contatori con il comando «conntrack -L»:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • Nei set di connessione (concatenation, particolari associazioni di indirizzi e porte che semplificano la corrispondenza) è garantita la possibilità di utilizzare la direttiva «typeof», che determina il tipo di dati degli elementi per le parti costitutive degli elementi del set:

    table ip foo {
    set whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

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

  • La direttiva typeof è ora applicabile anche per le connessioni nelle liste map:

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

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Aggiunta la supporto per le connessioni con intervalli in set anonimi (non nominati):

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept

  • Fornita la possibilità di scartare pacchetti con flag 802.1q (VLAN) durante l'elaborazione dei ponti di rete:

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • Aggiunta la supporto per la corrispondenza tramite l'identificatore del processo TCP (conntrack ID). Per determinare il conntrack ID si può utilizzare l'opzione «—output id»:

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

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