Netfilter: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Annullata la modifica 106112729 di 212.210.10.203 (discussione) Etichetta: Annulla |
|||
Riga 1:
[[File:Netfilter-components.svg|miniatura|right| Componenti di Netfilter]]
[[File:Netfilter-packet-flow.svg|miniatura|right|Flusso dei pacchetti su Netfilter]]
In [[informatica]] '''netfilter''' è un componente [[Linux (kernel)|Linux]], che consente l'intercettazione e la manipolazione dei [[Pacchetto (reti)|pacchetti]] che attraversano il [[computer]], permettendo la realizzazione di
È un componente [[standard]] di [[Default (informatica)|default]] di tutte le moderne [[distribuzione Linux|distribuzioni Linux]]. Estende le capacità native di [[instradamento]] pacchetti [[Internet Protocol|IP]] del [[kernel Linux]], permettendo di realizzare dei [[router]]/[[firewall]] molto sofisticati, ma trova 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. 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 [[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 il termine iptables ci si riferisce all'intera infrastruttura, incluso netfilter.
== Descrizione ==
I dati che transitano in una rete sono divisi in pacchetti di dimensioni prefissate, con netfilter è possibile
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 (<code>match</code>)
* operazioni da applicare ai pacchetti (<code>target</code>)
* 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]] (<code>l7_filters</code>), per identificare protocolli che non è possibile riconoscere solo sulla base delle porte utilizzate.
Ciascuna estensione può essere implementata come un modulo del [[Linux (kernel)|kernel Linux]], e fornisce specifiche ed obiettivi aggiuntivi.
===Le tabelle===
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:
* '''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:
|