Netfilter: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
||
(47 versioni intermedie di 23 utenti non mostrate) | |||
Riga 1:
[[File:Netfilter-components.svg|
In [[informatica]] '''netfilter''' è un componente
[[File:Netfilter-packet-flow.svg|thumb|right|Flusso dei pacchetti su Netfilter]]▼
▲In [[informatica]] '''netfilter''' è un componente del [[kernel]] del sistema operativo [[Linux]], che permette l'intercettazione e manipolazione dei [[Pacchetto (reti)|pacchetti]] che attraversano il [[computer]]. Netfilter permette di realizzare alcune funzionalità di rete avanzate come [[firewall]] basati sul [[filtraggio stateful dei pacchetti]] o configurazioni anche complesse di [[Network address translation|NAT]], un sistema di traduzione automatica degli indirizzi [[Internet Protocol|IP]], tra cui la condivisione di un'unica connessione [[Internet]] tra diversi computer di una [[rete locale]], o ancora la manipolazione dei pacchetti in transito.
== Descrizione ==
Estende le capacità native di [[instradamento]] pacchetti [[Internet Protocol|IP]] del [[kernel Linux]], permettendo di realizzare dei [[router]]/[[firewall]] molto sofisticati, trovando anche applicazione in calcolatori che hanno una sola [[Interfaccia (informatica)|interfaccia]] di rete e non inoltrano pacchetti da un'interfaccia ad un'altra. In questo secondo caso viene utilizzato soprattutto come firewall. Per [[configurazione (informatica)|configurare]] netfilter attualmente si usa il [[programma (informatica)|programma]] '''iptables''', che permette di definire le regole per i filtri di rete e il reindirizzamento NAT: spesso con tale termine ci si riferisce all'intera infrastruttura, incluso netfilter. 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.
=== Caratteristiche ===
[[File:Netfilter.png|thumb|Schema di funzionamento tra interfacce di ingresso e uscita]]
I dati che transitano in una rete sono divisi in pacchetti di dimensioni prefissate
Il sistema netfilter è dunque basato su regole raggruppate in ''catene'' (''chain''), a loro volta raggruppate in ''tabelle'' (''tables'')
▲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 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 (reti)|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 l'indirizzo 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 nell'obiettivo della regola, e 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 l'utente può crearne di nuove; uno dei possibili obiettivi è infatti il collegamento a un'altra 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 l'intera catena collegata esso continuerà nella catena principale.
Iptables è progettato per poter essere facilmente esteso attraverso moduli che aggiungono funzionalità:
* predicati per identificare i pacchetti (<
* operazioni da applicare ai pacchetti (<
* analizzare un protocollo. Questo è spesso necessario per gestire un protocollo che utilizza più connessioni e in cui una connessione viene usata per controllarne altre. L'esempio più popolare è [[File Transfer Protocol|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.
* supportare il NAT di un protocollo
* analizzare il traffico alla ricerca di particolari protocolli di [[livello applicazione]] (<
Ciascuna estensione può essere implementata come un modulo del [[Linux (kernel)|kernel Linux]], e fornisce specifiche ed obiettivi aggiuntivi.
===Le tabelle===
Line 34 ⟶ 32:
* '''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:
** ''
** ''
** ''
* '''tabella nat''': questa tabella è responsabile dell'impostazione 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:
** ''
** ''
** ''
* '''tabella mangle''': questa tabella è responsabile delle modifiche alle opzioni dei pacchetti, come ad esempio quella che determina la [[Qualità di servizio|qualità del servizio]]. Tutti i pacchetti passano attraverso questa tabella. Essa contiene tutte le catene predefinite:
** ''
** ''
** ''
** ''
** ''
* '''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:
** ''
** ''
===Le regole===
Line 63 ⟶ 61:
L'obiettivo di una regola è invece l'azione da compiere se un pacchetto rispetta la regola, e può essere:
* una catena definita dall'utente
* uno degli obiettivi predefiniti (<
* un obiettivo aggiuntivo definito da un'estensione
Se una regola non contiene la specifica dell'obiettivo, il destino del pacchetto non verrà modificato, tuttavia il contatore della regola verrà ugualmente incrementato.
Quando l'obiettivo è il nome di una catena definita dall'utente, il pacchetto viene fatto passare per quella catena, analogamente a quanto avviene per una chiamata a [[Funzione (informatica)|funzione]] in un [[linguaggio di programmazione]]; per questo motivo il comando iptables specifica l'obiettivo con l'opzione <
Ogni obiettivo predefinito indica un'azione da compiere sul pacchetto:
;<
: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 un'altra destinazione, un pacchetto "accettato" in una catena della tabella nat non subirà alterazioni.
;<
: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 all'applicazione 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.
;<
:Questo obiettivo fa in modo che il pacchetto sia inserito in una [[Coda (informatica)|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 all'obiettivo DROP.
;<
: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 dall'utente, l'attraversamento 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:
;<
:Questo obiettivo ha lo stesso effetto di DROP con l'eccezione che viene spedito un pacchetto di errore [[Internet Control Message Protocol|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.
;<
: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 all'amministratore di sapere quali pacchetti vengono filtrati o allo sviluppatore per [[Debugging|controllare]] il corretto funzionamento del sistema.
;<
:Questo obiettivo comporta la riscrittura dell'indirizzo di destinazione del pacchetto, per permettere il [[network address translation|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 l'indirizzo sorgente originario.
;<
:Questo obiettivo comporta la riscrittura dell'indirizzo 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.
;<
:Questa è una forma speciale di SNAT per indirizzi IP dinamici, come quelli forniti da molti [[Internet Service Provider]] per i loro utenti.
===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 di applicazione|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:
* <
* <
* <
* <
Un caso comune è che il primo pacchetto visto dal firewall viene classificato come <tt>NEW</tt>, la risposta viene classificata come <tt>ESTABLISHED</tt> e un messaggio di errore, ad esempio un errore [[Internet Control Message Protocol|ICMP]], come <tt>RELATED</tt>. Un errore ICMP che non appartiene a nessuna connessione può essere classificato come <tt>INVALID</tt>.▼
▲Un caso comune è che il primo pacchetto visto dal firewall viene classificato come <
Inoltre, attraverso l'uso 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 [[File Transfer Protocol|FTP]] stabilisce due tipi di connessione, una per le informazioni di controllo e un'altra per i dati veri e propri. Quando il modulo <tt>nf_conntrack_ftp</tt> viene caricato nel sistema, il primo pacchetto di una connessione dati sarà classificato come <tt>RELATED</tt> invece di <tt>NEW</tt>, 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.▼
▲Inoltre, attraverso l'uso 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 [[File Transfer Protocol|FTP]] stabilisce due tipi di connessione, una per le informazioni di controllo e un'altra per i dati veri e propri. Quando il modulo <
netfilter può utilizzare l'informazione sullo stato dei pacchetti per creare filtri più potenti e più semplici da definire. Per esempio, una regola può lasciar passare i pacchetti <tt>NEW</tt> solo dall'interno del firewall verso la rete esterna, e i pacchetti <tt>RELATED</tt> e <tt>ESTABLISHED</tt> in entrambe le direzioni. Questo permette di inviare delle repliche a connessioni create dall'interno, ma non permette di creare nuove connessioni dall'esterno, il che aumenta la sicurezza di un sistema perché gli attacchi che vengono dall'esterno non sono in grado di stabilire connessioni. Inoltre, se una sessione FTP crea una connessione dati dall'esterno verso l'interno, la connessione sarà accettata in quanto la connessione dati è in relazione con la connessione di controllo che è stata creata dall'interno verso l'esterno, e quindi i pacchetti della connessione dati saranno classificati come <tt>RELATED</tt> e non come <tt>NEW</tt>.▼
▲netfilter può utilizzare l'informazione sullo stato dei pacchetti per creare filtri più potenti e più semplici da definire. Per esempio, una regola può lasciar passare i pacchetti <
==Il programma iptables==
iptables è un'applicazione che permette agli amministratori di configurare le tabelle, le catene e 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]] è l'utente [[root (utente)|root]], il quale ha i permessi per compiere qualsiasi tipo di operazione. Sulla maggior parte dei sistemi Linux, iptables è installato come <
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 l'azzeramento del contatore di byte e pacchetti di una catena. Ad esempio, per elencare tutte le regole della catena OUTPUT, si usa il comando:
:<
Con iptables si possono altresì creare catene definite dall'utente associandovi una politica (ovvero l'obiettivo di default)
Line 131 ⟶ 129:
* [[Firestarter (software)]]: un [[personal firewall]] basato su iptables.
* [[FireHOL]]: strumento testuale che permette di realizzare firewall di livello professionale, usa una sintassi semplice ma espressiva.
* [[Shorewall]]
==Altri progetti==
{{interprogetto}}
==Collegamenti esterni==
* {{cita web|
* [https://web.archive.org/web/20081210035025/http://www.fwbuilder.org/ Firewall builder] Programma per la programmazione grafica del firewall.
* [
* [http://openskill.info/topic.php?ID=124 Iptables - OpenSkills] Funzionamento di netfilter/iptables e ulteriori approfondimenti.
{{Portale|Sicurezza informatica|Software libero|Telematica}}
[[Categoria:Software di rete]]
[[Categoria:Kernel Linux]]
[[Categoria:Software di sistema liberi]]
[[Categoria:Software Firewall]]
|