7865
Commento:
|
← Versione 28 del 22/04/2022 22.35.15 ⇥
6957
Verificata 22.04
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
## https://wiki.ubuntu-it.org/Sicurezza/Iptables #format wiki |
|
Linea 2: | Linea 4: |
[[BR]] ||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]|| |
<<BR>> <<Indice(depth=2 align=right)>> <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=442733"; rilasci="22.04 20.04";)>> |
Linea 7: | Linea 10: |
'''Iptables''' è uno strumento per configurare il firewall di Linux, installato in modo predefinito su Ubuntu. | '''Iptables''' è il firewall, da linea di comando, configurato in modo predefinito su Ubuntu fino alla versione '''20.04'''.<<BR>> È un programma utilizzato in spazio utente usato per configurare l'insieme di regole di filtraggio dei pacchetti e del [[https://it.wikipedia.org/wiki/Network_address_translation|NAT]] di Linux. È pensato per gli amministratori di sistema. |
Linea 9: | Linea 13: |
Ci sono molte informazioni disponibili per '''iptables''', ma per la maggior parte sono abbastanza complicate. Questo howto mostrerà invece come avere un firewall minimale ma robusto. | {{{#!wiki note Da '''Ubuntu 20.10''' è stato sostituito da [[Sicurezza/Nftables|nftables]]. Tuttavia è ancora possibile usare '''Iptables'''. }}} |
Linea 11: | Linea 17: |
= I concetti di base = | {{{#!wiki important Tutti i comandi citati in questa pagina vanno digitati nel [[AmministrazioneSistema/Terminale|terminale]] con i [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|privilegi di amministrazione]] . }}} |
Linea 13: | Linea 21: |
Un computer connesso ad internet scambia continuamente dati col resto del mondo. | == Concetti di base == |
Linea 15: | Linea 23: |
I dati che dal mondo esterno entrano nel nostro computer possono essere di tipo "buono", come ad esempio una pagina di un sito che abbiamo richiesto, un amico che ci contatta in chat o un file che stiamo scaricando con un programma di filesharing, e di tipo "cattivo", come ad esempio un ''cracker'' che ci contatta in vari modi e a nostra insaputa per cercare di entrare nel nostro computer. | Un computer connesso a Internet scambia continuamente dati con il resto del mondo. |
Linea 17: | Linea 25: |
Il compito del firewall è riconoscere il traffico buono da quello cattivo, e bloccare il traffico cattivo. Per farlo, ha bisogno che siamo noi a dirgli cosa è buono e cosa no, mediante delle regole per fare i controlli sul traffico di dati. | I dati che entrano in un computer dall'esterno possono essere di tipo normale e legittimo (ad esempio la pagina di un sito richiesta da un browser, un messaggio in chat ecc.) oppure di tipo malevolo (ad esempio un ''cracker'' che cerca di accedere ad un computer all'insaputa dell'utente in maniera fraudolenta).<<BR>> Il compito del firewall è riconoscere il traffico "buono" da quello "cattivo", bloccando quest'ultimo. Per farlo, ha bisogno di essere opportunamente istruito, mediante delle regole impostate sul traffico dati che stabiliscano cosa è "buono" e cosa è "cattivo". |
Linea 19: | Linea 28: |
'''Iptables''' raggruppa tutti i controlli che può fare sul traffico in entrata, nella cosiddetta ''Chain INPUT'', catena di input. I controlli sul traffico in uscita sono invece raggruppati nella ''Chain OUTPUT''. La ''Chain FORWARD'' serve per esempio quando il traffico di dati non è indirizzato a noi ma passa comunque per il nostro computer. | '''Iptables''' raggruppa tutti i controlli da eseguire sul traffico in entrata, nella cosiddetta ''Chain INPUT'' (catena di input). I controlli sul traffico in uscita sono invece raggruppati nella ''Chain OUTPUT''. La ''Chain FORWARD'' serve, ad esempio, quando il traffico di dati non è indirizzato ad uno specifico computer, ma passa comunque attraverso quest'ultimo. |
Linea 21: | Linea 30: |
Ognuna di queste catene ha una ''policy'', una politica, cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. | Ognuna di queste catene ha una ''policy'', cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. Occorre però tenere conto che da impostazione predefinita viene accettato l'intero traffico dati. |
Linea 23: | Linea 32: |
== Cosa serve per impostare iptables == | = Selezione tra Iptables e Nftables = |
Linea 25: | Linea 34: |
Fortunatamente '''iptables''' si trova nel kernel Linux a partire dalla versione '''2.6''', quindi tutte le maggiori distribuzioni GNU/Linux lo possiedono già ed è attivo appena accendete il computer. Per gli esperimenti sulla configurazione di '''iptables''' è necessario usare il [:RigaDiComando:terminale], dal quale vengono lanciati i singoli comandi che impostano le regole del firewall. È utile anche sapere cos'è e come agisce il comando '''[:Sudo:sudo]'''. == Limitazione di questa guida == Dal momento che i comandi che trovate in questa guida servono a modificare la configurazione del firewall "a caldo", senza scrivere niente in file di configurazione, ma caricando direttamente le impostazioni in memoria, al successivo avvio del computer la configurazione fatta non sarà più disponibile. Per ovviare a questo problema si possono inserire i comandi in uno script da lanciare all'avvio del computer. |
Consultare la [[https://wiki.ubuntu-it.org/Sicurezza/Nftables#Selezione|relativa guida]]. |
Linea 39: | Linea 38: |
Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente digitare in un terminale:{{{ sudo iptables -L |
Per controllare la configurazione di '''iptables''' digitare:{{{ iptables -L }}} oppure: {{{ iptables -S |
Linea 43: | Linea 45: |
Per esempio, con Ubuntu appena installato, il firewall è sì attivo, ma non ha ancora una vera configurazione, perciò l'output dovrebbe essere: {{{ Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination |
Qualora le informazioni mostrate non siano sufficienti, aggiungere le opzioni `-v` e/o `--line-numbers -n`, come negli esempi seguenti: {{{ iptables -L -v iptables -L --line-numbers -n |
Linea 57: | Linea 50: |
In modo predefinito il firewall lascia passare tutto, come indicano le scritte "''policy ACCEPT''" e l'assenza di altre regole. | Per un elenco completo delle opzioni diigtare: {{{ man iptables }}} |
Linea 59: | Linea 54: |
A volte le informazioni mostrate non sono sufficienti; in questi casi basta aggiungere '''-v''' oppure '''-vv''' al precedente comando. Per esempio: {{{ sudo iptables -vv -L |
= Esempio di impostazione di policy di base = Nel seguente esempio viene bloccato tutto il traffico in entrata per poi successivamente consentire il traffico desiderato e ritenuto non malevolo, infine abilitando delle determinate porte. 0. Per impostare una ''policy'' che blocchi tutti i pacchetti in entrata digitare: {{{ iptables -P INPUT DROP }}} {{{#!wiki note Questa policy, da sola, non permette l'utilizzo di normali funzionalità, come la navigazione web. |
Linea 63: | Linea 65: |
= Impostare le policy di base = Per iniziare, possiamo bloccare tutto il traffico proveniente dal mondo esterno (per poi in seguito consentire solo il traffico che riteniamo buono), impostando una ''policy'' che faccia scomparire nel nulla tutti i pacchetti in entrata: {{{ sudo iptables -P INPUT DROP |
0. Impostare inoltre la seguente ''policy'', per bloccare il traffico che passa attraverso il computer: {{{ iptables -P FORWARD DROP |
Linea 69: | Linea 69: |
In questo momento non possiamo navigare nel web, e più in generale il nostro PC non si accorgerà di qualsiasi dato ci venga spedito da chicchessia. Niente paura, fra qualche riga vedremo come istruire '''iptables''' a lasciare passare il traffico a cui siamo interessati. Un'altra buona ''policy'' da impostare è: {{{ sudo iptables -P FORWARD DROP |
0. Per consentire tutto il traffico interno al computer, che passa per l'interfaccia di ''loopback'' "'''lo'''", digitare: {{{ iptables -A INPUT -i lo -j ACCEPT |
Linea 75: | Linea 73: |
Per quanto riguarda il traffico che dal nostro PC esce verso il mondo esterno, possiamo benissimo permetterlo senza preoccuparci troppo; infatti, se MS Windows è succube di programmini malefici che una volta insediatisi in un PC tentano di comunicare (dati sensibili, attacchi informatici, eccetera) col mondo esterno, ciò in GNU/Linux non avviene, o meglio la probabilità che avvenga è del tutto risibile. == Le prime regole utili == Innanzitutto dobbiamo consentire tutto il traffico interno al nostro computer, che passa per l'interfaccia di ''loopback'' "'''lo'''". Quindi da terminale digitiamo: {{{ sudo iptables -A INPUT -i lo -j ACCEPT |
0. Per consentire il traffico in entrata che è stato richiesto legittimamente (per permettere ad esempio la navigazione web) digitare: {{{ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT }}} 0. Per permettere ad utenti esterni di contattare il PC e di inviare dati (ad esempio se è installato un [[InternetRete/ConfigurazioneRete/OpenSsh|server SSH]], un [[Server/Web|server web]] o un programma che per essere eseguito deve fungere da server) è necessario consentire il traffico ''tcp'' sulla porta 22 (salvo diversa configurazione personalizzata). A tale scopo digitare:{{{ iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
Linea 83: | Linea 81: |
La seconda cosa che potremmo voler fare è navigare nel web e più in generale lasciare entrare tutto il traffico che è stato da noi richiesto: {{{ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
0. Per consentire il traffico per il server web è necessario abilitare la porta 80 (salvo diversa configurazione personalizzata). A tale scopo digitare:{{{ iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
Linea 87: | Linea 85: |
== Consentire l'ingresso su porte specifiche == Ci sono situazioni in cui vogliamo permettere a un utente esterno di contattare il nostro PC e di inviarci dati, per esempio se abbiamo installato un [:SSHHowto:server SSH] o un [:Server/Web:server web]. Il nostro server SSH usa la porta 22 (a meno che non lo abbiamo configurato diversamente), quindi dobbiamo dire a '''iptables''' di lasciare entrare il traffico ''tcp sulla'' porta 22 (il relativo traffico di risposta lo abbiamo già permesso prima), quindi: {{{ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT }}} In ogni momento possiamo controllare come abbiamo configurato il firewall, come spiegato precedentemente. Il server web usa la porta 80 (anche qui, a meno di configurazioni personalizzate), quindi consentiamo tutto il traffico rivolto dall'esterno verso la nostra porta 80: {{{ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT }}} Insomma, il meccanismo dovrebbe essere chiaro. == Risultato finale == Abbiamo così ottenuto un piccolo firewall che lascia uscire tutti i dati dal nostro computer verso l'esterno, e lascia entrare tutti i dati che abbiamo richiesto: {{{ sudo iptables -vv -L |
Dopo questa procedura si avrà come risultato finale una configurazione che lascia uscire tutti i dati dal computer verso l'esterno ed entrare soltanto quelli richiesti:{{{ iptables -L -v |
Linea 124: | Linea 104: |
= Persistenza = Per rendere le regole impostate ''persistenti'', ovvero fare in modo che vengano salvate e ricaricate al prossimo avvio: 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://iptables-persistent|iptables-persistent]]. 0. Dopo aver impostato le regole digitare i seguenti due comandi: {{{ iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6 }}} = Gestione semplificata = A seconda delle proprie esigenze può tornare comodo l'utilizzo di alcuni software che semplificano il settaggio di '''Iptables'''': * '''[[http://wiki.ubuntu-it.org/Sicurezza/Ufw|Ufw]]''': strumento da [[AmministrazioneSistema/Terminale|terminale]] con comandi semplificati per le impostazioni di Iptables. * '''[[http://wiki.ubuntu-it.org/Sicurezza/Gufw|Gufw]]''': interfaccia grafica per '''Ufw'''. |
|
Linea 126: | Linea 122: |
* [http://forum.ubuntu-it.org/index.php?topic=12833.0 Discussione del forum di Ubuntu-it] | * [[http://www.netfilter.org/documentation/|Documentazione per Netfilter e Iptables]] * [[https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands|How to per Iptables]] * [[https://wiki.archlinux.org/title/iptables|Wiki di Archlinux]] * [[https://guide.debianizzati.org/index.php/Debian_e_iptables|Guida debianizzati]] * [[https://iptablesgenerator.totalbits.com|Generatore di regole per iptables]] |
Linea 128: | Linea 128: |
* [http://iptables-tutorial.frozentux.net/iptables-tutorial.html Guida a Iptables] * [http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html How-To per Iptables] * [http://www.netfilter.org/documentation/ Documentazione in varie lingua per Netfilter e Iptables] * [http://www.ubuntulinux.org/wiki/IptablesHowTo Versione originale] Traduzione di BeniaminoCaputo ## da questo punto in poi non modificare! |
Guida verificata con Ubuntu: 20.04 22.04
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
Iptables è il firewall, da linea di comando, configurato in modo predefinito su Ubuntu fino alla versione 20.04.
È un programma utilizzato in spazio utente usato per configurare l'insieme di regole di filtraggio dei pacchetti e del NAT di Linux. È pensato per gli amministratori di sistema.
Da Ubuntu 20.10 è stato sostituito da nftables. Tuttavia è ancora possibile usare Iptables.
Tutti i comandi citati in questa pagina vanno digitati nel terminale con i privilegi di amministrazione .
Concetti di base
Un computer connesso a Internet scambia continuamente dati con il resto del mondo.
I dati che entrano in un computer dall'esterno possono essere di tipo normale e legittimo (ad esempio la pagina di un sito richiesta da un browser, un messaggio in chat ecc.) oppure di tipo malevolo (ad esempio un cracker che cerca di accedere ad un computer all'insaputa dell'utente in maniera fraudolenta).
Il compito del firewall è riconoscere il traffico "buono" da quello "cattivo", bloccando quest'ultimo. Per farlo, ha bisogno di essere opportunamente istruito, mediante delle regole impostate sul traffico dati che stabiliscano cosa è "buono" e cosa è "cattivo".
Iptables raggruppa tutti i controlli da eseguire sul traffico in entrata, nella cosiddetta Chain INPUT (catena di input). I controlli sul traffico in uscita sono invece raggruppati nella Chain OUTPUT. La Chain FORWARD serve, ad esempio, quando il traffico di dati non è indirizzato ad uno specifico computer, ma passa comunque attraverso quest'ultimo.
Ognuna di queste catene ha una policy, cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. Occorre però tenere conto che da impostazione predefinita viene accettato l'intero traffico dati.
Selezione tra Iptables e Nftables
Consultare la relativa guida.
Mostrare la configurazione attuale
Per controllare la configurazione di iptables digitare:
iptables -L
oppure:
iptables -S
Qualora le informazioni mostrate non siano sufficienti, aggiungere le opzioni -v e/o --line-numbers -n, come negli esempi seguenti:
iptables -L -v iptables -L --line-numbers -n
Per un elenco completo delle opzioni diigtare:
man iptables
Esempio di impostazione di policy di base
Nel seguente esempio viene bloccato tutto il traffico in entrata per poi successivamente consentire il traffico desiderato e ritenuto non malevolo, infine abilitando delle determinate porte.
Per impostare una policy che blocchi tutti i pacchetti in entrata digitare:
iptables -P INPUT DROP
Questa policy, da sola, non permette l'utilizzo di normali funzionalità, come la navigazione web.
Impostare inoltre la seguente policy, per bloccare il traffico che passa attraverso il computer:
iptables -P FORWARD DROP
Per consentire tutto il traffico interno al computer, che passa per l'interfaccia di loopback "lo", digitare:
iptables -A INPUT -i lo -j ACCEPT
Per consentire il traffico in entrata che è stato richiesto legittimamente (per permettere ad esempio la navigazione web) digitare:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Per permettere ad utenti esterni di contattare il PC e di inviare dati (ad esempio se è installato un server SSH, un server web o un programma che per essere eseguito deve fungere da server) è necessario consentire il traffico tcp sulla porta 22 (salvo diversa configurazione personalizzata). A tale scopo digitare:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Per consentire il traffico per il server web è necessario abilitare la porta 80 (salvo diversa configurazione personalizzata). A tale scopo digitare:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Dopo questa procedura si avrà come risultato finale una configurazione che lascia uscire tutti i dati dal computer verso l'esterno ed entrare soltanto quelli richiesti:
iptables -L -v
Chain INPUT (policy DROP) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www Chain FORWARD (policy DROP) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT) pkts bytes target prot opt in out source destination
Persistenza
Per rendere le regole impostate persistenti, ovvero fare in modo che vengano salvate e ricaricate al prossimo avvio:
Installare il pacchetto iptables-persistent.
Dopo aver impostato le regole digitare i seguenti due comandi:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
Gestione semplificata
A seconda delle proprie esigenze può tornare comodo l'utilizzo di alcuni software che semplificano il settaggio di Iptables':
Ufw: strumento da terminale con comandi semplificati per le impostazioni di Iptables.
Gufw: interfaccia grafica per Ufw.