Configurare Iptables
IndiceBRTableOfContents |
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 dovrete usare il [:commandline:terminale], dal quale vengono lanciati i singoli comandi che impostano le regole del firewall.
Mostrare la configurazione attuale
Il comando
sudo iptables -L
mostra la configurazione attuale di iptables.
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.
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:
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Insomma il meccanismo dovrebbe essere chiaro.
Ulteriori informazioni
[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]