Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Sicurezza/Iptables"
Differenze tra le versioni 3 e 28 (in 25 versioni)
Versione 3 del 10/04/2007 12.23.36
Dimensione: 7865
Commento:
Versione 28 del 22/04/2022 22.35.15
Dimensione: 6957
Autore: carlin0
Commento: 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.

  1. 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.

  2. Impostare inoltre la seguente policy, per bloccare il traffico che passa attraverso il computer:

    iptables -P FORWARD   DROP
  3. Per consentire tutto il traffico interno al computer, che passa per l'interfaccia di loopback "lo", digitare:

    iptables -A INPUT  -i lo -j ACCEPT
  4. 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
  5. 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
  6. 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:

  1. Installare il pacchetto iptables-persistent.

  2. 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.

Ulteriori risorse


CategorySicurezza