Linux: Come configurare una rete

Il primo problema da risolvere è quello del riconoscimento dei nomi: come si sa il protocollo Ip riconosce le interfacce di rete attraverso dei numeri (gli indirizzi Ip) che per comodità mnemonica raggruppiamo in quattro "triplette" separate da punti (per esempio 192.168.168.1); noi però abbiamo difficoltà a memorizzare queste sequenze di numeri, per cui è stato escogitato un sistema che permette di associare a ciascun indirizzo Ip un nome, rendendo così la vita più facile a chi deve avere a che fare con più di una manciata di stazioni di lavoro. Questa comodità introduce un livello di complessità in più per l'amministratore di sistema, che deve fare in modo che tale corrispondenza sia sempre aggiornata e coerente in entrambi i sensi, permettendo cioè ai vari software non solo di risalire all'indirizzo Ip dato un nome, ma anche di risalire al nome partendo da un indirizzo Ip (alcuni chiamano questi passaggi Forward e Back conversion). Il modo più semplice per ovviare a questo problema è quello di usare un file, chiamato hosts, che nei sistemi Unix risiede nella directory /etc e nei sistemi Windows è posto nella directory di sistema (solitamente C:\Windows), nel quale vengono indicati, su ciascuna riga, rispettivamente l'indirizzo Ip e il nome della macchina, con eventuali relativi alias (collegamenti). Potremmo così avere righe del tipo:

127.0.0.1 localhost
192.168.168.1 dns.prova.com dns

Questo permetterà di sapere che all'indirizzo 192.168.168.2 corrisponde il nome "dns.prova.com", noto anche con il nome Dns. Il problema di questo metodo, sicuramente semplice da implementare, è quello di mantenere sempre aggiornata una copia del file hosts su ciascuna delle stazioni di lavoro, e questo compito diventa difficile, se non impossibile, nel momento in cui si ha un buon numero di stazioni in rete. Internet, ai suoi albori, già si basava su questo principio, ma a un certo punto il file che veniva distribuito arrivò a una dimensione tale che il sistema non poteva più funzionare. Si arrivò cosi a pensare a una soluzione che permettesse a ciascun amministratore di sistema di gestire i nomi all'interno della propria rete in perfetta autonomia, giungendo così a un database distribuito e gerarchico, basato su un principio di richieste successive: nel momento in cui un software deve sapere a quale Ip corrisponde il nome www.gnomix.org, questo chiede tale informazione al server Dns che è stato configurato dall'amministratore di rete. Tale server risponde direttamente con l'Ip (se possiede tale informazione) o perché è stato configurato per gestire il dominio gnomix.org o perché, avendo già effettuato la ricerca, possiede tale informazione nella propria cache, altrimenti suddivide il nome richiesto in base ai punti (ottenendo in questo caso le stringhe www, gnomix e org), e legge il risultato da destra a sinistra: comincia quindi a chiedere a particolari server (detti root server) a quale Dns rivolgersi per sapere chi gestisce il dominio di primo livello org (detto anche Tld: Top Level Domain). Contattaquindi tale Dns, che a sua volta "chiede" a quale server richiedere informazioni sul dominio di secondo livello gnomix.org, e infine contatta il server risultante per sapere a quale Ip corrisponde il nome www.gnomix.org. Una volta ottenuta l'informazione il server Dns la restituisce al software che l'ha richiesta. Configurare e gestire un Dns è un compito complesso, soprattutto se si tratta di un Dns direttamente referenziato su Internet, ma quello che si cercherà di ottenere qui è soltanto una piccola introduzione che permetta di gestire un dominio all'interno della propria rete, in modo da non dover manualmente sincronizzare i file hosts su ciascun computer. Il primo passo da compiere è l'installazione del software:normalmente ciascuna distribuzione Linux non solo contiene il programma necessario (Bind versione 8) ma durante l'installazione provvede di norma a una configurazione di base che andrà poi personalizzata. Il primo file da editare una volta terminata l'installazione è /etc/named.conf. In tale file si trovano tutte le direttive di configurazione del server stesso, oltre che la definizione delle zone (domini) per i quali il server dovrà essere configurato. Il blocco options contiene la definizione della directory di base, ossia una path che verrà preposta a tutti le altre path contenute nel file (così per esempio se si trova un riferimento a primary/prova.db il server cercherà il file prova.db nella directory /var/named/primary). In seguito vengono le definizioni delle zone, ossia dei domini per i quali il server viene configurato. La prima zona è particolare, in quanto contiene le definizioni dei root server, ossia i server dai quali cominciare a cercare nel caso la richiesta dei client non riguardi domini configurati direttamente nel Dns stesso. Il file db.root viene aggiornato di tanto in tanto e va prelevato con regolarità dai vari server che lo distribuiscono (per esempio ftp.internic.net/domain). Seguono poi le definizioni delle zone vere e proprie per le quali il server è configurato (zone master) e queste riguardano sia zone di Forward conversion (da nome a Ip) sia zone di Back conversion. Per queste, in particolare, viene usato un trucco che non si riesce ad approfondire in questa sede: basti sapere che, al fine di permettere anche su questi Ip una richiesta di tipo gerarchico, l'Ip stesso viene rovesciato e assegnato come sottodominio del dominio in-addr.arpa; perciò per sapere a quale nome corrisponde l'indirizzo 192.168.168.1 il Dns effettua in realtà una richiesta su 1.168.168.192.in-addr.arpa. Ciascuno dei file di configurazione referenziato in named.conf, poi, ha un formato particolare. Il file comincia con il record Soa (Start Of Authority) che prende come parametri il Dns primario, un indirizzo e-Mail nel formato convenzionale hostmaster.prova.com (da leggersi come hostmaster@prova.com) e una serie di parametri di cui quello che interessa particolarmente e il serial number. A seguito di una modifica nei dati del database, infatti, occorre anche incrementare tale numero, in quanto il Dns ricaricherà i dati se e solo tale numero (che si può pensare come un numero di versione) è maggiore di quello che il server ha in memoria. Viene poi indicato il record Ns – Name Server (possono essere anche più di uno, indicati però uno per riga), che corrisponde ai server Dns che gestiscono il dominio in questione e il record Mx – Mail eXchanger (possono essere più di uno), che corrispondono al o ai server che gestiscono l'e-Mail per il dominio in questione: ciascuno di tali record ha anche un numero associato che rappresenta la preference, ossia l'ordine (a partire dal più basso) in cui vanno contattati i server per spedire l'e-Mail. E' da notare che se si usa un nome comprensivo di dominio occorre aggiungere un punto alla fine, in quanto altrimenti il Dns provvede automaticamente ad aggiungere il nome del dominio (per cui, dato che tale file corrisponde al dominio prova.com il record Ns se non ci fosse il punto diventerebbe "dns.prova.com. prova.com"). Cominciano poi i record di associazione vera e propria tra host e indirizzo Ip, che possono avere o la seguente forma nome -> indirizzo (record A) oppure nome -> altro nome che deve esistere e corrispondere a un record A (record Cname, una sorta di alias).I record A e Cname associano nomi a indirizzi Ip, mentre per effettuare la corrispondenza inversa si usano i record Ptr nei file appositi. I file di Back conversion hanno lo stesso formato di Soa e Ns, ma non vengono definiti record Mx e le righe del database hanno il formato (notare il punto alla fine):

1
IN
PTR
dns.prova.com.

16
IN
PTR
notebook.prova.com.

31
IN
PTR
pc1.prova.com.

32
IN
PTR
pc2.prova.com.

Una volta terminata la configurazione del Dns è possibile fare partire il processo. Il comando da usare è ndc, i cui più importanti argomenti sono:

-start: per fare partire il server;
-stop: per fermarlo;
-reload: per fargli rileggere le configurazioni senza fermarlo;
-restart: per fermarlo e farlo ripartire

Una volta fatto partire il processo è possibile controllare il funzionamento del server Dns attraverso programmi di controllo come nslookup o host; se tutto funzionerà si avrà un output di questo tipo:

$ host dns.prova.com 192.168.168.1
dns.prova.com is 192.168.168.1

Si potrà quindi aggiornare il file /etc/resolv.conf e le opzioni "nameserver" del Dhcp in modo da farli puntare al nuovo nameserver appena configurato. In caso di errori, invece, il primo punto da cui partire sono i file di log (normalmente /var/adm/messages), nei quali il processo named avrà scritto i problemi incontrati all'avvio. In caso di variazioni dei file (aggiunte, modifiche, cancellazioni) occorrerà ricordarsi di incrementare il serial number ed effettuare un "ndc reload". Dopo aver configurato gli indirizzi Ip di tutta la rete, permesso a ciascuna stazione di lavoro di condividere l'accesso a Internet e aver fatto in modo che ciascun client possa conoscere la corrispondenza tra nomi e indirizzi Ip, si può finalmente cominciare a creare dei servizi più tangibili e di utilità immediata. La condivisione di dischi e stampanti è uno dei servizi più popolari e non è patrimonio esclusivo di casa Microsoft: Windows, nelle sue varie famiglie (da 3.1 fino a Nt), utilizza per condividere risorse un protocollo noto come Smb e di tale protocollo esiste una implementazione free (Samba) che negli anni ha avuto sempre maggiore successo, al punto da essere considerata, insieme a Linux stesso e ad Apache, uno dei più seri candidati a compromettere l'egemonia Microsoft. Questa suite di programmi, se opportunamente configurata, permette di prendere il posto in tutto e per tutto di un server Nt quanto a condivisione risorse, servizi di Primary e Backup Domain Controller (Pdc/Bdc), logon script e quant'altro. Samba è fornito con tutte le distribuzioni, ma in ogni caso l'Url di riferimento è www.samba.org. Una volta installato occorre reperire la posizione del file smb.conf (tipicamente sotto /etc o sotto /usr/local/samba/lib), che è l'unico file di configurazione di tutto il sistema. La sintassi è abbastanza chiara: le righe che cominciano con ";" o "#" sono dei commenti e il file stesso è diviso in sezioni, contrassegnate dal nome dela sezione stessa posto tra parentesi quadre ([NomeSezione]). E' quindi il momento buono per armarsi del proprio editor preferito e iniziare a configurare il servizio, anche se potrebbe valere la pena di perdere ancora qualche minuto per leggere la documentazione (man smb.conf). La configurazione tipica prevede solitamente la presenza di una sezione generale ([Global]) nella quale vengono definiti dei parametri relativi all'interno processo server. La personalizzazione comincia scegliendo un nome per il proprio gruppo di lavoro: il nome utilizzato di default nelle installazioni di Windows e Workgroup, per cui occorre ricordarsi, se si decide di non mantenerlo, di cambiare questo dato anche su tutti i client connessi. Va poi scelta una politica di sicurezza: per iniziare può andare bene settare il parametro "security" come user, questo permetterà a tutti gli utenti definiti in /etc/passwd di utilizzare le risorse condivise semplicemente inserendo la loro password al login di Windows. Altri parametri da impostare possono essere local master (valore yes), oslevel (valore 33) e domain master (ancora yes). Conviene inoltre inserire il parametro interfaces=192.168.168.1 (indirizzo Ip della scheda di rete). Questo comando serve per fare in modo che Samba offra i propri servizi solo a chi proviene dalla rete locale, evitando quindi che malintenzionati possano "sfogliare la rete" direttamente da Internet (tecnicamente si dice che il daemon in questione fa il binding sulla scheda Ethernet). Si passa poi all'altra sezione speciale: la sezione [Homes] permette a ciascun utente di vedere la propria home directory direttamente da Windows, per cui sarà disponibile sia tramite "sfoglia la rete" sia tramite lo strumento "Connetti unità di rete" del file manager di Windows (accessibile anche con un clic destro del mouse su Risorse del computer). Va tenuto conto che nella terminologia di Windows un servizio (disco o stampante) condiviso viene indicato con il formato \\NOMEHOST\NOMESERVIZIO, per cui l'utente "test" del sistema Linux "www" potrà accedere alla sua home directory da Windows richiedendo la connessione a \\WWW\TEST. L'ultima sezione speciale è relativa alle stampanti: la sezione [Printers] permette di condividere le stampanti definite sul sistema (nel file /etc/printcap), per cui sarà possibile avere una stampante collegata alla porta Lpt del server Linux e utilizzarla da tutta la rete. Di qui in poi l'amministratore di sistema ha ampio spazio per creare nuove risorse condivise: se per esempio si volesse fare in modo che alla directory /tmp si possa accedere da tutti i client, in modo da permettere lo scambio di file senza passare per le home directory, occorrerà creare una sezione ad hoc, scegliendo un nome da inserire tra parentesi quadre (per esempio [tmp]) e facendo seguire gli opportuni parametri di configurazione (senza scordare di fare ripartire il servizio dopo ogni cambiamento). Ciascuna di queste sezioni possiede dei parametri ben precisi che servono a limitare l'accesso sia a livello utente (parametri come allow/deny users, valid users, force user) sia a livello di sistema (sola lettura, sola scrittura o entrambi: writable, read only, guest ok). Occorre comunque avere un minimo di padronanza della sintassi del file di configurazione prima di cambiare i valori di default. Un'ultima nota: nelle ultime versioni di Samba è presente un tool di amministrazione tramite Web, chiamato Swat (Samba Web Administratrion Tool). Se presente, è solitamente raggiungibile puntando un browser alla porta 901 del proprio server, ossia utilizzando un indirizzo Internet del tipo http://nome del server:901. Attraverso questa interfaccia è possibile impostare tutti i parametri del proprio server in maniera intuitiva, per cui se si preferisce il mouse alla tastiera, questo è il modo più efficace per riuscire a condividere le risorse.