3 155
contributi
Wtf (discussione | contributi) m (→Introduzione) |
Wtf (discussione | contributi) m (→Sintassi nft) |
||
(17 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
<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> | ||
Riga 11: | Riga 10: | ||
<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 | |||
==Sintassi <code>nft</code>== | 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 -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. | 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> | ||
Riga 40: | 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 === | === iptables-translate === | ||
Se non si hanno molte regole da convertire questo è probabilmente il modo migliore di procedere, per tre motivi: | 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 immediatamente di vedere se una certa regola può essere tradotta correttamente; | ||
# permette di avere un idea di come è cambiata la sintassi; | # 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>). | # permette di generale un elenco di regole '''chiaro e pulito''' (vedere il comando <code>nft list ruleset > nftables.conf</code>). | ||
Esempio: | Esempio: | ||
<pre> | <pre> | ||
Riga 53: | Riga 92: | ||
nft add rule ip filter INPUT tcp dport 22 ct state new counter accept | nft add rule ip filter INPUT tcp dport 22 ct state new counter accept | ||
</pre> | </pre> | ||
=== iptables-restore-translate === | |||
=== iptables- | |||
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: | ||
<pre># iptables-save > save.txt</pre> | <pre># iptables-save > save.txt</pre> | ||
Riga 63: | Riga 100: | ||
<pre># nft -f ruleset.nft</pre> | <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''). | 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 88: | Riga 120: | ||
|Numero_revisori=0 | |Numero_revisori=0 | ||
}} | }} | ||
[[Categoria:Firewall]] | [[Categoria:Firewall]] |
contributi