Articoli Taggati ‘Firewall’

Iptables Firewall Ubuntu

Introduzione

Iptables è il firewall, da linea di comando, installato in modo predefinito su Ubuntu. Questo howto mostrerà brevemente 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.

Come impostare un firewall in modo semplice e veloce

Seguite la guida per Firestarter

Cosa serve per impostare iptables

Il firewall è incluso in Ubuntu ed è attivo all’avvio del sistema senza richiedere alcuna azione da parte dell’utente. Anche iptables è incluso in Ubuntu, e bisogna usarlo da riga di comando per configurare il firewall.

Per usare iptables sono necessari i privilegi di amministrazione.

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 loopbacklo“. 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 server SSH, un server web o un programma che per svolgere il suo compito deve fungere anche da server, ad esempio un programma di filesharing come aMule.

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 che dall’esterno chiede di entrare attraverso la nostra porta 80:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Il programma di filesharing aMule deve accettare connessioni in entrata per poter funzionare al meglio. Per impostazione predefinita usa le porte 4662(con protocollo tcp) e 4672(con protocollo udp), quindi le seguenti regole indicano al firewall di accettare il traffico in ingresso su quelle due porte:

sudo iptables -A INPUT -p tcp --dport 4662 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4672 -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

Firewall Ubuntu

Introduzione

Buona parte degli utenti che arrivano da Windows sono abituati a dare per scontato l’utilizzo del firewall sul proprio sistema operativo, dove lo si usa indiscriminatamente per “barricare” il sistema e poi consentire via via l’accesso alla rete ai programmi che si vogliono utilizzare. Questo perché c’è sempre la paura che alcuni servizi si attivino all’insaputa dell’utente e facciano in modo che il proprio pc e i suoi dati sensibili possano essere esposti alla rete.

Nei sistemi GNU/Linux il firewall ritorna ad essere lo strumento da utilizzare nel caso l’utente decida d’installare programmi per mettere a disposizione servizi dal suo pc verso altri pc con regole ben precise. Per l’utilizzo desktop così come lo troviamo per predefinito su Ubuntu, escludendo alcuni casi specifici, si può affermare che il firewall praticamente non serva.

In questa guida vengono approfonditi in modo discorsivo alcuni aspetti tecnici, in modo che anche chi non ha profonde conoscenze tecniche possa comprendere la logica di base che porta ad una così grande differenza fra i due sistemi a proposito di sicurezza di rete.

Il traffico di rete

Le principali vie del traffico di rete sono in entrata e uscita. Più nello specifico il traffico è costituito da:

  • Connessioni in entrata
  • Connessioni in uscita

Quello che spesso risulta essere poco chiaro è la differenza fra questi due tipi di connessione.

Per chiarire queste differenze è vivamente consigliata la lettura della guida sulle connessioni, alla fine della quale saranno chiari i concetti di connessioni di INPUT, OUTPUT e FORWARD, fondamentali per capire quale è il compito di un firewall all’interno di una rete.

Su Ubuntu Desktop è necessario il firewall?

Gli applicativi installati in modo predefinito nella versione Desktop di Ubuntu sono pensati essenzialmente per consentire di uscire su internet alla ricerca di informazioni, file o quant’altro, piuttosto che per accettare connessioni in entrata dall’esterno.

I programmi che accettano connessioni dall’esterno sono detti server. Questa categoria comprende per fare alcuni esempi i server web che ospitano le pagine HTML, oppure i server ssh o telnet, i quali consentono l’apertura di una shell su di un pc remoto.
Nella versione Desktop di Ubuntu sono presenti alcuni server, ma volti principalmente all’utilizzo delle periferiche hardware come X (grafica video), cups (stampa), sane (scanner), ecc.., di default chiusi verso connessioni esterne.

Chiunque desideri offrire un servizio di rete ad utenti remoti deve necessariamente installare un apposito programma server sul proprio pc; questo programma si mette in ascolto su una porta, e tutte le connessioni INPUT entranti si connettono a questa porta per entrare in comunicazione con il server.

Non è possibile connettersi da remoto ad un pc se non c’è almeno un server in ascolto su una qualsiasi porta. Per fare un esempio banale è come bussare ad una casa disabitata: nessuno verrà ad aprire.

I server menzionati in precedenza (tipo web, ssh, telnet..) di default non vengono installati, pertanto è perfettamente inutile installare un firewall per regolamentare l’accesso a porte sulle quali nessun programma è in ascolto (come avere un poliziotto in un quartiere deserto).
Anche nel caso in cui si installi esplicitamente un programma server, come ad esempio tutti i programmi p2p è ancora inutile utilizzare un firewall allo scopo di chiudere le porte. Difatti questo avrebbe il solo scopo di impedire ai server installati di accedere alla rete e compiere il loro dovere!

Più avanti all’interno di questa guida verranno valutati i casi in cui il firewall può rendersi necessario anche su di un sistema desktop.

Differenze con Windows

Solitamente gli utenti di Windows sono abituati ad utilizzare un firewall, questo sostanzialmente per due motivi:

  1. Windows tende ad effettuare molte operazioni all’insaputa dell’utente, e di default ha attivi molti server in ascolto sulla rete (connessioni INPUT). Visto che le porte di questi server sono, per ovvi motivi, quelle più attaccate dai bot automatici su internet, molti utenti cercano un minimo di sicurezza impedendo l’accesso dall’esterno a questi server che non è possibile “disattivare” o “disinstallare”.
  2. Non solo Windows agisce come server all’insaputa dell’utente, ma spesso si connette automaticamente ad internet per eseguire operazioni poco chiare. Inoltre molti virus o spyware cercano automaticamente di connettersi all’esterno per eseguire i loro loschi compiti. Per questi motivi gli utenti di Windows sono soliti tenere sotto controllo anche le connessioni in uscita (OUTPUT), visto che la natura closed-source del loro sistema operativo e la sua naturale tendenza ad essere infettato da tutto e tutti lo rendono privo delle necessarie garanzie di trasparenza su cui fare affidamento.

Nel primo caso spesso il firewall integrato nella maggior parte dei router è sufficiente a bloccare il traffico in entrata.
Mentre nel secondo caso per tenere a bada le connessioni “indesiderate” in uscita, risulta più agevole l’utilizzo di un firewall installato sul sistema operativo stesso.

I vantaggi di GNU/Linux sotto questi aspetti sono piuttosto evidenti. Il sistema non effettua alcuna operazione sospetta o nascosta all’utente e proprio per la sua natura opensource (e quindi di trasparenza), eventuali comportamenti anomali sarebbero facilmente individuabili dalla comunità che lavora al suo sviluppo.
Inoltre la sua proverbiale immunità ai virus fa sì che le sue connessioni in uscita siano considerate con abbondanti margini sicure.

Connessione tramite router

Molti utenti di internet si trovano già ad usufruire, anche inconsapevolmente, degli effetti di un firewall.
Ad esempio i router che la maggior parte degli utenti usano per connettersi tramite una connessione ADSL, integrano nella maggior parte dei modelli un firewall (in genere basato su Iptables, incluso nelle distribuzioni Linux-embedded contenute nella maggior parte dei router).

In genere di default i firewall dei router bloccano tutte le connessioni in entrata ma permettono quelle in uscita, pertanto interferiscono solo con il funzionamento dei programmi server. La maggior parte degli utenti si rende conto di essere dietro ad un firewall quando prova ad usare programmi p2p (come ad esempio Amule) e scopre che non funzionano correttamente, oppure vanno a rilento.

Il firewall incluso in questi dispositivi ha effetto su tutti i pc che vi si connettono, pertanto a meno che non ci sia la necessità di configurazioni particolari, risulta inutile configurare un firewall diverso su ciascun dispositivo. Oltre che ridondante come soluzione vi è il rischio di eccessive complicazioni.

Firewall sempre inutile in ambito Desktop?

Innanzitutto occorre ricordare che il firewall, ancor prima che un vero e proprio dispositivo di sicurezza (tipo gli antivirus, antispyware…), è uno strumento per regolare il traffico di rete.
Il suo utilizzo può entrare in gioco quando dalla propria macchina c’è la necessita di mettere “qualcosa” a disposizione di altri pc e a seconda dei casi quando occorrono delle regole ben precise sul “come” regolare il relativo traffico di rete.

  • Può essere necessario quando occorre condividere una connessione ad internet. In questo caso saranno proprio le regole per le connessioni di FORWARD che permetteranno ad un altro pc di sfruttare la connessione ad internet.
  • A volte si tratta di mettere a disposizione dati o servizi dal proprio pc, ma solo verso uno o un solo gruppo di pc presente in una rete. Le regole del firewall possono venire incontro a queste esigenze, tuttavia vale la pena ricordare che a seconda dei casi alcuni software offrono dei tool che possono o rendere non necessario l’uso del firewall o comunque essere preferiti a quest’ultimo. In questo caso Samba, software per la condivisione di file noto anche all’utenza desktop ne è un buon esempio.
  • In alcune configurazioni il firewall potrebbe ancora essere utile come strumento per ottimizzare la banda in entrata/uscita ed effettuare quello che viene comunemente detto traffic shaping, tuttavia questo genere di configurazioni sono solitamente molto complesse, e fuori dalla portata dell’utente comune.

In definitiva i casi in cui anche in ambiente desktop si arrivi ad utilizzare il firewall possono sussistere. È comunque evidente come la casistica sia piuttosto ristretta.