Un Firewall casalingo con IPTABLES

di Francesco Celebrini

Il firewalling, per molti utenti ancora argomento oscuro, risulta ad oggi una vera e propria necessità e non più un virtuosismo tecnico riservato a pochi smanettoni. Vediamo uno script di esempio...

Un Firewall casalingo con IPTABLES Il firewalling risulta essere scienza complessa e oscura per la maggior
parte degli utenti.
Allo stesso tempo la sicurezza dei sistemi informatici (che siano singoli pc o reti molto complesse) e le tecniche per implementarla non sono più da molto uno snobistico virtuosismo tecnico bensì una necessità
impellente.
Tra virus, dialer, rootkit, exploit, software di forza bruta ed altre insidie, dietro le quali ci sta spesso un "simpatico" ragazzetto che il fato pare abbia designato come tuo personale Attila informatico, anche l'utente medio che accede a internet dal proprio pc di casa è sottoposto a un pericolo in costante crescita ed è costretto quindi a porvi
rimedio.

In questo senso la realizzazione di un firewall casalingo (o per un
ufficio) in una piccola rete che accede a internet attraverso un modem
analogico condiviso è relativamente semplice.
Lo scopo consiste nel proteggere i pc all'interno e nell' utilizzare la
funzione NAT con indirizzo ip pubblico assegnato dinamicamente dal
provider.

Di seguito viene descritto uno script di esempio che può essere
localizzato nella directory /etc/init.d con un collegamento simbolico in
/etc/rc.d/rc5.d (digitate ad es. ln -s /etc/init.d/firewall_casa
/etc/rc.d/rc5.d/S30firewall_casa
) in modo che tale script venga lanciato
automaticamente al boot del sistema (se questo parte con il runlevel 5, cioè con interfaccia grafica).

# INIZIO SCRIPT #

# puliamo tutto prima di applicare le nuove regole
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F

# impostiamo la policy per i pacchetti in ingresso
# bloccando il traffico
/sbin/iptables -P INPUT DROP

# impostiamo la policy per i pacchetti in transito
# tra le interfacce bloccando il traffico
/sbin/iptables -P FORWARD DROP

# impostiamo la policy per i pacchetti in uscita
# abilitando il traffico
/sbin/iptables -P OUTPUT ACCEPT

# poi facciamo in modo di accettare i pacchetti in entrata
# che appartengono ad una connessione già esistente
# o che sono correlati a connessioni preesistenti
/sbin/iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

# abilitiamo il transito di pacchetti provenienti
# dalla rete interna (ad es. 192.168.1.*)
/sbin/iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

# abilitiamo il transito di pacchetti che appartengono
# ad una connessione già esistente o che siano correlati
# a connessioni preesistenti
/sbin/iptables -A FORWARD -m state --state ESTABLISHED, RELATED -j
ACCEPT

# abilitiamo i pacchetti icmp (il ping) per l'interfaccia
# di loopback
/sbin/iptables -A INPUT -i lo -p icmp -j ACCEPT

# abilitiamo i pacchetti icmp per la scheda di rete
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT

# ora abilitiamo i pc della rete interna alla navigazione
# in internet utilizzando la funzione NAT per un modem
# condiviso con indirizzo ip dinamico assegnato dal
# provider
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j
MASQUERADE

# e infine abilitiamo l'attraversamento dei pacchetti
# tra un'interfaccia e l'altra
echo 1 > /proc/sys/net/ipv4/ip_forward

# FINE SCRIPT #


Per quanto riguarda i client che accedono a internet attraverso il
firewall, basterà indicare come gateway l'indirizzo ip interno statico del
pc dove funziona il firewall.


P.S.
Lo script è stato testato su Red Hat 8.0 con il kernel 2.4.18, modem
analogico u.s.robotics e 2 client con windows 2000.

AUTORE DEL TESTO
Francesco Celebrini

Pubblicato il: 14/10/2004