nftables packet filter versione 1.0.7

È stata pubblicata la versione 1.0.7 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:

  • Per i sistemi che eseguono Linux kernel 6.2+, è stato aggiunto il supporto per le mappature dei protocolli vxlan, geneve, gre e gretap, consentendo a semplici espressioni di controllare le intestazioni nei pacchetti incapsulati. Ad esempio, per verificare l'indirizzo IP nell'intestazione di un pacchetto nidificato proveniente da VxLAN, è ora possibile utilizzare le regole (senza la necessità di de-incapsulare prima l'intestazione VxLAN e associare il filtro all'interfaccia vxlan0): ... udp dport 4789 vxlan ip protocollo udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
  • È stato implementato il supporto per l'unione automatica dei resti dopo la cancellazione parziale di un elemento della set-list, che consente di cancellare un elemento o parte di un intervallo da un intervallo esistente (in precedenza un intervallo poteva essere eliminato solo completamente). Ad esempio, dopo aver rimosso l'elemento 25 da una scaletta con gli intervalli 24-30 e 40-50, la lista rimarrà 24, 26-30 e 40-50. Le correzioni necessarie affinché l'autofusione funzioni saranno offerte nelle versioni di manutenzione dei rami stabili del kernel 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list ruleset table ip x { set y { tipo di flag tcp dport intervallo di unione automatica degli elementi = { 24, 26-30, 40-50 } } }
  • Consente l'uso di contatti e intervalli durante la mappatura della traduzione degli indirizzi (NAT). tabella ip nat { catena preinstradamento { tipo nat hook preinstradamento priorità dstnat; la politica accetta; dnat a ip daddr. tcp dport map { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistente } }
  • Aggiunto il supporto per l'espressione “last”, che consente di scoprire l'ora dell'ultimo utilizzo di un elemento di regola o di una set list. La funzionalità è supportata a partire dal kernel Linux 5.14. tabella ip x { set y { tipo di ip daddr . tcp dport size 65535 flag dinamici, timeout ultimo timeout 1h } catena z { tipo filtro hook filtro priorità di output; la politica accetta; aggiorna @y { ip papà. tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport size 65535 flag dinamici, timeout ultimo timeout 1h elementi = { 172.217.17.14 . 443 ultimo utilizzo 1s591ms timeout 1h scade 59m58s409ms, 172.67.69.19 . 443 ultimo utilizzo 4s636ms timeout 1h scade 59m55s364ms, 142.250.201.72 . 443 ultimo utilizzo 4s748ms timeout 1h scade 59m55s252ms, 172.67.70.134 . 443 ultimo utilizzo 4s688ms timeout 1h scade 59m55s312ms, 35.241.9.150 . 443 ultimo utilizzo 5s204ms timeout 1h scade 59m54s796ms, 138.201.122.174 . 443 ultimo utilizzo 4s537ms timeout 1h scade 59m55s463ms, 34.160.144.191 . 443 ultimo utilizzo 5s205ms timeout 1h scade 59m54s795ms, 130.211.23.194 . 443 ultimo utilizzo 4s436ms timeout 1h scade 59m55s564ms } } }
  • Aggiunta la possibilità di definire le quote negli elenchi di set. Ad esempio, per determinare la quota di traffico per ciascun indirizzo IP di destinazione, è possibile specificare: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" prioritario filtro; la politica accetta; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbyte elements = { 8.8.8.8. 10000 quota oltre 196 mbyte utilizzati 0 byte } } catena y { tipo filtro hook dispositivo di uscita “ethXNUMX” filtro priorità; la politica accetta; ip papà @y drop } }
  • È consentito l'uso di costanti negli elenchi di set. Ad esempio, quando si utilizza l'indirizzo di destinazione e l'ID VLAN come chiave dell'elenco, è possibile specificare direttamente il numero VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . dimensione ID vlan 2048 flag dinamici, timeout timeout 1m } catena c { tipo filtro hook dispositivo di ingresso eth0 priorità 0; la politica accetta; tipo ether!= 8021q aggiornamento @s { ether daddr. 123 } contatore } }
  • Aggiunto un nuovo comando "distruggi" per eliminare incondizionatamente gli oggetti (a differenza del comando elimina, non genera ENOENT quando si tenta di eliminare un oggetto mancante). Richiede almeno il kernel Linux 6.3-rc per funzionare. distruggere il filtro IP della tabella

Fonte: opennet.ru

Aggiungi un commento