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 di kernel il lavoro è gestito dal sottosistema nf_tables, che fa parte del kernel Linux dalla versione 3.13. Le modifiche necessarie per il rilascio di nftables 0.9.2 includono l'integrazione nel kernel Linux 5.3.
A livello di kernel viene fornito solo un'interfaccia generale, indipendente dal protocollo specifico e che offre 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 attraverso 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 di kernel e di spostare tutte le funzioni di analisi delle regole e logiche di gestione dei protocolli nello spazio utente.
Novità principali:
- Possibilità di controllare il numero di porta dall'intestazione del pacchetto del livello di trasporto indipendentemente dal tipo di protocollo di livello 4:
add rule x y ip protocol { tcp, udp } th dport 53
- Supporto per il ripristino del tempo di vita dell'insieme di elementi:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Possibilità di controllare singole opzioni (lsrr, rr, ssrr e ra) dai pacchetti IPv4:
add rule x y ip option rr exists drop
Per le opzioni di instradamento, è possibile controllare i campi type, ptr, length e addr:
add rule x y ip option rr type 1 drop
- Nelle espressioni ora è consentito specificare prefissi di rete e intervalli di indirizzi:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - Supporto per l'uso di variabili nella definizione delle catene:
define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy } - L'indicazione della priorità della catena ora può essere effettuata sia in forma numerica che simbolica:
define prio = filter
define prionum = 10
define prioffset = «filter — 150»add table ip foo
add chain ip foo bar { type filter hook input priority $prio; }
add chain ip foo ber { type filter hook input priority $prionum; }
add chain ip foo bor { type filter hook input priority $prioffset; } - Realizzata la supporto per il modulo synproxy. Ad esempio, per proteggere il TCP port 8888 con synproxy è possibile utilizzare un insieme di regole:
tabella ip x {
chain y {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain z {
type filter hook forward priority filter; policy accept;
tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \
wscale 7 timestamp sack-perm ct state invalid drop
}
} - Per definire nella tabella conntrack le connessioni aggiuntive attese associate alla connessione corrente, che sono applicabili nei protocolli e scenari che richiedono l'instaurazione di più connessioni, ora è possibile definire politiche attraverso insiemi di regole standard. Ad esempio, per definire le connessioni attese dopo la connessione al TCP port 8888 alle successive connessioni al port 5432, è possibile specificare le seguenti regole:
table x {
ct expectation myexpect {
protocol tcp
dport 5432
timeout 1h
size 12
l3proto ip
}chain input {
type filter hook input priority 0;
ct state new tcp dport 8888 ct expectation set myexpect
ct state established,related counter accept
}
}
Fonte: opennet.ru
