3 155
contributi
Wtf (discussione | contributi) |
Wtf (discussione | contributi) |
||
(28 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. | ||
Riga 7: | Riga 7: | ||
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''. | ||
==Sintassi <code>nft</code>== | === 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): | Mostrare tutte le regole di tutte le tabelle (tutto in una parola): | ||
<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> | ||
Elencare tutte le catene e le regole della tabella ''filter'' appartenente alla famiglia ''ip'': | Elencare tutte le catene e le regole della tabella ''filter'' appartenente alla famiglia ''ip'': | ||
<pre># nft list table ip filter</pre> | <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 list table ip filter -a</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</pre> | |||
Oppure 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=== | === 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> | 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> | 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 < | 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> | <pre># nft list ruleset > /etc/nftables.conf</pre> | ||
e a questo punto editare <code>crontab</code> aggiungendo la seguente riga: | 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> | <pre>@reboot /usr/sbin/nft -f /etc/nftables.conf</pre> | ||
in modo che ad ogni riavvio vengano ricaricate in automatico tutte le regole. | in modo che ad ogni riavvio vengano ricaricate in automatico tutte le regole. | ||
Riga 37: | Riga 75: | ||
* <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 == |
contributi