rilascio del filtro dei pacchetti , che si sta sviluppando come sostituto di iptables, ip6tables, arptables ed ebtables grazie all'unificazione delle interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete. Il pacchetto nftables include componenti di filtraggio dei pacchetti che operano nello spazio utente, mentre a livello del kernel le operazioni sono gestite dal sottosistema nf_tables, incluso nel kernel Linux a partire dalla versione 3.13. Le modifiche necessarie per il rilascio di nftables 0.9.5 sono state integrate nel kernel .
A livello di kernel, viene fornito solo un'interfaccia generale, indipendente dal protocollo specifico, che offre funzioni di base per l'estrazione dei dati dai pacchetti, l'esecuzione delle operazioni sui dati e la gestione del flusso. Le regole di filtraggio e i gestori specifici per i protocolli sono compilati in bytecode nello spazio utente, dopodiché questo bytecode viene caricato nel kernel tramite l'interfaccia Netlink ed eseguito nel kernel in una speciale macchina virtuale, simile ai BPF (Berkeley Packet Filters). Questo approccio consente di ridurre notevolmente la dimensione del codice di filtraggio che opera a livello di kernel e di spostare tutte le funzioni di parsing delle regole e la logica di lavoro con i protocolli nello spazio utente.
Novità principali:
- Nel set è stata aggiunta la supporto per contatori di pacchetti e traffico associati agli elementi del set. I contatori vengono abilitati tramite la parola chiave «counter»:
tabella ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}catena z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Per impostare i valori iniziali dei contatori, ad esempio per ripristinare contatori passati dopo un riavvio, nel set è possibile utilizzare il comando «nft -f»:
# cat ruleset.nft
tabella ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}catena z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
}
# nft -f ruleset.nft
# nft list ruleset
tabella ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}catena z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Il supporto per i contatori è stato aggiunto anche al flowtable:
table ip foo {
flowtable bar {
hook ingress priority -100
devices = { eth0, eth1 }
counter
}chain forward {
type filter hook forward priority filter;
flow add @bar counter
}
}È possibile visualizzare l'elenco dei contatori con il comando «conntrack -L»:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2 - Nei set per le concatenazioni (concatenazione, specifici legami di indirizzi e porte che semplificano le corrispondenze) è stata fornita la possibilità di utilizzare la direttiva «typeof», che determina il tipo di dati degli elementi per le componenti degli elementi del set:
table ip foo {
set whitelist {
typeof ip saddr . tcp dport
elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip daddr . tcp dport @whitelist accept
}
} - La direttiva typeof è ora applicabile anche alle concatenazioni nelle liste map:
table ip foo {
map addr2mark {
typeof ip saddr . tcp dport : meta mark
elements = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135 . 80 : 0x00000002 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
meta mark set ip daddr . tcp dport map @addr2mark accept
}
} - È stata aggiunta la supporto per concatenazioni con intervalli in set anonimi (non nominati):
# nft add rule inet filter input ip daddr . tcp dport \
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept - È stata fornita la possibilità di scartare pacchetti con flag 802.1q (VLAN) durante l'elaborazione dei ponti di rete:
# nft add rule bridge foo bar ether type vlan reject with tcp reset
- È stata aggiunta la supporto per la corrispondenza tramite l'ID della sessione TCP (conntrack ID). Per determinare l'ID conntrack è possibile utilizzare l'opzione «—output id»:
# conntrack -L —output id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
[ASSURED] mark=0 use=1 id=2779986232# nft add rule foo bar ct id 2779986232 counter
Fonte: opennet.ru
