Dimensione: 7932
Commento:
|
Dimensione: 7798
Commento: revisionata la pagina
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
= Configurare Iptables = | #LANGUAGE it |
Linea 4: | Linea 4: |
Iptables è un firewall, installato di default su Ubuntu, che sostituisce il vecchio ipchains. | |
Linea 6: | Linea 5: |
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. | = Introduzione = |
Linea 8: | Linea 7: |
'''Iptables''' è un firewall, installato in modo predefinito su Ubuntu, che sostituisce il vecchio '''ipchains'''. | |
Linea 9: | Linea 9: |
== I concetti di base(ma proprio di base) == | 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. = I concetti di base = |
Linea 13: | Linea 15: |
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, o 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. | 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. |
Linea 16: | Linea 18: |
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 ad esempio quando il traffico di dati non è indirizzato a noi ma passa comunque per il nostro computer. | |
Linea 18: | Linea 19: |
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. | '''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. 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. |
Linea 22: | Linea 25: |
Per prima cosa bisogna avere iptables :-P ; 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. | 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. |
Linea 24: | Linea 27: |
Per gli esperimenti sulla configurazione di iptables dovremo usare il [:commandline:terminale], dal quale vengono lanciati i singoli comandi che impostano le regole del firewall. | 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. |
Linea 26: | Linea 29: |
E' utile anche sapere cos'è e come agisce il comando [:sudo:]. | È utile anche sapere cos'è e come agisce il comando '''[:Sudo:sudo]'''. == Limitazione di questa guida == |
Linea 28: | Linea 33: |
Non guasterebbe di certo una infarinatura generale sui protocolli di rete. == Importante limitazione di questo Howto == |
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. |
Linea 32: | Linea 35: |
Dal momento che i comandi che trovate in questo howto 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. | Per ovviare a questo problema si possono inserire i comandi in uno script da lanciare all'avvio del computer. |
Linea 34: | Linea 37: |
== Mostrare la configurazione attuale == | = Mostrare la configurazione attuale = |
Linea 36: | Linea 39: |
Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente dare da terminale: {{{ |
Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente digitare in un terminale:{{{ |
Linea 41: | Linea 41: |
Linea 44: | Linea 43: |
Ad esempio, con Ubuntu appena installato, il firewall è sì attivo, ma non ha ancora una vera configurazione, perciò l'output dovrebbe essere {{{ |
Per esempio, con Ubuntu appena installato, il firewall è sì attivo, ma non ha ancora una vera configurazione, perciò l'output dovrebbe essere: {{{ |
Linea 60: | Linea 55: |
Linea 63: | Linea 57: |
cioè di default il firewall lascia passare di tutto, come indicano le scritte "policy ACCEPT" e l'assenza di altre regole. | In modo predefinito il firewall lascia passare tutto, come indicano le scritte "''policy ACCEPT''" e l'assenza di altre regole. |
Linea 65: | Linea 59: |
A volte le informazioni mostrate non sono sufficienti; in questi casi basta aggiungere -v oppure -vv al precedente comando. Ad esempio: {{{ |
A volte le informazioni mostrate non sono sufficienti; in questi casi basta aggiungere '''-v''' oppure '''-vv''' al precedente comando. Per esempio: {{{ |
Linea 71: | Linea 63: |
== Impostare le policy di base == | = Impostare le policy di base = |
Linea 73: | Linea 65: |
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 (azione di default) che faccia scomparire nel nulla tutti i pacchetti in entrata: {{{ |
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: {{{ |
Linea 78: | Linea 67: |
Linea 81: | 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. | 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. |
Linea 83: | Linea 71: |
Un'altra buona policy da impostare è: {{{ |
Un'altra buona ''policy'' da impostare è: {{{ |
Linea 89: | Linea 73: |
Linea 92: | Linea 75: |
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. | 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. |
Linea 95: | Linea 78: |
Innanzitutto dobbiamo consentire tutto il traffico interno al nostro computer, che passa per l'interfaccia di loopback "lo". Quindi da terminale digitiamo: | |
Linea 97: | Linea 79: |
{{{ sudo iptables -A INPUT -i lo -j ACCEPT |
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 |
Linea 101: | Linea 83: |
La seconda cosa che potremmo voler fare è navigare nel web, e più in generale lasciare entrare tutto il traffico che è stato da noi richiesto: {{{ |
La seconda cosa che potremmo voler fare è navigare nel web e più in generale lasciare entrare tutto il traffico che è stato da noi richiesto: {{{ |
Linea 106: | Linea 85: |
Linea 111: | Linea 89: |
Ci sono situazioni in cui vogliamo permettere a un utente esterno di contattare il nostro pc e di inviarci dati, ad esempio se abbiamo installato un [:SSHHowto:server ssh] o un [:WebServer:server web]. | 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 [:WebServer:server web]. |
Linea 113: | Linea 91: |
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: {{{ |
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: {{{ |
Linea 118: | Linea 93: |
Linea 121: | Linea 95: |
In ogni momento possiamo controllare come abbiamo configurato il firewall, come spiegato in una precedente sezione. | In ogni momento possiamo controllare come abbiamo configurato il firewall, come spiegato precedentemente. |
Linea 123: | Linea 97: |
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: {{{ |
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: {{{ |
Linea 128: | Linea 99: |
Linea 131: | Linea 101: |
Insomma il meccanismo dovrebbe essere chiaro. | Insomma, il meccanismo dovrebbe essere chiaro. |
Linea 135: | Linea 105: |
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: {{{ |
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: {{{ |
Linea 139: | Linea 108: |
Linea 154: | Linea 124: |
== Ulteriori informazioni == | = Ulteriori risorse = |
Linea 156: | Linea 126: |
Una discussione del forum di Ubuntu-it parla più approfonditamente di iptables: http://forum.ubuntu-it.org/index.php?topic=12833.0 | * [http://forum.ubuntu-it.org/index.php?topic=12833.0 Discussione del forum di Ubuntu-it] |
Linea 158: | Linea 128: |
[http://iptables-tutorial.frozentux.net/iptables-tutorial.html Guida a Iptables] | * [http://iptables-tutorial.frozentux.net/iptables-tutorial.html Guida a Iptables] |
Linea 160: | Linea 130: |
[http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html How-To per Iptables] | * [http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html How-To per Iptables] |
Linea 162: | Linea 132: |
[http://www.netfilter.org/documentation/ Documentazione in varie lingua per Netfilter e Iptables] | * [http://www.netfilter.org/documentation/ Documentazione in varie lingua per Netfilter e Iptables] * [http://www.ubuntulinux.org/wiki/IptablesHowTo Versione originale] |
Linea 165: | Linea 137: |
[http://www.ubuntulinux.org/wiki/IptablesHowTo Versione originale] ---- CategoryDaRevisionare |
IndiceBRTableOfContents |
Introduzione
Iptables è un firewall, installato in modo predefinito su Ubuntu, che sostituisce il vecchio ipchains.
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.
I concetti di base
Un computer connesso ad internet scambia continuamente dati col resto del mondo.
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.
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.
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.
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.
Cosa serve per impostare iptables
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.
Mostrare la configurazione attuale
Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente digitare in un terminale:
sudo iptables -L
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
In modo predefinito il firewall lascia passare tutto, come indicano le scritte "policy ACCEPT" e l'assenza di altre regole.
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
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
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
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
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
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 [:WebServer: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
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
Ulteriori risorse
[http://forum.ubuntu-it.org/index.php?topic=12833.0 Discussione del forum di Ubuntu-it]
[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