Capitolo 16. iptables

Linux è dotato di tool avanzati per il filtraggio dei pacchetti, ovvero il processo di controllo dei pacchetti di rete bloccati nel kernel che cercano di accedere, transitare e uscire dalla rete. Le versioni di kernel precedenti alla 2.4 si affidavano al comando ipchains per il filtraggio e utilizzavano elenchi di regole applicabili ai pacchetti in ogni fase del processo di filtraggio. Con l'uscita del Kernel 2.4 è stato introdotto il comando iptables, (chiamato anche netfilter), che è simile al comando ipchains, ma permette di ampliare notevolmente le possibilità di controllo in fase di filtraggio dei pacchetti.

Questo capitolo si concentra sugli aspetti più importanti del filtraggio dei pacchetti, evidenzia le differenze tra ipchains e iptables, descrive le varie opzioni disponibili per i comandi di iptables e, infine, spiega come mantenere valide le regole di filtraggio tra un riavvio di sistema e l'altro.

Se necessitate di istruzioni su come creare regole iptables o configurare un firewall basato su tali regole, consultate la la Sezione 16.5.

AttenzioneAvvertenza
 

Il meccanismo firewall predefinito per il kernel 2.4 è iptables, il quale, tuttavia, non può essere utilizzato se ipchains è già in esecuzione. Se ipchains viene rilevato all'avvio, il kernel emetterà un messaggio di errore e non sarà in grado di avviare iptables.

Questo genere di errori non hanno ripercussioni sul funzionamento di ipchains.

16.1. Filtraggio dei pacchetti

Il traffico si muove attraverso una rete sotto forma di pacchetti, ossia delle raccolte di dati di determinate dimensioni e determinati formati. Per trasmettere un file via rete, il computer mittente deve prima di tutto suddividere il file in tanti pacchetti, utilizzando le regole del protocollo di rete. Ciascuno di questi pacchetti contiene una piccola parte dei dati del file. L'altro computer riceve i pacchetti, li riassembla all'interno del file.

Ogni pacchetto contiene le informazioni che gli servono per spostarsi sulla rete e raggiungere la sua destinazione. Il pacchetto è in grado di dire ai computer che si trovano sul suo percorso, e alla macchina di destinazione, da dove proviene, dove è diretto, che tipo di pacchetto è e altro ancora. In genere, i pacchetti sono progettati per trasportare dati, sebbene alcuni protocolli si servano dei pacchetti anche per altri particolari scopi. Per esempio, il protocollo TCP (Transmission Control Protocol), utilizza un pacchetto SYN, che non contiene alcun dato, per dare avvio a una comunicazione tra due sistemi.

Il kernel di Linux possiede la capacità integrata di filtrare i pacchetti, concedendo o negando loro l'accesso al sistema. Il netfilter del kernel 2.4 ha 3 tabelle integrate dette anche elenchi di regole. Eccone una lista:

Ciascuna di queste tabelle hanno un gruppo di catene integrati che corrispondono alle azioni effettuate da netfilter sul pacchetto.

Le catene integrate per la tabella filter sono le seguenti:

Le catene integrate per la tabella nat sono le seguenti:

Le catene integrate per la tabella mangle sono le seguenti:

Ogni pacchetto di rete ricevuto da o inviato a un sistema Linux viene elaborato da almeno una tabella.

Ogni pacchetto può subire un controllo basato su numerose regole all'interno di ogni regola 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.

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.