[:it]
Il firewall è uno strumento che è in grado di analizzare il traffico di rete e di gestirlo in base a regole predefinite, può essere un programma software oppure un componente hardware dedicato.
Tutto il traffico di una rete è formato da pacchetti.
Un pacchetto possiede un’intestazione (header) che contiene le informazioni sul pacchetto (indirizzo del mittente, indirizzo di destinazione, porta, ecc.) e un corpo (body) che contiene le informazioni da trasmettere.
Il firewall decide se bloccare o lasciare transitare ogni pacchetto
- a seconda delle informazioni contenute nell’header
- la porta sorgente o di destinazione
Quindi avviene un packet filter
Tramite il componente Netfiler si realizzano tutte le componenti avanzate del firewall. Lo strumento per manipolare netfilter si chiama Iptables.
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 tabelle in considerazione sono:
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 INPUT: tutti i pacchetti destinati al sistema passano attraverso questa catena.
- catena OUTPUT: tutti i pacchetti creati dal sistema passano attraverso questa catena.
- 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.
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:
- catena PREROUTING: passano attraverso questa catena i pacchetti in entrata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare l’instradamento. Essa è usata per il NAT sulla destinazione o DNAT.
- 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.
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: 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 l’header del pacchetto (catena INPUT).
- catena INPUT: tutti i pacchetti destinati al 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 OUTPUT: tutti i pacchetti generati dal sistema 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.
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.
- catena PREROUTING: in tale catena si andrà, invece, ad operare sui pacchetti provenienti da qualsiasi interfaccia di rete.
La tabella di default è la tabella filter.
Al termine di ogni catena vi è la politica ACCEPT ossia un pacchetto raggiunge la fine della catena e viene accettato.
ESEMPIO
Si consideri il comando
ossia il comando
sudo iptables -A INPUT -p udp -j DROP
per cancellare la regola ho usato il comando
sudo iptables -F
Non avendo specificato alcun indirizzo, né del mittente né del destinatario, viene mostrata la dicitura anywhere.
Le seguenti opzioni consentono di aggiungere, modificare o eliminare determinate regole di una catena:
-A nome_catena
aggiunge una regola in fondo alla catena indicata (append);
-D nome_catena numero_regola
rimuove la regola dalla catena indicata (delete);
-L nome_catena
mostra l’elenco delle regole della catena (senza opzioni mostra le tre catene della tabella filter);
-F nome_catena
svuota una catena (senza opzioni svuota le tre catene della tabella filter).
Le opzioni per descrivere il pacchetto permettono di specificare:
–p il protocollo
–s l’indirizzo IP sorgente
–d l’indirizzo IP destinatario
–i l’interfaccia
–g la catena da attraversare successivamente
–t la tabella (senza alcuna opzione viene usata la tabella filter).
Per esempio, il seguente comando blocca ogni tipo di pacchetto in uscita verso un particolare indirizzo IP (per esempio 123.12.13.12):
sudo iptables –A OUTPUT –d 123.12.13.12 –j DROP
Per bloccare qualsiasi connessione sulla porta 22, proveniente dall’esterno, si deve scrivere il comando:
sudo iptables –A INPUT –p 22 –j DROP
Per impostare il sistema in modo che non venga fornita risposta al comando ping inviato ad una particolare interfaccia di rete (per esempio eth0) si deve utilizzare il comando seguente:
sudo iptables –A INPUT -i eth0 –p icmp –j DROP
Si consideri un altro esempio rappresentato dalla seguente situazione: si supponga di essere connessi alla rete Internet tramite l’interfaccia di rete ppp0 e di avere avviato un server FTP per il trasferimento di file nella rete locale. Per evitare che vi siano dall’esterno, cioè da Internet, connessioni non desiderate di tipo FTP, che utilizzano la porta 21, si deve scrivere il seguente comando:
sudo iptables –A INPUT –p 21 –i ppp0 –j DROP
Analogamente, nel caso di un server Web locale, si può bloccare la porta 80 con il comando seguente:
sudo iptables –A INPUT –p 80 –i ppp0 –j DROP
[:]