Esempio di configurazione di iptables per il firewall di una rete locale

Segue un semplice esempio di configurazione di un Linux che agisce come firewall fra una rete locale e Internet. E' applicabile ad un caso abbastanza tipico in cui Linux è il default gateway della rete interna e gestisce il natting e l'uscita (secondo diversi gruppi con criteri di accesso applicabili ai singoli indirizzi IP della lan, nll'esempio 10.42.42.0/24).
L'interfaccia eth1 è quella collegata alla rete interna, i pacchetti che arrivano da essa vengono nattata e mascherati in uscita sull'interfaccia esterna eth0.
Sono definite le seguenti classi di accesso:
- ACCESSO-MAIL: Permesso soltanto l'accesso ad un server di posta esterno (della azienda) e niente altro.
- ACCESSO-WEB: Permesso l'accesso al server di posta e alla navigazione (porta 80 e 443)
- ACCESSO-COMPLETO: Accesso senza limiti ad Internet su tutte le porte
Ad ogni IP interno viene applicata una di queste classi di accesso.

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:ACCESSO-COMPLETO - [0:0]
:ACCESSO-MAIL - [0:0]
:ACCESSO-WEB - [0:0]
# Si definisce un host (di un admin) che può accedere in SSH al firewall per gestione e manutenzione remota
-A INPUT -p tcp --dport 22 -s 10.42.42.250 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j LOG
# Si associano i singoli indirizzi IP interni a diverse classi di accesso
-A FORWARD -s 10.42.42.11 -i eth1 -j ACCESSO-WEB
-A FORWARD -s 10.42.42.10 -i eth1 -j ACCESSO-WEB
-A FORWARD -s 10.42.42.5 -i eth1 -j ACCESSO-COMPLETO
-A FORWARD -s 10.42.42.4 -i eth1 -j ACCESSO-COMPLETO
-A FORWARD -s 10.42.42.3 -i eth1 -j ACCESSO-COMPLETO
# Caso particolare, in cui si permette l'accesso completo all'host che presenta uno specifico mac address, invece di identificarlo tramite indirirro IP
-A FORWARD -i eth1 -m mac --mac-source 00:00:86:3F:D5:C3 -j ACCESSO-COMPLETO
# Di default tutti i client interni possono accedere alla posta
-A FORWARD -s 10.42.42.0/255.255.255.0 -i eth1 -j ACCESSO-MAIL
# Si gestiscono i pacchetti di ritorno delle connessioni forwardate dal firewall
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Si permette libera uscita per i pacchetti che partono dal firewall stesso. Volendo è possibile essere più rigorosi e stringenti, a scapito dell'usabilità del sistema
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Si definisce la classe ACCESSO-COMPLETO, dove è abilitato il forwarding su tutte le porte
-A ACCESSO-COMPLETO -j ACCEPT
# La classe ACCESSO-MAIL permette ldi raggiungere un solo IP (il server di posta) sulle porte 110 (pop3) e 25 (smtp). Viene concessa la possibilità di usare qualsiasi server dns esterno (si potrebbe specificare l'indirizzo di un solo DNS server)
-A ACCESSO-MAIL -p udp -m udp --dport 53 -j ACCEPT
-A ACCESSO-MAIL -p tcp -m tcp --dport 25 -d 213.215.144.242 -j ACCEPT
-A ACCESSO-MAIL -p tcp -m tcp --dport 110 -d 213.215.144.242 -j ACCEPT
# La classe ACCESSO-WEB, rispetto al precedente aggiunge la possibilità di raggiungere le porte 80 e 443 e quindi la navigazione
-A ACCESSO-WEB -p tcp -m tcp --dport 80 -j ACCEPT
-A ACCESSO-WEB -p tcp -m tcp --dport 443 -j ACCEPT
-A ACCESSO-WEB -j ACCESSO-MAIL
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Con questa regola si nattato tutti gli IP sorgenti della rete interna sull'interfaccia esterna. Notare che l'effettiva possibilità di uscire su Internet da parte dei singoli IP è determinata delle regole di FORWARD sopra definite
-A POSTROUTING -s 10.42.42.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT

Privacy Policy