Capitolo 18. iptables

Installato con Red Hat Enterprise Linux vi sono dei tool avanzati per il filtraggio dei pacchetti della rete —, ovvero il processo di controllo dei pacchetti di rete, all'interno del kernel, che cercano di accedere, transitare e uscire dallo stack della rete. Le versioni del kernel precedenti alla 2.4 si affidavano al comando ipchains per il filtraggio e utilizzavano gli elenchi di regole applicabili ai pacchetti in ogni fase del processo stesso. Con il Kernel 2.4 è stato introdotto il comando iptables, (chiamato anche netfilter), il quale è simile a ipchains, ma permette di ampliare notevolmente le possibilità di controllo in fase di filtraggio dei pacchetti.

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.

Se avete bisogno di istruzioni su come creare regole iptables o configurare un firewall basato su tali regole, consultate la Sezione 18.7.

AttenzioneAvvertenza
 

Il meccanismo di default del firewall per il kernel 2.4 è iptables, ma iptables non può essere utilizzato se ipchains sono già in esecuzione. Se ipchains è presente al momento dell'avvio, il kernel emette un messaggio di errore e non sarà in grado di avviare iptables.

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

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:

SuggerimentoSuggerimento
 

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:

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 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.

NotaNota 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.