Pubblicato il rilascio del filtro pacchetti nftables 1.0.7

È stato pubblicato il rilascio del filtro pacchetti nftables 1.0.7, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete (destinato a sostituire iptables, ip6tables, arptables ed ebtables). Il pacchetto nftables comprende componenti del filtro pacchetti che operano nello spazio utente, mentre a livello di kernel è responsabile il sottosistema nf_tables, presente nel kernel Linux a partire dalla versione 3.13. A livello di kernel è fornito solo un'interfaccia generale, indipendente dal protocollo specifico e che offre funzioni di base per l'estrazione dei dati dai pacchetti, esecuzione delle operazioni sui dati e 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:

  • Per i sistemi con kernel Linux 6.2+ è stata aggiunta la supporto per il mapping dei protocolli vxlan, geneve, gre e gretap, che permette di utilizzare espressioni semplici per verificare gli header nei pacchetti incapsulati. Ad esempio, per verificare Indirizzi IP Nel'intestazione del pacchetto annidato da VxLAN, ora è possibile utilizzare regole (senza la necessità di una precedente deincapsulazione dell'intestazione VxLAN e di collegare il filtro all'interfaccia vxlan0): … udp dport 4789 vxlan ip protocol 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 }
  • È stata implementata la supporto per la fusione automatica dei resti dopo la rimozione parziale di un elemento dalla lista set, che consente di rimuovere un elemento o parte di un intervallo da un intervallo esistente (precedentemente un intervallo poteva essere rimosso solo completamente). Ad esempio, dopo la rimozione dell'elemento 25 dall'insieme con gli intervalli 24-30 e 40-50, nell'elenco rimarranno 24, 26-30 e 40-50. Le correzioni necessarie per il funzionamento della fusione automatica saranno proposte nelle versioni correttive 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 x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • È consentito l'uso della contattazione e delle gamme nella mappatura della traduzione degli indirizzi (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to 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 } persistent } }
  • È stata aggiunta la supporto per l'espressione «last», che consente di conoscere l'orario dell'ultimo utilizzo di un elemento della regola o di un set. Questa funzionalità è disponibile a partire dal kernel Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
  • È stata aggiunta la possibilità di definire le quote nelle liste set. Ad esempio, per definire una quota sul traffico per ogni indirizzo IP di destinazione, puoi specificare: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 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 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } }
  • È consentito l'uso di costanti nelle liste set. Ad esempio, utilizzando come chiave della lista l'indirizzo di destinazione e l'identificativo VLAN, puoi specificare direttamente il numero VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
  • È stata aggiunta una nuova comando «destroy» per l'eliminazione incondizionata degli oggetti (a differenza del comando delete, non genera ENOENT quando si tenta di eliminare un oggetto mancante). È necessario avere almeno il kernel Linux 6.3-rc. destroy table ip filter

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