Questo capitolo si concentra sugli aspetti di base del filtraggio dei pacchetti, evidenzia le differenze tra ipchains e iptables, spiega le varie opzioni disponibili con i comandi iptables, e spiega come preservare le regole di filtraggio tra un riavvio del sistema e l'altro.
18.1. Filtraggio dei pacchetti
Il kernel di Linux possiede la capacit� integrata di filtrare i pacchetti, concedendo o negando loro l'accesso al sistema. Il netfilter del kernelpresenta tre tabelle integrate dette anche elenchi delle regole. Eccole riportate:
filter — La tabella di default per la gestione dei pacchetti di rete.
nat — Questa tabella altera i pacchetti che creano un collegamento e viene usata per il Network Address Translation (NAT).
mangle — Questa tabella viene usata per l'alterazione di pacchetti specifici.
| Suggerimento |
---|
| In aggiunta a queste tabelle integrate, � possibile creare delle tabelle specializzate e conservate nella directory /lib/modules/<versione-kernel>/kernel/net/ipv4/netfilter/ (dove <versione-kernel> corrisponde al numero della versione del kernel). |
Ogni tabella ha un gruppo di catene integrate, che corrispondono alle azioni effettuate da netfilter sul pacchetto.
Le catene integrate per la tabella filter sono le seguenti:
INPUT — Si applica ai pacchetti ricevuti mediante un'interfaccia di rete.
OUTPUT — Si applica ai pacchetti inviati mediante la stessa interfaccia di rete che ha ricevuto i pacchetti in entrata.
FORWARD — Si applica ai pacchetti ricevuti su una data interfaccia di rete e inviati mediante un'altra.
Le catene integrate per la tabella nat sono le seguenti:
PREROUTING — Questa catena altera i pacchetti ricevuti attraverso un'interfaccia di rete al loro arrivo.
OUTPUT — Altera i pacchetti di rete generati localmente, prima che gli stessi vengono inviati all'esterno.
POSTROUTING — Questa catena altera i pacchetti prima che vengano inviati attraverso un'interfaccia di rete.
Le catene integrate per la tabella mangle sono le seguenti:
INPUT — Altera i pacchetti di rete designati per l'host.
OUTPUT — Altera i pacchetti di rete generati localmente, prima che gli stessi vengono inviati all'esterno.
FORWARD — Altera i pacchetti di rete diretti attraverso l'host.
PREROUTING — Questa catena altera i pacchetti ricevuti attraverso un'interfaccia di rete prima che vengano instradati.
POSTROUTING — Questa catena altera i pacchetti prima che vengano inviati attraverso un'interfaccia di rete.
Ogni pacchetto di rete ricevuto o inviato da un sistema Linux � soggetto ad almeno una tabella. Tuttavia, un pacchetto pu� essere soggetto a numerose regole all'interno di ogni tabella prima di raggiungere la fine della catena. La struttura e lo scopo di queste regole possono variare, ma di norma si occupano di identificare un pacchetto proveniente da o diretto verso un determinato indirizzo IP o gruppo di indirizzi tramite un protocollo e un servizio di rete particolari.
| Nota Bene |
---|
| Non utilizzare i nomi del dominio qualificati all'interno delle regole del firewall salvate nei file /etc/sysconfig/iptables o /etc/sysconfig/ip6tables. Nel seguente esempio: iptables -A FORWARD -s example.com -i eth0 -j DROP example.com risulta essere invalido poich� il servizio iptables, inizia, al momento dell'avvio, prima di qualsiasi servizio relativo a DNS, tale procedura d� luogo alla presenza di un errore. Solo gli indirizzi IP risultano essere validi per la creazione delle regole del firewall. |
Indipendentemente dalla sua destinazione, quando un pacchetto soddisfa una particolare regola contenuta in una delle tabelle, gli viene attribuito un determinato target o azione. Se la regola decide di assegnargli il target ACCEPT, il pacchetto pu� saltare i controlli legati alle restanti regole ed � autorizzato a procedere verso la sua destinazione. Se invece la regola opta per il target DROP, il pacchetto viene abbandonato, ossia gli viene negato l'accesso al sistema, e all'host mittente non viene rispedito indietro nulla. Se vi � una regola che specifica un target QUEUE, il pacchetto deve essere passato ad uno spazio-utente. Nel caso in cui la regola decida di applicare al pacchetto il target REJECT, il pacchetto viene comunque abbandonato, ma al nodo mittente viene recapitato un pacchetto di errore.
Ogni catena ha una policy di default per accettare ACCEPT, abbandonare DROP, rifiutare REJECT, o per accodarlo QUEUE verso lo spazio utente. Quando nessuna delle regole della catena risulta applicabile al pacchetto, � la policy di default a decidere come gestirlo.
Il comando iptables vi consente sia di configurare questi elenchi di regole, sia di impostare nuove catene e nuove tabelle.