nftables packet filter versione 1.0.6

È stata pubblicata la versione 1.0.6 del filtro pacchetti nftables, che unifica le interfacce di filtraggio pacchetti per IPv4, IPv6, ARP e bridge di rete (mirate a sostituire iptables, ip6table, arptables e ebtables). Il pacchetto nftables include componenti del filtro dei pacchetti che vengono eseguiti nello spazio utente, mentre il livello del kernel è fornito dal sottosistema nf_tables, che fa parte del kernel di Linux dalla versione 3.13. A livello di kernel, viene fornita solo un'interfaccia generica indipendente dal protocollo che fornisce funzioni di base per l'estrazione di dati dai pacchetti, l'esecuzione di operazioni sui dati e il 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 modifiche:

  • Nell'ottimizzatore delle regole richiamato quando si specifica l'opzione "-o/--optimize", è stato impostato il pacchetto automatico delle regole combinandole e convertendole in liste di mappe e insiemi. Ad esempio, le regole sono # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; caduta politica; 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.4 accetta meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accetta meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 accept meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 accept } } after "nft -o -c -f ruleset.nft" sarà convertito nel seguente: ruleset. nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 accept ruleset.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 accept ruleset.nft: 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 accept ruleset.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 accept ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 accept into: iifname . ip sadr. ip papà { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1, eth1.1.1.2. 2.2.3.0. 24/1, eth1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3 . 2.2.2.5. XNUMX } accetta
  • L'ottimizzatore può anche condensare regole che già utilizzano setlist semplici in una forma più compatta, come: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; caduta politica; iifname "lo" accetta ct stato stabilito, correlato accetta commento "Nel traffico che originiamo, ci fidiamo" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accetta iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } dopo aver eseguito "nft -o -c -f ruleset.nft" sarà impacchettato in questo modo : ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accetta ruleset.nft:7:22 -143 0 : iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-0 accetta in: iifname . ip sadr. ip papà. udp sport. udp dport { enp31s6f209.115.181.102 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f216.197.228.230 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f64.59.144.17 . 10.0.0.149. 53 . 32768 . 65535-0, enp31s6f64.59.150.133 . 10.0.0.149. 53 . 32768 . 65535-XNUMX } accetta
  • Risolto un problema con la generazione di bytecode per l'unione di intervalli che utilizzano tipi con endianità diversa, come IPv4 (network endian) e meta mark (system endian). table ip x { map w { typeof ip saddr . meta mark : flag di verdetto intervallo contatore elementi = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accetta, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accetta, } } chain k { type filter hook input priority filter; caduta politica; ip sadr. meta contrassegno vmap @w } }
  • Mappature dei protocolli rare migliorate quando si utilizzano espressioni non elaborate, ad esempio: meta l4proto 91 @th,400,16 0x0 accept
  • Risolti i problemi con l'abilitazione delle regole a intervalli: insert rule xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • L'API JSON è stata migliorata per supportare le espressioni negli elenchi di set e mappe.
  • Nelle estensioni della libreria python nftables, i set di regole possono essere caricati per l'elaborazione in modalità di controllo ("-c") ed è stato aggiunto il supporto per la definizione di variabili esterne.
  • L'aggiunta di commenti è consentita negli elementi delle set-list.
  • È consentito specificare il valore zero in byte ratelimit.

Fonte: opennet.ru

Aggiungi un commento