nftables packet filter versione 1.0.2

È stato pubblicato il rilascio di packet filter nftables 1.0.2, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e bridge di rete (mirato a sostituire iptables, ip6table, arptables ed ebtables). Le modifiche richieste per il funzionamento della versione nftables 1.0.2 sono incluse nel kernel Linux 5.17-rc.

Il pacchetto nftables include componenti di filtro dei pacchetti eseguiti nello spazio utente, mentre il lavoro a livello di kernel è fornito dal sottosistema nf_tables, che fa parte del kernel Linux sin dalla versione 3.13. Il livello del kernel fornisce solo un'interfaccia generica indipendente dal protocollo che fornisce funzioni di base per estrarre dati dai pacchetti, eseguire operazioni sui dati e controllo del flusso.

Le stesse regole di filtraggio e i gestori specifici del protocollo vengono compilati in bytecode dello spazio utente, dopodiché questo bytecode viene caricato nel kernel utilizzando l'interfaccia Netlink ed eseguito nel kernel in una macchina virtuale speciale simile a BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio in esecuzione a livello di kernel e di spostare tutte le funzioni delle regole di analisi e la logica di lavorare con i protocolli nello spazio utente.

Principali innovazioni:

  • È stata aggiunta una modalità di ottimizzazione delle regole, abilitata tramite la nuova opzione "-o" ("--optimize"), che può essere combinata con l'opzione "--check" per controllare e ottimizzare le modifiche al file del set di regole senza caricarlo effettivamente . L'ottimizzazione consente di combinare regole simili, ad esempio le regole: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accetta meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 accetta ip saddr 1.1.1.1 ip daddr 2.2.2.2 .2.2.2.2 accetta ip saddr 3.3.3.3 ip daddr XNUMX rilascia

    verrà combinato in meta iifname . ip saddr. ip papà { eth1 . 1.1.1.1. 2.2.2.3, eth1 . 1.1.1.2. 2.2.2.5 } accetta ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accettare, 2.2.2.2 . 3.3.3.3: rilascia }

    Esempio di utilizzo: # nft -c -o -f ruleset.test Unione: ruleset.nft:16:3-37: ip daddr 192.168.0.1 contatore accetta ruleset.nft:17:3-37: ip daddr 192.168.0.2 contatore accetta ruleset.nft:18:3-37: ip daddr 192.168.0.3 contatore accetta in: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } contatore pacchetti 0 byte 0 accetta

  • Gli elenchi di set implementano la possibilità di specificare le opzioni ip e tcp, nonché i blocchi sctp: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp Chunk init num-inbound-streams elements = { 1, 4 } } catena c5 { opzione ip valore ra @s5 accetta } catena c7 { sctp pezzo init num-flussi-in entrata @s7 accetta }
  • Aggiunto il supporto per le opzioni TCP fastopen, md5sig e mptcp.
  • Aggiunto supporto per l'utilizzo del sottotipo mp-tcp nelle mappature: opzione tcp sottotipo mptcp 1
  • Codice di filtraggio lato kernel migliorato.
  • Flowtable ora ha il supporto completo per il formato JSON.
  • È stata fornita la possibilità di utilizzare l'azione "rifiuta" nelle operazioni di corrispondenza dei frame Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 rifiuta

Fonte: opennet.ru

Aggiungi un commento