Tutorial di iptables: come configurare le tabelle di filtraggio del kernel Linux

Il filtro dei pacchetti è un componente importante per le misure di sicurezza di tutti i sistemi che si trovano in una rete, infatti il controllo e la gestione del traffico dati in entrata e in uscita (spesso parte dei compiti di un firewall) deve assicurare che i pacchetti ricevuti e inviati non contengano malware e spam. Nel kernel Linux è in genere già presente un filtro dei pacchetti di questo tipo, offerto da alcuni moduli del pacchetto Netfilter, anche se per configurarlo è necessario un programma aggiuntivo. Per questo kernel di Linux 2.4 e 2.6 avete bisogno del software libero iptables, che è stato sviluppato ugualmente dal team del progetto Netfilter.

Gli amministratori utilizzano iptables per stabilire, cambiare e rimuovere regole, anche se le impostazioni vengono perse al riavvio del sistema. Grazie agli strumenti appartenenti ad iptables, iptables-save e iptables-restore è possibile salvare e ripristinare le regole create, cosa che avviene addirittura automaticamente durante il processo di boot con Init script. iptables è confinato però al protocollo IPv4, per gli altri protocolli ci sono varianti come ip6tables o ebtables rispettivamente per IPv6 e per i pacchetti Ethernet, che sono ugualmente contenute nel core.

Vi presentiamo in questo tutorial le funzioni di base, le opzioni del filtro dei pacchetti iptables e vi spieghiamo anche la configurazione delle tabelle basandoci su diversi esempi.

Come funziona iptables

Su Linux, iptables è generalmente già preinstallato. Se non è questo il caso o se volete essere sicuri di utilizzare l’ultima versione del software, potete scegliere di aggiornarlo e installarlo anche dal gestore di pacchetti della vostra distribuzione. Inserite il seguente comando nel terminale:

sudo apt-get install iptables

Ci sono diverse interfacce grafiche per iptables, ad esempio FirewallBuilder o Webmin, dove l’uso del programma tramite riga di comando è relativamente semplice e facile da imparare.

iptables richiede dei privilegi di sistema avanzati e può quindi essere eseguito solo come utente root o con i relativi permessi di amministratore. Le tabelle (tables) caricate con il programma e create prima dal kernel comprendono catene (chains) di regole (rules) che indicano come devono essere trattati i pacchetti in ingresso e quelli inviati. Questi pacchetti vengono trasmessi all’interno di una catena passando da regola a regola, in cui ognuna di queste può provocare un’azione (jump target) o un passaggio ad un’altra catena (goto chain).

Le azioni, che si verificano quando una regola corrisponde ad un determinato pacchetto, possono essere le seguenti:

  • ACCEPT: il pacchetto viene accettato.
  • DROP: il pacchetto viene rifiutato.
  • QUEUE: il pacchetto viene spostato negli altri processi utente; prevede un intermediario (queue handler) che inoltra i pacchetti all’applicazione.
  • RETURN: il pacchetto viene rinviato alla catena precedente, quando si tratta di una catena personalizzata, mentre in quelle standard viene eseguita la policy della catena (di default senza configurazione: ACCEPT).

Le catene standard nominate nell’azione RETURN sono già presenti nella tabella di filtraggio di iptables: si tratta di tre catene INPUT, FORWARD e OUTPUT. La prima si occupa dei pacchetti, che devono essere consegnati al sistema, mentre la seconda elabora i pacchetti in entrata che sono destinati all’inoltro. Invece, la catena OUTPUT controlla il traffico dati, generato dal proprio computer. Per il resto, oltre alle tabelle di filtraggio, esistono una tabella NAT per la conversione degli indirizzi di rete e una tabella MANGLE per la manipolazione del pacchetto. Una panoramica dettagliata sulle funzionalità del software è offerta dalla pagina “Man”, che si può aprire in ogni momento con il comando

man iptables

In alternativa trovate moltissime guide di iptables in diverse lingue su netfilter.org.

Come creare e gestire le proprie regole di filtraggio

In questo paragrafo trattiamo la tabella di filtraggio e le sue regole. La tabella qui sotto contiene i singoli comandi per creare e gestire catene: per la regolazione del traffico dati potete creare una vostra catena o ricorrere alle tre catene standard INPUT, OUTPUT e FORWARD. Le principali opzioni di configurazione sono:

Comandi di iptables Esempio Spiegazione
-N "Nome della catena" sudo iptables -N test Crea una nuova catena con il nome “test“.
-X "Nome della catena" sudo iptables -X test Elimina la catena vuota con il nome “test“; non funziona con le catene standard INPUT, OUTPUT e FORWARD.
-L "Nome della catena" sudo iptables -L test Elenca le regole della catena con il nome “test“.
-F "Nome della catena" sudo iptables -F test Elimina tutte le regole della catena con il nome “test“.
-P "Nome della catena" "Azione" sudo iptables -P INPUT ACCEPT Stabilisce la policy per la catena. Nell’esempio il pacchetto viene accettato automaticamente, se non sono comprese le regole del filtro della catena INPUT.
-A " Nome della catena" "Regola" sudo iptables -A test -s 127.0.0.1 -j DROP Allega una nuova regola alla catena scelta. Nell’esempio viene aggiunta la regola della catena “test“ di rifiutare i pacchetti dell’IP 127.0.0.1.
-D " Nome della catena" "Regola" sudo iptables -D test -s 127.0.0.1 -j DROP Elimina la regola data della catena scelta.
-I " Nome della catena" "Posizione" "Regola" sudo iptables -I test 1 -s 127.0.0.1 -j DROP Aggiunge la nuova regola alla posizione scelta della catena, nell’esempio nella posizione 1.
-D " Nome della catena" "Posizione" sudo iptables -D test 1 Elimina la regola della catena scelta con indicazione della posizione di questa regola, nell’esempio sempre nella posizione 1.

Come iptables contribuisce alle regole della protezione del sistema

Ora vi indichiamo le possibilità di iptables portando ad esempio la configurazione di un firewall rudimentale. Poiché a seconda della distribuzione le catene standard INPUT, OUTPUT e FORWARD presentano regole già predefinite, bisogna prima eliminarle:

sudo iptables -F

Nel secondo passaggio aggiungete per ognuna delle tre catene la policy DROP per assicurare che vengano bloccati in ogni caso i pacchetti, a patto che nessuna delle regole di filtraggio presentate porti ad un risultato positivo:

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

Successivamente attivate il vostro sistema, il localhost (lo) per il traffico in ingresso (-i) e in uscita (-o) (quindi verrà compiuta l’azione ACCEPT), ampliando sia la catena INPUT sia quella OUTPUT tramite le regole corrispondenti (-A):

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

In seguito autorizzate le connessioni HTTP e HTTPS in uscita (Porta 80 e porta 443) per le porte TCP comuni da 1024 a 65535:

sudo iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -j ACCEPT

Nell’ultimo passaggio accettate tutti i pacchetti in entrata e in uscita che appartengono già ad una connessione esistente (--state ESTABLISHED) o si riferiscono ad una di queste (--state RELATED):

sudo iptables -A INPUT -i eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT

Visto che le regole create con iptables sono temporanee e rimangono valide solo fino a quando non si arresta il computer, dovreste salvare le vostre impostazioni grazie al comando iptables-save nel file .rules della rispettiva cartella iptables. Il comando appropriato per i sistemi Ubuntu è:

sudo iptables-save > /etc/iptables/iptables.rules

Dando il comando

sudo iptables-restore < /etc/iptables/iptables.rules

caricate questo file manualmente, dopo ogni riavvio del vostro sistema. Alternativamente potete creare uno script corrispondente, cosicché l’applicazione del filtro dei pacchetti venga eseguita automaticamente.

Per ulteriori informazioni sui filtri di rete e iptables, vi consigliamo di dare un’occhiata alla guida presente sul wiki di Ubuntu.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.