Linux: Costruirsi una rete
Dalla piccola rete casalinga alle grandi reti
aziendali, dal piccolo ufficio ai cluster di computer per il
calcolo parallelo Linux ha dimostrato in questi anni tutta la
sua potenza e versatilità quando si tratta di reti. Linux
possiede tutte le caratteristiche per svolgere al meglio il
compito di server di rete in qualunque ambiente, a patto che
venga utilizzato l'hardware opportuno (che può andare da un
486 di recupero a un server multiprocessore a seconda delle
esigenze). Ovviamente la configurazione e la gestione di un
server sono compiti che necessitano di una certa pratica e
della conoscenza dei concetti base relativi alle reti, ma non
per questo si deve pensare che gestire una rete basata su
Linux sia molto più complicato rispetto all'analogo compito
di Nt. Anzi, è proprio nel gestire problematiche complesse
come le reti che la forza dei sistemi Unix viene fuori, grazie
per esempio alla poderosa mole di strumenti di debugging che
questi forniscono rispetto a Nt. In questo spazio si
cercherà di fornire i primi strumenti per costruire da zero
una rete il cui server principale, basato su Linux, permetta
di gestire l'assegnazione dinamica degli Ip ai suoi client, di
condividere l'accesso a Internet proteggendo nello stesso
tempo con tecniche di firewalling i client all'interno, di
utilizzare risorse condivise come dischi e stampanti e di
accedere remotamente al server stesso tramite Internet o
tramite telefono. Il primo passo perdi segnare una rete
efficiente non si compie al computer ma alla scrivania, con
carta e penna. È qui che si decide quello che dovrà essere
il layout della rete, quali dovranno essere gli indirizzi Ip
utilizzati, quali servizi dovranno essere offerti e quali
dovranno essere le politiche di accesso agli stessi. La fase
della pianificazione non va assolutamente presa sottogamba, in
quanto una volta che la rete sarà operativa e utilizzata a
pieno ritmo diventerà sempre più difficile rimediare agli
eventuali errori. Per quanto riguarda gli indirizzi Ip non c'è
che l'imbarazzo della scelta. Esiste un documento ufficiale (kfc
1597) che precisa gli intervalli di indirizzi che sono
utilizzabili all'interno di reti non collegate a Internet.
Questi intervalli sono stati appositamente riservati per
l'utilizzo all'interno di reti sconnesse e garantiscono di non
interferire in alcun modo con la funzionalità di Internet, e
sono:
|
da 10.0.0.0 a 10.255.255.255
da 172.16.0.0 a 172.31.255.255
da 192.168.0.0 a 192.168.255.255
|
La scelta di una o dell'altra serie di
indirizzamenti è lasciata totalmente agli amministratori di
rete. Per convenzione, se si ritiene che non occorreranno più
di 254 Ip, conviene utilizzare indirizzi della serie
192.168.x.x, e il nostro suggerimento è quello di non
scegliere l'abusata "classe C" 192.168.0.x, in modo
da non crearsi inutili problemi nel caso occorra
interconnettersi con altre reti che verosimilmente avranno
scelto questo spazio di indirizzamento. Una buona scelta
potrebbe essere quella della classe 192.168.168.x, con x che
va da 0 a 255. Occorre tenere presente, poi, che il
primo e l'ultimo numero della spazio prescelto non possono
essere usati in quanto rappresentano il primo l'intera rete e
il secondo l'indirizzo di broadcast. Per convenzione, in fine,
si sceglie il primo o l'ultimo numero utile (in questo caso
l'1 o il 254) come gateway. In questo caso il server Linux
servirà per condividere l'accesso a Internet, per cui sarà a
tutti gli effetti un gateway. I dati di rete del server
saranno quindi:
|
Indirizzo Ip: 192.168.168.1
Netmask: 255.255.255.0
Network: 192.168.168.0
Broadcast: 192.168.168.255
Nessun default gateway installato
|
Per quanto riguarda il resto della rete può
essere il caso di dividerla in più zone logiche, per esempio
riservando una fascia di Ip per esistenti e futuri server,
un'ulteriore fascia per client con Ip fisso (tipicamente
client di amministrazione, in modo da poter restringere
l'accesso al server solo per quegli Ip), una fascia per client
con indirizzo Ip dinamico e infine una fascia per client
remoti che si collegano via modem. In questo caso, quindi, si
potrebbe avere una suddivisione di questo tipo:
|
da 192.168.168.1 a 192.168.168.15:
SERVER
da 192.168.168.16 a 192.168.168.30:
CLIENT CON IP FISSO
da 192.168.168.31 a 192.168.168.230:
CLIENT CON IP DINAMICO
da 192.168.168.231 a
192.168.168.254: CLIENT REMOTI
|
Il server Linux con Ip 192.168.168.1 sarà il
cuore della rete e provvederà a fornire gli indirizzi Ip ai
client con Ip dinamico, condividerà dischi e stampanti e
permetterà l'accesso a Internet, oltre ad accettare chiamate
su modem collegato alla sua porta seriale. Ovviamente una
pianificazione così dettagliata è ampiamente al di sopra
delle necessità di chi deve costruire una semplice rete
casalinga di due o tre pc, ma sapere esattamente cosa si sta
facendo è utile in qualunque ambiente, per cui può comunque
essere un buon esercizio per chi ha ambizioni di
amministrazione di sistema prepararsi un picco lo schema di
lavoro anche per le esigenze più semplici. Una volta
terminata la fase di pianificazione occorre procurarsi il
software necessario. Si deve installare e configurare:
dhcpd: un daemon dell'Internet Software
Consortium (www.isc.org)
che permette di configurare automaticamente e centralmente
sui client il protocollo Tcp/Ip. L'Rpm di questo pacchetto si
trova su rufus.w3.org/linux/RPM/contrib/libc6/i386/dhcpd-2.0b1p10-1.i386.html;
ipchains: software che permette di manipolare le
funzionalità di firewall di Linux. E' fornito con tutte le
distribuzioni, ma in caso di bisogno si può trovare l'Rpm su rufus.w3.org/linux/RPM/redhat/6.1/i386/ipchains-1.3.9-3.i386.html
Una volta terminata l'installazione del
software necessario si può iniziare con la configurazione del
sistema. Il primo passo è quello di configurare la scheda di
rete: questo potrà comportare dopo l'installazione
dell'hardware un'opportuna ricompilazione del kernel e in modo
da includere il supporto per la propria scheda di rete, oltre
che per il Network firewall e l'Ip firewalling, che serviranno
in seguito per abilitare la condivisione del l'accesso a
Internet (nel caso si utilizzi ancora un kernel della serie
2.0.x occorre abilitare anche il supporto per i driver
sperimentali, l'Ip forwarding e il supporto per Ip chains.
Qualora non si sia ancora in possesso di una scheda di rete è
più che consigliabile consultare l'Hardware-HowTo (per
esempio su www.linuxdoc.org)
per verificare quale modello scegliere tra quelli compatibili
con linux. Una volta effettuato il boot della macchina con il
nuovo kernel e verificato che la scheda di rete viene
correttamente visualizzata (per esempio con il comando
dmesg|grep eth) si può configurare alla combinazione della
stessa. Il metodo per configurare la rete varia a seconda
della distribuzione prescelta: per esempio si può utilizzare
Linuxconf su sistemi RedHat o derivati ovvero inserire i
parametri di rete nello script /etc/init.d/network su sistemi
Debian. Sarà sufficiente lanciare questo script o chiedere a
Linuxconf di attivare le modifiche per avere la scheda di rete
configurata correttamente, mentre per verificare la
funzionalità del tutto basta digitare i comandi ifconfig -a e
netstat -rn. Per verificare che la rete funzioni correttamente
si potrà provare a configurare uno dei client con dati
coerenti alla rete, utilizzando per esempio il range
precedentemente attribuito alle stazioni con Ip fisso (per
esempio Ip 192.168.168.16 e netmask 255.255.255.0). A questo
punto sarà possibile controllare per esempio con un ping
(dalla finestra del Dos se si usa Windows 95/98/Nt) verso il
192.168.168.1 la regolare operatività del server e della rete
appena configurata. E' ora il momento di installare il
server Dhcp, che permetterà di configurare automaticamente e
centralmente le assegnazioni di indirizzi ai singoli client.
Il meccanismo alla base del Dhcp è semplice: ogni stazione
collegata a una rete Ethernet viene riconosciuta grazie
all'indirizzo hardware della scheda, chiamato Mac Address.
Questo indirizzo viene settato in fabbrica. ed è costituito
da una parte che identifica il fabbricante e da un numero
progressivo. Il fabbricante è responsabile dell'unicità del
Mac Address di ciascuna scheda. in modo che, di fatto, ogni
stazione sulla rete abbia una sua impronta digitale che la
renda unica e riconoscibile. Per verificare quale sia il Mac
Address della scheda sotto Linux è possibile utilizzare il
comando ifconfig -a. mentre sotto Windows si può usare
Winipcfg.Exe. Durante la fase di boot il sistema operativo
invia sulla rete (tramite un broadcast) una richiesta di
configurazione fornendo il proprio Mac Address. A tale
richiesta risponde il server Dhcp, che fornisce alla stazione
richiedente i parametri essenziali per configurarsi, quali
indirizzo Ip, netmask, broadcast, Dns, gateway, eventuale
server Wins. Per fornire tali dati, il server Dhcp può
basarsi o su un pool di indirizzi dai quali prelevare il primo
libero o sul Mac Address fornito dalla scheda. In questo modo
è possibile grazie a questo indi rizzo prevedere
configurazioni personalizzate in base alla singola macchina
(con l'accortezza di aggiornare tali configurazioni in caso di
cambio della scheda di rete). Il file di configurazione
(normalmente /etc/dhcpd.conf) è un normale file di testo.
Nella sua versione di base, applicato agli indirizzi che
abbiano riportato sopra, è sufficiente specificare:
|
subnet 192.168.168.0 netmask
255.255.255.0 {
range 192.168.168.31
192.168.168.230;
default-lease-time 86400;
max-lease-time 259200;
option subnet-mask 255.255.255.0;
option broadcast-address
192.168.1168.255;
option routers 192.166.168.1;
option domain-name-servers
192.168.168.1;
option domain-name "provagnomix.com";
}
|
In questo modo si dice al server Dhcp che per
la rete da 192.168.168.0 a 192.168.168.255 esiste un range di
lp che va dal 192.168.168.3l al 192.168.168.230 da assegnare a
chi ne facesse richiesta. Tali assegnazioni hanno una
scadenza. ossia vanno rinnovate dal client ogni 86.400 secondi
(default lease-time), e in ogni caso una macchina non può
avere lo stesso indirizzo lp per più di 259.200 secondi
consecutivi (max-lease-time). Insieme all' indirizzo lp
vengono fornite alla stazione richiedente anche alcune
informazioni opzionali: la net mask (option subnet-mask), il
broadcast (option broadcast-address), il default gateway (option
routers), il Dns (option domain-name-servers) e il nome a
dominio delle macchine (option domain name). In una
configurazione più avanzata si potrebbero aggiungere le
linee:
|
host notebook {
hardware ethernet 00:00:B4:58:B5:D2;
fixed-address 192.168.168.16;
option host-name
"notebook";
}
|
Questo permetterà a una stazione ben precisa.
individuata dalla sua scheda di rete, di assumere sempre e
comunque lo stesso indirizzo lp, ossia 192.168.168.16. Una
volta terminata la configurazione occorrerà far partire il
processo dhcpd dal prompt (come root, ovviamente) e
selezionare "Ottieni automaticamente un indirizzo Ip"
da una stazione Windows in rete. Se tutto funziona
regolarmente al riavvio di quest'ultima si potrà verificare
con Winipcfg.exe che il client abbia ottenuto un indirizzo di
rete valido dal server Dhcp. Una prima applicazione pratica può
essere quella della condivisione dell'accesso a Internet. Il
meccanismo che viene utilizzato è quello del cosiddetto
masquerading: ogni client interno utilizza il server Linux
come gateway verso Internet. La configurazione del
masquerading con ipchains è molto semplice: una volta che si
è compilato il kernel con i necessari supporti, sarà
sufficiente lanciare i seguenti comandi come root per vedere
le proprie stazioni sulla rete in grado di navigare su
Internet senza problemi, una volta che il server è connesso:
|
# ipchains -P forward DENY
# ipchains -A forward -i ppp+ -j
MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward
|
Per poter utilizzare applicativi particolari
dalle singole stazioni, può essere il caso di caricare dei
moduli aggiuntivi in questo modo:
|
# modprobe ip_masq_autofw.o
# modprobe ip_masq_portfw.o
# modprobe ip_masq_mfw.o
# modprobe ip_masq_user.o
# modprobe ip_masq_ftp.o
# modprobe ip_masq_irc.o
# modprobe ip_masq_raudio.o
# modprobe ip_masq_quake.o
# modprobe ip_masq_vdolive.o
# modprobe ip_masq_cuseeme.o
|
Attenzione: questa semplice impostazione permette di fare
utilizzare Internet alle proprie postazioni interne e nel
frattempo le protegge in qualche modo da attacchi provenienti
dall' esterno, ma lascia totalmente sguarnito il server
stesso. Per ottenere un buon livello di protezione occorre
inserire altri comandi che rifiutino qualunque connessione
proveniente dall'esterno e diretta verso il server stesso. Un
buon punto di partenza si può trovare su www.abc.se/~m10813/fi1es/firewall.txt.
Si tratta di uno script di shell che è possibile lanciare
direttamente al boot e che, opportunamente personalizzato, si
prende cura della stragrande maggioranza delle esigenze di
sicurezza e rnasquerading necessarie per un accesso sicuro a
Internet. Ovviamente le possibilità di Linux in rete non
finiscono qui...