Interviste Copertina Business

Articoli


Un esempio pratico di firewall

Dopo aver parlato a grandi linee di cosa sono i firewall e quali sono le loro funzioni principali analizziamo finalmente il caso di un firewall reale, quello della Rete Civica di Cremona.

La Rete civica della città di Cremona è una grande ``INTRANET'' visibile da INTERNET, vediamo il perchè: la RCCR (ormai la indicherò solo così) è raggiungibile dagli utenti in due modi: via modem o via internet. La RCCR però NON vuole essere un punto di accesso ad INTERNET, l'utente che chiama quindi il modem della RCCR può solo consultare la posta proveniente solo dalla casella postale che ha sulla rete civica, vedere i news-gruop ``privatì' della rete, accedere solo ad alcuni indirizzi INTERNET ``permessì'.

L'utente che proviende da INTERNET può leggere le pagine della RCCR, consultare la posta della casella postale della RCCR, non può fare sessioni in telnet sulle macchine della rete.

E' chiaro che per gestire tutte queste operazioni ci voglia una macchina adeguatamente programmata, per eseguire delle funzioni di firewall.

Chiameremo la macchina facente le funzioni di firewall firewall (scusate la poca fantasia): firewall sarà dotata di due interfaccie eth0 posta su INTERNET ed eth1 posta sulla INTRANET.

Per inizializzare le funzioni di firewall è necesario inserire in /etc/rc.d un file che chiameremo rc.firewall:

Definizione delle regole di INPUT

Cominciamo ad impostare le regole di INPUT per la macchina, stiamo dicendo alla macchina da chi e da dove accettare pacchetti, poniamo che l'IP della macchina firewall sia 151.0.0.1

ipfwadm -I -p deny
ipfwadm -I -f

Impostiamo con politica generale quella di impedire l'accesso alla macchina da qualsiasi periferica. La riga ipfwadm -I -f permette di fare il ``flush'' delle regole specifiche di INPUT.
Inseriamo adesso le regole specifiche di INPUT, indichiamo al firewall i pacchetti che deve accettare, specificando l'indirizzo di provenienza del pacchetto e il suo indirizzo di destinazione. E' possibile specificare oltre all'indirizzo anche la porta sorgente o destinazione.
# Ricordo che 0.0.0.0/0 significa ``qualsiasi indirizzo:qualsiasi porta''

ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 1024:65535
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 25  # mail
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 53  # dns
ipfwadm -I -a accept -P udp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 53  # dns
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 80  # www
ipfwadm -I -a accept -P udp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 80  # www
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 110 # pop3
ipfwadm -I -a accept -P udp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 110 # pop3
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 119 # news
ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 20 # ftp-data
ipfwadm -I -a accept -P tcp -W eth0 -S 0.0.0.0/0 -D 151.0.0.1 21 # ftp
ipfwadm -I -a accept -W eth1 -S 192.168.0.0/0 -D 0.0.0.0/0

La prima riga è assolutamente necessario metterla, le porte che vanno dalla 1024 alla 65535 sono porte che alcuni protocolli, come FTP utilizzanon per scambiarsi delle informazioni durante le loro operazioni. Non aprire queste porte significherebbe precludere il funzionamento di queste applicazioni. Sono poi aperte la porta 110 (con protocollo TCP e UDP) per il servizio di POP3, quello che permette ai vari mail-reader di controllare la posta. E' importante sottolineare che per aprire una porta a più protocolli è necessario aggiungere una riga di ipfwadm per ogni protocollo desiderato. L'ultima riga apre qualsiasi porta verso qualsiasi indirizzo ma solo ai pacchetti provenienti dalla INTRANET (si noti, per questo, l'opzione -W eth1). Una riga per certi versi interessante è la seguente:

ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0

questa riga istruisce il firewall dicendogli di accettare i pacchetti che ``transitanò'sulla nostra macchina (opzione -V 127.0.0.1), aventi come sorgente qualsiasi indirizzo:qualsiasi porta e, come destinazione, qualsiasi indirizzo:qualsiasi porta. La riga relativa al DNS l'ho inserita supponendo che sulla macchina fosse installato un server DNS, in mancanza di questo software queste due linee possono essere tranquillamente eliminate.

Abbiamo ottenuto il nostro primo risultato: l'utente internet può, sulla nostra macchina consultare le notizie dei news-group, passanti dalla porta 119, effettuare sessioni ftp, controllare la posta via pop3, inoltrare richieste al DNS della macchina. L'utene proveniente dai modem della rete civica, che hanno un IP fittizzio, hanno la possibilità di sfruttare i servizi locali, ma non possono accedere ad indirizzi di INTERNET.
[ipfwadm -I -a accept -W eth1 -S 192.168.0.0/0 -D 0.0.0.0/0]

Definizione delle regole di OUTPUT

Definiamo ora quali sono i pacchetti che possono transitre in uscita dalla macchina firewall. E' necessarrio sottolinare che transitare in uscita non significa andare su INTERNET, per permettere ad un pacchetto di uscire dalla INTARNET e gettarsi in INTERNET è neccessario mascherare l'IP di questo pacchetto, ma andiamo per ordine.
Queste sono le regole di OUTPUT.

ipfwadm -O -p accept
ipfwadm -O -f

Le regole di output sono molto più semplici; la prima riga, in modo del tutto equivalente a quelle delle politiche di INPUT, fissa la politica generale di OUTPUT, mentre la seconda effettua il ``flush'' delle regole specifiche di OUTPUT. Siamo giunti ad un secondo risultato: la macchina firewall è ora pronta per comunicare con la rete collegata a eth0 e con quella collegata a eth1.

Definizione delle regole di forwarding e masquerading

Per prima cosa impediamo a qualsiasi macchina di uscire sulla rete, raagiungiamo il nostro scopo con le seguenti due regole:

ipfwadm -F -p deny
ipfwadm -F -f

Naturalmete all'interno della Rete Civica ci sono, oltre alla macchina che gestisce il firewall, altre macchine, che hanno la possibilità di uscire e raggiungere indirizzi INTERNET. Chiameremo le due macchine heaven [192.168.1.100] e hell [192.168.1.101] (la fantasia non è proprio il mio forte!!!). Istrusiamo ora il firewall a permettere l'uscita di queste due macchine....
# Postazioni della RCCR con FULL INTERNET
ipfwadm -F -a masquerade -S 192.168.1.100 -D 0.0.0.0/0
ipfwadm -F -a masquerade -S 192.168.1.101 -D 0.0.0.0/0

Alcuni modem della Rete Civica sono riservati all'uso di associzioni alle quali viene dato un accesso FULL INTERNET, per permettere l'uscita di questi due modem sul mondo di internet sarà necessario aggiungere queste due righe:
#
# Modem particolari con accesso FULL INTERNET
#
ipfwadm -F -a masquerade -S 192.168.200.15 -D 0.0.0.0/0
ipfwadm -F -a masquerade -S 192.168.200.16 -D 0.0.0.0/0

Il sugo della historia

Mi perdoni il Manzoni per la citazione ``rubatà', una gestione del firewall con ipfwadm è sicuramente molto dinamica e comoda, pensate per esempio ad un ISP che deve aprire il proprio firewall solo dopo essersi accertato che l'utente che stà chiamando sia autorizzato realmente all'uscita su INTERNET, basta creare un piccolo programma che accerta il riconoscimento degli utenti e che, se il riconoscimento è andato a buon fine, apra on-the-fly il firewall e lo richiuda al logout dell'utente...
Naturalmente questo articolino non può coprire completamente il discorso firewall, lo scopo del giornale è solo ``far pubblicità '' al firewalling di Linux, ma penso possa essere di aiuto a chi, si trova a dover metter nella propria rete una macchina come firewall

Una nota finale

Per problemi di sicurezza gli IP dei modem e delle macchine della RCCR, così come i loro nomi NON sono stati palesati. Gli IP che si trovano nell'articolo sono IP casuali che non corrispondono quindi a realtà. Mi scuso per l'omissione.

di Corrado Ignoti (Fizban)


Interviste Copertina Business