· i siti principali di distribuzione di appunti di informatica libera sono i seguenti (senza...

280
Appunti di informatica libera Tomo VI Introduzione alle reti e ai servizi standard 1059

Upload: others

Post on 09-Oct-2020

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Appunti di informatica libera Tomo VI

Introduzione alle reti e ai servizistandard

1059

Page 2:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Appunti Linux

Copyright © 1997-2000 Daniele Giacomini

Appunti di informatica libera

Copyright © 2000-2001 Daniele Giacomini

Via Turati, 15 – I-31100 Treviso – daniele @ swlibero.org

This information is free; you can redistribute it and/or modify it under the terms of the GNUGeneral Public License as published by the Free Software Foundation; either version 2 of theLicense, or (at your option) any later version.

This work is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULARPURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this work; if not,write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Una copia della licenza GNU General Public License, versione 2, si trova nell’appendice H.

1060

Page 3:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contarealtre riproduzioni speculari disponibili che non vengono più annotate).

Internet

• consultazione: �http://a2.swlibero.org/�

prelievo: �ftp://a2.swlibero.org/a2/� e �

http://a2.swlibero.org/ftp/�Michele Dalla Silvestra, mds @ swlibero.org

• consultazione: �http://appuntilinux.torino.linux.it/ �

prelievo: �ftp://ftp.torino.linux.it/pub/appunti-linux/ �

Carlo Perassi, carlo @ linux.it

• consultazione: �http://fender.ing.uniud.it/linux/AppuntiLinux/�

prelievo:�

ftp://fender.ing.uniud.it/pub/linux/AppuntiLinux/�David Pisa, david @ iglu.cc.uniud.it

• consultazione: �http://filibusta.crema.unimi.it/linux/a2/HTML/�

prelievo:�

http://filibusta.crema.unimi.it/linux/a2/�Gaetano Paolone, bigpaul @ flashnet.itFabrizio Zeno Cornelli, zeno @ filibusta.crema.unimi.it

• consultazione:�

http://www.appuntilinux.prosa.it/ � ,�

http://www.a2.prosa.it/ �prelievo:

�ftp://ftp.appuntilinux.prosa.it/pub/AppuntiLinux/ � ,

�ftp://ftp.a2.prosa.it/pub/AppuntiLinux/

�Davide Barbieri, Prosa, paci @ prosa.it

• consultazione:�

http://www.allnet.it/AppuntiLinux/�prelievo:

�ftp://ftp.allnet.it/pub/AppuntiLinux/�

Fabrizio Giammatteo, Allnet srl, webmaster @ allnet.it

• consultazione:�

http://www.pctime.it/servizi/appunti-linux/�prelievo:

�ftp://ftp.pctime.it/appunti-linux/ � e

�http://www.pctime.it/servizi/appunti-linux/a2-

prelievo/ �Franco Lazzero, PCTIME, pctime @ pctime.net

• consultazione: �http://www.informasiti.com/Appunti/HTML/ �

prelievo:�

http://www.informasiti.com/Appunti/�Claudio Neri, Sincro Consulting, neri.c @ sincroconsulting.com

CD-ROM allegati a riviste

Alcune riviste di informatica pubblicano periodicamente Appunti di informatica liberain uno dei CD-ROM allegati. Di seguito sono elencate alcune di queste riviste, assiemeall’indicazione della persona che cura l’inserimento di Appunti di informatica libera.

• inter-punto-net �http://www.interpuntonet.it �

Michele Dalla Silvestra, mds @ swlibero.org

• Internet News�

http://inews.tecnet.it �Francesco Facconi, francescofacconi @ libero.itFabio Ferrazzo, fabio.fr @ tiscalinet.it

• Linux Magazine�

http://www.gol.it/linux/�Emmanuele Somma, esomma @ ieee.org

Distribuzioni GNU

• GNU/Linux Debian �http://packages.debian.org/unstable/doc/appunti-informatica-libera.html �

�http://packages.debian.org/stable/doc/appunti-informatica-libera.html �

Massimo Dal Zotto dz @ cs.unitn.it

1061

Page 4:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

La diffusione in qualunque forma di questa opera è consentita e incoraggiata. Chiunque, se lodesidera, può attivare un sito speculare, cioè un mirror, accordandosi con l’amministratore delsito dal quale decide di attingere i dati. Tuttavia si richiede che la riproduzione sia completa,in modo da fornire agli utenti tutto il materiale a disposizione per lo scarico. Attenzione: per lariproduzione completa possono essere necessari fino a 500 Mibyte.

1062

Page 5:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Parte xxi Nozioni elementari sulle reti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065

94 Introduzione alle reti e al TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068

95 Hardware di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086

96 Definizione dei protocolli e dei servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093

97 IPv4: configurazione, instradamento e verifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098

98 Introduzione a IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125

99 Esperimenti con IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133

100 Indirizzi e nomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1138

101 DNS: introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142

102 DNS: dettagli ulteriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1156

Parte xxii Servizi di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177

103 Organizzazione e controllo dei servizi di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181

104 RPC: Remote Procedure Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188

105 NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191

106 Accesso remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196

107 Informazioni sugli utenti della rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201

108 Messaggi sul terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204

109 TELNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209

110 FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214

111 Trivial FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232

112 Messaggi di posta elettronica e protocollo SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234

113 Messaggi giunti presso recapiti remoti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253

114 Messaggi, allegati ed estensioni MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1261

115 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273

116 NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288

117 DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307

118 NTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315

119 IRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321

120 ICQ: «I-seek-you» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333

1063

Page 6:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1064

Page 7:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Parte xxi

Nozioni elementari sulle reti

1065

Page 8:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

94 Introduzione alle reti e al TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068

94.1 Concetti elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068

94.2 Modello OSI/ISO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069

94.3 Interconnessione tra le reti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070

94.4 TCP/IP e il modello OSI/ISO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073

94.5 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076

94.6 Indirizzi IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076

94.7 Nomi di dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081

94.8 Kernel Linux, configurazione per la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084

94.9 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084

95 Hardware di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086

95.1 Nomi di interfaccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086

95.2 Ethernet – IEEE 802.3/ISO 8802.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086

95.3 IEEE 802.3: ripetitori, switch e limiti di una rete . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088

95.4 PLIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091

95.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092

96 Definizione dei protocolli e dei servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093

96.1 Protocolli di trasporto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093

96.2 Servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094

97 IPv4: configurazione, instradamento e verifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098

97.1 Configurazione delle interfacce di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098

97.2 Indirizzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101

97.3 Instradamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104

97.4 Verifica di un instradamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107

97.5 Instradamento attraverso un’interfaccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109

97.6 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112

97.7 Instradamento attraverso un router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114

97.8 Instradamento predefinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115

97.9 Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116

97.10 Verifica di un instradamento attraverso i router . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120

97.11 Alias IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121

97.12 Inoltro IP attraverso il NAT/PAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122

98 Introduzione a IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125

98.1 Rappresentazione simbolica di un indirizzo IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125

98.2 Prefissi di indirizzo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125

98.3 Tipi di indirizzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126

98.4 Allocazione dello spazio di indirizzamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126

98.5 Indirizzi unicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126

98.6 Indirizzi multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131

1066

Page 9:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

98.7 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132

99 Esperimenti con IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133

99.1 Preparazione dei file di configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133

99.2 Attivazione di IPv6 e definizione degli indirizzi link-local . . . . . . . . . . . . . . . . . . 1133

99.3 Definizione degli indirizzi site-local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135

99.4 Instradamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135

99.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137

100 Indirizzi e nomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1138

100.1 Configurazione del tipo di conversione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1138

100.2 File per la conversione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139

101 DNS: introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142

101.1 Descrizione di un esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1142

101.2 Strumenti e configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148

102 DNS: dettagli ulteriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1156

102.1 Verifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1156

102.2 File di configurazione più in dettaglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165

102.3 Serventi DNS secondari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172

102.4 Servente DNS di inoltro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173

102.5 Particolarità per IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173

102.6 Considerazioni finali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175

102.7 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175

1067

Page 10:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 94Introduzione alle reti e al TCP/IPLa funzionalità più importante di un sistema Unix è la possibilità di comunicare attraverso la rete.Prima di iniziare a vedere le particolarità delle reti TCP/IP, tipiche degli ambienti Unix, convieneintrodurre alcuni concetti generali.

94.1 Concetti elementariIl termine rete si riferisce idealmente a una maglia di collegamenti. In pratica indica un insieme dicomponenti collegati tra loro in qualche modo a formare un sistema. Questo concetto si riferiscealla teoria dei grafi.

Ogni nodo di questa rete corrisponde generalmente a un elaboratore, che spesso viene definitohost (elaboratore host), o anche stazione; i collegamenti tra questi nodi consentono il passaggiodi dati in forma di pacchetti.

94.1.1 EstensioneUna rete può essere più o meno estesa; in tal senso si usano degli acronimi standard:

• LAN, Local Area Network, rete locale

quando la rete è contenuta nell’ambito di un edificio, o di un piccolo gruppo di edificiadiacenti;

• MAN, Metropolitan Area Network, rete metropolitana

quando la rete è composta dall’unione di più LAN nell’ambito della stessa areametropolitana, in altri termini si tratta di una rete estesa sul territorio di una città;

• WAN, Wide Area Network, rete geografica

quando la rete è composta dall’unione di più MAN ed eventualmente anche di LAN,estendendosi geograficamente oltre l’ambito di una città singola.

Evidentemente, Internet è una rete WAN.

94.1.2 TopologiaLe strutture fondamentali delle reti (si parla in questo caso di topologia di rete) sono di tre tipi:

• stella;

• anello;

• bus.

Si ha una rete a stella quando tutti i nodi periferici sono connessi a un nodo principale in modoindipendente dagli altri. Così, tutte le comunicazioni passano per il nodo centrale e in praticasono gestite completamente da questo. Rientra in questa categoria il collegamento punto-punto,o point-to-point, in cui sono collegati solo due nodi.

Si ha una rete ad anello quando tutti i nodi sono connessi tra loro in sequenza, in modo da formareun anello ideale, e ognuno ha un contatto diretto solo con il precedente e il successivo. In questomodo, la comunicazione avviene (almeno in teoria) a senso unico e ogni nodo ritrasmette alsuccessivo i dati che non sono destinati allo stesso.

Si ha una rete a bus quando la connessione dei nodi è condivisa da tutti, per cui i dati trasmessida un nodo sono intercettabili da tutti gli altri. In questa situazione la trasmissione simultanea daparte di due nodi genera un collisione e la perdita del messaggio trasmesso.

1068

Page 11:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1069

94.1.3 PacchettoI dati viaggiano nella rete in forma di pacchetti. Il termine è appropriato perché si tratta di unasorta di confezionamento delle informazioni attraverso cui si definisce il mittente e il destinatariodei dati trasmessi.

Il confezionamento e le dimensioni dei pacchetti dipendono dal tipo di rete fisica utilizzata.

I dati sono un materiale duttile che può essere suddiviso e aggregato in vari modi. Ciò significache, durante il loro tragitto, i dati possono essere scomposti e ricomposti più volte e in modidifferenti. Per esempio, per attraversare un segmento di una rete particolare, potrebbe esserenecessario suddividere dei pacchetti troppo grandi in pacchetti più piccoli, oppure potrebbe essereutile il contrario.

In particolare, si parla di incapsulamento quando i pacchetti vengono inseriti all’interno di altripacchetti; inoltre si parla di tunnel quando questa tecnica viene usata in modo sistematico tra duepunti.

A questo punto, dovrebbe essere evidente che il significato del termine pacchetto può avere valoresolo in riferimento a un contesto preciso. Sui documenti che trattano delle reti in modo piùapprofondito, si parla anche di trama e di PDU (Protocol Data Unit), ma in generale, se nonc’è la necessità di distinguere sfumature particolari di questo problema, è meglio evitare di usaretermini che potrebbero creare confusione.

Il termine datagramma, rappresenta il pacchetto di un protocollo non connesso; per questo nonva inteso come sinonimo di pacchetto in senso generale.

94.1.4 ProtocolloI pacchetti di dati vengono trasmessi e ricevuti in base a delle regole definite da un protocollo dicomunicazione.

A qualunque livello della nostra esistenza è necessario un protocollo per comunicare: in uncolloquio tra due persone, chi parla invia un messaggio all’altra che, per riceverlo, deve ascoltare.Volendo proseguire con questo esempio, si può anche considerare il problema dell’inizio edella conclusione della comunicazione: la persona con cui si vuole comunicare oralmente deveessere raggiunta e si deve ottenere la sua attenzione, per esempio con un saluto; alla fine dellacomunicazione occorre un modo per definire che il contatto è terminato, con una qualche formadi commiato.

Quanto appena visto è solo una delle tante situazioni possibili. Si può immaginare cosa accada inun’assemblea o in una classe durante una lezione.

La distinzione più importante tra i protocolli è quella che li divide in connessi e non connessi. Ilprotocollo non connesso, o datagramma, funziona in modo simile all’invio di una cartolina, o diuna lettera, che contiene l’indicazione del destinatario ma non il mittente. In tal caso, il protocollonon fornisce il mezzo per determinare se il messaggio è giunto o meno a destinazione. Il protocolloconnesso prevede la conferma dell’invio di un messaggio, la ritrasmissione in caso di errore e laricomposizione dell’ordine dei pacchetti.

94.2 Modello OSI/ISOLa gestione della comunicazione in una rete è un problema complesso; in passato, questo è statoalla base delle maggiori incompatibilità tra i vari sistemi, a cominciare dalle differenze legateall’hardware.

Il modello OSI (Open System Interconnection), diventato parte degli standard ISO, scomponela gestione della rete in livelli, o strati (layer). Questo modello non definisce uno standardtecnologico, ma un riferimento comune ai concetti che riguardano le reti.

Page 12:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1070 Introduzione alle reti e al TCP/IP

I livelli del modello OSI/ISO sono sette e, per tradizione, vanno visti nel modo indicato nell’elencoseguente, dove il primo livello è quello più basso ed è a contatto del supporto fisico di trasmissione,mentre l’ultimo è quello più alto ed è a contatto delle applicazioni utilizzate dall’utente.

• Livello 7 Applicazione

Interfaccia di comunicazione con i programmi (Application Program Interface).

• Livello 6 Presentazione

Formattazione e trasformazione dei dati a vario titolo, compresa la cifratura e decifratura.

• Livello 5 Sessione

Instaurazione, mantenimento e conclusione delle sessioni di comunicazione.

• Livello 4 Trasporto

Invio e ricezione di dati in modo da controllare e, possibilmente, correggere gli errori.

• Livello 3 Rete

Definizione dei pacchetti, dell’indirizzamento e dell’instradamento in modo astratto rispettoal tipo fisico di comunicazione.

• Livello 2 Collegamento dati (data link)

Definizione delle trame (frame) e dell’indirizzamento in funzione del tipo fisico dicomunicazione.

• Livello 1 Fisico

Trasmissione dei dati lungo il supporto fisico di comunicazione.

94.2.1 Comunicazione tra i livelli e imbustamentoI dati da trasmettere attraverso la rete, vengono prodotti al livello più alto del modello, quindi, conuna serie di trasformazioni e aggiungendo le informazioni necessarie, vengono passati di livelloin livello fino a raggiungere il primo, quello del collegamento fisico. Nello stesso modo, quandoi dati vengono ricevuti dal livello fisico, vengono passati e trasformati da un livello al successivo,fino a raggiungere l’ultimo.

In questo modo, si può dire che a ogni passaggio verso il basso i pacchetti vengano imbustatiin pacchetti (più grandi) del livello inferiore, mentre, a ogni passaggio verso l’alto, i pacchettivengono estratti dalla busta di livello inferiore. In questa circostanza, si parla preferibilmente diPDU di livello n (Protocol Data Unit) per identificare il pacchetto realizzato a un certo livello delmodello OSI/ISO.

Nel passaggio da un livello a quello inferiore, l’imbustamento implica un aumento delledimensioni del pacchetto, ovvero del PDU. A certi livelli, può essere introdotta la frammentazionee la ricomposizione dei pacchetti, a seconda delle esigenze di questi.

94.3 Interconnessione tra le retiIn precedenza sono stati visti i tipi elementari di topologia di rete. Quando si vogliono uniredue reti per formare una sola più grande, si devono utilizzare dei nodi speciali connessisimultaneamente a entrambe le reti da collegare. A seconda del livello su cui intervengono pereffettuare questo collegamento, si parla di bridge, router o gateway.

Page 13:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1071

.-------------------.

| Applicazione | 7-PDU | ˆ

|-------------------| | |

| Presentazione | | |

|-------------------| | |

| Sessione | | |

|-------------------| | Estrazione

| Trasporto | Imbustamento |

|-------------------| | |

| Rete | | |

|-------------------| | |

| Collegamento dati | | |

|-------------------| | |

| Fisico | 1-PDU V |

‘-------------------’

Figura 94.1. Trasformazione dei pacchetti da un livello all’altro.

.-------------------. .-------------------.

| Applicazione | | Applicazione |

|-------------------| |-------------------|

| Presentazione | | Presentazione |

|-------------------| |-------------------|

| Sessione | | Sessione |

|-------------------| |-------------------|

| Trasporto | | Trasporto |

|-------------------| |-------------------|

| Rete | | Rete |

|-------------------| |-------------------|

| Collegamento dati | RIPETITORE | Collegamento dati |

|-------------------| .--------------------------. |-------------------|

| Fisico | | Fisico | | Fisico |

‘-------------------’ ‘--------------------------’ ‘-------------------’

| | | |

‘-------------------’ ‘-------------------’

Figura 94.2. Il ripetitore permette di allungare una rete, intervenendo al primo livello del modelloOSI/ISO.

Page 14:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1072 Introduzione alle reti e al TCP/IP

94.3.1 RipetitoreIl ripetitore è un componente che collega due reti fisiche intervenendo al primo livello OSI/ISO.In questo senso, il ripetitore non filtra in alcun caso i pacchetti, ma rappresenta semplicemente unmodo per allungare un tratto di rete che per ragioni tecniche non potrebbe esserlo diversamente.Il ripetitore tipico è l’HUB, ovvero il concentratore di rete.

94.3.2 BridgeIl bridge mette in connessione due (o più) reti limitandosi a intervenire nei primi due livelli delmodello OSI/ISO. Di conseguenza, il bridge è in grado di connettere tra loro solo reti fisiche dellostesso tipo.

In altri termini, si può dire che il bridge sia in grado di connettere reti separate che hanno unoschema di indirizzamento compatibile.

Il bridge più semplice duplica ogni pacchetto, del secondo livello OSI/ISO, nelle altre reti a cuiè connesso; il bridge più sofisticato è in grado di determinare gli indirizzi dei nodi connessi nellevarie reti, in modo da trasferire solo i pacchetti che necessitano questo attraversamento.

Dal momento che il bridge opera al secondo livello OSI/ISO, non è in grado di distinguere ipacchetti in base ai protocolli di rete del terzo livello (TCP/IP, IPX/SPX, ecc.) e quindi trasferisceindifferentemente tali pacchetti.

Teoricamente, possono esistere bridge in grado di gestire connessioni con collegamenti ridondanti,in modo da determinare automaticamente l’itinerario migliore per i pacchetti e da bilanciareil carico di utilizzo tra diverse connessioni alternative. Tuttavia, questo compito viene svoltopreferibilmente dai router.

.-------------------. .-------------------.

| Applicazione | | Applicazione |

|-------------------| |-------------------|

| Presentazione | | Presentazione |

|-------------------| |-------------------|

| Sessione | | Sessione |

|-------------------| |-------------------|

| Trasporto | | Trasporto |

|-------------------| |-------------------|

| Rete | BRIDGE | Rete |

|-------------------| .--------------------------. |-------------------|

| Collegamento dati | | Collegamento dati | | Collegamento dati |

|-------------------| |--------------------------| |-------------------|

| Fisico | | Fisico | | Fisico | | Fisico |

‘-------------------’ ‘----------’ ‘----------’ ‘-------------------’

| | | |

‘-------------------’ ‘-------------------’

Figura 94.3. Il bridge trasferisce PDU di secondo livello; in pratica trasferisce tutti i tipi di pacchettoriferiti al tipo di rete fisica a cui è connesso.

94.3.3 RouterIl router mette in connessione due (o più) reti intervenendo al terzo livello del modello OSI/ISO.Di conseguenza, il router è in grado di trasferire solo i pacchetti di un tipo di protocollo direte determinato (TCP/IP, IPX/SPX, ecc.), indipendentemente dal tipo di reti fisiche connesseeffettivamente.

Page 15:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1073

In altri termini, si può dire che il router sia in grado di connettere reti separate che hanno schemidi indirizzamento differenti, ma che utilizzano lo stesso tipo di protocollo di rete al terzo livelloOSI/ISO.

.-------------------. .-------------------.

| Applicazione | | Applicazione |

|-------------------| |-------------------|

| Presentazione | | Presentazione |

|-------------------| |-------------------|

| Sessione | | Sessione |

|-------------------| |-------------------|

| Trasporto | ROUTER | Trasporto |

|-------------------| .--------------------------. |-------------------|

| Rete | | Rete | | Rete |

|-------------------| |--------------------------| |-------------------|

| Collegamento dati | | C. dati | | C. dati | | Collegamento dati |

|-------------------| |----------| |----------| |-------------------|

| Fisico | | Fisico | | Fisico | | Fisico |

‘-------------------’ ‘----------’ ‘----------’ ‘-------------------’

| | | |

‘-------------------’ ‘-------------------’

Figura 94.4. Il router trasferisce PDU di terzo livello; in pratica trasferisce i pacchetti di un certo tipo diprotocollo a livello di rete.

L’instradamento dei pacchetti attraverso le reti connesse al router avviene in base a una tabelladi instradamento che può anche essere determinata in modo dinamico, in presenza di connessioniridondanti, come già accennato per il caso dei bridge.

94.3.4 GatewayIl gateway mette in connessione due (o più) reti intervenendo all’ultimo livello, il settimo, delmodello OSI/ISO. In questo senso, il suo scopo non è tanto quello di connettere delle retidifferenti, ma di mettere in connessione i servizi di due o più ambienti che altrimenti sarebberoincompatibili.

Spesso, negli ambienti Unix, il termine gateway viene utilizzato impropriamente comesinonimo di router, ma sarebbe bene, quando possibile, fare attenzione a queste definizioni.

94.4 TCP/IP e il modello OSI/ISOIl nome TCP/IP rappresenta un sistema di protocolli di comunicazione basati su IP e si tratta diquanto utilizzato normalmente negli ambienti Unix. In pratica, il protocollo IP si colloca al terzolivello OSI/ISO, mentre TCP si colloca al di sopra di questo e utilizza IP al livello inferiore. Inrealtà, il TCP/IP annovera anche un altro protocollo importante: UDP.

I vari aspetti del sistema di protocolli TCP/IP si possono apprendere mano a mano che si studianogli indirizzamenti e i servizi di rete che vengono resi disponibili. In questa fase conviene rivedereil modello OSI/ISO in abbinamento al TCP/IP.

A parte la descrizione che si fa nel seguito, il TCP/IP vede in pratica solo quattro livelli, che inalcuni casi incorporano più livelli del modello tradizionale. La figura 94.5 cerca di semplificarequesto abbinamento.

Page 16:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1074 Introduzione alle reti e al TCP/IP

Livello Definizione Descrizione7 Applicazione Applicazioni.6 Presentazione Definizione standard del formato dei dati utilizzati.5 Sessione Protocolli dei servizi (FTP, HTTP, SMTP, RPC, ecc.).4 Trasporto Protocolli TCP e UDP.3 Rete Protocollo IP.2 Collegamento dati Trasmissione e ricezione dati dipendente dal tipo di hardware.1 Fisico Hardware.

Tabella 94.1. Modello OSI/ISO di suddivisione delle competenze di un sistema TCP/IP.

.-------------------. .------------------------------.

| Applicazione | | |

|-------------------| | Applicazione |

| Presentazione | | con il suo protocollo |

|-------------------| | (FTP, HTTP, SMTP, ecc.) |

| Sessione | | |

|-------------------| |------------------------------| ----.

| Trasporto | | Protocolli TCP, UDP e ICMP | |

|-------------------| |------------------------------| > TCP/IP

| Rete | | Protocollo IP | |

|-------------------| |------------------------------| ----’

| Collegamento dati | | Protocollo della rete fisica |

|-------------------| | sottostante |

| Fisico | | |

‘-------------------’ ‘------------------------------’

Figura 94.5. Abbinamento tra il modello OSI/ISO e la semplicità dei protocolli TCP/IP.

Page 17:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1075

Questo comunque non significa che gli strati del modello tradizionale non esistono. Piuttostopossono essere svolti all’interno di una sola applicazione, oppure sono al di fuori della competenzadel protocollo TCP/IP.

94.4.1 Livello 1: fisicoPerché si possa avere una connessione con altri nodi, è necessario inizialmente un supporto fisico,composto solitamente da un cavo e da interfacce di comunicazione. La connessione tipica in unarete locale è fatta utilizzando hardware Ethernet. Il cavo o i cavi e le schede Ethernet appartengonoa questo primo livello.

94.4.2 Livello 2: collegamento dei datiIl tipo di hardware utilizzato nel primo livello determina il modo in cui avviene effettivamentela comunicazione. Nel caso dell’hardware Ethernet, ogni scheda ha un proprio indirizzo univoco(stabilito dal fabbricante) composto da 48 bit e rappresentato solitamente in forma esadecimale,come nell’esempio seguente:

00:A0:24:77:49:97

94.4.3 Livello 3: retePer poter avere un tipo di comunicazione indipendente dal supporto fisico utilizzato, è necessariaun’astrazione che riguarda il modo di inviare blocchi di dati, l’indirizzamento di questi e il loroinstradamento. Per quanto riguarda il TCP/IP, questo è il livello del protocollo IP, attraverso ilquale vengono definiti gli indirizzi e gli instradamenti relativi.

Quando un pacchetto è più grande della dimensione massima trasmissibile in quel tipo di retefisica utilizzata, è il protocollo IP che si deve prendere cura di scomporlo in segmenti più piccolie di ricombinarli correttamente alla destinazione.

94.4.4 Livello 4: trasportoA questo livello appartengono i protocolli di comunicazione che si occupano di frammentaree ricomporre i dati, di correggere gli errori e di prevenire intasamenti della rete. I protocolliprincipali di questo livello sono TCP (Transmission Control Protocol) e UDP (User DatagramProtocol).

Il protocollo TCP, in qualità di protocollo connesso, oltre alla scomposizione e ricomposizionedei dati, si occupa di verificare e riordinare i dati all’arrivo: i pacchetti perduti o errati vengonoritrasmessi e i dati finali vengono ricomposti. Il protocollo UDP, essendo un protocollo nonconnesso, non esegue alcun controllo.

A questo livello si introduce, a fianco dell’indirizzo IP, il numero di porta. Il percorso di unpacchetto ha un’origine, identificata dal numero IP e da una porta, e una destinazione identificatada un altro numero IP e dalla porta relativa. Le porte identificano convenzionalmente dei serviziconcessi o richiesti e la gestione di questi riguarda il livello successivo.

94.4.5 Livello 5: sessioneOgni servizio di rete (condivisione del file system, posta elettronica, FTP, ecc.) ha un proprioprotocollo, porte di servizio e un meccanismo di trasporto (quelli definiti nel livello inferiore).Ogni sistema può stabilire le proprie regole, anche se in generale è opportuno che i nodi cheintendono comunicare utilizzino le stesse porte e gli stessi tipi di trasporto. Questi elementi sonostabiliti dal file ‘/etc/services’. Segue un breve estratto dove si può osservare, per esempio,che il servizio ‘ftp’ utilizza la porta 21 per comunicare e il protocollo di trasporto è il TCP:

ftp 21/tcp

telnet 23/tcp

Page 18:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1076 Introduzione alle reti e al TCP/IP

smtp 25/tcp

finger 79/tcp

pop-3 110/tcp

Quando si avvia una comunicazione a questo livello, si parla di sessione. Quindi, si apre o sichiude una sessione.

94.4.6 Livello 6: presentazioneI dati che vengono inviati utilizzando le sessioni del livello inferiore devono essere uniformi,indipendentemente dalle caratteristiche fisiche delle macchine che li elaborano. A questo livellosi inseriscono normalmente delle librerie in grado di gestire un’eventuale conversione dei dati tral’applicazione e la sessione di comunicazione.

94.4.7 Livello 7: applicazioneL’ultimo livello è quello dell’applicazione che utilizza le risorse di rete. Con la suddivisione dellecompetenze in così tanti livelli, l’applicazione non ha la necessità di occuparsi della comunica-zione; così, in molti casi, anche l’utente può non rendersi conto della sua presenza.

94.5 ARPA livello elementare, la comunicazione attraverso la rete deve avvenire in un modo compatibilecon le caratteristiche fisiche di questa. In pratica, le connessioni devono avere una forma di at-tuazione al secondo livello del modello appena presentato (collegamento dati); i livelli superiorisono solo astrazioni della realtà che c’è effettivamente sotto. Per poter utilizzare un protocollo chesi ponga al terzo livello, come nel caso di IP che viene descritto più avanti, occorre un modo perdefinire un abbinamento tra gli indirizzi di questo protocollo superiore e gli indirizzi fisici delleinterfacce utilizzate effettivamente, secondo le specifiche del livello inferiore.

Volendo esprimere la cosa in modo pratico, si può pensare alle interfacce Ethernet, che hannoun sistema di indirizzamento composto da 48 bit. Quando con un protocollo di livello 3 (rete) sivuole contattare un nodo identificato in maniera diversa da quanto previsto al livello 2, se non siconosce l’indirizzo Ethernet, ma ammettendo che tale nodo si trovi nella rete fisica locale, vieneinviata una richiesta circolare secondo il protocollo ARP (Address Resolution protocol).

La richiesta ARP dovrebbe essere ascoltata da tutte le interfacce connesse fisicamente a quella retefisica e ogni nodo dovrebbe passare tale richiesta al livello 3, in modo da verificare se l’indirizzorichiesto corrisponde al proprio. In questo modo, il nodo che ritiene di essere quello che si stacercando dovrebbe rispondere, rivelando il proprio indirizzo Ethernet.

Ogni nodo dovrebbe essere in grado di conservare per un certo tempo le corrispondenze tra gliindirizzi di livello 2 con quelli di livello 3, ottenuti durante il funzionamento. Questo viene fattonella tabella ARP, che comunque va verificata a intervalli regolari.

94.6 Indirizzi IPv4Come è stato visto nelle sezioni precedenti, al di sopra dei primi due livelli strettamente fisici dicomunicazione, si inserisce la rete dal punto di vista di Unix: un insieme di nodi, spesso definitihost, identificati da un indirizzo IP. Di questi ne esistono almeno due versioni: IPv4 e IPv6. Ilprimo è quello ancora ufficialmente in uso, ma a causa del rapido esaurimento degli indirizzidisponibili nella comunità Internet, è in corso di introduzione il secondo.

Gli indirizzi IP versione 4, cioè quelli tradizionali, sono composti da una sequenza di 32 bit,suddivisi convenzionalmente in quattro gruppetti di 8 bit, rappresentati in modo decimale separatida un punto. Questo tipo di rappresentazione è definito come: notazione decimale puntata. Peresempio,

Page 19:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1077

00000001.00000010.00000011.00000100

corrisponde al codice 1.2.3.4.

All’interno di un indirizzo del genere si distinguono due parti: l’indirizzo di rete e l’indirizzodel nodo particolare. Il meccanismo è simile a quello del numero telefonico in cui la prima partedel numero, il prefisso, definisce la zona ovvero il distretto telefonico, mentre il resto identifical’apparecchio telefonico specifico di quella zona. In pratica, quando viene richiesto un indirizzoIP, si ottiene un indirizzo di rete in funzione della quantità di nodi che si devono connettere. Inquesto indirizzo una certa quantità di bit nella parte finale sono azzerati: ciò significa che quellaparte finale può essere utilizzata per gli indirizzi specifici dei nodi. Per esempio, l’indirizzo di retepotrebbe essere:

00000001.00000010.00000011.00000000

in tal caso, si potrebbero utilizzare gli ultimi 8 bit per gli indirizzi dei vari nodi.

L’indirizzo di rete, non può identificare un nodo. Quindi, tornando all’esempio, l’indirizzo

00000001.00000010.00000011.00000000

non può essere usato per identificare anche un nodo. Inoltre, un indirizzo in cui i bit finali lasciatiper identificare i nodi siano tutti a uno,

00000001.00000010.00000011.11111111

identifica un indirizzo broadcast, cioè un indirizzo per la trasmissione a tutti i nodi diquella rete. In pratica, rappresenta simultaneamente tutti gli indirizzi che iniziano con00000001.00000010.00000011. Di conseguenza, un indirizzo broadcast non può essere utilizzatoper identificare un nodo.

Naturalmente, i bit che seguono l’indirizzo di rete possono anche essere utilizzati per suddividerela rete in sottoreti. Nel caso di prima, volendo creare due sottoreti utilizzando i primi 2 bit cheseguono l’indirizzo di rete originario:

• xxxxxxxx.xxxxxxxx.xxxxxxxx.00000000

indirizzo di rete;

• xxxxxxxx.xxxxxxxx.xxxxxxxx.01000000

indirizzo della prima sottorete;

• xxxxxxxx.xxxxxxxx.xxxxxxxx.10000000

indirizzo della seconda sottorete;

• xxxxxxxx.xxxxxxxx.xxxxxxxx.11111111

indirizzo broadcast.

In questo esempio, per ogni sottorete, resterebbero 6 bit a disposizione per identificare i nodi: da0000012 a 1111102.

Il meccanismo utilizzato per distinguere la parte dell’indirizzo che identifica la rete è quello dellamaschera di rete o netmask. La maschera di rete è un indirizzo che viene abbinato all’indirizzo daanalizzare con l’operatore booleano AND, per filtrare la parte di bit che interessano. Una mascheradi rete che consenta di classificare i primi 24 bit come indirizzo di rete sarà:

Page 20:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1078 Introduzione alle reti e al TCP/IP

11111111.11111111.11111111.00000000

cosa che coincide con il ben più noto codice 255.255.255.0.

Utilizzando l’esempio visto in precedenza, abbinando questa maschera di rete si ottiene l’indirizzodi rete:

00000001.00000010.00000011.00000100 nodo (1.2.3.4)

11111111.11111111.11111111.00000000 maschera di rete (255.255.255.0)

00000001.00000010.00000011.00000000 indirizzo di rete (1.2.3.0).

L’indirizzo che si ottiene abbinando l’indirizzo di un nodo e la sua maschera di rete invertita conl’operatore AND è l’indirizzo del nodo relativo alla propria rete. Esempio:

00000001.00000010.00000011.00000100 nodo (1.2.3.4)

00000000.00000000.00000000.11111111 maschera di rete invertita (0.0.0.255)

00000000.00000000.00000000.00000100 indirizzo relativo (0.0.0.4).

94.6.1 Classi di indirizziGli indirizzi IP sono stati classificati in cinque gruppi, a partire dalla lettera «A» fino alla lettera«E».

Classe A

Gli indirizzi di classe A hanno il primo bit a zero, utilizzano i sette bit successivi peridentificare l’indirizzo di rete e lasciano i restanti 24 bit per identificare i nodi.

0rrrrrrr.hhhhhhhh.hhhhhhhh.hhhhhhhh

All’interno di questa classe si possono usare indirizzi che vanno da

00000001.________.________.________

a

01111110.________.________.________

In pratica, appartengono a questa classe gli indirizzi compresi tra 1.___.___.___ e126.___.___.___.

Classe B

Gli indirizzi di classe B hanno il primo bit a uno e il secondo a zero, utilizzano i 14 bitsuccessivi per identificare l’indirizzo di rete e lasciano i restanti 16 bit per identificare inodi.

10rrrrrr.rrrrrrrr.hhhhhhhh.hhhhhhhh

All’interno di questa classe si possono usare indirizzi che vanno da

10000000.00000001.________.________

a

10111111.11111110.________.________

Page 21:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1079

In pratica, appartengono a questa classe gli indirizzi compresi tra 128.1.___.___ e191.254.___.___.

Classe C

Gli indirizzi di classe C hanno il primo e il secondo bit a uno e il terzo bit a zero, utilizzanoi 21 bit successivi per identificare l’indirizzo di rete e lasciano i restanti 8 bit per identificarei nodi.

110rrrrr.rrrrrrrr.rrrrrrrr.hhhhhhhh

All’interno di questa classe si possono usare indirizzi che vanno da

11000000.00000000.00000000.________

a

11011111.11111111.11111110.________.

In pratica, appartengono a questa classe gli indirizzi compresi tra 192.0.1.___ e223.255.254.___.

Classe D

Gli indirizzi di classe D hanno i primi tre bit a uno e il quarto a zero. Si tratta di una classedestinata a usi speciali.

1110____.________.________.________

In pratica, appartengono a questa classe gli indirizzi compresi tra 224.___.___.___ e239.___.___.___.

Classe E

Gli indirizzi di classe E hanno i primi quattro bit a uno e il quinto a zero. Si tratta di unaclasse destinata a usi speciali.

11110___.________.________.________

In pratica, appartengono a questa classe gli indirizzi compresi tra 240.___.___.___ e247.___.___.___.

94.6.2 Indirizzi specialiLo spazio lasciato libero tra la classe A e la classe B, ovvero gli indirizzi 127.*, sono riservati peridentificare una rete virtuale interna al nodo stesso. All’interno di questa rete si trova un’interfacciadi rete immaginaria connessa su questa stessa rete, corrispondente all’indirizzo 127.0.0.1, mentregli altri indirizzi di questo gruppo non vengono mai utilizzati.

Per identificare questi indirizzi si parla di loopback, anche se questo termine viene usato ancorain altri contesti con significati differenti.

All’interno di ogni nodo, quindi, l’indirizzo 127.0.0.1 corrisponde a se stesso. Serve in particolareper non disturbare la rete quando un programma (che usa la rete) deve fare riferimento a se stesso.

L’indirizzo speciale 0.0.0.0, conosciuto come default route è il percorso, o la strada predefinita perl’instradamento dei pacchetti. Si usa spesso la parola chiave ‘defaultroute’ per fare riferimentoautomaticamente a questo indirizzo particolare.

Page 22:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1080 Introduzione alle reti e al TCP/IP

94.6.3 Indirizzi riservati per le reti privateSe non si ha la necessità di rendere accessibili i nodi della propria rete locale alla rete globaleInternet, si possono utilizzare alcuni gruppi di indirizzi che sono stati riservati a questo scopo eche non corrispondono a nessun nodo raggiungibile attraverso Internet.

Nella classe A è stato riservato l’intervallo da

00001010.00000000.00000000.00000000 = 10.0.0.0

a

00001010.11111111.11111111.11111111 = 10.255.255.255.

Nella classe B è stato riservato l’intervallo da

10101100.00010000.00000000.00000000 = 172.16.0.0

a

10101100.00011111.11111111.11111111 = 172.31.255.255.

Nella classe C è stato riservato l’intervallo da

11000000.10101000.00000000.00000000 = 192.168.0.0

a

11000000.10101000.11111111.11111111 = 192.168.255.255.

94.6.4 Sottoreti e instradamentoQuando si scompone la propria rete locale in sottoreti, di solito lo si fa per non intasarla. Infatti èprobabile che si possano raggruppare i nodi in base alle attività che essi condividono. Le sottoretipossono essere immaginate come raggruppamenti di nodi separati che di tanto in tanto hanno lanecessità di accedere a nodi situati al di fuori del loro gruppo. Per collegare due sottoreti occorreun nodo con due interfacce di rete, ognuno connesso con una delle due reti, configurato in mododa lasciare passare i pacchetti destinati all’altra rete. Questo è un router, chiamato abitualmentegateway, che in pratica svolge l’attività di instradamento dei pacchetti.

94.6.5 Maschere IP e maschere di reteIl modo normale di rappresentare una maschera degli schemi di indirizzamento di IPv4 è quellodella notazione decimale puntata a ottetti, come visto fino a questo punto. Tuttavia, consideratoche le maschere servono prevalentemente per definire dei gruppi di indirizzi IP, cioè delle reti (osottoreti), tali maschere hanno una forma piuttosto semplice: una serie continua di bit a uno e laparte restante di bit a zero. Pertanto, quando si tratta di definire una maschera di rete, potrebbeessere conveniente indicare semplicemente il numero di bit da porre a uno. Per esempio, la classicamaschera di rete di classe C, 255.255.255.0, equivale a dire che i primi 24 bit devono essere postia uno.

La possibilità di rappresentare le maschere di rete in questo modo è apparsa solo in tempi recentiper quanto riguarda IPv4. Quindi, dipende dai programmi di servizio utilizzati effettivamente, ilfatto che si possa usare o meno questa forma. In ogni caso, il modo normale di esprimerla è quellodi indicare il numero IP seguito da una barra obliqua normale e dal numero di bit a uno dellamaschera, come per esempio 192.168.1.1/24.

Page 23:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1081

Indirizzo iniziale Indirizzo finale Impiego0.0.0.0 – Default route1.0.0.0 126.* Classe A10.0.0.0 10.* Classe A riservata per reti private

127.0.0.0 127.* Rete loopback127.0.0.1 – Indirizzo del nodo locale

128.0.0.0 191.* Classe B172.16.0.0 172.31.* Classe B riservata per reti private

192.0.0.0 223.* Classe C192.168.0.0 192.168.* Classe C riservata per reti private

224.0.0.0 239.* Classe D240.0.0.0 247.* Classe E

Tabella 94.2. Indirizzi IPv4.

94.6.6 Sottoreti particolari in classe CA causa della penuria di indirizzi IPv4, recentemente si tende a utilizzare la classe C in modo daottenere il maggior numero di sottoreti possibili. Nella sezione 94.6 è stato mostrato un esempio disuddivisione in sottoreti, in cui si utilizzano 2 bit per ottenere due reti, che possono raggiungere unmassimo di 62 nodi per rete, mentre se si trattasse di una rete unica sarebbe possibile raggiungere254 nodi.

Se si parte dal presupposto che ogni sottorete abbia il proprio indirizzo broadcast, nel senso chenon esiste più un indirizzo broadcast generale, si può fare di meglio (anche se la cosa non èconsigliabile in generale). A partire dalla tabella 94.3 vengono mostrati alcuni esempi.

Rete IP iniziale IP finale Broadcastx.x.x.0 x.x.x.1 x.x.x.126 x.x.x.127x.x.x.128 x.x.x.129 x.x.x.254 x.x.x.255

Tabella 94.3. Maschera di rete a 25 bit, pari a 255.255.255.128, per due sottoreti con 126 nodiognuna.

Rete IP iniziale IP finale Broadcastx.x.x.0 x.x.x.1 x.x.x.62 x.x.x.63x.x.x.64 x.x.x.65 x.x.x.126 x.x.x.127x.x.x.128 x.x.x.129 x.x.x.190 x.x.x.191x.x.x.192 x.x.x.193 x.x.x.254 x.x.x.255

Tabella 94.4. Maschera di rete a 26 bit, pari a 255.255.255.192, per quattro sottoreti con 62 nodiognuna.

94.7 Nomi di dominioLa gestione diretta degli indirizzi IP è piuttosto faticosa dal punto di vista umano. Per questomotivo si preferisce associare un nome agli indirizzi numerici. Il sistema utilizzato attualmenteè il DNS (Domain Name System), ovvero il sistema dei nomi di dominio. Gli indirizzi della reteInternet sono organizzati ad albero in domini, sottodomini (altri sottodomini di livello inferiore,ecc.), fino ad arrivare a identificare il nodo desiderato.

Non esiste una regola per stabilire quante debbano essere le suddivisioni, di conseguenza, di frontea un nome del genere non si può sapere a priori se si tratta di un indirizzo finale, riferito a un nodosingolo, o a un gruppo di questi.

Page 24:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1082 Introduzione alle reti e al TCP/IP

Rete IP iniziale IP finale Broadcastx.x.x.0 x.x.x.1 x.x.x.30 x.x.x.31x.x.x.32 x.x.x.33 x.x.x.62 x.x.x.63x.x.x.64 x.x.x.65 x.x.x.94 x.x.x.95x.x.x.96 x.x.x.97 x.x.x.126 x.x.x.127x.x.x.128 x.x.x.129 x.x.x.158 x.x.x.159x.x.x.160 x.x.x.161 x.x.x.190 x.x.x.191x.x.x.192 x.x.x.193 x.x.x.222 x.x.x.223x.x.x.224 x.x.x.225 x.x.x.254 x.x.x.255

Tabella 94.5. Maschera di rete a 27 bit, pari a 255.255.255.224, per otto sottoreti con 30 nodiognuna.

Rete IP iniziale IP finale Broadcastx.x.x.0 x.x.x.1 x.x.x.14 x.x.x.15x.x.x.16 x.x.x.17 x.x.x.30 x.x.x.31x.x.x.32 x.x.x.33 x.x.x.46 x.x.x.47x.x.x.48 x.x.x.49 x.x.x.62 x.x.x.63x.x.x.64 x.x.x.65 x.x.x.78 x.x.x.79x.x.x.80 x.x.x.81 x.x.x.94 x.x.x.95x.x.x.96 x.x.x.97 x.x.x.110 x.x.x.111x.x.x.112 x.x.x.113 x.x.x.126 x.x.x.127x.x.x.128 x.x.x.129 x.x.x.142 x.x.x.143x.x.x.144 x.x.x.145 x.x.x.158 x.x.x.159x.x.x.160 x.x.x.161 x.x.x.174 x.x.x.175x.x.x.176 x.x.x.177 x.x.x.190 x.x.x.191x.x.x.192 x.x.x.193 x.x.x.206 x.x.x.207x.x.x.208 x.x.x.209 x.x.x.222 x.x.x.223x.x.x.224 x.x.x.225 x.x.x.238 x.x.x.239x.x.x.240 x.x.x.241 x.x.x.254 x.x.x.255

Tabella 94.6. Maschera di rete a 28 bit, pari a 255.255.255.240, per 16 sottoreti con 14 nodi ognuna.

. (dominio principale o «root»)

|

|-com... (dominio com)

|-edu... (dominio edu)

|-org... (dominio org)

|-net... (dominio net)

|-it (dominio it)

| |-beta (dominio beta.it)

| | |-alfa (dominio alfa.beta.it)

| | | |-dani (nodo dani.alfa.beta.it)

: : : :

Figura 94.6. Struttura dei nomi di dominio.

Page 25:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1083

Rete IP iniziale IP finale Broadcastx.x.x.0 x.x.x.1 x.x.x.6 x.x.x.7x.x.x.8 x.x.x.9 x.x.x.14 x.x.x.15x.x.x.16 x.x.x.17 x.x.x.22 x.x.x.23x.x.x.24 x.x.x.25 x.x.x.30 x.x.x.31x.x.x.32 x.x.x.33 x.x.x.38 x.x.x.39x.x.x.40 x.x.x.41 x.x.x.46 x.x.x.47x.x.x.48 x.x.x.49 x.x.x.54 x.x.x.55x.x.x.56 x.x.x.57 x.x.x.62 x.x.x.63x.x.x.64 x.x.x.65 x.x.x.70 x.x.x.71x.x.x.72 x.x.x.73 x.x.x.78 x.x.x.79x.x.x.80 x.x.x.81 x.x.x.86 x.x.x.87x.x.x.88 x.x.x.89 x.x.x.94 x.x.x.95x.x.x.96 x.x.x.97 x.x.x.102 x.x.x.103x.x.x.104 x.x.x.105 x.x.x.110 x.x.x.111x.x.x.112 x.x.x.113 x.x.x.118 x.x.x.119x.x.x.120 x.x.x.121 x.x.x.126 x.x.x.127x.x.x.128 x.x.x.129 x.x.x.134 x.x.x.135x.x.x.136 x.x.x.137 x.x.x.142 x.x.x.143x.x.x.144 x.x.x.145 x.x.x.150 x.x.x.151x.x.x.152 x.x.x.153 x.x.x.158 x.x.x.159x.x.x.160 x.x.x.161 x.x.x.166 x.x.x.167x.x.x.168 x.x.x.169 x.x.x.174 x.x.x.175x.x.x.176 x.x.x.177 x.x.x.182 x.x.x.183x.x.x.184 x.x.x.185 x.x.x.190 x.x.x.191x.x.x.192 x.x.x.193 x.x.x.198 x.x.x.199x.x.x.200 x.x.x.201 x.x.x.206 x.x.x.207x.x.x.208 x.x.x.209 x.x.x.214 x.x.x.215x.x.x.216 x.x.x.217 x.x.x.222 x.x.x.223x.x.x.224 x.x.x.225 x.x.x.230 x.x.x.231x.x.x.232 x.x.x.233 x.x.x.238 x.x.x.239x.x.x.240 x.x.x.241 x.x.x.246 x.x.x.247x.x.x.248 x.x.x.249 x.x.x.254 x.x.x.255

Tabella 94.7. Maschera di rete a 29 bit, pari a 255.255.255.248, per 32 sottoreti con sei nodi ognuna.

Page 26:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1084 Introduzione alle reti e al TCP/IP

Con il termine nome di dominio, si può fare riferimento sia al nome completo di un nodoparticolare, che a una parte di questo: quella iniziale. Dipende dal contesto stabilire cosa siintende veramente. Per fare un esempio che dovrebbe essere più comprensibile, è come parlaredi un percorso all’interno di un file system: può trattarsi di una directory, oppure può essere ilpercorso assoluto che identifica precisamente un file.

Spesso, all’interno della propria rete locale, è possibile identificare un nodo attraverso il solo nomeiniziale, senza la parte restante del dominio di appartenenza. Per esempio, se la rete in cui si operacorrisponde al dominio brot.dg, il nodo roggen verrà inteso essere roggen.brot.dg.Quando un nome di dominio contiene tutti gli elementi necessari a identificare un nodo, siparla precisamente di FQDN o Fully Qualified Domain Name, quindi, roggen.brot.dgdell’esempio precedente è un FQDN.

Quando si realizza una rete locale con indirizzi IP non raggiungibili attraverso Internet, è op-portuno abbinare nomi di dominio sicuramente inesistenti. Ciò aiuta anche a comprendereimmediatamente che non si tratta di un dominio accessibile dall’esterno.

94.7.1 Servizio di risoluzione dei nomi di dominioIn un sistema di nomi di dominio (DNS), il problema più grande è quello di organizzare iname server ovvero i servizi di risoluzione dei nomi (servizi DNS). Ciò è attuato da nodi chesi occupano di risolvere, ovvero trasformare, gli indirizzi mnemonici dei nomi di dominio inindirizzi numerici IP e viceversa. A livello del dominio principale (root), si trovano alcuni serventiche si occupano di fornire gli indirizzi per raggiungere i domini successivi, cioè ‘com’, ‘edu’,‘org’, ‘net’, ‘it’,... A livello di questi domini ci saranno alcuni serventi (ogni dominio ha isuoi) che si occupano di fornire gli indirizzi per raggiungere i domini inferiori, e così via, fino araggiungere il nodo finale. Di conseguenza, un servizio di risoluzione dei nomi, per poter ottenerel’indirizzo di un nodo che si trova in un dominio al di fuori della sua portata, deve interpellarequelli del livello principale e mano a mano quelli di livello inferiore, fino a ottenere l’indirizzocercato. Per determinare l’indirizzo IP di un nodo si rischia di dover accedere a una quantità diservizi di risoluzione dei nomi. Per ridurre questo traffico di richieste, ognuno di questi è in gradodi conservare autonomamente una certa quantità di indirizzi che sono stati richiesti nell’ultimoperiodo.

In pratica, per poter utilizzare la notazione degli indirizzi suddivisa in domini, è necessario che ilsistema locale sul quale si opera possa accedere al suo servizio di risoluzione dei nomi più vicino,oppure gestisca questo servizio per conto suo. In una rete locale privata composta da nodi chenon sono raggiungibili dalla rete esterna (Internet), non dovrebbe essere necessario predisporreun servizio di risoluzione dei nomi; in questi casi è comunque indispensabile almeno il file ‘/etc/hosts’ (100.2.1) compilato correttamente con gli indirizzi associati ai nomi completi deivari nodi della rete locale.

94.8 Kernel Linux, configurazione per la retePer poter utilizzare i servizi di rete è necessario avere previsto questa gestione durante la configu-razione del kernel. Per quanto riguarda GNU/Linux, si tratta principalmente di attivare la gestionedella rete in generale e di attivare le particolari funzionalità necessarie per le attività che si inten-dono svolgere (sezione 26.2.9).

Oltre alla gestione della rete, occorre anche pensare al tipo di hardware a disposizione; per questosi deve configurare la parte riguardante i dispositivi di rete (sezione 26.2.12).

94.9 Riferimenti• Olaf Kirch, NAG, The Linux Network Administrators’ Guide

Page 27:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione alle reti e al TCP/IP 1085

• Terry Dawson, Linux NET-3-HOWTO�

http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html �

• S. Gai, P. L. Montessoro, P. Nicoletti, Reti locali: dal cablaggio all’internetworking

• Charles Hedrick, TCP/IP introduction�

http://www.zepa.net/pub/doc/intro-tcp.txt �

• Mike Oliver, TCP/IP Frequently Asked Questions�

http://www.itprc.com/tcpipfaq/ �

• Netmask and subnet mask table, 2000, Lucent Technologies�

http://www.livingston.com/tech/technotes/200/250001.html �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 28:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 95Hardware di reteQuando si vuole connettere il proprio sistema ad altri nodi per formare una rete locale, si utilizzanonormalmente delle interfacce di rete, una per elaboratore, connesse tra loro in qualche modo.Normalmente si tratta di schede, ma posso essere utilizzate anche delle porte di comunicazionegestite opportunamente attraverso il software.

95.1 Nomi di interfacciaA differenza degli altri tipi di dispositivi fisici, che vengono identificati ognuno attraverso un filedi dispositivo particolare (‘/dev/*’), GNU/Linux individua le interfacce di rete attraverso deinomi che nulla hanno a che vedere con i file della directory ‘/dev/’.

Come nel caso dei nomi di dispositivo, quando ci possono essere più interfacce dello stesso tiposi utilizza un numero alla fine del nome. Per esempio, ‘eth0’ è la prima interfaccia Ethernet.Dipende dal kernel l’assegnazione di questo numero, quindi, quando si ha la necessità di attribuireun numero particolare si devono usare delle istruzioni opportune da inviare al kernel nel momentodell’avvio.

La tabella 95.1 elenca alcuni nomi di interfaccia di rete.

Nome Descrizionelo Interfaccia di loopback, di solito si tratta dell’indirizzo 127.0.0.1.ethn La n-esima scheda Ethernet.pppn La n-esima interfaccia PPP.plipn La n-esima porta parallela utilizzata per le connessioni PLIP.

Tabella 95.1. Alcuni nomi delle interfacce di rete.

95.2 Ethernet – IEEE 802.3/ISO 8802.3Da molti anni ormai, le schede Ethernet sono quelle più utilizzate per la realizzazione di retilocali. Tuttavia, con il termine Ethernet si fa generalmente riferimento a uno standard evolutivosuccessivo: IEEE 802.3 o ISO 8802.3. In generale, lo standard Ethernet vero e proprio è ormaiobsoleto. Lo standard IEEE 802.3 prevede diversi tipi di connessione, tra cui i più comuni sono:

• Ethernet thick – normale;

• Ethernet thin – sottile;

• coppie ritorte non schermate – UTP.

Di questi, i più usati sono gli ultimi due e in particolare il secondo è il più economico. Infatti,l’uso del cavo UTP richiede poi la presenza di concentratori (HUB), oppure di switch.

Il collegamento di tipo «sottile» (thin) richiede l’uso di un cavo coassiale con impedenza da50 ohm (di solito si tratta del noto cavo RG58) che viene usato per connettere ogni schedaattraverso un connettore BNC a «T». Il cavo può raggiungere una lunghezza massima di 180 mcirca. Alla fine di entrambi i capi di questo cavo si deve inserire un terminatore resistivo(non induttivo) da 50 ohm. L’unico svantaggio di questo tipo di collegamento è che durante ilfunzionamento della rete, il cavo non può essere interrotto.

La connessione del tipo UTP, Unshielded Twisted Pair, utilizza un connettore RJ-45. Per ilcollegamento in rete attraverso questo tipo di connessione, c’è bisogno di un concentratore-ripetitore.1

1Solitamente, un componente del genere mette a disposizione un’uscita BNC per il collegamento con una rete sottile.

1086

Page 29:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Hardware di rete 1087

Lo standard IEEE 802.3 prevede anche l’uso di collegamenti a fibra ottica, ma qui, questapossibilità viene volutamente ignorata per la mancanza della competenza necessaria da partedi chi scrive.

95.2.1 10base*, 10/100base*, 10/100/1000base*A seconda del tipo di connessione prescelto per la rete Ethernet, si hanno delle limitazioni sullalunghezza massima del cavo utilizzato. Una connessione «normale» (thick) può essere fatta su uncavo lungo al massimo 500 m, mentre una connessione sottile permette l’utilizzo al massimo di180 m.

In base a questi limiti, per distinguere il tipo di connessione si utilizzano i nomi 10base2 per laconnessione sottile e 10base5 per la connessione normale. Nel caso di connessione attraverso cavoUTP, si utilizza il nome 10baseT.

La definizione «10base» fa riferimento alla velocità massima di comunicazione: 10 Mbit/s(bps). La definizione «10/100base» fa invece riferimento a uno standard più recente, in cui siriesce anche a raggiungere la velocità teorica di 100 Mbit/s, pur mantenendo la compatibilitàcon la velocità precedente; nello stesso modo, «10/100/1000base» rappresenta la possibilitàdi raggiungere anche una velocità di 1 000 Mbit/s. Le comunicazione a 100 Mbit/s e a1 000 Mbit/s avvengono solo attraverso un cavo UTP, per cui si parla generalmente di connessione10/100baseT, oppure 10/100/1000baseT.

Ethernet Velocità Connessione Distanza Descrizione10base5 10 Mbit/s thick RG213 <= 500 m Richiede il vampire tap.10base2 10 Mbit/s thin RG58 < 200 m Cavo passante con connettore a «T».10baseT 10 Mbit/s UTP < 100 m Richiede un concentratore o uno switch.10/100baseT 10-100 Mbit/s UTP < 100 m Richiede un concentratore o uno switch.10/100/1000baseT 10-1 000 Mbit/s UTP < 100 m Richiede un concentratore o uno switch.

Tabella 95.2. Caratteristiche delle schede Ethernet.

95.2.2 NE2000La scheda Ethernet più diffusa in assoluto, a causa del rapporto ottimale tra qualità e prezzo, èstata la NE2000 insieme a tutti i suoi cloni. Si tratta di una scheda ISA a 16 bit e richiede che lesia riservato un indirizzo IRQ e un indirizzo di I/O. Ciò a differenza di altre schede che possonorichiedere anche una zona di memoria.2

La configurazione predefinita tradizionale di una NE2000 è IRQ 3 e I/O 30016 che però la mettein conflitto con la seconda porta seriale a causa dell’indirizzo IRQ. Diventa quindi necessariocambiare questa impostazione attraverso lo spostamento di ponticelli sulla scheda, o l’uso di unprogramma di configurazione, di solito in Dos.

Il kernel Linux deve essere stato predisposto per l’utilizzo di questo tipo di schede e durantel’avvio è normalmente in grado di identificarne la presenza. L’esistenza di una scheda NE2000viene verificata in base alla scansione di alcuni indirizzi I/O e precisamente: 30016, 28016, 32016

e 34016.3 Se la scheda è stata configurata al di fuori di questi valori, non può essere individuata,a meno di utilizzare un’istruzione apposita da inviare al kernel prima del suo avvio, solitamenteattraverso una riga ‘append’ nel file ‘/etc/lilo.conf’. Quando si vogliono utilizzare più

Tuttavia, prima di decidere di utilizzare un HUB di questo tipo occorre tenere presente che, spesso, attraverso tale uscitanon può collegare da solo un gruppo di nodi in un’altra rete. La presenza di un connettore BNC farebbe pensare a questapossibilità; tuttavia, in condizioni normali, anche l’uscita BNC può essere collegata a una sola stazione, per esempio unservente o un router.

2ISA sta per Industry Standard Architecture e si riferisce al BUS utilizzato dai primi «PC».3In passato veniva fatta anche la scansione dell’indirizzo 36016, ma l’utilizzo di questo, dal momento che poi si estende

fino a 37F16, porterebbe la scheda di rete in conflitto con la porta parallela standard che di solito si trova nella posizione37816.

Page 30:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1088 Hardware di rete

schede nello stesso elaboratore è necessario informare il kernel attraverso un parametro compostonel modo seguente:

ether=irq,indirizzo_i/o,nome

• irq

Rappresenta il numero decimale di IRQ.

• indirizzo_i/o

Rappresenta l’indirizzo di I/O di partenza da utilizzare, espresso in esadecimale.

• nome

Rappresenta il nome da abbinare all’interfaccia. Trattandosi di schede Ethernet, il nome è‘ethn’, dove n rappresenta un numero a partire da zero.

Per esempio, se si installano due schede configurate rispettivamente come IRQ 11, I/O 30016 eIRQ 12, I/O 32016, si potrà utilizzare il file ‘/etc/lilo.conf’ predisposto come nell’estrattoseguente:

...

image=/boot/vmlinuz

...

append="ether=11,0x300,eth0 ether=12,0x320,eth1"

...

Per controllare se le schede installate sono rilevate correttamente dal kernel basta leggere i mes-saggi iniziali, per esempio attraverso ‘dmesg’.

Ci sono comunque molte altre possibilità di configurazione e per questo conviene leggereEthernet-HOWTO di Paul Gortmaker.

95.3 IEEE 802.3: ripetitori, switch e limiti di una reteIl ripetitore è un componente che collega due reti intervenendo al primo livello OSI/ISO. In questosenso, il ripetitore non filtra in alcun caso i pacchetti, ma rappresenta semplicemente un modo perallungare un tratto di rete che per ragioni tecniche non potrebbe esserlo diversamente.

Gli HUB, o concentratori, sono equivalenti a dei ripetitori; come tali, il loro utilizzo in una rete èsottoposto a delle limitazioni. In teoria si potrebbero calcolare tutte le caratteristiche di una reteper determinare se la struttura che si vuole ottenere sia compatibile o meno con le specifiche;in pratica la cosa diventa piuttosto difficile, data la necessità di tenere conto di troppi fattori.Generalmente si fa riferimento a dei modelli approssimativi già pronti, che stabiliscono dellelimitazioni più facili da comprendere.

95.3.1 10base5 senza ripetitoriLa connessione 10base5, senza la presenza di ripetitori, prevede l’uso di un cavo coassiale RG213(thick, cioè grosso), da 50 ohm, con una lunghezza massima di 500 m, terminato alle due estremitàcon una resistenza da 50 ohm. Lungo il cavo possono essere inseriti i ricetrasmettitori, o MAU(Medium Attachment Unit), che si collegano al cavo attraverso il vampire tap e a loro voltasono collegati alla scheda di rete con un cavo apposito. I vari ricetrasmettitori possono essereal massimo 100 e la distanza sul cavo, tra uno qualunque di questi e il successivo, è al minimo di2,5 m.

Come si può intuire, se il tratto di cavo coassiale non è continuo, ma ottenuto dalla giunzione dipiù pezzi, la lunghezza massima deve essere diminuita.

Page 31:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Hardware di rete 1089

.-------------------. .-------------------.

| Applicazione | | Applicazione |

|-------------------| |-------------------|

| Presentazione | | Presentazione |

|-------------------| |-------------------|

| Sessione | | Sessione |

|-------------------| |-------------------|

| Trasporto | | Trasporto |

|-------------------| |-------------------|

| Rete | | Rete |

|-------------------| |-------------------|

| Collegamento dati | RIPETITORE | Collegamento dati |

|-------------------| .--------------------------. |-------------------|

| Fisico | | Fisico | | Fisico |

‘-------------------’ ‘--------------------------’ ‘-------------------’

| | | |

‘-------------------’ ‘-------------------’

Figura 95.1. Il ripetitore ritrasmette i pacchetti di livello 1.

.----------. .----------. .----------.

| stazione | | stazione | | stazione |

‘----------’ ‘----------’ ‘----------’

| | |

| | | cavo AUI

| | |

terminatore .---. .---. .---. terminatore

XX--------------|MAU|-----------|MAU|-----------|MAU|----------------XX

50 ohm ‘---’ ‘---’ ‘---’ 50 ohm

min 2,5 m

<--------------->

max 500 m cavo RG213

<--------------------------------------------------------------------->

max 100 MAU (ricetrasmettitori) su un solo segmento

Figura 95.2. Regole per una rete 10base5 senza ripetitori.

Page 32:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1090 Hardware di rete

95.3.2 10base2 senza ripetitoriLa connessione 10base2, senza la presenza di ripetitori, prevede l’uso di un cavo coassiale RG58(thin, cioè sottile), da 50 ohm, con una lunghezza massima di 180 m, terminato alle due estremitàcon una resistenza da 50 ohm. Lungo il cavo possono essere inseriti dei connettori BNC a «T»,attraverso cui collegare un ricetrasmettitore MAU, o direttamente una scheda che incorpora tuttele funzionalità. Le varie inserzioni poste nella rete possono essere un massimo di 30, poste a unadistanza minima di 0,5 m lungo il cavo.

.----------. .----------. .----------.

| stazione | | stazione | | stazione |

‘----------’ ‘----------’ ‘----------’

terminatore XX XX XX terminatore

XX--------------XXXX------------XXXX------------XXXX-----------------XX

50 ohm min 0,5 m 50 ohm

<-------------->

max 180 m cavo RG58

<--------------------------------------------------------------------->

max 30 connessioni su un solo segmento

Figura 95.3. Regole per una rete 10base2 senza ripetitori.

95.3.3 10baseTLa connessione 10baseT prevede il collegamento di due sole stazioni, cosa che in pratica sitraduce nella necessità di utilizzare un ripetitore multiplo, ovvero un HUB, o concentratore. Lecaratteristiche del cavo utilizzato per la connessione 10baseT non sono uniformi e perfettamentestandardizzate, tuttavia, generalmente si può raggiungere una lunghezza massima di 100 m.

95.3.4 Regole elementari di progettazioneLa regola di progettazione più semplice, stabilisce che tra due stazioni qualunque possono essereattraversati al massimo quattro ripetitori, utilizzando cinque segmenti (cavi), di cui al massimo tredi tipo coassiale (RG58 o RG213).

.--------. 10baseT .------. .------. .------. .------. 10baseT .--------.

|stazione|---------|ripet.|---|ripet.|---|ripet.|---|ripet.|---------|stazione|

‘--------’ ‘------’ ‘------’ ‘------’ ‘------’ ‘--------’

max 100 m max 100 m

10base5 max 500 m

oppure 10base2 max 180 m

Figura 95.4. Esempio di configurazione massima con quattro ripetitori, tre segmenti coassiali e duesegmenti 10baseT.

La figura 95.4 mostra una situazione molto semplice, in cui tre segmenti 10base2 o 10base5collegano tra loro quattro ripetitori che poi si uniscono all’esterno con un segmento 10baseT. Lafigura mostra il collegamento di due sole stazioni, ma i ripetitori più esterni potrebbero esseremuniti di più porte 10baseT, in modo da collegare più stazioni.

Eventualmente, in base alle regole date, anche nei tratti di collegamento coassiale è possibileinserire delle stazioni.

Page 33:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Hardware di rete 1091

.----------. coass. .----------. coass. .----------. .----------.

|ripetitore|---------|ripetitore|---------|ripetitore| .-----|ripetitore|

‘----------’ ‘----------’ ‘----------’ | ‘----------’

| | | | | | | | | |

| | | | .----------. | | | | | |

| | | | |ripetitore|-*-------’ | | | |

stazioni ‘----------’ coassiale stazioni

10baseT | | | | 10baseT

| | | |

stazioni

10baseT

Figura 95.5. Esempio di configurazione massima in cui, pur apparendo cinque ripetitori, tra duestazioni ne vengono attraversati al massimo quattro. I ripetitori agli estremi dispongono di più

connessioni 10baseT.

95.3.5 Commutatori di pacchetto o switchI commutatori di pacchetto, o switch, sono diversi dai concentratori, o HUB, in quanto sicomportano come dei bridge. In questo senso non sono sottoposti alle limitazioni dei ripetitori,soprattutto per quanto riguarda la condivisione del dominio di collisione. Infatti, un bridge è ingrado normalmente di determinare se una stazione si trova in un collegamento o meno; in questomodo, i pacchetti possono essere filtrati, impedendo di affollare inutilmente i collegamenti chenon ne sono interessati.

95.4 PLIPDue elaboratori possono essere connessi utilizzando le porte parallele. Si ottiene in questi casi unaconnessione PLIP. La gestione della comunicazione PLIP avviene direttamente nel kernel e perquesto, è necessario che sia stato compilato opportunamente per ottenere questa funzionalità.4

Le porte parallele possono essere fondamentalmente di due tipi: quelle normali e quellebidirezionali. Per questa ragione, in origine si potevano utilizzare due tipi di cavo. Attualmenteperò, l’unico cavo considerato standard è quello incrociato adatto a tutti i tipi di porta parallela.

L’utilizzo del cavo bidirezionale, considerato sconsigliabile, ma di cui si trova ancora traccianelle documentazioni, implica qualche rischio in più di danneggiamento delle porte parallele.

Lo schema del cavo per la connessione PLIP è descritto in appendice, nella tabella F.1.Eventualmente si può anche leggere il contenuto del file ‘/usr/src/linux/drivers/net/README1.PLIP’ che è fornito insieme al kernel Linux.

95.4.1 Problemi con le porte paralleleLe porte parallele non sono tutte uguali: i problemi maggiori potrebbero presentarsi con le portedegli elaboratori portatili, o comunque quelle incorporate nella scheda madre dell’elaboratore. Inquesti casi, la loro configurazione dovrebbe essere gestita attraverso un programma contenuto nelfirmware (il BIOS) ed è importante verificare tale configurazione.

4In passato non era possibile utilizzare un kernel Linux che gestisse simultaneamente la stampa e la connessione PLIP;eventualmente si poteva risolvere il problema utilizzando dei moduli da caricare e scaricare al momento del bisogno.Attualmente, i nuovi kernel Linux possono gestire simultaneamente la stampa e la connessione PLIP, senza bisogno diattuare trucchi particolari.

Page 34:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1092 Hardware di rete

La configurazione riguarda generalmente l’indirizzo di I/O, eventualmente anche il numero diIRQ. Alcune configurazioni potrebbero prevedere l’impostazione della porta come «normale» o«bidirezionale». Se si può scegliere, è opportuno che la porta sia normale.

A questo punto si pone il problema del riconoscimento della porta da parte del kernel. Se il fileprincipale del kernel incorpora la gestione del protocollo PLIP, l’interfaccia dovrebbe essere indi-viduata automaticamente e in modo corretto (riguardo alla sua configurazione effettiva). Eventual-mente si può inviare un messaggio al kernel Linux attraverso il meccanismo dei parametri di avvio(capitolo 27). Anche nel caso dell’utilizzo di un modulo, il rilevamento dell’interfaccia dovrebbeavvenire in modo corretto. Però ci sono situazioni in cui ciò non può avvenire, specialmente nelcaso di utilizzo di dischetti di installazione di una distribuzione GNU/Linux (capitolo 28).

In tutti i casi in cui è necessario fornire al kernel le caratteristiche hardware dell’interfaccia paral-lela, è indispensabile indicare sia l’indirizzo di I/O che il numero di IRQ. Se si indica un numero diIRQ errato, si rischia di ottenere il funzionamento intermittente dell’interfaccia, cosa che magaripotrebbe fare pensare ad altri problemi.

95.5 Riferimenti

• Paul Gortmaker, Ethernet-HOWTO�

http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html �

• S. Gai, P. L. Montessoro, P. Nicoletti, Reti locali: dal cablaggio all’internetworking�

http://www.polito.it/˜silvano/�

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 35:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 96Definizione dei protocolli e dei ser-viziPrima ancora di analizzare sommariamente il funzionamento dei protocolli IP, è opportuno portaremomentaneamente l’attenzione a due file di configurazione che di solito sono già stati predisposticorrettamente dalle varie distribuzioni GNU/Linux: si tratta di ‘/etc/protocols’ e ‘/etc/services’. Normalmente non ci si accorge nemmeno della loro presenza, ma la loro mancanza,o l’indicazione errata di alcune voci pregiudica seriamente il funzionamento elementare delle retiIP.

96.1 Protocolli di trasportoI protocolli di comunicazione possono inserirsi a diversi livelli nella stratificazione del modellodi rete presentato nel capitolo 94. Quelli riferiti al livello di trasporto sono classificati nel file ‘/etc/protocols’ che alcuni programmi hanno la necessità di consultare.

Il file ‘/etc/protocols’ descrive i vari protocolli disponibili all’interno del sistema TCP/IP.Di solito non c’è la necessità di modificare questo file che però deve essere presente quando siutilizzano programmi che accedono alla rete. Segue un esempio di questo file.

ip 0 IP # internet protocol, pseudo prot. number

icmp 1 ICMP # internet control message protocol

igmp 2 IGMP # Internet Group Management

ggp 3 GGP # gateway-gateway protocol

ipencap 4 IP-ENCAP # IP encapsulated in IP (officially "IP")

st 5 ST # ST datagram mode

tcp 6 TCP # transmission control protocol

egp 8 EGP # exterior gateway protocol

pup 12 PUP # PARC universal packet protocol

udp 17 UDP # user datagram protocol

hmp 20 HMP # host monitoring protocol

xns-idp 22 XNS-IDP # Xerox NS IDP

rdp 27 RDP # "reliable datagram" protocol

iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4

xtp 36 XTP # Xpress Transfer Protocol

ddp 37 DDP # Datagram Delivery Protocol

idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport

rspf 73 RSPF # Radio Shortest Path First.

vmtp 81 VMTP # Versatile Message Transport

ospf 89 OSPFIGP # Open Shortest Path First IGP

ipip 94 IPIP # Yet Another IP encapsulation

encap 98 ENCAP # Yet Another IP encapsulation

ipv6 41 IPv6 # IPv6

ipv6-route 43 IPv6-Route # Routing Header for IPv6

ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6

ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6

ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6

icmpv6 58 IPv6-ICMP # ICMP for IPv6

ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6

ipv6-opts 60 IPv6-Opts # Destination Options for IPv6

1093

Page 36:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1094 Definizione dei protocolli e dei servizi

96.2 ServiziI protocolli TCP e UDP inseriscono il concetto di porta di comunicazione. Per la precisione, ognipacchetto TCP o UDP, contiene una porta mittente e una porta di destinazione. Naturalmente, allivello IP vengono anche aggiunte le indicazioni dell’indirizzo IP del mittente e del destinatario.

Perché un pacchetto possa essere ricevuto da un destinatario, occorre che questo sia in ascoltoproprio della porta prevista, altrimenti il pacchetto in questione non raggiunge il suo obiettivo. Ingenerale, un’applicazione che deve svolgere un servizio attraverso la rete, starà in ascolto sem-pre della stessa porta, in modo tale che chi vuole accedervi sappia come farlo. Dall’altra parte,un’applicazione che vuole accedere a un servizio, aprirà per conto proprio una porta locale qual-siasi, purché non utilizzata, iniziando poi a inviare dei pacchetti TCP o UDP (in base alle caratte-ristiche del protocollo al livello superiore) presso l’indirizzo e la porta del servizio. Si intende chel’applicazione che svolge il servizio saprà a quale porta rispondere perché questa informazione èparte dei pacchetti TCP e UDP.

.----------. .----------.

| | Pacchetto UDP o TCP da «A:n» diretto a «B:m» | |

| Nodo A | - - - - - - - - - - - - - - - - - - - - - - - - > | Nodo B |

| | | |

‘----------’ ‘----------’

Figura 96.1. Viaggio di un pacchetto UDP o TCP: «n» è la porta di origine; «m» è la porta didestinazione.

.----------. .----------.

| | Pacchetti di andata da «A:n» diretti a «B:m» | |

| Nodo A | - - - - - - - - - - - - - - - - - - - - - - - - > | Nodo B |

| | | |

‘----------’ ‘----------’

ˆ V

| Pacchetti di ritorno da «B:m» diretti a «A:n» |

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -’

Figura 96.2. Andata e ritorno per le connessioni che prevedono l’uso delle porte: «n» è la portausata nel nodo «A»; «m» è la porta usata nel nodo «B».

I servizi di rete sono offerti utilizzano protocolli al livello quinto del modello OSI/ISO, ovveroal livello di sessione, utilizzando nello strato inferiore (TCP o UDP) delle porte ben conosciute,che tendono così a confondersi con il servizio stesso. Per esempio, la porta 23 viene usata per ilprotocollo TELNET, pertanto tende a essere identificata con il servizio corrispondente.

Generalmente, nei sistemi Unix le porte che gli applicativi devono utilizzare per stare in ascoltoin attesa di richieste di connessione sono elencate nel file ‘/etc/services’. Il file in questioneserve anche ai programmi che accedono ai servizi (sia locali che remoti), per sapere quale portainterpellare.

Il file ‘/etc/services’ viene utilizzato in particolare da ‘inetd’, per interpretare corret-tamente i nomi di tali servizi indicati nel suo file di configurazione ‘/etc/inetd.conf’

(103.2.1).

Page 37:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Definizione dei protocolli e dei servizi 1095

Cliente HTTP Servente HTTP

.----------. .----------.

| | Pacchetti di andata da «A:1083» diretti a «B:80» | |

| Nodo A | - - - - - - - - - - - - - - - - - - - - - - - - > | Nodo B |

| | | |

‘----------’ ‘----------’

ˆ V

| Pacchetti di ritorno da «B:80» diretti a «A:1083» |

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -’

Figura 96.3. Esempio di ciò che accade quando dal nodo «A» un processo instaura unaconnessione HTTP con il nodo «B»; in particolare, in questo caso il processo in questione utilizza

localmente la porta 1 083.

Convenzionalmente, nel file ‘/etc/services’ si annotano sempre due righe per ogni porta:una nel caso di utilizzo del protocollo TCP e l’altra nel caso di UDP. Questo si fa anche quandoil servizio corrispondente fa sempre uso sempre solo di uno dei due protocolli.

#

# services This file describes the various services that are

# available from the TCP/IP subsystem. It should be

# consulted instead of using the numbers in the ARPA

# include files, or, worse, just guessing them.

#

# Version: @(#)/etc/services 2.00 04/30/93

#

# Author: Fred N. van Kempen, <[email protected]>

#

tcpmux 1/tcp # rfc-1078

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp users

daytime 13/tcp

daytime 13/udp

netstat 15/tcp

qotd 17/tcp quote

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

ftp 21/tcp

telnet 23/tcp

smtp 25/tcp mail

time 37/tcp timserver

time 37/udp timserver

rlp 39/udp resource # resource location

name 42/udp nameserver

whois 43/tcp nicname # usually to sri-nic

domain 53/tcp

domain 53/udp

Page 38:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1096 Definizione dei protocolli e dei servizi

mtp 57/tcp # deprecated

bootps 67/udp # bootp server

bootpc 68/udp # bootp client

tftp 69/udp

gopher 70/tcp # gopher server

rje 77/tcp

finger 79/tcp

http 80/tcp # www is used by some broken

www 80/tcp # progs, http is more correct

link 87/tcp ttylink

kerberos 88/udp kdc # Kerberos authentication--udp

kerberos 88/tcp kdc # Kerberos authentication--tcp

supdup 95/tcp # BSD supdupd(8)

hostnames 101/tcp hostname # usually to sri-nic

iso-tsap 102/tcp

x400 103/tcp # ISO Mail

x400-snd 104/tcp

csnet-ns 105/tcp

pop-2 109/tcp # PostOffice V.2

pop-3 110/tcp # PostOffice V.3

pop 110/tcp # PostOffice V.3

sunrpc 111/tcp

sunrpc 111/tcp portmapper # RPC 4.0 portmapper UDP

sunrpc 111/udp

sunrpc 111/udp portmapper # RPC 4.0 portmapper TCP

auth 113/tcp ident # User Verification

sftp 115/tcp

uucp-path 117/tcp

nntp 119/tcp usenet # Network News Transfer

ntp 123/tcp # Network Time Protocol

ntp 123/udp # Network Time Protocol

netbios-ns 137/tcp nbns

netbios-ns 137/udp nbns

netbios-dgm 138/tcp nbdgm

netbios-dgm 138/udp nbdgm

netbios-ssn 139/tcp nbssn

imap 143/tcp # imap network mail protocol

NeWS 144/tcp news # Window System

snmp 161/udp

snmp-trap 162/udp

exec 512/tcp # BSD rexecd(8)

biff 512/udp comsat

login 513/tcp # BSD rlogind(8)

who 513/udp whod # BSD rwhod(8)

shell 514/tcp cmd # BSD rshd(8)

syslog 514/udp # BSD syslogd(8)

printer 515/tcp spooler # BSD lpd(8)

talk 517/udp # BSD talkd(8)

ntalk 518/udp # SunOS talkd(8)

efs 520/tcp # for LucasFilm

route 520/udp router routed # 521/udp too

timed 525/udp timeserver

tempo 526/tcp newdate

courier 530/tcp rpc # experimental

Page 39:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Definizione dei protocolli e dei servizi 1097

conference 531/tcp chat

netnews 532/tcp readnews

netwall 533/udp # -for emergency broadcasts

uucp 540/tcp uucpd # BSD uucpd(8) UUCP service

klogin 543/tcp # Kerberos authenticated rlogin

kshell 544/tcp cmd # and remote shell

new-rwho 550/udp new-who # experimental

remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem

rmonitor 560/udp rmonitord # experimental

monitor 561/udp # experimental

pcserver 600/tcp # ECD Integrated PC board srvr

mount 635/udp # NFS Mount Service

pcnfs 640/udp # PC-NFS DOS Authentication

bwnfs 650/udp # BW-NFS DOS Authentication

kerberos-adm 749/tcp # Kerberos 5 admin/changepw

kerberos-adm 749/udp # Kerberos 5 admin/changepw

kerberos-sec 750/udp # Kerberos authentication--udp

kerberos-sec 750/tcp # Kerberos authentication--tcp

kerberos_master 751/udp # Kerberos authentication

kerberos_master 751/tcp # Kerberos authentication

krb5_prop 754/tcp # Kerberos slave propagation

listen 1025/tcp listener RFS remote_file_sharing

nterm 1026/tcp remote_login network_terminal

kpop 1109/tcp # Pop with Kerberos

ingreslock 1524/tcp

tnet 1600/tcp # transputer net daemon

cfinger 2003/tcp # GNU finger

nfs 2049/udp # NFS File Service

eklogin 2105/tcp # Kerberos encrypted rlogin

krb524 4444/tcp # Kerberos 5 to 4 ticket xlator

irc 6667/tcp # Internet Relay Chat

dos 7000/tcp msdos

# End of services.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 40:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 97IPv4: configurazione, instrada-mento e verificheLa connessione in una rete basata su IP necessita inizialmente dell’assegnazione di indirizzi IP equindi di un instradamento per determinare quale strada, o itinerario, devono prendere i pacchettiper raggiungere la destinazione.

Nome Descrizioneifconfig Configurazione delle interfacce di rete.route Definizione degli instradamenti.ping Richiesta di echo da un nodo.traceroute Tracciamento del percorso verso una destinazione.ipchains Amministrazione delle funzionalità di filtro di pacchetto del kernel Linux.

Tabella 97.1. Riepilogo dei programmi e dei file descritti in questo capitolo per la gestione degliinstradamenti.

Generalmente, ma non necessariamente, valgono queste regole:

• ogni interfaccia di rete ha un proprio indirizzo IP;

• un’interfaccia di rete di un elaboratore può comunicare con un’interfaccia di un altro elabo-ratore solo se queste sono fisicamente connesse alla stessa rete;

• un’interfaccia di rete di un elaboratore può comunicare con un’interfaccia di un altro elabo-ratore solo se gli indirizzi di queste interfacce appartengono alla stessa rete.

Per poter gestire una connessione in rete di qualunque tipo, occorre un kernel predisposto in mododa attivarne la gestione (sezioni 26.2.4 e 26.2.9).

È necessario anche provvedere alla gestione delle interfacce di rete particolari che si utilizzano.Ciò può essere fatto sia attraverso la realizzazione di un kernel monolitico, sia modulare. Perquanto riguarda la gestione specifica di ogni singola scheda, si punta preferibilmente all’utilizzodi moduli.

97.1 Configurazione delle interfacce di reteLa configurazione di un’interfaccia implica essenzialmente l’attribuzione di un indirizzo IP. Nor-malmente, molte altre caratteristiche vengono ignorate perché i valori predefiniti sono solitamentesufficienti a ottenere un funzionamento corretto.

Di norma, la configurazione di un’interfaccia di rete avviene attraverso Ifconfig 1 (InterfaceConfiguration), a cui corrisponde l’eseguibile ‘ifconfig’.

97.1.1 # ifconfigifconfig [interfaccia]ifconfig [interfaccia... [famiglia_indirizzamento] [indirizzo] opzioni]‘ifconfig’ viene utilizzato per attivare e mantenere il sistema delle interfacce di rete residentenel kernel. Viene utilizzato al momento dell’avvio per configurare la maggior parte di questosistema in modo da portarlo a un livello di funzionamento. Dopo, viene utilizzato di solito solo ascopo diagnostico o quando sono necessarie delle regolazioni. Se non vengono forniti argomenti,

1net-tools GNU GPL

1098

Page 41:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1099

oppure se vengono indicate solo delle interfacce, ‘ifconfig’ visualizza semplicemente lo statodelle interfacce specificate, oppure di tutte se non sono state indicate.

Interfacce

L’interfaccia da configurare viene identificata attraverso il suo nome. Contrariamente aquanto si fa di solito nei sistemi Unix, non si utilizza un file di dispositivo contenuto nelladirectory ‘/dev/’. Alcuni nomi di interfaccia di rete sono elencati nella tabella 95.1.

Famiglie di indirizzamento

Il primo argomento successivo al nome di interfaccia può essere la sigla identificativa di unafamiglia di indirizzamento, ovvero di un sistema di protocolli di comunicazione particolare.A seconda del tipo di questo, cambia il modo di definire gli indirizzi che si attribuiscono alleinterfacce. Se questo non viene specificato, come si fa di solito, si intende fare riferimentoal sistema di protocolli che si basano su IPv4.

Le sigle utilizzabili sono quelle seguenti.

• ‘inet’ – IPv4 (predefinito);

• ‘inet6’ – IPv6;

• ‘ax25’ – AMPR Packet Radio;

• ‘ddp’ – AppleTalk Phase 2;

• ‘ipx’ – Novell IPX;

• ‘netrom’ – AMPR Packet Radio.

Indirizzo

L’indirizzo è il modo con cui l’interfaccia viene riconosciuta all’interno del tipo di proto-collo particolare che si utilizza. Nel caso di IP, può essere indicato l’indirizzo IP numericoo il nome di dominio, che in questo caso sarà convertito automaticamente (sempre che ciòsia possibile) nell’indirizzo numerico corretto.

Opzioni

up | down

L’opzione ‘up’ attiva l’interfaccia. Quando all’interfaccia viene attribuito un nuovo indi-rizzo, questa viene attivata implicitamente. L’opzione ‘down’ disattiva l’interfaccia.

arp | -arp

Abilita o disabilita l’uso del protocollo ARP per questa interfaccia.

trailers | -trailers

Abilita o disabilita l’uso di trailer sui frame Ethernet. Questa funzionalità non è usataall’interno dell’attuale sistema di gestione della rete.

allmulti | -allmulti

Abilita o disabilita la modalità promiscua dell’interfaccia. Ciò permette di fare unmonitoraggio della rete attraverso applicazioni specifiche che così possono analizzare ognipacchetto che vi transita, anche se non è diretto a quella interfaccia.

metric n

Permette di specificare la metrica dell’interfaccia. Al momento non viene utilizzata questainformazione.

mtu n

Permette di specificare l’unità massima di trasferimento (MTU o Max Transfer Unit)dell’interfaccia. Per le schede Ethernet, questo valore può variare in un intervallo di 1 000-2 000 (il valore predefinito è 1 500). Per il protocollo SLIP si possono utilizzare valori

Page 42:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1100 IPv4: configurazione, instradamento e verifiche

compresi tra 200 e 4 096. È da notare però che attualmente non è possibile gestire laframmentazione IP, di conseguenza, è meglio utilizzare un MTU sufficientemente grande.

pointopoint [indirizzo_di_destinazione] | -pointopoint

Abilita o disabilita la modalità punto-punto per questa interfaccia. La connessione punto-punto è quella che avviene tra due elaboratori soltanto. Se viene indicato l’indirizzo, si trattadi quello dell’altro nodo.

netmask indirizzo_di_netmask

Stabilsce l’indirizzo IP della maschera di rete per questa interfaccia. L’indicazione dellamaschera di rete può essere omessa, in tal caso, viene utilizzato il valore predefinito che èdeterminato in base alla classe a cui appartiene l’indirizzo (A, B o C). Naturalmente, se siusa una sottorete, il valore della maschera di rete non può coincidere con quello predefinito.

irq numero_di_irq

Alcune interfacce permettono di definire il numero di IRQ in questo modo. Nella maggiorparte dei casi, ciò non è possibile.

broadcast [indirizzo] | -broadcast

Abilita o disabilita la modalità broadcast per questa interfaccia. Se abilitandola, vieneindicato l’indirizzo, si specifica l’indirizzo broadcast di questa interfaccia.

hw classe_hardware indirizzo_hardware

Solitamente, il nome di interfaccia utilizzato determina anche il tipo di hardware a cuiappartiene l’interfaccia fisica. Se il driver di interfaccia (cioè il nome usato per identificarla)è predisposto per diversi tipi di hardware, attraverso questa opzione è possibile specificareper quale tipo deve operare. I nomi delle classi hardware possono essere quelli indicati diseguito.

• ‘ether’ Ethernet;

• ‘ax25’ AMPR AX.25;

• ‘ARCnet’ AMPR Net;

• ‘netrom’ AMPR Rom.

L’indirizzo hardware deve essere indicato secondo il suo equivalente ASCII che è poi laforma usata comunemente in tutte le documentazioni.

multicast

Questa opzione permette di attivare esplicitamente la modalità multicast, anche senormalmente ciò viene determinato automaticamente in base al tipo di interfaccia utilizzato.

Esempi

# ifconfig lo 127.0.0.1

Attiva l’interfaccia ‘lo’ corrispondente al loopback con il noto indirizzo IP 127.0.0.1.

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0

Attiva l’interfaccia ‘eth0’ corrispondente alla prima scheda Ethernet, con l’indirizzo IP192.168.1.1 e la maschera di rete 255.255.255.0.

$ ifconfig eth0

Emette la situazione dell’interfaccia ‘eth0’ corrispondente alla prima scheda Ethernet.

$ ifconfig

Emette la situazione di tutte le interfacce di rete attivate.

Page 43:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1101

97.2 IndirizziUn indirizzo IP di un’interfaccia vale in quanto inserito in una rete logica, identificata da unproprio indirizzo IP. Per questo motivo, quando si assegna un indirizzo a un’interfaccia, occorreanche stabilire la rete a cui questo appartiene. Per questo si utilizza la maschera di rete, con laquale, il risultato di indirizzo_di_interfaccia AND maschera_di_rete genera l’indirizzo dellarete.

Quando si vuole utilizzare ‘ifconfig’ per definire questi indirizzi, si può usare la sintassi sem-plificata seguente:

ifconfig interfaccia indirizzo_di_interfaccia [netmask maschera_di_rete]Come si vede, l’indicazione della maschera di rete è facoltativa. Dal momento che gli indirizziIP sono stati classificati e per ogni classe è definita una maschera di rete, se questa indicazionemanca, si fa riferimento ai valori predefiniti in base alla classe di appartenenza dell’indirizzoutilizzato.

L’attribuzione di un indirizzo definisce il recapito di quell’interfaccia, cioè si intende stabilire perquale indirizzo IP quella interfaccia debba rispondere. Il fatto di avere stabilito l’indirizzo, nondetermina automaticamente il modo con cui quella interfaccia particolare possa essere raggiunta.

‘ifconfig’ consente anche di controllare la configurazione delle interfacce di rete. Per questo siutilizza la sintassi seguente:

ifconfig [interfaccia]Se non viene specificato il nome di un’interfaccia, si ottiene la situazione di tutte quelle presentie attive.

.---------------------.

| |

| Elaboratore |

| |

| 127.0.0.1 lo |

| |

‘---------------------’

192.168.1.1 | eth0

|

|

| rete 192.168.1.0

- - - - - - - - - - - -*- - - - - - - - - - - - -

Figura 97.1. Elaboratore collocato in una rete locale, secondo gli esempi che vengono mostrati.

.---------------. .---------------.

| Elaboratore A | plip1 192.168.7.2 | Elaboratore B |

| |---------------------------------------------| |

| 127.0.0.1 lo | 192.168.7.1 plip1 | 127.0.0.1 lo |

‘---------------’ ‘---------------’

Figura 97.2. Due elaboratori collegati con una connessione punto-punto (PLIP).

97.2.1 LoopbackUn elaboratore connesso o meno a una rete fisica vera e propria, deve avere una connessionevirtuale a una rete immaginaria interna allo stesso elaboratore. A questa rete virtuale inesistente si

Page 44:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1102 IPv4: configurazione, instradamento e verifiche

accede per mezzo di un’interfaccia immaginaria, denominata ‘lo’, e l’indirizzo utilizzato è semprelo stesso, 127.0.0.1, ma ugualmente deve essere indicato esplicitamente.

# ifconfig lo 127.0.0.1

La maschera di rete può essere tranquillamente omessa, in ogni caso è 255.0.0.0. Il risultatodell’esempio appena visto dovrebbe generare la configurazione seguente:

$ ifconfig lo[ Invio ]

lo Link encap:Local Loopback

inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0

UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1

...

È indispensabile che sia presente l’interfaccia ‘lo’ per il buon funzionamento del sistema, so-prattutto quando l’elaboratore ha già una connessione a una rete reale. Infatti, si potrebbe esseretentati di non definire tale interfaccia, oppure di non attivare l’instradamento relativo, quandosono presenti altre interfacce fisiche reali. Ciò potrebbe provocare un malfunzionamento inter-mittente della rete.

97.2.2 EthernetLa configurazione degli indirizzi di una scheda di rete Ethernet è la cosa più comune: si tratta sem-plicemente di abbinare all’interfaccia il suo indirizzo stabilendo il proprio ambito di competenza,attraverso la maschera di rete. Per esempio,

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0

assegna l’indirizzo 192.168.1.1 all’interfaccia ‘eth0’, cioè la prima scheda Ethernet, che appar-tiene alla rete 192.168.1.0. Infatti, 192.168.1.1 AND 255.255.255.0 = 192.168.1.0.

In questo caso, dal momento che l’indirizzo 192.168.1.1 appartiene alla classe C, la maschera direte predefinita sarebbe stata la stessa di quella che è stata indicata esplicitamente.

Il risultato dell’esempio appena visto dovrebbe generare la configurazione seguente:

$ ifconfig eth0[ Invio ]

eth0 Link encap:10Mbps Ethernet HWaddr 00:4F:56:00:11:87

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

...

97.2.3 PLIPLa connessione PLIP, che si ottiene collegando due elaboratori con un apposito cavo attraverso leporte parallele, è di tipo punto-punto, cioè si possono collegare solo due punti alla volta. In lineadi massima si può dire che questo tipo di connessione implichi la specificazione di entrambi gli in-dirizzi dei due punti collegati, cioè delle rispettive interfacce. Tuttavia, la configurazione effettivadipende anche dalle strategie che si vogliono adottare. Qui si propongono alcune alternative.

97.2.3.1 PLIP come sottorete

Il modo intuitivamente più semplice di configurare una connessione PLIP è quello di trattarlacome se fosse una normale sottorete. L’esempio seguente mostra questa possibilità, dichiarandouna maschera di rete che impegna un ottetto completo per connettere i due nodi.

Page 45:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1103

# ifconfig plip1 192.168.7.1 pointopoint 192.168.7.2 (segue)

netmask 255.255.255.0

Nell’esempio, si assegna l’indirizzo 192.168.7.1 all’interfaccia parallela ‘plip1’ locale e si sta-bilisce l’indirizzo 192.168.7.2 per l’altro capo della comunicazione. Il risultato è che si dovrebbegenerare la configurazione seguente:2

$ ifconfig plip1[ Invio ]

plip1 Link encap:Ethernet HWaddr FC:FC:C0:A8:64:84

inet addr:192.168.7.1 P-t-P:192.168.7.2 Mask:255.255.255.0

UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1

...

Dall’altro capo della connessione si deve eseguire la configurazione opposta. Per seguirel’esempio mostrato, si deve usare il comando seguente:

# ifconfig plip1 192.168.7.2 pointopoint 192.168.7.1 (segue)

netmask 255.255.255.0

In alternativa, dal momento che si tratta di una connessione di due soli punti, non è indispensabileindicare precisamente l’indirizzo all’altro capo: si può fare in modo che venga accettato qualunqueindirizzo, facilitando la configurazione.

# ifconfig plip1 192.168.7.1 pointopoint 0.0.0.0 netmask 255.255.255.0

L’esempio che si vede sopra è lo stesso già proposto con la variante dell’indicazione dell’indirizzoall’altro capo. In questo caso, 0.0.0.0 fa in modo che venga accettata la connessione con qualunqueindirizzo.

$ ifconfig plip1[ Invio ]

plip1 Link encap:Ethernet HWaddr FC:FC:C0:A8:64:84

inet addr:192.168.7.1 P-t-P:0.0.0.0 Mask:255.255.255.0

UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1

...

Dall’altro capo della connessione ci si comporta in modo analogo, come nell’esempio seguente:

# ifconfig plip1 192.168.7.2 pointopoint 0.0.0.0 netmask 255.255.255.0

97.2.3.2 PLIP senza sprecare indirizzi

Il modo formalmente più corretto di configurare una connessione PLIP è quello di specificare unamaschera di rete che non impegni altri indirizzi se non quelli indicati. In pratica, si tratta si usarela maschera 255.255.255.255, che tra l’altro è quella predefinita in questo tipo di connessione.

# ifconfig plip1 192.168.7.1 pointopoint 192.168.7.2 (segue)

netmask 255.255.255.255

L’esempio mostra una configurazione in cui si specificano gli indirizzi IP di entrambi i punti.In alternativa, anche in questo caso, si può fare a meno di indicare espressamente l’indirizzodell’altro capo, come nell’esempio seguente:

# ifconfig plip1 192.168.7.1 pointopoint 0.0.0.0 netmask255.255.255.255

2La connessione PLIP non ha niente a che fare con le interfacce Ethernet, tuttavia il programma ‘ifconfig’ fa apparirele interfacce PLIP come se fossero Ethernet, con la differenza che si tratta di una connessione punto-punto.

Page 46:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1104 IPv4: configurazione, instradamento e verifiche

Il vantaggio di usare questo tipo di configurazione sta nel risparmio di indirizzi; lo svantaggiosta nella necessità di stabilire instradamenti specifici per ognuno dei due punti (questo particolareverrà chiarito in seguito).

97.3 InstradamentoIn una rete elementare, in cui ogni elaboratore ha una sola scheda di rete e tutte le schede sonoconnesse con lo stesso cavo, potrebbe sembrare strana la necessità di dover stabilire un percorsoper l’instradamento dei dati sulla rete.

In una rete IPv4 non è così: per qualunque connessione possibile è necessario stabilire il percorso,anche quando si tratta di connettersi con l’interfaccia immaginaria loopback.

Ogni elaboratore che utilizza la rete ha una sola necessità: quella di sapere quali percorsi dipartenza siano possibili, in funzione degli indirizzi utilizzati. Gli eventuali percorsi successivi,vengono definiti da altri elaboratori nella rete. Si tratta di costruire la cosiddetta tabella diinstradamento, attraverso la quale, ogni elaboratore sa quale strada deve prendere un pacchetto apartire da quella posizione.

Gli instradamenti, cioè la compilazione di questa tabella di instradamento, vengono stabilitiattraverso Route, 3 a cui corrisponde in pratica l’eseguibile ‘route’.

97.3.1 # routeroute [opzioni]‘route’ permette di gestire la tabella di instradamento del kernel. In particolare, permette didefinire gli instradamenti statici a nodi specifici, o a reti, attraverso un’interfaccia (attivataprecedentemente con ‘ifconfig’).

La sintassi di ‘route’ può articolarsi in diversi modi a seconda del tipo di azione da compiere.

Analisi della tabella di instradamento

route [-v] [-n] [-e | -ee]Con questa sintassi è possibile visualizzare (attraverso lo standard output) la tabella diinstradamento. Generalmente, per questo scopo, l’uso normale è proprio quello di ‘route’

senza argomenti.

Aggiunta di un nuovo instradamento

route [-v] add [-net|-host] destinazione [netmask maschera_di_rete] [gw router][metric valore_metrico] [mss dimensione] [window dimensione] [irtt durata] [reject][mod] [dyn] [reinstate] [[dev] interfaccia]L’inserimento di una nuova voce nella tabella di instradamento avviene per mezzodell’opzione ‘add’ e dell’indicazione della destinazione da raggiungere. L’indicazionedell’interfaccia è facoltativa.

Eliminazione di un instradamento

route [-v] del [-net|-host] destinazione [netmask maschera_di_rete] [gw router][metric valore_metrico] [[dev] interfaccia]L’eliminazione di una voce della tabella di instradamento avviene per mezzo dell’opzione‘del’ e dell’indicazione della destinazione che prima veniva raggiunta. L’indicazionedell’interfaccia è facoltativa.

3net-tools GNU GPL

Page 47:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1105

Opzioni

-v

Dettagliato.

-n

Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodie delle reti. Questo tipo di approccio potrebbe essere utile specialmente quando si hannodifficoltà ad accedere a un servizio di risoluzione dei nomi, o comunque quando si vuoleavere la situazione completamente sotto controllo.

-e

Utilizza ‘netstat’ per visualizzare la tabella di instradamento.

-ee

Funziona come l’opzione ‘-e’, ma il risultato è più dettagliato e si distribuisce in un numerodi colonne maggiore.

-net destinazione

L’indirizzo indicato nella destinazione fa riferimento a una rete. L’indirizzo può essereindicato in forma numerica o attraverso un nome di dominio; in questo ultimo caso, latraduzione avviene in base al contenuto del file ‘/etc/networks’.

-host destinazione

L’indirizzo indicato nella destinazione fa riferimento a un nodo. L’indirizzo può essere in-dicato in forma numerica o attraverso un nome di dominio.

netmask maschera_di_rete

Permette di specificare la maschera di rete quando si sta facendo riferimento a un indirizzodi rete. Quando si inserisce una voce riferita a un nodo singolo, questa indicazione non hasenso. Quando la maschera di rete è un dato richiesto, se non viene inserito si assume ilvalore predefinito che dipende dalla classe a cui appartiene l’indirizzo indicato.

gw router

Fa in modo che i pacchetti destinati alla rete o al nodo per il quale si sta indicandol’instradamento, passino per il router specificato. Per questo, occorre che l’instradamentoverso l’elaboratore che funge da router sia già stato definito precedentemente e in modostatico.

Normalmente, l’indirizzo utilizzato come router riguarda un’interfaccia collocata in un altronodo. Eventualmente, per mantenere la compatibilità con Unix BSD, è possibile specifi-care un’interfaccia locale, intendendo così che il traffico per l’indirizzo di destinazione deveavvenire utilizzando quella interfaccia.

metric valore_metrico

Permette di definire il valore metrico dell’instradamento e viene utilizzato dai demoni che sioccupano dell’instradamento dinamico per determinare il costo di una strada, o meglio perpoter decidere il percorso migliore.

mss dimensione

Maximum Segment Size. Permette di definire la dimensione massima, in byte, di un seg-mento per una connessione TCP attraverso quell’instradamento. Viene usato solo per unaregolazione fine della configurazione dell’instradamento.

window dimensione

Permette di definire la dimensione della finestra per le connessioni TCP attraversol’instradamento specificato. Viene usato quasi esclusivamente nelle reti AX.25.

Page 48:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1106 IPv4: configurazione, instradamento e verifiche

irtt durata

Initial Round Trip Time. Permette di definire la durata del round trip iniziale per leconnessioni TCP sull’instradamento specificato. Questa informazione viene utilizzatasolitamente solo nelle reti AX.25. Il valore viene espresso in millisecondi con un intervallopossibile di 1-12 000. Se viene omesso, il valore predefinito è di 300 ms.

reject

Permette di impedire l’utilizzo di un instradamento.

mod

dyn

reinstate

Queste opzioni permettono di installare un instradamento dinamico o modificato. In pratica,vengono utilizzati solo da un demone per l’instradamento. Lo scopo di queste opzioni èesclusivamente diagnostico.

[dev] interfaccia

Permette di definire esplicitamente l’interfaccia da utilizzare per un certo instradamento.Solitamente, questa informazione non è necessaria perché il kernel riesce a determinarel’interfaccia in base alla configurazione delle stesse.

È importante che questa indicazione appaia alla fine della riga di comando, in questo modo,il parametro ‘dev’, che precede il nome dell’interfaccia, è solo facoltativo.

Analisi del risultato

La tabella di instradamento che si ottiene è strutturata in diverse colonne il cui significatoviene descritto nella tabella 97.2.

Nome DescrizioneDestination La rete o il nodo di destinazione.Gateway Il router.Genmask In linea di massima corrisponde alla maschera di rete.Flags Indica diversi tipi di informazioni utilizzando lettere o simboli.Metric La distanza o il costo della strada.Ref Il numero di riferimenti all’instradamento.Use Conteggio del numero di volte in cui la voce è stata visionata.Iface Il nome dell’interfaccia da cui partono i pacchetti IP.MSS Maximum Segment Size per le connessioni TCP.Window Dimensione della finestra per le connessioni TCP.irtt Initial Round Trip Time.

Tabella 97.2. Intestazioni della tabella di instradamento.

In particolare, meritano attenzione le colonne seguenti:

• ‘Gateway’

se appare un asterisco (‘*’) significa che non si tratta di un instradamento attraverso unrouter;

• ‘Genmask’

in generale è la maschera di rete, in particolare, se è un instradamento verso unnodo appare 255.255.255.255, se invece è l’instradamento predefinito appare 0.0.0.0(‘default’);

• ‘Metric’

rappresenta la distanza (espressa solitamente in hop o salti) per raggiungere ladestinazione;

Page 49:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1107

• ‘Ref’

non viene utilizzata questa informazione dal kernel Linux e di conseguenza,l’informazione appare sempre azzerata.

I tipi di informazioni che possono essere rappresentati nella colonna ‘Flags’ sono elencatinella tabella 97.3.

Simbolo DescrizioneU L’instradamento è attivo.H L’indirizzo indicato fa riferimento a un nodo.G Viene utilizzato un router.R Instradamento reintegrato (instradamento dinamico).D Instradamento installato dinamicamente da un demone o attraverso ridirezione.M Instradamento modificato da un demone o attraverso ridirezione.! Instradamento impedito (opzione ‘reject’).

Tabella 97.3. Significato delle lettere e dei simboli utilizzati nella colonna ‘Flags’ della tabella diinstradamento.

Esempi

# route add -host 127.0.0.1 dev lo

Attiva l’instradamento verso l’interfaccia locale loopback.

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

Attiva l’instradamento della rete 192.168.1.0 che utilizza la maschera di rete 255.255.255.0,specificando che riguarda l’interfaccia di rete ‘eth0’.

# route add -net 192.168.2.0 netmask 255.255.255.0 gw192.168.1.254

Attiva l’instradamento della rete 192.168.2.0 che utilizza la maschera di rete 255.255.255.0,attraverso il router 192.168.1.254 per il quale era già stato definito un instradamentoprecedentemente.

# route add default gw 192.168.1.254

Attiva l’instradamento predefinito (nel caso che non siano disponibili altre possibilità)attraverso il router 192.168.1.254. La parola ‘default’ fa automaticamente riferimentoall’indirizzo IP 0.0.0.0.

# route add 10.0.0.0 netmask 255.0.0.0 reject

Definisce un instradamento il cui accesso deve essere impedito.

$ route

Mostra la tabella di instradamento attuale.

97.4 Verifica di un instradamentoLa definizione degli instradamenti, serve per stabilire un collegamento con le interfacce di altrielaboratori. Quando anche le tabelle di instradamento degli altri elaboratori sono corrette, si puòverificare che le comunicazioni siano possibili attraverso il programma ‘ping’.

‘ping’ permette di inviare una richiesta di eco a un indirizzo determinato, ovvero, a un’interfacciadeterminata. Si riesce a ottenere l’eco solo se l’instradamento verso quell’indirizzo è funzionantee, nello stesso modo, se è attivo quello di ritorno gestito a partire dall’indirizzo di destinazione.

‘ping’ permette l’utilizzo di molte opzioni, anche se di solito si indica semplicemente l’indirizzodi destinazione.

Page 50:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1108 IPv4: configurazione, instradamento e verifiche

Normalmente si procede controllando prima l’indirizzo della propria interfaccia locale, quindi,via via si tenta di raggiungere indirizzi più lontani.

97.4.1 $ pingping [opzioni] indirizzo

‘ping’ permette di inviare una richiesta di eco a un indirizzo, utilizzando il protocollo ICMP,verificando di ricevere tale eco in modo corretto. ‘ping’ viene usato quasi sempre senza opzioni,in modo da ottenere una richiesta di eco continuo, a intervalli di un secondo, che può essereinterrotta attraverso la tastiera con la combinazione [ Ctrl+c ]. Tuttavia, dal momento che ‘ping’

serve a scoprire dei problemi negli instradamenti e nel sistema di trasporto generale, può essereconveniente intervenire sulla dimensione dei pacchetti trasmessi e sul loro contenuto.

Alcune opzioni

-c quantità

Conclude il funzionamento di ‘ping’ dopo aver ricevuto il numero indicato di risposte.

-f

Invia la maggior quantità possibile di pacchetti di richiesta, limitandosi a segnalaregraficamente la quantità di quelli che risultano persi, cioè per i quali non si ottiene l’ecodi risposta. Serve per analizzare pesantemente un tratto di rete, tenendo conto che questapossibilità va usata con prudenza. Proprio a causa della pericolosità di tale opzione, questapuò essere richiesta solo dall’utente ‘root’.

-i n_secondi_pausa

Permette di stabilire una pausa, espressa in secondi, tra l’invio di una richiesta di eco e lasuccessiva. Se non viene utilizzata l’opzione ‘-f’, il valore predefinito di questa è di unsecondo.

-p stringa_di_riempimento

Permette di aggiungere un massimo di 16 byte ai pacchetti utilizzati da ‘ping’,specificandone il contenuto in esadecimale. Ciò può essere utile per verificare il passaggiodi pacchetti che hanno contenuti particolari e che per qualche ragione possono avere delledifficoltà.

-s dimensione

Permette di definire la dimensione dei pacchetti utilizzati, a cui si aggiunge l’intestazioneICMP. Il valore predefinito è di 56 byte a cui si aggiungono 8 byte di intestazione (64 intutto).

Esempi

$ ping 192.168.1.1

Invia una richiesta di eco all’indirizzo 192.168.1.1, a intervalli regolari di un secondo, finoa che riceve un segnale di interruzione.

$ ping -c 1 192.168.1.1

Invia una richiesta di eco all’indirizzo 192.168.1.1 e termina di funzionare quando riceve laprima risposta di eco.

$ ping -p ffffffff 192.168.1.1

Invia una richiesta di eco all’indirizzo 192.168.1.1, utilizzando pacchetti contenenti unaserie di 32 bit a uno (FFFFFFFF16).

$ ping -s 30000 192.168.1.1

Page 51:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1109

Invia una richiesta di eco all’indirizzo 192.168.1.1, utilizzando pacchetti lunghi 30 000 byte,oltre all’intestazione ICMP.

97.5 Instradamento attraverso un’interfacciaQuando si configura un’interfaccia di rete e gli si attribuisce l’indirizzo IP, dal momento cheesiste una maschera di rete indicata espressamente o predefinita, sembrerebbe implicito che tuttele comunicazioni dirette a quella rete debbano passare automaticamente per quell’interfaccia. Ineffetti, le cose sono, o dovrebbero essere così. Ma il percorso deve essere indicato ugualmente inmodo esplicito.

In realtà, quando si utilizza ‘route’, non è necessario fare riferimento direttamente a delleinterfacce, bastano gli indirizzi e successivamente vale il ragionamento precedente: il kernel,in base agli indirizzi utilizzati, determina l’interfaccia in grado di comunicare con questi.Naturalmente, questo ragionamento non funziona sempre e quando ci si accorge che le cose nonvanno come si vuole basta aggiungere il nome dell’interfaccia.

97.5.1 LoopbackLa definizione dell’instradamento per gli indirizzi locali di loopback è obbligatoria. Si utilizzasemplicemente il comando seguente:

# route add -net 127.0.0.0 netmask 255.0.0.0 dev lo4

La tabella di instradamento che si ottiene viene descritta di seguito.

$ route -n[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

127.0.0.0 * 255.0.0.0 U 0 0 2 lo

Dal momento che in precedenza era stato assegnato all’interfaccia ‘lo’ (loopback) l’indirizzo127.0.0.1 e la maschera di rete era 255.0.0.0 (nell’esempio visto in precedenza, la maschera di reteveniva attribuita in modo predefinito), ‘route’ potrebbe determinare da solo che tutto il trafficoper la rete 127.0.0.0 deve passare per questa interfaccia, aggiornando di conseguenza la tabella diinstradamento; tuttavia, gli automatismi non sono sempre efficaci, per cui conviene indicare ognivolta queste informazioni.

Di solito la rete 127.0.0.0 serve a raggiungere solo l’indirizzo 127.0.0.1, quindi, spesso sipreferisce inserire solo questo nella tabella di instradamento. In pratica si utilizza il comando:

# route add -host 127.0.0.1 dev lo

In questo caso non si indica la maschera di rete perché deve essere necessariamente255.255.255.255, essendo riferita a un nodo singolo.

La verifica dell’instradamento è semplice, basta provare a richiedere un eco all’interfaccia ‘lo’.

$ ping 127.0.0.1[ Invio ]

PING 127.0.0.1 (127.0.0.1): 56 data bytes

64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.4 ms

64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.3 ms

64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.3 ms

64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.3 ms

4In caso di difficoltà si può optare per l’instradamento del nodo 127.0.0.1 soltanto, come mostrato nel seguito.

Page 52:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1110 IPv4: configurazione, instradamento e verifiche

[ Ctrl+c ]

--- 127.0.0.1 ping statistics ---

4 packets transmitted, 4 packets received, 0% packet loss

round-trip min/avg/max = 0.3/0.3/0.4 ms

97.5.2 EthernetLe schede di rete Ethernet sono usate per la connessione a una rete locale e per questo sonopotenzialmente in grado di offrire un collegamento con tutti gli indirizzi che ricadono all’internodella rete logica di cui fanno parte.5 Quando si stabilisce un instradamento che utilizza questo tipodi interfaccia, è preferibile l’indicazione dell’intera rete logica a cui appartiene.6

Seguendo l’esempio visto in precedenza nella sezione che riguardava la configurazione diuna scheda Ethernet, dal momento che questa si trovava a operare nella rete 192.168.1.0,l’instradamento corretto si ottiene con il comando seguente:

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

La tabella di instradamento che ne deriva viene descritta di seguito.

$ route -n[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 * 255.255.255.0 U 0 0 1 eth0

Vale lo stesso discorso fatto nel caso dell’interfaccia di loopback: in base alla maschera di reteattribuita (esplicitamente o in modo predefinito) all’interfaccia ‘eth0’, ‘route’ determina da soloche tutto il traffico per la rete 192.168.1.0 deve passare per questa interfaccia e di conseguenzaaggiorna la tabella di instradamento.

Volendo è possibile indicare un instradamento specifico per ogni destinazione. Nell’esempioseguente si aggiunge l’instradamento per alcuni elaboratori: si deve utilizzare ‘route’ più volte.

# route add -host 192.168.1.1 dev eth0

# route add -host 192.168.1.2 dev eth0

# route add -host 192.168.1.3 dev eth0

# route add -host 192.168.1.4 dev eth0

Si ottiene una tabella di instradamento simile a quella seguente:

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.1 * 255.255.255.255 UH 0 0 0 eth0

192.168.1.2 * 255.255.255.255 UH 0 0 0 eth0

192.168.1.3 * 255.255.255.255 UH 0 0 0 eth0

192.168.1.4 * 255.255.255.255 UH 0 0 0 eth0

5Si parla di connessione broadcast.6Teoricamente sarebbe possibile indicare un instradamento per ogni elaboratore che si intende raggiungere, ma questo

è decisamente poco conveniente dal punto di vista pratico.

Page 53:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1111

Anche l’indirizzo dell’interfaccia locale, quella del proprio elaboratore, è raggiungibile solo seè stato specificato un instradamento. Quando si indicava un instradamento della rete, questaveniva inclusa automaticamente nel gruppo; nel caso si voglia indicare dettagliatamente ogniindirizzo da raggiungere, se si vuole accedere anche alla propria interfaccia, occorre inserirlanella tabella di instradamento. Nell’esempio visto sopra, viene aggiunto anche l’indirizzo192.168.1.1 per questo scopo.

La verifica dell’instradamento deve essere fatta inizialmente controllando l’interfaccia locale,quindi tentando di raggiungere l’indirizzo di un altro elaboratore sulla rete. Naturalmente, occorreche quell’elaboratore abbia una tabella di instradamento corretta.

$ ping 192.168.1.1[ Invio ]

PING 192.168.1.1 (192.168.1.1): 56 data bytes

64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.5 ms

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.4 ms

64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.4 ms

64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.4 ms

[ Ctrl+c ]

--- 192.168.1.1 ping statistics ---

4 packets transmitted, 4 packets received, 0% packet loss

round-trip min/avg/max = 0.4/0.4/0.5 ms

$ ping 192.168.1.2[ Invio ]

PING 192.168.1.2 (192.168.1.2): 56 data bytes

64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=1.1 ms

64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=1.1 ms

64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=1.1 ms

64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=1.1 ms

[ Ctrl+c ]

--- 192.168.1.2 ping statistics ---

4 packets transmitted, 4 packets received, 0% packet loss

round-trip min/avg/max = 1.1/1.1/1.1 ms

97.5.3 PLIPLa connessione PLIP, essendo di tipo punto-punto, ammette la presenza di due soli elaboratori. Inquesto senso, l’indicazione di un instradamento verso una rete non è sensato, anche se possibile.È necessario aggiungere semplicemente un instradamento verso l’indirizzo all’altro capo, ma èutile aggiungere comunque l’instradamento anche all’indirizzo locale.

È importante però fare una considerazione. Se con la configurazione dell’interfaccia èstata specificata una maschera di rete 255.255.255.255, ‘route’ richiederà l’indicazionedell’interfaccia attraverso cui inserire l’instradamento.

Seguendo l’esempio già visto, in cui l’indirizzo dell’interfaccia PLIP locale, ‘plip1’, era192.168.7.1 e quello dell’altro capo era 192.168.7.2, si può utilizzare il comando seguente:

# route add -host 192.168.7.2 dev plip1

La tabella di instradamento che si ottiene viene descritta di seguito.

$ route -n[ Invio ]

Page 54:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1112 IPv4: configurazione, instradamento e verifiche

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.7.2 * 255.255.255.255 UH 0 0 1 plip1

Come accennato, è opportuno aggiungere anche l’instradamento per l’indirizzo locale.

# route add -host 192.168.7.1 dev plip1

Per verificare gli instradamenti, si può provare come al solito con ‘ping’.

$ ping 192.168.7.2

97.5.4 Indicazione precisa dell’interfacciaNelle sezioni precedenti sono state viste solo situazioni normali, in cui non esiste la necessitàdi indicare espressamente l’interfaccia attraverso la quale deve passare il traffico per un certoindirizzo.

Potrebbe però capitare che due o più interfacce si trovino a essere collegate a reti fisiche differenti,ma aventi lo stesso indirizzo, o per le quali si possa fare confusione. Si può analizzare il casoseguente:

Un elaboratore viene utilizzato per una connessione in una rete locale Ethernet il cui indirizzo sia192.168.1.0 e contemporaneamente per una connessione PLIP con un portatile. Per l’interfacciaEthernet si vuole utilizzare l’indirizzo 192.168.1.1. Per la connessione PLIP si vogliono usareindirizzi appartenenti alla stessa rete appena vista, precisamente 192.168.1.2 per l’interfaccialocale e 192.168.1.3 per quella dell’elaboratore portatile all’altro capo.

Le interfacce vengono configurate nel modo seguente:

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0

# ifconfig plip1 192.168.1.2 pointopoint 192.168.1.3

Nel momento in cui si vogliono definire gli instradamenti, conviene fare esplicitamenteriferimento alle interfacce.

# route add -net 192.168.1.0 dev eth0

# route add -host 192.168.1.3 dev plip1

il risultato che si ottiene è il seguente:

# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.3 * 255.255.255.255 UH 0 0 0 plip1

192.168.1.0 * 255.255.255.0 U 0 0 0 eth0

Si osservi il fatto che l’instradamento verso l’indirizzo 192.168.1.3 appare per primo nellatabella degli instradamenti. È per questo che i pacchetti diretti a quell’indirizzo prendono lastrada giusta attraverso l’interfaccia ‘plip1’.

97.6 ARPNel capitolo introduttivo alle reti TCP/IP, si è accennato al protocollo ARP, con il quale siottengono le corrispondenze tra indirizzi di livello 2 (collegamento dati) e indirizzi di livello 3

Page 55:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1113

(rete), ovvero IP nel nostro caso. In particolare è stato fatto riferimento a una tabella ARP cheviene mantenuta automaticamente da ogni nodo durante il suo funzionamento.

Potrebbe essere interessante ispezionare ed eventualmente modificare il contenuto di questatabella ARP. Questo si fa con il programma ‘arp’. 7

Ci sono situazioni in cui il protocollo ARP non può funzionare e in quei casi è possibilepredisporre una tabella ARP preconfezionata attraverso la configurazione di un file: ‘/etc/ethers’.

97.6.1 # arparp opzioni

‘arp’ permette di ispezionare e di modificare la tabella ARP del sistema.

Alcune opzioni

-n | --numeric

Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi.

-a [host] | --display [host]Mostra le voci corrispondenti a un nodo particolare, oppure tutti gli abbinamenti conosciuti.

-d host | --delete host

Elimina le voci riferite al nodo indicato.

-s host indirizzo_fisico

Crea una voce nella tabella ARP, abbinando l’indirizzo di un nodo a un indirizzo fisico(generalmente si tratta di un indirizzo Ethernet).

-f file | --file file

Indica un file da utilizzare per caricare delle voci nella tabella ARP. Generalmente, quandole interfacce sono di tipo Ethernet, questo file è rappresentato da ‘/etc/ethers’.

Esempi

# arp -a

Elenca tutte le voci accumulate nella tabella ARP.

# arp -a 192.168.1.2

Mostra le voci riferite esclusivamente al nodo 192.168.1.2.

# arp -n -a 192.168.1.2

Come nell’esempio precedente, mostrando solo indirizzi numerici.

# arp -d 192.168.1.2

Cancella le voci riferite al nodo 192.168.1.2 contenute nella tabella ARP.

# arp -s 192.168.1.2 00:01:02:03:04:05

Assegna permanentemente (per la durata del funzionamento del sistema) l’indirizzoEthernet 00:01:02:03:04:05 all’indirizzo IP 192.168.1.2.

# arp -f /etc/ethers

Legge il file ‘/etc/ethers’ e utilizza il contenuto per definire delle voci permanenti nellatabella ARP.

7net-tools GNU GPL

Page 56:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1114 IPv4: configurazione, instradamento e verifiche

97.6.2 /etc/ethersIl file ‘/etc/ethers’ può essere usato per configurare a priori l’abbinamento tra indirizziEthernet (livello 2 del modello OSI/ISO) e indirizzi IP. Questo file può contenere esclusivamentedelle righe composte da due elementi: l’indirizzo IP (o il nome) corrispondente a un’interfaccia ea fianco l’indirizzo Ethernet corrispondente. Si osservi l’esempio seguente:

192.168.1.2 00:01:02:03:04:05

192.168.1.3 00:14:02:23:07:1c

192.168.1.4 00:00:03:2d:00:0b

97.7 Instradamento attraverso un routerQuando si ha la necessità di raggiungere una destinazione che non si trova a essere connessa conla rete fisica a cui si accede, c’è bisogno di un intermediario, ovvero un elaboratore connessoalla stessa rete fisica a cui accede l’elaboratore locale, che sia in grado di inoltrare i pacchettialle destinazioni richieste. Questo elaboratore è il router, anche se nel linguaggio corrente si usaprevalentemente il termine gateway che però non è esatto.

.------. .------. .------. .------.

| host | | host | | host | | host |

‘------’ ‘------’ ‘------’ ‘------’

| | | | rete locale

- - - ------*-----------*-----------*-----------*-----*---- - - -

|

|

|

.---------------------.

| |

| Router |

| |

‘---------------------’

|

|

altre destinazioni |

- - - - - - - - - - - - - -*- - - - -

Figura 97.3. Il router consente di raggiungere destinazioni al di fuori della rete fisica a cui si èconnessi.

Per poter definire un instradamento attraverso un router bisogna che prima, l’elaboratore chesvolge questa funzione, sia raggiungibile attraverso una rete locale e per mezzo di instradamentigià definiti.

La verifica di un instradamento che fa uso di un router è più delicata: si comincia con una richiestadi eco ICMP (ping) verso la propria interfaccia locale, quindi verso il router, e successivamente sitenta di raggiungere qualcosa che si trova oltre il router.

97.7.1 Router per accedere ad altre retiUna rete locale potrebbe essere articolata in sottoreti in modo da evitare di sovraffollare di trafficoun’unica rete. Per fare in modo che le sottoreti possano comunicare tra loro in caso di necessità,si devono utilizzare i router che funzionano come ponti tra una sottorete e un’altra.

In questo modo, quando si indica un instradamento che fa riferimento a un router, lo si definisceper una particolare rete logica, quella a cui il router è in grado di accedere.

Nell’esempio seguente, il router 192.168.1.254 viene utilizzato per accedere alla rete

Page 57:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1115

192.168.7.0.8

# route add -net 192.168.7.0 gw 192.168.1.254

L’instradamento verso la rete locale 192.168.1.0 era già stato definito, in modo da poterraggiungere il router stesso.

$ route -n[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 * 255.255.255.0 U 0 0 1 eth0

192.168.7.0 192.168.1.254 255.255.255.0 UG 0 0 0 eth0

Se il router è in grado di raggiungere anche altre reti, non si fa altro che inserire gli instradamentirelativi nel modo appena visto.

# route add -net 192.168.77.0 gw 192.168.1.254[ Invio ]

$ route[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 * 255.255.255.0 U 0 0 1 eth0

192.168.7.0 192.168.1.254 255.255.255.0 UG 0 0 0 eth0

192.168.77.0 192.168.1.254 255.255.255.0 UG 0 0 0 eth0

97.8 Instradamento predefinitoQuando si vuole fare riferimento a tutti gli indirizzi possibili, si utilizza il numero IP 0.0.0.0,corrispondente al nome simbolico ‘default’. Per indicare un instradamento che permette diraggiungere tutte le destinazioni che non sono state specificate diversamente, si utilizza questoindirizzo simbolico.

Da un punto di vista puramente logico, l’indirizzo 0.0.0.0 corrisponde effettivamente alla rete checomprende tutti gli indirizzi possibili, quindi un instradamento che fa riferimento alla rete 0.0.0.0è quello per «tutti gli indirizzi».

Teoricamente, è possibile utilizzare l’instradamento predefinito per accedere alla rete locale,ma questo è comunque un approccio sconsigliabile. Nell’esempio seguente si utilizza il nomesimbolico ‘default’ per indicare l’indirizzo di rete 0.0.0.0 e l’interfaccia viene definitaesplicitamente.

# route add -net default dev eth0

Anche se la maschera di rete attribuita a quell’interfaccia era quella normale della classe C,ovvero 255.255.255.0, questa dichiarazione permette di inoltrare attraverso di essa qualsiasi tipodi indirizzo. La presenza di questa maschera di rete costringe invece a indicare esplicitamentel’interfaccia di rete, altrimenti il kernel non sa a chi assegnare l’instradamento.

$ route -n[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 * 0.0.0.0 U 0 0 1 eth0

8È importante considerare il fatto che il router viene visto con l’indirizzo 192.168.1.254 sulla rete locale 192.168.1.0.L’interfaccia del router connessa con l’altra rete locale avrà un indirizzo diverso, confacente con l’indirizzo di quella rete.

Page 58:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1116 IPv4: configurazione, instradamento e verifiche

L’uso di un instradamento predefinito sulla propria rete locale, può avere effetti deleteri: l’ecoICMP (ping) può funzionare correttamente, mentre altre connessioni che richiedono protocollipiù sofisticati possono trovarsi in difficoltà. Questo è particolarmente vero in presenza diconnessioni PLIP.

L’approccio più comune consiste invece nel definire l’instradamento ‘default’ come passanteper un router: potrebbe trattarsi di un router che permette di accedere a tutte le altre sottoretiesistenti.

# route add -net default gw 192.168.1.254

L’instradamento verso la rete locale 192.168.1.0 era già stato definito in modo da poterraggiungere il router.

$ route -n[ Invio ]

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 * 255.255.255.0 U 0 0 1 eth0

0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0

97.9 RouterUn elaboratore che debba fungere da router richiede alcune caratteristiche particolari:

• un kernel compilato in modo da consentire l’inoltro di pacchetti da un’interfaccia a un’altra(nelle versioni vecchie del kernel Linux era necessario abilitare un’opzione apposita, traquelle della configurazione della rete; sezione 26.2.9);

• due o più interfacce di rete connesse ad altrettante reti fisiche differenti;

• la configurazione corretta di ogni interfaccia di rete;

• una tabella di instradamento in grado di permettere l’accesso a tutte le reti che si diramanodalle interfacce di rete installate.

Quando il kernel dispone della funzionalità di forwarding/gatewaying (nei kernel recenti èimplicita), questa può essere controllata attraverso un file del file system virtuale ‘/proc/’. Permotivi di sicurezza, alcune distribuzioni GNU/Linux sono predisposte in modo da disattivare que-sta funzionalità attraverso uno dei comandi inseriti nella procedura di inizializzazione del sistema.Per riattivare il forwarding/gatewaying, si può agire nel modo seguente:

# echo 1 > /proc/sys/net/ipv4/ip_forward

97.9.1 Router unico per tutte le retiLa situazione più comune in una piccola rete è quella in cui tutte le reti sono connesse a un routerunico. Negli esempi che seguono si fa riferimento alla situazione seguente:

• rete A Ethernet 192.168.1.0

– l’interfaccia del router connessa su questa rete è ‘eth0’

– l’indirizzo dell’interfaccia connessa su questa rete è 192.168.1.254

• rete B Ethernet 192.168.2.0

– l’interfaccia del router connessa su questa rete è ‘eth1’

Page 59:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1117

– l’indirizzo dell’interfaccia connessa su questa rete è 192.168.2.254

• connessione PLIP con il portatile 192.168.3.1

– l’interfaccia del router connessa su questa rete è ‘plip1’

– l’indirizzo dell’interfaccia connessa su questa rete è 192.168.3.254

.------. .------. .------. .------.

| host | | host | | host | | host |

‘------’ ‘------’ ‘------’ ‘------’

| | | | 192.168.1.0

- - - ------*-----------*-----------*-----------*-----*----- - - -

|

|

|

192.168.1.254 | eth0

.---------------------.

.-----------. plip1 192.168.3.254 | |

| portatile |------------------------------| Router |

‘-----------’ 192.168.3.1 plip1 | |

‘---------------------’

192.168.2.254 | eth1

|

|

|

.------. .------. .------. .------. |

| host | | host | | host | | host | |

‘------’ ‘------’ ‘------’ ‘------’ |

| | | | | 192.168.2.0

- - - ------*-----------*-----------*-----------*-----*----- - - -

Figura 97.4. Schema dell’esempio di un router connesso su due reti e a un portatile attraverso uncavo PLIP.

All’interno del router si dovranno configurare le interfacce di rete nel modo seguente:

# ifconfig eth0 192.168.1.254 netmask 255.255.255.0

# ifconfig eth1 192.168.2.254 netmask 255.255.255.0

# ifconfig plip1 192.168.3.254 pointopoint 192.168.3.1

Successivamente si devono definire gli instradamenti.

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

# route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1

# route add -host 192.168.3.1 dev plip1

# route add -host 192.168.3.254 dev plip1

Dal punto di vista del router è tutto finito. Gli altri elaboratori dovranno definire degliinstradamenti opportuni in modo da utilizzare il router quando necessario. In particolare, glielaboratori connessi alla rete A (192.168.1.0), per poter accedere agli altri elaboratori della propria

Page 60:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1118 IPv4: configurazione, instradamento e verifiche

rete locale e delle altre due raggiungibili tramite il router, dovranno inserire gli instradamentiseguenti.

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254

# route add -host 192.168.3.1 gw 192.168.1.254

Dal momento però che non si può accedere ad alcuna altra rete, si può utilizzare la rete ‘default’.Sempre dal punto di vista degli elaboratori della rete A, si possono definire gli instradamenti nelmodo seguente:

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

# route add -net default gw 192.168.1.254

Il caso dell’elaboratore portatile connesso attraverso la porta parallela con un cavo PLIP, è unpo’ particolare: è evidente che tutto il traffico debba essere filtrato dal router, a parte quellodiretto proprio al router stesso. Dal punto di vista del portatile si devono definire gli instradamentiseguenti.

# route add -host 192.168.3.254 dev plip1

# route add -host 192.168.3.1 dev plip1

# route add -net default gw 192.168.3.254

97.9.2 Router verso un altro routerQuando la rete diventa complicata, ci può essere la necessità di utilizzare più router per collegareinsieme le diverse sottoreti. In tal caso, evidentemente, la tabella di instradamento dei router sitroverà a contenere instradamenti che a loro volta utilizzano altri router.

Negli esempi che seguono si fa riferimento alla situazione seguente:

• rete A Ethernet 192.168.1.0

– l’interfaccia del router A connessa su questa rete è ‘eth0’ e ha l’indirizzo192.168.1.254

• rete R Ethernet 192.168.254.0 utilizzata esclusivamente per collegare i router

– l’interfaccia del router A connessa su questa rete è ‘eth1’ e ha l’indirizzo192.168.254.1

– l’interfaccia del router B connessa su questa rete è ‘eth1’ e ha l’indirizzo192.168.254.2

• rete B Ethernet 192.168.2.0

– l’interfaccia del router B connessa su questa rete è ‘eth0’ e ha l’indirizzo192.168.2.254

Il router A deve poter raggiungere tutte e tre le reti: sulla rete A e R è connesso direttamente,mentre per la rete B deve fare affidamento sul router B.

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

Page 61:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1119

.------. .------. .------. .------.

| host | | host | | host | | host |

‘------’ ‘------’ ‘------’ ‘------’

| | | | 192.168.1.0

- - - ------*-----------*-----------*-----------*-----*----- - - -

|

|

|

192.168.1.254 | eth0

.---------------------.

| |

| Router A |

| |

‘---------------------’

192.168.254.1 | eth1

|

192.168.254.0 (dorsale) |

- - - - ----------------------------*---------*------------- - - -

|

|

|

192.168.254.2 | eth1

.---------------------.

| |

| Router B |

| |

‘---------------------’

192.168.2.254 | eth0

|

|

|

.------. .------. .------. |

| host | | host | | host | |

‘------’ ‘------’ ‘------’ |

| | | | 192.168.2.0

- - - ------*-----------*-----------*-------*---------- - - -

Figura 97.5. Schema dell’esempio di due router connessi tra loro da una dorsale.

Page 62:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1120 IPv4: configurazione, instradamento e verifiche

# route add -net 192.168.254.0 netmask 255.255.255.0 dev eth1

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.254.2

Il router B deve agire in modo analogo.

# route add -net 192.168.2.0 netmask 255.255.255.0 dev eth0

# route add -net 192.168.254.0 netmask 255.255.255.0 dev eth1

# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.254.1

97.10 Verifica di un instradamento attraverso irouterLo strumento fondamentale per la verifica degli instradamenti è sempre ‘ping’, che è già statopresentato in questo capitolo. In presenza di router si introduce un concetto nuovo, quello delnodo da attraversare. L’attraversamento di un nodo viene definito comunemente salto, oppurehop; in particolare si pone un limite a questi salti, definito TTL (Time To Live), oltre il quale ipacchetti vengono scartati.

In pratica, i pacchetti IP contengono l’indicazione del valore TTL massimo, che vienedecrementato all’attraversamento di ogni router, a opera dello stesso. Quando si raggiunge lozero, il pacchetto viene scartato.

In situazioni particolari, il transito dei pacchetti verso una destinazione particolare potrebbe essereimpossibile, a causa del numero di salti che si frappongono e a causa del limite troppo basso delcampo TTL dei pacchetti IP. Generalmente, ‘ping’ utilizza un valore TTL di 255, cioè il massimopossibile, cosa che consente di verificare gli instradamenti al limite delle loro possibilità, ma nonpermette di prevedere il funzionamento corretto di altri tipi di connessioni, in cui si utilizzinovalori TTL inferiori.

Per verificare quale sia il percorso utilizzato effettivamente dai pacchetti per raggiungere unadestinazione, si utilizza Traceroute, 9 a cui corrisponde l’eseguibile ‘traceroute’.

97.10.1 # traceroutetraceroute [opzioni] destinazione [lunghezza]‘traceroute’ permette di verificare il percorso verso una destinazione, dando delle indicazioniche possono aiutare a comprendere in quale punto ci siano delle difficoltà.

‘traceroute’ inizia la trasmissione di pacchetti (utilizzando il protocollo UDP) con un valoreTTL molto basso. In tal modo, si aspetta di ricevere un messaggio di errore (protocollo ICMP)dal nodo in cui il valore TTL raggiunge lo zero. Incrementando lentamente il valore TTL,‘traceroute’ riesce a conoscere gli indirizzi dei nodi attraversati, purché tutto funzioni comeprevisto (cioè che i vari nodi generino correttamente i pacchetti ICMP di errore).

Quando tutto funziona come previsto, ‘traceroute’ genera un elenco di nodi di rete a partire daprimo che viene attraversato, fino all’ultimo che rappresenta la destinazione richiesta. Se in alcunipunti non si ottiene risposta, i nodi ipotizzati vengono segnalati con degli asterischi. Nell’esempioseguente, si ipotizza la presenza di due nodi sconosciuti, al terzo e quarto posto della catena.

# traceroute portatile.plip.dg

traceroute to portatile.plip.dg (192.168.254.1), 30 hops max, 40 byte packets

1 dinkel.brot.dg (192.168.1.1) 0.433 ms 0.278 ms 0.216 ms

9Traceroute BSD

Page 63:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1121

2 router.brot.dg (192.168.1.254) 2.335 ms 2.278 ms 3.216 ms

3 * * *

4 * * *

5 portatile.plip.dg (192.168.254.1) 10.654 ms 13.543 ms 11.344 ms

Sui nodi da cui non si ottiene una risposta, non si può dire nulla di certo, ma solo fare dellecongetture. In generale non si può nemmeno essere certi che si tratti effettivamente di duenodi: potrebbe essere un solo nodo, oppure più di due. La documentazione di ‘traceroute’,traceroute(8), dà delle indicazioni in più su come interpretare il risultato.

Alcune opzioni

-m ttl_massimo

Definisce il numero massimo di nodi da attraversare, per mezzo dell’indicazione del valoreTTL massimo da raggiungere. ‘traceroute’ inizia normalmente con pacchetti contenentiun valore TTL unitario e incrementa gradualmente tale valore, fino a quanto specificato conquesta opzione. Se non viene usata, il valore TTL massimo è di 30 salti.

-n

Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi.Questo tipo di approccio potrebbe essere utile specialmente quando si hanno difficoltàad accedere a un servizio di risoluzione dei nomi, o comunque quando si vuole avere lasituazione completamente sotto controllo.

-s indirizzo_di_origine

Permette di indicare espressamente l’indirizzo di origine dei pacchetti, presso cui ci siattende di ricevere la risposta alla scansione. Deve trattarsi di un indirizzo corrispondente aun’interfaccia di rete locale.

97.10.2 Individuazione delle schede di reteQuando si predispone un router si ha la necessità di utilizzare più schede di retecontemporaneamente. A parte il problema legato alla configurazione hardware delle schede, sipone poi il problema del riconoscimento di queste da parte del kernel durante l’avvio del sistema.In effetti, il kernel Linux è normalmente in grado di riconoscere automaticamente solo una schedadi rete. Oltre a questo, anche se fosse in grado di riconoscerle tutte in modo automatico, rimarrebbeil problema di garantire che i nomi di interfaccia siano sempre quelli previsti.

In pratica, con un sistema GNU/Linux, disponendo di più schede Ethernet si deve utilizzareun’istruzione opportuna da inviare al kernel all’avvio. Questo problema è già stato visto nelcapitolo dedicato all’hardware di rete (capitolo 95).

97.11 Alias IPÈ possibile attribuire a ogni interfaccia di rete più di un indirizzo IP. Ciò si ottiene definendo delleinterfacce virtuali, riferite a quelle reali, a cui poi si attribuiscono degli indirizzi IP differenti. Ilnome di un’interfaccia virtuale ha l’aspetto seguente:

interfaccia_reale:n_interfaccia_virtuale

Per esempio, ‘eth0’ è il nome reale di un’interfaccia di rete Ethernet, mentre ‘eth0:0’,‘eth0:1’,... sono una serie di interfacce virtuali riferite sempre all’interfaccia reale ‘eth0’.Naturalmente, lo stesso vale per gli altri tipi di interfaccia di rete: ‘ppp0:0’, ‘plip0:0’,...

Per ottenere la definizione di alias IP, potrebbe essere necessario predisporre un kernel adatto(sezione 26.2.9).

Page 64:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1122 IPv4: configurazione, instradamento e verifiche

.------. .------. .------. .------.

| host | | host | | host | | host |

‘------’ ‘------’ ‘------’ ‘------’

| | | |

- - - ------*---------------*-------*-------*---------------*---------- - - -

192.168.100.0 <--- | ---> 192.168.1.0

|

|

192.168.100.254 eth0:0 | eth0 192.168.1.254

|

.---------------------.

| |

| Router |

| |

‘---------------------’

Figura 97.6. Utilizzo ipotetico degli alias IP.

97.11.1 Configurazione e instradamento dell’interfacciavirtualeNel momento in cui si configura un’interfaccia virtuale, questa viene definita implicitamente.Si interviene nel modo solito attraverso ‘ifconfig’. L’esempio seguente si riferisce a quantomostrato nella figura 97.6, in cui, su una sola rete fisica si distinguono gli indirizzi di due sottoretidifferenti: 192.168.1.0 e 192.168.100.0.

# ifconfig eth0 192.168.1.254 netmask 255.255.255.0

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

# ifconfig eth0:0 192.168.100.254 netmask 255.255.255.0

# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0:0

97.12 Inoltro IP attraverso il NAT/PATUn problema simile a quello dell’instradamento attraverso i router è quello dell’inoltro di pacchettiIP attraverso un router NAT/PAT (Network Address Translation, Port Address Translation). Ladifferenza sta nel fatto che, in questo caso, il router NAT/PAT si occupa di inoltrare i pacchetti enon solo di «girarli» attraverso l’interfaccia giusta.

Il meccanismo NAT/PAT permette tipicamente a una rete locale che utilizza indirizzi IP riservatialle reti private (cioè esclusi dalla rete Internet e come tali irraggiungibili) di accedere all’esterno.In tal caso, tutto il traffico con la rete esterna viene intrattenuto (apparentemente) dal routerNAT/PAT che si occupa di inoltrare le risposte all’interno della rete locale. Ciò significa cheall’esterno appare sempre solo un elaboratore, il router NAT/PAT, mentre dall’esterno nonc’è modo di accedere agli elaboratori della rete locale perché questi non hanno un indirizzoaccessibile.

Nel caso di GNU/Linux la gestione dell’inoltro dei pacchetti attraverso il meccanismo NAT/PATrichiede che il kernel di questo sia predisposto opportunamente (sezione 26.2.9).

97.12.1 Instradamento dal router NAT/PAT e verso il router

Page 65:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IPv4: configurazione, instradamento e verifiche 1123

.------. .------.

| Host | | Host |

‘------’ ‘------’

| | Rete locale

192.168.2.0 - - - -------------*-----------*----*------------- - - -

|

.--------.

| Router |

‘--------’

Altre destinazioni locali |

192.168.1.0 - - - -------------------------*----*------------- - - -

|

| 192.168.0.0/16

.---------.

Rete esterna | |

- - - --------------------------------| NAT/PAT |

0.0.0.0/0 | |

‘---------’

Figura 97.7. Schema di utilizzo di un router NAT/PAT.

NAT/PATIl router NAT/PAT, prima di poter compiere il suo lavoro, deve essere instradato attraverso le sueinterfacce di rete. Per la precisione, seguendo l’esempio mostrato nella figura 97.7, da una partedeve essere instradato nella rete 192.168.1.0, mentre per raggiungere la rete 192.168.2.0 deveutilizzare un instradamento attraverso il router. Dall’altra parte, attraverso l’interfaccia connessaalla rete esterna, deve essere instradato sulla rete predefinita, cioè 0.0.0.0. Ciò equivale a dire chesi preparano gli instradamenti specifici delle varie parti della rete locale, e che l’instradamentoverso l’esterno corrisponde a quello predefinito.

Per il resto della rete locale, l’instradamento predefinito deve portare al router NAT/PAT, perchésolo lui è in grado di gestire il traffico con gli indirizzi esterni alla rete locale.

97.12.2 Definizione della traduzione degli indirizziIl meccanismo NAT/PAT deve essere impostato definendo i gruppi di indirizzi (cioè le sottoreti)di origine e di destinazione. L’esempio mostrato nella figura 97.7 mostra che il router NAT/PATè connesso a una rete locale scomposta in diverse sottoreti. Per la precisione si vedono duesottoreti, 192.168.1.0 e 192.168.2.0, ma si lascia intendere che potrebbero essercene altre(192.168.3.0,...). In tal senso, gli indirizzi da inoltrare all’esterno sono tutti quelli della rete192.168.0.0/255.255.0.0, dove il secondo indirizzo è la maschera di rete.

In questa situazione, la notazione appena vista viene abbreviata comunemente in 192.168.0.0/16,dove il numero 16 rappresenta la quantità di bit a uno della maschera di rete.

Dall’altra parte, gli indirizzi di destinazione sono semplicemente tutti gli altri, cosa che si indicasemplicemente con la notazione 0.0.0.0/0.0.0.0, ovvero 0.0.0.0/0.

97.12.3 Configurazione con ipchainsIl programma ‘ipchains’ è ciò che serve per attivare e controllare la gestione del NAT/PAT conun kernel Linux. Per la precisione, l’impostazione viene definita attraverso delle regole: prima didefinire qualcosa si inizia con la loro cancellazione.

Page 66:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1124 IPv4: configurazione, instradamento e verifiche

# ipchains -F

Successivamente è il caso di definire una politica predefinita (policy), ovvero il comportamentonormale per i comandi successivi, a meno di non specificare diversamente.

# ipchains -P forward ACCEPT

Infine è necessario definire come inoltrare i pacchetti tra le interfacce. Quello che segue si riferiscesempre all’esempio di figura 97.7.

# ipchains -A forward -s 192.168.0.0/16 -d 0.0.0.0/0 -j MASQ

Se con questi comandi ‘ipchains’ si «lamenta» generando delle segnalazioni di errore, èprobabile che il kernel non sia in grado di gestire l’inoltro IP, o il mascheramento (ovvero latraduzione degli indirizzi). Se invece tutto è andato bene, si possono inserire questi comandiall’interno dei file utilizzati per l’inizializzazione del sistema; per esempio ‘/etc/rc.d/rc.local’ o altro simile.

#...

/sbin/ipchains -F

/sbin/ipchains -P forward ACCEPT

/sbin/ipchains -A forward -s 192.168.0.0/16 -d 0/0 -j MASQ

97.12.4 ControlloLa verifica delle regole per l’inoltro IP può essere fatta sempre tramite il programma ‘ipchains’.

# ipchains -L forward -n

Seguendo sempre il caso già visto, di dovrebbe ottenere quanto segue:

Chain forward (policy ACCEPT):

target prot opt source destination ports

MASQ all ------ 192.168.0.0/16 0.0.0.0/0 n/a

97.12.5 Note finaliI comandi mostrati che definiscono l’inoltro IP non fanno riferimento a interfacce di rete specifi-che, ma solo a indirizzi di rete. Perché il router NAT/PAT sappia da che parte inoltrare i pacchetti,è necessario che gli instradamenti siano stati definiti correttamente, come già accennato all’iniziodi questo gruppo di sezioni.

Questo tipo di configurazione del router NAT/PAT ignora completamente tutte le considerazioniche riguardano la sicurezza e tutte le forme di controllo del transito dei pacchetti. In partico-lare, la descrizione del funzionamento di ‘ipchains’ può essere reperita nella pagina di manualeipchains(8).

In questo tipo di configurazione, è necessario che la gestione dell’inoltro dei pacchetti sia attiva.Non basta che il kernel sia stato predisposto (ammesso che sia ancora necessario), perché la fun-zione di inoltro (appartenente alla gestione dell’instradamento) potrebbe essere stata inibita daun comando contenuto nella procedura di inizializzazione del sistema, come già descritto nellesezioni dedicate al router in generale.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 67:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 98Introduzione a IPv6Si è accennato riguardo all’esistenza del protocollo IPv6. Si tratta ancora di qualcosa che è in corsodi sperimentazione, tuttavia è opportuno conoscere almeno alcuni dei suoi aspetti fondamentali.La cosa più appariscete di IPv6 è il modo di indicare gli indirizzi IP, che da 32 passano a 128 bit.

98.1 Rappresentazione simbolica di un indirizzoIPv6La rappresentazione testuale simbolica standard di un indirizzo IPv6 è nella forma:

x:x:x:x:x:x:x:x

L’indirizzo viene suddiviso in gruppetti di 16 bit (coppie di ottetti), utilizzando i due punti (‘:’)come simbolo di separazione. Questi gruppetti di 16 bit vengono rappresentati in esadecimale,utilizzando solo le cifre che servono, dove queste saranno al massimo quattro. Per esempio,l’indirizzo

fe80:0000:0000:0000:02a0:24ff:fe77:4997

si può ridurre semplicemente a:

fe80:0:0:0:2a0:24ff:fe77:4997

Viene consentita anche un’ulteriore semplificazione in presenza di gruppetti adiacenti che risul-tano azzerati: una coppia di due punti (‘::’) rappresenta una sequenza indefinita di gruppettiazzerati e può essere usata una volta sola in un indirizzo. In questo modo, l’esempio precedentepuò essere ridotto a quello che segue:

fe80::2a0:24ff:fe77:4997

In pratica, si deve intendere che quello che manca per completare l’indirizzo in corrispondenzadel simbolo ‘::’, contiene solo gruppetti di 16 bit azzerati.

98.2 Prefissi di indirizzoCon IPv6, il concetto di maschera di rete è stato semplificato e nei documenti RFC si parla piut-tosto di prefisso di un indirizzo. Il termine rende meglio l’idea del senso che ha, in quanto portal’attenzione a una parte iniziale dell’indirizzo stesso per qualche scopo. Il prefisso viene segnalatocon un numero aggiunto alla fine di un indirizzo IPv6, separato da una barra obliqua (‘/’) che in-dica il numero di bit iniziali da prendere in considerazione per un qualche scopo. In questo modosi indica la lunghezza del prefisso.

indirizzo_ipv6/lunghezza_prefisso

È importante osservare che l’indirizzo IPv6 abbinato all’indicazione della lunghezza di un pre-fisso, non può essere abbreviato più di quanto si possa già fare con questo genere di indirizzi. Siprenda in considerazione un indirizzo con l’indicazione della lunghezza del prefisso strutturatonel modo seguente (la lettera «h» rappresenta una cifra esadecimale diversa da zero):

hhhh:0000:0000:hhh0:0000:0000:0000:0000/60

<---- 60 bit ---->

Il prefisso si estende per i primi 60 bit, ovvero le prime 15 cifre esadecimali. Sono ammissibili leforme normali di abbreviazione di questa indicazione:

hhhh:0:0:hhh0:0:0:0:0/60

hhhh::hhh0:0:0:0:0/60

1125

Page 68:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1126 Introduzione a IPv6

hhhh:0:0:hhh0::/60

Al contrario, non sono ammissibili queste altre:

hhhh:0:0:hhh/60 --> non è valida in generale

hhhh::hhh0/60 --> si traduce in hhhh:0:0:0:0:0:0:hhh0/60

hhhh::hhh/60 --> si traduce in hhhh:0:0:0:0:0:0:0hhh/60

98.3 Tipi di indirizziIl sistema introdotto da IPv6 richiede di distinguere gli indirizzi in tre categorie fondamentali:unicast, anycast e multicast. Quello che in IPv4 era conosciuto come indirizzo broadcast nonesiste più in IPv6.

• unicast

L’indirizzo unicast riguarda un’interfaccia di rete singola; in altri termini, un indirizzounicast serve per raggiungere un’interfaccia di rete in modo univoco.

• anycast

L’indirizzo anycast serve per essere attribuito a più interfacce di rete differenti (in linea diprincipio, queste dovrebbero appartenere ad altrettanti componenti di rete distinti). Si trattadi un indirizzo che ha le stesse caratteristiche esteriori di quello unicast, che però vieneattribuito a diverse interfacce di altrettanti nodi, con lo scopo di poter raggiungere semplice-mente quello che risponde prima (quello più vicino in base al protocollo di instradamento).Per la precisione, i pacchetti inviati a un indirizzo anycast dovrebbero raggiungere un’unicainterfaccia di rete.

• multicast

L’indirizzo multicast serve per essere attribuito a più interfacce di rete differenti (in lineadi principio, queste dovrebbero appartenere ad altrettanti componenti di rete distinti). I pac-chetti inviati a un indirizzo multicast dovrebbero raggiungere tutte le interfacce di rete a cuiquesto indirizzo è stato attribuito.

98.4 Allocazione dello spazio di indirizzamentoCosì come è avvenuto con IPv4, anche gli indirizzi IPv6 sono stati suddivisi per scopi differenti.Si parla di tipo di indirizzo, riferendosi a questa classificazione. Questa distinzione avviene inbase a un prefisso binario stabilito, definito FP, ovvero Format Prefix (prefisso di formato). Latabella 98.1 riporta l’elenco dei prefissi di formato attuali (nel momento in cui viene scritto questocapitolo). Bisogna tenere presente che IPv6 è appena nato, per cui è necessario controllare laproduzione dei documenti RFC se si vuole rimanere aggiornati a questo riguardo.

È importante osservare subito che il prefisso 0000 00002 (binario), incorpora alcuni indirizzi moltoimportanti: l’indirizzo «non specificato» (0:0:0:0:0:0:0:0 o anche ::), l’indirizzo locale di loopback(0:0:0:0:0:0:0:1 o anche ::1) e gli indirizzi ottenuti per incorporazione di quelli IPv4.

Un altro particolare interessante riguarda il fatto che solo gli indirizzi che iniziano per FF16

(1111 11112) sono di tipo multicast, mentre gli altri sono tutti unicast. Gli indirizzi anycast sonodegli indirizzi con caratteristiche uguali a quelli unicast, a cui però è stato attribuito un ruolodifferente.

98.5 Indirizzi unicastSi è accennato al fatto che tutti gli indirizzi, tranne quelli che iniziano per FF16, sono di tipo unicast(e poi eventualmente tra questi si possono definire degli indirizzi anycast).

Page 69:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione a IPv6 1127

Prefisso Allocazione0000 00002 Riservato.0000 00012 Non assegnato.0000 0012 Riservato per l’allocazione NSAP.0000 0102 Riservato per l’allocazione IPX.0000 0112 Non assegnato.0000 12 Non assegnato.00012 Non assegnato.0012 Indirizzi unicast globali aggregabili.0102 Non assegnato.0112 Non assegnato.1002 Non assegnato.1012 Non assegnato.1102 Non assegnato.11102 Non assegnato.1111 02 Non assegnato.1111 102 Non assegnato.1111 1102 Non assegnato.1111 1110 02 Non assegnato.1111 1110 102 Indirizzi unicast link-local.1111 1110 112 Indirizzi unicast site-local.1111 11112 Indirizzi multicast.

Tabella 98.1. Spazio di indirizzamento di IPv6.

La caratteristica più importante degli indirizzi unicast è quella di poter essere aggregati a unamaschera di bit continua, simile a quella di IPv4, senza il vincolo delle classi di indirizzi (comeavveniva invece con IPv4).

Un nodo IPv6, cioè un componente collocato nella rete che riconosce questo protocollo, puòtrattare l’indirizzo IPv6 come un elemento singolo (nel suo insieme) oppure come qualcosaformato da diverse componenti, in base al ruolo che questo nodo ha nella rete. In pratica, a secondadel contesto, il nodo IPv6 potrebbe vedere l’indirizzo come un numero composto da 128 bit,

| 128 bit |

|-----------------------------------------------------------------|

| indirizzo dell’interfaccia |

‘-----------------------------------------------------------------’

oppure potrebbe riconoscere un prefisso relativo a una sottorete:

| n bit | 128-n bit |

|------------------------------------------------|----------------|

| prefisso di sottorete | id-interfaccia |

‘-----------------------------------------------------------------’

In questo secondo caso si intende distinguere la parte di indirizzo relativa alla rete in cui si trovacollocata l’interfaccia del nodo in questione, rispetto alla parte restante dell’indirizzo, che inveceindica precisamente di quale interfaccia si tratti. Ma l’indirizzo unicast può essere visto come ilrisultato di un’aggregazione molto più sofisticata, dove si inseriscono livelli successivi di sottoretiin forma gerarchica, fino ad arrivare all’ultimo livello che permette di raggiungere la singolainterfaccia.

98.5.1 Identificatori di interfacciaLa parte finale di un indirizzo unicast serve a identificare l’interfaccia nel collegamento (link),ovvero la rete fisica in cui si trova. Questa parte dell’indirizzo, definibile come identificatoredi interfaccia (interface identifier), deve essere univoca all’interno del collegamento.Eventualmente, potrebbe essere univoca anche in un ambito più grande.

La struttura di indirizzo unicast dipende principalmente dal tipo a cui questo appartiene, in base al

Page 70:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1128 Introduzione a IPv6

prefisso di formato. In molti casi, la parte finale dell’indirizzo destinata a identificare l’interfacciaè di 64 bit (la metà di un indirizzo IPv6) e deve essere costruita secondo il formato IEEE EUI-64.L’identificatore EUI-64 è un numero di 64 bit che serve a identificare il produttore e il «numerodi serie» di un’apparecchiatura di qualche tipo. In pratica, un produttore ottiene un numero cherappresenta la sua azienda e questo viene usato come parte iniziale degli identificatori EUI-64 di sua competenza. Con tale numero potrà «marchiare» le proprie apparecchiature, avendol’accortezza di utilizzare sempre numeri differenti per ogni pezzo, purché questi inizino tutti conil prefisso che gli è stato assegnato. In condizioni normali, un identificatore EUI-64 corretto èanche un numero univoco a livello globale.

Nel momento in cui l’interfaccia di rete a cui si attribuisce un indirizzo unicast dispone delnumero EUI-64, è facile ottenere l’identificatore di interfaccia; quando questo non è disponibilesi utilizzano altre tecniche per generare un numero che gli assomigli. Nel primo caso, si intuisceche il numero utilizzato per l’identificatore di interfaccia è anche univoco a livello globale, mentrenegli altri casi questo non può essere vero in assoluto. A questo proposito, lo stesso numero EUI-64 contiene un bit che viene utilizzato per indicare il fatto che si tratti di un identificatore univocoa livello globale o meno. Si tratta del settimo bit più significativo, che così viene sottratto daivalori che può assumere la parte iniziale di 24 bit che identifica l’azienda (company id).

| identificatore EUI-64 |

|ccccccuc cccccccc cccccccc|mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm|

| azienda | numero di serie |

|ccccccuc cccccccc cccccccc|mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm|

ˆ

|

Se il settimo bit più significativo è uguale a zero, rappresenta un

indirizzo univoco a livello globale.

Figura 98.1. Schema di un identificatore EUI-64 suddiviso in bit.

Per la precisione, un indirizzo unicast che termina con l’identificatore di interfaccia compostodall’identificatore EUI-64, inverte il bit che serve a riconoscerlo come univoco a livello globale. Lamotivazione di questa inversione è molto semplice: si vuole evitare che un indirizzo non univocoa livello globale debba avere per forza quel bit a uno, cosa che costringerebbe a una notazionedettagliata dell’indirizzo IPv6 corrispondente.

98.5.1.1 Identificatori di interfacce Ethernet

Le interfacce Ethernet hanno un indirizzo MAC, ovvero un indirizzo di livello 2 (secondola stratificazione OSI/ISO) corrispondente all’identificatore EUI-48. L’organizzazione IEEE hastabilito una conversione di questi identificatori nel nuovo formato EUI-64, inserendo il codiceFFFE16 subito dopo i primi tre ottetti che identificano l’azienda (company ID). In pratica, il codice

00-80-ad-c8-a9-81

diventa:

00-80-ad-ff-fe-c8-a9-81

Di conseguenza, tenendo conto che il settimo bit di questo codice viene invertito, la parte finaledell’indirizzo IPv6 che lo incorpora diventa:

xxxx:xxxx:xxxx:xxxx:0280:adff:fec8:a981

Page 71:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione a IPv6 1129

98.5.2 Indirizzo non specificatoL’indirizzo 0:0:0:0:0:0:0:0, ovvero quello in cui tutti i 128 bit sono azzerati, è quello nonspecificato (unspecified address). Questo indirizzo non può essere assegnato ad alcun nodo erappresenta l’assenza di un indirizzo.

Come regola, questo indirizzo non può essere utilizzato come destinazione di un pacchetto enemmeno nella definizione delle regole di instradamento.

98.5.3 Indirizzo locale di loopbackL’indirizzo unicast 0:0:0:0:0:0:0:1 viene usato per identificare l’interfaccia virtuale locale, ovverol’interfaccia di loopback. Come tale, non può essere utilizzato per un’interfaccia fisica reale.

In pratica, un pacchetto destinato a questo indirizzo non deve uscire al di fuori del nodo (nellarete fisica esterna); inoltre, un pacchetto destinato a un altro nodo non può indicare come mittentequesto indirizzo.

98.5.4 Indirizzi IPv6 che incorporano indirizzi IPv4Nella fase di transizione da IPv4 a IPv6, oltre a tanti altri accorgimenti è stato stabilito un modo perrappresentare un indirizzo IPv4 all’interno di un indirizzo IPv6. Si distinguono due situazioni: gliindirizzi «compatibili IPv4» che riguardano nodi IPv6 e gli indirizzi che incorporano un indirizzoIPv4 riferito a un nodo che non è in grado di gestire IPv6.

Nel primo caso si utilizzano una serie di 96 bit azzerati seguiti dai bit dell’indirizzo IPv4,

| 80 bit | 16 | 32 bit |

|--------------------------------------|----|---------------------|

|0000..............................0000|0000| indirizzo IPv4 |

‘-----------------------------------------------------------------’

nel secondo ci sono 80 bit azzerati, seguiti da 16 bit a uno; in fine ci sono i 32 bit dell’indirizzoIPv4.

| 80 bit | 16 | 32 bit |

|--------------------------------------|----|---------------------|

|0000..............................0000|FFFF| indirizzo IPv4 |

‘-----------------------------------------------------------------’

In presenza di indirizzi di questo tipo, è ammessa una notazione speciale. I due esempi seguentimostrano l’indirizzo IPv4 192.168.1.1 incorporato in IPv6 nelle due situazioni descritte sopra:

::192.168.1.1

::FFFF:192.168.1.1

98.5.5 Indirizzi link-localGli indirizzi link-local si riferiscono all’ambito del collegamento in cui si trovano connesse leinterfacce di rete. Questi indirizzi rappresentano uno spazio privato che non può essere raggiuntodall’esterno e, di conseguenza, non può attraversare i router. Evidentemente, tali indirizzi servonoper scopi amministrativi particolari, legati all’ambito della rete fisica.

La struttura normale di un indirizzo link-local è molto semplice:

| 64 bit | 64 bit |

|--------------------------------|--------------------------------|

|1111 1110 10................0000| identificatore di interfaccia |

‘-----------------------------------------------------------------’

Page 72:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1130 Introduzione a IPv6

Come si può vedere, i primi 10 bit servono a definire il formato dell’indirizzo, stabilendo chesi tratta del tipo link-local. A metà dell’indirizzo inizia l’identificatore di interfaccia, ottenutodall’identificatore EUI-64 (già descritto in precedenza), che viene determinato in modo differentea seconda del tipo di interfaccia.

Dal momento che l’indirizzo link-local deve essere univoco solo all’interno del collegamentofisico in cui si trova, non richiede la distinzione in sottoreti e può essere determinato inmodo automatico, eventualmente interrogando la rete stessa. Di solito, in presenza di interfacceEthernet si utilizza il loro indirizzo MAC trasformandolo secondo la regola già vista a propositodell’identificatore EUI-48. Per esempio, un’interfaccia Ethernet il cui indirizzo MAC sia

00:80:ad:c8:a9:81

ottiene l’indirizzo IPv6 link-local

fe80:0000:0000:0000:0280:adff:fec8:a981

che si può abbreviare come

fe80::280:adff:fec8:a981

Ecco come potrebbe mostrarlo ‘ifconfig’:

eth0 Link encap:Ethernet HWaddr 00:80:AD:C8:A9:81

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::280:adff:fec8:a981/10 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:5 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

Interrupt:11 Base address:0x300

In questa situazione, dal momento che non c’è bisogno di organizzare tali indirizzi in sottoreti,l’unico prefisso che abbia un senso è quello dei primi 10 bit che stanno a indicarne il formato. Diconseguenza, un indirizzo link-local che porti l’indicazione della lunghezza del prefisso, utilizzerànormalmente il numero 10, come si vede nell’estratto generato da ‘ifconfig’ mostrato sopra.

98.5.6 Indirizzi site-localGli indirizzi site-local si riferiscono all’ambito di un sito e si possono utilizzare liberamente senzabisogno di alcuna forma di registrazione. Questi indirizzi rappresentano uno spazio privato chenon può essere raggiunto dalle reti esterne al sito in questione.

La struttura normale di un indirizzo site-local è molto semplice:

| 10 bit | 54 bit | 64 bit |

|------------|--------------------|--------------------------------|

|1111 1110 11| sottoreti | identificatore di interfaccia |

‘------------------------------------------------------------------’

I primi 10 bit servono a definire il formato dell’indirizzo, stabilendo che si tratta del tipo site-local; lo spazio tra l’undicesimo e il 64-esimo bit può essere utilizzato per strutturare gli indirizziin sottoreti, in base alle esigenze del sito. La seconda metà dell’indirizzo viene riservata perl’identificatore di interfaccia, ottenuto dall’identificatore EUI-64 (già descritto in precedenza),che viene determinato in modo differente a seconda del tipo di interfaccia.

In pratica, rispetto a un indirizzo link-local cambia il prefisso di formato, aggiungendo lapossibilità e la convenienza di suddividere lo spazio di indirizzi in sottoreti.

Page 73:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Introduzione a IPv6 1131

98.5.7 Indirizzi unicast globali aggregabiliAllo stato attuale, nel momento in cui viene scritto questo capitolo, l’unico gruppo di indirizziIPv6 previsto per una gestione globale (cioè per Internet) è quello che inizia con il prefisso 0012.Senza entrare troppo nel dettaglio (considerato che si tratta di una materia che non è ancoraconsolidata), lo schema di indirizzamento di questi indirizzi potrebbe essere riassunto nel modoseguente:

| 3 | 13 + 8 + 24 bit | 16 bit | 64 bit |

|---|--------------------|---------|--------------------------------|

|001| TLA + ris. + NLA | SLA | identificatore di interfaccia |

‘-------------------------------------------------------------------’

Dopo il prefisso di formato seguono 45 bit suddivisi in: un identificatore del primo livello diaggregazione (Top Level Aggregation), uno spazio di riserva e un identificatore successivo (NextLevel Aggregation). Subito dopo seguono altri 16 bit la cui gestione dovrebbe essere affidata a unsolo sito, per la gestione delle proprie sottoreti. Come sempre, la seconda metà dell’indirizzo èdestinato all’identificatore di interfaccia.

In pratica, un sito che vuole utilizzare indirizzi IPv6 accessibili anche da Internet, dovrebbeottenere un lotto di indirizzi composto dei primi 48 bit dal suo ISP, ottenendo la possibilità digestirsi come vuole i 16 bit che precedono l’identificatore di interfaccia.

98.6 Indirizzi multicastUn indirizzo IPv6 multicast serve a identificare e a raggiungere un gruppo di nodisimultaneamente. Gli indirizzi multicast hanno una struttura particolare:

| 8 | 4 | 4 | 112 bit |

|---------|----|----|--------------------------------------------|

|1111 1111|000T|scop| identificatore di gruppo |

‘----------------------------------------------------------------’

Il prefisso di formato è 1111 11112, ovvero FF16, e a questo seguono 4 bit di opzione. Diquesti 4 bit, è stato specificato solo il significato di quello meno significativo, che viene indicatoconvenzionalmente con la lettera «T» (gli altri devono essere azzerati fino a che verrà stabilitoqualcosa di diverso).

• T = 0 indica un indirizzo multicast assegnato permanentemente dall’autorità globale diInternet;

• T = 1 indica un indirizzo multicast assegnato in modo provvisorio.

I 4 bit successivi rappresentano l’ambito dell’indirizzo multicast (scope). Il significato dei valoriche può assumere questo campo sono indicati nella tabella 98.2.

La parte finale dell’indirizzo identifica il gruppo multicast nell’ambito stabilito dal campo scope.Tuttavia, nel caso di indirizzi stabiliti in modo permanente, l’identificatore di gruppo resta ugualeper tutti i tipi di ambiti.

Per regola, non si può utilizzare un indirizzo multicast come mittente nei pacchetti IPv6, inoltrequesti indirizzi non possono apparire nelle regole di instradamento dei router.

98.6.1 Alcuni indirizzi multicast già definitiTutti gli indirizzi multicast del tipo ff0x:0:0:0:0:0:0:0 sono riservati e non possono essereassegnati ad alcun gruppo multicast. Oltre a questi sono interessanti gli indirizzi per «tutti i nodi»:

Page 74:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1132 Introduzione a IPv6

Valore Significato016 Riservato.116 Ambito node-local.216 Ambito link-local.316 Non assegnato.416 Non assegnato.516 Ambito site-local.616 Non assegnato.716 Non assegnato.816 Ambito organization-local.916 Non assegnato.A16 Non assegnato.B16 Non assegnato.C16 Non assegnato.D16 Non assegnato.E16 Ambito globale.F16 Non assegnato.

Tabella 98.2. Elenco dei valori per definire l’ambito di un indirizzo multicast.

ff01:0:0:0:0:0:0:1

ff02:0:0:0:0:0:0:1

Questi servono a identificare i gruppi di tutti i nodi IPv6, nell’ambito 116 (node-local) e 216 (link-local). Inoltre, sono importanti gli indirizzi di «tutti i router»:

ff01:0:0:0:0:0:0:2

ff02:0:0:0:0:0:0:2

ff05:0:0:0:0:0:0:2

Questi servono a identificare i gruppi di tutti i router, nell’ambito 116 (node-local), 216 (link-local)e 516 (site-local).

98.7 Riferimenti

• IEEE, Guidelines for 64-bit global identifiers (EUI-64) registration authority, marzo 1997�

http://standards.ieee.org/regauth/oui/tutorials/EUI64.html �

• R. Hinden, S. Deering, RFC 2373: IP Version 6 Addressing Architecture, 1998�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2373.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc2373.txt �

• R. Hinden, M. O’Dell, S. Deering, RFC 2374: An IPv6 Aggregatable Global UnicastAddress Format, 1998�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2374.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc2374.txt �

• M. Crawford, RFC 2464: Trasmission of IPv6 Packets over Ethernet Networks, 1998�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2464.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc2464.txt �

• Silvano Gai, IPv6, McGraw-Hill, 1997

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 75:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 99Esperimenti con IPv6L’inconveniente principale per chi desidera fare degli esperimenti con IPv6 sta nel fatto che èdifficile trovare una distribuzione GNU/Linux predisposta per questo. Per tale motivo viene inaiuto il documento IPv6 & Linux HOWTO di Peter Bieringer che viene aggiornato frequentementedall’autore e che riporta tutti i passi necessari ad attivare la gestione di IPv6 a scopo sperimentalenel proprio sistema GNU/Linux.�

http://www.bieringer.de/linux/IPv6.zip ��

http://www.bieringer.de/linux/IPv6.tar.gz ��

ftp://ftp.bieringer.de/pub/linux/www-pages/�

Chi non vuole fare i conti con la compilazione dei pacchetti sorgenti necessari, può provare acercare di ottenere il software già compilato. In questo momento dovrebbe essere disponibile unlavoro preparato in formato RPM presso l’URI seguente:�

ftp://ftp.jcu.cz/pub/ten.cz/ipv6/�

I pacchetti indispensabili dovrebbero avere nomi simili a: ‘net-tools*’, ‘inet6-apps*’,‘libpcap+ipv6*’ e ‘tcpdump+ipv6*’; inoltre è opportuno procurarsi anche il pacchettodel demone ‘radvd’: ‘radvd*’. Molto probabilmente, il pacchetto corrispondente al modello‘net-tools*’ andrà a sostituirsi a quello corrispondente della propria distribuzione, mentre glialtri vengono installati normalmente al di sotto della directory ‘/usr/inet6/’, per evitare lasovrapposizione con gli altri pacchetti normali.

99.1 Preparazione dei file di configurazionePer poter fare qualunque cosa con IPv6, è necessario che il file ‘/etc/protocols’ risulti cor-retto anche per le finalità di questo protocollo. In particolare, è importante che appaiano le righeseguenti:

ipv6 41 IPv6 # IPv6

ipv6-route 43 IPv6-Route # Routing Header for IPv6

ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6

ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6

ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6

icmpv6 58 IPv6-ICMP # ICMP for IPv6

ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6

ipv6-opts 60 IPv6-Opts # Destination Options for IPv6

Mancando queste indicazioni, lo stesso eco ICMP (‘ping’) non può funzionare, perché non sitrova la definizione del protocollo ‘icmpv6’.

99.2 Attivazione di IPv6 e definizione degli indirizzilink-localPer poter gestire IPv6 occorre un kernel adatto, dove eventualmente la gestione di questo proto-collo sia stata affidata a un modulo (sezione 26.2.9).

Se la gestione di IPv6 viene inserita in un modulo, per abilitarla occorrerà attivare il modulo, peresempio attraverso il comando seguente che potrebbe essere inserito all’interno degli script dellaprocedura di inizializzazione del sistema:

/sbin/modprobe ipv6

1133

Page 76:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1134 Esperimenti con IPv6

A questo punto, l’indirizzo locale di loopback e gli indirizzi link-local sono già fissatiautomaticamente. Lo si può osservare con ‘ifconfig’:

# ifconfig[ Invio ]

eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:101 errors:1 dropped:1 overruns:0 frame:1

TX packets:68 errors:0 dropped:0 overruns:0 carrier:1

collisions:0 txqueuelen:100

Interrupt:12 Base address:0xff80

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:3924 Metric:1

RX packets:24 errors:0 dropped:0 overruns:0 frame:0

TX packets:24 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

Eventualmente, gli indirizzi IPv6 attivi sono visibili anche all’interno del file virtuale ‘/proc/net/if_inet6’:

# cat /proc/net/if_inet6[ Invio ]

00000000000000000000000000000001 01 80 10 80 lo

fe8000000000000002a024fffe774997 04 0a 20 80 eth0

Secondo la filosofia di IPv6, questi indirizzi devono avere già il loro instradamento naturale, diconseguenza sono già pronti per essere usati. Si può verificare con ‘ping’ (si deve usare quelloadatto a IPv6):

# /usr/inet6/bin/ping -a inet6 ::1

# /usr/inet6/bin/ping -a inet6 fe80::2a0:24ff:fe77:4997

In entrambi i casi, si dovrebbe osservare l’eco regolarmente. Se si ha la possibilità di predi-sporre anche un altro elaboratore, connesso alla stessa rete fisica, si può osservare che l’ecoICMP dovrebbe funzionare correttamente anche verso quel nodo, pur senza avere dichiaratol’instradamento.1

Per verificare le regole di instradamento, anche se queste non sono state inserite attraverso uncomando apposito, si può utilizzare ‘route’ nel modo seguente (il risultato che si ottiene derivadagli esempi già visti):

# route -A inet6[ Invio ]

Kernel IPv6 routing table

Destination Next Hop Flags Metric Ref Use Iface

::1/128 :: U 0 4 0 lo

fe80::2a0:24ff:fe77:4997/128 :: U 0 236 1 lo

fe80::/10 :: UA 256 0 0 eth0

ff00::/8 :: UA 256 0 0 eth0

1Per usare ‘ping’ come utente comune occorre che questo appartenga all’utente ‘root’ e abbia il bit SUID attivo(SUID-root). È probabile che questo permesso debba essere assegnato manualmente.

Page 77:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Esperimenti con IPv6 1135

::/0 :: UDA 256 0 0 eth0

99.3 Definizione degli indirizzi site-localGli indirizzi site-local devono essere dichiarati esplicitamente, anche se per questo si potrebbeprospettare una procedura che li generi in modo automatico (in base all’identificatore EUI-64).Seguendo il caso visto nella sezione precedente, si deve usare ‘ifconfig’ nel modo seguente:

# ifconfig eth0 inet6 add fec0:0:0:1:2a0:24ff:fe77:4997/64

In questo caso, si nota la scelta di identificare la rete fisica a cui si connette l’interfaccia con ilnumero 116 (fec0:0:0:1:...). Si può verificare facilmente con il comando seguente; si osservi il fattoche si sommano assieme le informazioni dei vari indirizzi, con l’indicazione dell’ambito a cui siriferiscono (scope):

# ifconfig eth0[ Invio ]

eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fec0::1:2a0:24ff:fe77:4997/64 Scope:Site

inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:31711 errors:0 dropped:0 overruns:0 frame:0

TX packets:65557 errors:0 dropped:0 overruns:0 carrier:0

collisions:7 txqueuelen:100

Interrupt:11 Base address:0x300

Anche con gli indirizzi site-local non è necessario dichiarare esplicitamente l’instradamento,basta indicare correttamente la lunghezza del prefisso nel momento in cui vengono assegnati alleinterfacce.

# route -A inet6

In base agli esempi visti fino a questo punto, si dovrebbe osservare qualcosa come l’esempioseguente:

Kernel IPv6 routing table

Destination Next Hop Flags Metric Ref Use Iface

::1/128 :: U 0 4 0 lo

fe80::2a0:24ff:fe77:4997/128 :: U 0 236 1 lo

fe80::/10 :: UA 256 0 0 eth0

fec0::1:2a0:24ff:fe77:4997/128 :: U 0 7 0 lo

fec0:0:0:1::/64 :: UA 256 0 0 eth0

ff00::/8 :: UA 256 0 0 eth0

::/0 :: UDA 256 0 0 eth0

99.4 InstradamentoL’instradamento dei pacchetti IPv6 dovrebbe essere configurato prevalentemente in modoautomatico. Eventualmente si può usare ‘route’ specificando che si tratta di indirizzi IPv6:

route -A inet6 add indirizzo_ipv6/lunghezza_prefisso dev interfaccia

Per esempio, se per qualche motivo fosse necessario stabilire in modo manuale l’instradamentodella sottorete fec0:0:0:1::/64 (site-local), attraverso l’interfaccia ‘eth0’, si potrebbe usare ilcomando seguente:

# route -A inet6 add fec0:0:0:1::/64 dev eth0[ Invio ]

Page 78:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1136 Esperimenti con IPv6

Intuitivamente, per rimuovere una regola di instradamento nel modo appena visto, basta sostituirela parola chiave ‘add’ con ‘del’. L’esempio seguente elimina la regola di instradamento che servea dirigere il traffico per la sottorete fec0:0:0:1::/64 attraverso l’interfaccia ‘eth0’:

# route -A inet6 del fec0:0:0:1::/64 dev eth0[ Invio ]

Quando si utilizzano indirizzi globali (attualmente solo quelli che hanno il prefisso di formato0012), si può fare in modo che i vari nodi configurino automaticamente le loro interfacce, conl’aiuto di router che «pubblicizzano» le informazioni sugli indirizzi da usare. A questo proposito,con GNU/Linux si può utilizzare il demone ‘radvd’.

99.4.1 Router Advertiser Daemon – radvdIl demone ‘radvd’ è un Router Advertiser Daemon, cioè un programma che si occupa di starein attesa delle richieste (router solicitation) da parte dei nodi delle sottoreti connesse fisicamenteal router in cui questo si trova a funzionare. A queste richieste risponde (router advertisement)fornendo l’indicazione del prefisso da usare per gli indirizzi di quel collegamento di rete (link).

L’unico impegno sta nella configurazione di ‘radvd’ attraverso il suo file di configurazione, chepotrebbe essere ‘/etc/radvd.conf’, ‘/etc/sysconfig/radvd.conf’ o altro ancora.All’interno di questo file si indicano i prefissi da usare per ogni collegamento di rete (vengonoindicate le interfacce attraverso cui «pubblicizzarli»). Si osservi l’esempio seguente:

interface eth0�

AdvSendAdvert on;

prefix 3ffe:0302:0011:0002::0/64�

AdvOnLink on;

AdvAutonomous on;�;

�;

Viene stabilito che nel collegamento di rete corrispondente all’interfaccia ‘eth0’, ‘radvd’ devepubblicizzare il prefisso 3ffe:302:11:2::0/64, che in pratica corrisponde a un indirizzo unicastglobale aggregabile, fissato per gli esperimenti nella fase di transizione verso IPv6 e documentatodall’RFC 2471.

Con questa informazione, tutti i nodi che risultano connessi allo stesso collegamento di rete, ri-cevendo questa informazione, configurano le loro interfacce di rete utilizzando l’identificatoreEUI-64 e aggiungono la regola di instradamento relativa. Quello che si vede sotto è l’esempio diun’interfaccia di rete configurata con gli indirizzi ‘link-local’ e ‘site-local’, e anche conun indirizzo globale ottenuto attraverso il demone ‘radvd’.

eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: 3ffe:302:11:2:2a0:24ff:fe77:4997/64 Scope:Global

inet6 addr: fec0::1:2a0:24ff:fe77:4997/64 Scope:Site

inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:31711 errors:0 dropped:0 overruns:0 frame:0

TX packets:65557 errors:0 dropped:0 overruns:0 carrier:0

collisions:7 txqueuelen:100

Interrupt:11 Base address:0x300

Per avviare il demone ‘radvd’ non c’è bisogno di opzioni particolari; eventualmente può essereconveniente accertarsi di fargli leggere il file di configurazione corretto:

Page 79:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Esperimenti con IPv6 1137

# radvd -C /etc/radvd.conf

In questo modo, si vuole indicare precisamente che il file di configurazione è ‘/etc/radvd.conf’.

99.5 Riferimenti

• R. Hinden, R. Fink, J. Postel, RFC 2471: IPv6 Testing Address Allocation, 1998�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2471.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc2471.txt �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 80:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 100Indirizzi e nomiLa gestione diretta degli indirizzi IP in forma numerica può essere utile in fase di progetto diuna rete, ma a livello di utente è una pretesa praticamente inaccettabile. Per questo, agli indirizziIP numerici si affiancano quasi sempre dei nomi che teoricamente potrebbero anche essere pura-mente fantastici e senza alcuna logica. Ogni volta che si fa riferimento a un nome, il sistema è (odovrebbe essere) in grado di convertirlo nel numero IP corrispondente.

In pratica, si usa di solito la convenzione dei nomi di dominio, come già descritto in precedenza(94.7).

Ci sono due metodi per trasformare un nome in un indirizzo IP e viceversa: un elenco contenutonel file ‘/etc/hosts’ oppure l’uso di un servente DNS.

In questo capitolo si analizza ‘/etc/hosts’ e gli altri file di configurazione legati alla traduzionedei nomi; nel prossimo verrà trattata la gestione di un servente DNS con il quale si ottiene unservizio di risoluzione dei nomi (name server).

100.1 Configurazione del tipo di conversionePrima di procedere con la trasformazione di un nome in un indirizzo IP, occorre definire in chemodo si vuole che il sistema esegua questa operazione. Il file di configurazione attraverso il qualesi definisce ciò è ‘/etc/host.conf’, ma anche attraverso l’uso di variabili di ambiente si puòintervenire in questa configurazione.

100.1.1 /etc/host.confViene usato per determinare quali servizi usare per risolvere i nomi di dominio. Ogni riga rap-presenta un’opzione di funzionamento, inoltre il simbolo ‘#’ rappresenta l’inizio di un commento.Solitamente vengono specificate solo due direttive: ‘order’ e ‘multi’, come nell’esempio se-guente:

order hosts,bind

multi on

Nella prima riga, l’opzione ‘order’ indica l’ordine dei servizi. In questo caso si utilizza primail file ‘/etc/hosts’ (100.2.1) e quindi si interpella il servizio di risoluzione dei nomi. Nellaseconda riga, ‘multi on’, abilita la possibilità di trovare all’interno del file ‘/etc/hosts’

l’indicazione di più indirizzi IP per lo stesso nome. Un evento del genere può verificarsi quandouno stesso elaboratore ha due o più connessioni per la rete e per ognuna di queste ha un indirizzoIP diverso.

order {hosts|bind|nis}[,...[,...]]L’opzione ‘order’ richiede uno o più argomenti (separati da spazio, virgola, punto e virgola o duepunti) indicanti la sequenza di servizi attraverso cui si deve tentare di risolvere un nome.

multi {on|off}L’opzione ‘multi’ attiva o disattiva la possibilità di trovare all’interno del file ‘/etc/hosts’

l’indicazione di più indirizzi IP per lo stesso nome.

100.1.2 Variabili di ambienteAttraverso l’uso di variabili di ambiente è possibile interferire con la configurazione del file ‘/etc/host.conf’.

• ‘RESOLV_HOST_CONF’

1138

Page 81:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Indirizzi e nomi 1139

Se esiste e non è vuota, definisce il nome di un file alternativo a ‘/etc/host.conf’.

• ‘RESOLV_SERV_ORDER’

Definisce l’ordine dei servizi di risoluzione dei nomi, senza tenere conto di quanto eventual-mente già definito attraverso l’opzione ‘order’ nel file ‘/etc/host.conf’.

• ‘RESOLV_SERV_MULTI’

Può contenere la stringa ‘on’ oppure ‘off’, con lo stesso significato dell’opzione ‘multi’

del file ‘/etc/host.conf’ e serve a sostituirsi all’eventuale dichiarazione fatta nel filestesso.

100.2 File per la conversionePrima che esistessero i serventi DNS si dovevano risolvere i nomi attraverso l’uso di un fileunico, contenente un elenco di indirizzi IP associato ai nomi rispettivi. Teoricamente, utilizzandoun servente DNS questo file potrebbe non essere più necessario. In pratica conviene utilizzareugualmente questo vecchio metodo per garantirsi l’accessibilità alla rete locale anche quandol’eventuale servente DNS non dovesse funzionare.

100.2.1 /etc/hostsIl file ‘/etc/hosts’ viene usato per convertire i nomi degli elaboratori in numeri IP e viceversa.È particolarmente utile la sua compilazione all’interno di piccole reti che non dispongono di unservente DNS. All’interno di una rete locale può essere predisposto uguale per tutti gli elaboratoriconnessi, così da facilitare per quanto possibile l’aggiornamento all’interno di questi. Segue unestratto di esempio di questo file.

# necessario per il loopback IPv4

127.0.0.1 localhost.localdomain localhost

# indirizzi IPv4

192.168.1.1 dinkel.brot.dg dinkel

192.168.1.2 roggen.brot.dg roggen

192.168.2.1 weizen.mehl.dg weizen

#necessario per il loopback IPv6

::1 ip6-localhost ip6-loopback

# necessari per il multicast IPv6

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

ff02::3 ip6-allhosts

# indirizzi IPv6

fec0::1:2a0:24ff:fe77:4997 dinkel.brot.dg dinkel

fec0::1:280:5fff:fea6:6d3d roggen.brot.dg roggen

fec0::2:280:adff:fec8:a981 weizen.mehl.dg weizen

In pratica, il file può contenere righe vuote o commenti (le righe che iniziano con il simbolo ‘#’) erighe che iniziano con un indirizzo IP (sia IPv4 che IPv6). Dopo l’indirizzo IP, separato da spazi ocaratteri di tabulazione, inizia l’elenco dei nomi a esso abbinati, anche questo può essere separatoda spazi o da caratteri di tabulazione.

Page 82:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1140 Indirizzi e nomi

Di solito, si indica il nome di dominio completo (FQDN o Fully Qualified Domain Name), seguitoeventualmente da possibili abbreviazioni o soprannomi.

Poco sopra era stata accennata la possibilità di creare un file identico ‘/etc/hosts’ per tutti glielaboratori della propria rete locale. Ma se la rete locale si articola in sottoreti, è normale che il do-minio di appartenenza di ogni sottorete cambi. Nell’esempio visto, si fa riferimento a due sottoretiIPv4 e IPv6: 192.168.1.0 e fec0::1::/64 denominata brot.dg; 192.168.2.0 e fec0::2::/64 deno-minata mehl.dg. In questa situazione, potrebbe capitare che un elaboratore nella rete mehl.dgabbia lo stesso nome locale di un altro collocato nelle rete brot.dg.

Per questo, l’attribuzione di soprannomi, o semplicemente di abbreviazioni, deve essere limi-tata alla sottorete di appartenenza, oppure deve essere evitata. A questo fa eccezione il casodell’indirizzo di loopback: ogni elaboratore è bene che si chiami ‘localhost’.

Se si decide di fare il lavoro in serie, l’esempio visto sopra deve essere trasformato in quelloseguente:

# necessario per il loopback IPv4

127.0.0.1 localhost.localdomain localhost

# indirizzi IPv4

192.168.1.1 dinkel.brot.dg

192.168.1.2 roggen.brot.dg

192.168.2.1 weizen.mehl.dg

#necessario per il loopback IPv6

::1 ip6-localhost ip6-loopback

# necessari per il multicast IPv6

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

ff02::3 ip6-allhosts

# indirizzi IPv6

fec0::1:2a0:24ff:fe77:4997 dinkel.brot.dg

fec0::1:280:5fff:fea6:6d3d roggen.brot.dg

fec0::2:280:adff:fec8:a981 weizen.mehl.dg

100.2.2 /etc/networksIl file ‘/etc/networks’ viene usato per convertire i nomi delle sottoreti in codici IPv4. Comenel caso del file ‘/etc/hosts’, può essere predisposto in forma unificata per tutti i nodi di unastessa rete, così da facilitare per quanto possibile l’aggiornamento all’interno di questi. Segue unestratto di esempio di questo file.

localdomain 127.0.0.0

brot.dg 192.168.1.0

mehl.dg 192.168.2.0

Page 83:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Indirizzi e nomi 1141

La presenza di questo file non è indispensabile; in effetti, la gestione delle sottoreti attraversol’uso diretto degli indirizzi IP non dovrebbe essere un problema. Il vantaggio di avere questofile, sta nell’utilizzo del programma ‘route’ per visualizzare la tabella di instradamento: gliindirizzi di rete vengono trasformati nei nomi ottenuti dal file ‘/etc/networks’.

È bene chiarire che normalmente non si utilizza il servente DNS per risolvere i nomi della rete;quindi, di solito, la gestione dei nomi si attua solo attraverso la predisposizione di questo file.

100.2.3 /etc/resolv.confQuando il file ‘/etc/hosts’ non basta, si deve poter accedere a un servizio di risoluzionedei nomi, ovvero a un servente DNS. Viene usato il file ‘/etc/resolv.conf’ per conoscerel’indirizzo o gli indirizzi dei servizi di risoluzione dei nomi di competenza della rete cui si appar-tiene. Se non si intende utilizzare il sistema DNS per risolvere i nomi della propria rete, oppuresi dispone di un solo elaboratore, ma si vuole accedere alla rete Internet, dovranno essere indicatigli indirizzi dei servizi di risoluzione dei nomi forniti dall’ISP (Internet Service Provider), ovverodal fornitore di accesso a Internet.

Questo file può contenere righe vuote o commenti (le righe che iniziano con il simbolo ‘#’) erighe che iniziano con un nome di opzione seguite normalmente da un argomento. Le opzioniutilizzabili sono descritte qui di seguito.

nameserver indirizzo_ip_servente_DNS

L’opzione ‘nameserver’ è la più importante e permette di definire l’indirizzo IP di un servizio dirisoluzione dei nomi. Se questa opzione non viene utilizzata, si fa riferimento a un servizio locale,raggiungibile precisamente all’indirizzo 127.0.0.1. Il file ‘/etc/resolv.conf’ può contenerepiù righe con questa opzione, in modo da poter fare riferimento a servizi di risoluzione dei nomialternativi quando quello principale non risponde.

domain nome_di_dominio

Stabilisce il dominio predefinito per le interrogazioni del servizio di risoluzione dei nomi.

search nome_di_dominio...

Definisce un elenco di domini possibili (l’elenco è separato da spazi o caratteri di tabulazione) perle interrogazioni del servizio di risoluzione dei nomi.

Una configurazione normale non ha bisogno dell’indicazione delle opzioni ‘domain’ e ‘search’.Se il file ‘/etc/resolv.conf’ si limita a contenere opzioni ‘nameserver’, questo può esserestandardizzato su tutta la rete locale.

Segue un esempio in cui si utilizza il servizio di risoluzione dei nomi offerto dall’indirizzo IP192.168.1.1 ed eventualmente, in sua mancanza, dall’indirizzo 192.168.2.15

nameserver 192.168.1.1

nameserver 192.168.2.15

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 84:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 101DNS: introduzioneUn servizio di risoluzione dei nomi, ovvero ciò che viene fornito da un servente DNS, è ciò chegestisce la traduzione di un nome di dominio in un numero IP e viceversa. L’elaboratore chefornisce questo servizio può rispondere direttamente alle richieste riferite ai nomi di dominio dicompetenza della sua zona, mentre per quelli restanti deve interpellare altri nodi competenti. Ilcapitolo inizia con l’illustrazione di un esempio, contando sull’intuizione del lettore.1

In questo capitolo e in tutto il resto del documento, si fa riferimento generalmente al pacchettoBIND, 2 quando si parla del programma ‘named’ per la gestione del sistema di risoluzione deinomi. È bene cercare di non fare confusione: ‘named’ è il nome del demone che compie il lavoro;BIND è il nome del pacchetto che racchiude tutto il necessario alla gestione del DNS, compreso‘named’.

101.1 Descrizione di un esempioSi dispone di una piccola rete locale composta da due elaboratori con indirizzi IPv4:

• 192.168.1.1 dinkel.brot.dg

• 192.168.1.2 roggen.brot.dg

Il primo di questi due elaboratori è connesso a Internet attraverso la rete telefonica e viene predi-sposto per gestire un servizio di risoluzione dei nomi attraverso il demone ‘named’.

La connessione telefonica serve solo all’elaboratore ‘dinkel’ e non permette all’altro elaboratoredi accedere a Internet.

101.1.1 Prima di gestire un servente DNSQuando non si gestisce localmente un servizio di risoluzione dei nomi e si vuole accedere aInternet, è necessario almeno fare uso di un servizio esterno, di solito messo a disposizione dallostesso fornitore di accesso.

• ‘/etc/host.conf’ (sezione 100.1.1)

È il file di configurazione principale dei servizi di rete. Serve in particolare per determinarein che modo si intendono risolvere i nomi di dominio. L’esempio seguente è quello classico,utilizzato quasi sempre.

order hosts,bind

multi on

L’opzione ‘order’ indica l’ordine dei servizi. In questo caso si utilizza prima il file ‘/etc/hosts’ e quindi si interpella il servizio di risoluzione dei nomi.

• ‘/etc/hosts’ (sezione 100.2.1)

Questo file permette di definire i nomi degli elaboratori abbinati al loro indirizzo IP, senzafare uso di un servente DNS. Per entrambi gli elaboratori dell’esempio, va bene il contenutoseguente:

#necessario per il loopback

127.0.0.1 localhost.localdomain localhost

1Recentemente ci sono stati cambiamenti nel nome e nel formato del file di configurazione iniziale: al posto del vecchio‘/etc/named.boot’ si utilizza ‘/etc/named.conf’ che ha una sintassi differente dal primo.

2BIND software libero con licenza speciale e restrizioni per quanto riguarda l’algoritmo RSA

1142

Page 85:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1143

192.168.1.1 dinkel.brot.dg dinkel

192.168.1.2 roggen.brot.dg roggen

• ‘/etc/networks’ (sezione 100.2.2)

Questo file attribuisce i nomi agli indirizzi di rete. Per entrambi gli elaboratori dell’esempiova bene il contenuto seguente:

localdomain 127.0.0.0

brot.dg 192.168.1.0

• ‘/etc/resolv.conf’ (sezione 100.2.3)

Viene usato per conoscere l’indirizzo o gli indirizzi dei servizi di risoluzione dei nomi dicompetenza della rete cui si appartiene. Se non si vuole gestire questo servizio nella propriarete locale, se ne deve indicare almeno uno esterno per accedere a Internet. Nell’esempioseguente, si fa riferimento a un indirizzo fornito dal proprio ISP (l’indirizzo dell’esempio èmesso a caso: deve essere sostituito con uno o più indirizzi forniti dal proprio ISP).

nameserver 194.22.123.201

101.1.2 Predisposizione di un servente DNS elementareIl tipo di servizio di risoluzione dei nomi più semplice è quello che si occupa solo di accumularein una memoria cache gli ultimi indirizzi richiesti, senza avere alcuna competenza di zona. Ilservizio viene allestito all’interno dell’elaboratore ‘dinkel’.

• ‘/etc/resolv.conf’ (100.2.3)

Viene modificato in modo da fare riferimento all’indirizzo locale (‘localhost’), dal mo-mento che si intende usare il proprio elaboratore per la gestione del servizio di risoluzionedei nomi.

nameserver 127.0.0.1

• ‘/etc/named.conf’

Viene utilizzato da ‘named’ come punto di partenza della configurazione del servizio DNS.

options�

directory "/var/named";�;

zone "."�

type hint;

file "named.root";�;

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

La prima direttiva, che occupa le prime tre righe, definisce la directory predefinita per con-tenere gli altri file di configurazione del servizio di risoluzione dei nomi.

La seconda direttiva indica il file ‘named.root’ contenuto in ‘/var/named/’ che servecome fonte per gli indirizzi necessari a raggiungere i servizi di risoluzione dei nomi deldominio principale (ciò è rappresentato simbolicamente dal punto isolato).

La terza direttiva indica il file ‘127.0.0’ contenuto in ‘/var/named/zone/’, utilizzatocome configurazione per la rete dell’elaboratore locale (‘localhost’).

in-addr.arpa è un dominio speciale attraverso il quale si definisce che le cifre pre-cedenti rappresentano un indirizzo IP rovesciato.

Page 86:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1144 DNS: introduzione

• ‘/etc/named.boot’ (obsoleto)

Nelle versioni più vecchie di ‘named’, al posto del file ‘/etc/named.conf’, si usava‘/etc/named.boot’. L’esempio seguente è l’equivalente di quanto mostrato nel puntoprecedente.

directory /var/named

cache . named.root

primary 0.0.127.in-addr.arpa zone/127.0.0

• ‘/var/named/named.root’, ‘/var/named/named.ca’

Si tratta del file contenente le indicazioni necessarie a raggiungere i servizi di risoluzionedei nomi del dominio principale. Nella consuetudine può avere diversi nomi, tra cui i piùimportanti sono ‘named.root’ e ‘named.rc’. Questo file viene realizzato da un’autoritàesterna e viene quindi semplicemente utilizzato così com’è. Segue un esempio di questo.

. 3600000 IN NS A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4

. 3600000 NS B.ROOT-SERVERS.NET.

B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107

. 3600000 NS C.ROOT-SERVERS.NET.

C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

. 3600000 NS D.ROOT-SERVERS.NET.

D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90

. 3600000 NS E.ROOT-SERVERS.NET.

E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10

. 3600000 NS F.ROOT-SERVERS.NET.

F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241

. 3600000 NS G.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4

. 3600000 NS H.ROOT-SERVERS.NET.

H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53

. 3600000 NS I.ROOT-SERVERS.NET.

I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17

. 3600000 NS J.ROOT-SERVERS.NET.

J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10

. 3600000 NS K.ROOT-SERVERS.NET.

K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129

. 3600000 NS L.ROOT-SERVERS.NET.

L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12

. 3600000 NS M.ROOT-SERVERS.NET.

M.ROOT-SERVERS.NET. 3600000 A 198.32.65.12

• ‘/var/named/zone/127.0.0’

Definisce la configurazione per la rete 127.0.0.0, cioè quella del ‘localhost’.

@ IN SOA localhost.localdomain. root.localhost.localdomain. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS localhost.localdomain.

1 PTR localhost.localdomain.

La prima riga, ‘SOA’ (Start Of Authority), è il preambolo del file. Si riferisce all’originerappresentata dal simbolo ‘@’ (in questo caso ‘@’ rappresenta 0.0.127.in-addr.arpa)e definisce in particolare i dati seguenti:

Page 87:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1145

– l’elaboratore di provenienza, ‘localhost.localdomain’, indicato in modo assolutoe per questo terminato con un punto;

– l’indirizzo di posta elettronica della persona o del gruppo che man-tiene il servizio di risoluzione dei nomi (in questo caso, la no-tazione ‘root.localhost.localdomain.’ si riferisce all’utente‘[email protected]’ e l’indirizzo è assoluto perché termina conun punto);

– il numero di serie, rappresentato in modo da comprendere la data (anno, mese, giorno),seguita da due cifre che permettono di esprimere la versione del giorno.

La seconda riga, NS (Name Server) indica il nome dell’elaboratore che offre il servizio dirisoluzione dei nomi.

La terza riga, PTR, indica che l’indirizzo locale ‘1’ del dominio 0.0.127.in-addr.arpa (cioè 1.0.0.127.in-addr.arpa, ovvero 127.0.0.1) è chiamato‘localhost.localdomain’.

In pratica, tutto questo definisce un servizio di risoluzione dei nomi che è in grado esclu-sivamente di interrogare i servizi del livello principale e di tradurre l’indirizzo 127.0.0.1 in‘localhost.localdomain’.

101.1.3 Gestire anche la rete localePerché il servizio di risoluzione dei nomi sia in grado di gestire anche la rete locale, occorre chepossa tradurre i nomi utilizzati nella rete locale in indirizzi IP e viceversa.

• ‘/etc/named.conf’

Il file viene modificato in modo da fare riferimento ad altri due file:

– ‘/var/named/zone/brot.dg’

per la trasformazione dei nomi di dominio appartenenti alla rete locale (brot.dg) inindirizzi IP;

– ‘/var/named/zone/192.168.1’

per la trasformazione degli indirizzi IP appartenenti alla rete locale (192.168.1.0) innomi di dominio.

options�

directory "/var/named";�;

//

zone "."�

type hint;

file "named.root";�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

zone "1.168.192.in-addr.arpa"�

type master;

file "zone/192.168.1";�;

zone "brot.dg"�

type master;

Page 88:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1146 DNS: introduzione

file "zone/brot.dg";�;

• ‘/etc/named.boot’ (obsoleto)

Questo file viene usato nelle versioni più vecchie di ‘named’. Quello che segue è il contenutoequivalente a quanto mostrato nel punto precedente.

directory /var/named

;

cache . named.root

;

primary 0.0.127.in-addr.arpa zone/127.0.0

primary 1.168.192.in-addr.arpa zone/192.168.1

primary brot.dg zone/brot.dg

• ‘/var/named/zone/192.168.1’

Definisce la configurazione per la rete locale 192.168.1.0.

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

1 PTR dinkel.brot.dg.

2 PTR roggen.brot.dg.

In tal modo è possibile determinare che l’indirizzo 192.168.1.1 corrisponde adinkel.brot.dg e che 192.168.1.2 corrisponde a roggen.brot.dg.3

• ‘/var/named/zone/brot.dg’

Definisce la configurazione per la rete locale brot.dg.

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

In tal modo è possibile determinare che l’indirizzo dinkel.brot.dg corrisponde a192.168.1.1 e che roggen.brot.dg corrisponde a 192.168.1.2

• ‘/var/named/zone/127.0.0’

Dal momento che adesso l’elaboratore locale può essere identificato con un nome più si-gnificativo del semplice ‘localhost’, conviene modificare anche il file ‘/var/named/zone/127.0.0’, benché ciò non sia strettamente necessario.

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

3I nomi di dominio sono completi (FQDN) perché sono indicati con un punto finale.

Page 89:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1147

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

1 PTR localhost.localdomain.

101.1.4 Gli altri elaboratori della reteGli altri elaboratori della rete locale, in questo caso solo roggen.brot.dg, fanno uso delservizio di risoluzione dei nomi offerto da dinkel.brot.dg, cioè 192.168.1.1, quindi il lorofile ‘/file/etc/resolv.conf’ deve contenere il riferimento a questo.

• ‘/etc/resolv.conf’

nameserver 192.168.1.1

101.1.5 Gestire anche la posta elettronica localePer aggiungere anche l’indicazione di un servente di posta elettronica, basta modificare il file ‘/var/named/zone/brot.dg’ contenuto nell’elaboratore dinkel.brot.dg, aggiungendola riga ‘MX’.

• ‘/var/named/zone/brot.dg’

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

MX 10 dinkel.brot.dg.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

101.1.6 Gestire gli aliasSpesso è conveniente definire dei nomi fittizi riferiti a elaboratori che ne hanno già uno.

• ‘/var/named/zone/brot.dg’

Viene modificato in modo da aggiungere gli alias www.brot.dg e ftp.brot.dg, chefanno riferimento sempre al solito dinkel.brot.dg che però svolge anche le funzionidi servente HTTP e FTP.

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

Page 90:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1148 DNS: introduzione

MX 10 dinkel.brot.dg.

www.brot.dg. CNAME dinkel.brot.dg.

ftp.brot.dg. CNAME dinkel.brot.dg.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

101.1.7 Isolamento dall’esternoSe la rete locale funziona senza poter accedere alla rete Internet esterna, conviene evitare che sitenti di interrogare i servizi di risoluzione dei nomi del dominio principale. basta commentare ladirettiva che attiva questa ricerca nel file ‘/etc/named.conf’.

• ‘/etc/named.conf’

I commenti possono iniziare con una doppia barra obliqua (‘//’), terminando così alla finedella riga, oppure possono essere indicati nella stessa forma del linguaggio C: ‘/*...*/’.

options�

directory "/var/named";�;

//

// La zona root viene esclusa attraverso dei commenti

//zone "."�

// type hint;

// file "named.root";

//�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

zone "1.168.192.in-addr.arpa"�

type master;

file "zone/192.168.1";�;

zone "brot.dg"�

type master;

file "zone/brot.dg";�;

• ‘/etc/named.boot’ (obsoleto)

I commenti sono preceduti da un punto e virgola.

directory /var/named

; cache . named.root

primary 0.0.127.in-addr.arpa zone/127.0.0

primary 1.168.192.in-addr.arpa zone/192.168.1

primary brot.dg zone/brot.dg

101.2 Strumenti e configurazioneDopo l’esempio visto nella prima parte di questo capitolo, conviene riepilogare le competenze deivari componenti che permettono la gestione del servizio di risoluzione dei nomi.

Page 91:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1149

101.2.1 # namednamed [opzioni] [[-b] file_di_avvio]‘named’ è il demone che compie in pratica il servizio di risoluzione dei nomi. Si avvale di un filedi avvio (o di configurazione) che in passato era ‘/etc/named.boot’ e attualmente è invece‘/etc/named.conf’. Eventualmente, se viene indicato un nome di file negli argomenti, vieneutilizzato quel file invece di quello predefinito.

Nei sistemi in cui si attiva la gestione di un servizio di risoluzione dei nomi, ‘named’ viene avviatodalla procedura di inizializzazione del sistema (Init), ma può anche essere avviato manualmente.

Per conoscere maggiori dettagli conviene consultare named(8).

101.2.2 /etc/named.confIl file ‘/etc/named.conf’ è il punto di partenza della configurazione di un servizio dirisoluzione dei nomi attraverso ‘named’. Può contenere diversi tipi di direttive. L’esempio se-guente mostra l’utilizzo di quelle più importanti.

options�

directory "/var/named";�;

//

zone "."�

type hint;

file "named.root";�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

zone "1.168.192.in-addr.arpa"�

type master;

file "zone/192.168.1";�;

zone "brot.dg"�

type master;

file "zone/brot.dg";�;

La direttiva ‘options’ serve a definire una serie di opzioni di funzionamento. Nell’esempio vienedichiarata solo l’opzione ‘directory’ che indica la collocazione predefinita di altri file usati perla configurazione del servizio di risoluzione dei nomi.

La direttiva ‘zone "." � ... � ’ viene utilizzata per definire che per il dominio principale (rappre-sentato da un punto), si utilizza il file ‘named.root’ (contenuto nella directory predefinita) e chequesto viene messo in una memoria cache (‘type hint’). Il dominio principale è quello di ori-gine e il file ‘named.root’ contiene gli indirizzi necessari a raggiungere i servizi di risoluzionedei nomi di quel dominio (cioè quelli di partenza). Il nome usato per il file ‘named.root’ puòcambiare da un sistema a un altro.

La terza direttiva definisce un file (‘zone/127.0.0’) contenente informazioni autorevoli sullarete 0.0.127.in-addr.arpa (127.0.0.0). In pratica, il file ‘zone/127.0.0’ serve per tra-durre gli indirizzi di quella sottorete in nomi. Di solito si tratta solo di tradurre 127.0.0.1 in‘localhost’.

La quarta direttiva definisce un file (‘zone/192.168.1’) contenente informazioni autorevoli

Page 92:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1150 DNS: introduzione

sulla rete 1.168.192.in-addr.arpa (192.168.1.0). In pratica, il file ‘zone/192.168.1’

serve per tradurre gli indirizzi di quella sottorete in nomi.

La quinta direttiva definisce un file (‘zone/brot.dg’) contenente informazioni autorevoli sullarete brot.dg (192.168.1.0, ma espressa per nome). In pratica, il file ‘zone/brot.dg’ serveper tradurre i nomi di quella sottorete in indirizzi IP. All’interno di questo file possono essereanche indicati degli alias e dei serventi per la gestione della posta elettronica.

Si può osservare che manca una direttiva che punti a un file per la risoluzione del dominio‘localdomain’. Dal momento che si tratta di un dominio fittizio riferito all’interno del pro-prio elaboratore, non è pensabile che un altro elaboratore tenti di accedervi. Pertanto, per la suatraduzione è più che sufficiente la presenza del file ‘/etc/hosts’.

Il DNS utilizza una serie di protocolli, tra cui anche UDP. Se ci si trova a essere protetti daun firewall che esclude il transito dei pacchetti UDP, per poter interpellare gli altri servizi dirisoluzione dei nomi delle zone che sono al di fuori della propria competenza locale, occorreaggiungere una direttiva che rinvia le richieste a un servizio esterno. Questa situazione può ve-rificarsi quando la propria connessione a Internet avviene attraverso un ISP attento ai problemidi sicurezza e che usa questa politica di protezione. L’esempio seguente, per concludere, mo-stra in che modo espandere la direttiva ‘options’ per aggiungere l’indicazione di un serviziodi risoluzione dei nomi esterno a cui inoltrare le richieste.

options�

directory "/var/named";

forwarders�

111.112.113.114;�;

�;

//

zone "."�

type hint;

file "named.root";�;

//

//...

101.2.3 /var/named/named.rootNegli esempi visti fino a questo punto, il file ‘/var/named/named.root’ (o ‘/var/named/named.ca’) è quello che definisce gli indirizzi dei servizi di risoluzione dei nomi a livello deldominio principale. Questi indirizzi cambiano nel tempo e questo file aggiornato è ottenibilepresso l’URI

�ftp://ftp.rs.internic.net/domain/named.root � .4

Segue un esempio di questo file.

; This file holds the information on root name servers needed to

; initialize cache of Internet domain name servers

; (e.g. reference this file in the "cache . <file>"

; configuration file of BIND domain name servers).

;

; This file is made available by InterNIC registration services

; under anonymous FTP as

; file /domain/named.root

; on server FTP.RS.INTERNIC.NET

4Alla fine del capitolo viene mostrato come ottenere un equivalente di questo file senza dover utilizzare il protocolloFTP che, se usato da tutti, genererebbe un carico insopportabile per il servizio offerto da ftp.rs.internic.net.

Page 93:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1151

; -OR- under Gopher at RS.INTERNIC.NET

; under menu InterNIC Registration Services (NSI)

; submenu InterNIC Registration Archives

; file named.root

;

; last update: May 19, 1997

; related version of root zone: 1997051700

;

;

; formerly NS.INTERNIC.NET

;

. 3600000 IN NS A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4

;

; formerly NS1.ISI.EDU

;

. 3600000 NS B.ROOT-SERVERS.NET.

B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107

;

; formerly C.PSI.NET

;

. 3600000 NS C.ROOT-SERVERS.NET.

C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

;

; formerly TERP.UMD.EDU

;

. 3600000 NS D.ROOT-SERVERS.NET.

D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90

;

; formerly NS.NASA.GOV

;

. 3600000 NS E.ROOT-SERVERS.NET.

E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10

;

; formerly NS.ISC.ORG

;

. 3600000 NS F.ROOT-SERVERS.NET.

F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241

;

; formerly NS.NIC.DDN.MIL

;

. 3600000 NS G.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4

;

; formerly AOS.ARL.ARMY.MIL

;

. 3600000 NS H.ROOT-SERVERS.NET.

H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53

;

; formerly NIC.NORDU.NET

;

. 3600000 NS I.ROOT-SERVERS.NET.

I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17

;

Page 94:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1152 DNS: introduzione

; temporarily housed at NSI (InterNIC)

;

. 3600000 NS J.ROOT-SERVERS.NET.

J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10

;

; housed in LINX, operated by RIPE NCC

;

. 3600000 NS K.ROOT-SERVERS.NET.

K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129

;

; temporarily housed at ISI (IANA)

;

. 3600000 NS L.ROOT-SERVERS.NET.

L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12

;

; temporarily housed at ISI (IANA)

;

. 3600000 NS M.ROOT-SERVERS.NET.

M.ROOT-SERVERS.NET. 3600000 A 198.32.65.12

; End of File

101.2.4 $ nslookupnslookup [opzioni] [host_da_trovare | - servente ]‘nslookup’ è un programma in grado di interrogare un servizio di risoluzione dei nomi. Hadue modalità di funzionamento: interattiva e non interattiva. Nel primo caso, il programma offreun invito attraverso il quale inserire dei comandi, nel secondo tutto si svolge attraverso l’uso diargomenti nella riga di comando.

La modalità interattiva si ottiene quando:

• non vengono forniti argomenti e di conseguenza viene utilizzato il servizio di risoluzionedei nomi predefinito attraverso il file ‘/etc/resolv.conf’;

• il primo argomento è un trattino (‘-’) e il secondo è il nome o l’indirizzo necessario a rag-giungere un servizio di risoluzione dei nomi.

La modalità non interattiva viene utilizzata quando il nome o l’indirizzo di un nodo da cercareviene indicato come primo argomento. In tal caso, il secondo argomento opzionale è il nome ol’indirizzo per raggiungere un servizio di risoluzione dei nomi.

È possibile configurare il programma creando il file ‘˜/.nslookuprc’, contenente una serie dirighe corrispondenti a opzioni del comando ‘set’ di ‘nslookup’. Nello stesso modo, si possonoindicare tali opzioni del comando ‘set’ nella riga di comando, facendole precedere da un trattino.

Vedere nslookup(8).

Alcuni comandi interattivi

Quando si avvia ‘nslookup’ in modo interattivo, questo si comporta in modo simile auna shell. In particolare, i comandi che si traducono in un’emissione di informazioni sulloschermo, permettono l’uso dei simboli ‘>’ e ‘>>’ per la ridirezione in un file, rispettivamentein sovrascrittura e in aggiunta. Inoltre, è possibile utilizzare la combinazione di tasti [ Ctrl+c ]

per interrompere una richiesta. L’invito è un semplice simbolo di maggiore.

>

Page 95:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1153

Segue un elenco parziale dei comandi disponibili.

———

help | ?

Emette un breve riassunto dei comandi disponibili.

exit

Conclude il funzionamento di ‘nslookup’.

elaboratore_host [servente_dns]L’indicazione del nome di dominio o del numero IP di un elaboratore equivale alla ri-chiesta di informazioni su quell’elaboratore. Se subito dopo viene indicato l’indirizzo diun altro elaboratore, si intende inviare questa richiesta a un servizio DNS ospitato pressoquell’elaboratore particolare, invece di utilizzare il servizio predefinito.

ls [opzioni] dominio [> file | >> file]Elenca le informazioni disponibili sul dominio indicato. Se non vengono fornite opzionisono emessi i nomi e i rispettivi indirizzi numerici. Le opzioni ammissibili sono in partico-lare le seguenti:

• ‘-t tipo’

elenca i record del tipo specificato;

• ‘-a’

elenca gli alias (equivale a ‘-t CNAME’);

• ‘-d’

elenca tutti i record (equivale a ‘-t ANY’).

server dominio

Cambia l’indicazione del servizio di risoluzione dei nomi predefinito, ovvero quello cheviene interpellato se non si indica diversamente nel comando di richiesta di risoluzione diun indirizzo.

set nome[=valore]Il comando ‘set’ permette di definire una serie di opzioni di funzionamento di ‘nslookup’.Alcune di queste sono valide solo in quanto nominate dopo il comando ‘set’, altre richie-dono l’assegnamento di un valore.

Quando ‘nslookup’ viene usato in modo non interattivo, è possibile indicare delle opzionidel comando ‘set’, utilizzandole come se fossero opzioni della riga di comando, composteper questo con un trattino iniziale.

set all

Emette la configurazione attuale di una serie di valori.

set class=valore | set cl=valore

Cambia la classe di richiesta. Il valore predefinito è ‘IN’ (Internet). Si possono utilizzareanche altri tipi di classi, in particolare ‘ANY’ che si riferisce indistintamente a tutte.

set querytype=valore | set type=valore | set q=valore | set ty=valore

Cambia il tipo di richiesta di informazioni. Tra gli altri, potrebbe trattarsi di:

• ‘A’ l’indirizzo Internet di un nodo (predefinito);

• ‘CNAME’ il nome canonico per un alias;

• ‘NS’ il nodo che offre il servizio di risoluzione dei nomi per la zona indicata;

• ‘ANY’ tutte le informazioni.

Page 96:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1154 DNS: introduzione

Alcune opzioni

Le opzioni della riga di comando corrispondono alle opzioni del comando ‘set’.

———

-all

Emette la configurazione attuale di una serie di valori.

-class=valore | -cl=valore

Cambia la classe di richiesta.

-querytype=valore | -type=valore | -q=valore | -ty=valore

Cambia il tipo di richiesta di informazioni.

Esempi

$ nslookup

Avvia ‘nslookup’ in modalità interattiva. Per terminare si utilizza il comando ‘exit’.

$ nslookup 192.168.1.2

Restituisce il nome e l’indirizzo Internet corrispondente al nodo indicato attraverso il nu-mero IP.

$ nslookup roggen.brot.dg.

Restituisce il nome e l’indirizzo Internet corrispondente al nodo indicato attraverso il nomedi dominio completo.

$ nslookup roggen.brot.dg. ns2.brot.dg

Interpella il servizio di risoluzione dei nomi offerto dall’elaboratore ns2.brot.dg perottenere le informazioni su roggen.brot.dg (indicato in modo assoluto).

$ nslookup - ns2.brot.dg

Avvia ‘nslookup’ in modalità interattiva, interpellando il servizio di risoluzione dei nomipresso ns2.brot.dg.

$ nslookup -q=ns brot.dg

Richiede l’indicazione del servizio di risoluzione dei nomi competente per il dominiobrot.dg.

$ nslookup -q=any brot.dg

Richiede l’indicazione di tutte le informazioni disponibili sul dominio brot.dg.

Alcune versioni di qualche distribuzione GNU/Linux contengono un’edizione di‘nslookup’ non troppo ben funzionante. In particolare, risulta difficoltoso l’inserimentodi nomi di dominio assoluti per mezzo del punto finale. In quel caso, si può provare autilizzare nomi di dominio assoluti, senza il punto finale.

101.2.5 # ndcndc direttiva...

‘ndc’ è un programma (in forma di script) che permette di inviare diversi tipi di segnali a ‘named’,il demone per la gestione del servizio di risoluzione dei nomi.5

5Se non si dispone di ‘ndc’, per fare in modo che ‘named’ prenda in considerazione delle eventuali modifiche apportateai file di configurazione, si può inviare un segnale ‘SIGHUP’ al processo corrispondente, oppure lo si può interrompere eriavviare manualmente. Naturalmente, conviene evitare di agire in questo modo se esiste lo script.

Page 97:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: introduzione 1155

Alcune direttivestart

Avvia ‘named’ se non è già in funzione.

stop

Termina l’esecuzione di ‘named’ se è in funzione.

restart

Termina l’esecuzione e quindi riavvia ‘named’.

101.2.6 $ hosthost [opzioni] {host| -l zona} [servente_dns]Il programma di servizio ‘host’ consente di interrogare un servizio di risoluzione dei nomi inmodo simile a ‘nslookup’. Le opzioni e le relative funzionalità a disposizione sono molte. Perlo studio dettagliato delle possibilità di questo programma conviene consultare la sua pagina dimanuale: host(1).

Dal modello sintattico presentato si può osservare che il primo argomento dopo le opzioni, è ilnome o l’indirizzo di un nodo, oppure il nome di una zona, espressa attraverso il nome di dominiorelativo. Eventualmente, si può aggiungere un secondo argomento che permette di specificare unservente DNS alternativo a quello predefinito.

Alcune opzioni-v

-vv

Permette di ottenere maggiori informazioni, specialmente nel secondo caso, in cui il detta-glio raggiunge livelli estremi.

-t tipo

Elenca i record del tipo specificato. Per fare riferimento a tutti i tipi di record, si puòusare la parola chiave ‘ANY’, oppure l’asterisco (opportunamente protetto, se necessario,dall’interpretazione della shell).

-l zona

Permette di indicare una zona nel primo argomento, al posto di un nodo particolare.

Esempi

$ host dinkel.brot.dg

Mostra il nome e l’indirizzo corrispondente.

$ host 192.168.1.1

Mostra l’indirizzo e il nome corrispondente.

$ host -l brot.dg

Mostra la lista completa dei nodi nella zona brot.dg.

$ host -l 1.168.192.in-addr.arpa

Mostra la lista completa dei nodi nella zona 1.168.192.in-addr.arpa, ovvero dellarete 192.168.1.0.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 98:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 102DNS: dettagli ulterioriDopo l’introduzione del capitolo precedente sul DNS, è bene approfondire un po’ l’argomentoattraverso delle prove pratiche e studiando in modo più dettagliato la configurazione di questoservizio.

102.1 VerifichePer comprendere il servizio DNS è utile fare qualche esperimento. Per prima cosa ci si deve accer-tare del funzionamento del servizio di risoluzione dei nomi predefinito, quindi si può esplorare larete per vedere dove sono collocati i servizi di risoluzione dei nomi competenti per le varie zone.

102.1.1 Verificare il funzionamento del servizioSe è appena stato configurato il servizio di risoluzione dei nomi, si può riavviare (o semplicementeavviare) il servizio utilizzando lo script ‘ndc’.

# ndc stop[ Invio ]

# ndc start[ Invio ]

Il demone ‘named’ emette alcuni messaggi che vengono annotati nel registro del sistema, gene-ralmente nel file ‘/var/log/messages’. È utile consultare il suo contenuto per verificare chela configurazione sia corretta. Trattandosi dell’ultima cosa avviata, i messaggi si trovano alla finedel file.

# tail /var/log/messages[ Invio ]

Il listato seguente si riferisce all’esempio di configurazione già vista nel capitolo precedente.

Dec 23 09:41:04 dinkel named[538]: starting. named 8.1.2

Dec 23 09:41:05 dinkel named[538]: master zone "0.0.127.in-addr.arpa" loaded

Dec 23 09:41:05 dinkel named[538]: master zone "1.168.192.in-addr.arpa" loaded

Dec 23 09:41:05 dinkel named[538]: master zone "brot.dg" loaded

Dec 23 09:41:05 dinkel named[538]: listening on [127.0.0.1].53 (lo)

Dec 23 09:41:05 dinkel named[538]: listening on [192.168.1.1].53 (eth0)

Dec 23 09:41:05 dinkel named[538]: Forwarding source address is [0.0.0.0].1027

Dec 23 09:41:05 dinkel named[539]: Ready to answer queries.

Se qualcosa non va, è lo stesso ‘named’ ad avvisare attraverso questi messaggi. Se è andato tuttobene si può provare a vedere cosa accade avviando ‘nslookup’.

$ nslookup[ Invio ]

Default Server: localhost.localdomain

Address: 127.0.0.1

>

Avviando ‘nslookup’ senza argomenti, si fa in modo che questo interpelli il servizio dirisoluzione dei nomi predefinito, cioè quello indicato nel file ‘/etc/resolv.conf’. Trattan-dosi del servizio locale, ne viene visualizzato il nome e l’indirizzo; quindi ‘nslookup’ si accingea ricevere dei comandi.

Se si è connessi alla rete esterna, si può provare a interrogare il servente per la risoluzione di un

1156

Page 99:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1157

nome, per esempio pluto.linux.it.1

> pluto.linux.it[ Invio ]

Server: localhost.localdomain

Address: 127.0.0.1

Name: pluto.linux.it

Address: 194.184.117.4

Dal momento che il servizio di risoluzione dei nomi locale non dispone di tale informazione, perottenerla ha dovuto interpellare i vari servizi DNS a partire dal dominio principale (‘.’), fino aquando ha potuto ricevere la risposta.

Dal momento che tale procedura è abbastanza dispendiosa, il nome e l’indirizzo corrispondentevengono memorizzati in modo temporaneo, nella memoria cache.

> pluto.linux.it[ Invio ]

Server: localhost.localdomain

Address: 127.0.0.1

Non-authoritative answer:

Name: pluto.linux.it

Address: 194.184.117.4

Quando il servizio di risoluzione dei nomi interpellato è in grado di rispondere da solo, in base aquanto archiviato nella sua memoria transitoria, si ottiene una cosiddetta risposta non-autorevole.

Per controllare se i file di zona di competenza del servizio di risoluzione dei nomi locale sonocorretti, conviene cambiare il tipo di interrogazione.

> set q=any[ Invio ]

Quindi si interpella la zona di competenza, cioè brot.dg, seguendo gli esempi già mostrati.

> brot.dg[ Invio ]

brot.dg

origin = dinkel.brot.dg

mail addr = root.dinkel.brot.dg

serial = 1998031800

refresh = 28800 (8 hours)

retry = 7200 (2 hours)

expire = 604800 (7 days)

minimum ttl = 86400 (1 day)

brot.dg nameserver = dinkel.brot.dg

brot.dg preference = 10, mail exchanger = dinkel.brot.dg

brot.dg nameserver = dinkel.brot.dg

dinkel.brot.dg internet address = 192.168.1.1

>

> ls -t any brot.dg[ Invio ]

[localhost.localdomain]

brot.dg. SOA dinkel.brot.dg root.dinkel.brot.dg.

1L’esempio proposto riguarda la situazione di un certo momento. Se si tenta di ripetere l’esempio, è probabile che ilrisultato sia differente, soprattutto per ciò che riguarda i numeri IP attribuiti ai vari nodi che si incontrano.

Page 100:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1158 DNS: dettagli ulteriori

(1998031800 28800 7200 604800 86400)

brot.dg. NS dinkel.brot.dg

brot.dg. MX 10 dinkel.brot.dg

roggen.brot.dg A 192.168.1.2

dinkel.brot.dg A 192.168.1.1

ftp.brot.dg CNAME dinkel.brot.dg

www.brot.dg CNAME dinkel.brot.dg

brot.dg. SOA dinkel.brot.dg root.dinkel.brot.dg.

(1998031800 28800 7200 604800 86400)

Si conclude l’attività di ‘nslookup’ con il comando ‘exit’.

> exit[ Invio ]

102.1.2 Risoluzione distribuita dei nomiNon si può comprendere il meccanismo con cui si risolvono i nomi a livello della rete glo-bale se non si fanno delle prove. Nelle descrizioni seguenti si vuole raggiungere il nodopluto.linux.it facendo una ricerca a partire da uno dei servizi di risoluzione dei nomiprincipali, discendendo lentamente fino a raggiungere l’ultimo contenente effettivamente le infor-mazioni relative.

Si inizia avviando il programma ‘nslookup’ in modo da interpellare un servente di quelli deldominio principale, per esempio i.root-servers.net. Nel comando che segue, il nomeviene indicato con il punto finale, per sottolineare che si tratta di un nome di dominio completo.

$ nslookup - i.root-servers.net.[ Invio ]

Server: i.root-servers.net

Address: 192.36.148.17

>

Se tutto va bene, il servente risponde e si può proseguire, altrimenti si può tentare di interpellarneun altro alternativo (*.root-servers.net).

I servizi di risoluzione dei nomi del dominio principale sono in grado di informare su quali sianoi servizi relativi ai domini di primo livello, detti TLD o Top Level Domain. Per esempio, com,edu, net,... it, sono domini di primo livello.

> set q=ns[ Invio ]

Con questo comando si vuole semplicemente concentrare l’attenzione sui record contenenti leinformazioni sui nodi che offrono i servizi di risoluzione dei nomi.

> it.[ Invio ]

Digitando semplicemente il nome del dominio di primo livello ‘it’, si vuole ottenere l’elencodei nodi in grado di risolvere i nomi che vi appartengono. Il punto finale indicato nella riga dicomando, è voluto, e sta a significare che il nome corrisponde esattamente a quello che si vuole,evitando che il sistema possa completarlo con un dominio predefinito.

Server: i.root-servers.net

Address: 192.36.148.17

Non-authoritative answer:

it nameserver = SIMON.CS.CORNELL.EDU

it nameserver = ADMII.ARL.MIL

it nameserver = NS.EU.NET

Page 101:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1159

it nameserver = NS2.PSI.NET

it nameserver = SERVER2.INFN.it

it nameserver = NAMESERVER.CNR.it

it nameserver = DNS.NIC.it

Authoritative answers can be found from:

SIMON.CS.CORNELL.EDU internet address = 128.84.154.10

ADMII.ARL.MIL internet address = 128.63.31.4

ADMII.ARL.MIL internet address = 128.63.5.4

NS.EU.NET internet address = 192.16.202.11

NS2.PSI.NET internet address = 38.8.50.2

SERVER2.INFN.it internet address = 131.154.1.3

NAMESERVER.CNR.it internet address = 194.119.192.34

DNS.NIC.it internet address = 193.205.245.5

Di questi servizi di risoluzione dei nomi se ne può scegliere uno per continuare l’esplorazione,per esempio quello offerto da dns.nic.it. Per indicare a ‘nslookup’ di cambiare servente sideve usare il comando omonimo.

> server dns.nic.it[ Invio ]

> server dns.nic.it

Default Server: dns.nic.it

Address: 193.205.245.5

>

Da questo servente si desidera conoscere quali altri serventi siano competenti per il dominiolinux.it.

> linux.it.[ Invio ]

Server: dns.nic.it

Address: 193.205.245.5

Non-authoritative answer:

linux.it nameserver = dns2.nic.it

linux.it nameserver = ns.publinet.it

linux.it nameserver = soda.com.dist.unige.it

Authoritative answers can be found from:

dns2.nic.it internet address = 193.205.245.8

ns.publinet.it internet address = 151.99.137.2

soda.com.dist.unige.it internet address = 130.251.8.88

>

Si desidera proseguire la ricerca per determinare chi sia competente per il dominiopluto.linux.it. Per questo si cambia servente; si prova con dns2.nic.it.

> server dns2.nic.it[ Invio ]

> server dns2.nic.it

Default Server: dns2.nic.it

Address: 193.205.245.8

>

Page 102:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1160 DNS: dettagli ulteriori

> pluto.linux.it.[ Invio ]

> pluto.linux.it.

Server: dns2.nic.it

Address: 193.205.245.8

Non-authoritative answer:

pluto.linux.it nameserver = snoopy.psy.unipd.it

pluto.linux.it nameserver = ns.publinet.it

pluto.linux.it nameserver = serena.keycomm.it

Authoritative answers can be found from:

snoopy.psy.unipd.it internet address = 147.162.126.251

ns.publinet.it internet address = 151.99.137.2

serena.keycomm.it internet address = 194.184.117.3

>

Probabilmente, uno di questi serventi è in grado di conoscere direttamente chi siapluto.linux.it. Si prova con serena.keycomm.it.

> server serena.keycomm.it[ Invio ]

Default Server: serena.keycomm.it

Address: 194.184.117.3

>

> pluto.linux.it.[ Invio ]

Server: serena.keycomm.it

Address: 194.184.117.3

pluto.linux.it nameserver = snoopy.psy.unipd.it

pluto.linux.it nameserver = ns.publinet.it

pluto.linux.it nameserver = serena.keycomm.it

snoopy.psy.unipd.it internet address = 147.162.126.251

ns.publinet.it internet address = 151.99.137.2

serena.keycomm.it internet address = 194.184.117.3

A questo punto si vede che i serventi proposti per risolvere pluto.linux.it sono ancora glistessi di poco prima. Probabilmente si è giunti al termine della catena. Si prova a cambiare tipo dirichiesta a ‘nslookup’ abilitando qualunque tipo di informazione sia ottenibile.

> set q=any[ Invio ]

Quindi si prova a chiedere informazioni su pluto.linux.it.

> pluto.linux.it.[ Invio ]

Default Server: serena.keycomm.it

Server: serena.keycomm.it

Address: 194.184.117.3

pluto.linux.it text = "PLUTO Linux User Group"

pluto.linux.it nameserver = snoopy.psy.unipd.it

pluto.linux.it nameserver = ns.publinet.it

pluto.linux.it preference = 30, mail exchanger = ilary.keycomm.it

Page 103:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1161

pluto.linux.it preference = 10, mail exchanger = master.pluto.linux.it

pluto.linux.it

origin = serena.keycomm.it

mail addr = dalla.pluto.linux.it

serial = 1998003020

refresh = 86400 (1 day)

retry = 7200 (2 hours)

expire = 2592000 (30 days)

minimum ttl = 86400 (1 day)

pluto.linux.it internet address = 194.184.117.4

pluto.linux.it nameserver = serena.keycomm.it

pluto.linux.it nameserver = snoopy.psy.unipd.it

pluto.linux.it nameserver = ns.publinet.it

pluto.linux.it nameserver = serena.keycomm.it

snoopy.psy.unipd.it internet address = 147.162.126.251

ns.publinet.it internet address = 151.99.137.2

ilary.keycomm.it internet address = 194.184.116.28

master.pluto.linux.it internet address = 194.184.117.4

serena.keycomm.it internet address = 194.184.117.3

>

Ormai dovrebbe essere chiaro che pluto.linux.it e serena.keycomm.it sono la stessamacchina. Per concludere si utilizza il comando ‘exit’.

> exit[ Invio ]

102.1.3 Risoluzione distribuita del dominio in-addr.arpaUna delle cose più difficili da capire per un principiante è cosa sia il dominio in-addr.arpa.Per questo vale la pena di perdere del tempo a mostrare un esempio che dovrebbe chiarirneil senso. Nella sezione precedente si è visto da un esempio tratto dalla realtà che un soloindirizzo IP può corrispondere a diversi nomi di dominio. In pratica, pluto.linux.it eserena.keycomm.it hanno in comune solo il dominio di primo livello: it. Ciò significache per tradurre i due nomi, si usano potenzialmente servizi di risoluzione differenti. Questo do-vrebbe permettere di capire che teoricamente si possono utilizzare mappe differenti dalle soliteper raggiungere gli elaboratori (che sono definiti univocamente solo per mezzo dell’indirizzo IP).

Il dominio in-addr.arpa è un dominio alternativo, dal quale si diramano una serie di sotto-domini che permettono di raggiungere tutti gli elaboratori della rete che dispongano di un nomedi dominio normale. Questi sottodomini sono composti dal numero IP in cui l’ordine degli ot-tetti appare invertito. Nel caso dell’indirizzo IP 194.184.117.3, il dominio corrispondente in-addr.arpa è 3.117.184.194.in-addr.arpa. Si tratta di un nome di dominio in cuiperò l’indirizzo IP è implicito, perché fa parte del nome, e viene usato per conoscere il nome didominio normale corrispondente.

La cosa migliore è provare, esattamente come mostrato nella sezione precedente. Si cominciaavviando ‘nslookup’. Anche questa volta si interpella direttamente un servizio di risoluzione deinomi principale.

$ nslookup - i.root-servers.net.[ Invio ]

Server: i.root-servers.net

Address: 192.36.148.17

>

> set q=ns[ Invio ]

Page 104:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1162 DNS: dettagli ulteriori

Anche questa volta ci si vuole concentrare sui soli record contenenti le informazioni dei nodi cheoffrono il servizio di risoluzione dei nomi.

> in-addr.arpa.[ Invio ]

Con questa richiesta si vuole conoscere quali nodi siano competenti per la risoluzione del dominioin-addr.arpa.

Server: i.root-servers.net

Address: 192.36.148.17

in-addr.arpa nameserver = G.ROOT-SERVERS.NET

in-addr.arpa nameserver = A.ROOT-SERVERS.NET

in-addr.arpa nameserver = H.ROOT-SERVERS.NET

in-addr.arpa nameserver = B.ROOT-SERVERS.NET

in-addr.arpa nameserver = C.ROOT-SERVERS.NET

in-addr.arpa nameserver = D.ROOT-SERVERS.NET

in-addr.arpa nameserver = E.ROOT-SERVERS.NET

in-addr.arpa nameserver = I.ROOT-SERVERS.NET

in-addr.arpa nameserver = F.ROOT-SERVERS.NET

G.ROOT-SERVERS.NET internet address = 192.112.36.4

A.ROOT-SERVERS.NET internet address = 198.41.0.4

H.ROOT-SERVERS.NET internet address = 128.63.2.53

B.ROOT-SERVERS.NET internet address = 128.9.0.107

C.ROOT-SERVERS.NET internet address = 192.33.4.12

D.ROOT-SERVERS.NET internet address = 128.8.10.90

E.ROOT-SERVERS.NET internet address = 192.203.230.10

I.ROOT-SERVERS.NET internet address = 192.36.148.17

F.ROOT-SERVERS.NET internet address = 192.5.5.241

>

In pratica sono gli stessi servizi di risoluzione dei nomi del dominio principale (quasi tutti). Siprova ad aggiungere il primo ottetto dell’indirizzo IP.

> 194.in-addr.arpa.[ Invio ]

Server: i.root-servers.net

Address: 192.36.148.17

Non-authoritative answer:

194.in-addr.arpa nameserver = NS.EU.NET

194.in-addr.arpa nameserver = AUTH03.NS.UU.NET

194.in-addr.arpa nameserver = NS2.NIC.FR

194.in-addr.arpa nameserver = SUNIC.SUNET.SE

194.in-addr.arpa nameserver = MUNNARI.OZ.AU

194.in-addr.arpa nameserver = TECKLA.APNIC.NET

194.in-addr.arpa nameserver = NS.RIPE.NET

Authoritative answers can be found from:

NS.EU.NET internet address = 192.16.202.11

AUTH03.NS.UU.NET internet address = 198.6.1.83

NS2.NIC.FR internet address = 192.93.0.4

SUNIC.SUNET.SE internet address = 192.36.125.2

MUNNARI.OZ.AU internet address = 128.250.1.21

TECKLA.APNIC.NET internet address = 202.12.28.129

NS.RIPE.NET internet address = 193.0.0.193

Page 105:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1163

>

Ecco che i nomi restituiti cambiano. Si decide di interpellare il servizio di risoluzione dei nomiofferto da ns.eu.net per continuare la ricerca.

> server ns.eu.net[ Invio ]

Default Server: ns.eu.net

Address: 192.16.202.11

>

Quindi si chiedono informazioni su 184.194.in-addr.arpa.

> 184.194.in-addr.arpa.[ Invio ]

Server: ns.eu.net

Address: 192.16.202.11

Non-authoritative answer:

184.194.in-addr.arpa nameserver = server-b.cs.interbusiness.it

184.194.in-addr.arpa nameserver = dns.interbusiness.it

184.194.in-addr.arpa nameserver = ns.ripe.net

Authoritative answers can be found from:

server-b.cs.interbusiness.it internet address = 151.99.250.2

dns.interbusiness.it internet address = 151.99.125.2

ns.ripe.net internet address = 193.0.0.193

>

Per proseguire occorre ancora cambiare servente. Si decide di utilizzare server-b.cs.interbusiness.it.

> server-b.cs.interbusiness.it[ Invio ]

Default Server: server-b.cs.interbusiness.it

Address: 151.99.250.2

>

Quindi si chiedono informazioni su 117.184.194.in-addr.arpa.

> 117.184.194.in-addr.arpa.[ Invio ]

Server: server-b.cs.interbusiness.it

Address: 151.99.250.2

Non-authoritative answer:

117.184.194.in-addr.arpa nameserver = dns.interbusiness.it

117.184.194.in-addr.arpa nameserver = dns.nis.garr.it

117.184.194.in-addr.arpa nameserver = geronimo.keycomm.it

Authoritative answers can be found from:

dns.interbusiness.it internet address = 151.99.125.2

dns.nis.garr.it internet address = 193.205.245.8

geronimo.keycomm.it internet address = 194.184.116.2

>

Page 106:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1164 DNS: dettagli ulteriori

Ancora un passo prima della fine.

> server dns.interbusiness.it[ Invio ]

Default Server: dns.interbusiness.it

Address: 151.99.125.2

>

> 3.117.184.194.in-addr.arpa.[ Invio ]

Server: dns.interbusiness.it

Address: 151.99.125.2

117.184.194.in-addr.arpa

origin = geronimo.keycomm.it

mail addr = hostmaster.geronimo.keycomm.it

serial = 98022001

refresh = 86400 (1 day)

retry = 7200 (2 hours)

expire = 2592000 (30 days)

minimum ttl = 86400 (1 day)

A quanto pare la ricerca è finita; si prova a modificare il tipo di richiesta in modo da ottenere tuttii tipi di notizie disponibili.

> set q=any[ Invio ]

> 3.117.184.194.in-addr.arpa.[ Invio ]

Server: dns.interbusiness.it

Address: 151.99.125.2

3.117.184.194.in-addr.arpa name = serena.keycomm.it

117.184.194.in-addr.arpa nameserver = geronimo.keycomm.it

117.184.194.in-addr.arpa nameserver = dns.interbusiness.it

117.184.194.in-addr.arpa nameserver = dns.nis.garr.it

geronimo.keycomm.it internet address = 194.184.116.2

dns.interbusiness.it internet address = 151.99.125.2

dns.nis.garr.it internet address = 193.205.245.8

>

Ecco che 194.184.117.3 corrisponde a serena.keycomm.it. Per concludere si utilizza il co-mando ‘exit’.

> exit[ Invio ]

102.1.3.1 Osservazioni

Mentre la scomposizione in domini normali si astrae completamente dalla disposizione degli in-dirizzi IP, la scomposizione di un dominio in-addr.arpa è vincolato in qualche modo allasuddivisione in ottetti dell’indirizzo IP.

In pratica, si può predisporre un file di configurazione di ‘named’ per la risoluzione di un ottettodi indirizzi IP, come negli esempi visti in precedenza, quando si volevano risolvere gli indirizzi IPdella sottorete 192.168.1.0, indicando il dominio 1.168.192.in-addr.arpa. Ma se invecesi dispone di due sottoreti che spezzano a metà l’ultimo ottetto, non si può demandare all’interno

Page 107:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1165

di queste sottoreti il compito di risolvere i domini in-addr.arpa rispettivi, per il semplicefatto che questi non esistono.

102.2 File di configurazione più in dettaglioÈ giunto finalmente il momento di analizzare un po’ meglio la sintassi del contenuto dei varifile di configurazione utilizzati da ‘named’. Il loro significato può essere apprezzato solo dopo ilconforto di alcuni esperimenti riusciti con il sistema di risoluzione dei nomi.

Tutti i file di definizione delle zone hanno in comune il modo di indicare i commenti: il punto e vir-gola fa sì che venga ignorato tutto ciò che appare da quella posizione fino alla fine della riga. Que-sto valeva anche per il file ‘/etc/named.boot’, mentre per il nuovo ‘/etc/named.conf’

i commenti sono introdotti da una doppia barra obliqua, oppure sono delimitati come si fa nellinguaggio C: ‘/*...*/’.

102.2.1 /etc/named.confIl file ‘/etc/named.conf’ è già stato visto più volte nel capitolo precedente. Si riprende qui ilsolito esempio.

options�

directory "/var/named";�;

//

zone "."�

type hint;

file "named.root";�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

zone "1.168.192.in-addr.arpa"�

type master;

file "zone/192.168.1";�;

zone "brot.dg"�

type master;

file "zone/brot.dg";�;

Segue l’elenco e la descrizione delle direttive e delle opzioni più importanti di questo file.

• ‘options’

options�

opzione;

...�;

La direttiva ‘options’ serve a definire una serie di opzioni generali. La più comune è‘directory’, con cui si dichiara la directory predefinita a cui fanno riferimento le diret-tive sulla definizione dei file di zona.

– ‘directory’

Page 108:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1166 DNS: dettagli ulteriori

directory directory_di_partenza

L’opzione ‘directory’ definisce la collocazione predefinita dei file di zona, in mododa permetterne successivamente l’indicazione in modo relativo a questa directory.

– ‘forwarders’

forwarders�

indirizzo_numerico;

...�;

L’opzione ‘forwarders’ dichiara che il servizio di risoluzione dei nomi locale puòinterpellare a sua volta altri servizi, indicati da indirizzi numerici, per le richieste chenon dovesse riuscire a risolvere.

È indispensabile utilizzare questa opzione se il proprio elaboratore è difeso da unfirewall che impedisce il transito di pacchetti UDP.

– ‘forward only’

forward only;

L’opzione ‘forward only’ serve a specificare che si tratta di un servizio di risoluzionedei nomi slave, che cioè rinvia sistematicamente ogni richiesta agli indirizzi indicatinell’opzione ‘forwarders’.

• ‘zone’

La direttiva ‘zone’ serve a fare riferimento a una zona; ma ciò può avvenire in modi diversi,che vengono descritti nelle sezioni seguenti.

È importante sottolineare che in questo file non si usa il punto finale per indicare domini as-soluti. I domini sono sempre indicati esattamente come sono, senza sottintendere alcunché,pertanto il punto finale sarebbe solo un errore.

102.2.1.1 Memoria cache del dominio principale

zone "."�

type hint;

file file_di_zona;�;

In questo modo si indica il file contenente le informazioni necessarie a raggiungere i DNS deldominio principale. In tal modo, il DNS locale conserverà una memoria cache delle informazioniottenute, in modo da non dover interrogare ogni volta tutti i DNS esterni necessari.

Senza una direttiva ‘zone’ che faccia riferimento al dominio principale, ‘named’ non ha modo diaccedere ad altri servizi di risoluzione dei nomi al di fuori del suo stretto ambito di competenza.

Si fa a meno della specificazione di questa zona quando si gestisce un servizio di risoluzione deinomi a uso esclusivo di una rete locale chiusa, senza accesso all’esterno. Si può fare a meno diquesto record quando si utilizzano serventi di inoltro, ovvero i forwarder.

102.2.1.2 Gestione delle zone su cui si ha autorità

zone "dominio"�

type master;

file file_di_zona;�;

Quando la direttiva ‘zone’ serve a indicare una zona su cui si ha autorità, attraverso l’opzione‘type master’ si stabilisce che le informazioni su questa devono essere tratte dal file indicato.

Page 109:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1167

La zona può essere riferita a un dominio normale, oppure a un dominio in-addr.arpa. Nelprimo caso, le informazioni del file servono a tradurre i nomi di dominio in indirizzi numerici;nel secondo, dal momento che i domini in-addr.arpa contengono nel nome l’informazionedell’indirizzo numerico, i file servono a tradurre gli indirizzi numerici in nomi di dominio nor-male.

Convenzionalmente, è sempre presente una direttiva ‘zone’ riferita al dominio 0.0.127.in-addr.arpa che indica il file in grado di tradurre gli indirizzi di ‘loopback’.

102.2.1.3 Riproduzione delle informazioni di un altro DNS

zone "dominio"�

type slave;

file file_di_zona;

masters�

indirizzo_ip_master;

...�;

�;

Il DNS locale può servire a fornire informazioni per cui è autorevole assieme ad altri, da cui traeperiodicamente le informazioni. In pratica, l’opzione ‘type slave’ definisce che il file specifi-cato deve essere generato automaticamente e aggiornato, in base a quanto fornito per quel dominioda altri DNS elencati nell’opzione ‘masters’.

Se i servizi di risoluzione dei nomi esterni dovessero risultare inaccessibili per qualche tempo,quello locale può continuare a fornire le informazioni, fino a quando queste raggiungono il periododi scadenza.

102.2.2 File di zonaI file di zona costituiscono in pratica la base di dati DNS dell’ambito in cui il sistema è autorevole.Sono costituiti da una serie di record di tipo diverso, detti RR (Resource Record) o record dirisorsa, ma con una sintassi comune.

[dominio] [durata_vitale] [classe] tipo dati_della_risorsa

I campi sono separati da spazi o caratteri di tabulazione; inoltre, un record può essere suddivisoin più righe reali, come si fa solitamente con il tipo ‘SOA’.

Ogni file di zona è associato a un dominio di origine definito all’interno del file ‘/etc/named.conf’ nella direttiva che nomina il file di zona in questione. All’interno dei file di zona, ilsimbolo ‘@’ rappresenta questo dominio di origine. Questo simbolo viene utilizzato comunementesolo nel record ‘SOA’.

Segue l’elenco dei vari campi dei record di risorsa contenuti nei file di zona.

1. Il primo campo indica il dominio a cui gli altri elementi del record fanno riferimento. Senon viene specificato, si intende che si tratti di quello dichiarato nel record precedente. Ildominio può essere indicato in modo assoluto, quando termina con un punto, o relativo aldominio di origine.

2. Il secondo campo indica il tempo di validità dell’informazione, espressa in secondi. Servesolo per i serventi secondari (slave) che hanno la necessità di sapere per quanto tempo deveessere considerata valida un’informazione, prima di eliminarla in mancanza di riscontri dalservente primario (master). Generalmente, questa informazione non viene indicata, perchécosì si utilizza implicitamente quanto indicato nel record ‘SOA’, nell’ultimo campo numerico(minimum). Questa informazione viene definita TTL (Time To Live) e non va confusa conaltri tipi di TTL esistenti e riferiti a contesti diversi.

Page 110:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1168 DNS: dettagli ulteriori

3. Il terzo campo rappresenta la classe di indirizzamento. Con le reti TCP/IP si usa la sigla ‘IN’

(Internet). Se non viene indicata la classe, si intende fare riferimento implicitamente allastessa classe del record precedente. Generalmente si mette solo nel primo: il record ‘SOA’.

4. Il quarto campo rappresenta il tipo di record indicato con le sigle già viste nel capitoloprecedente.

5. Dopo il quarto campo seguono i dati particolari del tipo specifico di record. Questi sono giàstati descritti in parte in questo capitolo.

Nei record di risorsa può apparire il simbolo ‘@’ che rappresenta il dominio di origine, cioè quelloindicato nella direttiva del file ‘/etc/named.conf’ corrispondente alla zona in questione.

Nelle sezioni seguenti vengono descritti i record di risorsa più importanti.

102.2.3 SOA – Start Of AuthorityIl primo record di ogni file di zona inizia con la dichiarazione standard dell’origine. Ciò avvienegeneralmente attraverso il simbolo ‘@’ che rappresenta il dominio di origine, come già accennatoin precedenza. Per esempio, nel file ‘/etc/named.conf’, la direttiva seguente fa riferimentoal file di zona ‘zone/brot.dg’.

zone "brot.dg"�

type master;

file "zone/brot.dg";�;

In tal caso, il simbolo ‘@’ del primo record del file ‘zone/brot.dg’ rappresenta precisamenteil dominio brot.dg.

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800

28800

7200

604800

86400 )

Sarebbe quindi come se fosse stato scritto nel modo seguente:

brot.dg. IN SOA ...

Tutti i nomi di dominio che dovessero essere indicati senza il punto finale sono considerati relativial dominio di origine. Per esempio, nello stesso record appare il nome ‘dinkel.brot.dg.’ cherappresenta un dominio assoluto. Al suo posto sarebbe stato possibile scrivere solo ‘dinkel’,senza punto finale, perché verrebbe completato correttamente dal dominio di origine.2

La sintassi completa del record ‘SOA’ potrebbe essere espressa nel modo seguente:

dominio classe SOA server_primario contatto (

numero_seriale

refresh

retry

expire

minimum )

Nell’esempio visto, la parola chiave ‘IN’ rappresenta la classe di indirizzamento, Internet, ed èpraticamente obbligatorio il suo utilizzo, almeno nel record ‘SOA’.

2Tuttavia, in un record ‘SOA’ è preferibile indicare solo nomi di dominio assoluti.

Page 111:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1169

La parola chiave ‘SOA’ definisce il tipo di record, Start Of Authority, e deve trattarsi del primorecord di un file di zona. Segue la descrizione dei dati specifici di questo tipo di record, precisa-mente ciò che segue la parola chiave ‘SOA’.

• Il nome canonico dell’elaboratore che svolge la funzione di servente DNS primario per ildominio indicato all’inizio del record. Convenzionalmente, si indica un nome di dominioassoluto.

• L’indirizzo di posta elettronica della persona responsabile per la gestione del servizio.Dal momento che il simbolo ‘@’ ha un significato speciale per questi record, lo si sosti-tuisce con un punto. Il nome ‘root.dinkel.brot.dg.’ deve essere interpretato [email protected].

• Il numero di serie serve ai serventi DNS secondari per sapere quando i dati sono stati modifi-cati. Il numero deve essere progressivo. È consentito l’uso di dieci cifre numeriche, pertanto,generalmente si indica la data (in formato aaaammgg) seguita da due cifre aggiuntive. Ognivolta che si modifica il file di zona, questo numero deve essere incrementato; utilizzando ladata come in questo esempio si hanno a disposizione le ultime due cifre per indicare diverseversioni riferite allo stesso giorno.

• Il numero definito come refresh rappresenta l’intervallo in secondi tra una verifica e lasuccessiva da parte di un servente DNS secondario per determinare se i dati sono statimodificati. Come già specificato, questa verifica si basa sul confronto del numero di serie:se è aumentato, il servente DNS deve rileggere i dati di questo file.

• Il numero definito come retry rappresenta l’intervallo in secondi tra una tentativo fallitodi accedere al servente DNS e il successivo. In pratica, quando il servente DNS primarioè inattivo, i serventi secondari continuano a funzionare e fornire il loro servizio, tuttavia, aintervalli regolari tentano di contattare il servente primario. Questo intervallo è generalmentepiù corto del tempo di refresh, ma non troppo breve, per non sovraccaricare inutilmente larete con richieste inutili.

• Il numero definito come expire rappresenta la durata massima di validità dei dati quando ilservente DNS secondario non riesce più a raggiungere quello primario. In situazioni normalipuò trattarsi di un valore molto grande, per esempio un mese, anche se negli esempi mostratiin questo capitolo è stato usato un valore molto inferiore.

• Il numero definito come minimum rappresenta il tempo predefinito di validità per gli altrirecord di risorsa. Anche questo valore, se ciò è conveniente, può essere piuttosto grande.

102.2.4 NS – Name ServerIl secondo record è generalmente quello che indica il nome del nodo che offre il servizio dirisoluzione dei nomi, ovvero il servente DNS, come nell’esempio seguente:

NS dinkel.brot.dg.

La parola chiave ‘NS’ sta appunto a indicare di che record si tratta. In un file di zona possonoapparire più record ‘NS’, quando si vuole demandare parte della risoluzione di quella zona ad altriserventi DNS, oppure quando si vogliono semplicemente affiancare.

Questo record viene usato generalmente senza l’indicazione esplicita del dominio e della classe,dal momento che può fare riferimento a quelli già dichiarati nel record ‘SOA’. Sotto questo puntodi vista, l’esempio appena mostrato corrisponde alla trasformazione seguente:

@ IN NS dinkel.brot.dg.

Il nome del servente DNS dovrebbe essere un nome canonico, cioè un nome per il quale esiste unrecord di tipo ‘A’ corrispondente.

Page 112:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1170 DNS: dettagli ulteriori

102.2.5 MX – Mail ExchangerNei file di zona utilizzati per tradurre i nomi di dominio in indirizzi numerici, dopo l’indicazionedei record ‘NS’, si possono trovare uno o più record che rappresentano i servizi per lo scambiodella posta elettronica (serventi SMTP). La sintassi precisa è la seguente:

dominio classe MX precedenza host

Si osservi l’esempio.

MX 10 dinkel.brot.dg.

MX 20 roggen.brot.dg.

Qui appaiono due record di questo tipo. La parola chiave ‘MX’ indica il tipo di record; il numero chesegue rappresenta il livello di precedenza; il nome finale rappresenta il nodo che offre il serviziodi scambio di posta elettronica. Nell’esempio, si vuole fare in modo che il primo servizio a essereinterpellato sia quello dell’elaboratore dinkel.brot.dg e se questo non risponde si presental’alternativa data da roggen.brot.dg.

Anche qui sono state omesse le indicazioni del dominio e della classe di indirizzamento, inmodo da utilizzare implicitamente quelle della dichiarazione precedente. Anche in questo caso,l’intenzione era quella di fare riferimento al dominio di origine e alla classe ‘IN’.

@ IN MX 10 dinkel.brot.dg.

@ IN MX 20 roggen.brot.dg.

102.2.6 A – AddressI file di zona utilizzati per tradurre i nomi di dominio in indirizzi numerici sono fatti essenzial-mente per contenere record di tipo ‘A’, ovvero di indirizzo, che permettono di definire le corri-spondenze tra nomi e indirizzi numerici.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

Nell’esempio si mostrano due di questi record. Il primo, in particolare, indica che il nomeroggen.brot.dg corrisponde all’indirizzo numerico 192.168.1.1.

Come già accennato in precedenza, i nomi possono essere indicati in forma abbreviata, relativi aldominio di origine per cui è stato definito il file di zona; in questo caso si tratta di brot.dg. Percui, i due record appena mostrati avrebbero potuto essere rappresentati nella forma seguente:

dinkel A 192.168.1.1

roggen A 192.168.1.2

È possibile attribuire nomi diversi allo stesso indirizzo numerico, come nell’esempio seguente.Non si tratta di alias, ma di nomi diversi che vengono tradotti nello stesso indirizzo reale.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

farro.brot.dg. A 192.168.1.1

segale.brot.dg. A 192.168.1.2

Questo tipo di record prevede anche la possibilità di utilizzare l’indicazione della durata di validità(TTL) e della classe. Come al solito, se la classe non viene utilizzata, si fa riferimento alla classedel record precedente, mentre per quanto riguarda la durata di validità, vale quanto definito comeminimum nel record ‘SOA’. Dagli esempi già mostrati, i due record di questa sezione potrebberoessere scritti nel modo seguente:

dinkel.brot.dg. 86400 IN A 192.168.1.1

Page 113:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1171

roggen.brot.dg. 86400 IN A 192.168.1.2

102.2.7 PTR – PointerNei file di zona utilizzati per tradurre i nomi di dominio che appartengono a in-addr.arpain nomi di dominio normale, cioè quelli che servono a ottenere il nome a partire dall’indirizzonumerico, si utilizzano i record ‘PTR’ (o record puntatori) con questo scopo.

1 PTR dinkel.brot.dg.

2 PTR roggen.brot.dg.

L’esempio dei due record che appaiono sopra è intuitivo, ma non necessariamente chiaro. Il nu-mero che appare all’inizio è un nome di dominio abbreviato. Il dominio di origine di questo file(visti gli esempi mostrati in precedenza) è 1.168.192.in-addr.arpa, per cui, volendo in-dicare nomi di dominio completi, si dovrebbe fare come nell’esempio seguente:

1.1.168.192.in-addr.arpa. PTR dinkel.brot.dg.

2.1.168.192.in-addr.arpa. PTR roggen.brot.dg.

Dovrebbe essere più chiaro adesso che i record ‘PTR’ rappresentano un collegamento tra un nomedi dominio e un altro. È comunque solo attraverso questo meccanismo che si può ottenere unatraduzione degli indirizzi numerici in nomi di dominio.

È il caso di considerare il fatto che attraverso i record ‘A’ possono essere abbinati più nomi di do-minio allo stesso indirizzo numerico, ma con i record ‘PTR’ si può abbinare un indirizzo numericoa un solo nome di dominio. Cioè a dire che quando si chiede il nome corrispondente a un indirizzonumerico se ne ottiene uno solo. Anche per questo, è necessario che il nome di dominio indicatocorrisponda a un nome canonico.

Anche per questo tipo di record valgono le considerazioni fatte per quello di tipo ‘A’, riguardoall’indicazione della durata di validità e alla classe di indirizzamento.

102.2.8 CNAME – Canonical NameNei file di zona utilizzati per tradurre i nomi di dominio in indirizzi numerici possono appariredei record ‘CNAME’, che permettono di definire degli alias a nomi di dominio già definiti (i nomicanonici).

www.dinkel.brot.dg. CNAME dinkel.brot.dg.

ftp.dinkel.brot.dg. CNAME dinkel.brot.dg.

L’esempio dei due record appena mostrati, indica che i nomi www.dinkel.brot.dg eftp.dinkel.brot.dg sono alias del nome canonico dinkel.brot.dg.

Teoricamente si può fare la stessa cosa utilizzando record di tipo ‘A’ con la differenza che i nomivanno abbinati a un indirizzo numerico. L’utilità del record ‘CNAME’ sta nella facilità con cuipossono essere cambiati gli indirizzi: in questo caso, basta modificare l’indirizzo numerico didinkel.brot.dg e gli alias non hanno bisogno di altre modifiche.

Tuttavia, l’uso di alias definiti attraverso record ‘CNAME’ è altamente sconsigliabile nella maggiorparte delle situazioni. Questo significa che nei record ‘SOA’, ‘NS’, ‘MX’ e ‘CNAME’, è meglio indicaresempre solo nomi di dominio per cui esiste la definizione di corrispondenza attraverso un record‘A’. In pratica, i record ‘CNAME’ andrebbero usati solo per mostrare all’esterno nomi alternativiesteticamente più adatti alle varie circostanze, come nell’esempio mostrato in cui si aggiunge ilprefisso ‘www’ e ‘ftp’.

In particolare, nel record ‘SOA’ è assolutamente vietato utilizzare nomi definiti come alias.

Page 114:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1172 DNS: dettagli ulteriori

102.2.9 File dei serventi principaliNelle sezioni precedenti sono stati descritti i vari record di risorsa e il loro utilizzo nei file di zona.Il file utilizzato per elencare i serventi DNS principali contiene esclusivamente due tipi di record:‘NS’ e ‘A’.

I record ‘NS’ servono a indicare i nomi dei vari serventi DNS competenti per il dominio principale;i record ‘A’ forniscono la traduzione di questi nomi in indirizzi numerici. Ciò è esattamente quantoserve in questo tipo di file.

. 3600000 IN NS A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4

102.3 Serventi DNS secondariUn servente DNS secondario, o slave, è quello che riproduce le informazioni di altri serventi,controllando la validità a intervalli regolari, aggiornando i dati quando necessario.

Supponendo di volere realizzare un servente DNS secondario nell’elaboratoreroggen.brot.dg, per seguire gli esempi già mostrati, si può semplicemente definire ilfile ‘/etc/named.conf’ come nell’esempio seguente:

options�

directory "/var/named";�;

//

zone "."�

type hint;

file "named.root";�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

//

zone "1.168.192.in-addr.arpa"�

type slave;

file "zone/192.168.1";

masters�

192.168.1.1;�;

�;

zone "brot.dg"�

type slave;

file "zone/brot.dg";

masters�

192.168.1.1;�;

�;

I file ‘/var/named/named.root’ e ‘/var/named/zone/127.0.0’ sono i soliti già vi-sti per il caso del servente primario. In questo modo, il servente DNS secondario è in grado dirisolvere da solo le richieste al di fuori delle zone di competenza.

Le direttive di dichiarazione di zona che contengono l’opzione ‘type slave’ servono a fare inmodo che il DNS locale risponda alle richieste riferite a queste, anche se poi a sua volta deveaggiornare i file relativi in base a quanto ottenuto dai DNS indicati nell’opzione ‘masters’.

Page 115:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1173

102.4 Servente DNS di inoltroUn servente DNS di inoltro, o forwarder, è quello che rinvia le richieste a un altro servizio dirisoluzione dei nomi.

Supponendo di volere realizzare un servente DNS di inoltro nell’elaboratoreroggen.brot.dg, per seguire gli esempi già mostrati, si può semplicemente definire ilfile ‘/etc/named.conf’ come nell’esempio seguente:

options�

directory "/var/named";

forward only;

forwarders�

192.168.1.1;�;

�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";�;

Si può osservare l’assenza della dichiarazione della zona del dominio principale. Solo il domi-nio 0.0.127.in-addr.arpa viene risolto localmente, tutto il resto viene richiesto al DNScorrispondente all’indirizzo 192.168.1.1. L’opzione ‘forward only’ sottolinea questo fatto.

102.5 Particolarità per IPv6La gestione di IPv6 implica delle novità per la configurazione di un DNS. Si introducono duecose importanti: i record ‘AAAA’ per tradurre i nomi in indirizzi IPv6 e il dominio IP6.INT perla risoluzione degli indirizzi nei nomi corrispondenti.

102.5.1 Record AAAALa forma di un record ‘AAAA’ è la stessa di quella corrispondente per gli indirizzi IPv4; intui-tivamente, quattro «A» indicano che l’indirizzo IPv6 è quattro volte più lungo di quello IPv4.Evidentemente, al posto di indicare un indirizzo IPv4 si mette quello IPv6. Una cosa importanteè invece la possibilità di indicare diverse corrispondenze per lo stesso nome di dominio. Per ri-prendere gli esempi già fatti per IPv4, il file ‘/var/named/zone/brot.dg’ potrebbe essereesteso nel modo seguente:

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

MX 10 dinkel.brot.dg.

www.brot.dg. CNAME dinkel.brot.dg.

ftp.brot.dg. CNAME dinkel.brot.dg.

dinkel.brot.dg. A 192.168.1.1

roggen.brot.dg. A 192.168.1.2

Page 116:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1174 DNS: dettagli ulteriori

dinkel.brot.dg. AAAA fec0::1:2a0:24ff:fe77:4997

dinkel.brot.dg. AAAA fe80::2a0:24ff:fe77:4997

roggen.brot.dg. AAAA fec0::1:280:adff:fec8:a981

roggen.brot.dg. AAAA fe80::280:adff:fec8:a981

In questo esempio sono stati indicati anche indirizzi link-local, solo a scopo didattico, ma nellarealtà è improbabile che questi siano annotati in un DNS.

Si può osservare che in questo caso i record ‘A’ possono convivere con quelli di tipo ‘AAAA’, inoltresi nota il fatto che lo stesso nome di dominio può essere abbinato sia a un indirizzo IPv4 che a piùindirizzi IPv6. Per verificare questa nuova configurazione, dopo aver riavviato il servizio, si puòusare ‘nslookup’ avendo cura di specificare che si vogliono ottenere tutte le informazioni.

$ nslookup[ Invio ]

> set q=any[ Invio ]

> dinkel.brot.dg.[ Invio ]

Server: dinkel.brot.dg

Address: 192.168.1.1

dinkel.brot.dg internet address = 192.168.1.1

dinkel.brot.dg IPv6 address = fec0::1:2a0:24ff:fe77:4997

dinkel.brot.dg IPv6 address = fe80::2a0:24ff:fe77:4997

brot.dg nameserver = dinkel.brot.dg

...

> roggen.brot.dg.[ Invio ]

Server: dinkel.brot.dg

Address: 192.168.1.1

roggen.brot.dg internet address = 192.168.1.1

roggen.brot.dg IPv6 address = fec0::2:280:adff:fec8:a981

roggen.brot.dg IPv6 address = fe80::280:adff:fec8:a981

brot.dg nameserver = dinkel.brot.dg

...

102.5.2 Risoluzione inversaPer la risoluzione inversa, da indirizzo IP a nome di dominio, è stato introdotto il dominioIP6.INT, che funziona in modo simile a in-addr.arpa, con la differenza che ogni cifraesadecimale che compone l’indirizzo IPv6 viene separata in un sottodominio. Tanto per renderel’idea, l’indirizzo fec0::1:2a0:24ff:fe77:4997 (ovvero fec0:0000:0000:0001:02a0:24ff:fe77:4997)si traduce nel nome di dominio seguente:

7.9.9.4.7.7.e.f.f.f.4.2.0.a.2.0.1.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.IP6.INT

Se per ipotesi, seguendo la logica degli esempi già visti, si volesse gestire la risoluzione degliindirizzi della sottorete fec0:0:0:1::/64 (in pratica una sottorete di indirizzi site-local), si potrebbecreare il file ‘/var/named/zone/fec0:0:0:1’, dichiarandolo opportunamente nel file ‘/etc/named.conf’:

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.IP6.INT"�

type master;

Page 117:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DNS: dettagli ulteriori 1175

file "fec0:0:0:1";�;

In questo modo, nel file ‘/var/named/zone/fec0:0:0:1’ si può fare riferimento alla parterestante del dominio IP6.INT:

@ IN SOA dinkel.brot.dg. root.dinkel.brot.dg. (

1998031800 ; Serial

28800 ; Refresh

7200 ; Retry

604800 ; Expire

86400 ) ; Minimum

NS dinkel.brot.dg.

7.9.9.4.7.7.e.f.f.f.4.2.0.a.2.0 PTR dinkel.brot.dg.

1.8.9.a.8.c.e.f.f.f.d.a.0.8.2.0 PTR roggen.brot.dg.

Per verificare il funzionamento della conversione da indirizzo IPv6 a nome di dominio, occorreindicare espressamente il dominio IP6.INT:

$ nslookup[ Invio ]

> set q=any[ Invio ]

> 7.9.9.4.7.7.e.f.f.f.4.2.0.a.2.0.1.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.IP6.INT.[ Invio ]

Server: dinkel.brot.dg

Address: 192.168.1.1

7.9.9.4.7.7.e.f.f.f.4.2.0.a.2.0.1.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.IP6.INT

name = dinkel.brot.dg

1.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.IP6.INT nameserver = dinkel.brot.dg

...

102.6 Considerazioni finaliPerché il proprio servizio di risoluzione dei nomi continui a funzionare correttamente, è necessa-rio che il file per la risoluzione del dominio principale (‘named.root’ in questi esempi) vengaaggiornato quando necessario. Se tutti gli amministratori dei DNS esistenti utilizzassero il proto-collo FTP per scaricarlo dall’indirizzo mostrato precedentemente, si creerebbe un carico di reteinaccettabile. Per questo dovrebbe essere utilizzato il programma ‘dig’, nel modo seguente, cherichiede meno risorse di rete.

$ dig @rs.internic.net . ns > named.root

102.7 Riferimenti

• Nicolai Langfeldt, DNS HOWTO�

http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html �

• Olaf Kirch, NAG, The Linux Network Administrators’ Guide

• BOG, Bind Operations Guide�

http://www.dns.net/dnsrd/ ��

http://www.vix.com/isc/�

• named(8)

Page 118:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1176 DNS: dettagli ulteriori

• D. Barr, RFC 1912: Common DNS Operational and Configuration Errors, 1996�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1912.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc1912.txt �

• S. Thomson, C. Huitema, RFC 1886: DNS Extentions to support IP version 6, 1996�

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1886.html ��

http://www.cis.ohio-state.edu/Services/rfc/rfc- text/rfc1886.txt �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 119:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Parte xxii

Servizi di rete

1177

Page 120:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

103 Organizzazione e controllo dei servizi di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181

103.1 Avvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181

103.2 Supervisione dei servizi di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181

103.3 TCP wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1185

104 RPC: Remote Procedure Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188

104.1 RPC in generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188

105 NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191

105.1 Supporto nel kernel Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191

105.2 Dal lato del servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191

105.3 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1194

105.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195

106 Accesso remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196

106.1 Identificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196

106.2 Accesso remoto normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197

106.3 Shell remota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198

106.4 Copia tra elaboratori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199

107 Informazioni sugli utenti della rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201

107.1 Remote Who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201

107.2 Informazioni attraverso RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1202

107.3 Informazioni personali: Finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202

108 Messaggi sul terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204

108.1 Accesso al proprio terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1204

108.2 Comunicazione diretta attraverso la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205

108.3 Invio di un messaggio circolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208

109 TELNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209

109.1 Dal lato del servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209

109.2 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1209

109.3 Colloquiare con una porta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212

110 FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214

110.1 Identificazione e privilegi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1214

110.2 Dal lato del servente WU-FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214

110.3 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1219

110.4 Informazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230

110.5 Altri tipi di programmi cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231

111 Trivial FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232

111.1 Dal lato del servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232

111.2 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1232

1178

Page 121:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

112 Messaggi di posta elettronica e protocollo SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234

112.1 Servizio di rete e servizio di consegna locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234

112.2 Uso della posta elettronica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1235

112.3 Sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237

112.4 Recapito della posta elettronica: la variabile MAIL . . . . . . . . . . . . . . . . . . . . . . . 1240

112.5 Mail user agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241

112.6 Mailx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241

112.7 Pine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245

112.8 Balsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249

112.9 Ricerche nei file delle caselle postali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1251

113 Messaggi giunti presso recapiti remoti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253

113.1 Concetti generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253

113.2 IMAP toolkit: ipop3d, ipop2d, imapd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254

113.3 Popclient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254

113.4 Fetchmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256

113.5 MUA completi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259

114 Messaggi, allegati ed estensioni MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1261

114.1 Allegati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1261

114.2 Uuencode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1262

114.3 Involucro MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263

114.4 Messaggi contenenti più parti MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265

114.5 Sistemazione manuale di un allegato MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1267

114.6 Mpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1270

114.7 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272

115 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273

115.1 Dal lato del servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273

115.2 Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273

115.3 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1276

115.4 Lynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278

115.5 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1285

115.6 Altri clienti HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286

116 NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288

116.1 Concentrazione amministrativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288

116.2 Distinzione dei ruoli tra servente e cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290

116.3 NIS e DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291

116.4 NIS, NIS+, NYS e come complicarsi la vita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291

116.5 RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292

116.6 Allestimento di un servente NIS/NYS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292

116.7 Predisposizione del servente secondario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1300

1179

Page 122:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

116.8 Cliente NIS e NYS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302

116.9 Directory personali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306

116.10 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306

117 DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307

117.1 Introduzione e sistemazioni generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307

117.2 Servente DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309

117.3 Relè DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312

117.4 Cliente DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1312

118 NTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315

118.1 Accesso a un servente NTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315

118.2 Preparazione di un servente NTP per l’utilizzo locale . . . . . . . . . . . . . . . . . . . . . .1316

118.3 Gestire una rete locale collegata saltuariamente alla rete esterna . . . . . . . . . . . . 1319

118.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1320

119 IRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321

119.1 Infrastruttura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321

119.2 Canali, utenti e operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321

119.3 Comportamenti spiacevoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323

119.4 Dal lato del servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323

119.5 Ircd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323

119.6 Dal lato del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1326

119.7 ircII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326

119.8 Tkirc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329

119.9 Utilizzo di massima di un cliente IRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329

119.10 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332

120 ICQ: «I-seek-you» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333

120.1 Principio di funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333

120.2 Cliente ICQ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333

120.3 Note conclusive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337

120.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337

1180

Page 123:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 103Organizzazione e controllo dei ser-vizi di reteI servizi di rete vengono attivati all’avvio di GNU/Linux attraverso la procedura di inizializzazionedel sistema (Init), dopo che sono stati assegnati gli indirizzi alle interfacce di rete e dopo che gliinstradamenti sono stati definiti.

103.1 AvvioI demoni in grado di fornire servizi di rete ricadono in due categorie possibili:

• autonomi (standalone);

• gestiti da Inet (l’eseguibile ‘inetd’), il supervisore di rete.

Nel primo caso, si tratta di programmi avviati normalmente che si occupano si ascoltare su unacerta porta e di provvedere da soli ai controlli necessari contro gli accessi indesiderati. Nel se-condo, si tratta di programmi che vengono avviati nel momento in cui ne esiste effettivamentel’esigenza attraverso il supervisore Inet, che è il programma che si occupa di ascoltare su tutte leporte dei servizi che controlla.

Il primo modo è preferibile quando non è possibile attendere l’avvio di un programma ogni voltache si presenta una richiesta: il caso tipico è dato dal sistema di condivisione dei file system inrete, o NFS.

La gestione da parte del supervisore Inet permette di ridurre il carico del sistema, avviando solo iservizi necessari nel momento in cui ne viene fatta richiesta, introducendo un sistema di controlloulteriore attraverso un altro programma: il TCP wrapper, ovvero il programma ‘tcpd’.

103.2 Supervisione dei servizi di reteInet, 1 ovvero il demone ‘inetd’ è il supervisore dei servizi di rete. La supervisione si articola indue parti:

• è in grado di fornire alcuni servizi direttamente;

• controlla l’avvio di altri servizi.

La presenza di questo meccanismo che si applica alla maggior parte dei servizi di rete (cioètutti quelli che non sono autonomi) permette di inserire un ulteriore controllo attraverso ilTCP wrapper, ovvero il programma ‘tcpd’, il quale si occupa prevalentemente di verificare chele richieste dei servizi provengano da indirizzi autorizzati.

Il supervisore Inet si compone in pratica del demone ‘inetd’, per la gestione dei servizi da offrireall’esterno (attraverso la rete).

inetd [opzioni] [file_di_configurazione]Di solito, il demone viene avviato automaticamente dalla procedura di inizializzazione delsistema. Quando è in funzione, si mette in ascolto di un gruppo di porte determinato; quandorivela una comunicazione in una di queste, determina qual è il servizio corrispondente e lo avvia.In sostanza, il supervisore Inet demanda ad altri demoni la gestione dei servizi richiesti specifi-catamente. ‘inetd’, una volta avviato, legge il contenuto del suo file di configurazione che, se

1Inet BSD

1181

Page 124:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1182 Organizzazione e controllo dei servizi di rete

non viene nominato espressamente, è ‘/etc/inetd.conf’. ‘inetd’ rilegge la configurazionequando riceve un segnale di aggancio, ‘SIGHUP’:

kill -HUP numero_del_PID_di_inetd

103.2.1 /etc/inetd.confSi tratta del file di configurazione utilizzato dal demone ‘inetd’. In particolare sono indicati i de-moni per la gestione di servizi di rete specifici. In molti casi, l’avvio di questi demoni è controllatoda ‘tcpd’. Se si fanno modifiche a questo file e si vuole che abbiano effetto, è necessario inviarea ‘inetd’ un segnale ‘SIGHUP’:

kill -HUP PID_di_inetd

Sotto viene mostrato il contenuto tipico di questo file, così come appare nelle distribuzioniGNU/Linux più comuni. La prima cosa da osservare è che il simbolo ‘#’, posto all’inizio di unariga, introduce un commento; inoltre, le righe bianche e quelle vuote vengono ignorate. Tutte lealtre righe vengono interpretate come direttive di dichiarazione di un servizio particolare.

#

# inetd.conf This file describes the services that will be available

# through the INETD TCP/IP super server. To re-configure

# the running INETD process, edit this file, then send the

# INETD process a SIGHUP signal.

#

# Version: @(#)/etc/inetd.conf 3.10 05/27/93

#

# Authors: Original taken from BSD UNIX 4.3/TAHOE.

# Fred N. van Kempen, <[email protected]>

#

# Modified for Debian Linux by Ian A. Murdock <[email protected]>

#

# Modified for RHS Linux by Marc Ewing <[email protected]>

#

# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>

#

# Echo, discard, daytime, and chargen are used primarily for testing.

#

# To re-read this file after changes, just do a ’killall -HUP inetd’

#

#echo stream tcp nowait root internal

#echo dgram udp wait root internal

#discard stream tcp nowait root internal

#discard dgram udp wait root internal

#daytime stream tcp nowait root internal

#daytime dgram udp wait root internal

#chargen stream tcp nowait root internal

#chargen dgram udp wait root internal

#

# These are standard services.

#

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

gopher stream tcp nowait root /usr/sbin/tcpd gn

# do not uncomment smtp unless you *really* know what you are doing.

Page 125:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Organizzazione e controllo dei servizi di rete 1183

# smtp is handled by the sendmail daemon now, not smtpd. It does NOT

# run from here, it is started at boot time from /etc/rc.d/rc#.d.

#smtp stream tcp nowait root /usr/bin/smtpd smtpd

#nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd

#

# Shell, login, exec and talk are BSD protocols.

#

shell stream tcp nowait root /usr/sbin/tcpd in.rshd

login stream tcp nowait root /usr/sbin/tcpd in.rlogind

#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd

talk dgram udp wait root /usr/sbin/tcpd in.talkd

ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd

#dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd

#

# Pop and imap mail services et al

#

pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d

pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

imap stream tcp nowait root /usr/sbin/tcpd imapd

#

# The Internet UUCP service.

#

#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l

#

# Tftp service is provided primarily for booting. Most sites

# run this only on machines acting as "boot servers." Do not uncomment

# this unless you *need* it.

#

#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd

#bootps dgram udp wait root /usr/sbin/tcpd bootpd

#

# Finger, systat and netstat give out user information which may be

# valuable to potential "system crackers." Many sites choose to disable

# some or all of these services to improve security.

#

# cfinger is for GNU finger, which is currently not in use in RHS Linux

#

finger stream tcp nowait root /usr/sbin/tcpd in.fingerd

#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd

#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx

#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet

#

# Time service is used for clock syncronization.

#

time stream tcp nowait nobody /usr/sbin/tcpd in.timed

time dgram udp wait nobody /usr/sbin/tcpd in.timed

#

# Authentication

#

auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o

#

# End of inetd.conf

Page 126:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1184 Organizzazione e controllo dei servizi di rete

Per l’utente medio di GNU/Linux non è necessario approfondire la sintassi di queste direttive.Il file di configurazione predefinito è già sufficiente così com’è.

Le direttive di questo file sono dei record, corrispondenti in pratica alle righe, suddivisi in campidistinti attraverso spaziature orizzontali (spazi o tabulazioni). L’ultimo campo può contenere an-che spazi.

servizio[/versione] tipo_socket protocollo {wait|nowait}[.max] utente[.gruppo] (segue)

programma_del_servizio programma_e_argomenti

1. servizio[/versione]Il primo campo serve a indicare il servizio. Normalmente si fa riferimento a una porta indi-cata per nome, secondo quanto definito dal file ‘/etc/services’. Se si indica un numero,si fa riferimento direttamente a quel numero di porta.

Eventualmente può essere indicato un servizio RPC, e in tal caso si utilizza un nome se-condo quanto riportato nel file ‘/etc/rpc’, seguito eventualmente da un barra obliqua edal numero di versione.

2. tipo_socket

Definisce il tipo di socket attraverso diverse parole chiave:

• ‘stream’

• ‘dgram’ datagramma

• ‘raw’

• ‘rdm’ reliably delivered message

• ‘seqpacket’ sequenced packet socket

3. protocollo

Serve a determinare il tipo di protocollo, utilizzando una parola chiave che si ottiene dalfile ‘/etc/protocols’. Si tratta prevalentemente di ‘tcp’ e ‘udp’. Nel caso si voglianogestire protocolli RPC, questi si indicano come ‘rpc/tcp’ e ‘rpc/udp’.

4. {wait|nowait}[.max]Le parole chiave ‘wait’ e ‘nowait’ servono a definire il comportamento di un servizio,quando si utilizza il tipo di socket ‘dgram’ (datagramma). In tutti gli altri casi, si usa esclu-sivamente la parola chiave ‘nowait’.

In base alle richieste dei clienti, ‘inetd’ può avviare un certo numero (anche elevato) dicopie di processi di uno stesso servizio. Il limite predefinito è di 40 ogni minuto (ovveroogni 60 secondi), è può essere modificato aggiungendo alla parola chiave ‘wait’ o ‘nowait’

un’estensione composta da un punto seguito da un numero: il numero massimo di copie perminuto.

5. utente[.gruppo]Serve a definire l’utente, ed eventualmente il gruppo, in nome del quale avviare il servi-zio. ‘inetd’ viene avviato dalla procedura di inizializzazione del sistema, con i privilegidell’utente ‘root’. Di conseguenza, può cambiare l’utente e il gruppo proprietari dei pro-cessi che avvia, in modo da dare loro i privilegi strettamente necessari al compimento delleloro funzioni.

6. programma_del_servizio

Definisce il percorso assoluto di avvio del programma che offre il servizio. Se si tratta di unservizio interno al supervisore Inet stesso, si utilizza la parola chiave ‘internal’ e l’ultimocampo non viene indicato.

Page 127:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Organizzazione e controllo dei servizi di rete 1185

7. programma_e_argomenti

L’ultimo campo è anomalo, in quanto consente l’utilizzo degli spazi come partedell’informazione in esso contenuta. Si tratta degli argomenti del programma che offre ilservizio, dove il primo deve corrispondere al nome del programma stesso; in pratica quelloche nel linguaggio C è contenuto in ‘argv[0]’. Si osservi l’esempio seguente:

finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd

103.3 TCP wrapperL’avvio di alcuni servizi può essere controllato utilmente da un sistema di registrazione e verifica,definito TCP wrapper. 2 Si tratta di un programma che esegue una serie di controlli, in base aiquali decide se avviare o meno il servizio corrispondente.

Il TCP wrapper non è indispensabile, ma il suo utilizzo è diventato una consuetudine, per poteravere almeno un controllo minimo sui servizi principali.

I compiti del TCP wrapper possono essere:

• annotare le connessioni nel registro di sistema;

• filtrare l’accesso ai servizi in base a regole determinate;

• eseguire delle verifiche contro possibili «imbrogli»;

• utilizzare protocolli di identificazione dell’utente da cui ha origine la richiesta di accesso.

Il programma che si usa per questo è ‘tcpd’. Qui ne viene mostrato solo l’uso elementare, adattoall’amministratore improvvisato. Per un approfondimento delle sue potenzialità, si può consultareil capitolo 264 e anche la documentazione originale: tcpd(8) e hosts_access(5).

La configurazione del TCP wrapper avviene attraverso la coppia di file ‘/etc/hosts.allow’ e‘/etc/hosts.deny’. Semplificando, quando ‘tcpd’ rileva un tentativo di accesso, verifica chel’indirizzo del chiamante sia incluso nell’elenco di ‘/etc/hosts.allow’. Se è così non eseguealtri controlli e permette l’accesso, altrimenti verifica che questo non sia incluso nell’elenco di ‘/etc/hosts.deny’ (se entrambi i file mancano o sono vuoti, sono consentiti tutti gli accessi).

103.3.1 /etc/hosts.allowViene utilizzato da ‘tcpd’ per determinare se il nodo che richiede uno dei servizi di retedell’elaboratore locale ha diritto di accedere.

Se il file è vuoto, o manca, sono consentiti tutti gli accessi; se sono presenti delle direttive, vieneverificata la corrispondenza del nodo a queste direttive. Alla prima corrispondenza trovata, laricerca termina, ignorando anche il file ‘/etc/hosts.deny’. È importante ribadire che seun nodo non corrisponde ad alcuna delle direttive del file ‘/etc/hosts.allow’, questoaccesso è consentito, a meno che venga poi impedito da quanto contenuto nel file ‘/etc/hosts.deny’.

In generale, le righe che iniziano con il simbolo ‘#’ sono ignorate, in qualità di commenti; lerighe bianche e quelle vuote sono ignorate ugualmente. Le direttive occupano normalmente unariga, a meno che terminino con il simbolo ‘\’ (subito prima del codice di interruzione di riga) cherappresenta una continuazione nella riga successiva.

2TCP wrapper software libero con licenza speciale

Page 128:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1186 Organizzazione e controllo dei servizi di rete

La sintassi valida per le direttive varia a seconda di come è stato compilato il programma ‘tcpd’.Il minimo che dovrebbe essere sempre valido corrisponde allo schema seguente:

elenco_di_demoni : elenco_di_clienti

Alla sinistra dei due punti si elencano i programmi demone il cui utilizzo si vuole concedere ainodi elencati alla destra. Gli elementi appartenenti a un elenco possono essere separati con unavirgola o uno spazio.

È consentito l’uso di speciali nomi jolly e altri simboli che facilitano l’indicazione di gruppi dinomi.

Elementi

.indirizzo

L’indirizzo di un nodo che inizia con un punto indica in realtà tutti gli indirizzi che finisconocon quel suffisso. Se si utilizzano nomi di dominio invece di indirizzi numerici, si fa riferi-mento a un intero dominio. Per esempio, ‘.brot.dg’ rappresenta tutti i nodi del dominiobrot.dg.

indirizzo.

L’indirizzo di un nodo che finisce con un punto indica in realtà tutti gli indirizzi che inizianocon quel prefisso. Se si utilizzano indirizzi IP numerici, si fa riferimento a una rete intera.Per esempio, ‘192.168.’ rappresenta tutti i nodi della rete 192.168.0.0.

@dominio_nis

Il nome di un dominio NIS viene indicato con il prefisso ‘@’ e rappresenta tutti i nodi cheappartengono a tale dominio.

indirizzo_ip/maschera_ip

Rappresenta gli indirizzi che si ottengono eseguendo l’AND tra indirizzo e maschera. Peresempio, 192.168.72.0/255.255.254.0 rappresenta tutti gli indirizzi a partire da 192.168.72.0a 192.168.73.255.

ALL

È un jolly che rappresenta tutto. Se si trova alla sinistra dei due punti indica tutti i demonidei servizi, se si trova alla destra rappresenta tutti i nodi.

LOCAL

È un jolly che indica tutti gli elaboratori locali, intendendosi con questo quelli rappresenta-bili senza alcun punto.

UNKNOWN

È un jolly che rappresenta tutti i nodi il cui nome o indirizzo risulta sconosciuto. Se si vuoleusare questo modello, occorre considerare che i nodi potrebbero risultare sconosciuti anchea causa di un’interruzione temporanea del servizio DNS.

KNOWN

È un jolly che rappresenta tutti i nodi il cui nome o indirizzo risulta conosciuto. Se si vuoleusare questo modello, occorre considerare che i nodi potrebbero risultare sconosciuti anchea causa di un’interruzione temporanea del servizio DNS.

PARANOID

È un jolly che corrisponde ai nodi il cui nome non corrisponde all’indirizzo. In pratica, sivuole che ‘tcpd’, attraverso il DNS, determini l’indirizzo in base al nome, quindi si vuoleancora che trasformi il nome in indirizzo (indirizzo –> nome –> indirizzo); se non c’è cor-rispondenza tra gli indirizzi ottenuti, il nodo rientra in questa categoria.

Page 129:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Organizzazione e controllo dei servizi di rete 1187

EXCEPT

È un operatore che può essere utilizzato all’interno di un elenco di nomi per escluderne isuccessivi.

Esempi

ALL : ALL

Consente l’utilizzo di qualsiasi servizio da parte di qualsiasi nodo.

ALL : ALL EXCEPT .mehl.dg

Consente l’utilizzo di qualsiasi servizio da parte di qualsiasi nodo a eccezione di quelli il cuidominio è mehl.dg.

ALL : .brot.dg

Consente l’utilizzo di qualsiasi servizio da parte dei nodi appartenenti al dominio brot.dg.

ALL : .brot.dg EXCEPT caino.brot.dg

Consente l’utilizzo di qualsiasi servizio da parte dei nodi appartenenti al dominio brot.dg,a esclusione di caino.brot.dg.

ALL : 192.168.

Consente l’utilizzo di qualsiasi servizio da parte dei nodi appartenenti alla sottorete192.168.0.0.

in.fingerd : LOCAL

ALL : ALL

L’ordine in cui appaiono le direttive è importante. In questo caso, le richieste per il servizioFinger (rappresentato dal demone ‘in.fingerd’), vengono accettate solo se provengono daindirizzi locali. Tutti gli altri servizi sono permessi da qualunque origine.

Per un controllo più facile degli accessi, conviene indicare all’interno del file ‘/etc/hosts.deny’ soltanto ‘ALL : ALL’ in modo da impedire tutti gli accessi che non sianoconsentiti esplicitamente da ‘/etc/hosts.allow’.

103.3.2 /etc/hosts.deny‘tcpd’ verifica la corrispondenza tra il nodo che tenta la connessione e le direttive del file ‘/etc/hosts.allow’; se non combacia con alcuna di queste, viene verificata la corrispondenza conle direttive del file ‘/etc/hosts.deny’. Se esiste una direttiva che gli corrisponde, l’accessoviene rifiutato.

La sintassi utilizzata in questo file è la stessa già descritta per ‘/etc/hosts.allow’, con glistessi jolly e gli stessi significati di corrispondenza.

Per questioni di sicurezza, è conveniente indicare all’interno di questo file solo la riga seguente:

ALL : ALL

In questo modo si impedisce qualsiasi accesso che non sia stato concesso espressamente da partedi ‘/etc/hosts.allow’.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 130:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 104RPC: Remote Procedure CallRPC, acronimo di Remote Procedure Call, è un meccanismo generale per la gestione di applica-zioni cliente-servente. Il sistema si basa su un demone, il Portmapper, e un file che elenca i servizidisponibili associati al demone relativo. Il Portmapper è un classico esempio di un programmache gestisce un servizio di rete in modo autonomo, cioè senza essere controllato dal supervisoreInet.

104.1 RPC in generaleSemplificando in modo estremo il funzionamento delle RPC, si può dire che si tratti di un mecca-nismo attraverso cui si possono eseguire delle elaborazioni remote.

Dal lato servente si trova il Portmapper 1 in ascolto sulla porta 111, dal lato cliente ci sono unaserie di programmi che, per un servizio RPC qualunque, devono prima interpellare il Portmapperremoto il quale fornisce loro le informazioni necessarie a stabilire una connessione con il demonecompetente.

Per questo motivo, le chiamate RPC contengono l’indicazione di un numero di programma, at-traverso il quale, il Portmapper remoto è in grado di rispondere informando il cliente sul numerodi porta da utilizzare per quel programma.

I servizi RPC possono essere interrogati attraverso il programma ‘rpcinfo’. Per esempio, perchiedere al Portmapper dell’elaboratore weizen.mehl.dg quali servizi sono disponibili e perconoscere le loro caratteristiche, si può agire come nell’esempio seguente:

$ rpcinfo -p weizen.mehl.dg[ Invio ]

program vers proto port

100000 2 tcp 111 rpcbind

100000 2 udp 111 rpcbind

100005 1 udp 844 mountd

100005 1 tcp 846 mountd

100003 2 udp 2049 nfs

100003 2 tcp 2049 nfs

100004 2 udp 880 ypserv

100004 1 udp 880 ypserv

100004 2 tcp 883 ypserv

100009 1 udp 889 yppasswdd

Una cosa da osservare è che alcuni dei programmi elencati tra i servizi RPC, non appaiono neces-sariamente anche nell’elenco del file ‘/etc/services’.

104.1.1 # portmapportmap [opzioni]È il demone che si occupa di attivare i servizi RPC. Potrebbe anche chiamarsi ‘rpc.portmap’.Viene avviato di norma dalla procedura di inizializzazione del sistema, in modo indipendente dalcontrollo del supervisore Inet.

104.1.2 /etc/rpc‘/etc/rpc’ è il file contenente l’elenco dei servizi RPC disponibili, abbinati al numero di pro-gramma usato come riferimento standard. Il suo scopo è quindi quello di tradurre i nomi in numeridi programma e viceversa.

1Portmapper BSD

1188

Page 131:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

RPC: Remote Procedure Call 1189

#

# rpc 88/08/01 4.0 RPCSRC; from 1.12 88/02/07 SMI

#

portmapper 100000 portmap sunrpc

rstatd 100001 rstat rstat_svc rup perfmeter

rusersd 100002 rusers

nfs 100003 nfsprog

ypserv 100004 ypprog

mountd 100005 mount showmount

ypbind 100007

walld 100008 rwall shutdown

yppasswdd 100009 yppasswd

etherstatd 100010 etherstat

rquotad 100011 rquotaprog quota rquota

sprayd 100012 spray

3270_mapper 100013

rje_mapper 100014

selection_svc 100015 selnsvc

database_svc 100016

rexd 100017 rex

alis 100018

sched 100019

llockmgr 100020

nlockmgr 100021

x25.inr 100022

statmon 100023

status 100024

bootparam 100026

ypupdated 100028 ypupdate

keyserv 100029 keyserver

tfsd 100037

nsed 100038

nsemntd 100039

pcnfsd 150001

bwnfsd 545580417

104.1.3 $ rpcinforpcinfo -p [host]rpcinfo [-n numero_di_porta] {-u|-t} host programma [versione]rpcinfo {-b|-d} programma versione

‘rpcinfo’ permette di interrogare un Portmapper. L’utilità di questo programma sta quindi nellapossibilità di conoscere quali servizi RPC sono disponibili all’interno di un certo nodo, oltre allapossibilità di verificare che questi siano effettivamente in funzione.

Opzioni-p [host]Interroga il Portmapper nell’elaboratore indicato, oppure in quello locale, elencando tutti iprogrammi RPC registrati presso lo stesso.

-u host programma [versione]Utilizza il protocollo UDP per eseguire una chiamata RPC alla procedura zero (‘NULLPROC’)del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.

Page 132:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1190 RPC: Remote Procedure Call

-t host programma [versione]Utilizza il protocollo TCP per eseguire una chiamata RPC alla procedura zero (‘NULLPROC’)del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.

-n numero_di_porta

Permette di specificare una porta diversa rispetto a quella che viene indicata dal Portmapper,per eseguire una chiamata RPC attraverso le opzioni ‘-u’ e ‘-t’.

-b programma versione

Permette di eseguire una chiamata RPC circolare (broadcast) a tutti i nodi in grado di ri-ceverla, utilizzando il protocollo UDP, per l’esecuzione della procedura zero (‘NULLPROC’)del programma e della versione specificati. Il risultato viene emesso attraverso lo standardoutput.

-d programma versione

L’utente ‘root’ può utilizzare questa opzione per eliminare la registrazione del servizio RPCdel programma e della versione specificati.

Esempi

$ rpcinfo -p

Elenca tutti i servizi RPC registrati nell’elaboratore locale.

program vers proto port

100000 2 tcp 111 rpcbind

100000 2 udp 111 rpcbind

100005 1 udp 844 mountd

100005 1 tcp 846 mountd

100003 2 udp 2049 nfs

100003 2 tcp 2049 nfs

100004 2 udp 880 ypserv

100004 1 udp 880 ypserv

100004 2 tcp 883 ypserv

100009 1 udp 889 yppasswdd

$ rpcinfo -p weizen.mehl.dg

Elenca tutti i servizi RPC registrati nell’elaboratore weizen.mehl.dg.

$ rpcinfo -b mountd 1

Elenca tutti i nodi in grado di fornire il servizio ‘mountd’.

127.0.0.1 localhost.localdomain

192.168.1.1 dinkel.brot.dg

192.168.1.2 roggen.brot.dg

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 133:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 105NFSNFS è un servizio di rete che, avvalendosi delle RPC, permette la condivisione di porzioni difile system da e verso altri elaboratori connessi.

Solitamente, in un sistema GNU/Linux è sufficiente predisporre il file ‘/etc/exports’ perpermettere agli altri elaboratori della rete di accedere al proprio con un semplice ‘mount’.

105.1 Supporto nel kernel LinuxPer poter condividere file attraverso NFS, sia come cliente che come servente, occorre includereil supporto al file system NFS nel kernel (sezione 26.2.14).

Per controllare che questo supporto esista, è sufficiente leggere il contenuto del file ‘/proc/filesystems’. L’esempio seguente rappresenta una situazione in cui è possibile accedere afile system NFS (è la riga ‘nodev nfs’ a rivelarlo).

ext2

minix

umsdos

msdos

vfat

nodev proc

nodev nfs

nodev smbfs

iso9660

105.2 Dal lato del serventeDalla parte dell’elaboratore servente è necessario che oltre al Portmapper siano in funzione i de-moni ‘mountd’ 1 e ‘nfsd’ 2 e che il file di configurazione ‘/etc/exports’ sia stato configuratocorrettamente.

$ rpcinfo -p[ Invio ]

program vers proto port

100000 2 tcp 111 rpcbind

100000 2 udp 111 rpcbind

100005 1 udp 844 mountd

100005 1 tcp 846 mountd

100003 2 udp 2049 nfs

100003 2 tcp 2049 nfs

105.2.1 # rpc.mountdrpc.mountd [opzioni]È il demone che si occupa di gestire il montaggio del file system di rete dal lato del servente.Generalmente, viene avviato dalla procedura di inizializzazione del sistema, in modo autonomo,cioè indipendente dal supervisore Inet. Mantiene il file ‘/etc/rmtab’ che elenca i montaggi inessere. Tuttavia, non è garantito che il contenuto di questo file sia esatto, per cui non lo si puòutilizzare per determinare con certezza quali siano le connessioni in corso.

1mountd software libero2nfsd software libero

1191

Page 134:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1192 NFS

105.2.2 # rpc.nfsdrpc.nfsd [opzioni]È il demone che si occupa di gestire le richieste, da parte dei clienti, per i servizi NFS. Deveessere in funzione nel servente. Viene avviato generalmente dalla procedura di inizializzazionedel sistema, subito dopo ‘mountd’. Anche ‘rpc.nfsd’ funziona in modo autonomo rispetto alsupervisore Inet.

Il funzionamento di questo programma dipende dal file ‘/etc/exports’. Quando il file dovesseessere riconfigurato, per fare in modo che ‘rpc.nfsd’ lo rilegga, è necessario inviargli un segnaledi aggancio.

kill -HUP PID_di_rpc.nfsd

105.2.3 /etc/exportsIl file ‘/etc/exports’ contiene l’indicazione delle porzioni di file system locale da conce-dere in condivisione alla rete: NFS. Questo file viene utilizzato in pratica dai demoni ‘mountd’ e‘nfsd’.

Se il file manca o è vuoto, non viene concesso l’utilizzo di alcuna parte del file system localeall’esterno.

Ogni record del file è composto da:

• l’indicazione di una directory a partire dalla quale si concede la condivisione;

• una serie di nodi o reti cui viene concesso l’utilizzo di questa directory con l’eventualespecificazione di opzioni di accesso.

In pratica si utilizza la sintassi seguente:

directory_di_partenza [host][(opzioni)]...

Quando si fanno modifiche a questo file, è necessario riavviare il sistema di gestione del servizioNFS. Di solito è sufficiente inviare un segnale di aggancio ai demoni ‘mountd’ e ‘nfsd’.

kill -HUP PID_di_rpc.mountd

kill -HUP PID_di_rpc.nfsd

Se non si riesce in questo modo, si può provare eliminando del tutto i due processi, riavviandolimanualmente subito dopo.

Purtroppo, la configurazione di questo file non è sempre funzionante e ciò a causa di difetti neidemoni ‘mountd’ e ‘nfsd’. In generale, si è cercato sempre di garantire la sicurezza, a discapitodella funzionalità. Se una configurazione di ‘/etc/exports’ sembra non funzionare senzaun motivo apparente, è bene provarne altre, limitando l’uso di opzioni particolari, o cercando diidentificare meglio gli elaboratori a cui si concede di accedere. Eventualmente, si veda anchela pagina di manuale exports(5).

Identificazione degli elaboratori

Gli elaboratori che possono accedere alla directory condivisa possono essere specificati invari modi, alcuni dei quali sono elencati di seguito:

• indicazione di un nodo singoloquando si utilizza un nome o un indirizzo IP che fa riferimento da un elaboratore spe-cifico;

Page 135:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NFS 1193

• uso di caratteri jollypossono essere utilizzati i caratteri jolly ‘*’ e ‘?’ per indicare un gruppo di nomi dielaboratore con una sola notazione, tenendo presente che questi simboli non possonosostituirsi ai punti di un nome di dominio;

• rete IPattraverso la notazione ‘indirizzo_ip/maschera_di_rete’ è possibile indicare simultanea-mente tutti gli elaboratori collocati all’interno della rete o della sottorete a cui si fariferimento.

Alcune opzioni

Alcune delle opzioni da applicare sono elencate di seguito.

———

ro

Consente l’accesso in sola lettura. Questa è la modalità di funzionamento predefinita.

rw

Consente l’accesso in lettura e scrittura.

noaccess

Non concede la directory in condivisione. Può essere utile quando si vuole evitare l’accessoa una sottodirectory di una directory già concessa in condivisione.

link_relative

Trasforma i collegamenti simbolici assoluti, contenuti nel file system da condividere, incollegamenti relativi.

Un percorso è assoluto quando parte dalla directory radice (‘/’), mentre è relativo quandoparte dalla posizione corrente. Nello stesso modo, un collegamento simbolico può es-sere fatto utilizzando l’indicazione di un percorso assoluto o relativo. Quando si utilizzaun file system di rete, difficilmente si ricostruisce la situazione del file system contenutonell’elaboratore che opera da servente, di conseguenza, gli eventuali collegamenti simboliciassoluti, non sarebbero più validi. Questo tipo di trasformazione risolve il problema ed èanche la modalità di funzionamento predefinita.

link_absolute

Mantiene il collegamenti simbolici così come sono.

root_squash

Si tratta di un’opzione di sicurezza, attraverso la quale si impedisce l’accesso come utente‘root’. In pratica, quando un utente ‘root’ presso un cliente utilizza il file system condiviso,viene trattato come utente ‘nobody’.3

no_root_squash

Non effettua la trasformazione dell’UID ‘root’ e ciò è necessario quando si utilizzanoclienti NFS senza disco fisso.4

Esempi

/usr *.brot.dg(ro)

3L’utente ‘nobody’ corrisponde spesso al numero UID 65 534 o -2. Tuttavia, questo utente non ha un numero UIDstandard, tanto che in alcuni sistemi si preferisce utilizzare un numero più basso di quelli assegnati agli utenti comuni.

4Anche se in tutti i documenti che si incontrano, si afferma che la trasformazione dell’UID ‘root’ non avviene se nonè richiesto espressamente, in realtà, la maggior parte delle distribuzioni GNU/Linux compilano i sorgenti in modo che, senon viene specificato diversamente, avvenga tale trasformazione.

Page 136:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1194 NFS

Concede ai nodi del dominio brot.dg l’accesso in lettura alla directory ‘/usr/’ e se-guenti.

/ roggen.brot.dg(ro,root_squash)

Concede a roggen.brot.dg di accedere in sola lettura a partire dalla directory radice,escludendo i privilegi dell’utente ‘root’.

/home roggen.brot.dg(rw) weizen.mehl.dg(rw)

Concede a roggen.brot.dg e a weizen.mehl.dg di accedere in lettura e scritturaalla directory ‘/home/’.

/ *(rw,no_root_squash)

Questa definizione non dovrebbe funzionare più. Sembrerebbe voler concedere a tutta la retedi accedere in lettura e scrittura a partire dalla directory radice, permettendo ai vari utenti‘root’ di mantenere i loro privilegi. Tuttavia l’asterisco non dovrebbe riuscire a rimpiazzarei punti che compongono i nomi di dominio, risolvendosi così in una directory che in praticanon viene condivisa.

105.2.4 VerificaPer verificare l’utilizzo effettivo del servizio da parte dei clienti, è disponibile il programma‘showmount’, che viene descritto più avanti. Infatti, questo si presta anche all’utilizzo dal latocliente per conoscere le directory esportate da un servente NFS.

105.3 Dal lato del clienteCon GNU/Linux, l’utilizzo di un file system di rete richiede solo che il kernel sia stato predispostoper questo. Non occorrono programmi demone, basta il normalissimo ‘mount’.

Per facilitare il compito degli amministratori dei clienti NFS, è anche disponibile il programma‘showmount’ che permette di conoscere cosa viene messo a disposizione dai vari serventi NFS.

105.3.1 Montaggio di un file system di reteIl montaggio di un file system di rete avviene in modo analogo a quello di una normale unitàdi memorizzazione, con la differenza fondamentale del modo di esprimere il dispositivo virtualecorrispondente al file system remoto da connettere.

host_remoto:directory_remota

La notazione sopra riportata rappresenta la porzione di file system remoto cui si vuole accedere,attraverso l’indicazione simultanea dell’elaboratore e della directory di partenza.

Supponendo che l’elaboratore dinkel.brot.dg conceda l’utilizzo della directory ‘/usr/’ esuccessive, l’elaboratore roggen.brot.dg potrebbe sfruttarne l’occasione attraverso il pro-gramma ‘mount’ nel modo seguente:

mount -t nfs dinkel.brot.dg:/usr /usr

Inoltre, nell’elaboratore ‘roggen’ si potrebbe aggiungere una riga nel file ‘/etc/fstab’ inmodo da automatizzarne la connessione (59.3.6).

dinkel.brot.dg:/usr /usr nfs defaults

Sia attraverso il programma ‘mount’ (preceduti dall’opzione ‘-o’), che nel file ‘/etc/fstab’

(nel campo delle opzioni) possono essere specificate delle opzioni particolari riferite a questo tipodi file system.

Page 137:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NFS 1195

• rsize=n

Permette di specificare la dimensione dei pacchetti (o datagrammi, dal momento che si trattadel protocollo UDP, che è di tipo non connesso) utilizzati in lettura da parte del cliente NFS.Il valore predefinito è di 1 024 byte.

• wsize=n

Permette di specificare la dimensione dei pacchetti (o datagrammi) utilizzati in scrittura daparte del cliente NFS. Il valore predefinito è di 1 024 byte.

• timeo=n

Permette di definire il valore del timeout, espresso in decimi di secondo, per ilcompletamento delle richieste. In pratica, se entro quel tempo non si ottiene una conferma,si verifica un minor timeout e l’operazione viene ritentata con una durata di timeout doppia.Quando si raggiunge un timeout massimo di 60 secondi si verifica un major timeout. Ilvalore predefinito è sette, corrispondente a 0,7 secondi.

• hard

Stabilisce che la connessione deve essere ritentata all’infinito, anche dopo un major timeout.È la modalità di funzionamento predefinita.

• soft

Stabilisce che venga generato un errore di I/O non appena si verifica un major timeout.Questa modalità si contrappone a quella ‘hard’.

• intr

Permette l’interruzione di una chiamata NFS attraverso l’uso di segnali. Può essere utile perinterrompere una connessione quando il servente non risponde.

105.3.2 # showmountshowmount [opzioni] [host]‘showmount’ 5 permette di verificare la disponibilità di un servente NFS a consentire il montaggiodi determinate directory, oppure permette di verificare chi stia montando qualcosa dal proprioservente locale.

Alcune opzioni-a | --all

Elenca i clienti che utilizzano il proprio servizio e anche le directory che questi hanno mon-tato.

-e | --exports

Elenca le directory esportate dal servente locale o dal servente remoto (se indicato comeultimo argomento del comando).

105.4 Riferimenti

• Nicolai Langfeldt, NFS HOWTO�

http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

5showmount GNU GPL

Page 138:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 106Accesso remotoUna serie di programmi storici consente di eseguire delle operazioni su elaboratori remoti. I nomidi questi iniziano convenzionalmente con una lettera «r» in modo da distinguerli da programmiequivalenti che svolgono la loro funzione in ambito locale. Oltre ai programmi che richiedonol’elaborazione, nel servente ci devono essere dei demoni in grado di attuare quanto richiesto. 1

106.1 IdentificazioneL’esecuzione di un’elaborazione remota richiede il riconoscimento dell’utente, in modo da po-tere stabilire l’ambito e i privilegi in cui si deve trovare presso l’elaboratore remoto. Il ricono-scimento può avvenire attraverso una sorta di procedura di accesso, durante il funzionamento delprogramma dal lato cliente, oppure può essere basato sulla semplice fiducia, concedendo l’accessoattraverso la preparazione di alcuni file di configurazione. Indubbiamente, la fiducia è un metodomolto poco sicuro di amministrare il proprio sistema, ma quando una rete locale è ristretta a unambito in cui tutto è comunque sotto controllo, la richiesta di una parola d’ordine può essereeffettivamente un fastidio inutile.

Il riconoscimento può avvenire nel modo tradizionale, attraverso i file ‘/etc/hosts.equiv’

e ‘˜/.rhosts’, oppure attraverso un’autenticazione Kerberos. Questo ultimo metodo non vienedescritta.

Se si vuole concedere un accesso senza controlli particolari, si può predisporre il file ‘/etc/hosts.equiv’ con un semplice elenco di nomi di nodi (o di indirizzi IP) a cui si concedel’accesso, in modo generalizzato, senza la richiesta di una parola d’ordine. Parallelamente, o al-ternativamente, ogni utente può predisporre il proprio elenco di nodi e di utenti da considerareequivalenti alla propria «identità» locale, preparando il file ‘˜/.rhosts’.

106.1.1 /etc/hosts.equivIl file ‘/etc/hosts.equiv’ permette di definire un elenco di nodi che deve essere trattatocome equivalente a quello locale, in modo tale che gli utenti di questi nodi possano accedereattraverso l’uso di comandi remoti senza la richiesta di una parola d’ordine.

L’esempio seguente mostra il contenuto del file ‘/etc/hosts.equiv’ di un nodo per il qualesi vuole consentire l’accesso da parte di dinkel.brot.dg e di roggen.brot.dg.

dinkel.brot.dg

roggen.brot.dg

In questo modo, gli utenti dei nodi dinkel.brot.dg e roggen.brot.dg possono acce-dere al sistema locale senza la richiesta formale di alcuna identificazione, purché esista per loroun’utenza con lo stesso nome.

L’elenco di nodi equivalenti può contenere anche l’indicazione di utenti particolari, per la pre-cisione, ogni riga può contenere il nome di un nodo seguito eventualmente da uno spazio e dalnome di un utente. Si osservi l’esempio seguente:

dinkel.brot.dg

roggen.brot.dg

dinkel.brot.dg tizio

dinkel.brot.dg caio

Come nell’esempio precedente, viene concesso agli utenti dei nodi dinkel.brot.dg eroggen.brot.dg di accedere localmente se esistono utenze con lo stesso nome. In aggiunta

1netkit-rsh BSD

1196

Page 139:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Accesso remoto 1197

a questo, però, viene concesso agli utenti ‘tizio’ e ‘caio’ del nodo dinkel.brot.dg, diaccedere con qualunque nominativo-utente (locale), senza la richiesta di alcuna parola d’ordine.

Si può intuire che fare una cosa del genere significa concedere a tali utenti privilegi simili aquelli di ‘root’. In generale, tali utenti non dovrebbero essere in grado di utilizzare UID moltobassi, ma questo dipende da come sono stati compilati i sorgenti; comunque non è questo unbuon motivo per configurare così il file ‘/etc/hosts.equiv’.

106.1.2 ˜/.rhostsIndipendentemente dal fatto che il file ‘/etc/hosts.equiv’ sia presente o meno, ogni utentepuò predisporre il proprio file ‘˜/.rhosts’. La sintassi di questo file è la stessa di ‘/etc/hosts.equiv’, ma si riferisce esclusivamente all’utente che predispone tale file nella propriadirectory personale.

In questo file, l’indicazione di utenti precisi è utile e opportuna, perché quell’utente fisico, po-trebbe essere riconosciuto con nomi differenti sui nodi da cui vuole accedere.

dinkel.brot.dg tizi

roggen.brot.dg tizio

L’esempio, mostra l’indicazione precisa di ogni nominativo-utente dei nodi che possono accederesenza richiesta di identificazione.2

106.1.3 Utenti specialiPer motivi di sicurezza, dovrebbe essere impedito all’utente ‘root’, così come agli utenti speciali(cioè quelli corrispondenti a numeri UID particolarmente bassi), di accedere senza identificazione.Quindi, di solito, la sola configurazione del file ‘/etc/hosts.equiv’ non basta a permetterel’accesso all’utente ‘root’ senza che questo fornisca la parola d’ordine. Normalmente, è suffi-ciente predisporre anche il file ‘˜root/.rhosts’.3

106.2 Accesso remoto normaleL’accesso remoto tradizionale è qualcosa di molto simile all’utilizzo di una connessione TELNETe comunque rimane la base dei programmi di utilizzo remoto. Dal lato del servente occorre undemone ‘rlogind’ e dal lato del cliente il programma ‘rlogin’.

106.2.1 # rlogindin.rlogind [opzioni]È il demone del servizio necessario per ricevere connessioni attraverso ‘rlogin’. È gestito dalsupervisore Inet e filtrato dal TCP wrapper (‘tcpd’). Nell’esempio seguente, viene mostrata lariga di ‘/etc/inetd.conf’ in cui si dichiara il suo possibile utilizzo.

login stream tcp nowait root /usr/sbin/tcpd in.rlogind

Alcune opzioni

-h

Permette anche all’utente ‘root’ di utilizzare il file ‘˜/.rhosts’.

2Si deve fare attenzione al fatto che tra il nome del nodo e il nome dell’utente, ci deve essere uno spazio.3Oltre a questo problema, potrebbe essere stato impedito l’accesso da un elaboratore remoto a causa della configura-

zione del file ‘/etc/securetty’.

Page 140:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1198 Accesso remoto

106.2.2 $ rloginrlogin [opzioni] host_remoto

Si tratta di un modo per effettuare l’accesso all’interno di un elaboratore remoto, come se ci sitrovasse sulla console di questo.

Alcune opzioni

-l utente

Con questa opzione è possibile specificare già nella riga di comando il nome dell’utente dautilizzare per l’accesso nel sistema remoto. Quando ci si identifica in questo modo, vienerichiesta la parola d’ordine in ogni caso.

-8

Abilita la connessione utilizzando una comunicazione a 8 bit in modo da poter utilizzarecaratteri speciali che vanno oltre l’ASCII tradizionale.

106.3 Shell remotaUna shell remota è uno strumento per eseguire un comando in un elaboratore remoto dirigendo ilflusso normale di dati attraverso il programma utilizzato localmente. In pratica, per fare questo, siutilizza il demone ‘rshd’ dal lato servente e ‘rsh’ dal lato cliente.

Quando si utilizza una shell remota come ‘rsh’, è importante fare mente locale alla sequenza delleoperazioni che avvengono. Infatti, il comando viene interpretato inizialmente dalla shell locale chepoi passa gli argomenti a ‘rsh’, il quale poi eseguirà un comando presso l’elaboratore remoto.Il problema sta quindi nel comprendere quale sia effettivamente il comando che verrà eseguitonell’elaboratore remoto, tenendo conto anche della shell che verrà utilizzata lì, per determinareil flusso di output che si ottiene (standard output e standard error), flusso che poi può esserevisualizzato, ridiretto o rielaborato localmente.

106.3.1 rshdin.rshd [opzioni]È il demone del servizio necessario per ricevere connessioni attraverso ‘rsh’. È gestito dal super-visore Inet e filtrato dal TCP wrapper (‘tcpd’). Nell’esempio seguente, viene mostrata la riga di‘/etc/inetd.conf’ in cui si dichiara il suo possibile utilizzo.

shell stream tcp nowait root /usr/sbin/tcpd in.rshd

Alcune opzioni

-h

Permette anche all’utente ‘root’ di utilizzare il file ‘˜/.rhosts’.

106.3.2 $ rshrsh [opzioni] host_remoto [comando]Permette di eseguire il comando richiesto nell’elaboratore remoto specificato se suquell’elaboratore è abilitata questa possibilità. Lo standard input ricevuto da ‘rsh’ viene inviatoallo standard input del comando remoto; lo standard output e lo standard error emessi dal comandoremoto vengono ridiretti in modo che diventino rispettivamente lo standard output e lo standarderror di ‘rsh’.

Page 141:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Accesso remoto 1199

Questo meccanismo di ridirezione è l’elemento che rende utile questo programma e d’altra parteè anche il suo limite: non possono essere utilizzati programmi che richiedono l’interazione conl’utente, attraverso ‘rsh’.

Se ‘rsh’ viene utilizzata senza l’indicazione del comando remoto, si ottiene in pratica un accessopuro e semplice, attraverso ‘rlogin’.

Alcune opzioni

-l utente

Con questa opzione è possibile specificare già nella riga di comando il nome dell’utenteda utilizzare per l’accesso al sistema remoto. Quando ci si identifica in questo modo, vienerichiesta la parola d’ordine in ogni caso.

Esempi

$ rsh roggen.brot.dg cat /etc/fstab > copia-locale

Esegue il ‘cat’ del file ‘/etc/fstab’ dell’elaboratore roggen.brot.dg e ne dirigel’output verso il file locale ‘copia-locale’.

$ rsh roggen.brot.dg cat /etc/fstab ">" copia-remota

Questo esempio sembra molto simile al precedente, ma utilizzando il simbolo di ridirezionetra virgolette, la shell locale non lo interpreta in questo modo, ma lo lascia tra gli argomentidi ‘rsh’. Così facendo, il simbolo di ridirezione viene gestito dal comando remoto generandoil file ‘copia-remota’ proprio nell’elaboratore remoto.

$ rsh roggen.brot.dg tar czf - /home/pluto > ˜/pluto.tgz

Esegue l’archiviazione della directory ‘/home/pluto/’ dell’elaboratoreroggen.brot.dg generando l’archivio compresso ‘˜/pluto.tgz’ nell’elaboratorelocale.

106.4 Copia tra elaboratoriUn modo per copiare dati tra un elaboratore e un altro può essere quello di sfruttare un file systemdi rete. Un altro modo potrebbe essere quello di utilizzare ‘rsh’ per copiare dati da un elaboratoreremoto verso quello locale (viceversa è un po’ difficile).

Il modo più pratico è l’utilizzo di ‘rcp’ attraverso il quale si possono copiare file tra due elaboratoriremoti o tra un elaboratore remoto e quello locale.

‘rcp’ si avvale di ‘rsh’, di conseguenza, dal lato servente occorre il demone ‘rshd’.

106.4.1 $ rcprcp [opzioni] origine destinazione

rcp [opzioni] origine... directory

‘rcp’ copia file tra elaboratori differenti. I file o le directory indicati tra gli argomenti possonoessere espressi nella forma seguente:

[[utente@]host:]file

Se non viene indicato esplicitamente un utente, si intende fare riferimento a un utente remotocon lo stesso nome di quello usato localmente; se non viene indicato il nome o l’indirizzodell’elaboratore remoto, si intende quello locale.

Quando si fa riferimento a file remoti senza l’indicazione di un percorso assoluto, occorre tenerepresente che la directory corrente di un elaboratore remoto corrisponde alla directory personale

Page 142:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1200 Accesso remoto

dell’utente a cui si fa riferimento. Nello stesso modo, occorre tenere presente che, dal momentoche ‘rcp’ si avvale di ‘rsh’, le cose possono cambiare un po’ a seconda del tipo di shell abbinatoall’utente remoto.

Alcune opzioni

-r

Se all’interno dei file indicati come origine della copia, si trovano anche directory, questevengono copiate assieme al loro contenuto, in modo ricorsivo. In tal caso, necessariamente,la destinazione deve essere una directory.

-p

Preserve. Con questa opzione si intende fare in modo che ‘rcp’ tenti di riprodurre le stesseproprietà e gli stessi permessi nei file di destinazione, senza tenere conto del valore dellamaschera dei permessi (umask). Quando questa opzione non viene indicata, nel caso incui il file di destinazione esista già, vengono mantenuti i permessi e le proprietà di quelloesistente, mentre se i file di destinazione vengono creati, si utilizzano i permessi del fileoriginale, filtrati attraverso la maschera dei permessi.

Esempi

$ rcp roggen.brot.dg:/home/tizio/letterina ./letterina

Copia il file ‘/home/tizio/letterina’ contenuto nell’elaboratoreroggen.brot.dg, nella directory corrente dell’elaboratore locale.

$ rcp roggen.brot.dg:\˜/letterina ./letterina

Esegue un’operazione simile a quella dell’esempio precedente, ma in questo caso si utilizzaun codice macro che deve essere interpretato dalla shell remota. Per evitare che venga inveceinterpretato dalla shell locale, viene utilizzata la barra obliqua inversa per proteggere la tilde.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 143:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 107Informazioni sugli utenti della reteI servizi di informazione sugli utenti della rete possono essere distinti in tre tipi, a seconda che sibasino sul servizio di uno dei demoni seguenti.

• ‘rwhod’

• ‘rpc.rusersd’

• ‘fingerd’

L’attivazione dei servizi che forniscono informazioni sugli utenti sono fonte di problemi di si-curezza. In generale, sono molto utili nelle reti locali chiuse mentre sono pericolosi nei sistemiaccessibili dall’esterno.

107.1 Remote WhoSi tratta di un sistema che raccoglie le informazioni sugli utenti connessi nella rete locale. 1 Leinformazioni sono aggiornate frequentemente da un demone locale che, attraverso l’invio e laricezione di messaggi broadcast, informa e ottiene informazioni dagli altri sistemi dove si trova infunzione lo stesso demone.

Attraverso questo meccanismo, ogni elaboratore che ha in funzione questo demone ha una di-rectory ‘/var/spool/rwho/’ contenente una serie di file, uno per ogni elaboratore incontratonella rete locale. Questi file rappresentano il risultato finale di questo sistema di raccolta di infor-mazioni e ognuno di questi contiene l’indicazione degli utenti che utilizzano gli elaboratori dellarete locale.

107.1.1 # rwhodrwhod

‘rwhod’ è il demone che si occupa di fornire e ricevere informazioni sugli utenti connessi sui varielaboratori della rete locale. La comunicazione tra il demone locale e quelli degli altri elaboratoriavviene attraverso messaggi broadcast. Questo implica la necessità che la rete sia in grado digestire tali messaggi e che il sistema di collezione delle informazioni risulti limitato all’ambitodell’indirizzo broadcast utilizzato.

Il compito di ‘rwhod’, dal punto di vista pratico, è quello di aggiornare i file contenuti all’internodi ‘/var/spool/rwho/’.

‘rwhod’ può essere avviato solo come demone autonomo, senza il controllo del supervisore direte Inet. Se si ritiene che questo servizio sia importante occorre inserire l’avvio di ‘rwhod’ in unodegli script della procedura di inizializzazione del sistema.

107.1.2 $ rwhorwho [-a]‘rwho’ è il programma che, attraverso la lettura della directory ‘/var/spool/rwho/’, informasugli utenti connessi agli elaboratori della rete locale. I file di queste informazioni, contenuti nelladirectory ‘/var/spool/rwho/’ sono aggiornati dal demone ‘rwhod’.

L’opzione ‘-a’ permette di non visualizzare le informazioni sugli utenti che da molto tempo risul-tano non avere alcuna interazione con il proprio sistema.

1netkit-rwho BSD

1201

Page 144:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1202 Informazioni sugli utenti della rete

107.2 Informazioni attraverso RPCÈ possibile richiedere informazioni attraverso le RPC. Per ottenerle, occorre che l’elaboratore dalquale si vogliono ricevere abbia in funzione il servizio ‘rusersd’ normalmente reso disponibiledal demone ‘rpc.rusersd’. 2

Naturalmente, trattandosi di un servizio RPC, occorre che anche il Portmapper sia stato attivatopreventivamente (capitolo 104).

107.2.1 # rpc.rusersdrpc.rusersd

‘rpc.rusersd’ è il demone del servizio ‘rusersd’. Normalmente, per attivarlo è necessarioavviarlo in maniera indipendente dal supervisore Inet, attraverso la procedura di inizializzazionedel sistema.

107.2.2 $ rusersrusers [-a] [-l] [host...]Elenca gli utenti connessi agli elaboratori della rete locale. Per ottenere queste informazioni, uti-lizza una chiamata RPC e quindi instaura un collegamento con il demone ‘rpc.rusersd’ pressogli elaboratori che rispondono.

Vedere rusers(1).

107.3 Informazioni personali: FingerQuando si parla di Finger 3 si fa riferimento alle informazioni personali contenute nel quintocampo del file ‘/etc/passwd’, cioè al nominativo completo dell’utente. A volte, in questocampo si trovano informazioni addizionali, come l’ufficio, il numero telefonico dell’ufficio e ilnumero di casa. Sotto questo aspetto, tali informazioni sono effettivamente delicate.

Volendo, si possono rendere pubbliche queste informazioni, assieme ad altre che si raccolgonoall’interno di file di configurazione contenuti nelle directory personali degli utenti, attraverso ildemone ‘fingerd’, controllato dal supervisore Inet.

107.3.1 # fingerdin.fingerd [opzioni]Consente al programma ‘finger’ di ottenere le informazioni che richiede. È gestito dal supervi-sore Inet e filtrato dal TCP wrapper.

Nell’esempio seguente, viene mostrata la riga di ‘/etc/inetd.conf’ in cui si dichiara il suopossibile utilizzo.

finger stream tcp nowait root /usr/sbin/tcpd in.fingerd

Alcune opzioni

-w

Con questa opzione, gli utenti remoti del servizio ricevono un benvenuto addizionale, con-tenente informazioni particolareggiate sul sistema in funzione. Dal momento che questeindicazioni possono essere utili a un ipotetico aggressore, generalmente si evita di utilizzaretale opzione.

2netkit-rusers software libero con licenza speciale3Finger BSD

Page 145:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Informazioni sugli utenti della rete 1203

-u

L’opzione ‘-u’ permette di non accogliere richieste remote generalizzate. In pratica, si im-pedisce l’uso di un comando del tipo ‘finger @host’, in cui non appare esplicitamente ilnome di un utente particolare.

-l

Attiva l’annotazione delle richieste nel registro di sistema.

107.3.2 $ fingerfinger [opzioni] [utente...] [[utente]@host...]Consente di visualizzare le informazioni utili a identificare gli utenti indicati come argo-mento. Gli utenti possono essere specificati anche utilizzando il simbolo ‘@’ seguito dal nomedell’elaboratore. Se non vengono indicati nomi di utente, viene visualizzato l’elenco degli utenticonnessi. Se si specifica il nome di un elaboratore preceduto dal simbolo ‘@’, viene visualizzatol’elenco degli utenti connessi a quell’elaboratore.

Alcune opzioni

-s

Visualizza il nominativo degli utenti, il nome reale, i terminali a cui sono connessi (conl’aggiunta di un asterisco nel caso sia impedita la scrittura), il tempo di inattività (questonon esclude che su quel terminale possa essere in uso un qualche programma interattivo), ilmomento in cui è avvenuto l’accesso e le informazioni addizionali sull’ufficio.

-l

Fornisce tutte le informazioni che si potrebbero ottenere attraverso l’opzione ‘-s’, assiemea tutte le altre disponibili: la directory personale, il telefono privato, la shell iniziale, lasituazione della posta elettronica, assieme al contenuto dei file ‘˜/.plan’, ‘˜/.project’

e ‘˜/.forward’ (che si trovano nella directory personale di quell’utente).

Questa è l’azione predefinita, che corrisponde in pratica a fornire tutte le notizie disponibilisull’utente.

Esempi

$ finger

Fornisce l’elenco degli utenti connessi al sistema locale.

$ finger @dinkel.brot.dg

Se l’elaboratore dinkel.brot.dg lo consente, fornisce l’elenco degli utenti connessi aquel sistema remoto.

$ finger -l @dinkel.brot.dg

Se l’elaboratore dinkel.brot.dg lo consente, fornisce tutte le informazioni disponibilisugli utenti connessi a quel sistema remoto.

$ finger -l [email protected]

Se l’elaboratore dinkel.brot.dg lo consente, fornisce tutte le informazioni disponibilisull’utente ‘tizio’, indipendentemente dal fatto che questo sia connesso o meno.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 146:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 108Messaggi sul terminaleIl modo normale di inviare un messaggio a una persona è quello di utilizzare la posta elettronica. Inalternativa, quando si desidera aprire una comunicazione istantanea, può essere conveniente l’usodi programmi come ‘talk’, ammesso che il sistema di destinazione sia predisposto per questo.

Il tipo di comunicazione che utilizza programmi come ‘talk’ e simili, parte dal presupposto chesi possa «scrivere» sul dispositivo corrispondente al terminale utilizzato dall’utente destinatario.

108.1 Accesso al proprio terminaleQuando si accede normalmente attraverso un terminale a caratteri, il dispositivo corrispondentedovrebbe appartenere all’utente che lo sta utilizzando e anche al gruppo ‘tty’. Ciò dovrebbeavvenire automaticamente per opera del programma ‘login’. Nel caso dell’utente ‘tizio’ chesta utilizzando la seconda console virtuale, si dovrebbero osservare le caratteristiche seguenti.

$ ls -l /dev/tty2

crw--w---- 1 tizio tty 4, 2 dic 31 10:38 /dev/tty2

L’utente che utilizza il terminale dovrebbe avere i permessi di lettura e scrittura, inoltre, dovrebbeessere concesso al gruppo il permesso di scrittura. Con questa convenzione, un programma chesia stato avviato con i privilegi del gruppo ‘tty’ avrebbe la possibilità di scrivere su questo dispo-sitivo.

Scrivere sul dispositivo di un terminale significa andare a pasticciare lo schermo su cui sta lavo-rando presumibilmente un utente. Esistendo questa possibilità, cioè che processi estranei possanoaggiungere informazioni allo schermo del terminale che si sta utilizzando, la maggior parte degliapplicativi prevede un comando che riscrive il contenuto dello schermo (di solito si tratta dellacombinazione di tasti [ Ctrl+l ]). Tuttavia, gli utenti potrebbero desiderare di limitare questa possi-bilità, eliminando il permesso in scrittura per il gruppo ‘tty’ per il terminale che si sta utilizzando.

108.1.1 $ writewrite utente [terminale]Il programma ‘write’ rappresenta il sistema primordiale per inviare un messaggio a un al-tro utente che utilizza un terminale dello stesso sistema locale. Il messaggio viene atteso dallostandard input e viene scritto nel dispositivo dell’utente destinatario quando questo viene con-cluso con un codice di EOF (che di solito si ottiene con la combinazione [ Ctrl+d ]).

Per poter scrivere sul dispositivo dell’utente destinatario, ‘write’, secondo le convenzioni, deveavere i privilegi del gruppo ‘tty’, per cui viene installato comunemente con il bit SGID attivato,appartenendo al gruppo ‘tty’.

# chown root.tty /usr/bin/write

# chmod g+s /usr/bin/write

‘write’ non è un programma destinato all’invio di messaggi attraverso la rete, pertanto il nomedell’utente va indicato in modo semplice, senza specificare il nodo. Il dispositivo del terminalepuò essere specificato e in tal caso si può indicare il percorso assoluto (‘/dev/tty*’) oppuresolo il nome finale. Se il terminale non viene specificato, ‘write’ cerca di determinarlo da solo.

1204

Page 147:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi sul terminale 1205

Dal momento che quando si invia un messaggio, si presume che il proprio corrispondente vo-glia rispondere, ‘write’ non invia il messaggio se il proprio terminale non ammette la risposta,cioè se i permessi del proprio dispositivo non lo consentono.

108.1.2 $ wallwall messaggio

wall < file_messaggio

Il programma ‘wall’ è una variante di ‘write’, dove il messaggio viene inviato a tutti i terminaliattivi. Il messaggio può essere fornito anche attraverso la riga di comando. Valgono le stesseconsiderazioni fatte già per ‘write’, soprattutto per quello che riguarda il problema dei permessisu file di dispositivo dei terminali.

108.1.3 $ mesgmesg [opzione]Controlla l’accesso da parte di altri utenti al proprio terminale. In pratica controlla il permessoin scrittura per il gruppo ‘tty’ del dispositivo corrispondente al terminale utilizzato. Viene usatodi solito per impedire o permettere di ricevere messaggi attraverso programmi come ‘write’,‘wall’, ‘rwall’, ‘talk’ e simili.

Il fatto di togliere il permesso di scrittura per il gruppo ‘tty’ al dispositivo del terminale,non è una garanzia che nessuno possa scriverci. Un processo con i privilegi dell’utente ‘root’

potrebbe farlo ugualmente. Tuttavia, si tratta di una convenzione che generalmente viene ri-spettata.

Opzioni

y

Permette agli altri utenti di scrivere sul proprio terminale (aggiunge il permesso in scritturaal gruppo ‘tty’).

n

Impedisce agli altri utenti di scrivere sul proprio terminale (toglie il permesso in scrittura algruppo ‘tty’).

non definito

Se l’opzione non viene specificata, si ottiene la visualizzazione dello stato attuale.

108.2 Comunicazione diretta attraverso la retePer entrare in comunicazione diretta con un utente che sta utilizzando un terminale o una con-sole di un certo nodo raggiungibile attraverso la rete, si può utilizzare il servizio ‘talk’ gestitoattraverso il demone ‘talkd’ 1

In tal caso, è il demone ‘talkd’ (o meglio, ‘in.talkd’) del nodo destinatario, che si occupa discrivere sul dispositivo del terminale. Generalmente, questo programma viene avviato dal super-visore Inet con i privilegi dell’utente ‘root’, cosa che gli permetterebbe di scavalcare qualunquelimitazione di accesso ai dispositivi di terminale. Tuttavia, è il demone stesso che cerca di rispet-tare le convenzioni, evitando di scrivere se manca il permesso in scrittura per il gruppo ‘tty’.

1Talk BSD

Page 148:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1206 Messaggi sul terminale

108.2.1 # talkdin.talkd

Consente l’instaurarsi di una connessione diretta tra due utenti, attraverso il protocollo ‘talk’. Ègestito dal supervisore Inet e filtrato dal TCP wrapper.

Nell’esempio seguente, viene mostrata la riga di ‘/etc/inetd.conf’ in cui si dichiara il suopossibile utilizzo.

talk dgram udp wait root /usr/sbin/tcpd in.talkd

108.2.2 $ talktalk utente[@host] [terminale]Permette di entrare in comunicazione con una persona che sta utilizzando un nodo all’interno dellarete. Il nome dell’utente può essere espresso identificando anche il nodo all’interno del quale è,o dovrebbe essere connesso: utente@host. Se l’utente con cui si vuole comunicare è connessosu più terminali all’interno dello stesso nodo, è possibile specificare il nome del terminale nellaforma ‘ttyxx’. Quando si è chiamati attraverso ‘talk’, sullo schermo del terminale appare unmessaggio simile a quello seguente:

Message from Talk_Daemon@localhost at 11:31 ...

talk: connection requested by [email protected].

talk: respond with: talk [email protected]

In questo caso, si tratta dell’utente ‘tizio’ che cerca di contattarci; nel messaggio viene sug-gerito anche il modo corretto di rispondere. Evidentemente, l’utente che vuole rispondere devesospendere la propria attività, per avviare a sua volta una copia del programma ‘talk’.

Quando la comunicazione si instaura, viene utilizzato uno schermo suddiviso in due finestre perdistinguere i messaggi: nella parte superiore si vedono quelli inviati, mentre nella parte inferioreappaiono quelli ricevuti.

[Connection established]

Io sto bene, grazie

|----------------------------------------------------------------------|

Ciao caio, come stai?

Figura 108.1. Comunicazione attraverso ‘talk’.

Durante la comunicazione, lo schermo può essere riscritto utilizzando la combinazione [ Ctrl+l ].

Page 149:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi sul terminale 1207

La comunicazione può essere terminata da uno qualunque dei due interlocutori utilizzando ilcarattere di interruzione che di norma è [ Ctrl+c ].

Secondo le convenzioni, la chiamata attraverso ‘talk’ può essere impedita utilizzando il pro-gramma ‘mesg’, ovvero togliendo il permesso di scrittura al gruppo ‘tty’ del dispositivo delproprio terminale.

Esempi

$ talk tizio

Cerca di contattare l’utente ‘tizio’ nello stesso sistema locale.

$ talk [email protected]

Cerca di contattare l’utente ‘tizio’ presso dinkel.brot.dg.

$ talk [email protected] tty2

Cerca di contattare l’utente ‘tizio’ presso dinkel.brot.dg, al terminale ‘tty2’ (sitratta probabilmente della seconda console virtuale).

108.2.3 $ ytalkytalk [-x] utente...

‘ytalk’ 2 è un sistema di comunicazione tra due o più utenti. Il suo funzionamento è similea ‘talk’ e può anche comunicare con utenti che usano lo stesso ‘talk’. L’utente può esserespecificato in diversi modi:

• nome

un utente connesso presso lo stesso elaboratore locale;

• nome@host

un utente connesso presso un altro elaboratore;

• nome#terminale

un utente connesso presso lo stesso elaboratore locale attraverso un terminale determinato;

• nome#terminale@host

un utente connesso presso un altro elaboratore, su un terminale determinato.

Durante la comunicazione, è possibile richiamare un menù di funzioni premendo il tasto [ Esc ].

‘ytalk’ è più complesso rispetto al solito ‘talk’, tanto che è previsto l’uso di file di configura-zione: ‘/etc/ytalkrc’ per le impostazioni generali e ‘˜/.ytalkrc’ per la personalizzazioneda parte di ogni utente.

Eventualmente si possono approfondire le altre caratteristiche consultando la sua pagina dimanuale: ytalk(1).

2ytalk software libero

Page 150:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1208 Messaggi sul terminale

108.3 Invio di un messaggio circolareSe quello che si desidera è l’invio di un messaggio circolare senza la necessità di avere un collo-quio con gli utenti destinatari, si può usare Rwall. 3 Il sistema si basa sulle RPC, di conseguenza,è necessario che i nodi destinatari di questo messaggio abbiano in funzione il Portmapper, oltre aldemone particolare che si occupa di questo.

Rwall si compone in particolare di un demone, ‘rpc.rwalld’, oppure solo ‘rwalld’, che si avvianormalmente senza argomenti, di solito attraverso la procedura di inizializzazione del sistema, inmodo indipendente dal supervisore Inet.

Il cliente per sfruttare il servizio è ‘rwall’, che si utilizza con la sintassi seguente:

rwall host_remoto [file]‘rwall’ consente di inviare un messaggio, eventualmente già preparato in un file, a tutti gli utentidi un nodo remoto determinato. Se non viene fornito il nome di un file contenente il messaggioda inviare, questo messaggio può essere inserito attraverso la tastiera del terminale da cui si avviail programma. Per terminare l’inserimento si utilizza il codice di EOF che di solito si ottienepremendo la combinazione [ Ctrl+d ].

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

3Rwall BSD

Page 151:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 109TELNETTELNET è un protocollo che permette di effettuare un collegamento con un altro elaboratoree di operare su quello, come se si stesse utilizzando un suo terminale. Per fare questo, dal latodel servente occorre il demone ‘telnetd’, mentre dal lato del cliente si utilizza normalmente‘telnet’.

Il cliente TELNET è molto importante anche come programma diagnostico per instaurare uncollegamento manuale con una porta e iniziare quindi un colloquio diretto con il protocollo TCP.In questo caso, il demone ‘telnetd’ non viene utilizzato. 1

109.1 Dal lato del serventeCome già accennato, per eseguire un accesso in un elaboratore remoto attraverso il programma‘telnet’, è necessario che il demone ‘telnetd’ sia in funzione in quell’elaboratore.

109.1.1 # telnetdin.telnetd [opzioni]È il demone del servizio necessario per ricevere connessioni TELNET. È gestito dal supervisoreInet e filtrato dal TCP wrapper.

Nell’esempio seguente, viene mostrata la riga di ‘/etc/inetd.conf’ in cui si dichiara il suopossibile utilizzo.

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Se è presente il file ‘/etc/issue.net’, viene utilizzato da ‘telnetd’ per visualizzare un mes-saggio introduttivo, non appena si instaura un collegamento.

109.1.2 /etc/issue.netIl file ‘/etc/issue.net’ è un file di testo utilizzato da ‘telnetd’ per mostrare un messaggioquando un cliente TELNET si collega. In pratica, ha lo stesso ruolo del file ‘/etc/issue’

(43.3.1), che invece viene utilizzato da ‘getty’ o da un altro programma analogo.

‘/etc/issue.net’ può contenere alcune sequenze di escape che vengono poi trasformate invario modo nel momento della visualizzazione del messaggio. La tabella 109.1 ne mostra l’elenco.

Codice Descrizione%t Il terminale corrente.%h Il nome completo del sistema (FQDN).%D Il nome del dominio NIS.%d La data e l’ora attuale.%s Il nome del sistema operativo.%m Il tipo di hardware.%r Il rilascio del sistema operativo.%v La versione del sistema operativo.%% Equivale a un carattere percentuale singolo.

Tabella 109.1. Elenco dei codici di escape utilizzabili all’interno del file ‘/etc/issue.net’.

109.2 Dal lato del clienteL’accesso a un elaboratore remoto viene fatto attraverso il programma ‘telnet’, il quale permettedi operare come se ci si trovasse su un terminale di quel sistema.

1Telnet BSD

1209

Page 152:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1210 TELNET

109.2.1 $ telnettelnet [opzioni] [host_remoto [porta]]Se l’eseguibile ‘telnet’ viene avviato senza specificare il nodo con il quale ci si vuole connettere,questo inizia a funzionare in modalità di comando, visualizzando l’invito: ‘telnet>’.

Quando l’eseguibile ‘telnet’ riesce a connettersi al sistema remoto, si opera come se si fosseseduti davanti a un terminale di quel sistema.

Per poter dare dei comandi a ‘telnet’ occorre tornare temporaneamente alla modalità di co-mando, cosa che si ottiene utilizzando il carattere di escape. Questo carattere di escape noncorrisponde alla pressione del tasto [ Esc ], ma di solito alla combinazione [ Ctrl+] ] (control +parentesi quadra chiusa). Questa convenzione può essere cambiata ed è una cosa quasi neces-saria dal momento che utilizzando la tastiera italiana non è possibile ottenere le parentesi quadrese non in combinazione con [ AltGR ]. Diversamente, l’unico modo per poter ottenere la combina-zione [ Ctrl+] ] è quello di passare a un’altra console virtuale, attivare la mappa della tastiera USA,tornare sulla console virtuale in cui è in funzione ‘telnet’ ed eseguire la combinazione.

La comunicazione tra il cliente TELNET e il sistema remoto può essere di tre tipi:

• ‘TELNET LINEMODE’

è il tipo preferito ed è il primo tipo di comunicazione che il cliente TELNET tenta di instau-rare con il sistema remoto;

• ‘character at a time’

in questa modalità ogni carattere viene trasmesso singolarmente al sistema remoto;

• ‘old line by line’

i dati vengono trasmessi a blocchi di righe e ciò che viene scritto, riappare sul terminalelocale.

Alcune opzioni e altri argomenti

-d

Attiva inizialmente il controllo diagnostico.

-a

Tenta di eseguire un accesso automatico.

-n file_traccia

Registra le azioni effettuate durante il collegamento all’interno del file indicato.

-l utente

Definisce il nominativo-utente da utilizzare per l’accesso nel sistema remoto.

-e carattere_di_escape

Permette di definire una sequenza diversa per il cosiddetto carattere di escape. Il valorepredefinito è ‘ˆ]’ che non è tanto compatibile con la tastiera italiana.

host_remoto

Identifica il sistema remoto con il quale collegarsi. Può essere espresso in qualunque modovalido.

porta

Identifica il numero di porta (in forma numerica o attraverso il nome corrispondente). Senon viene specificato, si utilizza il valore predefinito per le connessioni TELNET: 23.

Page 153:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

TELNET 1211

Alcuni comandi

close

Chiude la connessione con l’elaboratore remoto.

display [argomento...]Visualizza tutti o alcuni dei valori delle impostazioni che si possono definire attraverso ilcomando ‘set’.

mode tipo_di_modalità

Permette di attivare una modalità particolare. L’attivazione della modalità richiesta dipendedal contesto e dalle possibilità offerte dal sistema remoto.

• character

Attiva la modalità di comunicazione a un carattere alla volta.

• line

Tenta di abilitare la modalità di comunicazione ‘TELNET LINEMODE’. Se non è possi-bile, si cerca di optare per la modalità ‘old line by line’.

• isig | -isig

Abilita o disabilita la modalità ‘TRAPSIG’ che riguarda la comunicazione ‘TELNET

LINEMODE’.

• edit | -edit

Abilita o disabilita la modalità ‘EDIT’ che riguarda la comunicazione ‘TELNET

LINEMODE’.

• softtab | -softtab

Abilita o disabilita la modalità ‘SOFT_TAB’ che riguarda la comunicazione ‘TELNET

LINEMODE’.

• litecho | -litecho

Abilita o disabilita la modalità ‘LIT_ECHO’ che riguarda la comunicazione ‘TELNET

LINEMODE’.

• ?

Visualizza una breve guida per il comando ‘mode’.

open host_remoto [-l utente][-porta]Apre una connessione con l’elaboratore remoto indicato. Se non viene specificata la porta,si utilizza il valore predefinito per le connessioni TELNET.

quit

Chiude la connessione (se esiste una connessione) e termina l’esecuzione di ‘telnet’. Du-rante la modalità di comando, è sufficiente premere la combinazione di tasti necessaria aottenere il codice di EOF per terminare la sessione di lavoro.

send argomenti

Permette di inviare uno o più sequenze di caratteri al sistema remoto.

set argomento valore

unset argomento valore

‘set’ attiva o specifica il valore di una variabile determinata, mentre ‘unset’ disabilita opone al valore di Falso la variabile specificata.

! [comando]Permette di eseguire il comando indicato in una subshell all’interno del sistema locale.

Page 154:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1212 TELNET

status

Visualizza lo stato corrente della connessione.

? [comando]Visualizza una breve guida del comando indicato o l’elenco dei comandi disponibili.

109.2.2 ˜/.telnetrcSe l’utente predispone il file ‘˜/.telnetrc’, questo viene letto quando si stabilisce un col-legamento. Se al suo interno appare un riferimento all’elaboratore con il quale ci si è collegati,vengono eseguite le istruzioni relative.

Le righe che iniziano con il simbolo ‘#’ sono commenti che terminano alla fine della riga.

Le righe che non contengono spazi anteriori, dovrebbero iniziare con il nome di un nodo remoto.Ciò che segue la stessa riga e quelle seguenti, che però cominciano con almeno uno spazio, sonoconsiderate come una serie di comandi da eseguire automaticamente all’atto della connessionecon quell’elaboratore.

109.3 Colloquiare con una portaUn cliente TELNET è un ottimo strumento per eseguire una connessione TCP diagnostica conuna porta di un nodo, sia remoto che locale. Naturalmente, per poter utilizzare questo sistemaoccorre conoscere il protocollo utilizzato dal demone con il quale ci si collega.2

L’esempio classico è l’invio di un messaggio di posta elettronica attraverso una connessione direttacon il servente SMTP. Dal file ‘/etc/services’ si determina che il servizio SMTP (SimpleMail Transfer Protocol) corrisponde alla porta 25, ma si può anche utilizzare semplicemente ilnome ‘smtp’. Nell’esempio, si instaura un collegamento con il servente SMTP in funzione nelnodo roggen.brot.dg.

$ telnet roggen.brot.dg smtp[ Invio ]

Trying 192.168.1.2...

Connected to roggen.brot.dg.

Escape character is ’ˆ]’.

220 roggen.brot.dg ESMTP Sendmail 8.8.5/8.8.5; Thu, 11 Sep 1997 19:58:15 +0200

HELO brot.dg[ Invio ]

250 roggen.brot.dg Hello dinkel.brot.dg [192.168.1.1], pleased to meet you

MAIL From: <[email protected]>[ Invio ]

250 <[email protected]>... Sender ok

RCPT to: <[email protected]>[ Invio ]

250 <[email protected]>... Recipient ok

DATA[ Invio ]

354 Enter mail, end with "." on a line by itself

Subject: Saluti.[ Invio ]

2Un cliente TELNET è in grado di utilizzare soltanto il protocollo TCP. I servizi che si basano sul TCP utilizzano unproprio protocollo di livello superiore ed è questo ciò a cui si fa riferimento.

Page 155:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

TELNET 1213

Ciao Antonio,[ Invio ]

come stai?[ Invio ]

Io sto bene e mi piacerebbe risentirti.[ Invio ]

Saluti,[ Invio ]

Daniele[ Invio ]

.[ Invio ]

250 TAA02951 Message accepted for delivery

QUIT[ Invio ]

221 dinkel.brot.dg closing connection

Connection closed by foreign host.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 156:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 110FTPQuando il trasferimento di file riguarda un ambito che supera l’estensione di una piccola retelocale, non è conveniente consentire l’utilizzo della condivisione del file system (NFS) o dellacopia remota. A questo scopo si presta meglio il protocollo FTP (File Transfer Protocol).

Il servizio FTP viene offerto da un demone che funge da servente e viene utilizzato da un pro-gramma cliente in grado di comunicare attraverso il protocollo FTP. Il funzionamento di un pro-gramma cliente tradizionale è paragonabile a quello di una shell specifica per la copia di file da everso un sistema remoto.

In questo capitolo si mostra in modo sommario l’organizzazione del servente FTP dellaWashington University (WU-FTP) e l’utilizzo di alcuni clienti. Per un approfondimento dellaconfigurazione del servente, si deve leggere il capitolo 233.

110.1 Identificazione e privilegiIl sistema di trasferimento di file attraverso FTP richiede una forma di identificazione. Prima diiniziare una sessione FTP è necessario passare per una fase di autenticazione e in base a questo sipotrà accedere ai file del sistema remoto.

Perché un utente registrato venga accettato per una sessione FTP è necessario che abbia una parolad’ordine (non sono quindi ammessi utenti senza parole d’ordine) e una shell valida, cioè compresanell’elenco del file ‘/etc/shells’. Questo ultimo particolare non è trascurabile, infatti, a voltesi sospende l’utilizzo di un’utenza modificando il campo della shell nel file ‘/etc/passwd’: disolito si tratta di uno script che emette un messaggio contenente la motivazione di questa sospen-sione.

Oltre a queste limitazioni, si utilizza il file ‘/etc/ftpusers’ per determinare quali utenti nonpossano essere accettati per una sessione di FTP normale. Di solito si tratta dell’elenco degli utentidi sistema: ‘root’ ‘bin’ ‘mail’,...

Se si vuole permettere l’accesso a utenti che non sono registrati nel proprio sistema (si parla diutenti che non sono previsti nel file ‘/etc/passwd’), è possibile abilitare l’utilizzo dell’FTPanonimo. Per questo è necessario che sia stato previsto un utente speciale nel file ‘/etc/passwd’: ‘ftp’.1

ftp:*:14:50:FTP User:/home/ftp:

A questo utente non deve essere abbinata alcuna parola d’ordine (l’asterisco non corrispondead alcuna parola d’ordine) e non deve avere alcuna shell (eventualmente, se si temono accessiindesiderati in altra forma, si può indicare il programma ‘/bin/false’ come shell).

Per utilizzare un FTP anonimo si può accedere identificandosi come ‘ftp’, oppure ‘anonymous’.Di norma, viene richiesta ugualmente una parola d’ordine che però non viene (e non può essere)controllata: per convenzione si inserisce l’indirizzo di posta elettronica.2

110.2 Dal lato del servente WU-FTPCome già accennato, per poter offrire un servizio FTP, attraverso WU-FTP, 3 occorre chel’elaboratore disponga del demone ‘ftpd’. Oltre al demone occorre predisporre la directory del

1I numeri UID e GID dipendono dall’organizzazione del proprio sistema2Quando si inserisce il proprio indirizzo di posta elettronica come parola d’ordine per accedere a un servizio FTP

anonimo, è sufficiente indicare la parte che precede il dominio, fino al simbolo ‘@’ incluso. Quindi, se l’indirizzo [email protected], basterebbe inserire ‘daniele@’.

3WU-FTP software non libero: non è consentita la commercializzazione a scopo di lucro

1214

Page 157:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1215

servizio FTP anonimo, sempre ammesso che si intenda offrire anche questo ultimo tipo di servi-zio.

110.2.1 # ftpdin.ftpd [opzioni]Si tratta del demone per la gestione degli accessi FTP, cioè del programma che si occupa di renderedisponibile l’accesso all’elaboratore per il File Transfer Protocol. È gestito dal supervisore Inet efiltrato dal TCP wrapper. ‘ftpd’ interpreta i caratteri jolly, cioè i simboli per i riferimenti a gruppidi file, secondo lo standard della shell C, utilizzando quindi i simboli ‘*’, ‘?’, ‘&’, ‘[’, ‘]’, ‘� ’ e ‘� ’.

Nell’esempio seguente viene mostrata la riga di ‘/etc/inetd.conf’ in cui si dichiara il suopossibile utilizzo.

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

Opzioni

-d | -v

Vengono aggiunte informazioni diagnostiche all’interno del registro di sistema.

-l

Ogni sessione FTP viene annotata all’interno del registro di sistema.

-tn

Permette di specificare la durata espressa in secondi (n) del tempo di inattività oltre il qualela sessione FTP viene conclusa automaticamente. Questo parametro è negoziabile anche daparte del cliente. Il valore predefinito è di 15 minuti (900 secondi).

-Tn

Permette di specificare la durata espressa in secondi (n) del tempo massimo di inattività. Inquesto modo, un cliente non può negoziare una durata superiore.

-a

Stabilisce l’uso da parte di ‘ftpd’ della configurazione contenuta all’interno del file ‘/etc/ftpaccess’.

-A

Disabilita l’uso da parte di ‘ftpd’ della configurazione contenuta all’interno del file ‘/etc/ftpaccess’. Questa è la modalità predefinita.

-L

Ogni comando inviato da parte degli utenti FTP viene annotato all’interno del registro disistema.

-i

Vengono registrate le operazioni di invio di file da parte dei clienti FTP all’interno di ‘/var/log/xferlog’.

-o

Vengono registrate le operazioni di prelievo di file da parte dei clienti FTP all’interno di ‘/var/log/xferlog’.

-uumask

Definisce un valore particolare della maschera dei permessi.

Page 158:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1216 FTP

110.2.2 /etc/ftpaccessÈ il file di configurazione di ‘ftpd’ per la gestione degli accessi da parte di utenti FTP. Vieneutilizzato dal demone ‘ftpd’ solo se questo è stato avviato con l’opzione ‘-a’. Segue un esempiodel contenuto di questo file.

class all real,guest,anonymous *

email root@localhost

loginfails 5

readme README* login

readme README* cwd=*

message /welcome.msg login

message .message cwd=*

compress yes all

tar yes all

chmod no guest,anonymous

delete no guest,anonymous

overwrite no guest,anonymous

rename no guest,anonymous

log transfers anonymous,real inbound,outbound

shutdown /etc/shutmsg

passwd-check rfc822 warn

La sezione 233.3 descrive meglio la configurazione con questo file. In alternativa si può ancheleggere ftpaccess(5).

110.2.3 /etc/ftpconversionsViene usato da ‘ftpd’ per determinare le modalità di conversione dei file compressi. Segue unesempio di questo file.

:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS

:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP

: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP

: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR

: : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

: : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

In pratica, a seconda di come viene identificato un file durante una sessione FTP, con l’aggiuntao l’eliminazione di un’estensione, si indica implicitamente una conversione di questo. La tabella110.1 dovrebbe chiarire il meccanismo.

Di solito, questa tecnica di trasformazione automatica non viene utilizzata: i nomi dei file vengonoindicati esattamente come sono nella realtà e nessuna conversione ha luogo.

110.2.4 /etc/ftpusersIl file ‘/etc/ftpusers’ viene utilizzato per impedire l’accesso agli utenti indicati al suo in-terno. L’esempio seguente chiarisce il senso di questo file.

Page 159:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1217

Nome reale Nome specificato Azione compiuta prima della trasmissione del fileradice.Z radice Viene trasmesso dopo essere stato decompresso con ‘uncompress’.radice radice.Z Viene trasmesso dopo essere stato compresso con ‘compress’.radice.gz radice Viene trasmesso dopo essere stato decompresso con ‘gunzip’.radice radice.gz Viene trasmesso dopo essere stato compresso con ‘gzip’.radice radice.tar Viene trasmesso dopo essere stato archiviato con ‘tar’.radice radice.tar.Z Viene archiviato e compresso con ‘tar’ e ‘compress’.radice radice.tar.gz Viene archiviato e compresso con ‘tar’ e ‘gzip’.

Tabella 110.1. FTP – conversione automatica degli archivi in base alle estensioni utilizzate.

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

Come si vede, si vuole evitare che si possa accedere a un servizio FTP normale (non anonimo)utilizzando i nomi degli utenti di sistema, ‘root’ incluso. Ovviamente, si possono aggiungere altrinomi di utenti registrati in questo elenco, impedendo così il loro utilizzo del servizio FTP normale(se il servizio FTP anonimo è attivato, continuano a poterlo utilizzare).

110.2.5 /etc/ftphostsIl file ‘/etc/ftphosts’ viene utilizzato per filtrare l’accesso da parte di determinati utenti dadeterminati nodi.

deny utente host...

L’utente indicato non può accedere dai nodi elencati. Questi nodi possono essere specificati inmodo completo o in modo parziale, intendendo così un intero gruppo di nodi.

110.2.6 Directory dell’FTP anonimoUna volta effettuato il collegamento, l’utente anonimo (‘ftp’ o ‘anonymous’) viene posizionatonella directory indicata nel file ‘/etc/passwd’ nella voce corrispondente dell’utente ‘ftp’. Disolito si tratta della directory ‘/home/ftp/’. In altri termini, si tratta della directory personaledell’utente fittizio ‘ftp’.

È bene precisare che l’utente anonimo, dopo la connessione, trova davanti a sé solo la gerarchiache si articola a partire da ‘˜ftp/’, dal momento che il servente FTP esegue la funzione‘chroot()’. È questo il motivo per cui è necessario che da quel punto siano disponibili alcuniprogrammi di servizio nella directory ‘˜ftp/bin/’, assieme ad altri elementi essenziali di unfile system Unix.

Generalmente, le varie distribuzioni GNU/Linux organizzano già questa directory in modo ra-gionevolmente corretto. Segue un esempio di struttura di ‘˜ftp/’ che può essere utilizzato in

Page 160:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1218 FTP

mancanza d’altro. È da tenere presente che le soluzioni legate all’organizzazione e alla sicurezzapossono essere diverse da quelle proposte.

È opportuno che nessuna directory sia modificabile, a parte il caso di ‘incoming/’, descrittapiù avanti.

• ‘˜ftp/’ 05558

Contiene normalmente un file con un messaggio introduttivo. Si tratta di solito del file‘welcome.msg’ che deve essere protetto opportunamente: deve essere accessibile soloin lettura a tutti gli altri utenti.

• ‘˜ftp/bin/’ 01118

Serve a contenere alcuni programmi di servizio indispensabili per le operazioni di FTP. Peresempio, non deve mancare ‘ls’.

Dal punto di vista dell’utilizzo, è sufficiente che tali file siano accessibili in esecuzione,mentre dal punto di vista della sicurezza è necessario che non siano modificabili.

• ‘˜ftp/etc/’ 01118

Serve a contenere essenzialmente i file ‘passwd’ e ‘group’. È importante che questi filenon contengano parole d’ordine, o al massimo che queste non siano reali. La presenza diquesti file serve solo a ottenere una conversione tra UID e nome dell’utente, e tra GID enome del gruppo. In pratica, vengono utilizzati da ‘ls’ per generare un listato leggibile dellaproprietà dei file.

Se la directory ‘˜ftp/lib/’ contiene delle librerie, oltre ai due file già visti, è necessarioche sia presente ‘ld.so.cache’.

I file contenuti in questa directory devono essere accessibili solo in lettura.

• ‘˜ftp/lib/’ 05558

Serve a contenere i file di libreria degli eseguibili contenuti in ‘˜ftp/bin/’. Questi file dilibreria devono essere accessibili in lettura e in esecuzione, ma naturalmente devono essereprotetti dalla scrittura.

• ‘˜ftp/pub/’ 05558

Questa directory può essere organizzata in vario modo. Di solito è il contenitore di filemessi a disposizione per il prelievo. In tal caso sarà conveniente che la directory non siamodificabile e che i file siano accessibili solo in lettura.

Per poter rendere disponibile una directory per la ricezione di file, questa deve essere acces-sibile in scrittura. Di solito si crea la directory ‘incoming/’ collocata al di sotto di ‘˜ftp/pub/’ o di un’altra sottodirectory, dandole solo i permessi di esecuzione (attraversamento)e scrittura, impedendo così la lettura del suo contenuto.

Segue un esempio del contenuto delle directory appena esaminate.

bin:

total 534

---x--x--x 1 root root 14940 Mar 3 1997 compress

---x--x--x 1 root root 292160 Mar 3 1997 cpio

---x--x--x 1 root root 45056 Mar 3 1997 gzip

---x--x--x 1 root root 49432 Mar 3 1997 ls

---x--x--x 1 root root 56380 Mar 3 1997 sh

---x--x--x 1 root root 77560 Mar 3 1997 tar

lrwxrwxrwx 1 root root 4 Jul 12 11:29 zcat -> gzip

Page 161:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1219

etc:

total 6

-r--r--r-- 1 root root 53 Mar 3 1997 group

-r--r--r-- 1 root root 4004 Feb 26 1997 ld.so.cache

-r--r--r-- 1 root root 79 Mar 3 1997 passwd

lib:

total 725

-rwxr-xr-x 1 root root 19704 Mar 3 1997 ld-linux.so.1

-rwxr-xr-x 1 root root 19704 Mar 3 1997 ld-linux.so.1.7.14

-rwxr-xr-x 1 root root 24576 Mar 3 1997 ld.so

-rwxr-xr-x 1 root root 24576 Mar 3 1997 ld.so.1.7.14

lrwxrwxrwx 1 root root 14 Jul 12 11:29 libc.so.5

-> libc.so.5.3.12

-rwxr-xr-x 1 root root 644036 Mar 3 1997 libc.so.5.3.12

pub:

total 0

Quello che segue è l’esempio del contenuto del file ‘˜ftp/etc/passwd’.

root:*:0:0:::

bin:*:1:1:::

operator:*:11:0:::

ftp:*:14:50:::

nobody:*:65534:65534:::

Quello che segue è l’esempio del contenuto del file ‘˜ftp/etc/group’.

root::0:

bin::1:

daemon::2:

sys::3:

adm::4:

ftp::50:

110.2.6.1 Conciliare sicurezza e praticità

Il massimo della sicurezza si ottiene:

• facendo in modo che le directory e i file di ‘˜ftp/’ appartengano all’utente ‘root’;

• evitando di concedere permessi in scrittura;

• concedendo i permessi di lettura solo quando necessario.

Da un punto di vista di praticità, o di necessità, può essere opportuno che sia consentito all’utente‘root’ di accedere in lettura e scrittura, altrimenti il lavoro di amministrazione dell’FTP anonimorisulterebbe impedito.

110.3 Dal lato del clientePer usufruire di un servizio FTP è necessario un programma in grado di comunicare attraverso ilprotocollo FTP. Per esempio, i navigatori integrati includono anche questa funzionalità. Tuttavia,i programmi tradizionali che funzionano in modo simile a una shell, sono spesso più ricchi difunzionalità.

Page 162:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1220 FTP

110.3.1 $ ftpftp [opzioni] [host]È il programma cliente tradizionale per il trasferimento di file da e verso un nodo remoto. 4 Quandoviene avviato con l’indicazione del nome dell’elaboratore remoto, ‘ftp’ tenta immediatamente dieffettuare il collegamento; diversamente si avvia e attende il comando con il quale questo elabo-ratore verrà specificato. Se esiste il file ‘˜/.netrc’, questo viene utilizzato per automatizzarel’accesso nell’elaboratore remoto. Quando ‘ftp’ è in attesa di un comando da parte dell’utente,presenta l’invito seguente (prompt): ‘ftp>’.

Alcune opzioni

-V

Vengono visualizzati tutti i messaggi.

-n

Disabilita l’accesso automatico.

-i

Disattiva la richiesta interattiva durante i trasferimenti multipli di file.

-d

Attiva la modalità diagnostica.

-g

Disabilita l’uso dei caratteri jolly per l’indicazione di gruppi di file.

110.3.1.1 Comandi

Come già accennato, quando ‘ftp’ è in attesa di un comando da parte dell’utente, presenta l’invito‘ftp>’. Quello che segue è l’elenco dei comandi che possono essere utilizzati. Se i parametri deicomandi contengono il carattere spazio, questi devono essere delimitati da una coppia di apicidoppi (‘"’). L’elenco è suddiviso per categorie.

Se la lettura di questa sezione è troppo noiosa, si può saltare direttamente a leggere gli esempidella sezione 110.3.2.

Shell

! [comando [argomenti]]Avvia una shell sull’elaboratore locale, oppure esegue il comando indicato con gli argomentiche gli vengono forniti.

Macro$ macro [argomenti]Esegue la macro indicata che si riferisce a un nome di una macro creata con il comando‘macdef’. Gli argomenti vengono passati alla macro già espansi.

macdef macro

Definisce una macro (macro istruzione) attribuendole un nome. La macro può contenerepiù righe purché consecutive: la prima riga vuota viene interpretata come la finedell’inserimento. Possono essere inserite un massimo di 16 macro che occupano uno spaziocomplessivo di 4 096 caratteri. Le macro restano definite fino a che non viene immesso uncomando ‘close’ che conclude la connessione con un sistema remoto determinato.

La macro viene interpretata nel modo seguente:4ftp BSD

Page 163:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1221

• ‘$n’

Il simbolo ‘$’ seguito da una o più cifre numeriche viene interpretato come variabilecontenente l’n-esimo argomento (della macro nel momento in cui viene richiamata).

• ‘$i’

Il simbolo ‘$’ seguito dalla lettera ‘i’ indica che l’esecuzione della macro deve essereripetuta tante volte quanti sono i parametri forniti alla macro quando viene richiamata.Ogni volta, ‘$i’ rappresenta il parametro per il quale si sta ripetendo l’esecuzione dellamacro.

• ‘\x’

Il simbolo ‘\’ seguito da un carattere indica il carattere stesso. Per esempio è necessariousare questo simbolo per poter indicare il dollaro senza volersi riferire a uno deiparametri.

Identificazione

account [parola_d’ordine]Fornisce a ‘ftp’ l’informazione sulla parola d’ordine di account che a volte viene richiestada alcuni sistemi per potervi accedere. Se l’argomento non viene fornito, viene richiestoall’utente di inserire la parola d’ordine.

user utente [parola_d’ordine] [account]Definisce l’identità dell’utente da utilizzare per l’accesso nel sistema remoto. Se la parolad’ordine e l’account non vengono forniti, ma sono richiesti nel sistema con il quale ci siintende connettere, questi dovranno essere inseriti al momento del collegamento.

Trasferimento dati

append file_locale [file_remoto]Aggiunge, in coda, il contenuto del file locale a quello del sistema remoto. Se non vienefornito il nome del file di destinazione, si intende lo stesso nome di quello di origine.

get file_remoto [file_locale] | recv file_remoto [file_locale]‘get’ e ‘recv’ sono sinonimi. Riceve il file remoto indicato, eventualmente rinominandolocome indicato.

mget file_remoti

Esegue un ‘get’ multiplo, cioè su tutti i file che si ottengono dall’espansione del nomeindicato utilizzando i caratteri jolly.

newer file_remoto

Esegue un ‘get’ del file remoto, solo se risulta essere più recente di quello presente nelsistema locale.

put file_locale [file_remoto] | send file_locale [file_remoto]‘put’ e ‘send’ sono sinonimi. Copia il file specificato nel sistema remoto eventualmenterinominandolo come indicato.

mput file_locali

Espande il nome indicato se contiene dei caratteri jolly ed esegue un ‘put’ per tutti questifile, trasmettendoli in sostanza nel sistema remoto.

reget file_remoto [file_locale]Permette di riprendere il ‘get’ di un file remoto quando l’operazione precedente è statainterrotta involontariamente. L’operazione non è sicura e si basa solo sul calcolo delladimensione del file locale per determinare la parte mancante ancora da trasferire.

Page 164:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1222 FTP

Interruzione del trasferimento

L’operazione di trasferimento può essere interrotta utilizzando la combinazione [ Ctrl+c ].

Modalità di trasferimento dei dati

ascii

Imposta il tipo di trasferimento in modalità ASCII. Questa è la modalità normale ecomunque non è adatta al trasferimento di file i cui byte contengono informazioni anchedopo il settimo bit. Questo tipo di modalità di trasferimento di dati può essere conveniente(ma non necessaria) solo per i file di testo puro che non contengono caratteri speciali dialcun tipo.

binary

Imposta il tipo di trasferimento in modalità binaria. Questa modalità è adatta al trasferimentodi qualunque tipo i file.

cr

Attiva o disattiva la trasformazione della sequenza � CR� � LF� in � LF � per i trasferimentiASCII verso il sistema locale. In pratica, converte i file di testo scritti in stile Dos in filecorrispondenti in stile Unix. Quando è attivata la modalità, viene eseguita la conversione.

mode [modalità_di_trasferimento]Configura la modalità di trasferimento. Il valore predefinito è ‘stream’.

runique

Attiva o disattiva la modalità di unicità dei nomi in ricezione. Quando la modalità è attiva,se durante le operazioni di ‘get’ o ‘mget’, si incontrano nel sistema locale dei file con glistessi nomi, l’operazione di trasferimento avviene aggiungendo al nome il suffisso ‘.1’,oppure ‘.2’, fino a un massimo di ‘.99’. La condizione predefinita di questa modalità è didisattivazione.

sunique

Attiva o disattiva la modalità di unicità dei nomi in trasmissione. Quando la modalità èattiva, se durante le operazioni di ‘put’ o ‘mput’, si incontrano nel sistema remoto dei filecon gli stessi nomi, l’operazione di trasferimento avviene aggiungendo al nome il suffisso‘.1’, oppure ‘.2’, fino a un massimo di ‘.99’. La condizione predefinita di questa modalitàè di disattivazione.

struct [struttura]Stabilisce il tipo di struttura da utilizzare per il trasferimento dei dati. Il valore predefinito è‘stream’.

tenex

Configura il tipo di trasferimento dati in modo da essere compatibile con il sistema usato daun elaboratore remoto che utilizza questo tipo di protocollo.

type [tipo_di_trasferimento]Attiva o visualizza il tipo di trasferimento dei dati. Il valore predefinito è ‘ascii’. I tipi adisposizione sono i seguenti.

• ‘ascii’

• ‘ebcdic’

• ‘image’ (trasferimento binario)

• ‘local byte size’

Page 165:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1223

Informazioni

bell

Attiva o disattiva la segnalazione acustica alla fine di ogni operazione di trasferimento difile.

debug [livello_diagnostico]Attiva o disattiva la modalità diagnostica. Quando questa è attiva, vengono visualizzati icomandi inviati al sistema remoto, evidenziati dal simbolo ‘-->’.

hash

Abilita o disabilita la visualizzazione della progressione delle operazioni di trasferimentoutilizzando i simboli ‘#’ che rappresentano un blocco di 1 024 byte.

prompt

Attiva o disattiva la modalità di conferma. Se è attiva, durante le operazioni di trasferimentodi gruppi di file, viene richiesta la conferma per ogni file.

trace

Attiva o disattiva il tracciamento dei pacchetti. Normalmente è disattivato.

verbose

Attiva o disattiva la modalità con la quale si visualizzano tutti i messaggi legati alla comu-nicazione con il sistema remoto.

Connessione e chiusura

bye | quit

‘bye’ e ‘quit’ sono sinonimi. Termina il collegamento e termina l’attività di ‘ftp’.

close | disconnect

Termina la connessione senza uscire dal programma.

open host [porta]Apre una connessione con l’elaboratore remoto indicato ed eventualmente anche specifi-cando la porta di comunicazione. Se la modalità di accesso automatico è attiva, ‘ftp’ tentaanche di effettuare l’accesso nel sistema remoto.

Conversione dei nomi e filtri

case

Attiva o disattiva la modalità di trasformazione per cui i nomi dei file trasferiti dal sistemaremoto attraverso il comando ‘mget’ vengono copiati nel sistema locale utilizzando sololettere minuscole.

form formato

Configura il filtro di trasferimento ‘form’ in base al formato attribuito. Il valore predefinitoè ‘file’.

glob

Attiva o disattiva l’espansione dei nomi di file contenenti caratteri jolly per l’uso con‘mdelete’, ‘mget’ e ‘mput’. L’utilità di disattivare l’espansione dei nomi sta nella possi-bilità di identificare (e trasferire) file con nomi strani che utilizzano simboli speciali chealtrimenti sarebbero intesi come jolly (o metacaratteri). L’espansione dei nomi viene fattain maniera differente a seconda che si riferisca a dati contenuti nell’elaboratore locale, op-pure nell’elaboratore remoto. Per le operazioni con ‘mput’ che si riferiscono a dati locali datrasmettere, si utilizza il modello della shell C.

Page 166:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1224 FTP

Nel caso di ‘mget’ e ‘mdelete’ che si riferiscono all’acquisizione e alla cancellazione di datiremoti, valgono le regole stabilite dal servente FTP in funzione nell’elaboratore remoto. Perverificare il comportamento dell’espansione dei nomi in un elaboratore remoto è possibileutilizzare il comando ‘mls’ nel modo seguente:

mls file_remoti -

———

nmap [modello_in_ingresso modello_in_uscita]Definisce una regola per la trasformazione dei nomi dei file per il collegamento con il si-stema remoto. Se non viene fornito alcun parametro, la regola di trasformazione viene an-nullata.

ntrans [caratteri_in_ingresso caratteri_in_uscita]Definisce una trasformazione dei caratteri in ingresso con i rispettivi caratteri in uscita perla trasformazione dei nomi dei file quando ci sono incompatibilità con i nomi utilizzati nelsistema remoto. Se non viene fornito alcun parametro, la regola di trasformazione vieneannullata.

umask [maschera]Definisce una nuova maschera dei permessi nel sistema remoto. Se non viene specificatol’argomento, si ottiene la visualizzazione del valore corrente di questa maschera.

Operazioni sul sistema remoto

cd [directory_remota]Cambia la directory corrente nel sistema remoto.

cdup

Cambia la directory corrente nel sistema remoto, portandosi sul livello superiore.

chmod permessi file_remoto

Cambia i permessi sul file remoto.

delete file_remoto

Cancella il file indicato nel sistema remoto.

dir [directory_remota] [file_locale] | ls [directory_remota] [file_locale]nlist [directory_remota] [file_locale]‘dir’, ‘ls’, ‘nlist’ sono sinonimi. Elencano il contenuto della directory remota specificata,oppure di quella attuale se non viene indicata. L’elenco viene emesso attraverso lo standardoutput, quando non viene specificato il file locale all’interno del quale si vuole immetterequesto elenco. L’aspetto dell’elenco dipende dal sistema con il quale si sta comunicando. Disolito è molto simile a quello di un ‘ls -l’.

mdelete [file_remoti]Cancella i file remoti espandendo i caratteri jolly prima di procedere.

mdir file_remoti file_locale | mls file_remoti file_locale

‘mdir’ e ‘mls’ sono sinonimi. Elencano i file remoti espandendo i caratteri jolly e ne immet-tono il risultato nel file locale indicato. Se si vuole visualizzare l’elenco, invece di generareun file, si può utilizzare un trattino singolo (‘-’) al posto del nome di questo file. Questo co-mando è particolarmente importante per verificare la trasformazione dei simboli usati comecaratteri jolly sui file del sistema remoto prima di procedere con operazioni più delicatecome il prelievo multiplo (‘mget’) o la cancellazione multipla (‘mdelete’).

mkdir directory_remota

Crea una directory nel sistema remoto.

Page 167:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1225

modtime file_remoto

Visualizza la data e l’ora dell’ultima modifica del file indicato nel sistema remoto.

pwd

Visualizza il nome della directory corrente del sistema remoto.

quote argomenti

Trasmette gli argomenti indicati al sistema remoto esattamente così come vengono scritti.

remotestatus [file_remoto]Se il comando viene dato senza l’argomento, si ottiene lo stato del sistema remoto. Se vienefornito il nome di file remoto, si ottiene lo stato di quel file nel sistema remoto.

rename origine destinazione

Permette di cambiare il nome di un file nel sistema remoto.

rmdir directory_remota

Cancella una directory nel sistema remoto.

size file_remoto

Restituisce la dimensione del file remoto.

status

Visualizza lo stato attuale del sistema remoto.

system

Visualizza il tipo di sistema operativo in funzione nel sistema remoto.

Operazioni sul sistema locale

lcd [directory]Cambia la directory corrente all’interno dell’elaboratore locale. Se non viene specificato ilpercorso si intende la directory personale dell’utente.

Help

help [comando] | ? [comando]‘help’ e ‘?’ sono sinonimi. Visualizza una breve guida dei comandi.

remotehelp [comando]Permette di richiedere la guida dei comandi al sistema remoto.

Proxy

proxy comando_ftp

Invia il comando indicato a un altro elaboratore remoto. Questo è un modo per potersi con-nettere contemporaneamente a due sistemi remoti e di conseguenza di trasferire file tra i due.Per poter iniziare il collegamento con un elaboratore remoto secondario, il primo comandosarà ‘proxy open’. Non tutti i comandi sono disponibili anche per una connessione secon-daria; per visualizzarne l’elenco, basta dare il comando ‘proxy ?’. Quando viene aperta laconnessione con un elaboratore secondario, i comandi ‘proxy’ riguardano il trasferimentodi file tra l’elaboratore remoto normale e quello secondario, trattando questo ultimo comese fosse quello locale.

Page 168:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1226 FTP

110.3.1.2 Flusso standard di dati

Se, all’interno dei parametri dei comandi, quando viene richiesto un nome di file, viene fornito untrattino singolo (‘-’), si intende riferirsi a:

• standard input in caso di apertura del file in lettura;

• standard output nel caso di apertura del file in scrittura.

Quando al posto del nome di un file viene fornita una barra verticale (‘|’) seguita da una qualchestringa (eventualmente racchiusa tra apici doppi, nel caso contenga spazi), quella stringa vieneinterpretata come un comando da inviare alla shell. Ciò in modo che venga sostituito l’insieme‘|stringa’ con il risultato di quel comando inviato alla shell.

110.3.1.3 Configurazione

‘ftp’ può essere configurato creando o modificando il file ‘˜/.netrc’. Si tratta di un file di testonormale in cui ogni riga corrisponde a un comando. Per separare i comandi dai loro parametripossono essere usati sia spazi che caratteri di tabulazione. Le indicazioni contenute all’internodel file sono precedute dal nome del nodo remoto a cui si riferiscono. In tal modo, quando ‘ftp’

riceve l’ordine di collegamento con un certo nodo, cerca all’interno di questo file per trovare ilprofilo che lo riguarda.

Alcune direttivemachine nome

Il nome del nodo a cui fa riferimento la configurazione seguente:

default

Rappresenta la configurazione predefinita per tutti i nodi remoti non previsti all’interno diquesto file.

login utente

Definisce il nominativo da utilizzare per il collegamento.

password stringa_parola_d’ordine

Definisce la parola d’ordine per l’accesso al sistema remoto.

account stringa_parola_d’ordine

Definisce una parola d’ordine ulteriore per i sistemi remoti che lo richiedono.

macdef macro

Definisce una macro (macro istruzione) attribuendole un nome. Il contenuto della macroè rappresentato dalle righe successive alla definizione. La macro può contenere più righepurché consecutive: la prima riga vuota viene interpretata come la fine dell’inserimento.Possono essere inserite un massimo di 16 macro che occupano uno spazio complessivo di4 096 caratteri. Le macro restano definite fino a che non viene immesso un comando ‘close’

che conclude la connessione con un sistema remoto determinato. La macro viene interpretatanel modo seguente:

• ‘$n’

Il simbolo ‘$’ seguito da una o più cifre numeriche viene interpretato come variabilecontenente l’n-esimo argomento (della macro nel momento in cui viene richiamata).

• ‘$i’

Il simbolo ‘$’ seguito dalla lettera ‘i’ indica che l’esecuzione della macro deve essereripetuta tante volte quanti sono i parametri forniti alla macro quando viene richiamata.Ogni volta, ‘$i’ rappresenta il parametro per il quale si sta ripetendo l’esecuzione dellamacro.

Page 169:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1227

• ‘\x’

Il simbolo ‘\’ seguito da un carattere indica il carattere stesso. Per esempio è neces-sario usare questo simbolo per poter indicare il dollaro senza volersi riferire a uno deiparametri.

Se viene definita una macro con il nome ‘init’, questa viene eseguita automaticamentecome ultima operazione dell’accesso automatico.

110.3.2 EsempiL’uso di un cliente FTP può essere anche semplice, se si lasciano da parte raffinatezze non indi-spensabili. Seguono alcuni esempi di sessioni FTP.

Prelievo di file

daniele@roggen:˜$ ftp dinkel.brot.dg[ Invio ]

Si richiede la connessione FTP all’elaboratore dinkel.brot.dg.

Connected to dinkel.brot.dg.

220 dinkel.brot.dg FTP server (Version wu-2.4.2-academ[BETA-12]) ready.

Name (roggen.brot.dg:daniele):

anonymous[ Invio ]

Si utilizza una connessione anonima e per correttezza si utilizza il proprio indirizzo di postaelettronica abbreviato al posto della parola d’ordine.

331 Guest login ok, send your complete e-mail address as password.

Password:

daniele@[ Invio ]

230 Guest login ok, access restrictions apply.

Remote system type is UNIX.

Using ascii mode to transfer files.

Come si vede, la modalità di trasferimento predefinita è ASCII (almeno così succede disolito). Generalmente si deve utilizzare una modalità binaria. Questa verrà richiesta tra unpo’; per ora viene richiesta la guida interna dei comandi a disposizione.

ftp> help[ Invio ]

Commands may be abbreviated. Commands are:

! debug mdir sendport site

$ dir mget put size

account disconnect mkdir pwd status

append exit mls quit struct

ascii form mode quote system

bell get modtime recv sunique

binary glob mput reget tenex

bye hash newer rstatus tick

case help nmap rhelp trace

cd idle nlist rename type

cdup image ntrans reset user

chmod lcd open restart umask

close ls prompt rmdir verbose

cr macdef passive runique ?

delete mdelete proxy send

Page 170:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1228 FTP

ftp> binary[ Invio ]

Come accennato, viene richiesto di passare alla modalità di trasferimento binario.

200 Type set to I.

ftp> prompt[ Invio ]

Anche la modalità interattiva viene disattivata per evitare inutili richieste.

Interactive mode off.

La struttura delle directory di un normale servizio FTP anonimo prevede la presenza delladirectory ‘pub/’ dalla quale discendono i dati accessibili all’utente sconosciuto.

Anche se dal punto di vista del cliente FTP, che accede al servizio remoto, si tratta dellaprima directory dopo la radice, in realtà questa radice è solo la directory iniziale delservizio FTP anonimo. Di conseguenza, è quasi impossibile che corrisponda realmentecon la directory radice del file system remoto. Tutto questo serve solo a spiegare perché ilcomando ‘cd /pub’ potrebbe non funzionare quando ci si collega a serventi configuratimale. Ecco perché nell’esempio che segue non si utilizza la barra obliqua davanti a ‘pub’.

ftp> cd pub[ Invio ]

250 CWD command successful.

ftp> pwd[ Invio ]

257 "/pub" is current directory.

ftp> ls[ Invio ]

200 PORT command successful.

150 Opening ASCII mode data connection for /bin/ls.

total 4

dr-xr-sr-x 3 root ftp 1024 Nov 12 21:04 .

drwxr-xr-x 6 root root 1024 Sep 11 20:31 ..

-rw-r--r-- 1 root ftp 37 Nov 12 21:04 esempio

drwxrwsrwx 2 root ftp 1024 Nov 2 14:04 incoming

226 Transfer complete.

Attraverso il comando ‘ls’ si vede che la directory ‘pub/’ contiene solo il file ‘esempio’

e la directory ‘incoming/’. Si decide di prelevare il file.

ftp> get esempio[ Invio ]

local: esempio remote: esempio

200 PORT command successful.

150 Opening BINARY mode data connection for esempio (37 bytes).

226 Transfer complete.

37 bytes received in 0.00155 secs (23 Kbytes/sec)

Il file scaricato viene messo nella directory in cui si trovava l’utente quando avviava il pro-gramma ‘ftp’.

ftp> quit[ Invio ]

221 Goodbye.

Invio di dati

daniele@roggen:˜$ ftp dinkel.brot.dg[ Invio ]

Page 171:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1229

Si richiede la connessione FTP all’elaboratore dinkel.brot.dg e si danno una serie dicomandi per raggiungere la directory ‘pub/incoming’.

Connected to dinkel.brot.dg.

220 dinkel.brot.dg FTP server (Version wu-2.4.2-academ[BETA-12](1) Wed Mar 5 12:37:21 EST 1997) ready.

Name (dinkel.brot.dg:daniele):

anonymous[ Invio ]

331 Guest login ok, send your complete e-mail address as password.

Password:

daniele@[ Invio ]

230 Guest login ok, access restrictions apply.

Remote system type is UNIX.

Using ascii mode to transfer files.

ftp> binary[ Invio ]

200 Type set to I.

ftp> prompt[ Invio ]

Interactive mode off.

ftp> cd pub/incoming[ Invio ]

250 CWD command successful.

ftp> pwd[ Invio ]

Si verifica la posizione in cui ci si trova.

257 "/pub/incoming" is current directory.

ftp> mput al-1*[ Invio ]

Dal momento che la directory è giusta, si inizia la trasmissione di tutti i file che nella direc-tory locale corrente iniziano per ‘al-1’.

local: al-1 remote: al-1

200 PORT command successful.

150 Opening BINARY mode data connection for al-1.

226 Transfer complete.

2611649 bytes sent in 1.38 secs (1.9e+03 Kbytes/sec)

local: al-15 remote: al-15

200 PORT command successful.

150 Opening BINARY mode data connection for al-15.

226 Transfer complete.

2612414 bytes sent in 2.51 secs (1e+03 Kbytes/sec)

local: al-16 remote: al-16

200 PORT command successful.

150 Opening BINARY mode data connection for al-16.

226 Transfer complete.

2612414 bytes sent in 2.16 secs (1.2e+03 Kbytes/sec)

local: al-17 remote: al-17

200 PORT command successful.

150 Opening BINARY mode data connection for al-17.

226 Transfer complete.

2612420 bytes sent in 2.17 secs (1.2e+03 Kbytes/sec)

local: al-18 remote: al-18

Page 172:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1230 FTP

200 PORT command successful.

150 Opening BINARY mode data connection for al-18.

226 Transfer complete.

2612409 bytes sent in 2.4 secs (1.1e+03 Kbytes/sec)

local: al-19 remote: al-19

200 PORT command successful.

150 Opening BINARY mode data connection for al-19.

226 Transfer complete.

2612431 bytes sent in 2.35 secs (1.1e+03 Kbytes/sec)

ftp> ls[ Invio ]

Si controlla il risultato nell’elaboratore remoto. A volte, i servizi FTP impediscono la letturadel contenuto di questa directory.

200 PORT command successful.

150 Opening ASCII mode data connection for /bin/ls.

total 15379

drwxrwsrwx 2 root ftp 1024 Dec 11 20:40 .

dr-xr-sr-x 3 root ftp 1024 Nov 12 21:04 ..

-rw-rw-r-- 1 ftp ftp 2611649 Dec 11 20:40 al-1

-rw-rw-r-- 1 ftp ftp 2612414 Dec 11 20:40 al-15

-rw-rw-r-- 1 ftp ftp 2612414 Dec 11 20:40 al-16

-rw-rw-r-- 1 ftp ftp 2612420 Dec 11 20:40 al-17

-rw-rw-r-- 1 ftp ftp 2612409 Dec 11 20:40 al-18

-rw-rw-r-- 1 ftp ftp 2612431 Dec 11 20:40 al-19

226 Transfer complete.

ftp> quit[ Invio ]

221 Goodbye.

110.4 InformazioniAlcuni programmi che fanno parte di WU-FTP possono informare sullo stato dell’utilizzo delservizio FTP. Vale la pena di conoscere il ‘ftpcount’ e ‘ftpwho’; entrambi si utilizzano senzaargomenti.

‘ftpcount’ visualizza la quantità di utenti connessi in modo ‘ftp’ per ogni classe e anche ilmassimo numero di connessioni ammissibili.

# ftpcount[ Invio ]

Service class all - 1 users ( -1 maximum)

L’esempio mostra la risposta di ‘ftpcount’ quando un solo utente accede al proprio sistema. Ilvalore -1 rappresenta in realtà l’intero di dimensione massima che può essere gestito.

‘ftpwho’ visualizza le informazioni disponibili inerenti gli utenti connessi in modo ‘ftp’.

# ftpwho[ Invio ]

Service class all:

592 ? S 0:00 ftpd: dinkel.brot.dg: anonymous/daniele@: IDLE

- 1 users ( -1 maximum)

L’esempio mostra la risposta di ‘ftpwho’ quando un solo utente accede al proprio sistema. Ilvalore -1 rappresenta in realtà l’intero di dimensione massima che può essere gestito.

Page 173:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

FTP 1231

110.5 Altri tipi di programmi clienteIl protocollo FTP è molto importante per il trasferimento dei file, di conseguenza, oltre al pro-gramma cliente tradizionale (‘ftp’), ne esistono diversi altri che possono compiere funzioni ana-loghe. Due di questi meritano particolare attenzione.

• ‘ncftp’

Si tratta di un programma per l’FTP che può funzionare sia come motore per un sistema discript che in modo autonomo. Si comporta in modo molto simile a una shell, consentendoanche l’uso della ridirezione.

Vedere ncftp(1).

• ‘mc’

Si tratta di Midnight Commander, una sorta di attrezzo multiuso apparentemente molto si-mile al noto programma Norton Commander del sistema operativo Dos. Tra le sue variefunzioni, permette anche di effettuare un collegamento FTP gestendolo come se si trattassedi un file system. Il vantaggio di usare questo programma sta nella facilità con cui è possibiletrasferire un intero ramo di directory.

Midnight Commander viene descritto nel capitolo 76.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 174:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 111Trivial FTPA fianco del sistema FTP normale, può trovarsi anche un vecchio tipo di FTP: TFTP. La differenzafondamentale sta nel fatto che questo tipo di servizio non richiede alcuna identificazione; in pra-tica, è quasi come se si condividesse il file system attraverso il protocollo NFS. Questo servizioconsente l’utilizzo di sistemi senza disco (diskless), che attraverso questo protocollo ottengonociò che gli serve per avviare il sistema operativo. 1

È importante sapere che questo tipo di servizio esiste, anche se non si intende sfruttare lapossibilità di installare sistemi senza disco nella propria rete locale, soprattutto per saperecontrollare che sia disattivato.

111.1 Dal lato del serventePer poter offrire il servizio TFTP, occorre che nel servente sia disponibile il demone ‘tftpd’,avviato generalmente attraverso il supervisore Inet.

Data la debolezza di questo servizio che non richiede alcuna forma di identificazione da parte deiclienti, è necessario indicare una o più directory a partire dalle quali si consente di accedere. Sequesto non viene indicato, si fa riferimento a ‘/tftpboot/’ in modo predefinito.

111.1.1 # tftpdin.tftpd [directory...]È il demone del servizio necessario per ricevere connessioni attraverso ‘tftp’. È gestito dal su-pervisore Inet e filtrato dal TCP wrapper. Si tratta di un sistema di FTP senza particolari controllidi accesso, non ha praticamente alcun sistema di sicurezza. Per questo, di solito, all’interno delfile di configurazione del supervisore Inet, cioè ‘/etc/inetd.conf’, la riga di attivazione diquesto servizio è commentata.

Nell’esempio seguente, viene mostrata la riga di ‘/etc/inetd.conf’ commentata, in cui sidichiara il suo possibile utilizzo.

#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd

111.2 Dal lato del clienteDal lato del cliente non c’è bisogno di nulla in particolare, tranne il programma ‘tftp’. Quandosi effettua la connessione con un servente TFTP, non viene richiesta alcuna parola d’ordine enon viene eseguito alcun ‘chroot()’; tuttavia è consentito l’accesso alle sole directory dichiaratenella riga di comando del demone corrispondente, oppure della sola ‘/tftpboot/’.

111.2.1 $ tftptftp [host]Si tratta di un programma di FTP semplificato, dove in particolare non è possibile effettuareun’accesso con autenticazione. Di conseguenza, questo programma non può essere usato se nonper connessioni in cui non è richiesta alcuna autenticazione. I pochi comandi a disposizione sonosimili al programma ‘ftp’ e si può ottenere l’elenco di questi con il comando ‘?’.

A titolo di esempio viene mostrata la sequenza di un’ipotetica connessione con il serventedinkel.brot.dg, allo scopo di prelevare una copia del file remoto ‘/tftpboot/192.168.1.10/etc/crontab’.

1netkit-tftp BSD

1232

Page 175:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Trivial FTP 1233

$ tftp[ Invio ]

tftp> connect dinkel.brot.dg[ Invio ]

tftp> get /tftpboot/192.168.1.10/etc/crontab /tmp/mio_crontab[ Invio ]

tftp> quit[ Invio ]

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 176:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 112Messaggi di posta elettronica eprotocollo SMTPL’invio di messaggi di posta elettronica (email) si basa su un MTA (Mail Transfer Agent) localeche, quando riceve una richiesta di invio di un messaggio, si occupa di mettersi in contatto con unsuo collega presso l’indirizzo di destinazione, o se necessario in una destinazione intermedia, chesi prenderà cura di consegnare il messaggio o di reinoltrarlo. Tutto quanto sembra molto semplicea dirsi, in realtà la configurazione di un MTA potrebbe essere molto complessa.

Spesso, in presenza di una rete locale, il funzionamento corretto dell’MTA richiede la predisposi-zione di un servizio di risoluzione dei nomi locale. A tale proposito conviene consultare i capitoli101 e 102.

L’invio di messaggi di posta elettronica avviene solitamente attraverso l’uso di un programmaadatto alla loro composizione, che poi si mette in comunicazione con l’MTA per l’inoltro delmessaggio. Più precisamente, un messaggio inviato a un utente dell’elaboratore locale non ri-chiede alcun MTA, mentre l’invio a un altro elaboratore richiede almeno la presenza di un MTApresso l’indirizzo di destinazione.

Storicamente, l’MTA più diffuso nei sistemi Unix è stato Sendmail; tuttavia, è sempre più comunel’uso di MTA alternativi, meno complicati, pur mantenendo un certo grado di compatibilità conquello tradizionale. Nella parte liv l’argomento viene ripreso e trattato con maggiore dettaglio.

112.1 Servizio di rete e servizio di consegna locale

La posta elettronica non è semplicemente un servizio di rete che si attua attraverso un protocollo(SMTP). Il servizio di rete, permette il trasferimento dei messaggi, ma l’MTA ha anche il compitodi recapitarli ai destinatari, in forma di file.

In questo senso, il meccanismo può sembrare un po’ confuso all’inizio, trattandosi effettivamentedi un sistema piuttosto complicato. In un sistema composto da un elaboratore isolato, anche seprovvisto di terminali più o meno decentrati, non c’è alcun bisogno di fare viaggiare messaggi at-traverso una rete, è sufficiente che questi vengano semplicemente messi a disposizione dell’utentedestinatario (in un file contenuto nella sua directory personale, o in una directory pubblica, incui il file in questione possa essere accessibile solo a quell’utente particolare). In tal caso, chi sioccupa di attuare questo sistema è un MDA, ovvero Mail Delivery Agent.

Quando invece si deve inviare un messaggio attraverso la rete, perché l’indirizzo del destinatariosi trova in un nodo differente, si utilizza il protocollo SMTP, per contattare presso la destinazioneun servente SMTP. Questo servente si prenderà carico di fare recapitare la posta elettronica (pre-sumibilmente presso il proprio sistema locale). Quindi, lo scopo del servente SMTP è quello direcapitare i messaggi.

La trasmissione del messaggio, che richiede la connessione con il servente remoto della desti-nazione, non fa capo ad alcun servizio di rete nell’ambito locale. Questa connessione potrebbeessere instaurata direttamente dal programma che si utilizza per scrivere il messaggio da trasmet-tere, oppure, come succede di solito, da un altro programma specifico, che in più si preoccupa diritentare l’invio del messaggio se per qualche motivo le cose non funzionano subito, rinviandoloeventualmente all’origine se non c’è modo di recapitarlo.

L’MTA ha generalmente questi tre ruoli fondamentali: l’attivazione del servizio SMTP, per laricezione di messaggi dall’esterno; la gestione della trasmissione di questi, assieme a una codaper ciò che non può essere trasmesso immediatamente; la consegna locale dei messaggi ricevuti

1234

Page 177:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1235

attraverso il protocollo SMTP oppure attraverso lo stesso sistema locale. Quindi, in generale, unMTA integra anche le funzioni di un MDA.

112.2 Uso della posta elettronicaLa posta elettronica, o email, è un modo di comunicare messaggi che richiede la conoscenza dialcune convenzioni. Ciò, sia per evitare malintesi, sia per eliminare le perdite di tempo.

Un messaggio di posta elettronica è formato fondamentalmente da una «busta» e dal suo conte-nuto. La busta è rappresentata da tutte le informazioni necessarie a recapitare il messaggio, mentreil contenuto è composto generalmente da un testo ASCII puro e semplice. Tutte le volte che il te-sto è composto in modo diverso, si aggiungono dei requisiti nei programmi da utilizzare per la sualettura; in pratica, si rischia di creare un problema in più al destinatario del messaggio.

In generale, un messaggio di posta elettronica può contenere uno o più allegati, conosciuti fre-quentemente come attachment. L’allegato permette di incorporare in un messaggio un file chepoi, attraverso strumenti opportuni, può essere estrapolato correttamente come era l’originale.Ciò che si deve evitare di fare in generale è l’invio del messaggio come un allegato. Questo,purtroppo, capita frequentemente quando si usano programmi per la composizione di messaggidi posta elettronica che permettono di introdurre elementi di formattazione del testo (Rich Text).Quando si usano programmi grafici di composizione per i messaggi di posta elettronica è benecontrollare la configurazione per eliminare questa formattazione, che spesso è predefinita.

Figura 112.1. L’insidia dei programmi MUA grafici che utilizzano la composizione dei messaggi informato HTML in modo predefinito.

Le varie estensioni al codice ASCII hanno portato alla definizione di un gran numero di codifichedifferenti. Spesso è sufficiente configurare il proprio programma di composizione dei messaggidi posta elettronica in modo da utilizzare la codifica ISO 8859-1, per poter scrivere correttamentecon le lingue di buona parte dei paesi europei (inglese inclusa). Tuttavia, anche la scelta di unacodifica come questa, che richiede l’utilizzo di 8 bit invece dei 7 bit tradizionali dell’ASCII, puòcostituire un problema per qualcuno. In questo senso, quando si scrive in italiano, è «cortese»utilizzare gli apostrofi alla fine delle vocali che avrebbero dovuto essere accentate.

112.2.1 Elementi di intestazioneUn messaggio di posta elettronica si compone inizialmente di una serie di indicazioni, tra cuile più importanti sono quelle che servono a recapitarlo al destinatario. L’uso corretto di questielementi di intestazione è importante, non solo perché il messaggio raggiunga il destinatario o idestinatari, ma anche per chiarire loro il contesto del messaggio e le persone coinvolte.

• ‘To:’

Il campo ‘To:’ viene utilizzato per definire i destinatari del messaggio. Quando si tratta dipiù di uno, convenzionalmente, i vari indirizzi vengono separati attraverso una virgola.

L’indirizzo del destinatario va indicato secondo le regole consentite dagli MTA interessati;generalmente è ammissibile una delle tre forme seguenti.

utente@host

nominativo_completo <utente@host>

"nominativo_completo" <utente@host>

Page 178:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1236 Messaggi di posta elettronica e protocollo SMTP

• ‘Cc:’

Il campo ‘Cc:’ viene utilizzato per definire i destinatari del messaggio in copia carbone.Nella corrispondenza normale, almeno in Italia, si utilizza la definizione «per conoscenza»,intendendo che questi destinatari non sono chiamati in causa direttamente.

In pratica, si utilizza il campo ‘Cc:’ per recapitare una copia del messaggio a deicorrispondenti dai quali non si attende una risposta, ma che è importante siano a conoscenzadi queste informazioni.

• ‘Bcc:’

Il campo ‘Bcc:’ viene utilizzato per definire i destinatari del messaggio a cui deve essereinviata una copia carbone nascosta (Blind Carbon Copy). La differenza rispetto alla copiacarbone normale sta nel fatto che i destinatari non vengono messi a conoscenza dellapresenza di queste copie aggiuntive.

• ‘From:’

Il campo ‘From:’ viene utilizzato per definire l’indirizzo del mittente. Non si trattanecessariamente del nome utilizzato dall’utente nel momento in cui compone il messaggio,ma di quello al quale ci si aspetta di ricevere una risposta.

• ‘Reply-To:’

Il campo ‘Reply-To:’ viene utilizzato per indicare un indirizzo a cui si invita a inviareun’eventuale risposta. Viene utilizzato in situazioni particolari, quando per questo non siintende usare il campo ‘From:’. Tipicamente viene aggiunto nei messaggi trasmessi daun sistema che gestisce le liste di posta elettronica (mailing-list) quando si vuole lasciarel’indicazione del mittente effettivo, guidando la risposta verso la stessa lista.

• ‘Subject:’

Il campo ‘Subject:’ serve a indicare l’oggetto del messaggio. Anche se nellacorrispondenza normale l’oggetto viene usato solo nelle comunicazioni formali, nella postaelettronica è opportuno aggiungere sempre questa indicazione.

Un oggetto chiaro permette al destinatario di capire immediatamente il conteso per il qualeviene contattato. Inoltre, quando da un messaggio si genera una catena di risposte (cioè unthread), è importante l’oggetto che era stato scelto inizialmente.

112.2.2 Risposta, prosecuzione e riservatezzaLa risposta a un messaggio viene inviata normalmente al mittente (‘From:’), a tutti i destinatarinormali (‘To:’) e a tutti quelli cui è stato inviato il messaggio per conoscenza (‘Cc:’). Questaoperazione viene fatta solitamente in modo automatico dal programma utilizzato per leggere ecomporre i messaggi: il Mail User Agent (MUA). È importante però fare attenzione sempre che ciòcorrisponda alla propria volontà, o che le circostanze siano appropriate. Infatti, se sono coinvoltediverse persone in una corrispondenza, è probabile che si giunga a un punto in cui non abbia piùsignificato continuare a «importunarle» quando la catena di risposte è degenerata in un contestodifferente.

I programmi MUA comuni aggiungono la sigla ‘Re:’ davanti all’oggetto, a meno che non inizi giàin questo modo, quando si risponde a un messaggio precedente. Il problema sta nel fatto che nonsempre viene rispettata questa convenzione, per cui se ne trovano altri che aggiungono qualcosadi diverso, come ‘R:’. Così, se la catena di risposte prosegue si rischia di arrivare ad avere unoggetto formato da una serie di ‘Re: R: Re: R:’.

Quando il messaggio a cui si risponde contiene l’indicazione del campo ‘Reply-To:’, si poneun problema in più: la scelta corretta del destinatario. Infatti, la risposta va inviata all’indirizzo‘Reply-To:’ solo se perfettamente conforme al contesto. Si è già accennato al fatto che questocampo viene aggiunto dai programmi di gestione delle liste di posta elettronica. In questa

Page 179:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1237

situazione è molto diverso inviare una risposta alla lista o soltanto al mittente originario delmessaggio.

Quando si vuole rinviare a un altro indirizzo (forward in inglese), si dice che questo viene fattoproseguire (così come avviene nella posta normale quando l’indirizzo di destinazione non è piùvalido per qualche motivo). Per farlo si incorpora il messaggio originale con alcune informazionisul mittente e sul destinatario originale, permettendo di aggiungere qualche commento aggiuntivo.

Quando si riceve un messaggio, così come accade nella corrispondenza normale, occorre un po’ diattenzione se si pensa di divulgarne il contenuto ad altri. Evidentemente dipende dalle circostanze;in caso di dubbio occorre almeno chiedere il consenso della persona che lo ha scritto.

112.3 SendmailCome accennato, Sendmail 1 è stato l’MTA più diffuso nei sistemi Unix, tanto che anche nelledistribuzioni GNU/Linux è stato utilizzato spesso in modo predefinito. Il pregio di Sendmail èla sua estrema configurabilità. Il suo difetto è lo stesso pregio: l’estrema configurabilità implicaun’estrema complessità.

A seconda delle opzioni con cui viene avviato l’eseguibile ‘sendmail’, si ottiene un demone inascolto della porta SMTP (25), oppure si ottiene la trasmissione di un messaggio fornito attraversolo standard input, oppure si hanno altre funzioni accessorie.

Solitamente, Sendmail viene distribuito già configurato in modo standard, sia per l’attivazione delservizio SMTP che per la gestione della trasmissione dei messaggi e della consegna locale; qui sivuole solo vedere quel poco che può valere la pena di modificare, anche per un principiante.Sendmail viene trattato con maggiore dettaglio nel capitolo 244; inoltre, nel capitolo 245 siintroduce anche l’uso di Exim, un MTA alternativo e abbastanza compatibile con le convenzionioperative di Sendmail.

112.3.1 # sendmailsendmail [opzioni]‘sendmail’ è l’eseguibile di Sendmail. Viene usato fondamentalmente in due modi: perl’attivazione del servizio SMTP e per la trasmissione e la consegna locale dei messaggi.

Per l’attivazione del servizio SMTP, viene avviato normalmente come demone indipendentedal supervisore Inet, aggiungendo così l’opzione ‘-bd’. Naturalmente, si tratta solitamente diun’operazione che viene fatta dalla stessa procedura di inizializzazione del sistema.

Per l’invio di un messaggio, è sufficiente avviare ‘sendmail’, fornendogli questo attraverso lostandard input, avendo cura di separare con una riga vuota l’intestazione dal testo (viene mostratonegli esempi).

Esempi

/usr/sbin/sendmail -bd

Quella che si vede potrebbe essere la riga di uno script che avvia ‘sendmail’ perché questofunzioni come demone in ascolto della porta SMTP.

———

$ cat | /usr/sbin/sendmail [email protected][ Invio ]

From: [email protected][ Invio ]

Subject: ciao ciao[ Invio ]

1Sendmail software non libero: non è consentita la commercializzazione a scopo di lucro

Page 180:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1238 Messaggi di posta elettronica e protocollo SMTP

[ Invio ]

Ciao Tizio.[ Invio ]

Quanto tempo che non ci si sente![ Invio ]

[ Ctrl+d ]

Quello appena mostrato è l’esempio che mostra in che modo si può usare ‘sendmail’,in qualità di MDA, per inviare un messaggio senza avere alcun programma accessorio.Evidentemente, ciò può essere particolarmente utile per realizzare uno script con qualcheinformazione definita in modo automatico.

Per questo tipo di utilizzo, è fondamentale la riga vuota (vuota e non solo bianca) prima deltesto del messaggio.

112.3.2 Configurazione: /etc/sendmail.cfLa configurazione di Sendmail è a dir poco «terribile» e si attua attraverso il file ‘/etc/sendmail.cf’. Chi non è esperto è bene che lasci stare il file di configurazione che si ritrova,oppure che ne scelga uno tra un gruppo già pronto e ben descritto per i suoi effetti.

È chiaro che in questa situazione ci si deve fidare della propria distribuzione GNU/Linux; diconseguenza occorre leggere la relativa documentazione che dovrebbe descrivere le scelte fattenella configurazione di questo servizio.

Per modificare la configurazione di Sendmail, si evita generalmente di intervenire direttamentenel file ‘/etc/sendmail.cf’, utilizzando piuttosto dei linguaggi macro in grado di costruirneuno con meno fatica (ciò è descritto nel capitolo 244).

112.3.3 AliasAttraverso il file ‘/etc/aliases’ è possibile configurare una serie di alias per facilitare l’inviodi messaggi di posta elettronica. Gli alias stabiliscono a chi, effettivamente, debbano essere reca-pitati i messaggi.

In generale, non è conveniente che l’utente ‘root’ possa ricevere dei messaggi, per questo, un aliaspotrebbe rimandare la sua posta elettronica verso il recapito corrispondente all’utente comuneriferito a quella stessa persona.

Inoltre, è importante che gli utenti di sistema (‘bin’, ‘daemon’, ecc.) non possano ricevere mes-saggi: prima di tutto non esistono tali persone, inoltre ciò potrebbe servire per sfruttare qualchecarenza nel sistema di sicurezza dell’elaboratore locale.

Infine, è molto importante che vengano definiti degli alias usati comunemente per identificare ilresponsabile del servizio SMTP presso il nodo locale.

L’esempio seguente mostra il file ‘/etc/aliases’ tipico, in cui si dichiarano gli alias delresponsabile del servizio (‘postmaster’), gli alias degli utenti di sistema, e infine, l’aliasdell’utente ‘root’.

#

# @(#)aliases 8.2 (Berkeley) 3/5/94

#

# Aliases in this file will NOT be expanded in the header from

# Mail, but WILL be visible over networks or from /bin/mail.

#

# >>>>>>>>>> The program "newaliases" must be run after

# >> NOTE >> this file is updated for any changes to

# >>>>>>>>>> show through to sendmail.

Page 181:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1239

#

# Basic system aliases -- these MUST be present.

MAILER-DAEMON: postmaster

postmaster: root

# General redirections for pseudo accounts.

bin: root

daemon: root

games: root

ingres: root

nobody: root

system: root

toor: root

uucp: root

# Well-known aliases.

manager: root

dumper: root

operator: root

# trap decode to catch security attacks

decode: root

# Person who should get root’s mail

#root: marc

Nell’esempio si vede anche un alias che può apparire strano: ‘MAILER-DAEMON’. Si tratta di unaconsuetudine e corrisponde sostanzialmente al responsabile del servizio di posta elettronica.

Questo file non può essere utilizzato da ‘sendmail’ così com’è, deve essere prima tradotto nelfile ‘/etc/aliases.db’ attraverso il comando ‘newaliases’.

‘newaliases’ è un collegamento a ‘sendmail’. Quando ‘sendmail’ viene avviato con questonome, senza bisogno di altri argomenti, genera un nuovo file ‘/etc/aliases.db’ a partire dalsorgente ‘/etc/aliases’.

Quindi, ogni volta che si modifica il file ‘/etc/alias’, occorre avviare ‘newaliases’.

112.3.4 Coda dei messaggiQuando ‘sendmail’ viene avviato per ottenere l’invio di un messaggio, questo utilizza la direc-tory ‘/var/spool/mqueue/’ per accodare ciò che non può essere trasmesso immediatamente.

Per sapere se un messaggio è stato inviato effettivamente, occorre controllare che questa direc-tory sia vuota. Per questo, si può utilizzare il comando ‘mailq’ che restituisce lo stato di questadirectory.

‘mailq’ è un collegamento a ‘sendmail’. Quando ‘sendmail’ viene avviato con questo nome,senza bisogno di altri argomenti, legge il contenuto di ‘/var/spool/mqueue/’ ed elenca inbreve i messaggi rimasti nella coda.

L’esempio seguente mostra i file di due messaggi che non sono stati recapitati per motivi diversi.

# ls -l /var/spool/mqueue[ Invio ]

total 4

-rw------- 1 root mail 16 Sep 12 21:01 dfVAA03244

Page 182:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1240 Messaggi di posta elettronica e protocollo SMTP

-rw------- 1 root mail 10 Sep 12 21:09 dfVAA03507

-rw------- 1 root mail 507 Sep 12 21:02 qfVAA03244

-rw------- 1 root mail 535 Sep 12 21:09 qfVAA03507

Con ‘mailq’ si ottiene invece una visione più chiara, ma soprattutto accessibile anche all’utentecomune.2

$ mailq[ Invio ]

Mail Queue (2 requests)

--Q-ID-- --Size-- -Priority- ---Q-Time--- -----------Sender/Recipient-----------

VAA03244 16 30065 Sep 12 21:01 root

(Deferred: No route to host)

[email protected]

VAA03507 10 30066 Sep 12 21:09 root

(Deferred: Connection refused by weizen.mehl.dg.)

[email protected]

L’uso di ‘mailq’ è molto importante per verificare che i messaggi siano stati inviati, specialmentequando si utilizza un collegamento su linea commutata: prima di interrompere la comunicazione,conviene verificare che non siano rimasti messaggi in coda.3

112.3.5 Rinvio: ˜/.forwardIl file ‘˜/.forward’ può essere preparato da un utente (nella propria directory personale) perinformare il sistema di consegna locale della posta elettronica (MDA) di fare proseguire (rinviare)i messaggi verso altri indirizzi. Il file si compone di una o più righe, ognuna contenente un in-dirizzo di posta elettronica alternativo; i messaggi giunti per l’utente in questione verranno fattiproseguire verso tutti gli utenti elencati in questo file.

[email protected]

L’esempio mostra semplicemente che tutti messaggi di posta elettronica ricevuti dall’utente acui appartiene la directory personale in cui si trova il file, devono essere rispediti all’[email protected].

È importante chiarire che non rimane copia dei messaggi per l’utente in questione. Si presumeche questo utente riceva la posta elettronica attraverso uno degli indirizzi elencati nel file ‘˜/.forward’.

112.4 Recapito della posta elettronica: la variabileMAILLa posta elettronica viene recapitata normalmente all’interno di un file di testo unico, apparte-nente all’utente destinatario. Generalmente, si distinguono due possibilità sulla collocazione ditale file: la directory ‘/var/mail/’ (o anche ‘/var/spool/mail’) e la directory personaledell’utente.

Sendmail in particolare, utilizza il primo modo, per cui ogni utente ha un suo file con lo stessonome.

I programmi utilizzati per leggere la posta elettronica devono sapere dove trovarla; in generale siutilizza la convenzione della variabile di ambiente ‘MAIL’, che serve a definire il percorso assolutodel file di destinazione dei messaggi.

Di solito, nel profilo di configurazione della shell appare un’istruzione simile a quella seguente,2In effetti, la directory ‘/var/spool/mqueue/’ e il suo contenuto non possono essere accessibili agli utenti co-

muni, altrimenti i messaggi in partenza potrebbero essere letti.3Naturalmente, questo discorso vale se si sta usando un servente SMTP locale per ottenere l’invio del messaggio.

Page 183:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1241

dove si definisce l’uso di un file, il cui nome corrisponde a quello dell’utente destinatario, nelladirectory ‘/var/mail/’ (si fa riferimento a una shell derivata da quella di Bourne).

MAIL="/var/mail/$USER"

export MAIL

112.5 Mail user agentPer scrivere, inviare e leggere i messaggi di posta elettronica si utilizza normalmente un pro-gramma apposito, detto MUA o Mail User Agent. Programmi di questo tipo se ne possono trovarein grande quantità. Quello storicamente più importante e comunque quasi sempre presente neisistemi Unix è Berkeley Mail, ovvero Mailx.

Per l’invio dei messaggi, questo tipo di programma può usare due vie possibili: l’MDA locale,solitamente ‘sendmail’, che potrebbe ricevere il messaggio dallo standard input e provvedere dasolo al recapito locale o all’invio attraverso il protocollo SMTP; l’accesso diretto a un serventeSMTP.

Mailx è quel tipo di programma che si avvale dell’MDA locale per spedire i messaggi, mentretutti i programmi più sofisticati si avvalgono direttamente del protocollo SMTP. La differenzatra i due approcci è importante: se non si vuole gestire la posta elettronica localmente, ma si hauna casella di posta remota (come quando si fa un contratto con un ISP), si può fare affidamentoesclusivamente su un servente SMTP remoto (offerto da quello stesso ISP). Volendo utilizzareMailx, o programmi simili, si è costretti a installare anche Sendmail (o un altro MUA compatibile).

La lettura della posta elettronica, di solito, è un’operazione che consiste semplicementenell’accesso al file definito come casella postale dell’utente. Per convenzione, è bene che la va-riabile di ambiente ‘MAIL’ contenga il percorso assoluto della casella di posta (il file) dell’utente.Ciò garantisce che Mailx sappia dove trovarlo, mentre gli altri programmi più evoluti potrebberoprevedere una configurazione dettagliata che ignori tale variabile.

112.6 MailxMailx 4 è il programma standard di gestione della posta elettronica, originariamente parte delloUnix di Berkeley. Si tratta di un programma piuttosto scomodo da gestire, ma rappresenta lostandard ed è quasi indispensabile la sua presenza.

L’eseguibile ‘mail’ prevede due file di configurazione, uno generale per tutto il sistema e unoparticolare per ogni utente. Si tratta rispettivamente di ‘/etc/mail.rc’ e ‘˜/.mailrc’.

Nella sua semplicità, ‘mail’ è comunque un programma ricco di opzioni e di comandi perl’utilizzo interattivo. Tuttavia, di solito, è apprezzato solo nelle situazioni di emergenza, per cui èraro che venga sfruttato al massimo delle sue possibilità.

Per l’invio della posta, Mailx utilizza l’eseguibile ‘sendmail’, passandogli le informazioni attra-verso la riga di comando e lo standard input. Questo particolare è importante se si considera lapossibilità di utilizzare un MTA differente da Sendmail. Per la lettura dei messaggi ricevuti, Mailxlegge il file specificato dalla variabile di ambiente ‘MAIL’; inoltre, generalmente salva i messaggiletti e non cancellati nel file ‘˜/mbox’ (nella directory personale dell’utente).

112.6.1 $ mailmail [opzioni] [destinatario...]‘mail’ è l’eseguibile di Mailx. Con la sua semplicità ha il vantaggio di poter utilizzare lo standardinput come fonte per un testo da inviare. Di conseguenza, è ottimo per l’utilizzo all’interno discript, anche se per questo si potrebbe richiamare direttamente l’eseguibile ‘sendmail’.

4Mailx BSD

Page 184:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1242 Messaggi di posta elettronica e protocollo SMTP

Alcune opzioni

-v

Visualizza un maggior numero di informazioni.

-i

Ignora i segnali di interruzione.

-I

Forza un funzionamento interattivo.

-n

Non legge il file ‘/etc/mail.rc’ quando viene avviato.

-N

Inibisce la visualizzazione delle intestazioni dei messaggi quando viene letta o modificata lacartella della posta.

-s oggetto

Permette di definire l’oggetto già nella riga di comando (se si intendono utilizzare spazi,l’oggetto deve essere racchiuso tra virgolette).

-c elenco_destinatari

Permette di definire un elenco di destinatari di una copia del documento (copia carbone).L’elenco degli indirizzi di destinazione è fatto utilizzando la virgola come simbolo di sepa-razione.

-b elenco_destinatari

Permette di definire un elenco di destinatari di una copia carbone che non vengono men-zionati nell’intestazione del documento (blind carbon copy). L’elenco degli indirizzi didestinazione è fatto utilizzando la virgola come simbolo di separazione.

-f cartella_della_posta

Permette di leggere la posta contenuta all’interno di un file determinato.

112.6.2 Funzionamento‘mail’, se avviato allo scopo di leggere la posta, mostra un elenco dei messaggi presenti e attendeche gli vengano impartiti dei comandi in modo interattivo. Per questo mostra un invito (prompt),formato dal simbolo ‘&’.

Ognuno di questi comandi ha un nome, che spesso può essere abbreviato alla sola iniziale.L’elenco di questi comandi è molto lungo e può essere letto dalla documentazione interna, mail(1).Qui vengono elencati solo gli utilizzi più comuni, con i comandi relativi.

• Invio della posta

Per inviare della posta a una o più persone, è sufficiente avviare ‘mail’ utilizzandocome argomento gli indirizzi di destinazione delle persone da raggiungere. Per concluderel’inserimento del testo, generalmente è sufficiente inserire un punto (‘.’) all’inizio di unariga nuova, oppure è possibile inviare il codice di EOF: [ Ctrl+d ].

Durante l’inserimento del messaggio è possibile impartire dei comandi speciali, definitiattraverso delle sequenze di escape, rappresentate da una tilde (‘˜’) seguita dal comandovero e proprio. Attraverso queste sequenze di escape è possibile aggiungere indirizzi aidestinatari in copia carbone, o in copia carbone nascosta, è possibile importare un file,cambiare l’oggetto del messaggio... In particolare, è possibile anche passare alla scritturadel testo attraverso un programma visuale più comodo (come VI o altro, a seconda dellaconfigurazione).

Page 185:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1243

• Lettura della posta ricevuta

Per controllare la casella postale e per leggere la posta eventualmente ricevuta, è sufficienteavviare ‘mail’ senza argomenti. ‘mail’ visualizzerà un elenco numerato delle descrizionidell’oggetto di ogni lettera ricevuta. Una volta avviato ‘mail’, questo presenta il suo invitorappresentato da una e-commerciale (‘&’), dal quale è possibile dare dei comandi a ‘mail’.In particolare, è possibile inserire il numero del messaggio che si vuole leggere. Per leggereil successivo sarà sufficiente premere il tasto [ + ], mentre per rileggere quello precedente èsufficiente premere il tasto [ - ].

• Gestione della posta ricevuta

Dopo aver letto un messaggio, lo si può cancellare con il comando ‘delete’ (‘d’) o si puòrispondere con il comando ‘reply’ (‘r’). La cancellazione della posta non è irreversibile.Di solito si possono recuperare dei messaggi attraverso il comando ‘undelete’ (‘u’); però imessaggi cancellati risultano di fatto invisibili.

Si distinguono due tipi di risposta che fanno riferimento a due comandi simili: ‘replay’

(‘r’), che è appena stato descritto, e ‘Replay’ (‘R’). Nel primo caso la risposta viene inviataal mittente e a tutto l’elenco dei destinatari del messaggio di origine, mentre nel secondo larisposta va esclusivamente al mittente del messaggio di origine.

• Gruppi di messaggi

Alcuni comandi di ‘mail’ accettano l’indicazione di gruppi di messaggi. Per esempio,‘delete 1 5’ cancellerà i messaggi numero uno e numero cinque, ‘delete 1-5’

cancellarà i messaggi dal numero uno al numero cinque. L’asterisco (‘*’) viene utilizzatoper identificare tutti i messaggi, mentre il simbolo ‘$’ rappresenta l’ultimo messaggio. Uncaso tipico di utilizzo dell’asterisco come gruppo totale dei messaggi è il seguente: ‘top *’

che permette così di visualizzare le prime righe di tutti i messaggi ricevuti.

• Conclusione dell’elaborazione della posta

Per concludere la sessione di lavoro con ‘mail’ è sufficiente utilizzare il comando ‘quit’

(‘q’). La posta letta (e non segnata per la cancellazione) viene trasferita nel file ‘˜/mbox’,mentre quella non letta rimane nella casella postale (il file di origine).

112.6.3 Configurazione di MailxSi è già accennato al fatto che Mailx utilizzi due file di configurazione: ‘/etc/mail.rc’ pertutto il sistema e ‘˜/.mailrc’ per le particolarità di ogni utente. Le direttive di questo file sonogli stessi comandi che possono essere impartiti a ‘mail’ durante il suo funzionamento interattivo.

In generale, si utilizzano prevalentemente i comandi ‘set’ e ‘unset’, che permettono l’attivazioneo la disattivazione di alcune modalità di funzionamento, consentendo anche la definizione di al-cune opzioni che prevedono l’indicazione di un’informazione precisa.

Alcune modalitàset|unset append

L’attivazione di questa modalità fa sì che i messaggi salvati nel file ‘˜/mbox’ siano aggiuntiin coda, invece che inseriti all’inizio.

set|unset ask

set|unset asksub

L’attivazione di questa modalità fa sì che ‘mail’ richieda l’indicazione dell’oggetto primadi consentire l’inserimento del testo del messaggio.

set|unset askcc

L’attivazione di questa modalità fa sì che ‘mail’ richieda l’indicazione di destinatari aggiun-tivi in copia carbone alla fine dell’inserimento del messaggio.

Page 186:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1244 Messaggi di posta elettronica e protocollo SMTP

set|unset askbcc

L’attivazione di questa modalità fa sì che ‘mail’ richieda l’indicazione di destinatari aggiun-tivi in copia carbone nascosta (‘bcc’) alla fine dell’inserimento del messaggio.

set|unset dot

L’attivazione di questa modalità fa sì che ‘mail’ consenta l’uso di un punto isolato perterminare l’inserimento di un messaggio.

set|unset hold

L’attivazione di questa modalità fa sì che ‘mail’ conservi i messaggi letti nella casella po-stale, se questi non vengono cancellati esplicitamente.

set|unset ignoreeof

L’attivazione di questa modalità fa sì che ‘mail’ non permetta l’uso del codice di EOF([ Ctrl+d ]) per terminare l’inserimento di un messaggio.

Alcune opzioni

set EDITOR=programma

Permette di definire il percorso assoluto del programma che si vuole utilizzare per la modi-fica del testo di un messaggio, quando viene richiesto espressamente durante il suo inseri-mento, attraverso la sequenza di escape ‘˜e’.

set VISUAL=programma

Permette di definire il percorso assoluto del programma che si vuole utilizzare per la modi-fica del testo di un messaggio, quando viene richiesto espressamente durante il suo inseri-mento, attraverso la sequenza di escape ‘˜v’.

set PAGER=programma

Permette di definire il percorso assoluto del programma che si vuole utilizzare per scorrereil contenuto di un messaggio quando questo viene letto attraverso ‘mail’. Perché funzionicorrettamente, occorre definire anche l’opzione ‘crt’.

set crt=n-righe

Permette di definire il numero di righe di altezza dello schermo, in modo da poter gestirecorrettamente il programma di impaginazione visuale (‘more’ o ‘less’).

set MBOX=percorso

Permette di definire il percorso assoluto del file da utilizzare per salvare i messaggi, al postodi ‘˜/mbox’.

set record=percorso

Permette di definire il percorso assoluto di un file da utilizzare per salvare una copia deimessaggi che vengono inviati.

Esempi

set append dot save asksub

Quello che si vede sopra è il contenuto del file di configurazione generale tipico (il file ‘/etc/mail.rc’).

set MBOX=/home/tizio/mail/ricevuta

set record=/home/tizio/mail/spedita

L’esempio si riferisce a un file di configurazione personale, ovvero ‘˜/.mailrc’, dovel’utente vuole gestire la sua posta nella directory ‘˜/mail/’ (si tratta dell’utente ‘tizio’).

set MBOX=mail/ricevuta

set record=mail/spedita

Page 187:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1245

Questo esempio produce lo stesso risultato di quello precedente: i percorsi sono relativi alladirectory personale dell’utente.

112.7 PineSi tratta di un programma per la gestione della posta più potente e pratico rispetto al normaleMailx, che consente anche la lettura delle news. 5

In particolare, per l’invio dei messaggi, Pine utilizza il protocollo SMTP, cosa che permette diutilizzarlo anche senza avere installato Sendmail localmente, o un altro MTA simile. Infatti, spessosi utilizza la posta elettronica soltanto per Internet, disponendo di un solo elaboratore personale,senza alcuna necessità di gestire la posta elettronica locale. In questi casi, Sendmail e Mailx,potrebbero essere considerati dei componenti inutili (o quasi) del sistema.

Generalmente si avvia l’eseguibile ‘pine’ senza argomenti. La prima volta che ogni utente loutilizza, crea una directory ‘˜/mail’ contenente ‘˜/mail/saved-messages’ e ‘˜/mail/sent-mail’ entrambi vuoti; inoltre prepara un file di configurazione, ‘˜/.pinerc’. Dopo unaprima schermata di presentazione, Pine mostra il suo menù (figura 112.2).

? HELP - Get help using Pine

C COMPOSE MESSAGE - Compose and send a message

I FOLDER INDEX - View messages in current folder

L FOLDER LIST - Select a folder to view

A ADDRESS BOOK - Update address book

S SETUP - Configure or update Pine

Q QUIT - Exit the Pine program

Copyright 1989-1996. PINE is a trademark of the University of Washington.

? Help P PrevCmd R RelNotes

O OTHER CMDS L [ListFldrs] N NextCmd K KBLock

Figura 112.2. Menù principale di Pine.

Probabilmente, la cosa più utile da fare la prima volta che si utilizza questo programma, è quelladi configurarlo, utilizzando la lettera ‘S’ come sinonimo di Setup. Si ottiene un sottomenu:

Choose a setup task from the menu below :

? Help P [Printer] C Config S Signature

ˆC Cancel N Newpassword U Update

Premendo la lettera ‘C’ come sinonimo di Config si arriva alla maschera di configurazione. Lamaschera non può essere contenuta tutta in una sola schermata, di conseguenza, si utilizzano la[ barra spaziatrice ] per scorrerla in avanti e il segno [ - ] per scorrerla all’indietro. Quella seguente èla prima parte della configurazione predefinita (cioè quella iniziale) dell’utente ‘tizio’.

personal-name = <No Value Set: using "Tizio">

user-domain = <No Value Set>

5Pine software non libero: non è consentita la distribuzione di versioni modificate

Page 188:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1246 Messaggi di posta elettronica e protocollo SMTP

smtp-server = <No Value Set>

nntp-server = <No Value Set>

inbox-path = <No Value Set: using "inbox">

folder-collections = <No Value Set: using mail/[]>

news-collections = <No Value Set>

incoming-archive-folders = <No Value Set>

pruned-folders = <No Value Set>

default-fcc = <No Value Set: using "sent-mail">

default-saved-msg-folder = <No Value Set>

postponed-folder = <No Value Set: using "postponed-msgs">

read-message-folder = <No Value Set>

signature-file = <No Value Set: using ".signature">

global-address-book = <No Value Set>

address-book = <No Value Set: using .addressbook>

...

Vale la pena di definire almeno la prima parte. Per inserire un dato nuovo si usa la lettera ‘a’

come sinonimo di add, mentre per modificare un valore preesistente si uilizza la lettera ‘c’ comesinonimo di change. Per cancellare una voce si utilizza la lettera ‘d’ come sinonimo di delete.Alcune voci consentono l’inserimento di dati multipli utilizzando una successione di richieste diinserimento.

112.7.1 Elementi di configurazioneSegue un elenco parziale degli elementi che possono essere configurati, assieme a una brevedescrizione del loro significato.

• ‘personal-name’

Si riferisce al nome che si vuole fare apparire come mittente della posta inviata.

• ‘user-domain’

Si tratta del dominio dell’utente, ovvero l’indirizzo dell’elaboratore presso il quale si vuolericevere la posta.

• ‘smtp-server’

Si tratta dell’indirizzo dell’elaboratore attraverso il quale si invia la posta: potrebbe trattarsidel nome completo del proprio elaboratore, nel caso si voglia gestire un servente SMTPlocale, di un altro all’interno della propria rete locale, o di quello offerto dal fornitore diaccesso a Internet.

• ‘nntp-server’

È l’indirizzo dell’elaboratore utilizzato per il servizio NNTP (Network News TransferProtocol), quello che quindi permette di accedere a Usenet. Possono essere indicati diversiserventi NNTP.

• ‘inbox-path’

Indica il percorso assoluto del file usato come cartella della posta in ingresso. In un sistemanormale potrebbe trattarsi di ‘/var/mail/utente’, oppure di qualunque altro file se ilproprio sistema è configurato diversamente per la gestione della posta.

• ‘folder-collections’

Letteralmente è la raccolta delle cartelle. Si riferisce alle directory contenenti file di posta.Pine crea la directory ‘˜/mail’, ma ne possono essere usate diverse contemporaneamente.Ogni directory indicata è seguita da due parentesi quadre: una aperta e una chiusa.

Page 189:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1247

• ‘news-collections’

Permette di definire le collezioni di news a cui si è interessati.

• ‘incoming-archive-folders’

Permette di definire una serie di coppie di cartelle di posta (le coppie sono separateda uno spazio) per il salvataggio automatico della posta letta. Quando si legge la po-sta contenuta nelle cartelle di ingresso (la prima cartella di ogni coppia), automatica-mente, questa viene segnata come letta e trasferita nelle cartelle di archiviazione (la se-conda cartella di ogni coppia). Questa funzionalità viene attivata attraverso l’opzione‘auto-move-read-messages’.

• ‘pruned-folders’

Permette di definire l’elenco di cartelle che possono essere potate mensilmente come giàdefinito automaticamente per la cartella della posta inviata. Con questo termine, potatura, siintende l’archiviazione delle cartelle in questione ogni mese, utilizzando un nome precedutodal nome del mese. Contemporaneamente si intende la cancellazione di eventuali archividella stessa serie di mesi precedenti.

• ‘default-fcc’

Definisce il file destinatario di una copia carbone dei messaggi inviati (File Carbon Copy).Il valore predefinito corrisponde in pratica a ‘˜/mail/sent-mail’.

• ‘default-saved-msg-folder’

Definisce il file predefinito per il salvataggio dei messaggi.

• ‘postponed-folder’

Definisce il file utilizzato per contenere i messaggi sospesi che verranno inviati in seguito.Il valore predefinito corrisponde in pratica a ‘˜/mail/postponed-msgs’.

• ‘read-message-folder’

Permette di definire una cartella (cioè un file) da utilizzare per scaricare automaticamente lìla posta letta.

• ‘signature-file’

Definisce il nome del file da utilizzare come firma, ovvero come parte terminale standarddei propri messaggi.

• ‘address-book’

Definisce il nome del file usato come rubrica personale di indirizzi. Il valore predefinitocorrisponde a ‘˜/.address-book’.

• ‘feature-list’

Permette di configurare una serie di opzioni di Pine. Per selezionare o deselezionare una diqueste opzioni, si utilizza la lettera ‘X’.

• ‘initial-keystroke-list’

Consente di indicare una sequenza di tasti (una macro) da premere automaticamente ognivolta che si avvia Pine.

• ‘default-composer-hdrs’

Permette di definire la parte di intestazione dei messaggi che si intendono utilizzare. Se vieneutilizzata questa indicazione, occorre definire tutte le parti dell’intestazione dei messaggi.

• ‘customized-hdrs’

Definisce la parte di intestazione aggiuntiva da utilizzare nei messaggi quando si specificaespressamente di voler utilizzare la cosiddetta intestazione ricca.

Page 190:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1248 Messaggi di posta elettronica e protocollo SMTP

In certi casi è importante poter definire un elemento particolare nell’intestazione, peresempio quando si ha la necessità di comandare un programma di gestione di una listadi posta elettronica. Nel caso particolare di SmartList, l’amministratore di una lista ha lanecessità di aggiungere l’intestazione ‘X-Command’.

• ‘sort-key’

Permette di definire l’ordine in cui devono apparire i messaggi all’interno delle varie cartelle.

• ‘addrbook-sort-rule’

Permette di definire l’ordine in cui devono apparire gli indirizzi della rubrica.

• ‘character-set’

Permette di definire la codifica utilizzata per la composizione del testo. Il valore predefinitoè ‘US-ASCII’, altri valori potrebbero essere ‘ISO-8859-n’, dove n rappresenta un numerocompreso tra uno e nove.6

• ‘editor’

Permette di specificare il nome di un programma per la scrittura di testi alternativo a quellofornito da Pine, che poi può essere utilizzato attraverso la combinazione [ Ctrl+_ ] (ovvero[ Ctrl+- ] nel caso della tastiera italiana).

Per attivare questa funzione, oltre a indicare qui il nome del programma alternativo, oc-corre impostare anche l’opzione ‘enable-alternate-editor-cmd’. eventualmente, sipuò imporre l’uso sistematico di questo programma esterno, attivando anche l’opzione‘enable-alternate-editor-implicitly’.

• ‘speller’

Permette di indicare il programma da utilizzare per il controllo ortografico. Quando il con-trollo ortografico viene richiesto durante la fase di composizione di un messaggio attraversola sequenza [ Ctrl+t ], Pine invia al programma indicato un file temporaneo contenente il testoda controllare.

• ‘composer-wrap-column’

Permette di definire la larghezza massima del testo in fase di composizione dei messaggi.

• ‘reply-indent-string’

Permette di definire la stringa (ovvero il simbolo) da usare per evidenziare il testo prove-niente dal messaggio al quale si sta rispondendo. Se si vuole che questa stringa contenga ilnome della persona che l’ha scritto, si può utilizzare la variabile ‘_FROM_’ che verrà sosti-tuita con questo nome. Per esempio si potrebbe utilizzare la stringa seguente:

‘"_FROM_ >"’

• ‘empty-header-message’

Quando si invia posta utilizzando indirizzi solo su ‘Bcc’ (Blind Carbon Copy) e lasciandoquindi vuoti i campi ‘To’, ‘Cc’ e ‘Newsgroup’, Pine mette un indirizzo speciale nel campo‘To’. Ciò viene fatto per evitare problemi con alcuni programmi per il trasferimento dellaposta che autonomamente tendono a riempire questo campo con il destinatario apparentedel messaggio, vanificando il senso della posta inviata utilizzando il Blind Carbon Copy. Ilvalore predefinito di questo destinatario inesistente è ‘Undisclosed recipients’

• ‘image-viewer’

Permette di definire il programma da utilizzare per visualizzare le immagini allegate ai mes-saggi (allegati MIME).

6Per l’Italia e gran parte del mondo occidentale, si utilizza normalmente la codifica ISO 8859-1.

Page 191:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1249

• ‘use-only-domain-name’

Questa opzione viene utilizzata solo se non viene definita la voce ‘user-domain’ corri-spondente al nome dell’elaboratore presso il quale si vuole ricevere la posta.

Alla fine, la parte iniziale della maschera di configurazione potrebbe apparire come la seguente:

personal-name = Tizio Tizi

user-domain = weizen.mehl.dg

smtp-server = weizen.mehl.dg

nntp-server = news.notiziario.dg

inbox-path = /var/mail/tizio

folder-collections = ˜/Mail/[]

news-collections = <No Value Set>

incoming-archive-folders = <No Value Set>

pruned-folders = <No Value Set>

default-fcc = sent-mail

default-saved-msg-folder = saved-mail

postponed-folder = postponed-msgs

read-message-folder = <No Value Set>

signature-file = ˜/.signature"

global-address-book = <No Value Set>

address-book = ˜/.addressbook

112.8 BalsaBalsa 7 è un programma grafico per la gestione della posta elettronica, che consente l’accessodiretto al servente SMTP per l’invio dei messaggi e ai serventi POP3 per il prelievo dei messaggiricevuti presso caselle postali remote.

La prima volta che si avvia Balsa, attraverso l’eseguibile ‘balsa’, viene proposta unaconfigurazione iniziale e generalmente vengono creati dei file nella directory ‘˜/mail/’. Inoltre,viene cercato il file locale dei messaggi ricevuti nella directory ‘/var/spool/mail/’ (oppure‘/var/mail/’, a seconda dell’impostazione del proprio sistema). A parte il resto della confi-gurazione che dovrebbe essere abbastanza intuitivo, occorre tenere in considerazione che Balsaabbina il nome di una cartella di posta a un file, che non ha necessariamente lo stesso nome.

Balsa genera e aggiorna da solo il proprio file di configurazione, che ovviamente varia per ogniutente che lo utilizza, essendo ‘˜/.balsarc’. Alle volte può essere conveniente controllare emodificare direttamente il contenuto di questo file, senza passare per la procedura grafica, perchéquesta può far perdere di vista ciò che in realtà si sta cercando di modificare.�

Accounts =�

Inbox =�Type = local;Name = Inbox;Path = "/var/spool/mail/tizio";

�;

Outbox =�Type = local;Name = Outbox;Path = "/home/tizio/mail/outbox";

�;

Sentbox =�Type = local;Name = Sentbox;Path = "/home/tizio/mail/sentbox";

�;

Draftbox =�Type = local;Name = Draftbox;Path = "/home/tizio/mail/draftbox";

�;

Trash =�Type = local;Name = Trash;Path = "/home/tizio/mail/trash";

�;

�;

Globals =�

RealName = "tizio tizi";

Email = "[email protected]";

ReplyTo = "[email protected]";

LocalMailDir = "/home/tizio/mail";

SMTPServer = dinkel.brot.dg;

7Balsa GNU GPL

Page 192:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1250 Messaggi di posta elettronica e protocollo SMTP

SignaturePath = "/home/tizio/.signature";

SigSending = 0;

SigForward = 0;

SigReply = 0;

ToolbarStyle = 2;

PWindowOption = 0;

Debug = 0;

UsePreviewPane = 1;

MainWindowWidth = 674;

MainWindowHeight = 480;

MailboxListWidth = 179;

NotebookHeight = 200;

EncodingStyle = 1;

CheckMailAuto = 0;

CheckMailMinutes = 10;

WordWrap = 1;

WrapLength = 79;

LeadinStr = "> ";

MessageFont = "-*-fixed-medium-r-normal-*-*-*-*-*-c-*-iso8859-1";

Charset = "ISO-8859-1";

PrintCommand = "a2ps -d -q %s";

PrintLinesize = 78;

PrintBreakline = 0;�;

Purtroppo, è possibile commettere degli errori di configurazione, anche attraverso la guida gra-fica offerta dal programma stesso. In presenza di errori gravi, si compromette il funzionamentodi Balsa e l’unico modo per rimediare è intervenire a mano nel file di configurazione, osser-vando intuitivamente il significato delle direttive contenute.

Osservando l’esempio di file di configurazione mostrato, si intuisce l’importanza di cinque cartelledi posta:

• inbox è la cartella dei messaggi ricevuti;

• outbox è la cartella dei messaggi da spedire, che per qualche ragione non sono ancora statiinviati attraverso un servente SMTP (forse perché in quel momento era irraggiungibile, onon funzionante);

• sentbox è la cartella dei messaggi spediti, esclusi quelli che si trovano ancora nella cartellaoutbox;

• draftbox è la cartella dei messaggi il cui invio è stato ritardato volontariamente, perconsentire una continuazione in un momento successivo;

• trash è la cartella in cui vengono salvati inizialmente i messaggi cancellati (se vengonocancellati da questa cartella, sono perduti definitivamente);

Oltre alle cartelle standard, tutti i file contenuti nella directory definita dalla direttiva‘LocalMailDir’ (normalmente corrisponde a ‘˜/mail/’), che non sono abbinati ad alcuna car-tella particolare, diventano cartelle ulteriori, con lo stesso nome del file relativo.

Page 193:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi di posta elettronica e protocollo SMTP 1251

Figura 112.3. La finestra principale di Balsa, con le cartelle di posta normali.

112.9 Ricerche nei file delle caselle postaliI file delle caselle di posta elettronica tradizionali sono file di testo organizzati secondo una certastruttura. All’interno di questi file è possibile eseguire delle ricerche con Grep, ma il vero pro-blema è quello di identificare il messaggio che contiene la stringa o l’espressione cercata. Perquesto conviene usare invece Grepmail, 8 ovvero un programma Perl che restituisce il messaggiointero e non soltanto la riga che corrisponde al modello di ricerca.

Grepmail non si limita a questo, consentendo anche una ricerca selettiva nel corpo dei messaggi,nell’oggetto, escludendo eventualmente gli allegati. Il suo utilizzo più semplice è quello rappre-sentato dall’esempio seguente:

$ grepmail "Tizi[oa]" ˜/mail/sentbox | less

In questo caso si cercano tutti i messaggi contenuti nel file ‘˜/mail/sentbox’ che corrispon-dono in qualche modo con l’espressione regolare ‘Tizi[oa]’. Con l’ausilio di ‘less’, si scorronofacilmente sullo schermo.

Trattandosi di un programma scritto in Perl, le espressioni regolari che si possono utilizzaredevono avere le caratteristiche di questo linguaggio di programmazione.

grepmail [opzioni] [-e] espressione_regolare [file_casella_postale]...

Il modello sintattico mostra due particolarità: l’espressione regolare può essere indicata da solaoppure come argomento dell’opzione ‘-e’; i file delle caselle di posta elettronica possono essereforniti come argomenti finali della riga di comando, ma in loro mancanza, viene letto lo standardinput. La tabella 112.1 riepiloga le altre opzioni più importanti.

Vengono mostrati solo alcuni esempi.

$ grepmail -h -i "From: .*[email protected]" ˜/mail/* | less8Grepmail GNU GPL

Page 194:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1252 Messaggi di posta elettronica e protocollo SMTP

Opzione Descrizione-b Esegue la ricerca esclusivamente nel corpo dei messaggi.-h Esegue la ricerca esclusivamente nell’intestazione del messaggi.-i Non distingue tra lettere maiuscole e minuscole.-l Emette solo il nome del file contenente i messaggi corrispondenti.-M Ignora gli allegati MIME di tipo binario.-R Cerca ricorsivamente nelle sottodirectory.-v Cerca i messaggi che non corrispondono al modello.-d today|yesterday Seleziona solo i messaggi di oggi o di ieri.-d mm/gg/aaaa Seleziona solo i messaggi di una certa data.-d {n days ago|n weeks ago} Seleziona solo i messaggi di n giorni o settimane fa.

-d {before|after|since}data I messaggi più vecchi, più recenti, o a partire da una data di riferimento.-d between data and data Seleziona solo i messaggi compresi tra due date.-e espressione_regolare Dichiara espressamente il modello di ricerca.

Tabella 112.1. Opzioni più importanti di Grepmail.

Cerca tutti i messaggi nella directory ‘˜/mail/’ che sono stati inviati presumibilmente [email protected]. Il risultato viene fatto scorrere con l’aiuto di ‘less’.

$ grepmail -h -i "From: .*[email protected]" ˜/mail/* > pinco

$ grepmail -h -i -v "From: .*[email protected]" ˜/mail/* > altri

I due comandi servono a estrarre tutti i messaggi provenienti presumibilmente [email protected], per generare il file ‘pinco’, mettendo tutto il resto in un file de-nominato ‘altri’.

$ grepmail -h -d "since 7 days ago" -i (segue)

-e "From: .*[email protected]" ˜/mail/* | less

Cerca tutti i messaggi nella directory ‘˜/mail/’ che sono stati inviati presumibilmente [email protected] entro gli ultimi sette giorni. Il risultato viene fatto scorrere conl’aiuto di ‘less’.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 195:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 113Messaggi giunti presso recapiti re-motiI messaggi di posta elettronica non vengono sempre recapitati presso l’elaboratore che si utilizzaabitualmente. Questa è la situazione tipica in cui ci si trova quando si è collegati a Internet tramiteun ISP, per mezzo di una linea commutata. Di solito si ottiene un accesso (account) presso unelaboratore dell’ISP e questo diventa solitamente anche il recapito per la posta elettronica.

Il problema è comunque generale: si può avere la necessità di scaricare la posta ricevuta pressoun recapito remoto.

La prima idea che può venire in mente può essere quella di usare il protocollo TELNET e leggerecosì la posta remota. Ma questa non è la soluzione corretta. Per trasferire la posta da un recapitoa un altro, si usa il protocollo POP3 (a volte POP2) oppure IMAP. Come si può immaginare, sitratta di un servizio che deve essere gestito da un demone.

Il modo con cui vengono scaricati messaggi e inseriti nel sistema locale ha dei risvolti importanti.Infatti, questi messaggi possono essere scaricati in un file locale, che normalmente corrispondealla casella postale dell’utente, il quale può leggerla attraverso ‘mail’ o un altro programma chesfrutta lo stesso meccanismo. In alternativa, i messaggi potrebbero essere inseriti nel sistemalocale attraverso un servizio SMTP, che in tal caso però, dovrebbe essere attivato necessariamente.

113.1 Concetti generaliQuando la posta elettronica è giunta presso un recapito remoto, senza essere stata ridiretta da lìattraverso un alias o un forward per la sua prosecuzione, può essere prelevata per mezzo di variprotocolli, tra cui i più importanti sono POP2, POP3 e IMAP.

Il prelievo fatto in questo modo, può tradursi poi:

• nello scarico dei messaggi in un file locale che rappresenta la casella postale dell’utente percui si svolge l’operazione;

• nell’invio dei messaggi attraverso l’MDA locale;

• nell’invio dei messaggi attraverso un servente SMTP locale, o comunque uno più «vicino».

Ognuna delle scelte possibili ha dei vantaggi e degli svantaggi. Il primo tipo di operazione,non richiede la presenza di un servente SMTP locale e nemmeno di un MDA, cioè di un MailDelivery Agent, per la consegna locale del messaggio. Così si presta perfettamente all’uso pressonodi isolati che possono connettersi a Internet attraverso una linea commutata, che solo alloratrasmettono e ricevono la posta elettronica.

Il secondo tipo di operazione richiede la presenza di un MDA, composto generalmente da unprogramma in grado di ricevere i messaggi attraverso lo standard input, che poi sia in grado direcapitarli localmente ed eventualmente di farli proseguire altrove attraverso gli alias e i forwardeventuali. In pratica però, l’MDA a cui si fa riferimento è quasi sempre Sendmail, o un altrosistema compatibile. Il vantaggio di questa scelta è che per attuarla non occorre attivare il servizioSMTP, cioè non è necessario che Sendmail sia stato avviato come demone in ascolto della portaSMTP.

L’ultimo caso richiede invece che localmente sia presente un MTA completo, in grado di riceverele connessioni SMTP.

I motivi per cui non si riceve la posta direttamente nel nodo locale, possono essere vari: laconnessione con l’esterno potrebbe essere discontinua, come nel caso di un collegamento PPP

1253

Page 196:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1254 Messaggi giunti presso recapiti remoti

attraverso linea commutata; il sistema remoto presso cui giunge la posta per qualche motivo,potrebbe avere delle politiche che impediscono la prosecuzione dei messaggi (il forward); ilsistema locale potrebbe essere irraggiungibile dall’esterno a causa delle politiche di sicurezzaadottate, per cui, la posta elettronica potrebbe non essere trasferita localmente, lasciando l’onerea ogni nodo di prelevarsela da un servente principale.

Negli ultimi due tipi di trasferimento, il programma che lo fa interviene come se fosse un MTAvero e proprio. In tal senso, potrebbe essere attivato periodicamente attraverso il sistema Cron, aintervalli brevi, oppure come un demone.

113.1.1 AutenticazioneIl prelievo della posta remota è un’operazione personale dell’utente che ha l’accesso presso ilsistema remoto. Il programma che si usa per accedere a uno di questi servizi che lo permettono,deve identificarsi in qualche modo; di solito si tratta di fornire l’identità dell’utente remoto e laparola d’ordine.

Il fatto di lasciare viaggiare la parola d’ordine in chiaro, attraverso la rete, è un problema da nontrascurare: finché la connessione è diretta (o quasi, come nel caso di una linea commutata), ilproblema è minimo; quando la connessione attraversa più nodi, il problema diventa delicato.

Oltre a questo, occorre considerare che le informazioni delicate come le parole d’ordine nonpossono apparire in una riga di comando, perché sarebbero leggibili semplicemente analizzandol’elenco dei processi attivi. Per questo, quando si vuole automatizzare il processo di recuperodella posta remota senza dover ogni volta inserire la parola d’ordine, questa può essere annotatasoltanto in un file di configurazione, protetto opportunamente contro ogni accesso da parte di altriutenti.

113.2 IMAP toolkit: ipop3d, ipop2d, imapdIMAP toolkit è una raccolta di demoni per i servizi di trasferimento della posta locale versoi clienti che lo richiedono, mostrando le credenziali necessarie. Si tratta precisamente deiprogrammi ‘ipop3d’, ‘ipop2d’ e ‘imapd’. Permettono rispettivamente di utilizzare i protocolliPOP3, POP2 e IMAP. Sono gestiti dal supervisore Inet e filtrati dal TCP wrapper. 1

Nell’esempio seguente, vengono mostrate le righe di ‘/etc/inetd.conf’ in cui si dichiara illoro possibile utilizzo.

pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d

pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

imap stream tcp nowait root /usr/sbin/tcpd imapd

In alcune distribuzioni GNU/Linux questi tre demoni potrebbero fare parte di un pacchetto unico,mentre in altri casi i pacchetti potrebbero essere distinti in base al servizio particolare che vieneofferto.

113.3 PopclientPopclient 2 è un programma molto semplice che permette di scaricare la posta da un recapitoremoto utilizzando il protocollo POP2 o POP3, inserendola in un file che corrisponda alla casellapostale dell’utente nel nodo locale, oppure passandola a un MDA (Mail Delivery Agent). In questomodo, una volta scaricata, la posta può essere letta con un programma tradizionale come Mailx.

È importante sottolineare che per questo scopo, non è necessario che sia attivo un servente SMTPlocale. 3

1IMAP toolkit software libero con licenza speciale2Popclient GNU GPL3È questo punto che può rendere vantaggioso l’utilizzo di Popclient al posto di Fetchmail.

Page 197:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi giunti presso recapiti remoti 1255

113.3.1 $ popclientpopclient [opzioni] [host_remoto]‘popclient’ è l’eseguibile che compie tutto il lavoro di Popclient. Può essere predisposto ancheun file di configurazione, che permette l’automazione delle operazioni.

Nelle opzioni della riga di comando, si può osservare che non è stata indicata la possibilità diinserire la parola d’ordine. Infatti, non è possibile; per non dover inserire la parola d’ordine ognivolta che si scarica la posta, è necessario predisporre un file di configurazione.

Alcune opzioni-2

Viene utilizzato il protocollo POP2.

-3

Viene utilizzato il protocollo POP3.

-k | --keep

Copia i messaggi dal servente remoto senza cancellarli da lì.

-s | --silent

Non mostra i messaggi di progressione dell’operazione.

-v | --verbose

Visualizza attraverso lo standard error tutti i messaggi che intercorrono tra il programma eil servente remoto.

-u utente | --u utente

Permette di specificare il nome dell’utente così come è registrato nel sistema remoto. Ilvalore predefinito è il nome dell’utente così come è conosciuto nel sistema locale.

-r cartella_remota | --remote cartella_remota

Permette di specificare una cartella della posta nel servente remoto, diversa da quella prede-finita. Dipende dal servente remoto se questa cartella alternativa esiste. Questa opzione puòessere utilizzata solo con il protocollo POP2.

-o cartella_locale | --local cartella_locale

Permette di specificare una cartella della posta locale alternativa. Quando non viene specifi-cata una cartella per la posta ricevuta, si intende quella predefinita dal sistema locale.

-c | --stdout

Permette di emettere attraverso lo standard output la posta, invece di utilizzare la cartelladella posta.

Codici di uscita0 Uno o più messaggi sono stati caricati.

1 Non c’è posta.

2 Errore nell’apertura di un socket.

3 L’autentificazione dell’utente è fallita: il nome dell’utente o la parola d’ordine sono errati.

4 Errore generico nel protocollo di comunicazione.

5 Errore di sintassi nell’uso degli argomenti di ‘popclient’.

6 Errore generico nella registrazione della posta nella cartella locale.

7 Errore generico riportato dal servente remoto. Riguarda il protocollo POP3.

10 Errore indefinito.

Page 198:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1256 Messaggi giunti presso recapiti remoti

113.3.2 ConfigurazionePopclient può essere configurato in modo personale attraverso il file ‘˜/.poprc’. In tal modo,l’utente può predisporre tutti i dati necessari ad automatizzare la connessione senza la necessitàdi utilizzare script o comandi pieni di opzioni. In particolare, attraverso il file personalizzato diconfigurazione, si può predisporre anche la parola d’ordine necessaria a prelevare la posta.

L’esempio seguente riguarda il caso in cui si voglia prelevare la posta dal nodoweizen.mehl.dg, utilizzando il protocollo POP3, con un nominativo-utente «tizio» e la parolad’ordine «tazza», depositando i messaggi nel file ‘/home/tizio/mail/inbox’:

# .poprc

server weizen.mehl.dg \

proto pop3 \

user tizio \

pass tazza \

localfolder /home/tizio/mail/inbox

Si può leggere eventualmente la pagina di manuale popclient(1).

113.4 FetchmailFetchmail 4 è un sistema di recupero della posta remota molto complesso. Permette di inserire imessaggi ottenuti nel sistema di consegna locale attraverso un MDA come Sendmail; oppure puòutilizzare direttamente il protocollo SMTP per ottenere lo stesso risultato, o per inserire i messaggiin un sistema di trasporto più vicino (quale quello di una rete locale).

Può funzionare anche come demone personale (di un utente) in modo da provvedere regolarmenteallo scarico dei messaggi.

Fetchmail ha il vantaggio di poter utilizzare una grande varietà di protocolli fatti per questo scopo.In linea di massima ci si può concentrare sui soliti POP2, POP3 e IMAP, ma è bene tenere presenteche le possibilità sono maggiori, nel caso si presentasse l’occasione.

L’eseguibile ‘fetchmail’ può essere gestito molto bene attraverso la riga di comando, ma èconsigliabile anche la sua configurazione attraverso il file ‘˜/.fetchmailrc’, che permette diagevolare le operazioni di routine.

In queste sezioni vengono mostrati solo alcuni aspetti di Fetchmail, il cui utilizzo può essereapprofondito attraverso la consultazione della sua documentazione originale: fetchmail(1).

113.4.1 $ fetchmailfetchmail [opzioni] host_remoto

Permette di caricare la posta elettronica da un recapito remoto avendo a disposizione la scelta diun gran numero di protocolli per questo scopo. La posta caricata viene immessa automaticamentenel sistema locale di posta dell’utente che ha utilizzato il programma.

L’eseguibile ‘fetchmail’ dovrebbe poter funzionare anche soltanto per mezzo delle indicazionipassate attraverso la riga di comando, ma in generale conviene predisporre il file di configurazione‘˜/.fetchmailrc’.

Se si pone un conflitto tra quanto specificato tramite le opzioni della riga di comando e le direttivedel file di configurazione, le prime prendono il sopravvento.

Alcune opzioni4Fetchmail GNU GPL

Page 199:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi giunti presso recapiti remoti 1257

-a | --all

Scarica tutti i messaggi, compresi quelli che risulta siano già stati visti.

-k | --keep

Non cancella i messaggi che vengono scaricati.

-u utente_remoto | --username utente_remoto

Specifica precisamente il nome da utilizzare per accedere al servente remoto. Se non vieneindicata questa informazione (attraverso la riga di comando, oppure attraverso la configura-zione), si intende lo stesso nome utilizzato nel sistema locale.

-t n_secondi | --timeout n_secondi

Permette di stabilire un tempo massimo per la connessione, oltre il quale Fetchmail deveabbandonare il tentativo.

-d n_secondi | --daemon n_secondi

Avvia Fetchmail in modalità demone, cioè sullo sfondo, allo scopo di eseguire la scansionedei serventi in modo regolare. L’argomento esprime la durata dell’intervallo tra una scan-sione e l’altra, espresso in secondi.

Ogni utente può avviare una sola copia dell’eseguibile ‘fetchmail’ in modalità demone;tuttavia, se si tenta di avviare una nuova copia di ‘fetchmail’, quando è già attivo il de-mone, ciò fa sì che venga eseguita immediatamente una nuova scansione.

113.4.2 ˜/.fetchmailrcIl file di configurazione di Fetchmail è molto importante. È interessante notare che non esiste unfile di configurazione generale, ma solo quelli dei singoli utenti; infatti, il recupero della postaelettronica è un’operazione personale.

Per motivi di sicurezza, dal momento che può contenere informazioni delicate, è necessarioche il file di configurazione abbia esclusivamente i permessi di lettura e scrittura per l’utenteproprietario (06008). Se il file ha permessi maggiori, Fetchmail avverte e si rifiuta di proseguire.

Prima di analizzare la sintassi che può essere utilizzata al suo interno, si può notare che i commentivengono espressi nel modo consueto, attraverso il simbolo ‘#’ che li introduce, dove poi tuttoquello che segue, fino alla fine della riga, viene ignorato. Così anche le righe bianche e quellevuote vengono ignorate.

Ogni direttiva del file ‘˜/.fetchmailrc’ contiene tutte le specifiche riferite al recupero dellaposta elettronica da un servente determinato. Queste direttive possono impiegare più righe, senzala necessità di indicare simboli di continuazione, distinguendosi perché iniziano con la parolachiave ‘poll’, oppure ‘skip’.

Una direttiva ‘poll’ rappresenta un servente da interpellare, mentre una direttiva ‘skip’, uno dasaltare. Di fatto non serve una direttiva ‘skip’, ma può essere utile per evitare di cancellarla,riservando per il futuro la possibilità di riutilizzarla rimettendo la parola chiave ‘poll’.

Le direttive sono composte da una serie di parole chiave che rappresentano delle opzioni, a volteaccompagnate da un argomento. Alcune parole chiave sono speciali, in quanto, pur non avendoalcun significato, sono utili per facilitare la lettura delle direttive. Tali parole sono: ‘and’, ‘with’,‘has’, ‘wants’ e ‘options’. Nello stesso modo, possono essere usati la virgola, il punto e virgola,i due punti, che vengono ignorati ugualmente.

All’interno di ogni direttiva, deve essere rispettato un certo ordine nell’indicazione delle opzioni.Se ne distinguono due tipi: opzioni del servente e opzioni dell’utente. Le opzioni del serventedevono apparire prima di quelle dell’utente.

Page 200:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1258 Messaggi giunti presso recapiti remoti

Per comprendere il senso di queste direttive, è bene fare mente locale al formato generale sempli-ficato, che queste possono avere.

poll servente [protocol protocollo] [username utente_remoto] [password parola_d’ordine]Gli argomenti delle opzioni che rappresentano delle stringhe, possono essere racchiusi tra apicidoppi, in modo da poter contenere simboli particolari, come gli spazi (specialmente quando sitratta di indicare le parole d’ordine).

Alcune opzioni del servente

poll servente | skip servente

Specifica l’accesso a un servente. Se si usa la parola chiave ‘skip’, tutta la direttiva vieneignorata.

proto protocollo | protocol protocollo

Il tipo di protocollo da utilizzare, viene determinato normalmente in modo automatico. Conquesta opzione può essere specificato espressamente, indicando uno dei nomi seguenti.

• ‘POP2’

• ‘POP3’

• ‘IMAP’

• ‘IMAP-K4’

• ‘IMAP-GSS’

• ‘APOP’

• ‘KPOP’

Si noti che queste parole chiave possono essere espresse anche utilizzando solo lettere mi-nuscole.

port n_porta

Permette di specificare il numero della porta da utilizzare, nel caso il servente ne utilizzi unanon standard.

timeout n_secondi

Specifica il tempo massimo di inattività, dopo il quale si conclude la connessione, o il suotentativo.

interface interfaccia/numero_ip/maschera

Permette di specificare un’interfaccia di rete, assieme al gruppo di indirizzi che deve avere,prima di tentare la connessione con il servente remoto.

Alcune opzioni dell’utente

user utente_remoto | username utente_remoto

Specifica il nome da utilizzare per accedere al sistema remoto.

is utente_remoto here

Rappresenta il nome dell’utente locale che deve ricevere il messaggio. Di solito non si spe-cifica, essendo quello che effettua l’operazione di recupero.

pass parola_d’ordine | password parola_d’ordine

La parola d’ordine per accedere al sistema remoto.

fetchall

Richiede espressamente il recupero di tutti i messaggi, compresi quelli già prelevati, mamantenuti nel servente per qualche motivo.

Page 201:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi giunti presso recapiti remoti 1259

limit n_byte

Fissa la dimensione massima dei messaggi che possono essere prelevati. Quelli che ecce-dono tale limite vengono lasciati nel servente e risultano «non letti».

syslog

Utilizza il registro di sistema per annotare gli errori.

Esempi

Negli esempi viene mostrato l’uso di parole chiave che non sono state descritte. In ogni caso,il loro significato dovrebbe risultare intuitivo.

poll roggen.brot.dg protocol pop3 username tizio password "frase segreta"

Rappresenta la scansione del servente roggen.brot.dg con il protocollo POP3, utiliz-zando il nominativo-utente ‘tizio’ che richiede la parola d’ordine ‘frase segreta’ (cheappare opportunamente tra virgolette).

poll roggen.brot.dg protocol pop3 username tizio password "frase segreta"

poll schwarz.brot.dg username tizio1 password "ciao ciao"

Qui si prevede la scansione di due serventi, dove nel secondo caso non viene specificato ilprotocollo e anche il nominativo utilizzato risulta differente dal primo.

poll roggen.brot.dg

protocol pop3

username tizio

password "frase segreta"

poll schwarz.brot.dg

username tizio1

password "ciao ciao"

Come nell’esempio precedente, ma più strutturato e più facile da leggere.

poll roggen.brot.dg protocol pop3

username tizio password "frase segreta" is tizio here

username caio password "ciao caio" is caio2 here

username pippo password "marameo maramao" is pippo here

In questo caso, per uno stesso servente sono stati indicati diversi utenti remoti e locali.Per intendere il senso, si osservi che l’utente remoto ‘caio’ corrisponde all’utente locale‘caio2’.

Evidentemente, per ottenere un tale risultato, è necessario che l’utente che avviaFetchmail conosca tutte le parole d’ordine di questi utenti.

113.5 MUA completiTrattando l’argomento del trasferimento della posta remota, non bisogna dimenticare i programmiMUA (Mail User Agent) che si arrangiano a scaricarsela. Gli esempi più comuni sono Balsa eMozilla.

Utilizzando un MUA di questo tipo, se si dispone di un elaboratore connesso saltuariamente aInternet, non serve alcun sistema di gestione della posta elettronica locale e nemmeno alcun pro-gramma per scaricarla dal recapito presso il fornitore di accesso.

D’altro canto, se si vuole gestire la posta elettronica localmente, ma si intende usare un programmacome Balsa o Mozilla per leggerla e inviarla, si è costretti ad attivare il servente SMTP (mapotrebbe anche essere necessario il servizio POP3 per poterla prelevare dallo stesso elaboratorelocale).

Page 202:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1260 Messaggi giunti presso recapiti remoti

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 203:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 114Messaggi, allegati ed estensioniMIMEIl messaggio di posta elettronica tradizionale è composto utilizzando soltanto la codifica ASCII a7 bit e ha un aspetto simile all’esempio seguente:

Date: Tue, 17 Jul 2001 11:27:59 +0200

From: [email protected]

To: [email protected]

Subject: Messaggio tradizionale

Message-Id: <[email protected]>

Questo rappresenta un esempio di messaggio di posta elettronica

tradizionale, dove si utilizzano solo i primi 7 bit.

In pratica, per quanto riguarda la lingua italiana, non si possono

usare le lettere accentate.

Per garantire che un messaggio di posta elettronica viaggi in modo sicuro attraverso qualsiasiservente SMTP, è necessario che si rimanga nell’ambito dei soli 7 bit, oltre al fatto di avere unlimite alla lunghezza delle righe.

La necessità di scrivere in lingue differenti dall’inglese e di poter trasmettere informazioni diversedal solito testo puro e semplice, ha fatto nascere lo standard multimediale MIME (MultipurposeInternet Mail Extentions).

Con le estensioni multimediali MIME è possibile definire come deve essere interpretato il conte-nuto di un messaggio di posta elettronica, che così può essere codificato in modo particolare, pertrasportare anche informazioni diverse dal solo testo ASCII puro, rispettando i limiti tradizionalidei sistemi di trasporto dei messaggi.

Negli esempi che si mostrano in questo capitolo, viene omessa la riga di intestazione inizialedel tipoFrom [email protected] Tue Jul 17 12:28:15 2001 +0200

che è essenziale per completare il messaggio, ma che qui non serve per comprendere quantospiegato e rischia solo di creare confusione con il campo ‘From:’.

114.1 AllegatiL’invio di un file allegato a un messaggio di posta elettronica richiede un modo per inserire ecircoscrivere questo file, oltre alla sua trasformazione in modo tale che possa essere gestito comeun file di testo normale. In pratica, è come allegare un file a un file di testo, dal quale deve poteressere estrapolato correttamente in un momento successivo.

Dal momento che in un messaggio di posta elettronica alcuni caratteri, che in condizioni nor-mali appartengono già all’ASCII standard a 7 bit, hanno un significato speciale (senza contarel’importanza di alcune parole chiave, quando collocate a partire dalla prima colonna), sono daescludere anche questi nelle trasformazioni necessarie a creare gli allegati.

La figura 114.1 mostra in modo semplificato il problema che si tenta di descrivere: un file vieneprima trasformato, in base a un certo algoritmo, in una file di testo puro, che possa essere tra-smesso attraverso il sistema della posta elettronica; questa trasformazione genera necessariamenteun file più grande di quello di partenza; quindi, per diventare un allegato, occorre un modo per

1261

Page 204:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1262 Messaggi, allegati ed estensioni MIME

file binario File ASCII Allegato ASCII

.-----------. .-----------. .-----------.

| lkjsdhèe9 | | G;&MJ<V1H | | begin |

| 845ry#fgg |---------->| Z&4Y"C@T- |---------->| G;&MJ<V1H |

| fòéùìÌÀÒÈ | | 7)Y(V9G9P | | Z&4Y"C@T- |

| öüä$%&£K* | | IF\NGY[,S | | 7)Y(V9G9P |

‘-----------’ | ‘TL@*]OSD | | IF\NGY[,S |

| )"4FHTLJ‘ | | ‘TL@*]OSD |

‘-----------’ | )"4FHTLJ‘ |

| end |

‘-----------’

Figura 114.1. Procedimento necessario a produrre un allegato.

circoscriverlo, aggiungendo anche le informazioni necessarie a riprodurre il file originale (chenell’esempio della figura sono state omesse per semplicità).

114.2 UuencodeUuencode 1 è il sistema storico per la conversione di file di qualunque tipo in un allegato in formadi file ASCII, che si utilizza senza gestire le estensioni MIME. Si compone di due eseguibili:‘uuencode’ per la codifica e ‘uudecode’ per la decodifica.

‘uuencode’ si comporta in maniera differente a seconda che riceva il file da codificare dallostandard input, oppure che questo gli sia indicato come argomento della riga di comando:

uuencode [-m] file_da_codificare nome_da_usare

cat file_da_codificare | uuencode [-m] nome_da_usare

In entrambi i casi, il risultato della codifica viene emesso attraverso lo standard output, con ladifferenza che nel primo caso il file da codificare viene indicato come primo argomento, mentrenel secondo viene fornito attraverso lo standard input. L’ultimo argomento è sempre obbligatorioe rappresenta il nome che si vuole attribuire a questo file, ovvero il nome che verrà usato nelmomento dell’estrazione.

L’unica opzione disponibile, ‘-m’, consente di richiedere espressamente l’utilizzo della codificaBase64.

Disponendo del file già visto nella figura 114.1, ovvero il testo

lkjsdhèe9

845ry#fgg

fòéùìÌÀÒÈ

öüä$%&£K*

supponendo che si tratti del file ‘prova.xxx’, si potrebbe codificare con ‘uuencode’ nel modoseguente:

$ uuencode prova.xxx prova.xxx > allegato.txt

Si può osservare che il nome ‘prova.xxx’ appare due volte nella riga di comando: la prima voltaindica il file da leggere per la codifica; la seconda indica il nome da indicare nell’allegato, in modoche al momento della decodifica si riottenga lo stesso file. Il file ‘allegato.txt’ che si ottieneha l’aspetto seguente:

1GNU Sharutils GNU GPL

Page 205:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi, allegati ed estensioni MIME 1263

begin 664 prova.xxx

G;&MJ<V1HZ&4Y"C@T-7)Y(V9G9PIF\NGY[,S‘TL@*]OSD)"4FHTLJ

end

In alternativa, usando la codifica Base64,

$ uuencode -m prova.xxx prova.xxx > allegato.txt

si ottiene invece:

begin-base64 664 prova.xxx

bGtqc2Ro6GU5Cjg0NXJ5I2ZnZwpm8un57MzA0sgK9vzkJCUmo0sq

====

Evidentemente il principio è lo stesso, cambiando il modo di delimitare il file e di indicare le suecaratteristiche.

Naturalmente, si possono creare anche situazioni più complesse, come nel caso in cui il file diorigine sia prima compresso, poi codificato e quindi trasmesso attraverso la posta elettronica:

$ cat prova.xxx | gzip | uuencode prova.xxx.gz (segue)

| mail [email protected]

In questo caso, il messaggio che riceverà [email protected] sarà, più o meno, quelloseguente:

To: [email protected]

Message-Id: <[email protected]>

From: [email protected]

Date: Fri, 13 Jul 2001 16:26:48 +0200

begin 664 prova.xxx.gz

M’XL(‘"<%3SL“\O)SBI.R7B1:LEE86):5*F<EI[.E?;IY<\W9PY<.L’U[<\3

/%56UQ=Y:‘#NWZ88G““

end

‘uudecode’ funziona in modo simmetrico rispetto a ‘uuencode’. In questo caso, dal momento cheil nome del file da rigenerare fa già parte delle informazioni necessarie dell’allegato, è sufficientefornire a ‘uudecode’ il file di testo contenente l’allegato. Il file in questione può anche essere unmessaggio di posta elettronica, completo di intestazione, come nell’ultimo esempio mostrato perla codifica.

uudecode [-o file_da_generare] file_con_allegato...

cat file_con_allegato | uudecode [-o file_da_generare]In generale non si usa l’opzione ‘-o’, a meno che ci sia la necessità di generare un file con unnome differente da quanto previsto da chi ha predisposto l’allegato.

$ uudecode allegato.txt

L’esempio soprastante è elementare, ma rappresenta l’uso normale di ‘uudecode’. In questo caso,il file ‘allegato.txt’ è ciò che contiene l’allegato, dal quale viene estratto probabilmente unfile, il cui nome è già stato deciso in precedenza.

114.3 Involucro MIMEUn messaggio realizzato secondo le estensioni MIME contiene informazioni aggiuntive specifiche

Page 206:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1264 Messaggi, allegati ed estensioni MIME

nell’intestazione, come si vede nell’esempio seguente:

Date: Tue, 17 Jul 2001 12:28:23 +0200 (CEST)

From: [email protected]

To: [email protected]

Subject: Messaggio MIME semplice

Message-ID: <[email protected]>

MIME-Version: 1.0

Content-Type: TEXT/PLAIN; charset=iso-8859-1

Content-Transfer-Encoding: QUOTED-PRINTABLE

Questo =E8 un messaggio un po’ pi=F9 complesso, perch=E9

consente l’uso di un insieme di caratteri pi=F9 ampio.

In generale appare il campo ‘MIME-Version:’, che dichiara l’utilizzo delle estensioni, secondo laversione indicata, anticipando così la presenza di altri campi specifici. L’elenco seguente descrivequelli essenziali.

• Content-type: tipo/sottotipo[; opzione]...

Il campo ‘Content-type:’ serve a specificare il tipo e il sottotipo MIME del messaggio.Esiste un tipo MIME particolare, che serve a dichiarare la presenza di più componenti; sitratta di ‘multipart’ e verrà chiarito meglio nel seguito il suo significato.

Il campo ‘Content-type:’, oltre al tipo e al sottotipo MIME, consente l’indicazioneaggiuntiva di informazioni opzionali, precedute da un punto e virgola (‘;’), che chiari-scono ulteriormente le caratteristiche dell’informazione contenuta. Per esempio, quandosi tratta di ‘text/plain’, può essere specificato l’insieme di caratteri con l’opzione‘charset=insieme_di_caratteri’. In mancanza di indicazioni, l’insieme di caratteri corri-sponde a ‘us-ascii’, mentre nell’esempio si vede l’uso dell’insieme ‘iso-8859-1’, corri-spondente a ISO 8859-1. Segue la descrizione delle opzioni più frequenti.

– charset=insieme_di_caratteri

Definisce l’insieme di caratteri nel caso di si tratti di un testo. Il valore predefinito è‘us-ascii’, mentre ‘iso-8859-n’ rappresenta una codifica secondo lo standard ISO8859-n.

– name=file

Definisce il nome del file nel caso il contenuto venga salvato.

– boundary="stringa"

Definisce la stringa di delimitazione del confine delle componenti MIME multiple.

• Content-Transfer-Encoding: codifica_per_il_trasferimento

Il campo ‘Content-Transfer-Encoding:’ serve a specificare in che modo avviene latrasformazione delle informazioni stabilite nel campo ‘Content-type:’, per le esigenze le-gate al trasferimento del messaggio. In pratica si tratta di indicare una parola chiave che chia-risca come interpretare il contenuto del messaggio al momento della ricezione. L’esempiomostra l’uso del tipo ‘quoted-printable’ (non fa differenza l’uso delle maiuscole o delleminuscole).

– Content-Transfer-Encoding: 7bit

Si tratta della codifica predefinita, ovvero della situazione in cui non è necessario ap-portare alcuna trasformazione, perché si utilizzano solo i primi 7 bit e le righe di testonon sono troppo lunghe.

Page 207:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi, allegati ed estensioni MIME 1265

– Content-Transfer-Encoding: 8bit

In questo caso si tratta di un testo in cui vengono usati 8 bit, senza trasformazioni, conrighe non troppo lunghe. Tuttavia, si tratta di una codifica non conveniente, perché nontutti i serventi SMTP sono in grado di mantenere invariate queste informazioni.

– Content-Transfer-Encoding: binary

Le informazioni sono inserite così come sono, senza alcuna trasformazione. In generaleè impossibile trasmettere messaggi di questo tipo.

– Content-Transfer-Encoding: quoted-printable

I caratteri che richiedono l’uso di 8 bit, si rappresentano nella forma ‘=hh’, dove lacoppia hh rappresenta un numero esadecimale, corrispondente al codice del carattere.In pratica, la lettera «è» si rappresenta come ‘=E8’ (come si può vedere dall’esempio);inoltre, per evitare di avere righe troppo lunghe, queste vengono spezzate ponendo ilsimbolo ‘=’ alla fine della riga; infine, il carattere «=» viene rappresentato necessaria-mente come ‘=3D’.

– Content-Transfer-Encoding: base64

Si tratta di una trasformazione in cui ogni gruppo di 24 bit (3 byte) viene trasformato inquattro caratteri (4 byte), su righe non troppo lunghe. Il nome della codifica deriva dalfatto che per ogni byte si possono rappresentare solo 64 simboli, essendo necessarioescludere tutto ciò che può creare problemi alla trasmissione del messaggio. Pertanto:224 = 643.Questo tipo di codifica rende completamente illeggibile, a livello umano, il suo conte-nuto. In questo senso, si presta alla trasmissione di immagini o di altri tipi di file chenon sarebbero comunque leggibili in questo modo.

114.4 Messaggi contenenti più parti MIMEIl tipo MIME ‘multipart’ prevede la presenza di più componenti separate, con altrettante in-testazioni specifiche. In questo caso si indica comunemente il confine tra una componente el’altra attraverso una stringa particolare (di solito creata in modo da essere univoca), dichia-rata con l’opzione ‘boundary="stringa"’ nel campo ‘Content-Type:’, come si può osservarenell’esempio seguente:

Date: Thu, 5 Jul 2001 16:38:22 +0200 (CEST)

From: [email protected]

To: [email protected]

Subject: Foto

MIME-Version: 1.0

Content-Type: MULTIPART/MIXED; BOUNDARY="-1463811839-324931406-994342670=:16889"

Il testo che appare qui viene ignorato.

---1463811839-324931406-994342670=:16889

Content-Type: TEXT/PLAIN; CHARSET=iso-8859-1

Content-Transfer-Encoding: 7BIT

Ciao Tizio,

ti allego le foto che ti ho promesso.

Caio

---1463811839-324931406-994342670=:16889

Content-Type: IMAGE/JPEG; NAME="caio-1.jpg"

Page 208:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1266 Messaggi, allegati ed estensioni MIME

Content-Transfer-Encoding: BASE64

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEB

AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/

2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB

...

...

45/Q+9TZ+XPtn9KAFopFORk9/wDGokdmdgcYAPT2IH9aAJqKqTyurooIAJ5/

L/P5fWrAJC/THX3AP9aAKU2nwzyGRgCSMc+g/D3orC1HWby2umii8rYFUjcj

E5Oc87x/KildXt/XT/NGijKytLp3Z//Z

---1463811839-324931406-994342670=:16889

Content-Type: IMAGE/JPEG; NAME="caio-2.jpg"

Content-Transfer-Encoding: BASE64

/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL

DBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/

2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy

...

...

AgkiBwEifAQArSQpJAD/APah2keikDwgBeEj0iOUKXAFXKIZXKQ5PSJ54tdA

VIH7Innrwm9nlABJ8JpKcRQQDfKAGpD5TiEPhACHISI5TttBCigAcoHtO8IA

ikACvlJHj5SXAP/Z

---1463811839-324931406-994342670=:16889--

In questo caso, la stringa ‘-1463811839-324931406-994342670=:16889’ viene usata perdelimitare i vari componenti del messaggio. Si può osservare che quanto contenuto tra la finedell’intestazione del messaggio e il primo componente MIME viene ignorato dai programmi uti-lizzati per leggerlo. Questa zona può essere usata per annotare informazioni tecniche destinatealla lettura umana, nel caso di un accesso diretto al file.

Si noti che ogni componente MIME è preceduto dalla stringa di delimitazione, a cui si aggiungonoinizialmente due trattini (‘--’). Alla fine, dopo l’ultimo componente la stringa di delimitazione haaltri due trattini finali. Volendo schematizzare la cosa:

Date: data

From: mittente

To: destinatario

Subject: oggetto

MIME-Version: 1.0

Content-Type: multipart/mixed; boundary="delimitatore"

[commento]...

...

--delimitatore

Content-Type: tipo/sottotipo[; opzione]...

Content-Transfer-Encoding: codifica_per_il_trasferimento

contenuto_codificato

...

...

[--delimitatore

Content-Type: tipo/sottotipo[; opzione]...

Content-Transfer-Encoding: codifica_per_il_trasferimento

Page 209:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi, allegati ed estensioni MIME 1267

contenuto_codificato

...

...]...

--delimitatore--

Teoricamente, un elemento MIME potrebbe scomporsi in altri sottoelementi, dichiarando nuova-mente un tipo ‘multipart’, ma questo modo di intervenire è sconsigliabile.

Un caso particolare di messaggi ‘multipart’ è quello che consente di trasmettere il contenutoin forme alternative, come quando si affianca un messaggio in forma testuale a una copia piùappariscente in formato HTML. In tal caso si aggiunge il sottotipo ‘alternative’:

Content-Type: multipart/alternative; boundary="xxxx"

La composizione del messaggio è analoga a quanto già visto, con la differenza che il programmache consente la lettura del messaggio ricevuto, sceglierà in che modo visualizzare il contenuto.

114.5 Sistemazione manuale di un allegato MIMEI programmi usati generalmente per scrivere e inviare la posta elettronica sono in grado normal-mente di gestire gli allegati, sia per inviarli, sia per estrarli. Ogni programma aggiunge a modo suodei campi particolari per qualche scopo, anche se non si tratta di informazioni essenziali. Seguonodue esempi, uno realizzato con Pine e l’altro con Mozilla.

From: [email protected]

To: [email protected]

Subject: Prova di trasmissione

Message-ID: <[email protected]>

MIME-Version: 1.0

Content-Type: MULTIPART/MIXED; BOUNDARY="-1463811839-1689890199-995042379=:579"

Content-ID: <[email protected]>

---1463811839-1689890199-995042379=:579

Content-Type: TEXT/PLAIN; CHARSET=US-ASCII

Content-ID: <[email protected]>

Esempio di trasmissione con Pine.

---1463811839-1689890199-995042379=:579

Content-Type: TEXT/PLAIN; CHARSET=iso-8859-1; NAME="prova.xxx"

Content-Transfer-Encoding: BASE64

Content-ID: <[email protected]>

Content-Description:

Content-Disposition: ATTACHMENT; FILENAME="prova.xxx"

bGtqc2Ro6GU5DQo4NDVyeSNmZ2cNCmby6fnszMDSyA0K9vzkJCUmo0sq

---1463811839-1689890199-995042379=:579--

From: [email protected]

User-Agent: Mozilla/5.0 (X11; U; Linux 2.4.2 i586; en-US; m18) Gecko/20001103

MIME-Version: 1.0

To: [email protected]

Subject: Prova di trasmissione

Content-Type: multipart/mixed;

Page 210:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1268 Messaggi, allegati ed estensioni MIME

boundary="------------050408090202040304080207"

This is a multi-part message in MIME format.

--------------050408090202040304080207

Content-Type: text/plain; charset=us-ascii; format=flowed

Content-Transfer-Encoding: 7bit

Ecco un esempio di allegato con Mozilla.

--------------050408090202040304080207

Content-Type: application/octet-stream;

name="prova.xxx"

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

filename="prova.xxx"

bGtqc2Ro6GU5Cjg0NXJ5I2ZnZwpm8un57MzA0sgK9vzkJCUmo0sq

--------------050408090202040304080207--

Purtroppo, alcune volte può capitare di ricevere messaggi in cui gli allegati sono stati inseririin modo non standard, oppure utilizzando standard troppo recenti. In questi casi capita di nonriuscire a estrarre il contenuto in alcun modo, a meno di mettere mano direttamente al messaggio,per correggere gli errori.

Date: Fri, 13 Jun 2001 17:30:00 +0200

Subject: Esempio di allegato non corretto

From: [email protected]

To: [email protected]

Message-ID: <B761F178.202%[email protected]>

Mime-version: 1.0

Content-type: multipart/mixed;

boundary="MS_Mac_OE_3076649336_173889_MIME_Part"

--MS_Mac_OE_3076649336_173889_MIME_Part

Content-type: multipart/alternative;

boundary="MS_Mac_OE_3076649336_173889_MIME_Part"

--MS_Mac_OE_3076649336_173889_MIME_Part

Content-type: text/plain; charset="ISO-8859-1"

Content-transfer-encoding: quoted-printable

Ecco, ti allego il file che tanto aspettavi.

--MS_Mac_OE_3076649336_173889_MIME_Part

Content-type: text/html; charset="ISO-8859-1"

Content-transfer-encoding: quoted-printable

<HTML>

<HEAD>

<TITLE>Esempio di allegato non corretto</TITLE>

</HEAD>

<BODY>

<P ALIGN=3DCENTER>

Page 211:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi, allegati ed estensioni MIME 1269

Ecco, ti allego il file che tanto aspettavi.

</BODY>

</HTML>

--MS_Mac_OE_3076649336_173889_MIME_Part--

--MS_Mac_OE_3076649336_173889_MIME_Part

Content-type: multipart/appledouble;

boundary="MS_Mac_OE_3076649333_192109_MIME_Part"

--MS_Mac_OE_3076649333_192109_MIME_Part

Content-type: application/applefile; name="prova.jpg"

Content-transfer-encoding: base64

Content-disposition: attachment

AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAACAAAAADAAAAXgAAABIAAAAC

AAAAcAAAO2xKUEVHOEJJTQUA//8CAQAAAAAAAAAAAAAAAAAAAAAAAEZSQU5DT18yIHNtYWxs

LmpwZwAAAQAAADrqAAA56gAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

...

...

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA66gAAOeoAAACCU09SVAN2AIAAHACCAARJQ04j

AAAAKlBJQ1QAAAA2U1RSIAAAAEJpY2w4AAAATnBub3QAAABav7n//wAAOOYM1aTQVHD//wAA

ABoAAAAAv/T//wAAAAAM1afMv7n//wAANOIM1afcAAD//wAANNAM1aTY

--MS_Mac_OE_3076649333_192109_MIME_Part

Content-type: image/jpeg; name="prova.jpg";

x-mac-creator="3842494D";

x-mac-type="4A504547"

Content-disposition: attachment

Content-transfer-encoding: base64

/9j/4AAQSkZJRgABAgEBLAEsAAD/7Ro4UGhvdG9zaG9wIDMuMAA4QklNA+kKUHJpbnQgSW5m

bwAAAAB4ACgAAABIAEgAAAAAAxgCQf/3//cDQAJKIAIFewPgAAAAAAFoAWgAAAAAD3gLRQFs

ADILRUcYAFAAAQEBAAAAAScPAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZAAAAAAAAAAA

...

...

QI08T/rKM3l/9Q/kKl+d8gj10WjbW2szHqF/2lrR6pr9PfEGJ3+n7v5bdyk9rgdwcQ6AIjSe

SpO/nP7P/fgp92f69mo9fBGjnnHtyOoMy72AOxQ5mKxvg6Bde/8Al7Wtrr/cYrXpt+ltPMz8

uFK3+cPy/iif4H5JaXp9U+rr9H//2Q==

--MS_Mac_OE_3076649333_192109_MIME_Part--

--MS_Mac_OE_3076649336_173889_MIME_Part--

L’esempio che si vede sopra, è ovviamente abbreviato. L’intenzione di Caio era quella di inviareun’immagine a Tizio. Si tratta precisamente del file ‘prova.jpg’, ma per qualche motivo, nonsi riesce a estrarla.2

2L’esempio proviene da un caso accaduto realmente, senza che sia stato possibile chiarire il motivo della composizioneerrata. Viene proposto questo esempio perché reale, anche se incompleto, considerato il fatto che il mittente e il destinatariosono stati sostituiti, inoltre alcune informazioni sono state eliminate dal messaggio.

Page 212:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1270 Messaggi, allegati ed estensioni MIME

Il messaggio inizia con una breve descrizione, seguita dalla stessa cosa in HTML. Quindi ap-pare un primo allegato, che in realtà non serve, quindi l’ultimo allegato, che è la vera immaginecercata. Per rimediare, occorre salvare il messaggio in un file separato per poi metterci mano di-rettamente. Il messaggio trasformato per estrarre esclusivamente l’immagine cercata, può averel’aspetto seguente, tenendo conto che probabilmente è necessario lasciare la prima riga di intesta-zione contenente il campo ‘From ...’, che però qui è stata omessa:

Date: Fri, 13 Jun 2001 17:30:00 +0200

Subject: Esempio di allegato non corretto

From: [email protected]

To: [email protected]

Mime-version: 1.0

Content-type: image/jpeg; name="prova.jpg";

Content-transfer-encoding: base64

/9j/4AAQSkZJRgABAgEBLAEsAAD/7Ro4UGhvdG9zaG9wIDMuMAA4QklNA+kKUHJpbnQgSW5m

bwAAAAB4ACgAAABIAEgAAAAAAxgCQf/3//cDQAJKIAIFewPgAAAAAAFoAWgAAAAAD3gLRQFs

ADILRUcYAFAAAQEBAAAAAScPAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZAAAAAAAAAAA

...

...

QI08T/rKM3l/9Q/kKl+d8gj10WjbW2szHqF/2lrR6pr9PfEGJ3+n7v5bdyk9rgdwcQ6AIjSe

SpO/nP7P/fgp92f69mo9fBGjnnHtyOoMy72AOxQ5mKxvg6Bde/8Al7Wtrr/cYrXpt+ltPMz8

uFK3+cPy/iif4H5JaXp9U+rr9H//2Q==

Si può osservare che il messaggio non è più di tipo MIME multiplo, così non è necessario indicarei confini con la stringa dell’opzione ‘boundary’.

Volendo, dal momento che l’immagine è stata codificata con la codifica Base64, si può usareanche Uuencode senza preoccuparsi di rispettare le specifiche MIME. Il file si riduce all’estrattoseguente, dove il codice della figura è delimitato come si vede:

begin-base64 664 prova.jpg

/9j/4AAQSkZJRgABAgEBLAEsAAD/7Ro4UGhvdG9zaG9wIDMuMAA4QklNA+kKUHJpbnQgSW5m

bwAAAAB4ACgAAABIAEgAAAAAAxgCQf/3//cDQAJKIAIFewPgAAAAAAFoAWgAAAAAD3gLRQFs

ADILRUcYAFAAAQEBAAAAAScPAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZAAAAAAAAAAA

...

...

QI08T/rKM3l/9Q/kKl+d8gj10WjbW2szHqF/2lrR6pr9PfEGJ3+n7v5bdyk9rgdwcQ6AIjSe

SpO/nP7P/fgp92f69mo9fBGjnnHtyOoMy72AOxQ5mKxvg6Bde/8Al7Wtrr/cYrXpt+ltPMz8

uFK3+cPy/iif4H5JaXp9U+rr9H//2Q==

====

Per l’estrazione basta usare il programma ‘uudecode’, come è già stato descritto in precedenza.

114.6 MpackMpack 3 consente di generare allegati MIME, ovvero allegati con più informazioni e per questopiù facili da estrarre. Anche in questo caso si distinguono due eseguibili: ‘mpack’ per la codificae ‘munpack’ per la decodifica. Il primo, tra le altre cose, è anche in grado di inviare direttamenteil risultato della codifica a un recapito di posta elettronica.

mpack [-s oggetto] [-d file_introduttivo] [-m n_caratteri] [-c sottotipo_mime] (segue)

file_da_codificare indirizzo_posta_elettronica...

mpack [-s oggetto] [-d file_introduttivo] [-m n_caratteri] [-c sottotipo_mime] (segue)

-o file_da_generare file_da_codificare

3Mpack software libero con licenza speciale

Page 213:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Messaggi, allegati ed estensioni MIME 1271

mpack [-s oggetto] [-d file_introduttivo] [-m n_caratteri] [-c sottotipo_mime] (segue)

-n indirizzo_usenet[,indirizzo_usenet]... file_da_codificare

I tre modelli sintattici mostrano tutte le opzioni disponibili e i tre contesti di utilizzo di ‘mpack’.Nel primo caso, il file codificato viene inviato direttamente attraverso la posta elettronica, agliindirizzi specificati; nel secondo caso si crea un file; nell’ultimo caso si invia il file codificato auno o più gruppi di discussione di Usenet.

È importante chiarire il significato di alcune opzioni. ‘-d’ permette di indicare un file, il cui con-tenuto verrà usato come introduzione all’allegato che si crea. In altri termini, permette di spiegaredi cosa si tratta, senza interferire con il file da codificare. ‘-m’ consente di indicare la dimensionemassima, espressa in caratteri, ovvero in byte, dei messaggi. Ciò permette di creare automatica-mente diversi file, oppure di inviare diversi messaggi, ognuno non eccedente la dimensione ri-chiesta.4 Infine, l’opzione ‘-c’ consente di indicare un sottotipo MIME, dei tipi ‘application’,‘audio’, ‘image’ e ‘video’. Se non si indica questa informazione, è ‘mpack’ a determinarla inmodo automatico. È il caso di osservare che l’oggetto viene richiesto in modo interattivo, se nonsi usa l’opzione ‘-s’ esplicitamente.

A titolo di esempio si può vedere cosa succede se l’utente ‘caio’ invia [email protected] il file già visto nell’introduzione del capitolo, denominato‘prova.xxx’:

$ mpack -s "Prova di trasmissione" prova.xxx [email protected]

Ciò che viene ricevuto può assomigliare al messaggio seguente, dove si può notare che la stringadi delimitazione è ridotta a un solo trattino:

Message-ID: <[email protected]>

Mime-Version: 1.0

To: [email protected]

Subject: Prova di trasmissione

Content-Type: multipart/mixed; boundary="-"

From: [email protected]

Date: Fri, 13 Jul 2001 18:23:32 +0200

This is a MIME encoded message. Decode it with "munpack"

or any other MIME reading software. Mpack/munpack is available

via anonymous FTP in ftp.andrew.cmu.edu:pub/mpack/

---

Content-Type: application/octet-stream; name="prova.xxx"

Content-Transfer-Encoding: base64

Content-Disposition: inline; filename="prova.xxx"

Content-MD5: JSc+xPLb3o3I5NlBYvyVJA==

bGtqc2Ro6GU5Cjg0NXJ5I2ZnZwpm8un57MzA0sgK9vzkJCUmo0sq

-----

L’uso di ‘munpack’ è più semplice, dal momento che nella maggior parte dei casi è sufficientefornire il file contenente l’allegato, come argomento oppure attraverso lo standard input:

munpack [opzioni] file_con_allegato...

cat file_con_allegato | munpack [opzioni]Il file che contiene l’allegato può anche essere un messaggio di posta elettronica, in cui appare

4In realtà la dimensione indicata con questa opzione è solo un riferimento approssimato, dal momento che i messaggidi posta elettronica e di Usenet tendono a espandersi, mano a mano che si aggiungono informazioni sul loro percorso.

Page 214:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1272 Messaggi, allegati ed estensioni MIME

ancora l’intestazione. Tuttavia, è da tenere in considerazione che viene estratto solo il primo mes-saggio che contiene un allegato, salvo il caso di allegati suddivisi in più messaggi.

In condizioni normali, se il file o il messaggio contenente l’allegato è preceduto da una descrizione(un commento), questa informazione viene salvata in un file con estensione ‘.desc’.

114.7 Riferimenti

• Jerry Peek, MH & nmh: Email for Users & Programmers�

http://www.ics.uci.edu/˜mh/book/�

– Introduction to MIME�

http://www.ics.uci.edu/˜mh/book/overall/ch-itm.htm �

– Overview of MIME Messages�

http://www.ics.uci.edu/˜mh/book/overall/ovofmime.htm �

– Multipart Messages�

http://www.ics.uci.edu/˜mh/book/overall/mulmes.htm �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 215:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 115HTTPIl modo più comune per pubblicare informazioni attraverso la rete è quello di utilizzare un serventeHTTP (HyperText Transfer Protocol).

Le informazioni pubblicate in questo modo sono rivolte a tutti gli utenti che possono raggiungereil servizio, nel senso che normalmente non viene richiesta alcuna identificazione. Al massimo siimpedisce o si concede l’accesso in base al meccanismo di filtro gestito dal supervisore Inet e dalTCP wrapper.

115.1 Dal lato del serventePer offrire un servizio HTTP occorre un programma in grado di gestirlo. Di solito si tratta diun demone. Analogamente al servizio FTP anonimo, il servente HTTP consente l’accesso a unaparticolare directory e alle sue discendenti. Si tratta in pratica di una sorta di directory personaledegli utenti che accedono attraverso questo protocollo.

Un servente HTTP non offre solo un servizio di semplice consultazione di documenti: permetteanche di interpellare dei programmi. Questi programmi sono collocati normalmente al di fuoridella directory da cui si diramano i documenti (HTML o di altro tipo), per evitare che questi pos-sano essere letti. In questo contesto, tali programmi sono definiti gateway e normalmente vengonochiamati programmi CGI, o cgi-bin.

115.2 ApacheApache è un servente HTTP derivato da quello di NCSA, che costituisce lo standard di fatto perGNU/Linux e molte altre piattaforme.

In queste sezioni viene mostrato il funzionamento di Apache in modo sommario. L’argomentoviene trattato meglio nel capitolo 234 ed eventualmente si può consultare anche la documentazionedistribuita con Apache (disponibile anche presso �

http://www.apache.org � ).

115.2.1 Avvio di Apachehttpd [opzioni]‘httpd’ è il servente Apache per la gestione del protocollo HTTP. Il programma (demone) puòessere avviato dal supervisore Inet, oppure in modo autonomo. In generale, si preferisce lasciareche Apache lavori in modo autonomo, mentre se si preferisce l’intermediazione del supervisoreInet è più conveniente l’uso di altri tipi di servente HTTP (come Boa, descritto nel capitolo 242).

Nelle sezioni seguenti si fa sempre riferimento a un’installazione in cui il servizio viene avviatoin modo indipendente dal supervisore Inet.

Alcune opzioni-d directory_radice_del_servente

Permette di definire la directory che funge come punto di partenza per il servizio che vieneofferto. Questa è già stabilita in modo predefinito in fase di compilazione del programma eciò dipende dalla scelta di chi ha compiuto questa operazione. Attraverso questa opzione, sipuò indicare in modo esplicito una posizione diversa, che però può essere scavalcata dalladirettiva ‘ServerRoot’ del file di configurazione ‘httpd.conf’.

-f file_di_configurazione

Permette di indicare in modo esplicito il file di configurazione che ‘httpd’ deve leggere edeseguire prima di iniziare a gestire il suo servizio. Se il file viene indicato utilizzando un

1273

Page 216:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1274 HTTP

percorso relativo, se cioè manca la prima barra obliqua che identifica la directory radice,si fa riferimento a una posizione relativa che parte dalla directory ‘ServerRoot’, ovveroquella definibile con l’opzione ‘-d’.

Il valore predefinito di questa opzione, dipende dal modo in cui è stato compilato il pro-gramma. In un sistema GNU/Linux dovrebbe trattarsi di ‘/etc/apache/httpd.conf’.

115.2.2 Configurazione essenzialeDi solito, non occorre configurare nulla per vedere funzionare il servente, vale comunque la penadi dare un’occhiata ai file di configurazione, che qui si suppone si trovino nella directory ‘/etc/apache/’, in modo da poter modificare qualche dato prima di presentarsi all’esterno con il pro-prio servizio HTTP. Si tratta normalmente dei file seguenti:

• ‘httpd.conf’

• ‘srm.conf’

• ‘access.conf’

Attraverso la configurazione si definiscono molte cose, ma in particolare due directory:

• ‘ServerRoot’

la directory a partire dalla quale si distribuiscono tutti i file più importanti del servizio HTTP,che potrebbe corrispondere a ‘/etc/apache/’;

• ‘DocumentRoot’

la directory a partire dalla quale si distribuiscono i documenti offerti attraverso il protocolloHTTP, per la quale non esiste alcuno standard.

Nel seguito vengono descritte alcune direttive significative dei file di configurazione‘httpd.conf’, ‘srm.conf’ e ‘access.conf’.

File ‘httpd.conf’

ServerType {standalone|inetd}Permette di informare Apache sul modo in cui questo viene avviato: in modo autonomo(standalone) o attraverso il supervisore Inet.

Port numero_porta

Si tratta dell’indicazione della porta (di solito è 80 corrispondente a HTTP), necessarianel caso in cui il demone sia stato avviato in modo autonomo. Infatti, diversamente è ilsupervisore Inet a stare in ascolto della porta del servizio HTTP.

User utente

Group gruppo

Permette di abbinare un utente e un gruppo agli accessi effettuati attraverso il protocolloHTTP. In pratica, quando si legge un file HTML o si interpella un programma CGI, lo si facome se si fosse l’utente indicato da queste due direttive. Solitamente si utilizza l’utente e ilgruppo ‘nobody’, oppure di un utente apposito.

ServerAdmin email

L’indirizzo di posta elettronica dell’amministratore del servizio.

Page 217:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1275

ServerRoot directory

Rappresenta la directory a partire dalla quale si diramano le informazioni sullaconfigurazione, sulla registrazione degli eventi e simili. Corrisponde solitamente a qualcosacome ‘/etc/httpd/conf/’ o ‘/etc/apache/’.

ErrorLog registro_degli_errori

TransferLog registro_dei_trasferimenti

Definiscono i nomi e la collocazione dei file delle registrazioni.

File ‘srm.conf’

DocumentRoot directory_radice_html

Rappresenta la directory da cui si possono diramare i documenti HTML.

UserDir percorso_radice_utenti

Rappresenta un percorso aggiuntivo nel caso si acceda a un utente utilizzando il nomedell’utente stesso preceduto dal simbolo tilde (‘˜’). Supponendo di avere una dichiarazionedel tipo

UserDir public_html

se si accede all’indirizzo ‘host/˜daniele/elenco.html’ si fa riferimento effettiva-mente al file ‘˜daniele/public_html/elenco.html’. In questo modo si evita diesporre l’intera directory personale dell’utente.

DirectoryIndex file_indice...

Quando si accede a una directory invece che a un file specifico, se questa contiene un file traquelli elencati nella direttiva ‘DirectoryIndex’ viene restituito quel file, invece del sem-plice elenco del contenuto. Solitamente si utilizza il nome ‘index.html’. Questo mec-canismo permette di mascherare il contenuto effettivo della directory, oltre che di guidarel’utente del servizio in modo che non si perda in una miriade di file.

IndexIgnore modello_da_ignorare...

Quando si consente di accedere a una directory visualizzandone il contenuto (perché mancail file ‘index.html’ o equivalente), si può fare in modo che alcuni file non appaiano inelenco. Utilizzando questa direttiva, si possono indicare i modelli di file da non includere.Per questo si possono usare i consueti caratteri jolly (punto interrogativo e asterisco).

DefaultType tipo_mime...

Permette di definire il tipo MIME predefinito di un documento per il quale non si riesca adeterminarne il tipo nel modo normale, cioè in base all’estensione. Di solito, questo valorepredefinito è ‘text/plain’

Alias directory_fasulla directory_reale

Questo tipo di direttiva, che può essere ripetuta, permette di definire delle directory in po-sizioni diverse da quelle reali. La directory fasulla fa riferimento a una directory indicatanell’indirizzo richiesto e quella reale indica la directory effettiva nel file system. Per esem-pio,

Alias /icons/ /home/httpd/icons/

fa in modo che l’indirizzo ‘host/icons/’ faccia in realtà riferimento alla directory ‘/home/httpd/icons/’ e non alla directory ‘icons/’ discendente da ‘DocumentRoot’.

ScriptAlias directory_fasulla directory_reale

Funziona come la direttiva ‘Alias’, ma si riferisce ai programmi CGI.

Page 218:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1276 HTTP

File ‘access.conf’

Il file di configurazione ‘access.conf’ permette di controllare in qualche modo gli ac-cessi. La sua configurazione è più complessa rispetto a quella degli altri file. In particolare,oltre a normali direttive, si utilizzano dei delimitatori simili a marcatori HTML che permet-tono di definire il contesto a cui si riferiscono le direttive contenute.

Gli esempi seguenti rappresentano il contenuto normale di questo file.

<Directory /home/httpd/html>

Options Indexes Includes ExecCGI

AllowOverride None

order allow,deny

allow from all

</Directory>

Si tratta delle dichiarazioni riferite alla directory ‘/home/httpd/html/’, ovvero quelladefinita in precedenza come ‘DocumentRoot’. In pratica vengono consentiti tutti gli utilizzinormali e l’accesso da parte di chiunque.

<Directory /home/httpd/cgi-bin>

AllowOverride None

Options None

</Directory>

Si tratta delle dichiarazioni riferite alla directory ‘/home/httpd/cgi-bin/’, ovveroquella destinata a contenere i programmi CGI. Non viene definita alcuna opzione.

115.2.3 Verifica del funzionamentoAvviando il proprio navigatore preferito e selezionando un indirizzo HTTP corrispondente alnome o all’indirizzo del proprio elaboratore, si dovrebbe vedere la pagina introduttiva della docu-mentazione di Apache.

Figura 115.1. La pagina introduttiva di Apache.

115.3 Dal lato del clientePer poter usufruire di un servizio HTTP occorre un programma cliente adatto. In generale, taleprogramma cliente è in grado di accedere anche ad altri servizi, pertanto, in questo senso vienedefinito semplicemente «navigatore». Il programma di navigazione tipico dovrebbe consentire

Page 219:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1277

anche la visualizzazione di immagini, ma un buon programma che utilizza soltanto un terminalea caratteri può essere utilizzato in qualunque condizione, quindi, tale possibilità non deve esserescartata a priori.

115.3.1 Uniform Resource Locator – Uniform Resource Identifier

L’integrazione di diversi protocolli impone l’utilizzo di un sistema uniforme per indicare gli in-dirizzi, in modo da conoscere subito in che modo si deve effettuare il collegamento. Per questo,quando si utilizza un navigatore, si devono usare indirizzi espressi in modo standard, precisa-mente secondo il formato URI, o Uniform Resource Identifier. Attualmente, è ancora in uso lavecchia definizione, URL, Uniform Resource Locator, che in pratica rappresenta la stessa cosa.1

Attraverso questa modalità, è possibile definire tutto quello che serve per raggiungere una risorsa:protocollo, nodo (host), porta, percorso. Il formato generale di un URI è descritto nel capitolo157.

115.3.2 Tempi mortiUn problema che riguarda un po’ tutti i programmi clienti, sono i tempi morti. Questi programmi,quando tentano di accedere a un risorsa senza riuscirci, restano a lungo in attesa prima di restituireuna segnalazione di errore. Se si utilizza un servente DNS e questo non risulta raggiungibile,oppure a sua volta non riesce a raggiungere gli altri serventi DNS di livello superiore, le attesesono dovute al ritardo nelle risposta date dal servizio di risoluzione dei nomi.

All’avvio, la maggior parte dei navigatori cerca di raggiungere la propria pagina dipresentazione (home page) e questo richiede un collegamento in funzione in quel momento.

Quando si vuole utilizzare un programma del genere soltanto per delle attività locali e sinotano questi problemi nelle risposte, se si gestisce un servente DNS locale che, almenotemporaneamente, non ha accesso alla rete esterna, si può provare a disattivarlo utilizzando ilcomando seguente:

# ndc stop

In seguito, per riattivarlo basterà utilizzare il comando opposto.

# ndc start

Se la propria rete locale non accede mai all’esterno, non è necessario tentare di risolvere nomiche non appartengono all’ambito locale. Se si utilizza un servizio di risoluzione dei nomi bastatogliere (commentandola) la direttiva contenuta nel file ‘/etc/named.conf’ che fa riferimentoal dominio principale, rappresentato da un punto singolo.

options�

directory "/var/named";�;

//

//zone "."�

// type hint;

// file "named.root";

//�;

//

zone "0.0.127.in-addr.arpa"�

type master;

file "zone/127.0.0";

1URL è precisamente un sottoinsieme di URI.

Page 220:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1278 HTTP

�;

115.4 LynxLynx 2 è la prova di ciò che può fare un buon programma per i terminali senza grafica, ancheper la navigazione nella rete. A prima vista può risultare complicato da utilizzare, ma il temponecessario per imparare il suo funzionamento sarà ripagato.

Lynx è un navigatore completo, a parte la limitazione dovuta alla mancanza della grafica. È statoportato su un gran numero di piattaforme, Dos inclusa (129.3). La sua semplicità lo rende preziosoin tutte quelle situazioni in cui non è possibile utilizzare il sistema grafico X.

Prima di avviare Lynx la prima volta, conviene controllare il suo file di configurazione generale.Molto probabilmente converrà modificare qualcosa. Si tratta di ‘/etc/lynx.cfg’.

Vale la pena di cambiare: l’indicazione della pagina iniziale, la posizione della guida e dellapagina indice. Infatti, in questi casi, si fa riferimento a pagine HTML in rete, mentre è normaleche ognuno si crei una propria pagina di inizio e che si abbiano a disposizione anche localmente ifile della guida.

Queste indicazioni potrebbero apparire come negli esempi seguenti.

STARTFILE:file://localhost/etc/lynx-inizio.html

HELPFILE:file://localhost/usr/share/doc/lynx/lynx_help/lynx_help_main.html

DEFAULT_INDEX_FILE:file://localhost/etc/lynx-indice.html

In tutti i casi mostrati, si fa riferimento a un file nell’elaboratore locale, ‘localhost’.Nel primo caso si fa riferimento al file ‘/etc/lynx-inizio.html’, nel secondo a‘/usr/share/doc/lynx/lynx_help/lynx_help_main.html’, nel terzo a ‘/etc/lynx-indice.html’. Probabilmente, tutto il resto può essere lasciato com’è.

115.4.1 Avvio di Lynxlynx [opzioni] [file_iniziale]Lynx si compone in pratica dell’eseguibile ‘lynx’. Questo può essere avviato con l’indicazione diun indirizzo iniziale (di solito una pagina), espresso secondo lo standard URI, oppure può trattarsisemplicemente di un file indicato senza formalità particolari. Se non è indicato alcun file iniziale,viene utilizzato quanto specificato nella configurazione contenuta nel file ‘lynx.cfg’, alla voce‘STARTFILE’.

Per approfondire il funzionamento di Lynx si può consultare la pagina di manuale lynx(1) e so-prattutto la guida interna che si ottiene con il comando ‘lynx -help’.

Alcune opzioni

-anonymous

Una particolarità di Lynx è la possibilità di concedere un numero limitato di funzionalità autenti occasionali. Con questa opzione, si fa in modo che Lynx possa essere utilizzato solocome strumento di lettura ipertestuale, eliminando ogni possibilità di salvataggio di pagineo di dati e di stampa. Può essere molto utile in quelle situazioni in cui si vuole permetterel’utilizzo del programma a persone non controllate, che non sono state registrate nel sistemae che quindi non hanno un’utenza corrispondente.

-cfg=file_di_configurazione

Permette di definire il file di configurazione, quando non si vuole utilizzare quello predefi-nito corrispondente a ‘lynx.cfg’.

2Lynx GNU GPL

Page 221:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1279

-ftp

Disabilita l’utilizzo del protocollo FTP.

-homepage=indirizzo_uri

Permette di indicare una pagina iniziale differente da quella predefinita. Verrebbe utilizzatain particolare quando si accede alla pagina principale.

-index=indirizzo_uri

Permette di indicare una pagina indice.

-localhost

Impedisce l’accesso a indirizzi URI esterni all’elaboratore locale. In pratica, obbliga a rima-nere all’interno dell’elaboratore locale.

-term=terminale

Normalmente, Lynx è in grado di determinare da solo il tipo di terminale a disposizione,in modo da potervisi adattare. A volte questo riconoscimento non avviene correttamente;in quei casi è necessario indicare espressamente il nome del terminale. Se utilizzando unaconsole GNU/Linux, o una finestra sotto X, non si distingue il cursore, conviene provareindicando un terminale ‘vt100’.

-dump

Fa in modo che l’URI richiesto venga emesso attraverso lo standard output, terminandosubito dopo il funzionamento di Lynx.

-nolist

In condizioni normali, quando si utilizza l’opzione ‘-dump’ si ottiene alla fine del filel’elenco dei riferimenti ipertestuali contenuti nel documento. Con l’opzione ‘-nolist’ que-sti vengono omessi.

Esempi

$ lynx -term=vt100 file://localhost/home/tizio/indice.html

Avvia Lynx specificando il tipo di terminale (‘vt100’) e il file iniziale.

$ lynx -dump file://localhost/home/tizio/indice.html

Fa in modo che Lynx restituisca attraverso lo standard output l’URI richiesto, dopo averlotrasformato in un file di testo normale.

$ lynx -dump -nolist file://localhost/home/tizio/indice.html

Come nell’esempio precedente, senza aggiungere in coda l’elenco dei riferimentiipertestuali contenuti nel documento.

$ lynx

Avvia Lynx utilizzando esclusivamente la configurazione contenuta nel file ‘lynx.cfg’.

115.4.2 FunzionamentoLynx permette l’utilizzo di una serie di comandi abbinati a tasti più o meno mnemonici. Non èdisponibile un menù, quindi occorre un minimo di preparazione prima di poter utilizzare Lynx.

L’abbinamento tra i comandi e i tasti corrispondenti è definito all’interno del file di configurazione(‘lynx.cfg’), ma in generale conviene non alterare le definizioni predefinite.

La figura 115.2 mostra in che modo si presenta Lynx dopo essere stato avviato con l’indicazionedi una pagina HTML particolare. Nelle ultime righe dello schermo (o della finestra) appare

Page 222:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1280 HTTP

Clean the Clipper 5.2 (p1 of 80)

This page hosted by [gc_icon.gif] Get your own Free Home Page

_________________________________________________________________

[home] [step1][step2][step3] [step4][step5][step6] [step7][links]

Clean the Clipper 5.2

A different way to program using Clipper 5.2 without commands, that

is, without the file STD.CH.

All trade names referenced herein are either trademarks or registered

trademarks of their respective companies. In particular, Clipper

(CA-Clipper) is a registered trademark of Computer Associates

International.

!WARNING!

The informations contained inside this page are version dependent.

!WARNING!

_________________________________________________________________

-- press space for next page --

Arrow keys: Up and Down to move. Right to follow a link; Left to go back.

H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

Figura 115.2. Lynx dopo essere stato avviato con l’indicazione di un indirizzo specifico.

Page 223:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1281

un riepilogo dei comandi principali. Prima di richiamare la guida (help) conviene configurarecorrettamente il file ‘lynx.cfg’ al riguardo: molto probabilmente i file della guida sono dispo-nibili localmente, mentre di solito questo file fa riferimento alla guida ottenibile attraverso la rete.Nella sezione dedicata alla configurazione è già stato spiegato come fare per correggere questoparticolare.

115.4.3 Navigazione e scorrimento del documentoLa navigazione all’interno di un documento ipertestuale è relativamente semplice, anche se nonsi può utilizzare il mouse. In particolare va ricordato l’uso dei tasti freccia, per cui [ freccia su ]

e [ freccia giù ] servono per spostare il cursore da un riferimento (link) a un altro, [ freccia sinistra ]

permette di tornare al documento precedente e [ freccia destra ] permette di seguire il riferimento sucui si trova il cursore.

Lynx mantiene la traccia dei riferimenti attraverso cui si è giunti al documento attuale, [ Backspace ]

permette di visualizzarla in modo da poter selezionare un riferimento da lì.

Un’altra cosa importante è la possibilità di ottenere un elenco compatto di tutti i riferimenticontenuti nel documento visualizzato attualmente. Ciò si ottiene con il comando ‘LIST’

corrispondente al tasto [ l ] oppure [ L ].

List Page (p1 of 5)

List Page (Lynx Version 2.8.1pre.9), help

References in

file://localhost/home/daniele/Internet/www.geocities.com/SiliconValley

/7737/clipper52clean.html

1. http://www.geocities.com/

2. http://www.geocities.com/

3. (internal) in Clean the Clipper 5.2 - home

4. (internal) in Clean the Clipper 5.2 - step1

5. (internal) in Clean the Clipper 5.2 - step2

6. (internal) in Clean the Clipper 5.2 - step3

7. (internal) in Clean the Clipper 5.2 - step4

8. (internal) in Clean the Clipper 5.2 - step5

9. (internal) in Clean the Clipper 5.2 - step6

10. (internal) in Clean the Clipper 5.2 - step7

11. (internal) in Clean the Clipper 5.2 - links

12. http://www.cai.com/

13. (internal) in Clean the Clipper 5.2 - home

14. (internal) in Clean the Clipper 5.2 - step1

-- press space for next page --

Arrow keys: Up and Down to move. Right to follow a link; Left to go back.

H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

Figura 115.3. Il comando ‘LIST’ permette di ottenere un riassunto di tutti i riferimenti contenuti nellapagina visualizzata.

La tabella 115.1 mostra l’elenco dei comandi utili per la navigazione di un documento ipertestuale.

115.4.4 Salvataggio, stampa e sorgentiIl documento visualizzato può essere salvato o stampato in vari modi. Il comando di stampa viene

Page 224:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1282 HTTP

Comando Tastiera Descrizionefreccia su Sposta il cursore sul riferimento precedente.freccia giù Sposta il cursore sul riferimento successivo.freccia sinistra Torna al documento precedente.freccia destra Segue il riferimento su cui si trova il cursore.

PREV_PAGE pagina su - Visualizza la schermata precedente del documento.NEXT_PAGE pagina giù + Visualizza la schermata successiva del documento.HOME Home Ctrl+A Visualizza l’inizio del documento.END Fine Ctrl+E Visualizza la fine del documento.

Backspace Visualizza i riferimenti seguiti precedentemente.LIST l L Visualizza un riassunto dei riferimenti contenuti.MAIN_MENU m Visualizza il documento iniziale (main).INDEX_SEARCH i Visualizza il documento indice.GOTO g Permette di indicare un indirizzo URI da raggiungere.INTERRUPT z Sospende un processo di I/O in corso.RELOAD Ctrl+R Ricarica il documento corrente.REFRESH Ctrl+L Ctrl+W Rigenera l’immagine visualizzata sullo schermo.WHEREIS / Permette di cercare una stringa nel documento.NEXT n La prossima corrispondenza della stringa di ricerca.

Tabella 115.1. Elenco dei comandi di navigazione di Lynx.

richiamato utilizzando il tasto [ p ], attraverso il quale si accede a un menù da cui è possibilescegliere il tipo di stampa. In particolare potrebbe essere possibile anche l’invio di una copia a unindirizzo di posta elettronica, o il salvataggio su un file.

Quando Lynx carica un documento, lo trasforma immediatamente nel formato da visualizzare. Perottenere il sorgente di quel documento occorre ripetere l’operazione di caricamento senza alcunatrasformazione. Questo si ottiene con il tasto [ \ ]. Una volta ottenuto un documento visualizzatocome si vuole, si può stampare (o salvare) nel modo visto poco sopra.

Un documento, o più in generale un file, può essere caricato nella sua forma originale,normalmente per poterlo salvare. Questo si ottiene con il comando ‘DOWNLOAD’ abbinatonormalmente al tasto [ d ]: quando viene premuto si ottiene il caricamento del file a cui puntail riferimento sul quale si trova il cursore in quel momento. Il file viene collocato in una posizionetransitoria, quindi viene richiesto all’utente cosa farne: salvarlo o altro. Anche quando si vuoleavere un documento HTML senza trasformazioni conviene utilizzare questo sistema. Infatti, ilcaricamento del sorgente con il tasto [ \ ] espande i caratteri di tabulazione.

Comando Tastiera DescrizionePRINT p Stampa o salva il documento così come appare.SOURCE \ Carica e visualizza il sorgente del documento.DOWNLOAD d D Carica il file a cui punta il riferimento evidenziato.

Tabella 115.2. Elenco dei comandi di stampa e salvataggio di Lynx.

115.4.5 Menù di opzioniCon il comando ‘OPTIONS’, normalmente richiamabile con il tasto [ o ], è possibile ottenere ilmenù delle opzioni, attraverso il quale è poi possibile modificare alcuni comportamenti di Lynx.La figura 115.5 mostra un esempio di ciò che può apparire. In particolare, per richiamare una voceda modificare, si utilizza il tasto corrispondente alla lettera maiuscola della voce stessa.

115.4.6 SegnalibroI riferimenti più importanti possono essere salvati in un file apposito. Il nome e la posizione diquesto file è definito nel file di configurazione ‘lynx.cfg’ e comunque può essere cambiato conil menù di configurazione appena descritto sopra.

Per salvare un riferimento nel segnalibro, si utilizza il comando ‘ADD_BOOKMARK’ collegato nor-

Page 225:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1283

(p1 of 96)

<HTML>

<HEAD>

<TITLE>Clean the Clipper 5.2</TITLE>

<META NAME="description" CONTENT="Cleaning the code of your Clipper 5.2 prog

+rams from commands: no more the STD.CH.">

<META NAME="keywords" CONTENT="xBase, dBase, Clipper, CA-Clipper">

<META NAME="Author" CONTENT="Daniele Giacomini - daniele @ evo . it">

<META NAME="Description" CONTENT="Cleaning the code of your Clipper 5.2 prog

+rams from commands: no more the STD.CH.">

<META NAME="KeyWords" CONTENT="xBase, dBase, Clipper, CA-Clipper">

</HEAD>

<BODY>

<CENTER><P><B>This page hosted by <A HREF="http://www.geocities.com/"><IMG SRC=

+"gc_icon.gif" BORDER=0 HEIGHT=31 WIDTH=88 ALIGN=CENTER></A>

Get your own <A HREF="http://www.geocities.com/">Free Home Page</A>

<HR><A NAME="home"></A></B>[<A HREF="#home">home</A>] [<A HREF="#step1">step1</

+A>][<A HREF="#step2">step2</A>][<A HREF="#step3">step3</A>]

[<A HREF="#step4">step4</A>][<A HREF="#step5">step5</A>][<A HREF="#step6">step6

+</A>]

[<A HREF="#step7">step7</A>][<A HREF="#links">links</A>] </P></CENTER>

Currently viewing document source. Press ’\’ to return to rendered version.

Arrow keys: Up and Down to move. Right to follow a link; Left to go back.

H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

Figura 115.4. Il sorgente della pagina può essere visualizzato dopo un’ulteriore operazione dicaricamento.

Page 226:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1284 HTTP

Options Menu (Lynx Version 2.8.1pre.9)

E)ditor : NONE

D)ISPLAY variable : NONE

mu(L)ti-bookmarks: OFF B)ookmark file: lynx_bookmarks.html

F)TP sort criteria : By Filename

P)ersonal mail address : NONE

S)earching type : CASE INSENSITIVE

preferred document lan(G)uage: en

preferred document c(H)arset : NONE

display (C)haracter set : Western (ISO-8859-1)

Raw 8-bit or CJK m(O)de : ON show color (&) : ON

V)I keys: OFF e(M)acs keys: OFF sho(W) dot files: OFF

popups for selec(T) fields : ON show cursor (@) : OFF

K)eypad mode : Numbers act as arrows

li(N)e edit style : Default Binding

l(I)st directory style : Mixed style

U)ser mode : Novice verbose images (!) : ON

user (A)gent : Lynx/2.8.1pre.9 libwww-FM/2.14

Select capital letter of option line, ’>’ to save, or ’r’ to return to Lynx.

Command:

Figura 115.5. Durante il funzionamento, Lynx può essere configurato parzialmente.

Page 227:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1285

malmente al tasto [ a ]. Subito dopo viene richiesto di specificare cosa si intende salvare. Con iltasto [ d ] si intende salvare il riferimento alla pagina corrente, con il tasto [ l ] si intende salvare ilriferimento su cui si trova il cursore.

Per richiamare l’elenco dei riferimenti salvati, si utilizza semplicemente il tasto [ v ]. Mentre sivisualizza questo elenco, oltre che selezionare un riferimento, si può anche eliminare ciò che nonserve più, con il tasto [ r ].

115.4.7 ConclusioneIl funzionamento di Lynx viene concluso con il comando ‘QUIT’, [ q ], oppure ‘ABORT’, [ Q ]. Nelprimo caso viene chiesto di confermare la richiesta, mentre nel secondo ciò non avviene.

115.5 LinksLinks 3 è un altro navigatore fatto per i terminali a caratteri, senza grafica. A differenza di Lynx(del quale imita il suono del nome) ha una gestione migliore delle tabelle, che vengono incorni-ciate e rappresentate in modo migliore; inoltre dispone di un menù a tendina, a cui si accede conil tasto [ Esc ].

Links si compone in pratica dell’eseguibile ‘links’, che si avvia in modo simile a Lynx:

links [opzioni] [file_iniziale]Il file iniziale va indicato in forma di URI, anche se si tratta di file locali. In particolare, per i filelocali, si usa la forma seguente:

file://percorso_del_file

Durante il funzionamento di Links, la navigazione con la tastiera è abbastanza intuitiva e anche ilmouse può essere utilizzato.

Tastiera DescrizioneCtrl+c Conclude il funzionamento.Esc Richiama il menù a tendina.Ctrl+P Fa scorrere il testo visualizzando una riga precedente.Ctrl+N Fa scorrere il testo visualizzando una riga successiva.pagina su Fa scorrere il testo all’indietro di una schermata.pagina giù Fa scorrere il testo in avanti di una schermata.freccia su Raggiunge il riferimento ipertestuale precedente.freccia giù Raggiunge il riferimento ipertestuale successivo.freccia destra Seleziona il riferimento ipertestuale evidenziato.freccia sinistra Torna indietro.g Richiede l’inserimento di un URI da raggiungere./ Richiede l’inserimento di una stringa di ricerca nella pagina attuale.? Come [ / ], ma ricerca all’indietro.= Mostra le informazioni sul documento.\ Mostra il sorgente (si preme nuovamente per ritornare all’impaginazione normale).d Consente di salvare il riferimento evidenziato in un file locale.Shift Consente di usare il mouse per le funzioni di copia-incolla standard.

Tabella 115.3. Elenco dei comandi di navigazione di Links.

Links può essere avviato utilizzando diverse opzioni nella riga di comando. Tuttavia, di solito que-ste non si usano, potendo configurare il suo funzionamento attraverso il menù, ricordando poi disalvare i cambiamenti selezionando l’apposita voce del menù: Save options. Le modifiche ven-gono salvate nel file ‘˜/.links/links.cfg’, che eventualmente può anche essere ritoccato amano, se si intuisce la sintassi delle sue direttive.

3Links GNU GPL

Page 228:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1286 HTTP

In generale, la prima cosa che conviene modificare è la codifica dei caratteri usata per la visualiz-zazione, portandola normalmente a ISO 8859-1.

File View Link Downloads Setup Help

[successivo] [precedente] [inizio] [+--------------------+] [licenze]

[indice analitico] [tomo] [parte] | Character set > |

| Terminal options |

----------------------------------| Network options |--------------

| Cache |

Parte ii. Int| Associations > |

| File extensions > |

* 3 Introduzione all’uso dell’el|--------------------|

| Save options |

* 3.1 Struttura +--------------------+

* 3.2 Dispositivi per l’interazione tra l’utente e la macchina

* 3.3 Dispositivi di memorizzazione

* 3.4 Sistema operativo

* 3.5 Programmi applicativi

* 3.6 Riferimenti

* 4 Conversioni numeriche

file://a212.html

Figura 115.6. Links in funzione, con il menù di configurazione aperto.

115.6 Altri clienti HTTPOltre a quelli descritti sono disponibili molti altri tipi di clienti HTTP. In particolare, è il caso disegnalare Amaya, che è descritto nel capitolo 162.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 229:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

HTTP 1287

Figura 115.7. Esempio di visualizzazione di una pagina divisa in colonne attraverso una tabella conLinks.

Page 230:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 116NISIl NIS, 1 o Network Information Service, è un sistema di gestione di dati amministrativi concentratiin una sola fonte, rendendoli disponibili a tutta una rete in modo uniforme.

Questo tipo di servizio è stato ideato e sviluppato originariamente dalla Sun Microsystems deno-minandolo Yellow Pages (YP), ma successivamente il nome è stato cambiato perché questo eragià un marchio registrato in Gran Bretagna della società telefonica British Telecom. Questa storiadi NIS serve a spiegare il motivo per il quale molti programmi di servizio che riguardano questagestione hanno il prefisso ‘yp’, oltre al fatto che spesso si parli di «servizi YP» invece che di«servizi NIS».

Il NIS è un meccanismo che si sovrappone alla gestione amministrativa di un sistema Unix ti-pico, ma questo avviene in un modo non perfettamente integrato. Quando si introduce il NIS, siinserisce un livello di intermediazione tra l’utente e il sistema di amministratore preesistente.

116.1 Concentrazione amministrativaLo scopo del NIS è quello di concentrare in un solo elaboratore la gestione di una serie di fileamministrativi. La tabella 116.1 elenca alcuni file di configurazione, tipici di un sistema Unix,che possono essere gestiti in questo modo.

File Descrizione/etc/passwd Informazioni sugli utenti./etc/group Gruppi di utenti./etc/shadow password shadow (quando gestibili)./etc/aliases Alias di posta elettronica./etc/hosts Traduzione degli indirizzi IP dei nodi della rete locale./etc/networks Traduzione degli indirizzi IP delle sottoreti (locali)./etc/protocols Nomi e numeri dei protocolli di rete./etc/rpc Numeri delle chiamate RPC./etc/services Abbinamento dei servizi di rete ai numeri di porta corrispondenti.

Tabella 116.1. Elenco di alcuni dei file amministrativi comunemente gestibili attraverso il NIS.

È bene chiarire subito che il supporto alle password shadow non è disponibile in tutti i NISesistenti; inoltre, la natura del NIS rende poco probabile l’utilità del loro utilizzo.

La concentrazione amministrativa si attua facendo in modo che le informazioni dei file che inte-ressano siano gestite a partire da un solo nodo. Generalmente, l’utilità del NIS sta nella possibilitàdi amministrare gli utenti da un’unica origine, facendo in modo che questi vengano riconosciutiin tutti gli elaboratori di un certo «dominio», senza dover essere inseriti effettivamente in ognunodi questi.

Gli esempi che si faranno in questo capitolo sono volti principalmente al raggiungimento di questorisultato, concentrando così l’amministrazione dei file ‘/etc/passwd’ e ‘/etc/group’.

116.1.1 Mappe NISIl NIS non utilizza i file amministrativi così come sono, ne crea una copia; queste copie sonodenominate «mappe». I file di mappa sono in formato DBM, dove si memorizzano solo coppie didati: chiave-valore. Per questo motivo, a seconda della struttura dei file amministrativi originali,si possono generare più mappe differenti.

1NIS GNU GPL

1288

Page 231:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1289

Quando si attiva il NIS, non si possono più utilizzare i vecchi comandi amministrativi (come‘passwd’, ‘chsh’, ecc.), o quantomeno non conviene, perché il NIS non si accorge (autonoma-mente) dei cambiamenti apportati ai file amministrativi tradizionali. Bisogna utilizzare i comandispecifici del NIS, in modo che i cambiamenti siano annotati immediatamente nelle mappe e poisiano propagati nei file amministrativi normali del servente NIS.

La tabella 116.2 riporta l’elenco di alcune delle mappe tipiche della gestione NIS. La collocazionedi questi file dipende dal dominio NIS, descritto nella sezione seguente, e corrisponde in pratica a‘/var/yp/dominio_nis/’.

Mappa Descrizionepasswd.byname Utenti per nome.passwd.byuid Utenti per numero UID.group.byname Gruppi per nome.group.bygid Gruppi per numero GID.shadow.byname Utenti per nome (dal file ‘/etc/shadow’).mail.aliases Alias di posta elettronica.hosts.byname Nodi per nome.hosts.byaddr Nodi per indirizzo.networks.byname Reti locali per nome.networks.byaddr Reti locali per indirizzo.protocols.byname Protocolli di rete per nome.protocols.bynumber Protocolli di rete per numero.rpc.byname Chiamate RPC per nome.rpc.bynumber Chiamate RPC per numero.services.byname Servizi di rete per nome.

Tabella 116.2. Elenco di alcune mappe NIS.

116.1.2 Dominio NISQuando si attiva un servizio NIS in un nodo, in modo che questo renda disponibili le informazionirelative a un gruppo di elaboratori, si deve definire un dominio NIS corrispondente. Questo nonha niente a che fare con i domini utilizzati dal servizio DNS, ma generalmente, anche se potrebbesovrapporsi perfettamente a un dominio di questo tipo, conviene utilizzare nomi distinti, che nonabbiano un nesso logico o intuitivo.

Più precisamente, è meglio dire che si stabilisce prima l’estensione del dominio NIS che si vuolecreare, quindi si deve «eleggere» il nodo più adatto a fungere da servente NIS. Infatti, questoelaboratore deve trovarsi in una posizione adatta nella rete, in modo che sia accessibile facilmenteda tutti gli elaboratori del dominio NIS. Oltre a questo è bene che si tratti di una macchina adeguataall’estensione del dominio: maggiore è il numero di clienti, maggiore sarà la frequenza con cuidovrà rispondere a richieste del protocollo NIS.

I file di mappa di un servente NIS sono raggruppati distintamente per dominio, nella directory ‘/var/yp/dominio_nis/’.

116.1.3 Servente principale e serventi secondariFinora si è fatto riferimento a un servente NIS unico per tutto il suo dominio di competenza.Quando si attiva un servizio di questo tipo, tutti gli elaboratori clienti di questo dominio dipendonocompletamente dal servente per tutte quelle informazioni che sono state concentrate sotto la suaamministrazione. Se l’elaboratore che offre questo servizio dovesse venire a mancare per qualsiasimotivo, come un guasto, tutti i suoi clienti sarebbero in grave difficoltà.

Per risolvere il problema, si possono predisporre dei serventi NIS secondari, o slave, cheriproducono le informazioni del servente principale, o master.

Page 232:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1290 NIS

Il motivo per il quale si utilizza il servizio NIS è quello di uniformare e concentrare lagestione di informazioni di un gran numero di elaboratori, altrimenti non sarebbe giustificatol’impegno necessario alla sua attivazione. Di conseguenza, è praticamente obbligatorio attivaredei serventi secondari, sia per attenuare i rischi di blocco del sistema globale, sia per ridurre ilcarico di richieste NIS su un’unica macchina.

La presenza di serventi secondari impone la creazione di meccanismi automatici per il loroallineamento, generalmente attraverso il sistema Cron.

116.2 Distinzione dei ruoli tra servente e clienteFinora è stato preso in considerazione il compito del servente NIS, senza valutare i clienti, maall’inizio la distinzione dei compiti può sembrare confusa.

Il cliente è un programma demone che si occupa di fornire al sistema in cui è in funzione leinformazioni che altrimenti verrebbero ottenute dai soliti file di configurazione. La situazionetipica è quella della procedura di accesso: se il nome dell’utente non viene trovato nel file ‘/etc/passwd’ locale, il cliente NIS cerca di ottenerlo dal servente NIS.

In pratica, le funzionalità di servente e cliente sono indipendenti: ci possono essere elaboratoriche fungono da serventi, altri che utilizzano il programma cliente per accedere alle informazionie altri ancora che fanno entrambe le cose.

Se si pensa che il servente NIS principale deve contenere tutte le informazioni che vengono con-divise dai programmi clienti presso gli altri elaboratori, potrebbe sembrare inutile l’attivazionedel programma cliente nello stesso servente. Tuttavia, le cose cambiano quando si considerano iserventi secondari. Questi non dispongono delle informazioni che ha l’elaboratore corrispondenteal servente principale; per ottenerle occorre attivare il cliente NIS in modo che si possa mettere incomunicazione con il servente principale.

Nel sistema NIS così strutturato, i clienti cercano le informazioni, riferite al loro dominio, dalservente che risponde più rapidamente. Ciò viene determinato generalmente attraverso una richie-sta circolare (broadcast). Questo, tra le altre cose, è uno dei punti deboli del NIS: dal momentoche qualunque elaboratore può rispondere a una chiamata circolare, chiunque è in grado di intro-mettersi per cercare di catturare delle informazioni.

116.2.1 Propagazione delle informazioniQuando si deve intervenire per modificare qualche informazione di quelle che sono condivise at-traverso il NIS, si presentano situazioni differenti a seconda delle circostanze. Queste si traduconoin modalità diverse di propagazione di queste modifiche nell’intero sistema NIS. Si distinguonodue situazioni fondamentali:

• la modifica di un’informazione nell’elaboratore di origine (il servente principale) sui dati dipartenza;

• la modifica di un’informazione attraverso gli strumenti offerti dal sistema NIS.

Nel primo caso le azioni da compiere sono:

1. aggiornare le mappe del servente principale;

2. aggiornare le mappe dei serventi secondari.

Nel secondo caso le azioni da compiere sono:

1. aggiornare i file di configurazione corrispondenti nel servente principale

Page 233:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1291

2. aggiornare le mappe del servente principale

3. aggiornare le mappe dei serventi secondari

Quando si interviene manualmente sui file di configurazione di partenza del servente principale,per esempio quando si vuole aggiungere o eliminare un utente, si deve poi comandare manual-mente l’aggiornamento delle mappe NIS; eventualmente si può pilotare anche l’aggiornamentodei serventi secondari, attraverso un cosiddetto push.

Quando si utilizzano gli strumenti offerti da NIS per modificare la configurazione dei daticondivisi, ciò può avvenire solo attraverso un cliente, il quale si occupa di contattare il serventeprincipale che poi deve provvedere ad aggiornare i file normali e le mappe.

La propagazione delle mappe modificate ai serventi secondari potrebbe essere un problema. Perquesto si utilizza generalmente il sistema Cron in ogni servente secondario, in modo da avviareperiodicamente il comando necessario a metterli in comunicazione con il servente principale everificare così la presenza di aggiornamenti eventuali.

Dalla precisione del funzionamento di questo sistema di propagazione derivano delle conseguenzepratiche che, a prima vista, possono sembrare assurde. Si può immaginare cosa può accaderequando un utente cambia la propria parola d’ordine da un cliente NIS. Questo contatta il serventeprincipale che provvede ad aggiornare le mappe e il file ‘/etc/passwd’. Ma fino a che iserventi secondari non ricevono l’aggiornamento, i clienti che li utilizzano continuano a permet-tere l’accesso con la parola d’ordine vecchia. Questo può capitare allo stesso elaboratore dal qualeè stata compiuta l’operazione di modifica, se questo utilizza il servizio di un servente seconda-rio non aggiornato. In queste condizioni, l’utente che ha appena cambiato parola d’ordine e tentaun altro accesso sulla stessa macchina, potrebbe trovarsi spaesato di fronte al rifiuto che gli sipresenta.

116.3 NIS e DNSIl NIS permette di distribuire le informazioni contenute nei file ‘/etc/hosts’ e ‘/etc/networks’. Questi sono i file di configurazione che permettono di risolvere i nomi dei nodidella rete locale, quando non si vuole fare uso di un DNS.

Attraverso questa possibilità è poi possibile configurare il file ‘/etc/host.conf’ dei variclienti NIS, in modo che venga utilizzata questa informazione. Di solito si tratta di indicare unariga come quella seguente:

order hosts,nis

Tuttavia, nel momento stesso in cui si pensa di volere utilizzare il NIS, si decide chel’organizzazione della rete locale è un problema serio, pertanto, anche la risoluzione dei nomidella rete deve essere considerato un problema ugualmente serio. In questo senso, diventa un con-trosenso la pretesa di gestire la risoluzione dei nomi attraverso NIS, quando con poco impegno sipuò attivare un servente DNS; al limite si possono unire le due cose:

order hosts,bind,nis

116.4 NIS, NIS+, NYS e come complicarsi la vitaPurtroppo non esiste un sistema NIS standard; ne esistono tre: NIS, NIS+ e NYS. Il primo, èil sistema NIS tradizionale, piuttosto debole dal punto di vista della sicurezza; il secondo è unsistema più complesso, con lo scopo di superare i limiti di sicurezza del NIS tradizionale; il terzoè il sistema che vuole incorporare le funzionalità di NIS+ e aggiungere altri vantaggi.

Il sistema NIS tradizionale è quello più comune; il NIS+ è disponibile solo su sistemi SunMicrosystems; il NYS è in corso di sviluppo e in linea di massima può essere usato almenocome un NIS normale.

Page 234:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1292 NIS

Per ogni tipo di servente NIS ci deve essere un programma cliente adatto, configurato conforme-mente alle particolarità del servizio da cui attinge. Oltre a questo, a seconda del tipo di servizioutilizzato ci sono esigenze diverse rispetto alle librerie.

In pratica, a meno di volere approfondire l’argomento studiando dettagliatamente le dipendenzeche ci sono tra i vari programmi di ogni tipo di NIS, conviene affidarsi alle scelte fatte dallapropria distribuzione GNU/Linux. Per quanto riguarda il servente può trattarsi solo di NIS o NYS,in quanto il NIS+ appartiene esclusivamente a Sun Microsystems; per il cliente dovrebbe trattarsidi quello adatto a connettersi con il servente NIS della distribuzione.23

116.5 RPCIl NIS utilizza le chiamate RPC per comunicare. Questo significa che è necessaria la presenzadel Portmapper in funzione sia nei nodi servente che nei nodi cliente (si veda eventualmente ilcapitolo 104).

È anche importante verificare che i servizi di sincronizzazione, time service, siano previstiall’interno del file ‘/etc/inetd.conf’, come mostrato nel pezzo seguente:

#

# Time service is used for clock syncronization.

#

time stream tcp nowait nobody /usr/sbin/tcpd in.timed

time dgram udp wait nobody /usr/sbin/tcpd in.timed

Se si devono apportare delle modifiche a questo file di configurazione, bisogna ricordare di riav-viare il supervisore Inet (vedere eventualmente il capitolo 103).

116.6 Allestimento di un servente NIS/NYSGli elementi indispensabili di un servente NIS sono i programmi ‘ypserv’ e ‘makedbm’. Il primosvolge il ruolo di demone in ascolto delle richieste NIS per il dominio di competenza, il secondoè necessario per convertire i file di configurazione normali in file DBM, cioè nelle mappe NIS.

Nel caso di un servente principale è anche opportuna la presenza di altri due demoni:‘rpc.passwdd’ e ‘rpc.ypxfrd’. Il primo serve a permettere la modifica delle parole d’ordinedegli utenti attraverso il sistema NIS, il secondo serve a facilitare l’aggiornamento ai serventisecondari.

La configurazione di ‘ypserv’ e ‘rpc.ypxfrd’ può dipendere dal modo in cui sono stati compi-lati i sorgenti rispettivi. In generale si utilizza il file ‘/etc/ypserv.conf’ per definire il com-portamento di entrambi i programmi; inoltre ‘ypserv’ può far uso di ‘/var/yp/securenets’

per conoscere gli indirizzi di rete da cui può accettare interrogazioni NIS, oppure può riutilizzare itradizionali ‘/etc/hosts.allow’ e ‘/etc/hosts.deny’. Per saperlo basta usare l’opzione‘-version’, come nell’esempio seguente:

# ypserv -version[ Invio ]

ypserv - NYS YP Server version 1.1.7 (with tcp wrapper)

L’esempio mostra il risultato di un ‘ypserv’ NYS compilato con il supporto per l’utilizzo deifile ‘/etc/hosts.allow’ e ‘/etc/hosts.deny’, gli stessi che utilizza il TCP wrapper

2Anche se la propria distribuzione GNU/Linux non dovesse includerlo, esiste comunque un cliente adatto a utilizzareil servizio NIS+.

3Il vero problema di tutto questo sta nel fatto che sono poche le distribuzioni GNU/Linux che pongono attenzione alNIS, così capita spesso che la configurazione definita in fase di compilazione dei sorgenti non sia perfetta. Tra le tantecose, potrebbe capitare che i file di configurazione debbano essere collocati in ‘/usr/etc/’, invece che in ‘/etc/’

(questo solo a titolo di esempio). Di certo, mano a mano che l’interesse sul NIS degli utenti aumenterà, maggiore sarà lacura che vi verrà messa.

Page 235:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1293

(‘tcpd’) allo scopo di filtrare gli accessi ai programmi controllati dal supervisore Inet.

Prima di poter avviare il servente ‘ypserv’, oltre a provvedere per la sua configurazione, oc-corre necessariamente che il Portmapper RPC sia in funzione e che il dominio NIS sia statodefinito. In assenza di una sola di queste due condizioni, il programma ‘ypserv’ non funziona,nel senso che non si riesce ad avviarlo.

116.6.1 Dominio NISIl dominio NIS viene definito attraverso ‘domainname’, nel modo seguente:

domainname dominio_nis

Quando viene usato senza argomenti, si ottiene il nome del dominio NIS; in questo modosi può controllare se l’impostazione è corretta. Per esempio, l’impostazione del dominio NIS‘rost.nis-yp’ può essere fatta e controllata nel modo seguente:

# domainname rost.nis-yp[ Invio ]

# domainname[ Invio ]

rost.nis-yp

Mentre l’impostazione del dominio è di competenza dell’utente ‘root’, la verifica può essere fattaanche da un utente comune.

116.6.2 # domainnamedomainname [opzioni] [dominio_nis]nisdomainname [opzioni] [dominio_nis]ypdomainname [opzioni] [dominio_nis]‘domainname’ (con i suoi alias) permette di modificare o visualizzare il nome del dominio NIS.

Alcune opzioni

-F file | --file file

Permette di definire il nome di un file contenente il nome del dominio.

Esempi

L’utilizzo tipico di ‘domainname’ è riservato agli script della procedura di inizializzazionedel sistema. Le istruzioni necessarie potrebbero essere organizzate nel modo seguente:

# Set the NIS domain name

if [ -n "$NISDOMAIN" ]

then

domainname $NISDOMAIN

else

domainname ""

fi

Oppure in modo alternativo anche come segue, dove il nome del dominio è contenuto in unfile. In tal caso, bisogna fare attenzione al fatto che il file in questione deve essere compostoesclusivamente da una riga, altrimenti viene presa in considerazione solo l’ultima, ma sequesta è vuota, il dominio non viene definito.

Page 236:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1294 NIS

# Set the NIS domain name

if [ -f "/etc/nisdomain" ]

then

domainname -F /etc/nisdomain

else

domainname ""

fi

116.6.3 Avvio di ypservIn condizioni normali, ‘ypserv’ non richiede l’uso di argomenti particolari, al massimo sitratta di controllare il file di configurazione ‘/etc/ypserv.conf’ e l’eventuale ‘/var/yp/securenets’ (prima si deve verificare con l’opzione ‘-version’ se questo file è necessario,o se al suo posto si usano i file di configurazione del TCP wrapper). In ogni caso, è importanteche la directory ‘/var/yp/’ sia stata creata (al suo interno si dovrebbe trovare un file-make, maquesto verrà mostrato in seguito).

# ypserv[ Invio ]

Se tutto va bene, il programma si avvia sullo sfondo e si disassocia dalla shell, diventando unprocesso figlio di quello iniziale (Init).

# pstree[ Invio ]

init-+-...

|-portmap

|-...

‘-ypserv

Se il Portmapper RPC non fosse attivo, oppure se non fosse stato definito il dominio NIS,l’avvio di ‘ypserv’ non dovrebbe riuscire. Eventualmente, si può verificare il funzionamentodel Portmapper stesso, attraverso il comando seguente:

# rpcinfo -p localhost[ Invio ]

program vers proto port

100000 2 tcp 111 rpcbind

100000 2 udp 111 rpcbind

...

Le righe che si vedono dall’esempio mostrato sono la dichiarazione esplicita del funzionamentodel Portmapper. Per verificare espressamente la connessione con ‘ypserv’, si può usare il co-mando seguente:

# rpcinfo -u localhost ypserv[ Invio ]

program 100004 version 2 ready and waiting

116.6.4 # ypserv (NYS)ypserv [opzioni]‘ypserv’ è il demone che si occupa di servire un dominio NIS con le informazioni definite dallemappe relative. ‘ypserv’ accetta alcune opzioni nella riga di comando, ma viene configuratofondamentalmente attraverso il file ‘/etc/ypserv.conf’. Per il suo funzionamento correttoè necessario che il sistema RPC sia funzionante, che sia stato definito il dominio NIS e che ladirectory ‘/var/yp/’ sia stata predisposta.

Page 237:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1295

Alcune opzioni

-d [percorso_yp] | -debug [percorso_yp]Utilizzando questa opzione si fa in modo che ‘ypserv’ funzioni in modalità diagnostica.Per questo, invece di passare sullo sfondo, continua a funzionare occupando il terminale dalquale è stato avviato, emettendo informazioni particolareggiate su ciò che avviene attraversolo standard error. Eventualmente si può indicare un percorso come argomento dell’opzione,intendendo fare in modo che ‘ypserv’ utilizzi le mappe contenute a partire da quella direc-tory, invece di quelle che si trovano a partire da ‘/var/yp/’.

-b | -dns

Specifica che se un nodo non viene identificato diversamente, si deve utilizzare il servizioDNS.

-v | -version

Visualizza i dati riferiti alla particolare versione di ‘ypserv’. Questa indicazione è moltoimportante, soprattutto per sapere quali file vengono utilizzati per controllare gli indirizziche possono accedere al servizio.

Esempi

‘ypserv’, quando tutto è configurato correttamente, viene avviato dalla procedura diinizializzazione del sistema, attraverso uno dei suoi script. L’esempio che segue rappre-senta un modo semplice per ottenere questo, dove la variabile di ambiente ‘NISDOMAIN’

viene usata per contenere il dominio NIS; se manca questa variabile non ha senso avviare ilservente NIS.

if [ -n "$NISDOMAIN" ]

then

if [ -f /usr/sbin/ypserv ]

then

/usr/sbin/ypserv

echo ypserv

fi

fi

Quello mostrato è solo uno dei tanti modi; in generale bisogna ricordare che si può avviareil servizio NIS solo dopo aver avviato il Portmapper.

Nelle distribuzioni più accurate, è normale trovare uno script apposito che permette diavviare e di interrompere l’attività del servente NIS, assieme a tutto quello di cui po-trebbe avere bisogno. Questo genere di script può trovarsi nelle directory ‘/etc/rc.d/init.d/’, ‘/etc/init.d/’ e altre possibili.

116.6.5 /etc/ypserv.confLa configurazione di ‘/etc/ypserv.conf’ riguarda il funzionamento di ‘ypserv’ e‘rpc.ypxfrd’. Ogni volta che si fanno dei cambiamenti a questa configurazione occorre riav-viare questi demoni o inviare loro un segnale ‘SIGHUP’.

L’impostazione di questo file può essere anche molto complicata. In linea di massima ci si puòfidare della configurazione predefinita, o dei suggerimenti posti nei suoi commenti.

Il file può contenere commenti, rappresentati inizialmente dal simbolo ‘#’, righe vuote (o bianche),direttive riferite a opzioni e direttive riferite a regole di accesso. Le direttive di opzione hanno laforma seguente, dove la parola chiave ‘yes’ attiva l’opzione, mentre ‘no’ la disattiva.

opzione:[yes|no]Le direttive di accesso hanno il formato seguente:

Page 238:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1296 NIS

host:mappa:livello_sicurezza:soppressione[:campo]

Direttive di opzione

‘dns’

Attivando questa opzione, si fa in modo che il servente NIS utilizzi il DNS quando glivengono richieste informazioni sui nodi che non può risolvere con le mappe ‘hosts.*’.Il valore predefinito è ‘no’, e questa opzione può essere attivata anche attraverso la riga dicomando di ‘ypserv’, ‘-dns’, cosa che prende la precedenza su quanto stabilito in questofile di configurazione.

‘sunos_kludge’

L’attivazione di questa opzione permette di rispondere alle chiamate utilizzate da ‘ypbind’

di SunOS 4. Il valore predefinito per questa opzione è ‘yes’, ma la compatibilità con SunOSnon è completa.

‘tryresolve’

Questa opzione riguarda la risoluzione dei nomi dei nodi. Il suo valore predefinito è ‘no’ enon serve in un sistema GNU/Linux.

‘xfr_check_port’

Attivando questa opzione, il servente principale deve utilizzare una porta inferiore al numero1 024. Il valore predefinito è ‘yes’.

Campi delle direttive di accesso

host

Si tratta di un indirizzo IP che può rappresentare un solo nodo o un gruppo. La rappresenta-zione può essere fatta attraverso un indirizzo IP incompleto, o la coppia indirizzo/maschera.Un indirizzo IP incompleto rappresenta tutti gli indirizzi che iniziano in quel modo, per cui,per esempio, «192.168.» equivale alla notazione 192.168.0.0/255.255.0.0, dove il secondoindirizzo è la maschera.

mappa

Il nome della mappa, oppure un asterisco per identificare tutte le mappe.

livello_sicurezza

Il livello, o il tipo di sicurezza, viene definito attraverso una parola chiave: ‘none’, ‘port’,‘deny’, ‘des’. Il loro significato viene descritto di seguito.

• ‘none’

Concede qualunque accesso.

• ‘port’

Permette di accedere se la porta è inferiore al numero 1 024, ma solo se è stata specifi-cata la soppressione.

• ‘deny’

Vieta l’accesso alla mappa in questione.

• ‘des’

Richiede l’autenticazione DES. Può funzionare solo se le librerie utilizzate hanno ilsupporto per questa funzionalità.

soppressione

Può contenere solo una tra le parole chiave ‘yes’ e ‘no’. ‘yes’ attiva la soppressione delcampo specificato. La soppressione implica che al suo posto viene collocata una «x», se ilcontrollo della porta rivela che la richiesta proviene da un accesso non privilegiato.

campo

Serve a specificare quale campo deve essere soppresso. Quello predefinito è il secondo.

Page 239:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1297

Esempi

L’esempio seguente rappresenta una configurazione predefinita di una distribuzioneGNU/Linux.

# Some options for ypserv. This things are all not needed, if

# you have a Linux net.

sunos_kludge: no

tryresolve: no

dns: no

# The following, when uncommented, will give you shadow like passwords.

# Note that it will not work if you have slave NIS servers in your

# network that do not run the same server as you.

# Host : Map : Security : Passwd_mangle

#

# * : passwd.byname : port : yes

# * : passwd.byuid : port : yes

# Not everybody should see the shadow passwords, not secure, since

# under MSDOG everybody is root and can access ports < 1024 !

* : shadow.byname : port : yes

# If you comment out the next rule, ypserv and rpc.ypxfrd will

# look for YP_SECURE and YP_AUTHDES in the maps. This will make

# the security check a little bit slower, but you only have to

# change the keys on the master server, not the configuration files

# on each NIS server.

# If you have maps with YP_SECURE or YP_AUTHDES, you should create

# a rule for them above, that’s much faster.

* : * : none

Si è già accennato al fatto che i file di configurazione potrebbero essere cercati nelladirectory ‘/usr/etc/’ invece che nella solita ‘/etc/’. Se si avvertono difficoltà, èconsigliabile di utilizzare un collegamento simbolico all’interno di ‘/usr/etc/’ chepunti al file corrispondente nella directory ‘/etc/’.

116.6.6 /var/yp/securenetsIl file ‘/var/yp/securenets’ viene usato da ‘ypserv’ per sapere quali sono gli indirizziammessi a eseguire interrogazioni nel sistema NIS. Bisogna ricordare che ‘ypserv’ potrebbeessere stato compilato per non usare questo file, utilizzando al suo posto ‘/etc/hosts.allow’

e ‘/etc/hosts.deny’. Questo lo si determina utilizzando l’opzione ‘-version’.

Nel caso in cui ‘ypserv’ utilizzi questo file, se manca o è vuoto, vengono consentiti tutti gliaccessi in modo indiscriminato. Ogni volta che si modifica il file è necessario riavviare ‘ypserv’,oppure gli si deve inviare un segnale ‘SIGHUP’.

A parte i commenti, rappresentati dalle righe che iniziano con il simbolo ‘#’, e le righe vuote,questo file è fatto principalmente per annotare coppie di indirizzi IP, dove il primo è la maschera eil secondo l’indirizzo della rete a cui si vuole concedere l’accesso. L’esempio seguente è simile aquello che si trova nella pagina di manuale ypserv(8) e dovrebbe essere sufficiente a comprendereil meccanismo.

Page 240:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1298 NIS

# Consente le connessioni dallo stesso elaboratore locale (è necessario)

# Equivale a 255.255.255.255 127.0.0.1

#

host 127.0.0.1

#

#

# Permette le connessioni da tutti gli elaboratori della rete locale

# 192.168.1.0

#

255.255.255.0 192.168.1.0

116.6.7 Configurazione e preparazione delle mappeLe mappe NIS, come già accennato, sono collocate nella directory ‘/var/yp/dominio_nis/’.I file delle mappe esistenti, per il solo fatto di esserci, definiscono implicitamente quali siano idati amministrativi che vengono gestiti in quel dominio NIS particolare. La loro creazione e illoro aggiornamento, avvengono attraverso un file-make che si trova nella directory ‘/var/yp/’

e che generalmente viene utilizzato attraverso uno script. Il problema, semmai, sta nella necessitàdi modificare tale file-make per definire quali mappe debbano essere costruite.

In linea di principio non è conveniente lasciare le cose come sono. Il NIS è un sistema troppocomplesso perché un principiante possa permettersi di attivare subito la gestione completa di tuttele informazioni amministrative. Nell’esempio che segue viene mostrata una parte del file-makefornito con una particolare distribuzione GNU/Linux (non importa quale), modificato in mododa gestire esclusivamente le informazioni sugli utenti e i gruppi, senza password shadow. È beneribadire che questo file-make è solo un esempio, come guida per la modifica di quello che si trovacon la propria distribuzione.

# This Makefile should only be run on the NIS master server of a domain.

#...

# If this machine is an NIS master, comment out this next line so

# that changes to the NIS maps can be propagated to the slave servers.

# (By default we assume that we are only serving a small domain with

# only one server.)

#

#NOPUSH = "True"

#...

# If you don’t want some of these maps built, feel free to comment

# them out from this list.

# Note that we don’t build the ethers or bootparams maps by default

# since /etc/ethers and /etc/bootparams are not likely to be present

# on all systems.

#

all: passwd group ypservers

##all: passwd hosts group netid networks protocols rpc services netgrp \

## mail shadow ypservers publickey ethers # amd.home auto.master

### auto.home bootparams

ethers: ethers.byname ethers.byaddr

hosts: hosts.byname hosts.byaddr

Page 241:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1299

networks: networks.byaddr networks.byname

protocols: protocols.bynumber protocols.byname

rpc: rpc.byname rpc.bynumber

services: services.byname

passwd: passwd.byname passwd.byuid

group: group.byname group.bygid

shadow: shadow.byname

netid: netid.byname

netgrp: netgroup netgroup.byhost netgroup.byuser

publickey: publickey.byname

mail: mail.aliases

#...

Nella prima parte viene definito, attraverso una variabile, se il servente deve occuparsi di spediregli aggiornamenti (push) ai serventi secondari. In questo caso, commentando l’assegnamento dellavariabile ‘NOPUSH’ si ottiene di mantenere attivo questo aggiornamento.4

Più avanti, l’obiettivo ‘all’ permette di definire quali mappe costruire. Dall’esempio si può vedereciò che veniva proposto, commentato, e quello che serve per generare esclusivamente le mappeabbinate ai file ‘/etc/passwd’ e ‘/etc/group’. Il nome ‘ypservers’ si riferisce al file ‘/var/yp/ypservers’, che viene utilizzato per contenere l’elenco dei serventi (principale esecondari) competenti per il dominio (verrà chiarito in seguito).

Una volta predisposto il file-make, si può usare il programma ‘make’, senza argomenti, oppuresi può utilizzare un comando specifico (è la scelta più elegante, mentre ‘make’ è la scelta piùsemplice quando si raggiunge una certa dimestichezza con il sistema).

# /usr/lib/yp/ypinit -m

Il vero vantaggio nell’utilizzo di questo programma (che poi è in realtà uno script), sta nel fatto cheprovvede a costruire al volo il file ‘/var/yp/servers’, con l’elenco dei serventi competentiper il dominio che si sta predisponendo.

At this point, we have to construct a list of the hosts which will run NIS

servers. dinkel.brot.dg is in the list of NIS server hosts.

Please continue to add the names for the other hosts, one per line.

When you are done with the list, type a <control D>.

next host to add: dinkel.brot.dg

next host to add:

Questa operazione va condotta dall’elaboratore che deve svolgere il ruolo di servente principale,di conseguenza, il suo indirizzo deve apparire per primo. Supponendo di avere un secondo elabo-ratore da utilizzare come servente secondario, si può aggiungere il suo nome e quindi terminarecon la combinazione [ Ctrl+d ].

next host to add: roggen.brot.dg[ Invio ]

next host to add: [ Ctrl+d ]

The current list of NIS servers looks like this:

dinkel.brot.dg

roggen.brot.dg

4Se non serve, o non funziona, si ottiene al massimo una segnalazione di errore nel momento in cui si utilizza ilfile-make, senza altri effetti collaterali.

Page 242:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1300 NIS

Is this correct? [y/n: y]

[ Invio ]

We need some minutes to build the databases...

Building /var/yp/rost.nis-yp/ypservers...

Running /var/yp/Makefile...

NIS Map update started on Sun May 31 23:00:14 CEST 1998

make[1]: Entering directory ‘/var/yp/rost.nis-yp’

Updating passwd.byname...

Updating passwd.byuid...

Updating group.byname...

Updating group.bygid...

make[1]: Leaving directory ‘/var/yp/rost.nis-yp’

NIS Map update completed.

Questo è il tipo di risultato che si può osservare quando tutto procede regolarmente. Se nonsi utilizza lo script ‘ypinit’, si salta la predisposizione del file ‘/var/yp/rost.nis-yp/ypservers’, che però potrebbe essere già stato ottenuto da un’esecuzione precedente di‘ypinit’. In pratica, lo script ‘ypinit’ va utilizzato convenientemente la prima volta che si alle-stisce il servente, mentre le altre volte è sufficiente utilizzare solo ‘make’ dalla directory ‘/var/yp/’.

116.6.8 # rpc.yppasswddrpc.yppasswdd [opzioni]Il demone ‘rpc.yppasswdd’ deve essere utilizzato solo nel servente principale e la sua pre-senza permette agli utenti di cambiare la parola d’ordine di accesso attraverso il programma‘yppasswd’.

Le opzioni disponibili dipendono molto dalla versione di questo programma e dal modo con cuiè stato compilato. È da questo programma che dipende anche la possibilità o meno di utilizzare‘ypchsh’ e ‘ypchfn’. In generale, utilizzandolo senza opzioni particolari, è possibile solo la mo-difica della parola d’ordine.

116.7 Predisposizione del servente secondarioI serventi secondari, ammesso che se ne vogliano avere, devono poter comunicare con il serventeprincipale, ma naturalmente ciò richiede implicitamente che questi, oltre che serventi secondari,siano anche dei clienti. Più avanti verrà spiegato come predisporre un cliente NIS; per il momentoè bene affrontare ugualmente il problema, per mantenere mentalmente il collegamento con quantogià trattato sul servente principale.

Un servente secondario richiede le stesse cose del servente principale, a eccezione del demone‘rpc.yppasswdd’ che nel servente secondario non ha ragione di esistere. Questo significa che:

• si deve impostare il dominio NIS;

• si deve configurare ‘ypserv’ attraverso ‘/etc/ypserv.conf’ e ‘/var/yp/securenets’, oppure gli altri file del TCP wrapper.

Si è già accennato al fatto che il servente secondario deve avere il cliente NIS in funzione, mala differenza più interessante sta nell’assenza del file-make nella directory ‘/var/yp/’. Natural-mente, il file-make può anche esserci, ma non deve essere preso in considerazione.

Page 243:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1301

116.7.1 Riproduzione delle mappe nel servente secondarioAnche il servente secondario, per poter compiere il suo lavoro, deve disporre delle mappe NIS.Queste vengono create, copiandole dal servente principale, attraverso il comando seguente:

/usr/lib/yp/ypinit -s servente_NIS_principale

In pratica, si avvia ‘ypinit’ con l’opzione ‘-s’, indicando il nome dell’elaboratore che ospitail servente principale. Per esempio, se il servente principale è dinkel.brot.dg, il comandocorretto è il seguente:

# /usr/lib/yp/ypinit -s dinkel.brot.dg

Perché l’operazione funzioni correttamente, occorre che il cliente NIS sottostante sia configuratoe funzionante. In pratica, prima di utilizzare ‘ypinit’, si può verificare che sia tutto in ordine conil comando seguente:

# ypwhich -m

Questo deve restituire il nome del servente principale.

116.7.2 SincronizzazioneLa presenza di serventi secondari introduce nel sistema NIS dei problemi di sincronizzazione diquesti con il servente principale. Oltre a tutto, lo stesso procedimento di sincronizzazione accrescei problemi di sicurezza, dal momento che periodicamente viaggiano informazioni delicate nellarete.

Ci sono tre modi per sincronizzare i serventi secondari, ma non tutti funzionano sempre, a causadegli accorgimenti utilizzati per ridurre i problemi di sicurezza.

1. Quando il servente principale viene aggiornato, dovrebbe essere in grado di inviare aiserventi secondari le modifiche alle mappe (push). Questa operazione non funziona se iserventi secondari non sono in ascolto in quel momento, inoltre non funziona anche in altrecircostanze, sempre per motivi di sicurezza.

2. I serventi secondari possono comunicare periodicamente con il servente principale perverificare la presenza di aggiornamenti delle mappe. Questa operazione richiede nel serventeprincipale la presenza in funzione del demone ‘rpc.ypxfrd’.

3. In ultima analisi, i serventi secondari si aggiornano con il comando ‘ypinit -s

servente_principale’.

Per quanto riguarda il secondo punto, il NIS offre generalmente tre script predisposti op-portunamente per eseguire i compiti di aggiornamento. Si tratta di: ‘ypxfr_1perhour’,‘ypxfr_1perday’ e ‘ypxfr_2perday’. Questi si trovano nella directory ‘/usr/lib/yp/’ esono pensati per essere inclusi in un file crontab, come nell’esempio seguente che rappresentaprecisamente il file ‘/etc/crontab’.

20 * * * * root /usr/lib/yp/ypxfr_1perhour

40 6 * * * root /usr/lib/yp/ypxfr_1perday

55 6,18 * * * root /usr/lib/yp/ypxfr_2perday

I diversi script si occupano di trasferire mappe differenti. In particolare, quello eseguito ogni oraè predisposto per trasferire le informazioni sugli utenti (la cosa più urgente).

Dal momento che non si può fare affidamento sul sistema di aggiornamento pilotato dal serventeprincipale (quello del primo punto), se per qualche motivo l’aggiornamento a mezzo di ‘ypxfr’

non funziona, occorre ripiegare necessariamente sull’uso periodico di ‘ypinit -s’, eventual-mente collocando anch’esso in un file crontab.

Page 244:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1302 NIS

116.7.3 # rpc.ypxfrdrpc.ypxfrd [opzioni]Il demone ‘rpc.ypxfrd’ viene utilizzato solo nel servente principale per facilitarel’aggiornamento delle mappe nei serventi secondari. La sua presenza non è indispensabile, maè utile per accelerare il processo di aggiornamento.

Generalmente può essere utilizzato senza argomenti e dovrebbe essere avviato dalla procedura diinizializzazione del sistema.

116.8 Cliente NIS e NYSGli elaboratori che devono condividere le informazioni amministrate con il NIS, devono utiliz-zare il cliente ‘ypbind’, configurato opportunamente. In tal modo, su tali elaboratori, invece diutilizzare le informazioni amministrative locali, verranno usate quelle concentrate dal NIS.

Quando si utilizza precisamente NYS, i servizi svolti da ‘ypbind’ potrebbero essere forniti diret-tamente dalle librerie del sistema. Tuttavia, anche in questa circostanza, alcuni programmi come‘ypwhich’ e ‘ypcat’ continuano a richiedere la presenza di ‘ypbind’.

La configurazione di ‘ypbind’ e anche quella di NYS (con le sue librerie), avviene attraverso ifile ‘/etc/yp.conf’ e ‘/etc/nsswitch.conf’. Il primo serve a definire come raggiungerei serventi; il secondo definisce l’ordine di utilizzo dei servizi (Name Service Switch).

Come nel caso dei serventi, anche i clienti richiedono la definizione del dominio NIS, attraverso‘domainname’. Se il dominio non viene predisposto ‘ypbind’ non può funzionare.

Anche il cliente richiede la presenza della directory ‘/var/yp/’. Al suo interno viene creata ladirectory ‘binding/’.

Anche il cliente richiede l’attivazione del Portmapper RPC.

116.8.1 Gli utentiA seconda delle caratteristiche particolari del cliente, sono possibili delle configurazioni specialiper ciò che riguarda l’accesso da parte degli utenti. Quando la loro gestione è compito del NIS, sipuò configurare il cliente in modo da definire una graduatoria nella ricerca dei dati che identifi-cano l’utente al momento dell’accesso. Di solito si cerca prima l’utente nel file ‘/etc/passwd’

locale, quindi si prova con il NIS.

A parte questo particolare abbastanza semplice, si può porre il problema di voler concederel’accesso su un certo elaboratore solo ad alcuni utenti definiti attraverso il NIS, oppure, più sem-plicemente, si può volere escludere l’accesso da parte di qualcuno. Per ottenere questo occorreintervenire sul file ‘/etc/passwd’ utilizzando record con notazioni particolari; cosa che quinon viene descritta.

In generale, per fare in modo che gli utenti NIS del dominio a cui si fa riferimento possanoaccedere da un certo cliente, occorre aggiungere nel file ‘/etc/passwd’ il record seguente:

+::::::

Questo viene interpretato come il punto in cui si vogliono inserire virtualmente gli utenti NIS. Èprobabile che, per fare in modo che vengano utilizzati prima i dati degli utenti già registrati inquel cliente, questo record debba essere collocato alla fine del file.

Quando si usa NYS, non dovrebbe essere necessario aggiungere questa indicazione; tuttavia, sec’è non può creare danno.

116.8.2 # ypbind

Page 245:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1303

ypbind [opzioni]‘ypbind’ è un demone per l’attivazione dell’accesso alle informazioni fornite da un servente NIS;è in pratica il cliente NIS. Utilizza la directory ‘/var/yp/binding/’ per collocarci all’internoun file contenente le informazioni sul dominio NIS per il quale è stato avviato.

‘ypbind’ utilizza la configurazione del file ‘/etc/yp.conf’ per trovare i serventi e quella delfile ‘/etc/nsswitch.conf’ per stabilire l’ordine di utilizzo delle informazioni amministra-tive.

Alcune opzioni

-debug

Fa in modo che ‘ypbind’ continui a funzionare in primo piano, in modo da emettere unaserie di informazioni diagnostiche attraverso lo standard error.

116.8.3 /etc/yp.confIl file ‘/etc/yp.conf’ serve a definire come accedere ai serventi. Viene utilizzato sia da‘ypbind’ che dalle librerie NYS.

‘ypbind’ potrebbe essere in grado di utilizzare solo l’ultima riga di questo file. Di conseguenza,è bene limitarsi a una sola direttiva.

Il file può contenere tre tipi di direttive, descritte dalle sintassi seguenti.

domain dominio_nis server host

domain dominio_nis broadcast

ypserv host

La prima definisce che per il dominio NIS indicato si deve interpellare il servente specificato;la seconda definisce che per il dominio si devono usare delle chiamate circolari a tutta la rete(locale); l’ultima definisce semplicemente un servente, indipendentemente dal dominio.

Quando si utilizza il sistema della chiamata circolare (broadcast), si rischia di ricevere la rispostada un possibile servente fasullo, collocato appositamente per sostituirsi a quelli veri allo scopo dicarpire informazioni dai clienti. Se non si temono attacchi di questo tipo, la chiamata circolare èil modo migliore per fare in modo che il cliente sia in grado di scegliersi il servente (quello cherisponde prima).

Il servente, quando deve essere identificato, può essere indicato per nome o per numero IP. Nelprimo caso, è necessario che il sistema sia in grado di risolvere il nome in modo indipendente dalNIS (evidentemente). In generale, è conveniente utilizzare l’indirizzo IP per questo scopo.

L’esempio seguente mostra l’unica riga di un file ‘/etc/yp.conf’ in cui si stabilisce che per ildominio ‘rost.nis-yp’ si deve usare la chiamata circolare.

domain rost.nis-yp broadcast

116.8.4 /etc/nsswitch.confIl file ‘/etc/nsswitch.conf’ viene usato dal cliente NIS per determinare l’ordine in cuidevono essere richiesti i servizi. La sua configurazione dovrebbe riguardare tutti i tipi di datiamministrativi gestibili con il NIS, anche se di fatto ne sono stati abilitati solo alcuni. In questomodo, la determinazione di cosa gestire con il NIS viene fatta solo nel servente principale.

Page 246:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1304 NIS

Quello che segue è la configurazione proposta in una particolare distribuzione GNU/Linux. Si puòosservare che le informazioni sugli utenti (‘passwd’, ‘shadow’, ‘group’) sono cercate prima neifile locali, quindi nel servizio NIS.

#

# /etc/nsswitch.conf

#

# An example Name Service Switch config file. This file should be

# sorted with the most-used services at the beginning.

#

# The entry ’[NOTFOUND=return]’ means that the search for an

# entry should stop if the search in the previous entry turned

# up nothing. Note that if the search failed due to some other reason

# (like no NIS server responding) then the search continues with the

# next entry.

#

# Legal entries are:

#

# nisplus or nis+ Use NIS+ (NIS version 3)

# nis or yp Use NIS (NIS version 2), also called YP

# dns Use DNS (Domain Name Service)

# files Use the local files

# [NOTFOUND=return] Stop searching if not found so far

#

passwd: files nisplus nis

shadow: files nisplus nis

group: files nisplus nis

hosts: files nisplus nis dns

services: nisplus [NOTFOUND=return] files

networks: nisplus [NOTFOUND=return] files

protocols: nisplus [NOTFOUND=return] files

rpc: nisplus [NOTFOUND=return] files

ethers: nisplus [NOTFOUND=return] files

netmasks: nisplus [NOTFOUND=return] files

bootparams: nisplus [NOTFOUND=return] files

netgroup: nisplus

publickey: nisplus

automount: files nisplus

aliases: files nisplus

116.8.5 $ ypwhichypwhich [opzioni]‘ypwhich’ permette di conoscere quale sia il servente NIS utilizzato dal cliente, quando vieneavviato senza opzioni, oppure quale sia precisamente il servente principale per una certa mappa.Questo programma dipende da ‘ypbind’, che così deve essere presente anche se si utilizza il NYS.

Alcune opzioni

Page 247:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NIS 1305

-d dominio

Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre co-munque che tale dominio diverso sia stato collegato.

-m [mappa]Permette di conoscere quale sia il servente principale per la particolare mappa specificata, oper tutte quelle che vengono raggiunte.

Esempi

$ ypwhich

Emette il nome dell’elaboratore che funge da servente NIS per quel particolare cliente.

$ ypwhich -m

Emette l’elenco delle mappe gestire dal NIS con i rispettivi serventi principali competenti.

116.8.6 $ ypcatypcat [opzioni] mappa

‘ypcat’ emette il contenuto di una mappa indicata come argomento della riga di comando. Questoprogramma dipende da ‘ypbind’, che così deve essere presente anche se si utilizza il NYS.

Alcune opzioni

-d dominio

Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre co-munque che tale dominio diverso sia stato collegato.

Esempi

$ ypcat group.byname

Emette il contenuto della mappa corrispondente all’elenco dei gruppi per nome.

116.8.7 $ ypmatchypmatch [opzioni] chiave... mappa

‘ypmatch’ emette il valori corrispondenti a una o più chiavi di una mappa. Questo programmadipende da ‘ypbind’, che così deve essere presente anche se si utilizza il NYS.

Alcune opzioni

-d dominio

Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre co-munque che tale dominio diverso sia stato collegato.

Esempi

$ ypmatch tizio caio passwd.byname

Emette i record corrispondenti agli utenti ‘tizio’ e ‘caio’.

$ ypmatch 500 passwd.byuid

Emette il record corrispondente all’utente identificato dal numero UID 500.

Page 248:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1306 NIS

116.8.8 $ yppasswd, ypchsh, ypchfnyppasswd [utente]ypchsh [utente]ypchfn [utente]‘yppasswd’, ‘ypchsh’ e ‘ypchfn’ sono tre alias dello stesso programma. A seconda del nomeusato per avviarlo, si intende cambiare la parola d’ordine, la shell o le informazioni personali.

Questi comandi si sostituiscono ai soliti ‘passwd’, ‘chsh’ e ‘chfn’, che hanno effetto solo lo-calmente, quando si vuole intervenire sulle utenze gestite dal NIS. A questo proposito, è beneconsiderare la possibiltà di fare «sparire» i comandi normali, in modo da non creare confusioneagli utenti, predisponendo dei collegamenti simbolici opportuni per fare in modo che ‘passwd’,‘chsh’ e ‘chfn’ avviino rispettivamente i corrispondenti ‘yppasswd’, ‘ypchsh’ e ‘ypchfn’.

Questi comandi, quando vengono invocati, si mettono in contatto con il servente principale, nelquale deve essere in funzione il demone ‘rpc.passwdd’. È da questo demone che dipende lapossibilità di cambiare questi valori, ma potrebbe capitare che sia abilitata solo la sostituzionedelle parole d’ordine.

Solo l’utente ‘root’ può indicare il nome di un altro utente attraverso la riga di comando.

116.9 Directory personaliQuando si gestiscono gli utenti (e i gruppi) attraverso il NIS, si intende permettere a tutti questiutenti di utilizzare indifferentemente tutte le macchine su cui si fa funzionare il cliente NIS. Perraggiungere questo obiettivo, occorre fare in modo che le rispettive directory personali (home)siano accessibili da qualunque postazione. Evidentemente è necessario usare uno spazio condivisoin rete, attraverso il protocollo NFS.

Il modo più semplice potrebbe essere quello di predisporre una partizione apposita in un serventeNFS, montando tale file system nella directory ‘/home/’ di ogni cliente NIS. Come si può intuirenon si tratta di una soluzione ottimale, ma comunque è qualcosa di pratico, almeno inizialmente.

Il file system condiviso dovrà essere accessibile in lettura-scrittura.

La gestione del protocollo NFS è descritta nel capitolo 105.

116.10 Riferimenti

• Thorsten Kukuk, The Linux NIS(YP)/NYS/NIS+ HOWTO�

http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 249:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 117DHCPLa sigla DHCP sta per Dynamic Host Configuration Protocol e identifica un protocollo attraversoil quale un gruppo di nodi può essere configurato in modo automatico e dinamico, per ciò cheriguarda la sua connessione nella rete.

Per comprendere il problema, si immagini un ufficio con una rete locale chiusa, in cui si voglionopoter collocare dei nodi senza troppi problemi, soprattutto senza dover stabilire prima gli indirizziIP e i nomi corrispondenti.

Per attuare questo meccanismo attraverso il protocollo DHCP, occorre un servente che sia in gradodi rispondere a una richiesta del genere, con dei clienti in grado di fare tale richiesta adeguandosialla risposta ricevuta. 1

Quando un cliente contatta un servente DHCP per la priva volta, tra i due viene concordato untempo di validità per la configurazione assegnata al cliente. Ciò permette all’elaboratore clientedi mantenere quella configurazione per un certo tempo, senza che questa debba essere necessaria-mente ridefinita ogni volta che lo si riavvia. Questo tempo viene indicato con il termine lease ed ècompito del servente tenere memoria dei nodi che possono trovarsi nella rete di sua competenza;i clienti dovranno richiedere ogni volta al servente i dati per la loro configurazione, ma almeno sicerca di fare in modo che questi restino uguali per il tempo di lease, che deve essere configuratoin modo conveniente in base alle caratteristiche della rete.2

117.1 Introduzione e sistemazioni generaliIl cliente che tenta di contattare un servente DHCP deve utilizzare una chiamata circolare. Perquesto, i kernel utilizzati negli elaboratori cliente e quello del servente, devono essere statipredisposti opportunamente per il multicasting (sezione 26.2.9).

Si verifica facilmente che sia disponibile questa caratteristica attraverso ‘ifconfig’, dando unaconfigurazione transitoria a un’interfaccia e quindi visualizzando il suo stato come nel casoseguente:

# ifconfig eth0[ Invio ]

eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0

TX packets:87 errors:0 dropped:0 overruns:0

Interrupt:12 Base address:0xff80

In questo caso si vede apparire la parola ‘MULTICAST’, che rappresenta l’attivazione della modalitàcorrispondente, risolvendo ogni dubbio.

Un servente DHCP potrebbe avere qualche difficoltà a funzionare correttamente con GNU/Linux.Il servente DHCP deve essere in grado di trasmettere dei pacchetti all’indirizzo IP255.255.255.255, corrispondente idealmente a «tutti i nodi». Può darsi che per poterlo fare, sidebba creare un instradamento apposito, su tutte le interfacce di rete attraverso cui il serventedeve essere raggiungibile e da cui deve poter rispondere.

# route add -host 255.255.255.255 dev eth0

# route add -host 255.255.255.255 dev eth11DHCP software libero con licenza speciale2Il termine inglese fa intendere che il cliente «affitta» la sua posizione nella rete.

1307

Page 250:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1308 DHCP

L’esempio, in particolare, mostra l’instradamento attraverso le interfacce ‘eth0’ e ‘eth1’.3

Nelle versioni 2.2.* del kernel Linux, potrebbe essere necessario abilitare la funzionalità di IPboot agent, attraverso un comando simile a quello seguente:

# echo 1 > /proc/sys/net/ipv4/ip_bootp_agent

117.1.1 Rete di competenza e routerTeoricamente, dovrebbe essere possibile fare in modo che il servente DHCP riceva le richieste deiclienti anche se queste devono attraversare dei router. In pratica, ciò richiede che i router siano ingrado di trasferire tali richieste, oppure che presso di loro sia presente un servizio intermedio direlè (relay). Comunque, si tratterebbe di una politica amministrativa discutibile.

In generale, il servente DHCP dovrebbe essere collocato nella rete fisica che si trova a servire,mentre le richieste dei clienti non dovrebbero poter attraversare i router.

L’utilizzo del protocollo DHCP può costituire un problema serio di sicurezza; in questosenso, sarebbe meglio se i router non fossero in grado di trasferire le connessioni con questoprotocollo.

117.1.2 Conflitto con /etc/inetd.confNormalmente, il protocollo DHCP utilizza la porta 67 UDP, che di solito è denominata ‘bootps’.Nel file ‘/etc/inetd.conf’ dovrebbe essere presente una riga simile a quella seguente, com-mentata nello stesso modo.

#bootps dgram udp wait root /usr/sbin/tcpd bootpd

Si tratta della possibile attivazione del servizio BOOTP, che in condizioni normali si evita diabilitare. Se però fosse abilitata, questo andrebbe in conflitto con i demoni usati per il DHCP, sianel nodo del servente che in quelli dei clienti.

117.1.3 Informazioni gestibili attraverso DHCPAttraverso il protocollo DHCP, i clienti possono ricevere una serie di informazioni utili a defi-nire la loro collocazione nella rete circostante. Il minimo indispensabile di tali informazioni ècostituito normalmente dall’indirizzo IP e dalla maschera di rete. Dipende dalle caratteristichedel servente la possibilità di offrire informazioni aggiuntive. L’elenco seguente è solo un esempiodelle informazioni che potrebbero essere date:

• l’indirizzo IP e la maschera di rete;

• l’indirizzo broadcast;

• il nome del nodo e il dominio relativo;

• l’indirizzo del router predefinito;

• l’indirizzo del servente DNS;

• l’indirizzo del servente di stampa;

• il dominio NIS.

3Questo problema di GNU/Linux potrebbe essere risolto in modo più elegante nel prossimo futuro.

Page 251:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DHCP 1309

117.2 Servente DHCPIl servente DHCP che si trova di solito nelle distribuzioni GNU/Linux è quello la cui produzioneè finanziata dal Internet Software Consortium. Viene fatta questa precisazione, perché in seguitoverrà mostrato l’utilizzo di un cliente di origine differente.

Questo servente si compone del demone ‘dhcpd’, il quale si avvale della configurazione conte-nuta nel file ‘/etc/dhcpd.conf’, inoltre utilizza il file ‘/etc/dhcpd.leases’ per anno-tare gli indirizzi concessi ai vari clienti, finché questi restano validi. Questo ultimo file, ‘/etc/dhcpd.leases’, deve esistere (vuoto) prima che il demone possa essere avviato la prima volta.

Il problema di organizzazione del servente si limita quindi alla configurazione del file ‘/etc/dhcpd.conf’. Attualmente, questo tipo di servente è in corso di sviluppo e la documentazionerelativa alla sua configurazione potrebbe essere rimasta un po’ indietro rispetto alle effettive po-tenzialità offerte.

117.2.1 # dhcpddhcpd [opzioni] [interfacce...]‘dhcpd’ è il demone attraverso cui si attiva il servizio DHCP. ‘dhcpd’ è in grado di offrire ancheun servizio BOOTP, se la configurazione contiene le informazioni necessarie per la gestione diquesto tipo di protocollo.

In generale, ‘dhcpd’ non richiede alcun argomento nella riga di comando, limitandosi così a leg-gere la configurazione e a porsi in ascolto di tutte le interfacce in grado di gestire il multicast,funzionando come demone. L’indicazione di una o più interfacce di rete, alla fine degli argomenti,permette di specificare dove ‘dhcpd’ deve porre la sua attenzione, ignorando le altre eventual-mente presenti.

Alcune opzioni

-p n_porta

‘dhcpd’ è in ascolto normalmente della porta UDP numero 67 (‘bootps’), ma ciò può esserecambiato attraverso questa opzione.

-cf file_di_configurazione

Permette di definire un file di configurazione alternativo a quello predefinito.

-lf file_lease

Permette di definire un file alternativo a quello predefinito per l’accumulo delle informazionisui nodi che hanno ottenuto un indirizzo IP.

117.2.2 /etc/dhcpd.confLa configurazione con il file ‘/etc/dhcpd.conf’ permette di definire il funzionamento di‘dhcpd’, sia per la gestione del protocollo DHCP, che per BOOTP. Qui si intendono mostrare solole direttive utili per il protocollo DHCP.

In questo file sono ammessi i commenti, preceduti dal simbolo ‘#’ e terminati dalla fine della rigain cui appaiono. È consentito inoltre spaziare le direttive attraverso righe vuote o righe bianche,che vengono ignorate.

Le direttive sono organizzare in forma di struttura, in cui appare la dichiarazione di ciò a cui fariferimento tale struttura, seguita dall’indicazione di una serie di parametri specifici, racchiusi traparentesi graffe.

[parametro_globale;][parametro_globale;]

Page 252:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1310 DHCP

...

dichiarazione�

[parametro_specifico;]...

[sotto_dichiarazione�

[parametro_più_specifico;]...

�]

...�

...

Lo schema sintattico è un po’ confuso a prima vista, ma significa che il file può iniziare conuna serie di direttive facoltative contenenti l’indicazione di alcuni parametri (si chiarirà in seguitodi cosa può trattarsi), il cui effetto ha valore globale, salvo la possibilità di essere offuscati dadefinizioni contrastanti all’interno di direttive di dichiarazione.

Il file deve contenere almeno una direttiva di dichiarazione che può limitarsi a contenere deiparametri specifici, oppure può inglobare delle sotto-dichiarazioni.

La cosa migliore, per cominciare, è introdurre un esempio. Si supponga di volere servire la retelocale 192.168.1.0/255.255.255.0, specificando che gli indirizzi da 192.168.1.100 a 192.168.1.199possono essere gestiti per le attribuzioni dinamiche di indirizzi IP. Il file di configurazione puòlimitarsi a contenere quanto segue:

subnet 192.168.1.0 netmask 255.255.255.0�

range 192.168.1.100 192.168.1.199;�

La direttiva di dichiarazione ‘subnet’, come si può intuire, è quella più importante per la gestionedel DHCP. Nella maggior parte dei casi, la configurazione si comporrà di una o più direttive diquesto tipo, contenenti probabilmente più parametri di quanto visto nell’esempio.

Prima di mostrare più in dettaglio le altre direttive, viene presentato un altro esempio, che potrebbesoddisfare le esigenze più comuni di chi utilizza ‘dhcpd’ (a parte i valori particolari che sono statiindicati). Rispetto all’esempio precedente si nota la presenza di due intervalli di indirizzi IP dautilizzare per l’attribuzione automatica; per il resto, momentaneamente, dovrebbe essere intuitivoil significato.

subnet 192.168.1.0 netmask 255.255.255.0�

range 192.168.1.100 192.168.1.149;

range 192.168.1.200 192.168.1.249;

default-lease-time 604800; # una settimana

max-lease-time 2592000; # 30 giorni

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.1.255;

option routers 192.168.1.1;

option domain-name-servers 192.168.1.1, 192.168.1.2;

option domain-name "brot.dg";�

Prima di proseguire, si osservi che i parametri sono terminati dal punto e virgola. È ammessoindicare più parametri sulla stessa riga, anche se in generale è preferibile evitarlo.

Alcune dichiarazioni

shared-network nome�

[parametro;]...

Page 253:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DHCP 1311

dichiarazione�

...�

...�

Come si osserva dalla sintassi, una dichiarazione ‘shared-network’ è fatta per l’inclusionedi altre dichiarazioni e non solo di parametri.

Permette di specificare una rete condivisa, nel senso di due o più reti logiche che si trovanosulla stessa rete fisica. In questa situazione, è normale che la direttiva includa l’indicazionedi più dichiarazioni ‘subnet’, una per ogni rete logica. Il problema, semmai, è che quandosi collocano dei nodi nuovi nella rete condivisa, non è possibile distinguere a quale dellereti logiche dovrebbero appartenere; di conseguenza, ottengono semplicemente il primo in-dirizzo libero nell’insieme globale.

group�

[parametro;]...

dichiarazione�

...�

...�

La dichiarazione ‘group’ serve solo a definire un raggruppamento di dichiarazioni, a cuiattribuire una serie di parametri in modo predefinito. Evidentemente si tratta dei parametriche precedono le direttive delle dichiarazioni annidate.

subnet indirizzo_di_rete netmask maschera_di_rete�

[parametro;]...

La dichiarazione ‘subnet’ serve a contenere l’indicazione di parametri specifici per la sot-torete. Permette di definire una sottorete, indicata attraverso l’indirizzo e la maschera direte.

Alcuni parametridefault-lease-time n_secondi;

Definisce il tempo predefinito per la scadenza dell’associazione tra nodo e indirizzo IP as-segnato. Viene utilizzato se il cliente non richiede una durata differente.

max-lease-time n_secondi;

Definisce il tempo massimo per la scadenza dell’associazione tra nodo e indirizzo IP asse-gnato. Il cliente non può ottenere un tempo maggiore (che comunque può essere rinnovato).

range indirizzo_ip_iniziale indirizzo_ip_finale;

Indica l’intervallo di indirizzi IP utilizzabili in modo dinamico. Più intervalli separati pos-sono essere indicati utilizzando più volte questo tipo di parametro.

option subnet-mask maschera_di_rete;

Permette di specificare la maschera di rete, modificando eventualmente quanto stabilito inmodo predefinito.

option broadcast-address indirizzo_broadcast;

Permette di definire l’indirizzo broadcast.

option routers indirizzo_ip_del_router;

Permette di indicare l’indirizzo IP del router predefinito.

Page 254:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1312 DHCP

option domain-name-servers indirizzo_dns[,...];Permette di indicare un elenco di indirizzi di serventi DNS. Gli indirizzi sono separati attra-verso una virgola.

option domain-name "dominio";

Stabilisce il nome di dominio. Di solito si tratta del dominio della rete o della sottorete a cuisi fa riferimento.

117.3 Relè DHCPNello stesso pacchetto del servente DHCP descritto nelle sezioni precedenti, si trova normalmenteil demone ‘dhcrelay’. Questo è in grado di fungere da ripetitore per una richiesta fatta da uncliente DHCP, quando questa, diversamente, non può attraversare un router.

All’inizio del capitolo si è accennato al fatto che sarebbe meglio evitare che un servizio DHCPpossa superare i router; tuttavia, chi desidera utilizzare ugualmente tale possibilità, lo può fareattraverso questo programma.

dhcrelay [opzioni] servente_dhcp...

‘dhcrelay’ è un demone in grado di ritrasmettere le richieste fatte da un cliente DHCP a unservente che altrimenti non sarebbe raggiungibile. Nello stesso modo, le risposte vengono rinviateall’origine.

‘dhcrelay’ non richiede configurazione; l’unica cosa indispensabile è l’indicazione di almenoun servente DHCP alla fine della riga di comando.

Alcune opzioni-p n_porta

Permette di specificare un numero di porta differente da quello standard (67).

-i interfaccia

Permette di indicare in modo esplicito un’interfaccia di rete da cui ‘dhcrelay’ può aspet-tarsi delle richieste da parte di clienti DHCP. Per indicare più interfacce, occorre usare piùvolte questa opzione. Questa opzione è utile in particolare per escludere eventualmenteun’interfaccia di una rete fisica su cui potrebbe esserci già il servente DHCP relativo, ingrado di intervenire da solo.

117.4 Cliente DHCPIl cliente DHCP ha il compito di interpellare un servente attraverso una chiamata circolare fattanella rete fisica in cui si trova lo stesso cliente, ottenendo da questo l’indicazione del numero IPda utilizzare, assieme ad altre informazioni di contorno eventuali. Successivamente, ha il compitodi ripresentarsi presso il servente periodicamente, per evitare che scada il tempo concesso perl’identificazione che gli è stata attribuita (lease).

Il problema maggiore, semmai, è fare in modo che il sistema presso cui è in funzione il clienteDHCP sia in grado di adeguarsi alle informazioni ottenute in questo modo. Non basta saperequale indirizzo IP si può utilizzare per una certa interfaccia di rete, occorre anche configurarlae definire l’instradamento. A questo proposito, il cliente DHCP è un punto delicato, per cui lascelta, ammesso che ce ne sia più di una, va fatta pensando all’integrazione con il proprio sistemaoperativo.

Nelle distribuzioni GNU/Linux si trova normalmente il programma ‘dhcpcd’ che non fa partedello stesso pacchetto del servente già descritto ed è anche ciò che verrà presentato in questocapitolo.

Page 255:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

DHCP 1313

117.4.1 # dhcpcddhcpcd [opzioni] [interfaccia]‘dhcpcd’ 4 è un demone in grado di compiere il ruolo di cliente DHCP. È in grado di ottenerel’indicazione dell’indirizzo IP, della maschera di rete, dell’indirizzo del router, del servente DNSoltre ad altre informazioni eventualmente fornite.

Il pregio principale di questo cliente è quello di essere capace di riconfigurare l’interfaccia di retee di ridefinire l’instradamento in modo autonomo, senza richiedere la predisposizione di scriptappositi o di qualunque apparato di contorno.

Il limite di questo programma sta nel fatto di poter intervenire su una sola interfaccia di rete, chein modo predefinito è ‘eth0’.

Per quanto riguarda l’informazione del DNS, ‘dhcpcd’ crea un file che riproduce il contenuto di ‘/etc/resolv.conf’; si tratta di ‘/etc/dhcpc/resolv.conf’. Per le altre informazioni,comprese quelle sull’interfaccia di rete e sull’instradamento, crea un altro file che ha l’aspettodi un pezzo di script di shell, che potrebbe essere utilizzato in qualche tipo di procedura diinizializzazione del sistema. Si tratta di ‘/etc/dhcpc/hostinfo-interfaccia’.

Alcune opzioni

-k

Invia un segnale ‘SIGTERM’ al processo ‘dhcpcd’ in funzione attualmente.

-l n_secondi

Specifica il tempo di lease da richiedere al servente. Il servente potrà accettarlo o concedereun tempo inferiore, a seconda della sua configurazione.

Esempi

# dhcpcd

Avvia ‘dhcpcd’ in modo normale, come demone, allo scopo di ottenere un indirizzo perl’interfaccia ‘eth0’.

# dhcpcd eth1

Avvia ‘dhcpcd’ come demone, in modo da ottenere un indirizzo per l’interfaccia ‘eth1’.

117.4.2 /etc/dhcpc/resolv.confSe il servente DHCP fornisce le indicazioni sui serventi DNS ed eventualmente anche il dominiodi competenza, ‘dhcpcd’ è in grado di creare il file ‘/etc/dhcpc/resolv.conf’, il cui scopoè di sostituirsi a quello omonimo collocato nella directory ‘/etc/’.

Se si vuole sfruttare questa opportunità, conviene sostituire il file ‘/etc/resolv.conf’ conun collegamento simbolico a questo file generato da ‘dhcpcd’.

# mv /etc/resolv.conf /etc/resolv.conf.orig

# ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf

4dhcpcd GNU GPL

Page 256:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1314 DHCP

117.4.3 /etc/dhcpc/hostinfo-*Il file ‘/etc/dhcpc/hostinfo-interfaccia’ viene creato da ‘dhcpcd’ per contenere tutte leinformazioni riferite a un’interfaccia particolare. Per esempio, quando si interviene su ‘eth0’, siotterrà il file ‘/etc/dhcpc/hostinfo-eth0’.

Il contenuto del file è realizzato in modo da essere compatibile con gli script per una shell derivatada quella di Bourne (come Bash, o altre meno sofisticate), per cui è facile inglobare tale file inuno script di una qualche procedura.

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 257:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 118NTPIl protocollo NTP, Network Time Protocol consente di gestire una serie di nodi di rete in gradodi sincronizzare tra loro l’orologio interno di ognuno. Il problema della gestione di un orologiouniforme a livello globale terrestre, non è facile da gestire; nello stesso modo non è facile dadescrivere. Lo scopo di del capitolo è solo quello di mostrare in che modo utilizzare un serviziopubblico di questo tipo, per l’allineamento di un nodo di rete locale, con il quale si possono poiallineare gli altri nodi della propria rete.

La dipendenza dall’esterno per quanto riguarda la gestione degli orologi dei propri elaboratori,può costituire un problema di sicurezza. A questo proposito, il protocollo NTP offre anche lapossibilità di utilizzare comunicazioni cifrate e altri sistemi di sicurezza, che comunque quinon vengono descritti.

Per l’accesso a un servente NTP in qualità di cliente e per la gestione di servente in proprio, siutilizza generalmente la «distribuzione NTP», 1 rappresentata in pratica da un pacchetto che do-vrebbe chiamarsi Ntp, o qualcosa del genere. I componenti più importanti di questa distribuzionesono il demone ‘ntpd’ (oppure ‘xntpd’) e il programma ‘ntpdate’.

118.1 Accesso a un servente NTPPer lo scopo di questo capitolo, si accede a un servente NTP solo per ottenere l’informazionesull’ora esatta. Questo si ottiene molto facilmente con il programma ‘ntpdate’, che è anche ingrado di aggiustare l’orario del sistema. Tuttavia, prima di vedere come funziona, occorre saperedove è possibile ottenere tale servizio e quali sono le regole di comportamento.

Trascurando i problemi legati alla gestione dei serventi NTP pubblici, quello che c’è da sapere èche questi sono organizzati in modo gerarchico a due livelli. L’accesso ai serventi del primo li-vello è da escludere in generale, a meno che questo serva per gestire un servizio privato dal qualeattingono un numero molto grande di altri clienti; l’accesso ai serventi di secondo livello è con-sentito quasi a tutti (ognuno ha la sua politica) e in generale il risultato è accurato in modo più chesufficiente. Una volta chiarito che si accede di norma solo ai serventi di secondo livello, è oppor-tuno sceglierne alcuni relativamente vicini (per quanto questo non sia indispensabile). L’elencodei serventi NTP, con l’indicazione delle politiche rispettive, si trova a partire dall’URI �

http://

www.eecis.udel.edu/˜mills/ntp/servers.html � . Ai fini degli esempi che si vogliono mostrare, verranno uti-lizzati gli indirizzi di fantasia a.ntp.dg, b.ntp.dg e c.ntp.dg.

118.1.1 # ntpdatentpdate [opzioni] servente_ntp...

Lo scopo principale di ‘ntpdate’ è quello di acquisire l’ora esatta da uno o più serventi NTP edi aggiustare di conseguenza l’orario del sistema locale. L’utilizzo di ‘ntpdate’ è adatto partico-larmente per gli elaboratori che sono connessi alla rete esterna solo saltuariamente, dal momentoche si può effettuare l’allineamento esattamente nel momento in cui ciò è possibile. Con l’usodelle opzioni necessarie, si può evitare che ‘ntpdate’ allinei l’orario del sistema, limitandosi amostrare il risultato; in questi casi, può essere utilizzato anche dagli utenti comuni e non soltantoda ‘root’.

‘ntpdate’ non può essere avviato se è già in funzione il demone ‘ntpd’, o un altro analogo.

1NTP software libero con licenza speciale

1315

Page 258:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1316 NTP

Alcune opzioni

-b

In condizioni normali, ‘ntpdate’ può scegliere di aggiustare l’orario aggiungendo o sot-traendo secondi, oppure intervenendo sulla frequenza della base dei tempi. Per evitare chevenga scelta la seconda ipotesi, si utilizza questa opzione, che limita la possibilità alla mo-difica dell’orario senza altri interventi. In condizioni normali, dovrebbe essere preferibilel’uso di ‘ntpdate’ con questa opzione.

-d

Invece di allineare l’orario del sistema, vengono mostrati i passi compiuti da ‘ntpdate’, ascopo diagnostico.

-q

Invece di allineare l’orario del sistema, mostra solo il risultato dell’interrogazione deiserventi.

-s

Invece di mostrare i messaggi sullo schermo, li devia nel registro del sistema, cosa chefacilita l’utilizzo di ‘ntpdate’ all’interno di script avviati automaticamente in circostanzedeterminate.

Esempi

# ntpdate -q a.ntp.dg b.ntp.dg c.ntp.dg

Visualizza l’ora esatta ottenuta dai serventi a.ntp.dg, b.ntp.dg e c.ntp.dg.

# ntpdate -b a.ntp.dg b.ntp.dg c.ntp.dg

Aggiusta l’orario del sistema in base a quanto determinato dai serventi a.ntp.dg,b.ntp.dg e c.ntp.dg.

# ntpdate -b -s a.ntp.dg b.ntp.dg c.ntp.dg

Come nell’esempio precedente, con la differenza che ogni segnalazione viene inviata nelregistro del sistema.

118.2 Preparazione di un servente NTP per l’utilizzolocaleLa preparazione di un servente NTP per offrire il servizio solo alla propria rete locale, senza pre-tendere di contribuire alla rete NTP pubblica, è un’operazione abbastanza semplice. In particolare,se il nodo di rete che svolge tale ruolo è connesso continuamente alla rete esterna, si può usare lostesso demone ‘ntpd’ per allineare l’orologio dell’elaboratore in cui si trova a funzionare, senzabisogno di utilizzare ‘ntpdate’, che tra le altre cose non può essere avviato se è già attivo ildemone.

Il funzionamento del demone ‘ntpd’ dipende dalla configurazione stabilita attraverso il file ‘/etc/ntp.conf’, mentre il programma ‘ntpdate’ ignora questo file completamente.

118.2.1 Configurazione con /etc/ntp.confIl file ‘/etc/ntp.conf’ è il più importante per ciò che riguarda il funzionamento del demone‘ntpd’. È composto da direttive che occupano ognuna una riga; i commenti sono preceduti dalsimbolo ‘#’ e nello stesso modo sono ignorate le righe bianche e quelle vuote. Senza entrare neldettaglio delle varie direttive disponibili, viene descritto un esempio di massima.

# /etc/ntp.conf

Page 259:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NTP 1317

logfile /var/log/xntpd

driftfile /var/lib/ntp/ntp.drift

statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

# Serventi

server a.ntp.dg

server b.ntp.dg

server c.ntp.dg

Con la direttiva ‘logfile’ viene dichiarato il percorso del file delle registrazioni. Se non venisseutilizzata tale direttiva, i messaggi di questo tipo sarebbero diretti normalmente al registro delsistema. Nel caso dell’esempio, si fa riferimento al file ‘/var/log/xntpd’.

logfile file_delle_registrazioni

Con la direttiva ‘driftfile’ viene dichiarato il percorso del file utilizzato da ‘ntpd’ per an-notarsi lo scarto tra la frequenza dell’oscillatore locale e ciò che dovrebbe essere in realtà. Dalmomento che ‘ntpd’ deve poter cambiare nome al file e ricrearlo nuovamente, non può trattarsi diun collegamento simbolico. In generale, è sufficiente lasciare che sia ‘ntpd’ a occuparsi di crearee gestire questo file.

driftfile file_dello_scarto

Con la direttiva ‘statsdir’ viene dichiarato il percorso di una directory all’interno della qualepossono essere creati dei file di informazioni statistiche, dichiarati a loro volta attraverso le diret-tive ‘statistics’ e ‘filegen’.

statsdir directory_dei_file_statistici

I tipi di informazioni statistiche che si vogliono accumulare sono definiti attraverso la di-rettiva ‘statistics’, per mezzo di parole chiave prestabilite: ‘loopstats’, ‘peerstats’ e‘clockstats’. In generale, conviene attivare la gestione di tutti i tipi di informazioni statisti-che, così come si vede nell’esempio.

statistics tipo_statistica...

Per abbinare all’accumulo di un tipo di statistica un file vero e proprio, si utilizza la direttiva‘filegen’. Nell’esempio vengono creati tre file, con il nome corrispondente al tipo di statisticadi cui si occupano.

filegen tipo_statistica [file file] [type tipo_di_analisi] [enable|disable]Per la precisione, la direttiva ‘filegen’ serve anche per definire il modo in cui vanno gestite di-verse generazioni dei file che vengono creati. In pratica, il tipo stabilito attraverso l’argomentodell’opzione ‘type’, permette di indicare con quale frequenza devono essere archiviati i file.L’esempio mostra la richiesta di utilizzare generazioni giornaliere (l’argomento ‘day’) e questo,salvo esigenze particolari, dovrebbe andare bene in generale.

Infine, le direttive più importanti per lo scopo che ci si prefigge in questo capitolo, sono quelle chestabiliscono i nomi dei serventi di riferimento per ottenere le informazioni sull’orario. In generale,più sono questi serventi, meglio è.

server host [prefer]Se uno di questi serventi viene considerato come quello più attendibile, si può aggiungere la parola

Page 260:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1318 NTP

chiave ‘prefer’, come si vede nello schema sintattico.

118.2.2 # ntpdntpd [opzioni]Il demone ‘ntpd’ (oppure ) serve da una parte per allineare continuamente l’orario del sistema lo-cale, quando questo si trova connesso costantemente a una rete che gli consente di accedere ai suoiserventi di riferimento, in base alla configurazione del file ‘/etc/ntp.conf’, con le direttive‘server’. Dall’altra parte, questo demone offre anche il servizio NTP, basandosi sull’orologio delsistema locale.

In una rete chiusa, in cui non ci sia la possibilità di raggiungere altri serventi NTP, il demone‘ntpd’ può essere utile per allestire il proprio servizio NTP locale, in modo da assicurare la sin-cronizzazione degli altri elaboratori della propria rete.

All’interno di questi due estremi, in una rete in cui un nodo abbia saltuariamente accesso allarete esterna, quel nodo può essere allineato (quanto possibile), al tempo di riferimento ottenutodall’esterno, fungendo da servente locale per l’allineamento successivo della propria rete. Tutta-via, in questo caso si aggiunge il problema di procedere all’allineamento in base alle fonti esterne,esattamente nel momento in cui il collegamento è disponibile; ma per questo si utilizza preva-lentemente il programma ‘ntpdate’, che però non può essere avviato quando il demone è già infunzione. Questo problema verrà riproposto in seguito.

Alcune opzioni

-c file_di_configurazione

In generale, il file di configurazione utilizzato da ‘ntpd’ è ‘/etc/ntp.conf’. Con questaopzione si può indicare un file differente, oppure si può confermare la collocazione standard,nel caso i sorgenti siano stati compilati indicando posizioni differenti.

-d

La presenza di questa opzione, che può essere indicata anche ripetutamente, aumenta illivello di dettaglio delle informazioni diagnostiche che si ottengono (nel registro del sistemao in un altro file stabilito in base alla configurazione).

-l file_delle_registrazioni

Equivalente alla direttiva ‘logfile’ nel file di configurazione.

-f file_dello_scarto

Equivalente alla direttiva ‘driftfile’ nel file di configurazione.

-s directory_dei_file_statistici

Equivalente alla direttiva ‘statsdir’ nel file di configurazione.

Esempi

#!/bin/sh

test -f /usr/sbin/ntpd || exit 0

case "$1" in

start)

echo -n "Avvio del servizio NTP: "

/usr/sbin/ntpd

echo

;;

stop)

Page 261:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

NTP 1319

echo -n "Disattivazione del servizio NTP: "

killall ntpd

echo

;;

*)

echo "Utilizzo: ntpd�start|stop

�"

exit 1

esac

L’esempio mostra uno script molto semplificato per l’avvio e la conclusione del servizioNTP, attraverso il controllo del demone ‘ntpd’. In pratica, il demone viene avviato senzaopzioni di alcun tipo, confidando che legga correttamente il file di configurazione.

Alcune distribuzioni GNU/Linux predispongono uno script del genere, in cui, primadell’avvio del demone ‘ntpd’ eseguono ‘ntpdate’ per iniziare con un orologio già al-lineato. In generale, questa potrebbe essere una buona idea; tuttavia, se questo scriptviene avviato quando non si può accedere ai serventi NTP a cui si vuole fare riferimento,‘ntpdate’ blocca la procedura di avvio troppo a lungo.

start)

echo -n "Avvio del servizio NTP: "

/usr/sbin/ntpdate -b -s a.ntp.dg b.ntp.dg c.ntp.dg

/usr/sbin/ntpd

echo

;;

Il pezzo di script che si vede rappresenta proprio il caso in cui viene avviato anche‘ntpdate’ prima di mettere in funzione ‘ntpd’. Si osservi il fatto che nella riga di comandodevono apparire i serventi NTP, perché il file di configurazione di ‘ntpd’ non lo riguarda.

118.3 Gestire una rete locale collegata saltuaria-mente alla rete esternaDa quanto scritto fino a qui, in questo capitolo dedicato a NTP, si dovrebbe riuscire già a imma-ginare in che modo ci si potrebbe comportare per allestire un servizio NTP locale, sfruttando unaccesso esterno saltuario, per esempio attraverso una connessione PPP con una linea commutata(PSTN o ISDN). Di certo, conviene collocare il servente locale nell’elaboratore che compie sal-tuariamente questa connessione e che in quel momento ha un accesso normale all’esterno: nelmomento in cui si può accedere alla rete esterna, si può utilizzare ‘ntpdate’ per allineare l’orariodell’elaboratore stesso.

Come è già stato accennato, si pone un problema a causa del fatto che lo stesso elaboratore deveavere in funzione il demone ‘ntpd’, che impedisce l’avvio di ‘ntpdate’. Evidentemente, perrisolvere il problema, occorre giocare sulla conclusione e riavvio del demone. La soluzione pro-posta è molto semplice: per prima cosa, lo script che avvia il demone ‘ntpd’ nella procedura diinizializzazione del sistema, non deve comprendere anche l’avvio di ‘ntpdate’; quindi occorrepredisporre l’avvio di ‘ntpdate’ solo quando la connessione PPP è disponibile (capitolo 122 esuccessivi).

#!/bin/sh

/etc/init.d/ntpd stop

/usr/sbin/ntpdate -b -s a.ntp.dg b.ntp.dg c.ntp.dg

/etc/init.d/ntpd start

Page 262:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1320 NTP

Quello che si vede è uno script molto semplice, il cui scopo è quello di disattivare il servizioNTP, richiamando lo script ‘/etc/init.d/ntpd’ con l’argomento ‘stop’, prima di avviare‘ntpdate’ (eventualmente questo script potrebbe trovarsi in un’altra directory e anche il suonome potrebbe essere differente). Dopo l’allineamento, il servizio NTP viene riavviato in modoanalogo.

Per fare in modo che tutto avvenga automaticamente, questo script potrebbe essere avviato attra-verso ‘/etc/ppp/ip-up’, che è un altro script avviato dal demone ‘pppd’ ogni volta che siattiva una connessione PPP.

La predisposizione dei clienti della rete locale non dovrebbe costituire alcun problema: si disponedi un solo servente di riferimento e ci si può limitare a utilizzare ‘ntpdate’, eventualmente riav-viandolo periodicamente attraverso Cron.

118.4 Riferimenti

• David L. Mills, Public NTP Time Servers�

http://www.eecis.udel.edu/˜mills/ntp/servers.html �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 263:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 119IRCIRC è un sistema di comunicazione in tempo reale per discussioni pubbliche, o private, in formascritta. Di per sé, IRC è l’evoluzione della comunicazione attraverso ‘talk’ (capitolo 108).

119.1 InfrastrutturaLo scopo di IRC, ovvero la realizzazione di un sistema di discussione pubblica a livello globale,richiede un’infrastruttura composta dai serventi IRC articolati in modo da formare una «rete»IRC.

Ragionando in piccolo, si può pensare alla realizzazione di un servente IRC singolo, presso ilquale si devono connettere tutte le persone che vogliono instaurare una forma di discussionequalunque. La distanza non è necessariamente un problema per chi si connette; tuttavia, diventaun problema la quantità di connessioni che verrebbero a essere aperte in modo simultaneo. Nellarealtà, queste connessioni possono essere molto numerose (diverse migliaia), soprattutto a causadella filosofia di IRC per la quale l’organizzazione dei canali di discussione è libera, per cui èindispensabile la presenza di un’infrastruttura che sia in grado di recepire tale massa di utenze.

Si parla di reti IRC, a indicare i gruppi di elaboratori che gestiscono assieme gli stessi canalidi comunicazione. Tali reti sono composte secondo una struttura ad albero, dove esiste un solopercorso possibile tra due nodi. Naturalmente, queste reti IRC si inseriscono praticamente sullarete Internet, sfruttando il protocollo TCP per il transito delle informazioni.

a d--------e

| |

| |

| |

b--------c--------f k

| |

| |

| |

g--------h--------i--------l

| |

| |

| |

j m

Figura 119.1. Rete di serventi IRC.

L’organizzazione interna della rete IRC è importante per fare in modo che transitino al suo internosolo le informazioni che sono indispensabili, dal momento che il volume di messaggi gestiti èenorme.

A livello di rete IRC si può individuare una persone con un ruolo speciale: l’operatore IRC.L’operatore IRC è l’amministratore di uno o più serventi IRC, nel senso che può impartire aquesti dei comandi speciali, relativi al loro funzionamento.

119.2 Canali, utenti e operatoriIn una rete IRC, le comunicazioni avvengono all’interno di canali creati dinamicamente; gliutenti della rete IRC sono individuati in base a un nominativo, definito nick. Non esiste unaregola nell’uso dei nominativi di identificazione degli utenti e nell’organizzazione dei canali di

1321

Page 264:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1322 IRC

comunicazione: l’utente che si presenta nella rete IRC chiede di usare un nominativo e lo ottienese questo non è già utilizzato; l’utente che chiede di accedere a un canale di comunicazione chenon esiste, lo crea automaticamente e ne diventa il suo operatore.

Naturalmente, un utente che cerca di accedere a una rete IRC lo fa connettendosi a un serventeIRC di quella rete; ma questo servente può definire una sua politica di accessi, per cui l’utentein questione potrebbe anche non essere ammesso ad accedere.

È importante comprendere la filosofia di IRC per ciò che riguarda i canali: questi vengono creatiautomaticamente nel momento in cui vengono richiesti per la prima volta; quindi scompaiono nelmomento in cui non ci sono più utenti collegati al loro interno. È importante anche chiarire il sensodell’operatore: si tratta dell’utente che crea inizialmente il canale, ovvero dell’utente che ricevequesto privilegio da un altro operatore. L’operatore, noto anche con l’abbreviazione di «oper»,oppure solo «op», ha la possibilità di stabilire la modalità di funzionamento del canale e puòanche allontanare altri utenti dal canale stesso. Segue l’elenco delle modalità più importanti di uncanale che sono controllate dall’operatore:

• si può accedere al canale a richiesta, oppure solo a seguito di un invito;

• si può specificare una parola d’ordine per l’accesso al canale;

• si può specificare il numero massimo di accessi, oltre l’operatore;

• si può rendere il canale moderato, per cui in pratica scrive solo l’operatore e gli utenti da luiautorizzati;

• si può bloccare la scrittura nel canale;

• si possono concedere i privilegi di operatore anche a un altro utente;

• si può rendere il canale privato, nel senso che non ne viene pubblicizzata la presenza;

• si può rendere il canale segreto, nel senso che non lo si vuole fare apparire nell’elenco deicanali presenti.1

Oltre al controllo sul funzionamento del canale, l’operatore può intervenire in modo privilegiato:

• può specificare il fatto che si tratti di un canale a tema;

• può consentire a un utente di scrivere in un canale moderato;

• può allontanare un utente o gruppi di utenti;

• può concedere un’eccezione nel caso di un canale che richieda l’invito.

Ogni utente, tra le altre cose, ha la possibilità di configurare il proprio accesso al canale in mododa rendersi parzialmente invisibile.

1In generale un canale può essere privato, segreto oppure pubblico.

Page 265:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IRC 1323

119.2.1 Divisione e ricongiunzione di reti IRCUna rete IRC può essere spezzata nel momento in cui un nodo che non è terminale cessa difunzionare per qualche ragione, oppure quando viene dato espressamente questo ordine da unoperatore IRC. In questa situazione si formano due reti, in cui continuano a funzionare i canaliper quanto possibile. Naturalmente, gli utenti che accedono a una di queste due reti risulterannoisolati rispetto all’altra rete.

La divisione della rete provoca quindi una crisi temporanea che alla fine si riassesta in qualchemodo più o meno automatico. Il vero problema nasce nel momento in cui le reti vengono riunite:i canali con lo stesso nome vengono fusi assieme, riunendo gli utenti. Questa riunione può creareun po’ di scompiglio, considerando che la modalità di funzionamento dei canali viene riadattatain modo da armonizzare le eventuali incompatibilità e che gli operatori vengono a sommarsi.

119.3 Comportamenti spiacevoliIRC è un sistema di comunicazione in cui gli utenti sono presenti simultaneamente nel momentoin cui scrivono e leggono i messaggi. Nelle discussioni più o meno pubbliche come queste ècomune il fatto che chi non sa stare alle regole di una discussione civile decida invece di esprimersiattraverso il dispetto, con la pretesa di dimostrare così la propria intelligenza.

Queste situazioni sono così comuni che ne derivano dei termini standard il cui significato dovrebbeessere conosciuto:

• bot è un programma cliente automatico che funziona in modo autonomo (robot), senza unutente che sta comunicando effettivamente;

• cloner è un utente che sta utilizzando presumibilmente più programmi clienti, ognuno deiquali è un clone in questo contesto;

• flooder è colui che inonda in qualche modo un utente allo scopo di allontanarlo dallacomunicazione.

Il bot, ovvero il programma che usa IRC da solo, è il mezzo attraverso cui si compiono degliattacchi, altrimenti non ci sarebbe bisogno di un programma automatico, dato che IRC è fatta percomunicare da umano a umano.

Il fatto di utilizzare diversi programmi clienti, mentre ne basterebbe uno solo per comunicareanche su più canali, può rappresentare l’intenzione di fare qualcosa di più della semplicecomunicazione.

119.4 Dal lato del serventeLa realizzazione di un servente IRC isolato è un’operazione relativamente semplice, limitandoil problema alla definizione di una politica di accessi al servizio. Qui non viene mostrato in chemodo organizzare invece una vera rete IRC, che evidentemente è un problema più impegnativo.

119.5 IrcdIrcd 2 è il servente IRC tipico dei sistemi Unix. In generale sono essenziali solo due file:l’eseguibile ‘ircd’ e il file di configurazione ‘ircd.conf’, che in un sistema GNU/Linux do-vrebbe trovarsi nella directory ‘/etc/ircd/’.

Ircd può essere avviato in modo autonomo, senza l’intervento del supervisore Inet, oppure sottoil suo controllo. Nel secondo caso, si deve provvedere a sistemare il file ‘/etc/inetd.conf’

aggiungendo la riga seguente:2Ircd GPL con residui BSD

Page 266:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1324 IRC

ircd stream tcp wait irc /usr/sbin/ircd ircd -i

Come si può osservare dall’esempio, conviene avviare l’eseguibile ‘ircd’ usando i privilegi di unutente fittizio definito appositamente per la gestione del servizio IRC; in questo caso si tratta di‘irc’.

Come si può osservare ancora dall’esempio riferito al file ‘/etc/inetd.conf’, si fa riferi-mento alla porta TCP attraverso la denominazione ‘ircd’, che di solito, secondo il file ‘/etc/services’ corrisponde al numero 6 667:

ircd 6667/tcp # Internet Relay Chat

ircd 6667/udp # Internet Relay Chat

Si intende che si tratta di una porta non privilegiata, giustificando la scelta di usare un utentefittizio diverso da ‘root’ per avviare ‘ircd’.

Il demone ‘ircd’ può essere configurato in modo da gestire autonomamente il protocolloIDENT e altri sistemi di controllo. In questo senso, generalmente non viene inserito il con-trollo del TCP wrapper.

119.5.1 Messaggio del giornoNel momento di una nuova connessione al servizio IRC, il servente mostra il messaggiodel giorno, che in un sistema GNU/Linux potrebbe essere contenuto nel file ‘/etc/ircd/ircd.motd’ (si tratta di un file di testo normale).

In generale è importante predisporre questo file in modo da mostrare le notizie essenziali che sivogliono far conoscere agli utenti IRC, soprattutto per ciò che riguarda le regole di comportamentorichieste.

119.5.2 ConfigurazioneLa configurazione può essere molto semplice per la realizzazione di un servente IRC interno,per una rete che non può essere raggiunta dall’esterno, ma ovviamente le cose cambiano nelmomento in cui si vuole realizzare una rete IRC. Qui vengono mostrate solo alcuni elementi dellaconfigurazione, utili per realizzare un servente singolo, senza problemi di accesso.

Il file di configurazione è un file di testo normale, dove le righe che iniziano con il simbolo ‘#’

sono commenti e le righe vuote o bianche vengono ignorate. Le direttive hanno una forma un po’strana, dove tutto inizia con una lettera che descrive il tipo di informazione che viene fornita dalladirettiva:

x:informazione_1:informazione_2:...:informazione_n

In generale si dovrebbe disporre di un file di configurazione di partenza adeguatamente commen-tato, con tutti gli esempi di queste direttive, anche se eventualmente commentate. Qui vengonodescritte solo alcune direttive essenziali per la realizzazione di un servente IRC locale e isolato.

Una cosa da considerare nel caso il file contenga direttive che devono essere elaborate secondoun ordine preciso è il fatto che il file viene letto in ordine inverso, ovvero vengono lette primale ultime direttive.

M

M:nome_del_servente:*:descrizione:porta:numero_servente

Questa direttiva serve a definire il nome di dominio del servente, la descrizione del servizioIRC, la porta in cui resta in ascolto il servente e il numero di ordine nella rete IRC. Questo

Page 267:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IRC 1325

ultimo numero è un intero che va da 1 a 64 e va stabilito in base alla gerarchia di una reteIRC; se si tratta dell’unico servente, deve essere necessariamente indicato il numero uno,come si vede nell’esempio seguente:

M:dinkel.brot.dg:*:Mia IRC:6667:1

Nel caso in cui il demone ‘ircd’ venga utilizzato attraverso il controllo del supervisore Inet,potrebbe essere necessario indicare una porta diversa da quella standard, per non interferirecon proprio con il supervisore stesso, che già apre quella porta. Per esempio:

M:dinkel.brot.dg:*:Mia IRC:8005:1

È da considerare il fatto che un demone ‘ircd’ compilato espressamente per l’utilizzo at-traverso il supervisore Inet potrebbe non essere in grado di funzionare in modo autonomo,in ogni caso.

A

A:riga_1:riga_2:...:riga_n

Si tratta della direttiva con cui si definiscono una serie di informazioni amministrative, chevengono elencate con il comando ‘/admin’. In pratica viene mostrato il contenuto dei campiin righe differenti. Si osservi l’esempio seguente che dovrebbe essere sufficientemente in-tuitivo:

A:Mia IRC:Servente IRC:Amministratore <[email protected]>

I

I:maschera_ip:parola_d’ordine:maschera_dominio::classe

Questa direttiva stabilisce i limiti di accesso al servizio in base a una maschera IP e a unamaschera del nome di dominio; queste maschere si riferiscono ovviamente ai nodi che acce-dono come clienti. Le maschere in questione si realizzano facilmente utilizzando il simbolo‘*’ come variabile indefinita. In generale, l’esempio seguente consente qualsiasi accesso:

I:*::*::1

Il campo finale, riferito alla classe, deriva dalla definizione delle classi attraverso le direttive‘Y’ che qui non vengono descritte, non essendo indispensabili. In ogni caso, il numero unorappresenta tutte le classi possibili simultaneamente.

Il campo centrale riservato a una parola d’ordine serve a consentire l’accesso solo attra-verso l’indicazione di questa. Tuttavia, a seconda di come è stato compilato il demone‘ircd’, questa potrebbe dover essere inserita in modo cifrato. In tal caso dovrebbe ancheessere presente un programma apposito per generare tali parole d’ordine cifrate.

K

K:maschera_nodo:motivazione:maschera_utente

Questa direttiva, che non è obbligatoria, consente di escludere esplicitamente una combina-zione di nodi e di utenti che tentano di accedere da questi nodi. Le maschere in questionesi realizzano con l’uso del carattere ‘*’, che rappresenta la solita stringa indefinita. In parti-colare, il nodo può essere indicato per nome (di dominio) oppure per numero IP. L’esempioseguente esclude gli utenti il cui nome inizia per ‘dan’ e accedono dalla rete *.brot.dg:

K:*.brot.dg:Accesso sospeso per un mese:dan*

Per concludere la descrizione della configurazione, l’esempio seguente mostra il caso di una con-figurazione minima, con le sole direttive indispensabili:

Page 268:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1326 IRC

M:dinkel.brot.dg:*:Mia IRC:8005:1

A:Mia IRC:Servente IRC:Amministratore <[email protected]>

I:*::*::1

119.5.3 # ircdircd [opzioni]...

Il demone ‘ircd’ può funzionare in due modi diversi: legato al supervisore Inet, oppure indipen-dentemente da questo. Nel primo caso si utilizza l’opzione ‘-i’ e nel file ‘/etc/inetd.conf’

non si inserisce il controllo di ‘tcpd’, perché si creerebbero dei problemi a causa dell’uso delprotocollo IDENT:

ircd stream tcp wait irc /usr/sbin/ircd ircd -i

Diversamente, il demone può essere avviato come un comando normale, senza nemmeno doveraggiungere la richiesta esplicita di funzionamento sullo sfondo. In effetti, dal momento che si uti-lizza normalmente una porta TCP non privilegiata, ogni utente comune può, teoricamente, avviarequesto tipo di servizio.

Alcune opzioni

-t

Fa in modo che il demone funzioni in primo piano, emettendo tutte le sue informazionidiagnostiche attraverso lo standard output.

-xn

Definisce il livello diagnostico richiesto: maggiore è il valore n, maggiore la quantità diinformazioni che si ottengono.

-i

Stabilisce che il demone è sotto il controllo del supervisore Inet.

-f file_di_configurazione

Stabilisce espressamente da quale file trarre la configurazione.

-c

Si usa questa opzione quando si avvia il demone attraverso uno script della procedura diinizializzazione del sistema, per cui è necessario che il demone stesso si sganci dallo scripte diventi un processo dipendente direttamente da Init.

119.6 Dal lato del clienteIl compito di un programma cliente IRC è quello di consentire la comunicazione effettiva tral’utente umano e il servente IRC. La prima cosa che avviene è la registrazione, attraverso la qualel’utente ottiene l’accesso al servizio assieme alla definizione del proprio nominativo.

Una volta instaurata la connessione, l’utente ha la possibilità di unirsi a uno o più canali di discus-sione, creandoli automaticamente se questi non sono già presenti.

119.7 ircIIircII 3 è il programma cliente standard per comunicare con IRC. Si utilizza attraverso un terminalea caratteri normale, dove lo schermo è diviso in due parti: quella superiore per mostrare i messaggi

3ircII software libero con licenza speciale

Page 269:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IRC 1327

che scorrono verso l’alto; quella inferiore che è semplicemente la riga da cui si impartiscono i co-mandi. Il programma eseguibile è ‘irc’ e si avvia in maniera molto semplice, come nell’esempioseguente, dove viene specificato il nominativo desiderato e l’indirizzo del servente IRC:

$ irc tizio dinkel.brot.dg

*** Welcome to the Internet Relay Network tizio (from dinkel.brot.dg)

*** /etc/irc/script/local V0.5 for Debian finished. Welcome to ircII.

*** If you have not already done so, please read the new user information with

+/HELP NEWUSER

*** Your host is dinkel.brot.dg, running version u2.10.07.0

*** This server was created Fri Dec 17 1999 at 19: 54:56 CST

*** umodes available dioswkg, channel modes available biklmnopstv

*** There are 1 users and 0 invisible on 1 servers

*** This server has 1 clients and 0 servers connected

*** Highest connection count: 1 (1 clients)

*** - dinkel.brot.dg Message of the Day -

*** - 16/3/2001 20:44

*** - Benvenuto presso irc.brot.dg

*** -

*** on 1 ca 1(2) ft 10(10)

________________________________________________________________________________

[1] 20:45 tizio * type /help for help

_

Figura 119.2. Schermata iniziale all’avvio di ircII.

In questo caso, il messaggio del giorno è soltanto «Benvenuto presso irc.brot.dg», che si vede inbasso; il resto è stato generato automaticamente dal servente. La riga contenente la stringa

[1] 20:45 tizio * type /help for help

è la linea di demarcazione tra la parte superiore contenente i messaggi e la parte inferiore riser-vata ai comandi dell’utente. Come si può vedere, viene suggerito l’uso del comando ‘/help’ perrichiamare l’elenco dei comandi disponibili.

Se si impartisce il comando ‘/help’, come suggerito, si passa a un contesto differente, in cui sipossono ottenere informazioni dettagliate su questo o quel comando:

/help[ Invio ]

! : abort admin alias

assign away basics beep bind

brick bye cd channel clear

commands comment connect ctcp date

dcc deop describe die digraph

dmsg dquery echo encrypt etiquette

eval exec exit expressions flush

foreach help history hook icb

if ignore info input intro

invite ircii ison join kick

kill lastlog leave links list

load lusers me menus mload

mode motd msg names news

Page 270:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1328 IRC

newuser nick note notice notify

on oper parsekey part ping

query quit quote rbind redirect

rehash restart rules save say

send sendline server servlist set

signoff sleep squery squit stats

summon time timer topic trace

type userhost users version wait

wallops which while who whois

whowas window xecho xtype

[1] 20:56 daniele * type /help for help

Help? _

Si può osservare dalla figura che nella riga di comando appare un invito, che prima non era pre-sente: ‘Help?’, a significare che si può indicare il nome di un comando di quelli elencati perconoscerne la sintassi. Per esempio:

Help? help[ Invio ]

*** Help on help

Usage: HELP [<command> [<subcommands>]]

Shows help on the given command. The help documentation is

set up in a hierarchical fashion. That means that certain

help topics have sub-topics under them. For example, doing

HELP ADMIN

gives help on the admin command, while:

HELP SET

gives help on the set command and also displays a list of

sub-topics for SET. To get help on the subtopics, you would

do:

HELP SET <subtopic>

where <subtopic> is one of the subtopics. If you are using the

built in help, then you need only type the subtopic name. The

input prompt will indicate what help level you are on. Hitting

return will move you up one level.

At any time, you can specify a ? to get a list of subtopics

without the associated help file, for example:

HELP ?

gives a list of all main help topics. The following:

HELP BIND ?

gives the list of all BIND subtopics. If you use a ? with

[1] 21:00 daniele * type /help for help

*** Hit any key for more, ’q’ to quit ***

Come si vede, se non c’è abbastanza spazio per visualizzare tutto il testo disponibile, basta digitareun carattere qualunque per vedere la pagina successiva, oppure basta inserire la lettera ‘q’ perterminare.

Alla fine della navigazione nella guida interna, basta premere il tasto [ Invio ] senza specificare ilnome di alcun comando per ritornare alla modalità di funzionamento normale, dove non apparealcun invito.

Help? [ Invio ]

Page 271:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IRC 1329

I comandi impartiti a ircII sono preceduti dal simbolo ‘/’, per distinguerli dal testo dei messaggiche invece vanno inviati al canale di discussione.

Generalmente, quando ci si trova di fronte all’invito normale, è possibile richiamare i comandiprecedenti scorrendo con i tasti [ freccia su ] e [ freccia giù ].

Si conclude il funzionamento di ircII con il comando ‘/quit’.

119.8 TkircTkirc 4 è un programma frontale per ircII. Il programma eseguibile è ‘tkirc’ e si avvia in manieramolto semplice, come nell’esempio seguente, dove viene specificato il nominativo desiderato el’indirizzo del servente IRC:

$ tkirc tizio dinkel.brot.dg

Figura 119.3. Schermata iniziale all’avvio di Tkirc.

Utilizzando il menù a tendina, è possibile ottenere un’altra finestra con la quale comunicare in unaltro canale. Si utilizza precisamente la voce New window dal menù Project.

Nella colonna destra, vengono elencati gli utenti che partecipano al canale con cui si sta comuni-cando. Con un clic doppio del mouse si ottengono le informazioni su di loro, come si vede nellafigura 119.4.

119.9 Utilizzo di massima di un cliente IRCGeneralmente, prima di entrare in un canale si può avere l’interesse di visualizzare l’elenco diquelli disponibili. Questo si ottiene con il comando ‘/list’. Per esempio, con ircII:

/list[ Invio ]

*** Channel Users Topic

*** #prova 1

*** #pippo 3

4Tkirc GNU GPL

Page 272:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1330 IRC

Figura 119.4. Informazioni sugli utenti collegati allo stesso canale.

Come si vede, il nome di un canale inizia con il carattere ‘#’ per convenzione. In alternativa, ilnome di un canale può iniziare anche per ‘&’, ma in tal caso si tratta di un canale che riguardaesclusivamente il servente al quale si è connessi, per cui non si diffonde agli altri serventi dellastessa rete IRC.

Nello stesso modo, può essere utile visualizzare l’elenco degli utenti collegati. Questo si ottienecon il comando ‘/names’, che va usato comunque con parsimonia, considerando che una rete IRC«normale» è sempre molto affollata.

/names[ Invio ]

Pub: #prova tizio @daniele

Pub: #pippo caio @sempronio

Nell’elenco degli utenti, gli operatori di canale sono evidenziati dal prefisso ‘@’. Eventualmente,se si vede il simbolo ‘*’ come prefisso, si tratta di un operatore IRC.

Il programma cliente che si utilizza potrebbe attribuire automaticamente il nominativo per acce-dere alla rete IRC, sfruttando presumibilmente il nominativo utente usato per accedere al proprioelaboratore. Se il nome in questione non è compatibile, eventualmente perché già utilizzato, è ilprogramma cliente stesso che richiede di indicare un altro nominativo. In ogni caso, è possibilecambiare il proprio nome attraverso il comando ‘/nick’:

/nick pinco[ Invio ]

L’esempio mostra il caso in cui l’utente desideri usare il nome ‘pinco’, ammesso che questo nonsia già utilizzato nella rete IRC in cui si è connessi.

Il nominativo usato all’interno di una rete IRC non può essere più lungo di nove caratteri.

Ci si aggrega a un canale con il comando ‘/join’. Se il canale indicato non esiste ancora, vienecreato per l’occasione e l’utente che lo crea ne diventa l’operatore.

/join #prova[ Invio ]

Page 273:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

IRC 1331

L’esempio mostra il caso in cui ci si voglia aggregare al canale ‘#prova’. È importante ricordareche è necessario il prefisso davanti al nome, come si vede dall’esempio.

Quando ci si trova in un canale, ciò che si digita senza il prefisso ‘/’, viene trasmesso al canalestesso:

Ciao a tutti![ Invio ]

Come ci si unisce a un canale, ci si può allontanare. Questo si ottiene con il comando ‘/leave’:

/leave #prova[ Invio ]

Segue il riepilogo di alcuni comandi essenziali per l’uso di un cliente IRC.

• /list [opzioni]Elenca i canali presenti nella rete IRC.

• /names [opzioni] [canale]Elenca gli utenti presenti nella rete IRC, oppure solo quelli presenti in un canale particolare.

• /nick nome

Consente di modificare, o di stabilire, il proprio nominativo nell’ambito della rete IRC.

• /who canale

Consente di elencare gli utenti che sono presenti nel canale indicato.

• /whois nome[,nome]...

Consente di elencare le informazioni disponibili sugli utenti elencati. I nomi possono essereanche composti con caratteri jolly, ovvero con l’uso dell’asterisco per indicare una stringaqualunque.

• /join canale

Consente di entrare in un canale.

• /msg nome messaggio

Consente di inviare un messaggio esclusivamente all’utente indicato.

• /dcc chat nome

Invia all’utente indicato una richiesta per instaurare una connessione privilegiata tra i due. Sel’altro utente risponde con lo stesso comando, si ottiene questa connessione. Per comunicarein modo privato, i due usano il comando ‘msg =nome ...’.

• /msg =nome messaggio

Invia un messaggio esclusivamente all’utente indicato, che già prima era stato collegato conun comando ‘/dcc chat’.

• /quit [messaggio]Chiude il funzionamento del programma cliente, ma prima si allontana dal canale, se neces-sario, inviando eventualmente il messaggio indicato.

Page 274:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1332 IRC

119.10 Riferimenti

• Internet Relay Chat (IRC) help�

http://www.irchelp.org/�

• David Caraballo, Joseph Lo, The IRC prelude�

http://www.irchelp.org/irchelp/new2irc.html �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 275:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

Capitolo 120ICQ: «I-seek-you»ICQ è un sistema di comunicazione, ideato allo scopo di consentire agli utenti di informare laloro presenza nella rete, permettendo anche l’instaurazione di un contatto immediato, oltre allapossibilità di mostrare alcune informazioni personali. ICQ è un’invenzione di Mirabilis, oggi ICQInc., che gestisce i serventi ICQ. In altri termini, almeno per ora, non si tratta di un serviziopubblico come potrebbe essere Usenet, a cui si può partecipare anche con un proprio servente;tuttavia viene fornito gratuitamente e sono disponibili alcuni programmi cliente realizzati secondola filosofia del software libero.

Ciò che si conosce del protocollo di ICQ è stato ottenuto principalmente dalla sperimentazione,anche analizzando i pacchetti trasmessi e ricevuti dai programmi standard. La documentazionepiù importante al riguardo si può ottenere a partire da

�http://www.student.nada.kth.se/˜d95-mih/icq/ � ,

The ICQ protocol site.

120.1 Principio di funzionamentoAttraverso ICQ un utente si registra presso un servente, specificando una parola d’ordine. Ilservente assegna all’utente un numero, definito UIN, ovvero Universal Internet Number, e daquel momento si stabilisce l’abbinamento tra UIN e parola d’ordine. Successivamente l’utentepuò abbinare a questo numero qualche informazione in più su di sé.

Da quel momento, l’utente si collega al servente ICQ quando desidera annunciare la sua presenzanella rete. Il servente ICQ accetta l’utente dopo aver confrontato il numero UIN con la parolad’ordine stabilita originariamente.

Quando un utente ICQ cerca un contatto con un altro utente, può fare una ricerca in base al numeroUIN e poche altre informazioni. Quando ha determinato il numero UIN del suo interlocutore, puòottenere dal servente ICQ l’indirizzo IP e la porta presso cui questa persona ha attivato il suoprogramma cliente, iniziando così una connessione diretta (per colloquiare o per altri scopi).

Il servente ICQ è in ascolto normalmente nella porta 4 000, o eventualmente anche in altre portesuperiori. Tuttavia, va considerato il fatto che buona parte della comunicazione con il serventeavviene attraverso il protocollo UDP (non connesso), mentre le connessioni dirette con gli inter-locutori usano il protocollo TCP. Da questo e da quanto esposto sopra, si arriva alle conclusioniseguenti:

• si possono notare delle intermittenze nel funzionamento, per esempio quando si interrogal’elenco degli utenti, per cui una volta sembra che non ci siano utenti con le caratteristicherichieste, altre volte si ottiene un risultato soddisfacente;

• non si può accedere al servizio se si deve attraversare un firewall che blocca i pacchetti delprotocollo UDP;

• diventa difficile attraversare un NAT/PAT, ovvero un router speciale in grado di trasforma-zione indirizzi IP e porte di una rete privata (capitolo 254), perché di solito si intervienea livello di protocolli basati su TCP e su ICMP, inoltre si aggiunge il problema di esserereperibili nei confronti dell’esterno.1

120.2 Cliente ICQ:ICQ non si basa su un protocollo pubblico e non è garantita la compatibilità con il passato, per cuidiventa difficile l’aggiornamento dei programmi realizzati per comunicare con questo servizio,senza disporre di informazioni ufficiali sul protocollo stesso.

1Non ha senso pubblicizzare un indirizzo IP di una rete privata che non risulta accessibile da Internet.

1333

Page 276:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1334 ICQ: «I-seek-you»

Esistono diversi programmi cliente liberi per comunicare con ICQ, ma pochi funzionano, a causadegli aggiornamenti che ha subito il protocollo. Qui viene proposto GnomeICU, 2 ovvero «GnomeI-see-you» che, appartenendo a un progetto di ampio respiro, promette di essere aggiornato ade-guatamente nel futuro.

120.2.1 Avvio e utilizzo elementareLa prima volta che si avvia GnomeICU (con l’eseguibile ‘gnomeicu’), viene proposta la registra-zione presso un servente ICQ, in modo da ottenere un numero UIN (figura 120.1).

Figura 120.1. Avvio di GnomeICU la prima volta.

Se si seleziona la richiesta di un nuovo UIN, come proposto e come si vede nella figura, apparesuccessivamente la richiesta di inserimento della parola d’ordine.3 Se tutto procede come previsto,si ottiene il numero UIN e si potrà poi procedere a compilare le informazioni personali che siintendono rendere pubbliche.

Figura 120.2. Finestra principale di GnomeICU.

Dal menù ICQ della finestra principale di GnomeICU, si seleziona la voce Change user info percompilare o modificare i propri dati personali pubblici, come si vede nella figura 120.3, dove inparticolare non è stata compilata la casella della data di nascita, volutamente.

2GnomeICU GNU GPL3Nel momento in cui si scrive questo capitolo, il programma limita l’inserimento a soli otto caratteri.

Page 277:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

ICQ: «I-seek-you» 1335

Figura 120.3. Impostazione dei dati personali.

La finestra in questione è suddivisa in diverse parti a cui si accede attraverso la selezione dellembo appropriato. Vale la pena di osservare cosa appare nelle informazioni riferite alla rete,come si vede nella figura 120.4.

Il numero IP e la porta sono assegnati automaticamente. La figura mostra la situazione riferita aun momento in cui manca la connessione con l’esterno. Quando la connessione c’è, il numeroIP diventa quello relativo alla rete pubblica (assegnato probabilmente da una connessione PPP).4

L’indicazione della porta presso cui GnomeICU è in ascolto per le comunicazioni, completa leinformazioni necessarie ai collegamenti personali. Infine, vale la pena di annotare che l’indirizzodi posta elettronica è facoltativo, dal momento che la comunicazione può avvenire in modo direttocon ICQ, tuttavia si tratta di una possibilità in più per farsi trovare, soprattutto quando questoindirizzo viene modificato (si osservi il campo relativo all’indirizzo vecchio).

Per cercare una persona, si seleziona la voce Add Contact, dal menù ICQ. È possibile specificaredirettamente il numero UIN, oppure si può fare una ricerca in base al soprannome, al nome, alcognome, o all’indirizzo di posta elettronica (sempre che questi dati siano stati annotati dallapersona cercata).

Se si ha fortuna, si ottiene un elenco di contatti (non tutti i numeri UIN corrispondono effettiva-mente a persone reali), dal quale è possibile selezionare chi aggiungere al proprio elenco. Succes-sivamente sarà possibile tentare di comunicare con questi, oppure sarà possibile sapere quandosono collegati alla rete anche loro.

Per mostrare la propria presenza attiva nella rete, bisogna selezionare il menù speciale che apparein basso a sinistra, nella finestra principale di GnomeICU. Inizialmente, appare la voce Offline;aprendo quel menù si potrà selezionare la voce Online, oppure anche Free for chat.

120.2.2 Gestione di più UIN simultaneamenteUna volta scoperto ICQ, si può incontrare l’esigenza di gestire più UIN simultaneamente, perscopi diversi. Questo si può fare con GnomeICU, ma non è un’operazione intuitiva.

4Da questo si comprende che diventa praticamente impossibile attraversare un router NAT/PAT.

Page 278:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1336 ICQ: «I-seek-you»

Figura 120.4. Recapito telematico.

Figura 120.5. Ricerca di un contatto.

Page 279:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

ICQ: «I-seek-you» 1337

Per prima cosa occorre evitare di inserire GnomeICU in un applet del pannello di Gnome, perchéal riavvio successivo del pannello, viene persa l’indicazione del numero UIN specifico, utilizzandosoltanto la configurazione predefinita. Per questo si usa l’opzione ‘-a’.

L’eseguibile ‘gnomeicu’ consente di usare l’opzione ‘--uin’ per specificare un numero di UINall’avvio. In pratica, più che specificare un numero, si stabiliscono i file di configurazioneda tenere in considerazione. In tal caso si tratterà di ‘˜/.gnome/GnomeICU_numero_uin’

e di ‘˜/.gnome_private/GnomeICU_numero_uin’. Il primo contiene la configurazionegenerale, mentre il secondo conserva la parola d’ordine relativa. Se non si usasse l’opzione‘--uin’, ‘gnomeicu’ utilizzerebbe semplicemente i file ‘˜/.gnome/GnomeICU’ e di ‘˜/.gnome_private/GnomeICU’.

Una volta ottenuto un numero UIN, si può cambiare nome ai file ‘˜/.gnome/GnomeICU’ e‘˜/.gnome_private/GnomeICU’, secondo il modello appena descritto, ricordando poi diavviare ‘gnomeicu’ con l’opzione corretta.

Utilizzando due o più finestre di GnomeICU, può diventare complicato ricordarsi quale sia at-tribuita a un numero rispetto agli altri. Per questo si può intervenire nella direttiva seguente cheè contenuta nel file ‘˜/.gnome/GnomeICU_numero_uin’, allo scopo di vedere apparire unanota adeguata nel titolo della finestra:

[Window]

Title=1234567890 [email protected]

In questo caso, Tizio ha sotto controllo il numero UIN, aggiungendo anche il riferimentodell’indirizzo di posta elettronica abbinato a quel numero.

Per concludere, supponendo di disporre dei numeri 1 234 567 890 e 2 345 678 901, si può decideredi intervenire nel file ‘˜/.xsession’, più o meno nel modo seguente:

gnomeicu -a --uin=1234567890 &

gnomeicu -a --uin=2345678901 &

panel &

enlightenment

120.3 Note conclusiveICQ può essere usato per comunicare a vario titolo. In generale conviene dichiarare le proprieintenzioni nello spazio apposito, che appartiene alle informazioni personali che si intendono pub-blicizzare. Se un utente ICQ non mostra informazioni di questo tipo, è probabile che non stiacercando contatti con persone sconosciute.

Bisogna tenere in considerazione anche un problema di sicurezza con ICQ: mostrando sempre suquale indirizzo IP ci si trova, si dà il modo a un aggressore motivato di compiere le sue azioni, percui bisogna valutare l’opportunità di proteggere il proprio sistema, mancando il vantaggio datodal non essere sempre collegati alla rete esterna (tomo XIII).

120.4 Riferimenti

• Magnus Ihse, The ICQ protocol site�

http://www.student.nada.kth.se/˜d95-mih/icq/ �

Appunti di informatica libera 2001.08.15 — Copyright © 2000-2001 Daniele Giacomini – daniele @ swlibero.org

Page 280:  · I siti principali di distribuzione di Appunti di informatica libera sono i seguenti (senza contare altre riproduzioni speculari disponibili che non vengono più annotate). Interne

1338 ICQ: «I-seek-you»

Figura 120.6. Configurazione delle informazioni varie che si intendono pubblicizzare, visto conGnomeICU.