<- SL - Intro - Indice Generale - Copertina - SL - GCompris -> |
Firewall
L'articolo...In questo articolo vedremo come configurare un firewall Linux per gestire una rete privata e una DMZ. |
Chiariamo subito il concetto di rete pubblica e rete privata: una rete pubblica è quel tratto di rete visibile da tutto il "mondo". In questa rete possono essere situati un web server, un mail server, ecc...
La rete pubblica in gergo tecnico viene anche chiamata DMZ (De-Militarized Zone, Zona De-Militarizzata): è un tratto di rete in cui il firewall permette l'accesso a tutti.
La rete privata è una rete i cui computer possono accedere a internet ma non vengono visti dal "mondo".
Terminata l'introduzione iniziamo subito la configurazione di quello che sarà il nostro firewall.
Ovviamente su questo PC dovranno essere installate tre interfacce di rete: una che servirà per il collegamento internet, una per la rete privata e una per la DMZ.
Sul PC che fungerà da firewall installeremo la distribuzione che più ci aggrada, ricordandoci di utilizzare un kernel successivo alla versione 2.4, di cui utilizzeremo netfilter (iptables).
Per assegnare un indirizzo IP ad una scheda è possibile utilizzare il tool di configurazione della propria distribuzione, oppure il comando ifconfig:
# ifconfig eth0 netmask 255.0.0.0 63.65.76.122 up |
eth0 è l'interfaccia collegata ad internet, 63.65.76.122 è l'indirizzo che ci è stato assegnato dal provider.
# ifconfig eth1 netmask 255.0.0.0 10.0.0.1 up |
eth1 è l'interfaccia per il segmento di rete privata, 10.0.0.1 è l'IP della scheda per la rete privata.
# ifconfig eth2 netmask 255.255.255.0 192.168.0.1 up |
eth2 è l'interfaccia per la DMZ, 192.168.0.1 è l'IP della scheda per la DMZ.
Passiamo ora alla creazione dello script per l'attivazione del firewall:
#!/bin/sh # Definizione delle variabili necessarie allo script INTERFACCIA_LAN="eth1" # interfaccia per la rete privata INTERFACCIA_DMZ="eth2" # interfaccia per la rete pubblica (DMZ) INTERFACCIA_INTERNET="eth0" # interfaccia per il collegamento a internet LAN_IP="10.0.0.1" # ip della scheda di rete per la rete privata LAN_IP_RANGE="10.0.0.1/10.255.255.255" # range degli indirizzi ip della lan DMZ_IP="192.168.0.1" # ip della scheda di rete per la DMZ INTERNET_IP="63.65.76.122" # ip assegnatoci dal provider # Ora carichiamo i moduli del kernel necessari per il corretto funzionamento del firewall modprobe iptable_filter modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_tftp modprobe ip_conntrack_amanda modprobe ip_conntrack_irc modprobe ip_tables modprobe ip_queue modprobe ipt_multiport modprobe ipt_mac modprobe ipt_unclean modprobe ipt_REJECT modprobe ipt_state modprobe ipt_owner modprobe ipt_limit modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_tftp modprobe ip_nat_irc modprobe ip_nat_snmp_basic modprobe ip_nat_amanda modprobe ipt_MASQUERADE modprobe ipt_LOG # Abilitiamo l'IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # Azzera tutte le catene precedentemente definite iptables -F iptables -X iptables -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z # Definisce le politiche predefinite iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Crea le nuove catene che verranno utilizzate per la gestione del firewall iptables -N filter_bad_packets iptables -N from_outside iptables -N from_inside iptables -N filter_lan_reserved iptables -N dmz_to_outside iptables -N dmz_to_inside iptables -N outside_to_dmz iptables -N inside_to_dmz # Da qui inizia la gestione vera e propria del firewall iptables -t nat -A POSTROUTING -o $INTERFACCIA_INTERNET -j SNAT --to-source $INTERNET_IP # maschera gli indirizzi ip in modo che i computer della rete possano accedere a internet ##### Servizio: HTTP (Porta tcp/80) ##### # Da decommentare nel caso nella DMZ sia presente un web server #WEBSERVER_IP="192.168.0.5" # ip del web server all'interno della DMZ #iptables -t nat -A PREROUTING -p tcp -i $INTERFACCIA_INTERNET -d $INTERNET_IP --dport 80 -j DNAT --to-destination $WEBSERVER_IP # manda tutti i pacchetti per la porta tcp/80 al web server ## Attenzione: per l'attivazione del web server ci saranno da decommentare altre linee più avanti ##### Fine servizio: HTTP ##### # Catene per la gestione del firewall: # Catena FILTER_LAN_RESERVED: filtra i pacchetti relativi alla LAN iptables -A filter_lan_reserved -s $LAN_IP -j DROP # Catena FROM_INSIDE: filtra i pacchetti in arrivo dalla LAN iptables -A from_inside -j filter_lan_reserved iptables -A from_inside -s $LAN_IP_RANGE -j ACCEPT # accetta tutti i pacchetti provenienti dalla LAN e diretti a internet o alla DMZ # Catena FILTER_BAD_PACKETS: filtra i pacchetti alla ricerca di qualche pacchetto non valido iptables -A filter_bad_packets -p tcp ! --syn -m state --state NEW -j DROP # elimina tutti i pacchetti nuovi senza il syn flag iptables -A filter_bad_packets -p all -m state --state INVALID -j DROP # elimina tutti i pacchetti non validi # Catena FROM_OUTSIDE: filtra i pacchetti provenienti da internet iptables -A from_outside -p all -j filter_bad_packets # fa un controllo per i pacchetti non validi iptables -A from_outside -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # fa passare verso la LAN solo i pacchetti relativi a connessioni già avvenute # Catena OUTSIDE_TO_DMZ: regole per la gestione della DMZ ##### Servizio: HTTP (porta tcp/80) ##### # decommentare le seguenti linee nel caso ci sia un web server nella DMZ #iptables -A outside_to_dmz -p tcp -d $WEBSERVER_IP --dport 80 --syn -m state --state NEW -j ACCEPT #iptables -A outside_to_dmz -p tcp -d $WEBSERVER_IP --dport 80 --syn -m state --state ESTABLISHED,RELATED -j ACCEPT ##### Fine servizio: HTTP ##### iptables -A outside_to_dmz -j DROP #invia alla DMZ solo i pacchetti per i servizi conosciuti, elimina gli altri # Catena DMZ_TO_OUTSIDE iptables -A dmz_to_outside -j ACCEPT # fa uscire in internet tutti i pacchetti provenienti dalla DMZ # Catena INSIDE_TO_DMZ iptables -A inside_to_dmz -j from_inside # per l'invio di pacchetti dalla LAN alla DMZ rimanda alla catena from_inside iptables -A inside_to_dmz -j DROP # Catena DMZ_TO_INSIDE iptables -A dmz_to_inside -j from_outside # per l'invio di pacchetti dalla DMZ alla LAN rimanda alla catena from_outside iptables -A dmz_to_inside -j DROP # Ora verificando le interfacce sorgente e destinazione inviamo i pacchetti verso le catene preposte per la loro analisi iptables -A FORWARD -i $INTERFACCIA_INTERNET -o $INTERFACCIA_DMZ -j outside_to_dmz iptables -A FORWARD -i $INTERFACCIA_DMZ -o $INTERFACCIA_INTERNER -j dmz_to_outside iptables -A FORWARD -i $INTERFACCIA_LAN -o $INTERFACCIA_DMZ -j inside_to_dmz iptables -A FORWARD -i $INTERFACCIA_DMZ -o $INTERFACCIA_LAN -j dmz_to_inside iptables -A FORWARD -i $INTERFACCIA_INTERNET -o $INTERFACCIA_LAN -j from_outside iptables -A FORWARD -i $INTERFACCIA_LAN -o $INTERFACCIA_INTERNET -j from_inside |
Attenzione: le regole di questo firewall gestiscono i pacchetti della LAN e della DMZ ma non quelli locali.
Queste semplici regole costituiscono una base di partenza e possono, naturalmente, essere migliorate ed estese in funzione dei servizi ospitati nella DMZ e del grado di sicurezza che si vuole implementare.
In generale, per un nuovo servizio nella DMZ inserire la riga
iptables -t nat -A PREROUTING -p <protocollo:tcp|udp|all> -i $INTERFACCIA_INTERNET -d $INTERNET_IP \ --dport <porta-del-servizio> -j DNAT --to-destination <IP-del-server-del-servizio> |
prima dell'inizio delle catene per la gestione del firewall, e le righe
iptables -A outside_to_dmz -p <protocollo:tcp|udp|all> -d <IP-del-server-del-servizio> \ --dport <porta-del-servizio> --syn -m state --state NEW -j ACCEPT iptables -A outside_to_dmz -p <protocollo:tcp|udp|all> -d <IP-del-server-del-servizio> \ --dport <porta-del-servizio> --syn -m state --state ESTABLISHED,RELATED -j ACCEPT |
nella catena outside_to_dmz prima dell'ultima istruzione (iptables -A outside_to_dmz -j DROP).
Happy firewalling... :-)
L'autoreStefano Sasso utilizza Linux dal 2000 e si diverte a programmare in Perl, PHP e Python. È anche amministratore del server web del suo liceo, dove frequenta la classe quarta. |
<- SL - Intro - Indice Generale - Copertina - SL - GCompris -> |