Questo collegamento ha però portato ad alcuni problemi, primo fra tutti il problema della sicurezza: i computer che formavano le reti private connesse alla grande rete erano punti vulnerabili per e costituivano un serio problema.
Da qui l'idea di nascondere dietro ad un muro queste macchine, sprotette, e di presentare al grande pubblico di internet solo macchine sicure, server pronti a contrastare gli attacchi dei pirati informatici.
Un firewall è una macchina dotata di due interfaccie di rete, una posta sulla rete da proteggere e una collegata alla rete pubblica. I casi più frequenti sono firewall ethernet-ethernet o ethernet-PPP nel caso la rete privata sia collegata a quella pubblica attraverso un ISP. I kernel di Linux implementano le funzioni di firewall già dalla v1.2.
Per programmare il firewall è necessario installare sulla propria macchina una piccola utility ipfwadm (IP ForWard ADMinistation), che permette di programmare il vostro firewall. Per costruire un firewall sicuro è però consigliabile installare una versione più recente di kernel, tutte le prove che ho fatto le ho condotte utilizzando la v2.0.30 del Linux Kernel e la versione 2.0.3 dell'ipfwadm. In questo articolo analizzeremo i tipi di protezione più diffusi ed implementabili sotto Linux, il filtraggio dei pacchetti IP, l'utilizzo di un proxy, e la tecnica del mascheramento degli IP (IP masquerading) Vedremo poi un caso di firewall un pò particolare, quello funzionante presso la Rete Civica di Cremona (www.rccr.cremona.it), in cui ad essere protetta non è la rete privata ma internet stessa.... leggere per credere!!!
La configurazione della rete privata.
Nella costruzione della rete privata è necessario porre una certa attenzione nella distribuzione degli IP. Vista la scarsità di quelli disponibili il nostro ISP non ci fornirà una serie infinita di indirizzi, ma ce ne darà un numero molto limitato.
Al fine di ``aumentare'' il numero di IP assegnabili si può ricorrere all'utilizzo di IP appartenenti ad un un sottoinsieme dello spazio di indirizzamento TCP/IP riservato all'utilizzo di reti private, ovvero non connesse direttamente ad internet. Per questi indirizzi non è previsto un indirizzamento diretto e di questo è neccessario tenerne conto al fine di evitare che pacchetti appartenenti a queste reti transitino su internet, quindi nella configurazione del vostro router inserite clausole che blocchino l'uscita di questi pacchetti. Gli indirizzi scelti per questo scopo sono contenuti in un RFC ufficiale (per l'esattezza il 1597) e sono i seguenti:
Classe dell'indirizzo
Minimo valore assegnabile
Massimo valore assegnabile
A
10.0.0.0
10.255.255.255
B
172.16.0.0
172.31.255.255
C
192.168.0.0
192.168.255.255
IP masquerading
L'IP masquerading è sicuramente la funzione di firewall più semplice da installare e da configurare, presenta pochi problemi di sicurezza ed può essere tranquillamente installato senza problemi anche dall'utente inesperto. Consiste nella possibilità di mascherare gli indirizzi TCP/IP di una rete privata in modo da renderla completamente nascosta all'esterno. Per fare questo sarà sufficiente configurare le macchine della rete interna affinchè utilizzino come default router la macchina Linux che svolge la funzione di firewall, in questo modo tutte le connessioni effettutate dalle macchine della rete interna sembreranno essere state generate da una porta del router.
Linux provvederà a rimettere a posto i pacchetti di ritorno e a spedirli alla corretta macchina nascosta. Naturalmente l'uso dell' IP masquerading presenta anche dei problemi, primo fra tutti il fatto che questo tipo di protezione funziona solo con pacchetti di tipo TCP e UDP. Ma un problema più serio è costituito dal fatto che alcune applicazioni, quali ad esempio IRC o FTP inseriscono nei pacchetti di risposta l' indirizzo della macchina che ha spedito il pacchetto stesso oppure tentano di spedire direttamente alla nostra macchina i pacchetti di risposta, nel caso la nostra macchina sia dietro un firewall questo tipo di connessione fallisce, in quanto i pacchetti vengono spediti ad una macchina con un indirizzo fittizio e comunque privo di routing. La risoluzione al problema è fornita direttamente dagli autori del kernel, possono essere compilati ed installati alcuni moduli che ci permettono di utilizzare questo particolare tipo di applicazioni.
Questi moduli possono essere compilati solo sottoforma di moduli ed inseriti con uno dei comandi predisposti (modprobe insmod), la lista di tutti i moduli disponibile è reperibile all'indirizzo http://www.wwonline.com/~achau/ipmasq un altro problema che non è trascurabile è costituito dal fatto che, a causa del modo in cui il protocollo TCP/IP è stato concepito, un singolo pacchetto IP può essere frammentato in più pacchetti, questo fenomeno si verifica quando si tenta di fare il forward di pacchetti molto grandi, tra interfaccie con MTU/MRU (MTU e MRU indicano rispettivamente la massima dimensione dei pacchetti trasmissibili e ricevibili da parte di un'interfaccia) tra di loro differenti. Si può arginare, anche se solo in parte, questo problema facendo in modo che il kernel di Linux tenti di deframmentare i pacchetti in ricezione prima di mascherarli e di spedirli facendone il forward, per far questo è necessario ricompilare il kernel con l'opzione CONFIG_IP_ALWAYS_DEFRAG, è anche molto utile attivare questa opzione per evitare che qualche mal intenzionato riesca a imbrogliare le regole stabilite per il forward facendo passare pacchetti ``indesiderati''. Per evitare totalmente il ``blocco critico'' dovuto alla frammentazione dei pacchetti è neccessario porre molta attenzione agli MTU/MRU impostati sul router.
Due considerazioni sulla macchina firewall.
La macchina che costituirà il firewall deve essere scelta in modo un pò particolare, intanto le due schede di rete, è meglio se sono uguali. Il FIREWALL ha la particolarità di essere un mangia risorse, quindi è necessario predisporre una macchina (anche in base al traffico) con molte di queste risorse, per esempio la RAM più ne avete meglio è, il disco fisso può essere di dimensioni normali (1Gb), naturalmente dovete chiudere ftp e telnet su quella macchina, uno perchè meno operazioni fate eseguire alla macchina meglio è, due perchè ftp e telnet sono due punti deboli per la sicurezza della macchina e quindi del sistema stesso. Nel fissare le regole di forwarding (vedremo come farlo nella prossima puntata) partire da regole generali e scendete via via
Controllate il log del vostro firewall costantemente e armatevi di santa pazienza!!!
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.
Nessun commento:
Posta un commento
Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.