Nftables

Da Guide@Debianizzati.Org.

(Differenze fra le revisioni)
(Sintassi nft)
m (iptables-rotate-translate)
 
(4 revisioni intermedie non mostrate.)
Riga 28: Riga 28:
</pre>
</pre>
-
Quindi anche se l'eseguibile di riferimento cambia, il collegamento simboli no, ovvero i comandi continueranno ad essere dati digitando <code># iptables opzioni comando ecc.</code>.
+
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> ==
== Sintassi <code>nft</code> ==
Riga 34: Riga 34:
<pre># nft list ruleset</pre>
<pre># nft list ruleset</pre>
Salvare tutte regole in un file testuale (utile per rendere permanente il tutto, si veda più sotto):
Salvare tutte regole in un file testuale (utile per rendere permanente il tutto, si veda più sotto):
-
<pre># nft list ruleset > nftables.conf</pre>
+
<pre># nft list ruleset > /mio/percorso/nftables.conf</pre>
Caricare tutte le regole salvate in un file:
Caricare tutte le regole salvate in un file:
-
<pre># nft -f nftables.conf</pre>
+
<pre># nft -f /mio/percorso/nftables.conf</pre>
Elencare tutte le tabelle:
Elencare tutte le tabelle:
<pre># nft list tables</pre>
<pre># nft list tables</pre>
Riga 45: Riga 45:
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):
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>
<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:
+
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</pre>
+
<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":
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</pre>
+
<pre># nft add rule filter OUTPUT position 8 ip daddr 127.0.0.8 drop</pre>
Oppure eliminare una riga avente identificativo "8":
Oppure eliminare una riga avente identificativo "8":
-
<pre># nft delete rule filter output handle 8</pre>
+
<pre># nft delete rule filter OUTPUT handle 8</pre>
Eliminare tutte le regole della tabella ''filter'' catena ''output'':
Eliminare tutte le regole della tabella ''filter'' catena ''output'':
-
<pre># nft delete rule filter output</pre>
+
<pre># nft delete rule filter OUTPUT</pre>
Svuotare completamente la tabella filter:
Svuotare completamente la tabella filter:
<pre>nft flush table filter</pre>
<pre>nft flush table filter</pre>
Riga 86: Riga 89:
</pre>
</pre>
-
=== iptables-rotate-translate ===
+
=== iptables-restore-translate ===
Per procedere è prima necessario salvare in un file testuale il contenuto di <code>iptables</code> col comando:
Per procedere è prima necessario salvare in un file testuale il contenuto di <code>iptables</code> col comando:

Versione attuale delle 16:09, 6 lug 2019

Debian-swirl.png Versioni Compatibili
Tutte le versioni supportate di Debian
Gateway-Router

Sommario

Indice

Introduzione

nftables è la nuova infrastruttura per l'analisi e manipolazione dei pacchetti di rete che sostituisce la vecchia iptables. 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 xtables-nft che permettono di agire su nftables usando la vecchia sintassi di iptables.
Naturalmente come sempre in questi casi la transizione non sarà netta da un giorno all'altro, ma il vecchio iptables continuerà a sopravvivere come strumento legacy (difficile dire per quanto), visto che tra l'altro nftables presenta un livello di compatibilità con il suo predecessore.

Installazione

Per usare gli strumenti del gruppo xtables-nft non è necessario fare alcunché in Buster, infatti questi sono già disponibili di serie come già detto, mentre in Stretch è necessario installare il pacchetto iptables-nftables-compat

# apt install iptables-nftables-compat

infatti in Stretch non si parla di xtables-nft,ma di xtables-compat. A prescindere dai nomi usati le due famiglie contengono gli stessi strumenti che permettono di gestire l'architettura nftables attraverso la vecchia sintassi di iptables, oltre a quelli di traduzione dei comandi iptables-translate, iptables-restore-translate, ecc. Per quando riguarda la vecchia sintassi si rimanda alla guida di iptables.
Per poter usare invece il nuovo strumento nft e quindi la sintassi nativa di nftables è necessario installare il pacchetto nftables

# apt install nftables

presente sia in Buster che Stretch.

Cambiare infrastruttura

Come scritto nell'introduzione nftables è lo standard in Buster, ma è comunque possibile continuare ad usare la vecchia infrastruttura attraverso iptables-legacy usando il comando update-alternatives come mostrato nel sottostante esempio:

# 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

Quindi anche se l'eseguibile di riferimento cambia, il collegamento simbolico no, ovvero i comandi continueranno ad essere dati digitando # iptables opzioni comando ecc..

Sintassi nft

Mostrare tutte le regole di tutte le tabelle (tutto in una parola):

# nft list ruleset

Salvare tutte regole in un file testuale (utile per rendere permanente il tutto, si veda più sotto):

# nft list ruleset > /mio/percorso/nftables.conf

Caricare tutte le regole salvate in un file:

# nft -f /mio/percorso/nftables.conf

Elencare tutte le tabelle:

# nft list tables

Elencare tutte le catene e le regole della tabella filter appartenente alla famiglia ip:

# nft list table ip filter

Come sopra, ma in più visualizzando anche gli handle, ovvero i riferimenti univoci di ogni riga:

# nft list table ip filter -a

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):

nft add rule ip filter INPUT iifname "enp1s0" ct state new tcp dport 6666 counter accept

Come sopra, ma la regola viene inserita all'inizio e non appesa alla fine (un esempio per riga):

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

Inserire una nuova regola subito dopo quella avente identificativo "8":

# nft add rule filter OUTPUT position 8 ip daddr 127.0.0.8 drop

Oppure eliminare una riga avente identificativo "8":

# nft delete rule filter OUTPUT handle 8

Eliminare tutte le regole della tabella filter catena output:

# nft delete rule filter OUTPUT

Svuotare completamente la tabella filter:

nft flush table filter

Per maggiori informazioni sulla nuova sintassi si rimanda alla sezione Approfondimenti in coda a questa pagina.

Caricare automaticamente le regole

Come nel caso di iptables tutte le regole dichiarate saranno perse al riavvio della macchina, ma al momento non esiste uno strumento come iptables-persistent.
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.
Come già scritto nella precedente sezione è possibile salvare le regole col comando nft list ruleset e ricaricarle con nft -f, pertanto:

# nft list ruleset > /etc/nftables.conf

e a questo punto editare crontab

# crontab -e

aggiungendo la seguente riga:

@reboot /usr/sbin/nft -f /etc/nftables.conf

in modo che ad ogni riavvio vengano ricaricate in automatico tutte le regole.

Migrare da iptables

Sono stati sviluppati alcuni strumenti di conversione per facilitare la migrazione dalla sintassi di iptables a quella di nftables. In particolare:

iptables-translate

Se non si hanno molte regole da convertire questo è probabilmente il modo migliore di procedere, per tre motivi:

  1. permette immediatamente di vedere se una certa regola può essere tradotta correttamente;
  2. permette di avere un idea di come è cambiata la sintassi;
  3. permette di generale un elenco di regole chiaro e pulito (vedere il comando nft list ruleset > nftables.conf).

Esempio:

# 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

iptables-restore-translate

Per procedere è prima necessario salvare in un file testuale il contenuto di iptables col comando:

# iptables-save > save.txt

Quindi convertire detto file in uno compatibile per iptables

# iptables-restore-translate -f save.txt > ruleset.nft

e infine procedere al caricamento vero e proprio:

# nft -f ruleset.nft

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

Manpages

Sitografia




Guida scritta da: Wtf 22:27, 5 mag 2019 (CEST)

Swirl-auth20.png Debianized 20%

Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Risorse
Strumenti