Loading AI tools
Framework per Linux Da Wikipedia, l'enciclopedia libera
In informatica netfilter è un componente di default di tutte le moderne distribuzioni Linux, che consente l'intercettazione 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 un'unica connessione Internet tra diversi computer di una rete locale, o ancora la manipolazione dei pacchetti in transito.
Estende le capacità native di instradamento pacchetti IP del kernel Linux, permettendo di realizzare dei router/firewall molto sofisticati, trovando anche applicazione in calcolatori che hanno una sola interfaccia di rete e non inoltrano pacchetti da un'interfaccia ad un'altra. In questo secondo caso viene utilizzato soprattutto come firewall. 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 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.
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 è dunque 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, mentre 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à:
match
)target
)l7_filters
), per identificare protocolli che non è possibile riconoscere solo sulla base delle porte utilizzate.Ciascuna estensione può essere implementata come un modulo del kernel Linux, e fornisce specifiche ed obiettivi aggiuntivi.
Esistono quattro tabelle prestabilite, ognuna delle quali contiene delle catene predefinite. Esiste anche la possibilità di creare altre tabelle. L'amministratore può creare e cancellare le catene definite dall'utente 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:
Le regole di netfilter sono divise in due parti, la specifica e l'obiettivo. La specifica definisce l'insieme di caratteristiche dei pacchetti che devono essere gestite dalla regola stessa, e si ottiene combinando per esempio:
L'obiettivo di una regola è invece l'azione da compiere se un pacchetto rispetta la regola, e può essere:
ACCEPT
, DROP
, QUEUE
, o RETURN
)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 in un linguaggio di programmazione; per questo motivo il comando iptables specifica l'obiettivo con l'opzione --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 un'azione da compiere sul pacchetto:
ACCEPT
— accettaDROP
— scartaQUEUE
— metti in codaRETURN
— ritornaEsistono molti obiettivi aggiuntivi disponibili. Alcuni dei più comuni sono:
REJECT
— rifiutaLOG
— annotaDNAT(Destination nat)
SNAT(Source nat)
MASQUERADE
— mascheraUna 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:
NEW
(NUOVO), il pacchetto inizia una nuova connessione;ESTABLISHED
(STABILITO), il pacchetto fa parte di una connessione già stabilita;RELATED
(IN RELAZIONE), il pacchetto ha qualche relazione con un'altra connessione già stabilita;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 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 FTP stabilisce due tipi di connessione, una per le informazioni di controllo e un'altra 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 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 NEW
solo dall'interno 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 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 RELATED
e non come NEW
.
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, 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 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:
iptables -L OUTPUT
Con iptables si possono altresì creare catene definite dall'utente associandovi una politica (ovvero l'obiettivo di default)
iptables inoltre gestisce le estensioni di netfilter, caricando automaticamente i moduli necessari quando viene inserita una regola che li utilizza.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.