Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "IpTablesHowTo"
Differenze tra le versioni 2 e 12 (in 10 versioni)
Versione 2 del 15/06/2005 16.11.16
Dimensione: 5223
Autore: h217-220-127-128
Commento:
Versione 12 del 18/12/2006 14.10.16
Dimensione: 7932
Autore: DavideLuigi
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
= IpTablesHowTo = = Configurare Iptables =
[[BR]]
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]||
Iptables è un firewall, installato di default su Ubuntu, che sostituisce il vecchio ipchains.
Linea 3: Linea 6:
= How-To di base su Iptables per Ubuntu = 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.
Linea 5: Linea 8:
Iptables è un firewall, installato di default su Ubuntu
Linea 7: Linea 9:
Ci sono molte informazioni disponibili per iptables, ma la maggior parte di esse abbastanza complicate; questo howto è indirizzato a chi ha la necessità di configurare un firewall semplice. == I concetti di base(ma proprio di base) ==
Linea 9: Linea 11:
== Comandi di base == Un computer connesso ad internet scambia continuamente dati col resto del mondo.
Linea 11: Linea 13:
Il comando 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.

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 ad esempio quando il traffico di dati non è indirizzato a noi ma passa comunque per il nostro computer.

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.

== Cosa serve per impostare iptables ==

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.

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.

E' utile anche sapere cos'è e come agisce il comando [:sudo:].

Non guasterebbe di certo una infarinatura generale sui protocolli di rete.
 
== Importante limitazione di questo Howto ==

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.

== Mostrare la configurazione attuale ==

Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente dare da terminale:
Linea 15: Linea 40:
# iptables -L sudo iptables -L
Linea 19: Linea 44:
mostra la configurazione attuale di. Dopo l'installazione, non ci sono regole impostate e l'output dovrebbe essere
Ad esempio, con Ubuntu appena installato, il firewall è sì attivo, ma non ha ancora una vera configurazione, perciò l'output dovrebbe essere
Linea 37: Linea 63:
== Consentire il traffico per sessioni iniziate == cioè di default il firewall lascia passare di tutto, come indicano le scritte "policy ACCEPT" e l'assenza di altre regole.
Linea 39: Linea 65:
Possiamo consentire che sessioni iniziate possano ricevere dati: A volte le informazioni mostrate non sono sufficienti; in questi casi basta aggiungere -v oppure -vv al precedente comando. Ad 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 (azione di default) che faccia scomparire nel nulla tutti i pacchetti in entrata:
Linea 43: Linea 77:
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 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
Linea 49: Linea 111:
Potete iniziare bloccando il traffico, ma se state lavorando con SSH, avete bisogno di permettere il traffico su SSH prima di bloccare tutto. 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].
Linea 51: Linea 113:
Per consentire il traffico in ingresso sulla porta 22 (porta standard per il protocollo SSH), potete dire a iptables di consentire tutto il traffico TCP sulla porta 22 per la vostra scheda di rete. 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 55: Linea 117:
# iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Linea 59: Linea 121:
Specificatamente, questo comando aggiunge (-A) alla catena di INPUT la regola che tutto il traffico TCP (-p) sulla interfaccia (-i) eth0 per la porta di destinazione ssh venga consentito (-j ACCEPT). In ogni momento possiamo controllare come abbiamo configurato il firewall, come spiegato in una precedente sezione.
Linea 61: Linea 123:
Ricontrolliamo le impostazioni: (solo le prime linee, l'output mostra altre linee) 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 65: Linea 127:
# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Linea 77: Linea 131:
Ora, consentiamo tutto il traffico web Insomma il meccanismo dovrebbe essere chiaro.
Linea 79: Linea 133:
== 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:
Linea 80: Linea 137:
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
Linea 81: Linea 147:
# iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT Chain FORWARD (policy DROP)
 pkts bytes target prot opt in out source destination
Linea 83: Linea 150:
}}}

Ricontrollando le regole, avremo

{{{

# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

ACCEPT tcp -- anywhere anywhere tcp dpt:www

}}}

Abbiamo consentito il traffico TCP sulle porte ssh e web, ma siccome non abbiamo bloccato niente, tutto il traffico può ancora entrare.

== Bloccare il traffico ==

Iptables, quando trova una regola che soddisfa un pacchetto, non controlla altre regole. Siccome le nostre regole per consentire il traffico ssh e web sono le prime, delle regole per bloccare tutto il traffico, possiamo continuare a ricevere il traffico che vogliamo. Quello che ci serve è impostare una regola che blocchi tutto il traffico alla fine. Il comando -A dice ad iptables di aggiungere la regola alla fine, quindi usiamo lo stesso comando.

{{{

# iptables -A INPUT -j DROP

# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

ACCEPT tcp -- anywhere anywhere tcp dpt:www

DROP all -- anywhere anywhere

}}}

Siccome non abbiamo specificato una interfaccia o un protocollo, tutto il traffico per qualsiasi interfaccia verrà bloccato, eccetto quello per le porte ssh e web.

== Editare le regole di Iptables ==

L'unico problema con le impostazioni effettuate è che anche la porta loopback è bloccata. Potevamo impostare la regola DROP solo per l'interfaccia eth0 specificando -i eth0, ma possiamo anche aggiungere una regola per l'interfaccia loopback. Aggiungendo ora la regola in append, sarebbe inutile in quanto la regola precedente ha già bloccato tutto il traffico. Abbiamo la necessità di inserire la nuova regola nella quarta linea.

{{{

# iptables -I INPUT 4 -i lo -j ACCEPT

# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

ACCEPT tcp -- anywhere anywhere tcp dpt:www

ACCEPT all -- anywhere anywhere

DROP all -- anywhere anywhere

}}}

Le ultime due linee sembrano simili, quindi chiediamo a iptables di elencare maggiori dettagli.

{{{

# iptables -L -v
Chain OUTPUT (policy ACCEPT)
 pkts bytes target prot opt in out source destination
Linea 166: Linea 155:

Una discussione del forum di Ubuntu-it parla più approfonditamente di iptables: http://forum.ubuntu-it.org/index.php?topic=12833.0
Linea 176: Linea 167:
----
CategoryDaRevisionare

Configurare Iptables

BR

Iptables è un firewall, installato di default 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(ma proprio 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, 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.

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 ad esempio quando il traffico di dati non è indirizzato a noi ma passa comunque per il nostro computer.

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.

Cosa serve per impostare iptables

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.

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.

E' utile anche sapere cos'è e come agisce il comando [:sudo:].

Non guasterebbe di certo una infarinatura generale sui protocolli di rete.

Importante limitazione di questo Howto

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.

Mostrare la configurazione attuale

Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente dare da terminale:

sudo iptables -L

Ad 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

cioè di default il firewall lascia passare di 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. Ad 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 (azione di default) 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, ad 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 in una precedente sezione.

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 informazioni

Una discussione del forum di Ubuntu-it parla più approfonditamente di iptables: http://forum.ubuntu-it.org/index.php?topic=12833.0

[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]

Traduzione di BeniaminoCaputo

[http://www.ubuntulinux.org/wiki/IptablesHowTo Versione originale]


CategoryDaRevisionare