Iptables : semplici regole per un firewall casalingo
Iptables per Linux (fra cui Ubuntu è probabilmente la più diffusa) è il programma con cui ci si interfaccia con netfilter, che permette di intercettare, bloccare pacchetti, in maniera più spicciola permette ad un utente di decidere quali connessioni voglia bloccare, e quali porte voglia aprire per consentire quel determinato traffico (es. aprire la porta 21 per permettere ad un utente di collegarsi al computer locale, che fa girare un server ftp).
Di default, se nessuno ha configurato il firewall, iptables bloccherà tutte le connessioni in ingresso, il che significa che se qualcuno proverà a collegarsi al computer attraverso quel servizio (ftp, mail) riceverà un bel TIMEOUT.
Questo è facilmente verificabile digitando, in una shell:
sudo iptables -L
il risultato sarà
Chain INPUT (policy ACCEPT) target prot opt source destination
senza ulteriori dettagli sulle porte aperte.
Questo tipo di configurazione può anche andar bene per una buona parte degli utenti, ma non va più bene nel momento in cui, come scritto sopra, avrà bisogno di far girare un server ftp sul computer e di permettere ad utenti remoti di accedervi, oppure vorrà accedere al computer in remoto utilizzando il servizio ssh (Secure shell).
C’è quindi bisogno di individuare il servizio che si vuole rendere accessibile all’esterno, capire quale sia la porta tcp o udp associata (di default, per es. 21 per ftp, 22 per ssh).
Fatto questo, è comodo creare un piccolo script che verrà lanciato automaticamente all’avvio del computer (perchè altrimenti, al successivo riavvio, iptables avrà “dimenticato” tutte le regole che avete impostato).
Un esempio potrebbe essere un file di questo tipo:
iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 4682 -j ACCEPT iptables -A INPUT -p udp --dport 4692 -j ACCEPT iptables -A INPUT -p tcp --dport 6890:6900 -j ACCEPT iptables -A INPUT -p udp --dport 6890:6900 -j ACCEPT iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 2077 -j ACCEPT
Dove le righe del tipo iptables -A INPUT -p tcp –dport NUMERO_PORTA -j ACCEPT dicono di aprire la porta tcp numero NUMERO_PORTA.
Le righe del tipo iptables -A INPUT -p udp –dport NUMERO_PORTA -j ACCEPT permettono di aprire la porta NUMERO_PORTA udp.
Le porte del tipo NUMERO_PORTA1:NUMERO_PORTA2 significa aprire tutte le porte nell’intervallo compreso fra queste due porte.
A questo punto non rimane che salvare lo script, renderlo eseguibile (sudo chmod +x nomescript) e copiarlo in /etc/init.d
Al successivo riavvio, le regole verranno caricate nel firewall. Se si vogliono testare le regole appena create senza riavviare, è sufficiente digitare
sudo iptables nomedelvostroscript
e verificarle con sudo iptables -L.
Ovviamente nulla vieta di utilizzare una gui per impostare le regole graficamente, ma credo sia necessario capire un minimo il funzionamento per poter gestire il proprio firewall prima di utilizzare uno strumento grafico.
UPDATE DEL 15 APRILE 2009:
Ecco un elenco dei principali servizi tcp/udp e le relative porte (link)