Топ-100
Indietro

ⓘ Netfilter. In informatica netfilter è un componente Linux, che consente lintercettazione e la manipolazione dei pacchetti che attraversano il computer, permette ..




Netfilter
                                     

ⓘ Netfilter

In informatica netfilter è un componente Linux, che consente lintercettazione e la manipolazione dei pacchetti che attraversano il computer, permettendo la realizzazione di alcune funzionalità di rete avanzate come firewall basati sul filtraggio stateful dei pacchetti o configurazioni anche complesse di NAT, un sistema di traduzione automatica degli indirizzi IP, tra cui la condivisione di ununica connessione Internet tra diversi computer di una rete locale, o ancora la manipolazione dei pacchetti in transito.

È un componente standard di default di tutte le moderne distribuzioni Linux. Estende le capacità native di instradamento pacchetti IP del kernel Linux, permettendo di realizzare dei router/firewall molto sofisticati, ma trova anche applicazione in calcolatori che hanno una sola interfaccia di rete e non inoltrano pacchetti da uninterfaccia ad unaltra. In questo secondo caso viene utilizzato soprattutto come firewall. Fu introdotto nella versione principale del sistema operativo nel marzo del 2000, durante lo sviluppo della versione 2.4. Nella versione 2.2 usava un sistema denominato ipchains, che a sua volta sostituì il sistema ipfwadm, usato nella versione 2.0.

Per configurare netfilter attualmente si usa il programma iptables, che permette di definire le regole per i filtri di rete e il reindirizzamento NAT. Spesso con il termine iptables ci si riferisce allintera infrastruttura, incluso netfilter.

                                     

1. Descrizione

I dati che transitano in una rete sono divisi in pacchetti di dimensioni prefissate, con netfilter è possibile controllare il contenuto di ogni singolo pacchetto, e definire le azioni o regole da compiere in base alle caratteristiche di quelli ricevuti. Ad esempio, si può definire una regola che impedisce la ricezione di pacchetti provenienti da un particolare indirizzo o che utilizzano una determinata porta per effettuare la connessione.

Il sistema netfilter è basato su regole raggruppate in catene chain, a loro volta raggruppate in tabelle tables. Ogni tabella definisce un tipo diverso di operazioni che è possibile effettuare sui pacchetti; ogni catena definisce come vengono trattati i pacchetti nelle diverse fasi della loro elaborazione.

Le catene sono una forma di lista di controllo degli accessi ACL: ogni regola è costituita da due parti: la specifica delle caratteristiche che un pacchetto deve avere affinché la regola stessa venga applicata match e un obiettivo o target, che indica cosa fare quando il pacchetto rispetta le caratteristiche indicate. A ciascuna catena è anche associata una politica di default, che definisce come vengono trattati i pacchetti che non corrispondono ad alcuna regola. Le caratteristiche più di frequente utilizzate per costruire delle regole sono lindirizzo di partenza o di destinazione del pacchetto e il numero di porta associato alla connessione.

Ogni pacchetto di rete che arriva o parte dal computer attraversa almeno una catena e ogni regola della catena controlla se il pacchetto ne rispetta la specifica. Se questo accade, il pacchetto seguirà il comportamento descritto nellobiettivo della regola, le regole successive della catena verranno ignorate a parte casi speciali. Se il pacchetto raggiunge la fine della catena senza essere processato da nessuna regola, la politica di default della catena determina cosa farne.

In ogni tabella esistono alcune catene predefinite, ma lutente può crearne di nuove; uno dei possibili obiettivi è infatti il collegamento a unaltra catena. In questo caso, il pacchetto ricomincia ad essere valutato dalle regole della nuova catena, senza limiti di concatenazione. Una regola può semplicemente essere un collegamento a una catena. Solo se il pacchetto attraversa lintera catena collegata esso continuerà nella catena principale.

Iptables è progettato per poter essere facilmente esteso attraverso moduli che aggiungono funzionalità:

  • predicati per identificare i pacchetti match
  • operazioni da applicare ai pacchetti target
  • analizzare un protocollo. Questo è spesso necessario per gestire un protocollo che utilizza più connessioni e in cui una connessione viene usata per controllarne altre. Lesempio più popolare è FTP. Un modulo apposito analizza il contenuto dei pacchetti della connessione di controllo per poter identificare gli estremi di livello rete e trasporto delle altre connessioni, permettendo di associare la connessione dati e la connessione di controllo.
  • analizzare il traffico alla ricerca di particolari protocolli di livello applicazione l7_filters, per identificare protocolli che non è possibile riconoscere solo sulla base delle porte utilizzate.
  • supportare il NAT di un protocollo

Ciascuna estensione può essere implementata come un modulo del kernel Linux, e fornisce specifiche ed obiettivi aggiuntivi.

                                     

1.1. Descrizione Le tabelle

Esistono quattro tabelle prestabilite, ognuna delle quali contiene delle catene predefinite. Esiste anche la possibilità di creare altre tabelle. Lamministratore può creare e cancellare le catene definite dallutente in qualsiasi tabella. Inizialmente, tutte le catene sono vuote e hanno una politica che permette a tutti i pacchetti di passare senza essere bloccati o alterati in alcun modo, esse vanno poi modificate a seconda delle proprie esigenze. Le tabelle predefinite sono le seguenti:

  • catena OUTPUT: tutti i pacchetti creati dal sistema passano attraverso questa catena.
  • tabella filtro filter: è responsabile del filtraggio dei pacchetti, permette cioè di bloccarli o di farli passare. Ogni pacchetto passa attraverso la tabella filtro. Essa contiene le seguenti catene predefinite
  • catena FORWARD: tutti i pacchetti che hanno come destinazione finale un altro sistema e che non sono stati generati dal sistema stesso, cioè tutti i pacchetti che vengono meramente instradati dal sistema, passano attraverso questa catena.
  • catena INPUT: tutti i pacchetti destinati al sistema passano attraverso questa catena.
  • catena PREROUTING: passano attraverso questa catena i pacchetti in entrata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare linstradamento. Essa è usata per il NAT sulla destinazione o DNAT.
  • tabella nat: questa tabella è responsabile dellimpostazione delle regole per la modifica degli indirizzi e porte dei pacchetti. Il primo pacchetto di una connessione passa attraverso questa tabella, e il risultato del passaggio del primo pacchetto determina come tutti gli altri pacchetti della stessa connessione verranno modificati. La tabella nat contiene le seguenti catene predefinite
  • catena POSTROUTING: passano attraverso questa catena i pacchetti in uscita dopo che la locale tabella di routing sia stata consultata. Usata per il NAT sulla sorgente o SNAT.
  • catena OUTPUT: permette un DNAT limitato sui pacchetti generati localmente.
  • catena PREROUTING: esamina tutti i pacchetti che in qualche modo entrano nel sistema. Questo processo avviene prima che il routing decida se il pacchetto debba essere inoltrato catena FORWARD o se sia destinato al sistema. Viene utilizzata per manipolare lheader del pacchetto catena INPUT.
  • catena OUTPUT: tutti i pacchetti generati dal sistema passano per questa catena.
  • catena FORWARD: tutti i pacchetti che vengono instradati dal sistema ma di cui il sistema non è né sorgente iniziale né destinazione finale, passano per questa catena.
  • catena POSTROUTING: tutti i pacchetti che lasciano il sistema, sia quelli in OUTPUT sia quelli in FORWARD, passano poi per questa catena.
  • catena INPUT: tutti i pacchetti destinati al sistema passano per questa catena.
  • tabella mangle: questa tabella è responsabile delle modifiche alle opzioni dei pacchetti, come ad esempio quella che determina la qualità del servizio. Tutti i pacchetti passano attraverso questa tabella. Essa contiene tutte le catene predefinite
  • catena PREROUTING: in tale catena si andrà, invece, ad operare sui pacchetti provenienti da qualsiasi interfaccia di rete.
  • tabella raw: questa tabella, introdotta ufficialmente nel corso dello sviluppo della serie 2.6 del kernel, ha lo scopo di evitare il connection tracking per quei pacchetti che, per una qualche ragione, non si vogliono filtrare in maniera stateful. Le catene previste per la tabella raw sono solo due
  • catena OUTPUT: in tale catena si andrà ad operare sui pacchetti generati da processi locali.
                                     

1.2. Descrizione Le regole

Le regole di netfilter sono divise in due parti, la specifica e lobiettivo. La specifica definisce linsieme di caratteristiche dei pacchetti che devono essere gestite dalla regola stessa, e si ottiene combinando per esempio:

  • la porta da cui proviene o a cui è destinato il pacchetto
  • per pacchetti che transitano attraverso le catene FORWARD, OUTPUT e POSTROUTING, linterfaccia o linsieme di interfacce attraverso la quale il pacchetto sarà inviato;
  • lindirizzo IP, il dominio o la sottorete a cui è destinato il pacchetto
  • per pacchetti che transitano attraverso le catene INPUT, FORWARD and PREROUTING, linterfaccia o linsieme di interfacce es. eth0,eth1 attraverso la quale il pacchetto è ricevuto;
  • lindirizzo IP, il dominio o la sottorete da cui proviene il pacchetto
  • il protocollo ad esempio icmp, udp e tcp specificato nelle intestazioni del pacchetto.

Lobiettivo di una regola è invece lazione da compiere se un pacchetto rispetta la regola, e può essere:

  • un obiettivo aggiuntivo definito da unestensione
  • uno degli obiettivi predefiniti
  • una catena definita dallutente

Se una regola non contiene la specifica dellobiettivo, il destino del pacchetto non verrà modificato, tuttavia il contatore della regola verrà ugualmente incrementato.

Quando lobiettivo è il nome di una catena definita dallutente, il pacchetto viene fatto passare per quella catena, analogamente a quanto avviene per una chiamata a funzione in un linguaggio di programmazione; per questo motivo il comando iptables specifica lobiettivo con lopzione --jump "salta". Se il pacchetto non viene processato da nessuna regola della catena, in quanto non rispetta la specifica di nessuna delle sue regole, esso ritorna ad essere processato dalla catena di partenza.

Ogni obiettivo predefinito indica unazione da compiere sul pacchetto:

ACCEPT - accetta Questo obiettivo comporta che netfilter accetterà il pacchetto. Il risultato pratico di questa accettazione dipende da quale catena sta processando il pacchetto. Per esempio, un pacchetto che è accettato dalla catena INPUT può essere ricevuto dal sistema, un pacchetto accettato dalla catena OUTPUT può essere inoltrato dal sistema, e un pacchetto accettato dalla catena FORWARD potrà essere smistato dal sistema a unaltra destinazione, un pacchetto "accettato" in una catena della tabella nat non subirà alterazioni. DROP - scarta Questo obiettivo determina che il pacchetto venga scartato senza effettuare ulteriori operazioni su di esso. Il pacchetto scomparirà senza che alcuna indicazione del fatto che sia stato scartato venga fornita allapplicazione o al sistema che ha inviato il pacchetto. Il mittente del pacchetto vedrà semplicemente scadere il tempo a disposizione per la comunicazione, e non potrà distinguere tra il caso in cui il pacchetto è stato ricevuto e poi scartato e il caso in cui il pacchetto non è mai stato ricevuto. Questo comportamento aumenta la sicurezza di un sistema in quanto un potenziale nemico non potrà neppure determinare se il sistema esiste effettivamente. QUEUE - metti in coda Questo obiettivo fa in modo che il pacchetto sia inserito in una coda, in modo che possa essere processato da una applicazione. La libreria libipq, facente parte del progetto netfilter/iptables, permette ad una applicazione di modificare i pacchetti inseriti in una coda. Se non vi è nessuna applicazione che processa i messaggi in coda, questo obiettivo sarà equivalente allobiettivo DROP. RETURN - ritorna Questo obiettivo ha lo stesso effetto di raggiungere la fine della catena: per una regola nella catena predefinita, viene eseguita la politica della catena; per una regola definita dallutente, lattraversamento delle regole continua nella catena chiamante, subito dopo il punto in cui è presente la catena che ha causato il RETURN, analogamente a come accade nella chiamate a funzione.

Esistono molti obiettivi aggiuntivi disponibili. Alcuni dei più comuni sono:

REJECT - rifiuta Questo obiettivo ha lo stesso effetto di DROP con leccezione che viene spedito un pacchetto di errore ICMP al mittente del pacchetto. Esso è principalmente utilizzato nelle catene INPUT o FORWARD della tabella filtro. Un pacchetto di errore può indicare esplicitamente che il pacchetto è stato filtrato. LOG - annota Con questo obiettivo il pacchetto viene annotato, cioè la ricezione del pacchetto viene annotata inviando un messaggio sul SysLog. Questo obiettivo può essere utile per permettere allamministratore di sapere quali pacchetti vengono filtrati o allo sviluppatore per controllare il corretto funzionamento del sistema. DNATDestination nat Questo obiettivo comporta la riscrittura dellindirizzo di destinazione del pacchetto, per permettere il NAT sulla destinazione. Questo obiettivo è valido esclusivamente nelle catene OUTPUT e PREROUTING della tabella nat. La decisione effettuata sul primo pacchetto verrà ripetuta per tutti i pacchetti della connessione, e i pacchetti di risposta avranno lindirizzo sorgente originario. SNATSource nat Questo obiettivo comporta la riscrittura dellindirizzo del mittente del pacchetto, per permettere il NAT sulla sorgente. Questo obiettivo è valido solo nella catena POSTROUTING della tabella nat, e come DNAT il suo risultato è ripetuto per tutti i pacchetti della stessa connessione. MASQUERADE - maschera Questa è una forma speciale di SNAT per indirizzi IP dinamici, come quelli forniti da molti Internet Service Provider per i loro utenti.


                                     

1.3. Descrizione Monitoraggio delle connessioni

Una delle funzionalità più importanti offerte da netfilter è la possibilità di identificare i pacchetti facenti parte di una stessa connessione stateful packet filtering. Questo permette di creare delle regole basate sulla relazione che un pacchetto ha nei confronti della connessione a cui appartiene e di altre connessioni correlate a livello applicativo. Inoltre il NAT si basa su queste informazioni per tradurre allo stesso modo gli indirizzi dei pacchetti di una stessa connessione, e iptables usa queste informazioni per realizzare firewall avanzati.

netfilter assegna ad ogni pacchetto uno dei seguenti stati:

  • ESTABLISHED STABILITO, il pacchetto fa parte di una connessione già stabilita;
  • RELATED IN RELAZIONE, il pacchetto ha qualche relazione con unaltra connessione già stabilita;
  • NEW NUOVO, il pacchetto inizia una nuova connessione;
  • INVALID INVALIDO, il pacchetto non fa parte di alcuna connessione e non è possibile crearne.

Un caso comune è che il primo pacchetto visto dal firewall viene classificato come NEW, la risposta viene classificata come ESTABLISHED e un messaggio di errore, ad esempio un errore ICMP, come RELATED. Un errore ICMP che non appartiene a nessuna connessione può essere classificato come INVALID.

Inoltre, attraverso luso di moduli aggiuntivi, il monitoraggio della connessione può ottenere la capacità di relazionare tra loro le connessioni che fanno parte di una stessa sessione a livello applicativo. Per esempio, il protocollo FTP stabilisce due tipi di connessione, una per le informazioni di controllo e unaltra per i dati veri e propri. Quando il modulo nf_conntrack_ftp viene caricato nel sistema, il primo pacchetto di una connessione dati sarà classificato come RELATED invece di NEW, in quanto la connessione di controllo è stata già stabilita e la connessione dati ne è una prosecuzione logicamente. Per fare questo, il modulo nf_conntrack_ftp deve analizzare il contenuto della connessione di controllo, per identificare le caratteristiche delle connessioni dati.

netfilter può utilizzare linformazione sullo stato dei pacchetti per creare filtri più potenti e più semplici da definire. Per esempio, una regola può lasciar passare i pacchetti NEW solo dallinterno del firewall verso la rete esterna, e i pacchetti RELATED e ESTABLISHED in entrambe le direzioni. Questo permette di inviare delle repliche a connessioni create dallinterno, ma non permette di creare nuove connessioni dallesterno, il che aumenta la sicurezza di un sistema perché gli attacchi che vengono dallesterno non sono in grado di stabilire connessioni. Inoltre, se una sessione FTP crea una connessione dati dallesterno verso linterno, la connessione sarà accettata in quanto la connessione dati è in relazione con la connessione di controllo che è stata creata dallinterno verso lesterno, e quindi i pacchetti della connessione dati saranno classificati come RELATED e non come NEW.

                                     

2. Il programma iptables

iptables è unapplicazione che permette agli amministratori di configurare le tabelle, le catene le regole di netfilter. Dato che iptables modifica il funzionamento del sistema operativo, per essere eseguito è necessario entrare nel sistema come utente amministratore, che nei sistemi di tipo Unix è lutente root, il quale ha i permessi per compiere qualsiasi tipo di operazione. Sulla maggior parte dei sistemi Linux, iptables è installato come /usr/sbin/iptables. La lista completa delle funzionalità del comando è consultabile nella relativa documentazione, che può essere visualizzata con il comando man iptables ".

iptables permette di aggiungere, sostituire o cancellare una regola da una catena specificata, di ottenere la lista delle regole di una catena, o di effettuare operazioni di amministrazione quali la cancellazione di tutte le catene o lazzeramento del contatore di byte e pacchetti di una catena. Ad esempio, per elencare tutte le regole della catena OUTPUT, si usa il comando:

iptables -L OUTPUT

Con iptables si possono altresì creare catene definite dallutente associandovi una politica ovvero lobiettivo di default

iptables inoltre gestisce le estensioni di netfilter, caricando automaticamente i moduli necessari quando viene inserita una regola che li utilizza.