## page was renamed from Carlin0/Prove9
## Pagina creata da Carlin0
#format wiki
#language it
<<Indice(depth=2 align=right)>>
<<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=648710"; rilasci="24.04 22.04 20.04";)>> 

= Introduzione =

'''nftables''' è un programma per controllare le regole di filtraggio dei pacchetti dal progetto [[https://it.wikipedia.org/wiki/Netfilter|Netfilter]]. Questo software fornisce un'infrastruttura per classificazione dei pacchetti interna al [[https://it.wikipedia.org/wiki/Kernel|kernel]] che è basata su una VM (macchina virtuale) specifica per rete, e lo strumento a riga di comando in spazio utente nft.<<BR>>
L'infrastruttura '''nftables''' riusa i sottosistemi '''netfilter''' esistenti, come l'infrastruttura esistente per hook, il sistema di tracciamento delle connessioni, [[https://it.wikipedia.org/wiki/Network_address_translation|NAT]], la gestione di code in spazio utente e il sottosistema di registrazione di log.

'''nftables''' sostituisce i vecchi popolari [[Sicurezza/Iptables|iptables]], ip6tables, arptables ed ebtables ed è utilizzato in applicazioni come condivisione di connessioni internet, firewall, contabilità per IP, proxy trasparenti, instradamento avanzato e controllo del traffico.

{{{#!wiki note
Dal rilascio '''20.10''' Ubuntu utilizza come infrastruttura predefinita '''nftables''' al posto del precedente '''iptables'''.
}}}

In '''nftables''', non ci sono tabelle/catene predefinite, ad esempio se intendiamo impostare la catena `output`, con policy `accept` può essere omessa.

{{{#!wiki important
Tutti i comandi citati in questa pagina vanno digitati nel [[AmministrazioneSistema/Terminale|terminale]] con i [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|privilegi di amministrazione]] .
}}}

= Selezione =

 0. Per selezionare e/o verificare quale infrastruttura firewall è in uso nel nostro sistema operativo, digitare questi due comandi: {{{
update-alternatives --config iptables
update-alternatives --config ip6tables
}}}riceveremo una risposta simile a questa: {{{
Sono disponibili 2 scelte per l'alternativa iptables (che fornisce /usr/sbin/iptables).

  Selezione    Percorso                   Priorità  Stato
------------------------------------------------------------
  0            /usr/sbin/iptables-nft      20        modalità automatica
* 1            /usr/sbin/iptables-legacy   10        modalità manuale
  2            /usr/sbin/iptables-nft      20        modalità manuale

Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione: 
}}}
 0. Scegliere tra `nft` e `iptables-legacy`.

= Installazione =

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt:/nftables|nftables]].
 0. [[https://wiki.ubuntu-it.org/AmministrazioneSistema/Systemd#Abilita_.2F_Disabilita|Abilitare]] il servizio `nftables` all'avvio.

= Migrazione =

Per importare le regole da '''iptables''' a '''nftables''' vengono mostrate due possibilità.

== Regola singola ==

Occorre digitare un comando del tipo: {{{
iptables-translate <regola di iptables>
}}}
 * Esempio: {{{
iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
}}}riceveremo la risposta: {{{
nft add rule ip filter INPUT tcp dport 22 ct state new counter accept
}}}
 * Esempio con ipv6: {{{
ip6tables-translate -A FORWARD -i eth0 -o eth3 -p udp -m multiport --dports 111,222 -j ACCEPT
}}}riceveremo la risposta: {{{
nft add rule ip6 filter FORWARD iifname eth0 oifname eth3 meta l4proto udp udp dport { 111,222} counter accept
}}}

== Set di regole ==

 0. Salvare tutte le regole in uso su '''iptables''' in un file digitando: {{{
iptables-save > save.txt
}}}

 0. Per importare il set  di regole sono possibili due alternative:
  * '''Importare''' le regole salvate nel file digitando: {{{
iptables-restore-translate -f save.txt
}}}Il terminale darà come risposta tutte le regole contenute nel file adattandole alla sintassi di nftables.
  * '''Importare''' le regole e al tempo stesso salvarle in un '''file leggibile''' da nftables digitando: {{{
iptables-restore-translate -f save.txt > ruleset.nft
}}}

= Comandi principali =

== Generici ==

 * Per '''caricare''' le regole da un file digitare: {{{
nft -f <file>
}}}
 * Per '''salvare''' le regole in uso in modo che vengano ricaricate al prossimo avvio digitare: {{{
nft list ruleset > /etc/nftables.conf
}}}
 * Per '''elencare''' le regole in uso digitare: {{{
nft list ruleset
}}}
 * Per '''elencare''' le regole in uso e '''visualizzare''' anche gli ''handle'', ovvero i riferimenti univoci di ogni riga digitare: {{{
nft -a list ruleset
}}}
 * Per '''cancellare''' tutte le regole in uso digitare: {{{
nft flush ruleset
}}}

== Tabelle ==

 * Per '''creare''' una tabella digitare: {{{
nft add table ip filter
}}}
 * Per '''elencare''' le tabelle digitare: {{{
nft list tables
}}}
 * Per '''cancellare''' una tabella digitare: {{{
nft delete table ip filter
}}}

 {{{#!wiki note
In caso di errore nella cancellazione della tabella, svuotarla dalle regole contenute.
 }}}

 * Per '''svuotare''' la tabella dalle regole in essa contenute digitare: {{{
nft flush table ip filter
}}}

== Catene ==

 * Per '''aggiungere''' una catena digitare: {{{
nft add chain [<famiglia>] <nome_tabella> <nome_catena> { type <tipo> hook <hook> priority <valore> \; [policy <policy> \;] }
}}}Ad esempio: {{{
nft add chain ip filter input { type filter hook input priority 0; policy drop; }
nft add chain ip filter forward { type filter hook forward priority 0; policy drop; }
}}}

 * Per '''cancellare''' una catena digitare: {{{
nft delete chain [famiglia] <nome_tabella> <nome_catena>
}}}Ad esempio: {{{
nft delete chain ip filter input
}}}

 {{{#!wiki note
In caso di errore nella cancellazione della catena svuotarla prima dei contenuti
 }}}

 * Per '''svuotare''' la catena dai suoi contenuti digitare: {{{
nft flush chain ip filter input
}}}

== Regole ==

 * Per '''aggiungere''' una regola digitare: {{{
nft add rule [<famiglia>] [nome_tabella] [nome_catena] [regola da aggiungere]
}}}Ad esempio: {{{
nft add rule ip filter input iifname "lo"  accept
nft add rule ip filter input ct state related,established   accept
}}}

 * Per '''inserire''' una regola '''all'inizio''' della catena digitare: {{{
nft insert rule ip filter input iifname "lo"  accept
}}}

 * Per '''aggiungere''' una regola in una '''determinata posizione''', si deve usare `handle` come riferimento, digitare: {{{
nft list table filter -a
}}}Riceveremo una risposta simile: {{{
table filter {
        chain output {
                 type filter hook output priority 0;
                 ip protocol tcp counter packets 82 bytes 9680 # handle 8
                 ip saddr 127.0.0.1 ip daddr 127.0.0.6 drop # handle 7
        }
}
}}}Per '''posizionare''' la nuova regola '''dopo''' `handle 8` digitare: {{{
nft add rule filter output position 8 ip daddr 127.0.0.8 drop
}}}

 * Per '''sostituire''' una regola digitare: {{{
nft replace rule filter output handle 7 ip daddr 127.0.0.8 drop
}}}

 * Per '''cancellare''' una regola digitare: {{{
nft delete rule filter output ip saddr 127.0.0.1 ip daddr 127.0.0.6 drop
}}}Oppure: {{{
nft delete rule filter output handle 7
}}}

= Esempi di configurazione =

Sono disponibili alcuni esempi di configurazioni in `/usr/share/doc/nftables/examples/`, e altri esempi nei link a fondo pagina.

= Ulteriori risorse =

 * [[https://netfilter.org/projects/nftables|Sito del progetto]]
 * [[https://wiki.nftables.org|Wiki di nftables]]
 * [[https://www.netfilter.org/projects/nftables/manpage.html|Pagina man di nft]]
 * [[https://wiki.archlinux.org/title/Nftables|Wiki Archlinux]]
 * [[https://wiki.gentoo.org/wiki/Nftables|Wiki Gentoo]]
 * [[https://guide.debianizzati.org/index.php/Nftables|Guida debianizzati]]
----
CategorySicurezza