CONFIGURAZIONI PC E RETI
ovvero... come abbiamo fatto dalla A alla Z.
 
HOME DOCUMENTI PROGETTI RISORSE DOMANDE ARTICOLI

 FIREWALL E CONDIVISIONE INTERNET
 ultimo aggiornamento: 21 maggio 2001 ore 17.15
 
 
PROBLEMATICA
configurazione firewall (per protezione e funzione router) e condivisione unica connessione internet via modem per tutti i client della rete locale.
 
I DUE VANTAGGI
1) La rete rimane protetta, tramite uno script, da intrusioni esterne;
2) tutti i PC della rete locale possono navigare in Internet contemporaneamente.

 
COS'E' UN FIREWALL
Un firewall è un oggetto che permette di decidere quali tipi di richieste di rete possono passarci attraverso e quali invece vengono bloccate. Ad esempio, si puo decidere di far passare le richieste di tipo HTTP e di bloccare quelle utilizzate da FTP (se non si vuole, ad esempio, che dall'esterno della rete locale nessuno riesca ad utilizzare FTP installato su un server dedicato a questa funzionalità per l'utilizzo escusivo interno).
Il firewall puo' essere un dispositivo hardware (che si acquista a prezzi alti e si installa in un certo punto della rete), o un programma software che viene eseguito su un PC (naturalmente, nel caso di Linux, l'implementazione del firewall è gratuita).
Noi abbiamo utilizzato un'implementazione software sulla macchina 200.200.15.1, modificando lo script proposto da Quick-Easy-Configuration-HOWTO-Firewall di Antonio Fragola (leggi il relativo copyright). Per comodità, una copia di tale script è scaricabile cliccando qui.

 
COME FUNZIONA IL NOSTRO FIREWALL SOFTWARE
Il firewall agisce sull'apertura o chiusura delle cosiddette "porte", "posizionate" sulle interfacce di rete del PC dove viene attivato, dalle quali passano le richieste relative a vari servizi di rete. Ad esempio, le richieste di tipo HTML (quali sono quelle relative a pagine WEB) passano solitamente attraverso la porta numero 80. Se tale porta viene "chiusa" in ingresso su un'interfaccia di rete (che chiamiamo INTERFACCIA1), attraverso INTERFACCIA1 non potranno transitare pagine WEB, e quindi non sarà possibile navigare in Internet utilizzando una connessione a internet che utilizzi appunto INTERFACCIA1.
Nel nostro caso, il PC Linux NATALIA ha tre interfacce di rete:
a) la scheda di rete identificata con ip fisso 200.200.15.1, ed identificata da "eth0";
b) la connessione internet via modem, per la quale l'ip viene assegnato dinamicamente dal provider a cui ci si connette, ed identificata da "ppp0";
c) l'interfaccia di loopback, che è praticamente un'interfaccia verso se stesso, identificata da "lo",e il cui indirizzo ip è 127.0.0.1 (ossia, eseguendo un ping a 127.0.0.1, risponde il PC su cui viene eseguito; l'interfaccia di loopback viene utilizzata di solito per testare programmi di rete).
Abbiamo collegato il PC alla rete locale tramite l'interfaccia eth0 e usciamo su internet, tramite modem, sull'interfaccia ppp0.
Il firewall proposto non fa altro che "aprire" le porte necessarie al collegamento internet e "chiudere" le rimanenti porte per le richieste che transitano via modem, e quindi sull'interfaccia ppp0. Per permettere la navigazione su internet a tutta la rete locale, nello script di firewall sono state anche aggiunte le istruzioni per attivare il forward delle informazioni e per "mascherare" gli ip delle reti locali, di modo che le pagine WEB richieste dai vari client possano essere soddisfatte. Infatti, dopo il collegamento a Internet via modem l'unico indirizzo che Internet riconosce è quello assegnato all'interfaccia ppp0 del PC che si connette (ossia, NATALIA). Gli altri indirizzi ip dei client, corrispondenti agli ip fissi assegnati, non vengono riconosciuti. Il metodo del "mascheramento" consiste nel:
a) ... cambiare l'indirizzo del pacchetto di informazioni di rete inviato da un PC client (che esegue una richiesta internet) nell'indirizzo ip assegnato all'interfaccia ppp0 del PC che si collega;
b) ... richiedere la pagina;
3) ... ricevere la pagina richiesta e reindirizzarla verso il PC chiamante.
In pratica, il PC NATALIA esegue tutto le richieste come se partissero da lui, e poi smista le risposte a chi ha effettivamente fatto la richiesta nella rete locale.

 
SITUAZIONE DI PARTENZA
1) PC Linux (RedHat 7 con kernel 2.2, o con la possibilità di esecuzione dell'istruzione ipchains) configurato con accesso a Internet tramite modem (nel nostro caso, il 200.200.15.1);
2) altri PC client Linux o Windows (nel nostro caso, il 200.200.15.2 e 200.200.15.3).

 
IN BREVE
1) PC Linux (200.200.15.1) si connette a Internet tramite modem;
2) su PC Linux (200.200.15.1) viene lanciato lo script di firewall-router che protegge la rete da intrusioni ed esegue il forwarding delle richieste e risposte tra internet e gli altri PC in rete;
3) gli altri PC (Linux o Windows) hanno come gateway predefinito il PC Linux (200.200.15.1) che si connette a Internet.

 
FASI
1) creazione/modifica dello script firewall;
2) configurazione del PC Linux per l'esecuzione dello script;
3) configurazione dei clients;
4) collegamento a Internet via modem.

 
FASE 1: CREAZIONE/MODIFICA DELLO SCRIPT FIREWALL
Abbiamo creato uno script (firewall) partendo da quello proposto da Antonio Fragola.
Il file si divide in tre parti:
a) configurazione dei parametri;
b) indicazione dei servizi da attivare/bloccare e dei relativi IP da utilizzare (ad esempio, l'indicazione dei server DNS per il collegamento Internet);
c) istruzioni che attivano o disattivano il firewall, da non modificare.

Vediamo le istruzioni in dettaglio per la parte a):

if [ $UID !=0 ]; then
  clear
echo -e "\aATTENZIONE: solo l'utente root puo' avviare il firewall!"
exit 1
fi
Le istruzioni controllano che il firewall sia attivato dall'utente root. Eliminare tali istruzioni se si vuole che chiunque possa eseguire lo script (ovviamente, dopo avergli assegnato i permessi necessari con l'istruzione chmod 0755 firewall).

IPCHAINS="/sbin/ipchains"
Questa variabile indica qual è il programma ipchains che verrà utilizzato per impostare le regole del firewall. Per vedere se tale programma è installato basta eseguire /sbin/ipchains -L. Tale istruzione permette di visualizzare le regole già attive. Se il risultato di questa istruzione è "command not found", allora è necessario installare ipchains.

INTERFACES=`/sbin/ifconfig | grep Link | cut -d \ -f 1`
Utilizzando una serie di funzioni, riempie la variabile INTERFACES con eth0, lo e ppp0. Il comando ifconfig visualizza quali sono le interfacce di rte attive. Se è attiva la connessione Internet via moded, deve essere presente l'interfaccia ppp0.

CURRENT_KERNEL=`uname -r`
Imposta la costante CURRENT_KERNEL con la versione del kernel Linux.

IP_MASQ_MODULES="ftp irc quake"
Indica quali sono i moduli aggiuntivi da attivare per il Masquerade. Tale costante sarà utilizzata in seguito dalle istruzioni che controllano che i moduli richiesti esistano e che li attiverà. Se alcuni moduli non sono necessari (ad esempio, se no si vuole utilizzare IRC), basta toglierli dalla definizione.

INTERFACE="ppp0"
Indica qual è il nome dell'interfaccia relativa alla connessione via modem. Se ci sono puo' modem utilizzati per i servizi di rete (ossia, se con l'istruzione ifconfig vengono indicati anche ppp1 ecc.), allora è necessario indicare il nome dell'interfaccia per il collegamento in Internet.

INTERFACEMASK="255.255.255.255" Indica la MASK (maschera)dell'interfaccia. In questo caso, avendo i quattro numeri a 255, significa che la rete di uscita è costituita esclusivamente dall'ip assegnato all'interfaccia ppp0.

INTERFACEIP=`/sbin/ifconfig $INTERFACE | grep inet | cut -d : -f 2 | cut -d \ -f 1`
Imposta INTERFACEIP con l'ip dell'interfaccia ppp0 assegnato dal provider Internet a cui ci si collega (di solito è un ip dinamico, e questa istruzione, insieme a tutto lo script di firewall, deve essere eseguita dopo che ci si è connessi a Internet; se invece si dispone di un ip statico, allora basta indicarlo senza utilizzare le funzioni ifconfig, grep, cut ecc.).

LOCALIP="$INTERFACEIP/$INTERFACEMASK" Imposta come LOCALIP l'insieme dell'ip assegnato dal provider piu' la MASK.

LOCALNET="200.200.15.0/24" Qui abbiamo adattato alla nostra retre l'indicazione di questo parametro. La nostra rete è identificata da 200.200.15.0, e dalla MASK 255.255.255.0. Il numero 24 è l'equivalente di 255.255.255.0. Infatti, indica il numero dei bit a 1 della maschera. Il numero 255 in bit è indicato come 11111111, quindi con otto 1. Essendoci tre volte 255, si ha 8x3, e quindi 24.

ANYWHERE="0.0.0.0/0"
LOOPBACK="127.0.0.0/8"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
Qui vengono impostati i valori indicanti i vari tipi di rete e l'indirizzo di loopback. Sono standard e quindi devono essere lasciati cosi'.

NFS_PORT="2049" # (TCP/UDP) NFS
SOCKS_PORT="1080" # (TCP) Socks
# X Windows alloca le porte a partire dalla 6000 e incrementa
# fino alla 6063 per ogni server addizionale in funzione.
XWINDOW_PORTS="6000:6063" # (TCP) X windows
# traceroute di solito usa -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
PRIVPORTS="0:1023"
UNPRIVPORTS="1024:65535"
# SSH incomincia dalla porta 1023 e va a scalare fino alla 513
SSH_PORTS="1022:1023"
Qui vengono impostati i valori indicanti i vari tipi di porte standard e quindi devono essere lasciati cosi'. Le porte sono dei numeri indicanti "passaggi" dedicati a specifici servizi di rete che viaggiano attraverso le interfacce di rete. Ad esempio, una richiesta di tipo HTML di default utilizza la porta 80.

RED="\\033[1;31m"
GREEN="\\033[0;32m"
WHITE="\\033[0;39m"
CYAN="\\033[0;36m"
BLUE="\\033[1;34m"
ORANGE="\\033[0;33m"
YELLOW="\\033[1;33m"
MAGENTA="\\033[1;35m"
Sono i codici di ESCAPE per impostare i colori relativi ai messaggi che lo script di firewall stampa a video.


Nella parte b) vengono indicati quali servizi attivare/bloccare e quali sono i relativi IP da utilizzare (ad esempio, l'indicazione dei server DNS per il collegamento Internet);
Il blocco dei servizi avviene attraverso la "chiusura" della porta a loro relativa, attraverso le istruzioni eseguite nella terza parte dello script. Ponendo a ON o a OFF le variabili indicate in questa fase, si possono attivareo bloccare le richieste relative.

MASQ="ON"
Attivazione/blocco del Masquerading (meccanismo di macheramento dell'ip del chimante con sostituzione dell'ip del PC collegato a Internet, necessario per attivare la possibilità dei client in rete di utilizzare la stessa connessione a Internet).

FTP="ON"
Apertura/blocco della porta relativa al servizio FTP.

DNS1="ON"
DNS2="ON"
Attivazione/disattivazione dei DNS 1 e 2 (ossia, apertura/blocco della porta 53 per messaggi arrivanti dai server DNS indicati di seguito).

HTTP="ON"
Apertura/blocco della porta 80 per la navigazioen Internet (richiamo e ricezione pagine WEB con protocollo HTTP).

SMTP="ON"
Apertura blocco invio di posta.

NNTP="ON"
Apertura/blocco lettura newsgroup.

POP3="ON"
Apertura/blocco ricezione di posta.

ICMP="ON"
Apertura/blocco traffico ICMP.

AUTH="ON"
Apertura/blocco servizio di richiesta identificazione.

IRC="OFF"
Apertura/blocco utilizzo di IRC (Internet Relay Chat).

ICQ="OFF"
Apertura/blocco utilizzo di ICQ.

SSH="ON"
Apertura/blocco Secure Shell.

NAP="OFF"
Apertura/blocco utilizzo di Napster.


Nella parte c) dello script vengono eseguite le istruzioni che attivano il firewall. In generale non devono esser modificate, se non per la parte relativa all'utilizzo dei DNS e dei POP3 se devono essere aggiunti nuovi server. Le operazioni svolte sono: controllo della presenza dei moduli necessari; attivazione dei moduli necessari (ad esempio, per il forward delle chiamate da parte dei client verso la rete internet); inserimento di nuove regole di attivazione/blocco porte con l'utilizzo di ipchains (vd. IPCHAINS-HOWTO).
Eseguendo l'istruzione "ipchains --help", il cui risultato è riportato qui, è possibile conoscere la sintassi del comando ipchains. Il significato di ipchains, risultato dell'istruzione "man ipchains", è riportato qui.


Il resto dello script di firewall puo' essere letto sempre nel file riportato qui.

 
FASE 2: CONFIGURAZIONE DEL PC LINUX PER L'ESECUZIONE DELLO SCRIPT
Lo script viene attivato eseguendolo con l'opzione start, mentre viene disattivato eseguendolo con l'opzione stop. Con l'opzione status si può visualizzare lo stato del firewall.
Lo script deve essere eseguito DOPO che ci si è connessi a Internet, in quanto l'ip della scheda ppp0 deve essere già stato assegnato dal provider Internet.
Una volta creato il file, bisogna metterlo in una directory in cui pou' essere eseguito, ed assegnargli i permessi di esecuzione. Avendo chiamato il file "firewall", occorre eseguire l'istruzione
chmod 0777 firewall
Noi lo abbiamo posto della directoy /usr/local/bin.
Per essere sicuri di eseguire il firewall nel momento in cui ci si collega a Internet, e di disattivarlo quando ci si sconnette, è necessario creare due file (se non presenti) nella directory /etc/ppp:
/etc/ppp/ip-up.local
/etc/ppp/ip-down.local

ip-up.local viene eseguito automaticamente nel momento in cui avviene la connessione a Internet; ip-down.local nel momento in cui ci si sconnette.
La maniera piu' veloce di creare tali file è quella di copiare un file già presente nel nuovo file, ad esempio con l'istruzione "cp ip-up ip-up.local" e "cp ip-down ip-down.local".
E' necessario poi modificare il file ip-up.local in modo che sia uguale al seguente:

#! /bin/bash

/urs/local/bin/firewall start

exit 0

e il file ip-down.local nell'analogo modo:

#! /bin/bash

/urs/local/bin/firewall stop

exit 0


 
FASE 3: CONFIGURAZIONE DEI CLIENTS
La configurazione del client si basa su due punti:
a) impostazione del gateway predefinito;
b) impostazione dei server di DNS;
c) impostazione del collegamento Internet.
Vediamo come si configurano Linux e Windows.

Supponiamo di configurare un PC Linux.
La configurazione dei punti a) e b) avviene mendiante l'esecuzione del programma
linuxconf
Noi lo abbiamo eseguito da GNOME, scegliendolo in programmi, Sistema.

Il punto a) viene eseguito scegliendo Rete, Client tasks, Routing and gateways, Set the default route.



Il punto b) viene eseguito sempre in linuxconf, scegliendo Rete, Client tasks, Name server specification (DNS).



Per quanto riguarda il punto c), supponendo di utilizzare Netscape, l'impostazione avviene selezionando nel menu' Edit (modifica), Preferences (preferenze) il sottomenu Advanced (avanzate) Proxies e selezionando "Direct connection to the Internet".






Supponiamo ora di configurare un PC Windows.
Il punto a) si ottiene immettendo nelle proprietà del TCP/IP l'indirizzo del gateway (nel nostro caso 200.200.15.1). Per far questo è necessario premere con il tasto destro del mouse sull'icona "Risorse di rete", scegliere proprietà, cliccare sul TCP/IP della scheda di rete, premere il bottone Proprietà, scegliere Gateway ed aggiungere 200.200.15.1.



Il punto b) si ottiene immettendo nelle proprietà del TCP/IP l'indirizzo dei server DNS, specifici del proprio collegamento Internet (ossia, quelli segnalati dal provider). Per far questo, sempre nelle proprietà del TCP, occorre selezionare Connessione DNS e aggiungere i server.



Per quanto riguarda il punto c), l'impostazione di Internet Explorer avviene specificando di utilizzare la rete LAN per il collegamento a Internet nelle proprietà di connessione.Per far questo, è necessario cliccare con il tasto destro sull'icona di Internet Explorer, scegliere Connessioni e scegliere "Non utilizzare mai la connessione di Accesso Remoto" (se non si è definita nessuna connesione di accesso remoto, tale opzione è già settata e non modificabile).



Come già descritto per Linux, l'impostazione di Netscape avviene selezionando nel menu' Edit (modifica), Preferences (preferenze) il sottomenu Advanced (avanzate) Proxies e selezionando "Direct connection to the Internet".





 
FASE 4: COLLEGAMENTO A INTERNET VIA MODEM
Il collegamento a Internet via modem dal PC Linux 200.200.15.1 avviene nei modi standard, ossia utilizzando i programmi forniti da Linux stesso e dai Desktop GNOME e KDE.
I programmi standard sono RH PPP Dialer per GNOME e Kppp per KDE.
In GNOME, per aggiungere una connessione di DialUp, selezionare Programmi, Rete, DialUp Configuration e seguire le istruzioni date (ricordarsi di accendere il modem!). Lanciando poi RH PPP Dialer è possibile connettersi a Internet.

In KDE, è necessario eseguire Internet, Kppp. Cliccando su configurazione, è possibile inserire una nuova configurazione di DialUp. Cliccando poi su Connetti è possibile connettersi a Internet.

Se si è configurato ip-up.local in modo che esegua automaticamente lo script del firewall, non è necessario fare altro e quindi si puo' navigare in Internet da ogni client configurato correttamente. Nel caso in cui il firewall non sia lanciato automaticamente, occorre lanciarlo con l'istruzione "/usr/local/bin/firewall start".
Per vedere se il firewall è in funzione, si puo' eseguire l'istruzione "/usr/local/bin/firewall status".

 
RIFERIMENTI
www.linux-firewall-tools.com/linux/firewall/index.html
pluto.psy.unipd.it/ildp/altri/Quick-Easy-Configuration-HOWTO-10.html
www.pluto.linux.it/ildp/HOWTO/IPCHAINS-HOWTO.html
www.linuxgazette.com/issue51/nielsen.html
 
 
 redazione@retelinux.com