Nftables: differenze tra le versioni

m
 
(35 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}{{Gateway-Router}}
{{Versioni compatibili}}{{Gateway-Router}}
==Introduzione==
==Introduzione==
<code>nftables</code> è la nuova infrastruttura per l'analisi e manipolazione dei pacchetti di rete che sostituisce la vecchia <code>iptables</code>. Già in sviluppo da alcuni anni (è disponibile dalla versione 3.13 del kernel di linux) sarà la soluzione predefinita a partire da ''Buster'', attraverso gli strumenti del gruppo <code>xtables-nft</code> che permettono di agire su <code>nftables</code> usando la vecchia sintassi di <code>iptables</code>.<br>
<code>nftables</code> è la nuova infrastruttura per l'analisi e manipolazione dei pacchetti di rete che sostituisce la vecchia <code>iptables</code>. Già in sviluppo da alcuni anni (è disponibile dalla versione 3.13 del kernel di linux) sarà la soluzione predefinita a partire da ''Buster'', attraverso gli strumenti del gruppo '''<code>xtables-nft</code> che permettono di agire su <code>nftables</code> usando la vecchia sintassi''' di <code>iptables</code>.<br>
Naturalmente come sempre in questi casi la transizione non sarà netta da un giorno all'altro, ma il vecchio <code>iptables</code> continuerà a sopravvivere come strumento ''legacy'' (difficile dire per quanto), visto che tra l'altro <code>nftables</code> presenta un livello di compatibilità con il suo predecessore.
Naturalmente come sempre in questi casi la transizione non sarà netta da un giorno all'altro, ma il vecchio <code>iptables</code> continuerà a sopravvivere come strumento ''legacy'' (difficile dire per quanto), visto che tra l'altro <code>nftables</code> presenta un livello di compatibilità con il suo predecessore.
==Installazione==
==Installazione==
Per usare gli strumenti del gruppo <code>xtables-nft</code> non è necessario fare alcunché in ''Buster'', infatti questi sono già disponibili di serie come già detto, mentre in ''Stretch'' è necessario installare il pacchetto <code>iptables-nftables-compat</code>
Per usare gli strumenti del gruppo <code>xtables-nft</code> non è necessario fare alcunché in ''Buster'', infatti questi sono già disponibili di serie come già detto, mentre in ''Stretch'' è necessario installare il pacchetto <code>iptables-nftables-compat</code>
<pre># apt install iptables-nftables-compat</pre>
<pre># apt install iptables-nftables-compat</pre>
infatti in ''Stretch'' non si parla di <code>xtables-nft<code>,ma di <code>xtables-compat</code>. A prescindere dai nomi usati le due famiglie contengono gli stessi strumenti che permettono di gestire l'architettura <code>nftables</code> attraverso la vecchia sintassi di <code>iptables</code>, oltre a quelli di traduzione dei comandi <code>iptables-translate</code>, <code>iptables-restore-translate</code>, ecc.<br>
infatti in ''Stretch'' non si parla di <code>xtables-nft</code>,ma di <code>xtables-compat</code>. A prescindere dai nomi usati le due famiglie contengono gli stessi strumenti che permettono di gestire l'architettura <code>nftables</code> attraverso la vecchia sintassi di <code>iptables</code>, oltre a quelli di traduzione dei comandi <code>iptables-translate</code>, <code>iptables-restore-translate</code>, ecc. Per quando riguarda la vecchia sintassi '''si rimanda alla guida di [[Debian e iptables | iptables]]'''.<br>
Per poter usare invece il nuovo strumento <code>nft</code> e quindi la sintassi nativa di <code>nftables</code> è necessario installare il pacchetto <code>nftables</code>
Per poter usare invece il nuovo strumento <code>nft</code> e quindi la sintassi nativa di <code>nftables</code> è necessario installare il pacchetto <code>nftables</code>
<pre># apt install nftables</pre>
<pre># apt install nftables</pre>
presente sia in ''Buster'' che ''Stretch''.
presente sia in ''Buster'' che ''Stretch''.
=== Cambiare infrastruttura ===
Come scritto nell'introduzione <code>nftables</code> è lo standard in ''Buster'', ma è comunque possibile continuare ad usare la vecchia infrastruttura attraverso <code>iptables-legacy</code> usando il comando <code>update-alternatives</code> come mostrato nel sottostante esempio:
<pre>
# update-alternatives --config iptables
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: 1
</pre>
Quindi anche se l'eseguibile di riferimento cambia, il collegamento simbolico no, ovvero i comandi continueranno ad essere dati digitando <code># iptables opzioni comando ecc.</code>.
== Sintassi <code>nft</code> ==
Mostrare tutte le regole di tutte le tabelle (tutto in una parola):
<pre># nft list ruleset</pre>
Salvare tutte regole in un file testuale (utile per rendere permanente il tutto, si veda più sotto):
<pre># nft list ruleset > /mio/percorso/nftables.conf</pre>
Caricare tutte le regole salvate in un file:
<pre># nft -f /mio/percorso/nftables.conf</pre>
Elencare tutte le tabelle:
<pre># nft list tables</pre>
Elencare tutte le catene e le regole della tabella ''filter'' appartenente alla famiglia ''ip'':
<pre># nft list table ip filter</pre>
Come sopra, ma in più visualizzando anche gli ''handle'', ovvero i riferimenti univoci di ogni riga:
<pre># nft -a list table ip filter</pre>
Aggiungere una regola in coda a tutte le altre (in questo caso si accettano tutte le connessioni in entrata su "enp1s0" e dirette alla porta 6666):
<pre>
# nft add rule ip filter INPUT iifname "enp1s0" ct state new tcp dport 6666 counter accept
</pre>
Come sopra, ma la regola viene inserita all'inizio e non appesa alla fine (un esempio per riga):
<pre>
# nft insert rule ip filter INPUT iifname "enp1s0" ct state new tcp dport 6666 counter accept
# nft insert rule ip filter FORWARD iifname "enp1s0" oifname "enp2s0" ct state new udp dport 6667 counter accept
</pre>
Inserire una nuova regola subito dopo quella avente identificativo "8":
<pre>
# nft add rule filter OUTPUT position 8 ip daddr 127.0.0.8 drop
# nft add rule ip nat PREROUTING position 8 iifname "enp1s0" tcp dport 6666 counter dnat to 192.168.0.83
</pre>
Aggiungere una regola di prerouting in coda a tutte le altre:
<pre>
# nft add rule ip nat PREROUTING iifname "enp1s0" tcp dport 6666 counter dnat to 192.168.0.83
</pre>
Inserire una nuova regola di prerouting subito dopo quella avente identificativo "8":
<pre>
# nft add rule ip nat PREROUTING position 8 iifname "enp1s0" tcp dport 6666 counter dnat to 192.168.0.83
</pre>
Eliminare una riga avente identificativo "8":
<pre># nft delete rule filter OUTPUT handle 8</pre>
Eliminare tutte le regole della tabella ''filter'' catena ''output'':
<pre># nft delete rule filter OUTPUT</pre>
Svuotare completamente la tabella filter:
<pre>nft flush table filter</pre>
Per maggiori informazioni sulla nuova sintassi si rimanda alla sezione ''Approfondimenti'' in coda a questa pagina.
=== Caricare automaticamente le regole ===
Come nel caso di <code>iptables</code> tutte le regole dichiarate saranno perse al riavvio della macchina, ma al momento non esiste uno strumento come <code>iptables-persistent</code>.<br>
Una soluzione può quindi essere quella di usare cron per far caricare in automatico ad ogni avvio un file testuale contenente tutte le regole del firewall.<br>
Come già scritto nella precedente sezione è possibile salvare le regole col comando <code>nft list ruleset</code> e ricaricarle con <code>nft -f</code>, pertanto:
<pre># nft list ruleset > /etc/nftables.conf</pre>
e a questo punto editare <code>crontab</code>
<pre># crontab -e</pre>
aggiungendo la seguente riga:
<pre>@reboot /usr/sbin/nft -f /etc/nftables.conf</pre>
in modo che ad ogni riavvio vengano ricaricate in automatico tutte le regole.


==Migrare da iptables==
==Migrare da iptables==
Riga 16: Riga 82:
* <code>iptables-translate</code> che permette di tradurre al volo un comando qualsiasi di <code>iptables</code> (e qualora non ne sia in grado avvisa l'utente).
* <code>iptables-translate</code> che permette di tradurre al volo un comando qualsiasi di <code>iptables</code> (e qualora non ne sia in grado avvisa l'utente).
* <code>iptables-restore-translate</code> che invece traduce un file di regole generato attraverso <code>iptables-save</code>.
* <code>iptables-restore-translate</code> che invece traduce un file di regole generato attraverso <code>iptables-save</code>.
 
=== iptables-translate ===
Se non si hanno molte regole da convertire questo è probabilmente il modo migliore di procedere, per tre motivi:
# permette immediatamente di vedere se una certa regola può essere tradotta correttamente;
# permette di avere un idea di come è cambiata la sintassi;
# permette di generale un elenco di regole '''chiaro e pulito''' (vedere il comando <code>nft list ruleset > nftables.conf</code>).
Esempio:
<pre>
# iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
nft add rule ip filter INPUT tcp dport 22 ct state new counter accept
</pre>
=== iptables-restore-translate ===
Per procedere è prima necessario salvare in un file testuale il contenuto di <code>iptables</code> col comando:
<pre># iptables-save > save.txt</pre>
Quindi convertire detto file in uno compatibile per <code>iptables</code>
<pre># iptables-restore-translate -f save.txt > ruleset.nft</pre>
e infine procedere al caricamento vero e proprio:
<pre># nft -f ruleset.nft</pre>
Come già scritto le regole così importate andranno perse al riavvio e pertanto sta all'utente trovare un modo di caricarle in automatico all'avvio (un possibile metodo è stato presentato nella sezione precedente ''Caricare automaticamente le regole'').
== Approfondimenti ==
== Approfondimenti ==
=== Manpages ===
=== Manpages ===
 
* <code>man xtables-nft</code> in ''Buster'' e successive, <code>man iptables-compat</code> in ''Stretch''
* <code>man xtables-nft</code> in ''Buster'', <code>man iptables-compat</code> in ''Stretch''
* <code>man xtables-translate</code> in ''Buster'' e successive, <code>man iptables-translate</code> in ''Stretch''
* <code>man xtables-translate</code> in ''Buster'', <code>man iptables-translate</code> in ''Stretch''
* <code>man nft</code>
* <code>man nft</code>
=== Sitografia ===
=== Sitografia ===
* [https://wiki.nftables.org/wiki-nftables/index.php/Main_Page Wiki ufficiale], pagina principale
* [https://wiki.nftables.org/wiki-nftables/index.php/Main_Page Wiki ufficiale], pagina principale
* [https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables Wiki ufficiale, migrazione], pagina dedicata alla migrazione da <code>iptables</code>
* [https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables Wiki ufficiale, migrazione], pagina dedicata alla migrazione da <code>iptables</code>
Riga 41: Riga 120:
|Numero_revisori=0
|Numero_revisori=0
}}
}}
[[Categoria:Firewall]]
[[Categoria:Firewall]]
2 894

contributi