rilascio del filtro dei pacchetti , in fase di sviluppo come sostituto di iptables, ip6tables, arptables ed ebtables grazie all'unificazione delle interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e bridge di rete. Il pacchetto nftables include componenti del filtro dei pacchetti che operano nello spazio utente, mentre a livello del kernel l'operazione è gestita dal sottosistema nf_tables, incluso nel kernel Linux a partire dalla versione 3.13. Le modifiche necessarie al rilascio di nftables 0.9.4 sono incluse nella futura branch del kernel
A livello del kernel è fornito solo un'interfaccia generale, indipendente dal protocollo specifico, che fornisce le funzioni di base per l'estrazione dei dati dai pacchetti, l'esecuzione di operazioni sui dati e la gestione del flusso. La logica 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 ed eseguito in una speciale macchina virtuale simile ai BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio che opera a livello del kernel e di spostare tutte le funzioni di parsing delle regole e la logica di gestione dei protocolli nello spazio utente.
Novità principali:
- Supporto per la corrispondenza dei pacchetti nel tempo. È possibile definire sia i range di date e orari in cui la regola si attiverà, sia configurare l'attivazione in giorni specifici della settimana. È stata inoltre aggiunta una nuova opzione «-T» per stampare il tempo epocale in secondi.
meta time «2019-12-24 16:00» — «2020-01-02 7:00»
meta hour «17:00» — «19:00»
meta day «Fri» - Supporto per il recupero e il salvataggio delle etichette SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Supporto per le liste map synproxy, che consentono di definire più di una regola per il backend.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
tipo filtro hook prerouting priorità raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain bar {
tipo filtro hook forward priorità filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : «https-synproxy», 192.168.2.0/24 : «other-synproxy» }
}
} - Possibilità di rimuovere dinamicamente elementi dai set di regole per l'elaborazione dei pacchetti.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Supporto per la corrispondenza VLAN in base all'identificatore e al protocollo, specificati nei metadata dell'interfaccia del bridge di rete;
meta ibrpvid 100
meta ibrvproto vlan - Opzione «-t» («—terse») per escludere elementi dai set durante la visualizzazione delle regole. Eseguendo «nft -t list ruleset» verrà mostrato:
tabella ip x {
set y {
type ipv4_addr
}
}E con «nft list ruleset»
tabella ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Possibilità di specificare più di un dispositivo nelle catene netdev (funziona solo con il kernel 5.5) per combinare le regole di filtraggio standard.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - Possibilità di aggiungere descrizioni per i tipi di dati.
# nft describe ipv4_addr
datatype ipv4_addr (indirizzo IPv4) (basetype integer), 32 bit - Possibilità di costruire un'interfaccia CLI con la libreria linenoise invece di libreadline.
./configure —with-cli=linenoise
Fonte: opennet.ru
