Release of nftables version 1.1.0

È stata pubblicata la versione 1.1.0 del pacchetto nftables, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete (mirando a sostituire iptables, ip6tables, arptables ed ebtables). Il significativo cambiamento del numero di versione non è correlato a modifiche radicali, ma è semplicemente una continuazione della numerazione in base decimale (la versione precedente era 1.0.9). È stata contemporaneamente rilasciata la libreria associata libnftnl 1.2.7, che fornisce un'API a basso livello per interagire con il sottosistema nf_tables.

Il pacchetto nftables include componenti del filtro pacchetti che operano nello spazio utente, mentre a livello kernel, il funzionamento è garantito dal sottosistema nf_tables, incluso nel kernel Linux dalla versione 3.13. A livello kernel viene fornita solo un'interfaccia generica, non dipendente dal protocollo specifico, che offre funzionalità 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 un'area speciale. macchina virtuale, che ricorda i BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio che opera a livello di kernel, spostando tutte le funzioni di analisi delle regole e la logica di gestione dei protocolli nello spazio utente.

Principali modifiche:

  • È stata aggiunta la supporto per le variabili nelle espressioni map: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
  • Supporto VLAN aggiunto: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
  • Per le espressioni "log" è stato introdotto un nuovo preprocessore stringa con supporto per le variabili: define message="test" log prefix "my $message"
  • Nel calcolo del valore dell'espressione «meta hour» è stata implementata la gestione dello spostamento negativo nel fuso orario, specificato tramite la variabile d'ambiente TZ: TZ=UTC-4 nft add rule x y meta hour «22:00»
  • È stata garantita la conversione dell'ordine dei byte durante l'uso delle espressioni ct e meta, nonché nelle operazioni di merging e nella specifica di intervalli nei set. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 verrà generito il bytecode: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
  • È stato ripristinato il supporto per il comando «replace rule». replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }»
  • È stata ripristinata la possibilità di aggiungere dispositivi di rete a flowtable esistenti: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
  • Sono stati risolti problemi nell’uso del comando «create set»: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
  • Sono stati risolti problemi con la rappresentazione numerica delle opzioni tcp: tcp option 254
  • Sono stati risolti i problemi relativi all'uso delle espressioni meta e ct con i set di map: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
  • Nelle espressioni payload e concat è vietato specificare dati di dimensioni superiori a 512 byte.
  • Durante l'esecuzione del comando «nft describe» è stato implementato il riconoscimento dei valori provenienti dai file group, rt_mark e rt_realms, situati nelle directory /etc/iproute2/ e /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (routing realm) (basetype integer), 32 bit costanti simboliche predefinite da /etc/iproute2/rt_realms (in decimale): cosmos 0 Dichiarazione di rifiuto con intervallo meta mark set 0-100
  • La possibilità di elencare le tabelle è stata accelerata. È stata implementata la supporto per l'opzione -t/—terse per accelerare i comandi «list table» e «list set».
  • È stata garantita la conversione delle espressioni meter in set dinamici: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } sarà convertito in set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
  • Nel formato JSON è stata aggiunta la supporto per gli oggetti synproxy e per gli set di map con dati unificati.
  • Negli set definiti in formato JSON è stata implementata la supporto per il flag auto-merge.
  • Nel formato JSON, è consentita l'indicazione di più dispositivi nel blocco «chain».
  • Con le opzioni -f/—filename, è garantita la gestione dei percorsi rispetto alla directory del file attuale.
  • Con le opzioni -I/—include, ora il ciclo dei percorsi predefiniti avviene dalla fine dell'elenco.
  • Rafforzata la funzionalità delle opzioni -o/—optimize con espressioni contenenti contatori di valori: # nft -c -o -f ruleset.nft Fusione: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept in: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Fusione: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept in: tcp dport { 80, 123 } counter accept Fusione: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop in: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
  • Ripristinata la compatibilità con i dump dell'elemento set, creati in nftables prima della versione 0.9.8.

Fonte: opennet.ru

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