Il filtro dei pacchetti è un com­po­nen­te im­por­tan­te 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 as­si­cu­ra­re che i pacchetti ricevuti e inviati non con­ten­ga­no 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 con­fi­gu­rar­lo è ne­ces­sa­rio un programma ag­giun­ti­vo. Per questo kernel di Linux 2.4 e 2.6 avete bisogno del software libero iptables, che è stato svi­lup­pa­to ugual­men­te dal team del progetto Netfilter.

Gli am­mi­ni­stra­to­ri uti­liz­za­no iptables per stabilire, cambiare e rimuovere regole, anche se le im­po­sta­zio­ni vengono perse al riavvio del sistema. Grazie agli strumenti ap­par­te­nen­ti ad iptables, iptables-save e iptables-restore è possibile salvare e ri­pri­sti­na­re le regole create, cosa che avviene ad­di­rit­tu­ra au­to­ma­ti­ca­men­te durante il processo di boot con Init script. iptables è confinato però al pro­to­col­lo IPv4, per gli altri pro­to­col­li ci sono varianti come ip6tables o ebtables ri­spet­ti­va­men­te per IPv6 e per i pacchetti Ethernet, che sono ugual­men­te contenute nel core.

Vi pre­sen­tia­mo in questo tutorial le funzioni di base, le opzioni del filtro dei pacchetti iptables e vi spie­ghia­mo anche la con­fi­gu­ra­zio­ne delle tabelle basandoci su diversi esempi.

Come funziona iptables

Su Linux, iptables è ge­ne­ral­men­te già pre­in­stal­la­to. Se non è questo il caso o se volete essere sicuri di uti­liz­za­re l’ultima versione del software, potete scegliere di ag­gior­nar­lo e in­stal­lar­lo anche dal gestore di pacchetti della vostra di­stri­bu­zio­ne. Inserite il seguente comando nel terminale:

sudo apt-get install iptables

Ci sono diverse in­ter­fac­ce grafiche per iptables, ad esempio Webmin, dove l’uso del programma tramite riga di comando è re­la­ti­va­men­te 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 am­mi­ni­stra­to­re. Le tabelle (tables) caricate con il programma e create prima dal kernel com­pren­do­no 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 ve­ri­fi­ca­no quando una regola cor­ri­spon­de ad un de­ter­mi­na­to 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 in­ter­me­dia­rio (queue handler) che inoltra i pacchetti all’ap­pli­ca­zio­ne.
  • RETURN: il pacchetto viene rinviato alla catena pre­ce­den­te, quando si tratta di una catena per­so­na­liz­za­ta, mentre in quelle standard viene eseguita la policy della catena (di default senza con­fi­gu­ra­zio­ne: ACCEPT).

Le catene standard nominate nell’azione RETURN sono già presenti nella tabella di fil­trag­gio di iptables: si tratta di tre catene INPUT, FORWARD e OUTPUT. La prima si occupa dei pacchetti, che devono essere con­se­gna­ti 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 fil­trag­gio, esistono una tabella NAT per la con­ver­sio­ne degli indirizzi di rete e una tabella MANGLE per la ma­ni­po­la­zio­ne del pacchetto. Una pa­no­ra­mi­ca det­ta­glia­ta sulle fun­zio­na­li­tà del software è offerta dalla pagina “Man”, che si può aprire in ogni momento con il comando

man iptables

In al­ter­na­ti­va trovate mol­tis­si­me guide di iptables in diverse lingue su netfilter.org.

Come creare e gestire le proprie regole di fil­trag­gio

In questo paragrafo trattiamo la tabella di fil­trag­gio e le sue regole. La tabella qui sotto contiene i singoli comandi per creare e gestire catene: per la re­go­la­zio­ne del traffico dati potete creare una vostra catena o ricorrere alle tre catene standard INPUT, OUTPUT e FORWARD. Le prin­ci­pa­li opzioni di con­fi­gu­ra­zio­ne sono:

Comandi di iptables Esempio Spie­ga­zio­ne
-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 Sta­bi­li­sce la policy per la catena. Nell’esempio il pacchetto viene accettato au­to­ma­ti­ca­men­te, 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 in­di­ca­zio­ne della posizione di questa regola, nell’esempio sempre nella posizione 1.

Come iptables con­tri­bui­sce alle regole della pro­te­zio­ne del sistema

Ora vi in­di­chia­mo le pos­si­bi­li­tà di iptables portando ad esempio la con­fi­gu­ra­zio­ne di un firewall ru­di­men­ta­le. Poiché a seconda della di­stri­bu­zio­ne le catene standard INPUT, OUTPUT e FORWARD pre­sen­ta­no regole già pre­de­fi­ni­te, bisogna prima eli­mi­nar­le:

sudo iptables -F

Nel secondo passaggio ag­giun­ge­te per ognuna delle tre catene la policy DROP per as­si­cu­ra­re che vengano bloccati in ogni caso i pacchetti, a patto che nessuna delle regole di fil­trag­gio pre­sen­ta­te porti ad un risultato positivo:

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

Suc­ces­si­va­men­te 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 cor­ri­spon­den­ti (-A):

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

In seguito au­to­riz­za­te le con­nes­sio­ni 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 ap­par­ten­go­no già ad una con­nes­sio­ne esistente (--state ESTA­BLI­SHED) o si ri­fe­ri­sco­no 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 tem­po­ra­nee e rimangono valide solo fino a quando non si arresta il computer, dovreste salvare le vostre im­po­sta­zio­ni grazie al comando iptables-save nel file .rules della ri­spet­ti­va cartella iptables. Il comando ap­pro­pria­to per i sistemi Ubuntu è:

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

Dando il comando

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

caricate questo file ma­nual­men­te, dopo ogni riavvio del vostro sistema. Al­ter­na­ti­va­men­te potete creare uno script cor­ri­spon­den­te, cosicché l’ap­pli­ca­zio­ne del filtro dei pacchetti venga eseguita au­to­ma­ti­ca­men­te. Per ulteriori in­for­ma­zio­ni sui filtri di rete e iptables, vi con­si­glia­mo di dare un’occhiata alla guida presente sul wiki di Ubuntu.

Vai al menu prin­ci­pa­le