]> git.piffa.net Git - doc/.git/blob - servizi.html
Servizi, samba
[doc/.git] / servizi.html
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
3
4 <html lang="it">
5 <head>
6   <meta name="generator" content=
7   "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
8   <meta http-equiv="Content-Type" content=
9   "text/html; charset=iso-8859-1">
10   <meta name="generator" content=
11   "Docutils 0.6: http://docutils.sourceforge.net/">
12
13   <title>Servizi di rete passo a passo</title>
14   <style type="text/css">
15
16   /*
17   Author: Peter Parente
18   Modyfied by: Andrea Manni
19   Date: 2010/01/22
20   Version: 1.1
21   Copyright: This stylesheet has been placed in the public domain - free to edit and use for all uses.
22   */
23
24   body {
25   font: 100% sans-serif;
26   background: #ffffff;
27   color: black;
28   margin: 2em;
29   padding: 0em 2em;
30   }
31   pre.literal-block {
32          overflow: auto;
33     padding: 5px;
34     background-color: #eeffcc;
35     color: #333333;
36     line-height: 120%;
37     border: 1px solid #ac9;
38     border-left: none;
39     border-right: none;
40   }
41
42   p.topic-title {
43   font-weight: bold;
44   }
45
46   table.docinfo {
47   text-align: left;
48   margin: 2em 0em;
49   }
50
51   a[href] {
52   color: #436976;
53   background-color: transparent;
54   }
55
56   a.toc-backref {
57         margin-left:20px;
58   text-decoration: none;
59   }
60
61   h1 a[href] {
62   color: #003a6b;
63   text-decoration: none;
64   background-color: transparent;
65   }
66
67   a.strong {
68   font-weight: bold;
69   }
70
71   img {
72   margin: 0;
73   border: 0;
74   }
75
76   p {
77   margin: 0.5em 0 1em 0;
78   text-align: justify;
79   line-height: 1.5em;
80   }
81
82
83   p a:visited {
84   color: purple;
85   background-color: transparent;
86   }
87
88   p a:active {
89   color: red;
90   background-color: transparent;
91   }
92
93   a:hover {
94   text-decoration: none;
95   }
96
97   p img {
98   border: 0;
99   margin: 0;
100   }
101
102   p.rubric {
103   font-weight: bold;
104   font-style: italic;
105   }
106
107   h1.title {
108   color: #003a6b;
109   font-size: 250%;
110   margin-bottom: 0em;
111   }
112
113   h2.subtitle {
114   color: #003a6b;
115   border-bottom: 0px;
116   }
117
118   h1, h2, h3, h4, h5, h6 {
119   color: #555;
120   background-color: transparent;
121   margin: 0em;
122   padding-top: 0.5em;
123   }
124
125   h1 {
126   font-size: 160%;
127   margin-bottom: 0.5em;
128   border-bottom: 2px solid #aaa;
129   }
130
131   h2 {
132   font-size: 140%;
133   margin-bottom: 0.5em;
134   border-bottom: 1px solid #aaa;
135   }
136
137   h3 {
138   font-size: 130%;
139   margin-bottom: 0.5em;
140   }
141
142   h4 {
143   font-size: 110%;
144   font-weight: bold;
145   margin-bottom: 0.5em;
146   }
147
148   h5 {
149   font-size: 105%;
150   font-weight: bold;
151   margin-bottom: 0.5em;
152   }
153
154   h6 {
155   font-size: 100%;
156   font-weight: bold;
157   margin-bottom: 0.5em;
158   }
159
160   dt {
161   font-style: italic;
162   }
163
164   dd {
165   margin-bottom: 1.5em;
166   }
167
168   div.admonition, div.note, div.tip, div.caution, div.important {
169   margin: 2em 2em;
170   padding: 0em 1em;
171   border-top: 1px solid #aaa;
172   border-left: 1px solid #aaa;
173   border-bottom: 2px solid #555;
174   border-right: 2px solid #555;
175   }
176
177   div.important {
178   background: transparent url('../images/important.png') 10px 2px no-repeat;
179   }
180
181   div.caution {
182   background: transparent url('../images/caution.png') 10px 2px no-repeat;
183   }
184
185   div.note {
186   background: transparent url('../images/note.png') 10px 2px no-repeat;
187   }
188
189   div.tip {
190   background: transparent url('../images/tip.png') 10px 2px no-repeat;
191   }
192
193   div.admonition-example {
194   background: transparent url('../images/tip.png') 10px 2px no-repeat;
195   }
196
197   div.admonition-critical-example {
198   background: transparent url('../images/important.png') 10px 2px no-repeat;
199   }
200
201   p.admonition-title {
202   font-weight: bold;
203   border-bottom: 1px solid #aaa;
204   padding-left: 30px;
205   }
206
207   table.docutils {
208   text-align: left;
209   border: 1px solid gray;
210   border-collapse: collapse;
211   width: 100%;
212   margin: 1.5em 0em;
213   }
214
215   table.docutils caption {
216   font-style: italic;
217   }
218
219   table.docutils td, table.docutils th {
220   padding: 0.25em 0.5em;
221   }
222
223   table.docutils th {
224   background-color: #dddddd;
225   }
226
227   div.sidebar {
228   width: 33%;
229   float: right;
230   margin: 0em 2em;
231   padding: 0em 1em;
232   border-top: 1px solid #aaa;
233   border-left: 1px solid #aaa;
234   border-bottom: 2px solid #555;
235   border-right: 2px solid #555;
236   }
237
238   p.sidebar-title {
239   margin-bottom: 0em;
240   color: #003a6b;
241   border-bottom: 1px solid #aaa;
242   font-weight: bold;
243   }
244
245   p.sidebar-subtitle {
246   margin-top: 0em;
247   font-style: italic;
248   color: #003a6b;
249   }
250
251   </style>
252 </head>
253
254 <body>
255   <div class="document" id="servizi-di-rete-passo-a-passo">
256     <h1 class="title">Servizi di rete passo a passo</h1>
257
258     <h2 class="subtitle" id=
259     "appunti-sulla-installazione-e-configurazione-dei-servizi-di-rete-in-ambiete-gnu-linx">
260     Appunti sulla installazione e configurazione dei servizi di
261     rete in ambiete Gnu/Linx</h2>
262
263     <blockquote>
264       <table class="docutils field-list" frame="void" rules="none">
265         <col class="field-name">
266         <col class="field-body">
267
268         <tbody valign="top">
269           <tr class="field">
270             <th class="field-name">Author:</th>
271
272             <td class="field-body">Andrea Manni</td>
273           </tr>
274
275           <tr class="field">
276             <th class="field-name">Copyright:</th>
277
278             <td class="field-body">GFDL</td>
279           </tr>
280
281           <tr class="field">
282             <th class="field-name">Version:</th>
283
284             <td class="field-body">0.95</td>
285           </tr>
286         </tbody>
287       </table>
288     </blockquote>
289
290     <p>Questa guida tratta la configurazione di base dei principali
291     servizi di rete utilizzati con sistemi operativi <em>Unix</em>
292     e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
293     per amministratori di rete in ambiente <em>GNU/Linux</em>. In
294     particolare questa guida e' stata scritta usando come
295     riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
296     esempi presentati dovrebbero quindi essere direttamente
297     utilizzabili anche su distribuzioni derivate da Debian come
298     Ubuntu, per sistemi operativi diversi si presti attenzione ai
299     percorsi dei file citati.</p>
300
301     <div class="contents topic" id="indice-degli-argomenti">
302       <p class="topic-title first">Indice degli argomenti</p>
303
304       <ul class="auto-toc simple">
305         <li>
306           <a class="reference internal" href=
307           "#configurazione-sistema" id="id9" name=
308           "id9">1&nbsp;&nbsp;&nbsp;Configurazione sistema</a>
309
310           <ul class="auto-toc">
311             <li><a class="reference internal" href=
312             "#solo-per-uso-interno" id="id10" name=
313             "id10">1.1&nbsp;&nbsp;&nbsp;Solo per uso
314             interno</a></li>
315
316             <li>
317               <a class="reference internal" href="#rete" id="id11"
318               name="id11">1.2&nbsp;&nbsp;&nbsp;Rete</a>
319
320               <ul class="auto-toc">
321                 <li><a class="reference internal" href=
322                 "#interfaces" id="id12" name=
323                 "id12">1.2.1&nbsp;&nbsp;&nbsp;interfaces</a></li>
324               </ul>
325             </li>
326
327             <li><a class="reference internal" href=
328             "#bash-completion" id="id13" name=
329             "id13">1.3&nbsp;&nbsp;&nbsp;Bash completion</a></li>
330
331             <li><a class="reference internal" href="#vim" id="id14"
332             name="id14">1.4&nbsp;&nbsp;&nbsp;Vim</a></li>
333
334             <li><a class="reference internal" href="#vnc" id="id15"
335             name="id15">1.5&nbsp;&nbsp;&nbsp;VNC</a></li>
336
337             <li><a class="reference internal" href=
338             "#lista-dei-pacchetti-di-base" id="id16" name=
339             "id16">1.6&nbsp;&nbsp;&nbsp;Lista dei pacchetti di
340             base</a></li>
341
342             <li>
343               <a class="reference internal" href=
344               "#apt-configurazione" id="id17" name=
345               "id17">1.7&nbsp;&nbsp;&nbsp;Apt configurazione</a>
346
347               <ul class="auto-toc">
348                 <li><a class="reference internal" href=
349                 "#sources-list" id="id18" name=
350                 "id18">1.7.1&nbsp;&nbsp;&nbsp;sources.list</a></li>
351
352                 <li><a class="reference internal" href=
353                 "#etc-apt-apt-conf" id="id19" name=
354                 "id19">1.7.2&nbsp;&nbsp;&nbsp;/etc/apt/apt.conf</a></li>
355               </ul>
356             </li>
357           </ul>
358         </li>
359
360         <li>
361           <a class="reference internal" href="#squid" id="id20"
362           name="id20">2&nbsp;&nbsp;&nbsp;Squid</a>
363
364           <ul class="auto-toc">
365             <li>
366               <a class="reference internal" href=
367               "#configurazione-squid-conf" id="id21" name=
368               "id21">2.1&nbsp;&nbsp;&nbsp;Configurazione:
369               squid.conf</a>
370
371               <ul class="auto-toc">
372                 <li>
373                   <a class="reference internal" href="#cache-dir"
374                   id="id22" name=
375                   "id22">2.1.1&nbsp;&nbsp;&nbsp;Cache_dir</a>
376
377                   <ul class="auto-toc">
378                     <li><a class="reference internal" href=
379                     "#opzioni-del-file-system" id="id23" name=
380                     "id23">2.1.1.1&nbsp;&nbsp;&nbsp;Opzioni del
381                     file system</a></li>
382                   </ul>
383                 </li>
384
385                 <li><a class="reference internal" href=
386                 "#configurazioni-di-cache-dir" id="id24" name=
387                 "id24">2.1.2&nbsp;&nbsp;&nbsp;Configurazioni di
388                 Cache_dir</a></li>
389
390                 <li><a class="reference internal" href=
391                 "#tag-maximum-object-size" id="id25" name=
392                 "id25">2.1.3&nbsp;&nbsp;&nbsp;TAG:
393                 maximum_object_size</a></li>
394
395                 <li><a class="reference internal" href=
396                 "#tag-cache-mem" id="id26" name=
397                 "id26">2.1.4&nbsp;&nbsp;&nbsp;TAG:
398                 cache_mem</a></li>
399
400                 <li><a class="reference internal" href=
401                 "#tag-minimum-object-size" id="id27" name=
402                 "id27">2.1.5&nbsp;&nbsp;&nbsp;TAG:
403                 minimum_object_size</a></li>
404               </ul>
405             </li>
406
407             <li>
408               <a class="reference internal" href=
409               "#negoziazione-degli-accesi-al-servizio" id="id28"
410               name="id28">2.2&nbsp;&nbsp;&nbsp;Negoziazione degli
411               accesi al servizio</a>
412
413               <ul class="auto-toc">
414                 <li><a class="reference internal" href=
415                 "#acl-e-http-access" id="id29" name=
416                 "id29">2.2.1&nbsp;&nbsp;&nbsp;ACL e http
417                 access</a></li>
418               </ul>
419             </li>
420
421             <li>
422               <a class="reference internal" href="#testare-squid"
423               id="id30" name="id30">2.3&nbsp;&nbsp;&nbsp;Testare
424               Squid</a>
425
426               <ul class="auto-toc">
427                 <li><a class="reference internal" href=
428                 "#client-wgetrc" id="id31" name=
429                 "id31">2.3.1&nbsp;&nbsp;&nbsp;Client:
430                 ~/.wgetrc</a></li>
431
432                 <li><a class="reference internal" href=
433                 "#server-access-log" id="id32" name=
434                 "id32">2.3.2&nbsp;&nbsp;&nbsp;Server:
435                 access.log</a></li>
436               </ul>
437             </li>
438           </ul>
439         </li>
440
441         <li><a class="reference internal" href="#tiny-proxy" id=
442         "id33" name="id33">3&nbsp;&nbsp;&nbsp;Tiny proxy</a></li>
443
444         <li>
445           <a class="reference internal" href="#apache" id="id34"
446           name="id34">4&nbsp;&nbsp;&nbsp;Apache</a>
447
448           <ul class="auto-toc">
449             <li><a class="reference internal" href=
450             "#pacchetti-da-installare" id="id35" name=
451             "id35">4.1&nbsp;&nbsp;&nbsp;Pacchetti da
452             installare::</a></li>
453
454             <li><a class="reference internal" href=
455             "#configurazione-di-apache" id="id36" name=
456             "id36">4.2&nbsp;&nbsp;&nbsp;Configurazione di
457             Apache</a></li>
458
459             <li><a class="reference internal" href="#apache-conf"
460             id="id37" name=
461             "id37">4.3&nbsp;&nbsp;&nbsp;apache.conf</a></li>
462
463             <li>
464               <a class="reference internal" href=
465               "#installazione-di-php" id="id38" name=
466               "id38">4.4&nbsp;&nbsp;&nbsp;Installazione di PHP</a>
467
468               <ul class="auto-toc">
469                 <li><a class="reference internal" href=
470                 "#test-del-modulo-php" id="id39" name=
471                 "id39">4.4.1&nbsp;&nbsp;&nbsp;Test del modulo
472                 php</a></li>
473
474                 <li><a class="reference internal" href=
475                 "#installazione-del-supporto-per-mysql-a-php" id=
476                 "id40" name=
477                 "id40">4.4.2&nbsp;&nbsp;&nbsp;Installazione del
478                 supporto per Mysql a PHP</a></li>
479
480                 <li><a class="reference internal" href=
481                 "#phpmyadmin" id="id41" name=
482                 "id41">4.4.3&nbsp;&nbsp;&nbsp;phpmyadmin</a></li>
483
484                 <li><a class="reference internal" href=
485                 "#installazione-del-supporto-per-postgresql-a-php"
486                 id="id42" name=
487                 "id42">4.4.4&nbsp;&nbsp;&nbsp;Installazione del
488                 supporto per Postgresql a PHP</a></li>
489
490                 <li><a class="reference internal" href=
491                 "#phppgadmin" id="id43" name=
492                 "id43">4.4.5&nbsp;&nbsp;&nbsp;phppgadmin</a></li>
493               </ul>
494             </li>
495
496             <li>
497               <a class="reference internal" href="#virtual-hosts"
498               id="id44" name="id44">4.5&nbsp;&nbsp;&nbsp;Virtual
499               hosts</a>
500
501               <ul class="auto-toc">
502                 <li><a class="reference internal" href=
503                 "#gestione-dns" id="id45" name=
504                 "id45">4.5.1&nbsp;&nbsp;&nbsp;Gestione DNS</a></li>
505
506                 <li><a class="reference internal" href=
507                 "#eseguire-una-query-dns-con-dig" id="id46" name=
508                 "id46">4.5.2&nbsp;&nbsp;&nbsp;Eseguire una query
509                 DNS con <tt class=
510                 "docutils literal">dig</tt>::</a></li>
511
512                 <li><a class="reference internal" href="#id3" id=
513                 "id47" name="id47">4.5.3&nbsp;&nbsp;&nbsp;Virtual
514                 hosts</a></li>
515               </ul>
516             </li>
517
518             <li>
519               <a class="reference internal" href=
520               "#negoziazione-accessi" id="id48" name=
521               "id48">4.6&nbsp;&nbsp;&nbsp;Negoziazione accessi</a>
522
523               <ul class="auto-toc">
524                 <li><a class="reference internal" href=
525                 "#limiti-su-base-ip" id="id49" name=
526                 "id49">4.6.1&nbsp;&nbsp;&nbsp;Limiti su base
527                 IP</a></li>
528               </ul>
529             </li>
530
531             <li>
532               <a class="reference internal" href=
533               "#user-authentication" id="id50" name=
534               "id50">4.7&nbsp;&nbsp;&nbsp;User Authentication</a>
535
536               <ul class="auto-toc">
537                 <li><a class="reference internal" href=
538                 "#definire-la-cartella" id="id51" name=
539                 "id51">4.7.1&nbsp;&nbsp;&nbsp;Definire la
540                 cartella</a></li>
541
542                 <li><a class="reference internal" href=
543                 "#creazione-del-database-delle-passwords" id="id52"
544                 name="id52">4.7.2&nbsp;&nbsp;&nbsp;Creazione del
545                 database delle passwords</a></li>
546
547                 <li><a class="reference internal" href="#id4" id=
548                 "id53" name=
549                 "id53">4.7.3&nbsp;&nbsp;&nbsp;Configurazione di
550                 Apache</a></li>
551               </ul>
552             </li>
553
554             <li><a class="reference internal" href="#cavets" id=
555             "id54" name="id54">4.8&nbsp;&nbsp;&nbsp;Cavets</a></li>
556           </ul>
557         </li>
558
559         <li>
560           <a class="reference internal" href="#domain-name-system"
561           id="id55" name="id55">5&nbsp;&nbsp;&nbsp;Domain Name
562           System</a>
563
564           <ul class="auto-toc">
565             <li><a class="reference internal" href=
566             "#risoluzione-inversa" id="id56" name=
567             "id56">5.1&nbsp;&nbsp;&nbsp;Risoluzione
568             Inversa</a></li>
569
570             <li><a class="reference internal" href=
571             "#nomi-di-dominio" id="id57" name=
572             "id57">5.2&nbsp;&nbsp;&nbsp;Nomi di dominio</a></li>
573
574             <li><a class="reference internal" href=
575             "#tipologie-di-record" id="id58" name=
576             "id58">5.3&nbsp;&nbsp;&nbsp;Tipologie di
577             record</a></li>
578
579             <li><a class="reference internal" href="#utilizzo" id=
580             "id59" name=
581             "id59">5.4&nbsp;&nbsp;&nbsp;Utilizzo</a></li>
582
583             <li><a class="reference internal" href=
584             "#risoluzione-dei-nomi-di-dominio" id="id60" name=
585             "id60">5.5&nbsp;&nbsp;&nbsp;Risoluzione dei nomi di
586             dominio</a></li>
587
588             <li><a class="reference internal" href="#dig" id="id61"
589             name="id61">5.6&nbsp;&nbsp;&nbsp;Dig</a></li>
590
591             <li><a class="reference internal" href="#resolv-conf"
592             id="id62" name=
593             "id62">5.7&nbsp;&nbsp;&nbsp;resolv.conf</a></li>
594
595             <li><a class="reference internal" href="#etc-hosts" id=
596             "id63" name=
597             "id63">5.8&nbsp;&nbsp;&nbsp;/etc/hosts</a></li>
598
599             <li>
600               <a class="reference internal" href="#hostname" id=
601               "id64" name="id64">5.9&nbsp;&nbsp;&nbsp;Hostname</a>
602
603               <ul class="auto-toc">
604                 <li><a class="reference internal" href="#fqdn" id=
605                 "id65" name=
606                 "id65">5.9.1&nbsp;&nbsp;&nbsp;FQDN</a></li>
607               </ul>
608             </li>
609           </ul>
610         </li>
611
612         <li>
613           <a class="reference internal" href="#dnsmasq" id="id66"
614           name="id66">6&nbsp;&nbsp;&nbsp;DNSmasq</a>
615
616           <ul class="auto-toc">
617             <li><a class="reference internal" href=
618             "#configurazione" id="id67" name=
619             "id67">6.1&nbsp;&nbsp;&nbsp;Configurazione</a></li>
620
621             <li><a class="reference internal" href="#dhcp" id=
622             "id68" name="id68">6.2&nbsp;&nbsp;&nbsp;DHCP</a></li>
623
624             <li><a class="reference internal" href="#dns-cache" id=
625             "id69" name="id69">6.3&nbsp;&nbsp;&nbsp;DNS
626             cache</a></li>
627           </ul>
628         </li>
629
630         <li>
631           <a class="reference internal" href=
632           "#bind-dns-autoritativo" id="id70" name=
633           "id70">7&nbsp;&nbsp;&nbsp;Bind : DNS Autoritativo</a>
634
635           <ul class="auto-toc">
636             <li><a class="reference internal" href="#id5" id="id71"
637             name="id71">7.1&nbsp;&nbsp;&nbsp;DNS cache</a></li>
638
639             <li>
640               <a class="reference internal" href=
641               "#ospitare-una-zona" id="id72" name=
642               "id72">7.2&nbsp;&nbsp;&nbsp;Ospitare una zona</a>
643
644               <ul class="auto-toc">
645                 <li><a class="reference internal" href=
646                 "#named-conf-local" id="id73" name=
647                 "id73">7.2.1&nbsp;&nbsp;&nbsp;named.conf.local</a></li>
648
649                 <li>
650                   <a class="reference internal" href=
651                   "#configurazione-della-zona" id="id74" name=
652                   "id74">7.2.2&nbsp;&nbsp;&nbsp;Configurazione
653                   della zona</a>
654
655                   <ul class="auto-toc">
656                     <li><a class="reference internal" href=
657                     "#soa-start-of-authority-record" id="id75"
658                     name="id75">7.2.2.1&nbsp;&nbsp;&nbsp;SOA: Start
659                     of Authority Record</a></li>
660
661                     <li><a class="reference internal" href=
662                     "#altri-campi" id="id76" name=
663                     "id76">7.2.2.2&nbsp;&nbsp;&nbsp;Altri
664                     campi:</a></li>
665                   </ul>
666                 </li>
667               </ul>
668             </li>
669
670             <li><a class="reference internal" href="#dns-slave" id=
671             "id77" name="id77">7.3&nbsp;&nbsp;&nbsp;DNS
672             slave</a></li>
673
674             <li>
675               <a class="reference internal" href=
676               "#aggiornamento-dinamico-nsupdate" id="id78" name=
677               "id78">7.4&nbsp;&nbsp;&nbsp;Aggiornamento dinamico:
678               nsupdate</a>
679
680               <ul class="auto-toc">
681                 <li><a class="reference internal" href=
682                 "#configurazione-client-nsupdate" id="id79" name=
683                 "id79">7.4.1&nbsp;&nbsp;&nbsp;Configurazione client
684                 (nsupdate)</a></li>
685
686                 <li><a class="reference internal" href=
687                 "#configurazione-server-riconoscimento-chiave" id=
688                 "id80" name=
689                 "id80">7.4.2&nbsp;&nbsp;&nbsp;Configurazione
690                 server: riconoscimento chiave</a></li>
691
692                 <li><a class="reference internal" href=
693                 "#server-gestione-dell-intera-zona" id="id81" name=
694                 "id81">7.4.3&nbsp;&nbsp;&nbsp;Server: gestione
695                 dell'intera zona</a></li>
696
697                 <li><a class="reference internal" href=
698                 "#automatizzare-l-aggiornamento-dinamico" id="id82"
699                 name="id82">7.4.4&nbsp;&nbsp;&nbsp;Automatizzare
700                 l'aggiornamento dinamico</a></li>
701               </ul>
702             </li>
703
704             <li><a class="reference internal" href=
705             "#link-suggeriti" id="id83" name=
706             "id83">7.5&nbsp;&nbsp;&nbsp;Link suggeriti:</a></li>
707           </ul>
708         </li>
709
710         <li>
711           <a class="reference internal" href="#samba" id="id84"
712           name="id84">8&nbsp;&nbsp;&nbsp;Samba</a>
713
714           <ul class="auto-toc">
715             <li><a class="reference internal" href="#pacchetti" id=
716             "id85" name=
717             "id85">8.1&nbsp;&nbsp;&nbsp;Pacchetti</a></li>
718
719             <li><a class="reference internal" href=
720             "#passwords-e-autenticazione" id="id86" name=
721             "id86">8.2&nbsp;&nbsp;&nbsp;Passwords e
722             autenticazione</a></li>
723
724             <li><a class="reference internal" href=
725             "#creazione-utenti" id="id87" name=
726             "id87">8.3&nbsp;&nbsp;&nbsp;Creazione Utenti</a></li>
727
728             <li>
729               <a class="reference internal" href=
730               "#creare-la-condivisione" id="id88" name=
731               "id88">8.4&nbsp;&nbsp;&nbsp;Creare la
732               condivisione</a>
733
734               <ul class="auto-toc">
735                 <li><a class="reference internal" href=
736                 "#sicurezza-permessi-di-esecuzione-sul-server" id=
737                 "id89" name=
738                 "id89">8.4.1&nbsp;&nbsp;&nbsp;Sicurezza: permessi
739                 di esecuzione sul server</a></li>
740               </ul>
741             </li>
742
743             <li>
744               <a class="reference internal" href=
745               "#configurazione-dell-applicativo-samba-vero-e-proprio"
746               id="id90" name=
747               "id90">8.5&nbsp;&nbsp;&nbsp;Configurazione
748               dell'applicativo Samba vero e proprio.</a>
749
750               <ul class="auto-toc">
751                 <li><a class="reference internal" href=
752                 "#creazione-di-un-gruppo" id="id91" name=
753                 "id91">8.5.1&nbsp;&nbsp;&nbsp;Creazione di un
754                 gruppo</a></li>
755               </ul>
756             </li>
757
758             <li><a class="reference internal" href=
759             "#testare-il-servizio" id="id92" name=
760             "id92">8.6&nbsp;&nbsp;&nbsp;Testare il
761             Servizio</a></li>
762           </ul>
763         </li>
764
765         <li>
766           <a class="reference internal" href=
767           "#server-di-posta-postfix" id="id93" name=
768           "id93">9&nbsp;&nbsp;&nbsp;Server di posta: Postfix</a>
769
770           <ul class="auto-toc">
771             <li>
772               <a class="reference internal" href=
773               "#test-del-server-smtp" id="id94" name=
774               "id94">9.1&nbsp;&nbsp;&nbsp;Test del server smtp</a>
775
776               <ul class="auto-toc">
777                 <li><a class="reference internal" href="#swaks" id=
778                 "id95" name=
779                 "id95">9.1.1&nbsp;&nbsp;&nbsp;Swaks</a></li>
780               </ul>
781             </li>
782
783             <li><a class="reference internal" href="#imap-e-pop"
784             id="id96" name="id96">9.2&nbsp;&nbsp;&nbsp;Imap e
785             pop</a></li>
786
787             <li>
788               <a class="reference internal" href=
789               "#client-a-riga-di-comando" id="id97" name=
790               "id97">9.3&nbsp;&nbsp;&nbsp;Client a riga di
791               comando</a>
792
793               <ul class="auto-toc">
794                 <li><a class="reference internal" href="#mailx" id=
795                 "id98" name=
796                 "id98">9.3.1&nbsp;&nbsp;&nbsp;mailx</a></li>
797
798                 <li><a class="reference internal" href="#mutt" id=
799                 "id99" name=
800                 "id99">9.3.2&nbsp;&nbsp;&nbsp;Mutt</a></li>
801
802                 <li><a class="reference internal" href=
803                 "#web-client" id="id100" name=
804                 "id100">9.3.3&nbsp;&nbsp;&nbsp;Web client</a></li>
805               </ul>
806             </li>
807
808             <li>
809               <a class="reference internal" href="#graylisting" id=
810               "id101" name=
811               "id101">9.4&nbsp;&nbsp;&nbsp;Graylisting</a>
812
813               <ul class="auto-toc">
814                 <li><a class="reference internal" href=
815                 "#abilitazione-in-postfix" id="id102" name=
816                 "id102">9.4.1&nbsp;&nbsp;&nbsp;Abilitazione in
817                 Postfix</a></li>
818
819                 <li><a class="reference internal" href="#test" id=
820                 "id103" name=
821                 "id103">9.4.2&nbsp;&nbsp;&nbsp;Test</a></li>
822
823                 <li><a class="reference internal" href=
824                 "#statistiche" id="id104" name=
825                 "id104">9.4.3&nbsp;&nbsp;&nbsp;Statistiche</a></li>
826               </ul>
827             </li>
828           </ul>
829         </li>
830
831         <li>
832           <a class="reference internal" href="#firewall" id="id105"
833           name="id105">10&nbsp;&nbsp;&nbsp;Firewall</a>
834
835           <ul class="auto-toc">
836             <li><a class="reference internal" href="#links" id=
837             "id106" name=
838             "id106">10.1&nbsp;&nbsp;&nbsp;Links</a></li>
839
840             <li><a class="reference internal" href="#ipfilter" id=
841             "id107" name=
842             "id107">10.2&nbsp;&nbsp;&nbsp;Ipfilter</a></li>
843
844             <li>
845               <a class="reference internal" href=
846               "#progettazione-di-un-firewall" id="id108" name=
847               "id108">10.3&nbsp;&nbsp;&nbsp;Progettazione di un
848               firewall</a>
849
850               <ul class="auto-toc">
851                 <li><a class="reference internal" href=
852                 "#collocazione" id="id109" name=
853                 "id109">10.3.1&nbsp;&nbsp;&nbsp;Collocazione</a></li>
854
855                 <li><a class="reference internal" href=
856                 "#policy-di-default" id="id110" name=
857                 "id110">10.3.2&nbsp;&nbsp;&nbsp;Policy di
858                 default</a></li>
859
860                 <li><a class="reference internal" href="#hardware"
861                 id="id111" name=
862                 "id111">10.3.3&nbsp;&nbsp;&nbsp;Hardware</a></li>
863               </ul>
864             </li>
865
866             <li><a class="reference internal" href=
867             "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
868             "id112" name="id112">10.4&nbsp;&nbsp;&nbsp;Percorso dei
869             pacchetti tra tabelle e catene</a></li>
870
871             <li>
872               <a class="reference internal" href=
873               "#concetti-di-base" id="id113" name=
874               "id113">10.5&nbsp;&nbsp;&nbsp;Concetti di base</a>
875
876               <ul class="auto-toc">
877                 <li><a class="reference internal" href=
878                 "#tabelle-catene-regole" id="id114" name=
879                 "id114">10.5.1&nbsp;&nbsp;&nbsp;Tabelle, catene,
880                 regole</a></li>
881
882                 <li><a class="reference internal" href="#match" id=
883                 "id115" name=
884                 "id115">10.5.2&nbsp;&nbsp;&nbsp;Match</a></li>
885
886                 <li><a class="reference internal" href="#targets"
887                 id="id116" name=
888                 "id116">10.5.3&nbsp;&nbsp;&nbsp;Targets</a></li>
889               </ul>
890             </li>
891
892             <li><a class="reference internal" href=
893             "#tabella-filter" id="id117" name=
894             "id117">10.6&nbsp;&nbsp;&nbsp;Tabella Filter</a></li>
895
896             <li><a class="reference internal" href=
897             "#flush-automatico-per-macchine-remote" id="id118"
898             name="id118">10.7&nbsp;&nbsp;&nbsp;Flush automatico per
899             macchine remote</a></li>
900
901             <li><a class="reference internal" href=
902             "#gestione-regole-rules" id="id119" name=
903             "id119">10.8&nbsp;&nbsp;&nbsp;Gestione regole
904             (rules)</a></li>
905
906             <li>
907               <a class="reference internal" href=
908               "#salvataggio-regole" id="id120" name=
909               "id120">10.9&nbsp;&nbsp;&nbsp;Salvataggio regole</a>
910
911               <ul class="auto-toc">
912                 <li><a class="reference internal" href=
913                 "#iptables-save" id="id121" name=
914                 "id121">10.9.1&nbsp;&nbsp;&nbsp;Iptables-save</a></li>
915
916                 <li><a class="reference internal" href=
917                 "#iptables-restore" id="id122" name=
918                 "id122">10.9.2&nbsp;&nbsp;&nbsp;Iptables-restore</a></li>
919               </ul>
920             </li>
921
922             <li>
923               <a class="reference internal" href="#esempi" id=
924               "id123" name=
925               "id123">10.10&nbsp;&nbsp;&nbsp;Esempi</a>
926
927               <ul class="auto-toc">
928                 <li><a class="reference internal" href=
929                 "#bloccare-i-ping-dall-esterno" id="id124" name=
930                 "id124">10.10.1&nbsp;&nbsp;&nbsp;Bloccare i ping
931                 dall'esterno</a></li>
932
933                 <li><a class="reference internal" href=
934                 "#masquerading-snat" id="id125" name=
935                 "id125">10.10.2&nbsp;&nbsp;&nbsp;Masquerading
936                 (sNAT)</a></li>
937
938                 <li><a class="reference internal" href=
939                 "#brute-force" id="id126" name=
940                 "id126">10.10.3&nbsp;&nbsp;&nbsp;Brute
941                 force</a></li>
942               </ul>
943             </li>
944
945             <li>
946               <a class="reference internal" href="#proc-filesystem"
947               id="id127" name="id127">10.11&nbsp;&nbsp;&nbsp;Proc
948               filesystem</a>
949
950               <ul class="auto-toc">
951                 <li><a class="reference internal" href=
952                 "#ip-forward" id="id128" name=
953                 "id128">10.11.1&nbsp;&nbsp;&nbsp;ip_forward</a></li>
954
955                 <li><a class="reference internal" href=
956                 "#ip-default-ttl" id="id129" name=
957                 "id129">10.11.2&nbsp;&nbsp;&nbsp;ip_default_ttl</a></li>
958
959                 <li><a class="reference internal" href=
960                 "#ip-local-port-range" id="id130" name=
961                 "id130">10.11.3&nbsp;&nbsp;&nbsp;ip_local_port_range</a></li>
962               </ul>
963             </li>
964           </ul>
965         </li>
966
967         <li>
968           <a class="reference internal" href="#ftp-server" id=
969           "id131" name="id131">11&nbsp;&nbsp;&nbsp;FTP Server</a>
970
971           <ul class="auto-toc">
972             <li><a class="reference internal" href="#id8" id=
973             "id132" name=
974             "id132">11.1&nbsp;&nbsp;&nbsp;Pacchetti</a></li>
975
976             <li><a class="reference internal" href="#sessioni-ftp"
977             id="id133" name="id133">11.2&nbsp;&nbsp;&nbsp;Sessioni
978             ftp</a></li>
979
980             <li><a class="reference internal" href=
981             "#configurazione-iniziale" id="id134" name=
982             "id134">11.3&nbsp;&nbsp;&nbsp;Configurazione
983             iniziale</a></li>
984
985             <li><a class="reference internal" href=
986             "#abilitare-gli-utenti-locali" id="id135" name=
987             "id135">11.4&nbsp;&nbsp;&nbsp;Abilitare gli utenti
988             locali</a></li>
989
990             <li><a class="reference internal" href="#jail-chroot"
991             id="id136" name="id136">11.5&nbsp;&nbsp;&nbsp;Jail
992             chroot</a></li>
993
994             <li><a class="reference internal" href=
995             "#permessi-sul-filesystem" id="id137" name=
996             "id137">11.6&nbsp;&nbsp;&nbsp;Permessi sul
997             filesystem</a></li>
998
999             <li><a class="reference internal" href=
1000             "#shell-dell-utente" id="id138" name=
1001             "id138">11.7&nbsp;&nbsp;&nbsp;Shell
1002             dell'utente</a></li>
1003
1004             <li><a class="reference internal" href="#altre-opzioni"
1005             id="id139" name="id139">11.8&nbsp;&nbsp;&nbsp;Altre
1006             opzioni</a></li>
1007           </ul>
1008         </li>
1009       </ul>
1010     </div>
1011
1012     <p>Generato il 2010-05-19 con: <a class="reference external"
1013     href=
1014     "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
1015
1016     <div class="section" id="configurazione-sistema">
1017       <h1><a class="toc-backref" href=
1018       "#id9">1&nbsp;&nbsp;&nbsp;Configurazione sistema</a></h1>
1019
1020       <div class="section" id="solo-per-uso-interno">
1021         <h2><a class="toc-backref" href=
1022         "#id10">1.1&nbsp;&nbsp;&nbsp;Solo per uso interno</a></h2>
1023
1024         <p>Impostazioni di base per la configurazione del sistema
1025         operativo e della rete nel laboratorio 208 facente parte
1026         della rete piffa.net .</p>
1027
1028         <p>Sono qui riportati i parametri della rete locale per
1029         comodita' degli studenti, gli altri lettori possono
1030         considerarli come riferimento per comprendere i valori
1031         espressi nei vari file di configurazione. Ad esempio:
1032         quando leggerete <tt class=
1033         "docutils literal">10.10.208.248:3128</tt> saprete che si
1034         tratta del nostro <em>proxy http</em> in ascolto sulla
1035         porta <cite>3128</cite>, stara' quindi a voi sostituire i
1036         dati con gli equivalenti <em>IP</em> della vostra rete.</p>
1037       </div>
1038
1039       <div class="section" id="rete">
1040         <h2><a class="toc-backref" href=
1041         "#id11">1.2&nbsp;&nbsp;&nbsp;Rete</a></h2>
1042
1043         <p>Parametri della rete attualmente in uso:</p>
1044
1045         <table border="1" class="docutils">
1046           <colgroup>
1047             <col width="45%">
1048             <col width="55%">
1049           </colgroup>
1050
1051           <tbody valign="top">
1052             <tr>
1053               <td colspan="2">Parametri della rete</td>
1054             </tr>
1055
1056             <tr>
1057               <td>rete</td>
1058
1059               <td>10.10.208.0/24</td>
1060             </tr>
1061
1062             <tr>
1063               <td>netmask</td>
1064
1065               <td>255.255.255.0</td>
1066             </tr>
1067
1068             <tr>
1069               <td>broadcast</td>
1070
1071               <td>10.10.208.255</td>
1072             </tr>
1073
1074             <tr>
1075               <td>gateway</td>
1076
1077               <td>10.10.208.248</td>
1078             </tr>
1079
1080             <tr>
1081               <td>DNS</td>
1082
1083               <td>10.10.208.248</td>
1084             </tr>
1085           </tbody>
1086         </table>
1087
1088         <p>Dal server locale degli studeti,
1089         <strong>Bender</strong>, corrispondente all'IP <tt class=
1090         "docutils literal">10.10.208.248</tt>, vengono erogati i
1091         servizi DHCP, DNS, gateway (con NAT), proxy http e mirror
1092         della distribuzione Debian ( <a class="reference external"
1093         href=
1094         "http://debian.piffa.net">http://debian.piffa.net</a>).
1095         Altri servizi in esecuzione sul server:</p>
1096
1097         <ul class="simple">
1098           <li>Rsync server e altri software di aggiornamento /
1099           installazione di massa</li>
1100
1101           <li>Server imap / pop3 / webmail / smtp</li>
1102
1103           <li>Server ssh per i test degli studenti</li>
1104
1105           <li>File server Samba, NFS e controller di qualsiasi
1106           altro FS distribuito</li>
1107
1108           <li>Print server per la gestione delle stampanti</li>
1109
1110           <li>DNS server</li>
1111
1112           <li>Mirror locale delle *.iso dei sistemi operativi e dei
1113           vari software usati durante le lezioni</li>
1114
1115           <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1116           framework vengono attivati a seconda dei corsi
1117           attivi)</li>
1118         </ul>
1119
1120         <p>Durante il corso delle lezioni e' opportuno che le
1121         macchine degli studenti si appoggino al server Bender
1122         (ottetto finale <tt class="docutils literal">248</tt>), nel
1123         caso questo non fosse raggiungibile (ad esempio per
1124         permettere impostazioni di DHCP / routing diverse) sara'
1125         comunque disponibile il <tt class=
1126         "docutils literal">10.10.208.254</tt> come gateway | DNS
1127         per la rete <tt class=
1128         "docutils literal">10.10.208.10</tt>.</p>
1129
1130         <p><strong>Non e' piu' possibile</strong> raggiungere
1131         Bender tramite l'IP pubblico <tt class=
1132         "docutils literal">212.22.136.248</tt> o <em>qualsiasi
1133         altro ip</em> della classe <tt class="docutils literal">C
1134         212.22.136.0/24</tt> precedentemente disponibile.</p>
1135
1136         <p>Il computer del docente con il server VNC e' sempre
1137         configurato con l'ottetto finale: <tt class=
1138         "docutils literal">177</tt> della rete utilizzata durante
1139         le lezioni (quindi generalmente la VNC sara' disponibile
1140         sul <tt class="docutils literal">10.10.208.177:1</tt>.</p>
1141
1142         <p>Gli studenti sono pregati di non impedire l'accesso SSH
1143         alla propria macchina dal computer del docente, e non
1144         modificare la password dell'utente <tt class=
1145         "docutils literal">root</tt> del sistema operativo
1146         <em>pre-istallato</em> (ad es: <em>Diurno</em>).</p>
1147
1148         <div class="section" id="interfaces">
1149           <h3><a class="toc-backref" href=
1150           "#id12">1.2.1&nbsp;&nbsp;&nbsp;interfaces</a></h3>
1151
1152           <p>Segue un esempio del file di configurazione della
1153           scheda di rete con configurazione statica:</p>
1154
1155           <p>/etc/network/interfaces:</p>
1156           <pre class="literal-block">
1157 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1158
1159 # The loopback interface
1160 iface lo inet loopback
1161
1162 # La prima scheda di rete (se si chiama eth0)
1163 iface etho inet static
1164   # esempio con dhcp:
1165   # iface etho inet dhcp
1166 address 10.10.208.101
1167 netmask 255.255.255.0
1168 network 10.10.208.0
1169 broadcast 10.10.208.255
1170 gateway 10.10.208.254
1171
1172 # Quali interfaccie devono partire automaticamente:
1173 auto lo eth0
1174 </pre>
1175
1176           <p>Controllare il nome della propria scheda di rete: a
1177           volte <em>udev</em> rinomina la prima scheda a <tt class=
1178           "docutils literal">eth1</tt>, oppure potreste avere piu'
1179           di una scheda di rete (anche un'interfaccia
1180           <em>firewire</em> puo' essere automaticamente abilitata
1181           come scheda di rete).</p>
1182
1183           <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1184           , eth0:1 , ...) ricordarsi che queste dipendono dalla
1185           scheda fisica a cui sono associate: abbattere con
1186           <tt class="docutils literal">ifconfig down eth0</tt> la
1187           scheda principale fara' cadere anche queste. Tornando ad
1188           attivare la scada principale con <tt class=
1189           "docutils literal">ifconfig eth0 up</tt> la virtuale
1190           tornera' attiva: nel caso voleste disabilitarla dovrete
1191           quindi sempre abbattere manualmente la scheda virtuale
1192           <em>prima</em> della scheda reale.</p>
1193
1194           <p>I DNS vanno indicati nel file <tt class=
1195           "docutils literal">/etc/resolv.conf</tt> , la cui
1196           sintassi e' spiegata al punto 4.6 . Come DNS si
1197           <em>deve</em> usare il server Bender, alcuni parametri
1198           dei software di installazione, risoluzione dei mirror,
1199           vengono opportunamente modificatia da questo DNS.</p>
1200         </div>
1201       </div>
1202
1203       <div class="section" id="bash-completion">
1204         <h2><a class="toc-backref" href=
1205         "#id13">1.3&nbsp;&nbsp;&nbsp;Bash completion</a></h2>
1206
1207         <p>Il completamento automatico della shell (che si attiva
1208         premendo il tasto tab una o due volte mentre si sta
1209         scrivendo un termine) permette di comporre automaticamente
1210         i nomi dei comandi e i percorsi dei file, sopratutto la
1211         composizione automatica dei percorsi dei file e' di grande
1212         importanza.</p>
1213
1214         <p>Bash_completion permette di integrare il completamento
1215         automatico con i nomi dei pacchetti e oggetti dei comandi:
1216         ad es. volendo digitare <tt class=
1217         "docutils literal"><span class="pre">apt-get</span>
1218         inst[TAB] xtigh[TAB]</tt> ora verra' completato
1219         automaticamente sia la parola <tt class=
1220         "docutils literal">install</tt> che il nome del pacchetto
1221         <tt class="docutils literal">xtightvncviewer</tt>.</p>
1222
1223         <p>Abilitare /etc/bash_completion nel file <tt class=
1224         "docutils literal">/etc/bash.bashrc</tt> oppure includerlo
1225         nel proprio <tt class="docutils literal"><span class=
1226         "pre">~/.bashrc</span></tt> (che sarebbe il file
1227         <em>nascosto</em>, quindi con un punto all'inizio del nome
1228         del file, di configurazione della shell bash per ogni
1229         utente, presente nella propria <em>home
1230         directory</em>):</p>
1231         <pre class="literal-block">
1232 echo ". /etc/bash_completion" &gt;&gt; ~/.bashrc
1233 </pre>
1234
1235         <p>Esempio di ~/.bahsrc</p>
1236         <pre class="literal-block">
1237 # ~/.bashrc: executed by bash(1) for non-login shells.
1238
1239 export PS1='\h:\w\$ '
1240 umask 022
1241
1242 # De-commentare le seguenti righe per abilitare la colorazione dei
1243 # nomi dei file:
1244  export LS_OPTIONS='--color=auto'
1245  eval "`dircolors`"
1246  alias ls='ls $LS_OPTIONS'
1247  alias ll='ls $LS_OPTIONS -l'
1248  alias l='ls $LS_OPTIONS -lA'
1249
1250 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1251 # alias rm='rm -i'
1252 # alias cp='cp -i'
1253 # alias mv='mv -i'
1254
1255 # questo abilita bash completion
1256 . /etc/bash_completion
1257 </pre>
1258
1259         <p>Il file <tt class=
1260         "docutils literal">/etc/bash_completion</tt> deve essere
1261         presente nel sistema, in caso contrario installare il
1262         pacchetto: <tt class="docutils literal"><span class=
1263         "pre">bash-completion</span></tt>. Generalmente l'utente
1264         <tt class="docutils literal">root</tt> ha un file
1265         <tt class="docutils literal">.bashrc</tt> preimpostato
1266         analogo a quello citato sopra, a differenza dei normali
1267         utenti di sistema.</p>
1268
1269         <p>Links:</p>
1270
1271         <ul class="simple">
1272           <li><a class="reference external" href=
1273           "http://www.debian-administration.org/articles/316">An
1274           introduction to bash completion</a></li>
1275
1276           <li><a class="reference external" href=
1277           "http://www.caliban.org/bash/">Working more productively
1278           with bash 2.x/3.x</a></li>
1279
1280           <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1281           "reference external" href=
1282           "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1283         </ul>
1284       </div>
1285
1286       <div class="section" id="vim">
1287         <h2><a class="toc-backref" href=
1288         "#id14">1.4&nbsp;&nbsp;&nbsp;Vim</a></h2>
1289
1290         <p>Vim e' l'editor di testo preferito dai sistemisti,
1291         quindi sara' conveniente impostare fin da subito alcune
1292         impostazioni per renderlo piu' comodo.</p>
1293
1294         <p>Assicurarsi che sia installata nel sistema la versione
1295         completa dell'editor installando il pacchetto <tt class=
1296         "docutils literal">vim</tt>:</p>
1297         <pre class="literal-block">
1298 # apt-get install vim
1299 </pre>
1300
1301         <p>Modificare poi il file di configurazione generale
1302         <tt class="docutils literal">/etc/vim/vimrc</tt></p>
1303         <pre class="literal-block">
1304 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1305 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1306 " you can find below.  If you wish to change any of those settings, you should
1307 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1308 " everytime an upgrade of the vim packages is performed.  It is recommended to
1309 " make changes after sourcing debian.vim since it alters the value of the
1310 " 'compatible' option.
1311
1312 " This line should not be removed as it ensures that various options are
1313 " properly set to work with the Vim-related packages available in Debian.
1314 runtime! debian.vim
1315
1316 " Uncomment the next line to make Vim more Vi-compatible
1317 " NOTE: debian.vim sets 'nocompatible'.  Setting 'compatible' changes numerous
1318 " options, so any other options should be set AFTER setting 'compatible'.
1319 "set compatible
1320
1321 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1322 " line enables syntax highlighting by default.
1323 syntax on
1324
1325 " If using a dark background within the editing area and syntax highlighting
1326 " turn on this option as well.
1327 set background=dark
1328
1329 " Uncomment the following to have Vim jump to the last position when
1330 " reopening a file
1331
1332 if has("autocmd")
1333   au BufReadPost * if line("'\"") &gt; 0 &amp;&amp; line("'\"") &lt;= line("$")
1334     \| exe "normal! g'\"" | endif
1335 endif
1336
1337 " Uncomment the following to have Vim load indentation rules and plugins
1338 " according to the detected filetype.
1339 " This is not recommanded if you often copy and paste into vim,
1340 " as it messes all the indentation.
1341 if has("autocmd")
1342   filetype plugin indent on
1343 endif
1344
1345 " This goes for comments folding: use co to expnad and zc to compress,
1346 " zi to toggle on/off
1347 set fdm=expr
1348 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1349
1350 " The following are commented out as they cause vim to behave a lot
1351 " differently from regular Vi. They are highly recommended though.
1352 set showcmd             " Show (partial) command in status line.
1353 "set showmatch          " Show matching brackets.
1354 # Ignorecase is quite userfull
1355 set ignorecase          " Do case insensitive matching
1356 "set smartcase          " Do smart case matching
1357 "set incsearch          " Incremental search
1358 set autowrite           " Automatically save before commands like :next and :make
1359 "set hidden             " Hide buffers when they are abandoned
1360 "set mouse=a            " Enable mouse usage (all modes) in terminals
1361
1362 " Source a global configuration file if available
1363 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1364 if filereadable("/etc/vim/vimrc.local")
1365   source /etc/vim/vimrc.local
1366 endif
1367 </pre>
1368
1369         <p>I principianti faranno bene ad esercitarsi con
1370         <tt class="docutils literal">vimtutor it</tt>.</p>
1371
1372         <p>Altri link per VIM:</p>
1373
1374         <ul class="simple">
1375           <li>Vim Introduction and Tutorial: <a class=
1376           "reference external" href=
1377           "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1378           http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1379
1380           <li><a class="reference external" href=
1381           "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1382
1383           <li><a class="reference external" href=
1384           "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1385         </ul>
1386       </div>
1387
1388       <div class="section" id="vnc">
1389         <h2><a class="toc-backref" href=
1390         "#id15">1.5&nbsp;&nbsp;&nbsp;VNC</a></h2>
1391
1392         <p>I Virtual Network Computing (o VNC) sono software di
1393         controllo remoto e servono per amministrare un computer a
1394         distanzai. Nel nostro caso la VNC sara' utilizzata per
1395         visualizzare la sessione di lavoro di un altro computer sul
1396         proprio a scopo didattico.</p>
1397
1398         <p>Per collegarvi al server del docente usate lo script
1399         <tt class="docutils literal">guarda.sh</tt> che dovrebbe
1400         gia essere disponibili sui sistemi preconfigurati, oppure
1401         potete invocare direttamente il collegamento con:</p>
1402         <pre class="literal-block">
1403 xtightvncviewer -viewonly 10.10.208.177:1
1404 </pre>
1405
1406         <p>Se il comando non fosse disponibile installate il
1407         pacchetto <tt class=
1408         "docutils literal">xtightvncviewer</tt>. Potete anche
1409         scaricare lo script <tt class=
1410         "docutils literal">guarda.sh</tt> e renderlo eseguibile, ed
1411         eventualmente creare una voce nel menu di KDE per
1412         richiamarlo.</p>
1413
1414         <p>Procedura:</p>
1415         <pre class="literal-block">
1416 su root
1417 cd /usr/local/bin
1418 wget http://bender/guarda.sh
1419 chmod +x guarda.sh
1420 exit
1421 </pre>
1422
1423         <p>Per eseguire lo script digitare semplicemente <tt class=
1424         "docutils literal">guarda.sh</tt>, oppure creare un link /
1425         collegamento sul Desktop allo script <tt class=
1426         "docutils literal">/usr/local/bin/guarda.sh</tt>.</p>
1427
1428         <p>Le impostazioni del server VNC sono:</p>
1429
1430         <table border="1" class="docutils">
1431           <colgroup>
1432             <col width="55%">
1433             <col width="45%">
1434           </colgroup>
1435
1436           <thead valign="bottom">
1437             <tr>
1438               <th class="head">Parametro</th>
1439
1440               <th class="head">Valore</th>
1441             </tr>
1442           </thead>
1443
1444           <tbody valign="top">
1445             <tr>
1446               <td>IP</td>
1447
1448               <td>10.10.208.177:1</td>
1449             </tr>
1450
1451             <tr>
1452               <td>Server grafico</td>
1453
1454               <td>:1</td>
1455             </tr>
1456
1457             <tr>
1458               <td>password</td>
1459
1460               <td>password</td>
1461             </tr>
1462           </tbody>
1463         </table>
1464
1465         <p>Si noti che non e' possibile lanciare un applicativo sul
1466         server grafico di un utente da una shell in cui si sta
1467         lavorando come altro utente, anche se root. E' quindi
1468         necessario essere l'utente di sistema che si e' loggato
1469         inizialmente nella sessione grafica per poter lanciare lo
1470         script guarda.sh da una shell.</p>
1471
1472         <p>Controllare con <tt class="docutils literal">whoami</tt>
1473         di essere l'utente normale (es <tt class=
1474         "docutils literal">utente | studente | proprio nome</tt> ),
1475         in caso si sia assunta una altra <tt class=
1476         "docutils literal">id</tt> si apra un altra shell o si esca
1477         da quella attuale con <tt class=
1478         "docutils literal">exit</tt> .</p>
1479       </div>
1480
1481       <div class="section" id="lista-dei-pacchetti-di-base">
1482         <h2><a class="toc-backref" href=
1483         "#id16">1.6&nbsp;&nbsp;&nbsp;Lista dei pacchetti di
1484         base</a></h2>
1485
1486         <p>I pacchetti installati generalmente <a class=
1487         "footnote-reference" href="#id2" id="id1" name=
1488         "id1">[1]</a> per poter seguire le lezioni sono:</p>
1489         <pre class="literal-block">
1490 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1491 </pre>
1492
1493         <table class="docutils footnote" frame="void" id="id2"
1494         rules="none">
1495           <colgroup>
1496             <col class="label">
1497             <col>
1498           </colgroup>
1499
1500           <tbody valign="top">
1501             <tr>
1502               <td class="label"><a class="fn-backref" href=
1503               "#id1">[1]</a></td>
1504
1505               <td><tt class="docutils literal"><span class=
1506               "pre">kde-core</span></tt> e' piu' leggero del
1507               pacchetto <tt class="docutils literal">kde</tt>.
1508               Esiste un equivalente <tt class=
1509               "docutils literal"><span class=
1510               "pre">gnome-core</span></tt> per chi preferisce
1511               Gnome, nel caso si potrebbe installare il log-in
1512               manager <cite>gdm</cite> al posto di
1513               <cite>kdm</cite>.</td>
1514             </tr>
1515           </tbody>
1516         </table>
1517       </div>
1518
1519       <div class="section" id="apt-configurazione">
1520         <h2><a class="toc-backref" href=
1521         "#id17">1.7&nbsp;&nbsp;&nbsp;Apt configurazione</a></h2>
1522
1523         <p>Vediamo i due file principali di apt:</p>
1524
1525         <ul class="simple">
1526           <li><tt class=
1527           "docutils literal">/etc/apt/sources.list</tt></li>
1528
1529           <li><tt class=
1530           "docutils literal">/etc/apt/apt.conf</tt></li>
1531         </ul>
1532
1533         <div class="section" id="sources-list">
1534           <h3><a class="toc-backref" href=
1535           "#id18">1.7.1&nbsp;&nbsp;&nbsp;sources.list</a></h3>
1536
1537           <p>Questo file contiene i sorgenti da cui <em>apt</em>
1538           preleva i pacchetti da installare tramite <em>dpkg</em>,
1539           vengono quindi precisati i metodi (ad es. http / ftp /
1540           cdrom / file), la release che si vuole tracciare (es
1541           <tt class="docutils literal">stable, testing,
1542           unstable</tt> oppure i corrispondenti release name es:
1543           <tt class="docutils literal">Lenny, Squeeze, Sid</tt>), i
1544           rami di interesse (es: <tt class=
1545           "docutils literal">main</tt> che e' l'archivio
1546           principale, <tt class="docutils literal"><span class=
1547           "pre">non-free</span></tt> per il software non libero,
1548           <tt class="docutils literal">contrib</tt> per i pacchetti
1549           non realizzati dai manutentori ufficiali).</p>
1550
1551           <p>Gli archivi sono generalmente:</p>
1552
1553           <ul class="simple">
1554             <li><tt class="docutils literal">deb</tt> per pacchetti
1555             Debian binari, pronti per l'installazione.</li>
1556
1557             <li><tt class="docutils literal"><span class=
1558             "pre">deb-src</span></tt> per i pacchetti sorgenti
1559             (quindi da compilare, come il kernel) degli stessi
1560             pacchetti binari. In genere se non compilate spesso
1561             potete evitare di tracciare i sorgenti per risparmiare
1562             tempo e banda.</li>
1563           </ul>
1564
1565           <p><tt class=
1566           "docutils literal">/etc/apt/sources.list</tt></p>
1567           <pre class="literal-block">
1568 # esempio di accesso a un CDROM:
1569 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1570
1571 # ftp.it.debian.org viene rediretto su un mirror interno
1572 # quando vi trovate nella rete interna piffa.net
1573 deb http://ftp.it.debian.org/debian/ lenny main
1574 # Sono disponibili anche i rami non-free contrib
1575 # deb http://ftp.it.debian.org/debian/ lenny  non-free contrib
1576 # Sono disponibili anche le release unstable e testing
1577 # deb http://ftp.it.debian.org/debian/ testing  main non-free contrib
1578 # deb http://ftp.it.debian.org/debian/ sid  main non-free contrib
1579
1580 # Sorgenti dei pacchetti:
1581 # deb-src http://ftp.bononia.it/debian/ lenny main
1582
1583 # Mirror da kernel.org europa da usare a casa:
1584 deb http://mirrors.eu.kernel.org/debian/ lenny main
1585
1586 # Security dal sito principale
1587 deb http://security.debian.org/ lenny/updates main
1588 # deb-src http://security.debian.org/ lenny/updates main
1589
1590 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1591 # non legati a dinamiche di sicurezza
1592 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1593 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1594
1595 # Esempio di accesso a un file system locale contenente i pacchetti:
1596 # Potete scaricarei in aula con debmirror  da debian.piffa.net
1597 # un mirror locale da usare poi a casa anche senza internet
1598 # deb file:/mnt/mirror sid main non-free contrib
1599 </pre>
1600         </div>
1601
1602         <div class="section" id="etc-apt-apt-conf">
1603           <h3><a class="toc-backref" href=
1604           "#id19">1.7.2&nbsp;&nbsp;&nbsp;/etc/apt/apt.conf</a></h3>
1605
1606           <p>Questo file contiene le opzioni di apt, come ad
1607           esempio il proxy:</p>
1608           <pre class="literal-block">
1609 Acquire::http::Proxy "http://10.10.208.248:3128";
1610 </pre>
1611
1612           <p>Si tenga conto che se si imposta un proxy per apt sul
1613           proprio portatile e tornati a casa propria si vuole
1614           scaricare nuovi pacchetti si dovra' disabilitare il proxy
1615           commentando la riga con ";" (''punto-e-virgola''). Su un
1616           portatile vi conviene tracciare il mirror <tt class=
1617           "docutils literal">ftp.it.debian.org</tt> senza impostare
1618           il proxy: in aula verra' rediretto al mirror locale e a
1619           casa vi appoggerete al mirror ufficiale.</p>
1620
1621           <p>E' consigliabile impostare il proxy per apt anche in
1622           presenza di un proxy-http <em>trasparente</em>.</p>
1623         </div>
1624       </div>
1625     </div>
1626
1627     <div class="section" id="squid">
1628       <h1><a class="toc-backref" href=
1629       "#id20">2&nbsp;&nbsp;&nbsp;Squid</a></h1>
1630
1631       <p>Squid e' un proxy cache http (ma puo' anche gestire i
1632       protocolli FTP e https) robusto e strutturato, grazie alla
1633       sua flessibilita' puo' essere utilizzato sia in piccole reti
1634       locali che in scenari piu' complessi. E' molto semplice
1635       configurarlo per la semplice <em>condivisione della
1636       navigazione internet</em> all'interno di una rete locale, per
1637       poi poter sucessivamente implementare la autenticazione degli
1638       utenti, il filtraggio dei contenuti (Squid e' una
1639       applicazione che si muove nel 4' livello del modello TCP/IP a
1640       differenza di un <em>ipfilter</em> limitato al 2'), il
1641       bilanciamento del carico tra piu' server proxy.</p>
1642
1643       <p>Se il server Squid e' in grado di accedere a internet
1644       puor' permette la navigazione web a una rete basata su
1645       indirizzi IP privati (es una 192.168.0.0/24). E se la rete
1646       privata deve solo navigare in internet, non serve introdurre
1647       nella rete un NAT (si veda la sezione sui firewall) per
1648       condividere la connessione: basta il solo Squid. Per altro
1649       non servira' neanche un servizio DNS accessibile dai clients
1650       dato che sara' il solo Squid a risolvere i nomi di dominio
1651       per i suoi client http.</p>
1652
1653       <p>Inoltre Squid svolge la funzione di <em>anonymizer</em>:
1654       nasconde i client http alla rete internet: e' solo il server
1655       proxy ad accedere ai server web frequentati dai client:
1656       questi non sono percepiti ed esposti all'esterno della rete
1657       locale ma si relazionano solo con Squid. Dal punto di vista
1658       della sicurezza della rete locale questo e' preferibile ad un
1659       approccio alla navigazione basato su NAT.</p>
1660
1661       <p>Squid ascolta di default sulla porta <tt class=
1662       "docutils literal">3128</tt>, per quanto in genere la porta
1663       preferita per i servizi di caching http sia la <tt class=
1664       "docutils literal">8080</tt>. Per utilizzarlo subito anche
1665       per apt si aggiunga ad <tt class=
1666       "docutils literal">/etc/apt/apt.conf</tt></p>
1667       <pre class="literal-block">
1668 Acquire::http::Proxy "10.10.208.254:3128";
1669 </pre>
1670
1671       <p>Per installare Squid si usi il pacchetto:</p>
1672       <pre class="literal-block">
1673 squid3
1674 </pre>
1675
1676       <div class="section" id="configurazione-squid-conf">
1677         <h2><a class="toc-backref" href=
1678         "#id21">2.1&nbsp;&nbsp;&nbsp;Configurazione:
1679         squid.conf</a></h2>
1680
1681         <p>egue un estratto delle direttive principali viste in
1682         aula presenti nel file di configurazione <tt class=
1683         "docutils literal">/etc/squid3/squid.conf</tt> .</p>
1684
1685         <div class="section" id="cache-dir">
1686           <h3><a class="toc-backref" href=
1687           "#id22">2.1.1&nbsp;&nbsp;&nbsp;Cache_dir</a></h3>
1688
1689           <p>Cache dir serve per impostare caratteristiche
1690           fondamentali della cache creata sul supporto di storaggio
1691           quali dimensione e percorso nel file-system. Essendo la
1692           dimensione di default della cache pari a ~``100 MB`` e'
1693           altamente consigliabili aumentare questo parametro se si
1694           vuole godere dei vantaggi della funzione di cache per
1695           piu' clients.</p>
1696
1697           <p>Per stabilire il dimensionamento della cache si tenga
1698           conto dello spazio disponibile, dimensioni tipiche e
1699           massime degli oggetti che si vuole tenere in cache (un
1700           solo file .iso occupa circa <tt class=
1701           "docutils literal">700 MB</tt>, il pacchetto
1702           Openoffice.org circa 150 MB, un pacchetto Debian circa 20
1703           MB), e in fine del numero dei client.</p>
1704
1705           <p>Si presti poi attenzione alla natura dei dati che
1706           saranno salvati nella cache: sono tutti dati facilmente
1707           sostituibili (gli originali sono on-line) la cui perdita
1708           causerebbe solo la necessita' di ripopolare la cache.
1709           Questo rende la cache di Squid un possibile candidato ad
1710           un RAID stirpe (livello 0) a ad un file system che
1711           prediliga le performance a scapito della consistenza, con
1712           vantaggi sia per le prestazioni (e la velocita' di
1713           navigazione e' uno dei motivi per cui si installa Squid)
1714           che per l'utilizzo estensivo dello spazio di
1715           storaggio.</p>
1716
1717           <p>Questo fino al momento in cui per voi non sia piu'
1718           importante garantire la disponibilita' del servizio: se
1719           il RAID stripe dovesse rompersi gli utenti non potrebbero
1720           piu' navigare, cosa che per natura dello stripe e' piu'
1721           probabile rispetto ad un filesytem normale.</p>
1722
1723           <div class="section" id="opzioni-del-file-system">
1724             <h4><a class="toc-backref" href=
1725             "#id23">2.1.1.1&nbsp;&nbsp;&nbsp;Opzioni del file
1726             system</a></h4>
1727
1728             <p>I dati che compongono la cache vengono salvati sul
1729             filesytem del server dietro richiesta dei client http
1730             degli utenti della rete locale. Come per i servizi di
1731             file sharing o per la posta elettronica non c'e' motivo
1732             che il filesystem su cui sono ospitati questi dati
1733             abbiano i privilegi di eseguibilita' o suid (in genere
1734             si possono anche usare opzioni come noatime per rendere
1735             i file-systems piu' veloci, scegliere di utilizzare un
1736             journal dipende dalla dimesione della cache dalle
1737             preferenze: affidabilita' oppure prestazioni):</p>
1738
1739             <p>/etc/fstab</p>
1740             <pre class="literal-block">
1741 ...
1742 # Filesystem per Squid http cache
1743 /dev/md3/       /var/spool/squid/       ext2,noexec,nosuid,noatime  0 3
1744 </pre>
1745           </div>
1746         </div>
1747
1748         <div class="section" id="configurazioni-di-cache-dir">
1749           <h3><a class="toc-backref" href=
1750           "#id24">2.1.2&nbsp;&nbsp;&nbsp;Configurazioni di
1751           Cache_dir</a></h3>
1752
1753           <p>Ora possiamo impostare la cache nel file di
1754           configurazione <tt class=
1755           "docutils literal">/etc/squid3/squid.conf</tt>:</p>
1756           <pre class="literal-block">
1757 #TAG: cache_dir (riga 1628)
1758 #       Usage:
1759 #
1760 #       cache_dir Type Directory-Name Fs-specific-data [options]
1761 #
1762 #       You can specify multiple cache_dir lines to spread the
1763 #       cache among different disk partitions.
1764 #       ...
1765 #Default:
1766 # cache_dir ufs /var/spool/squid3 100 16 256
1767 cache_dir aufs /var/spool/squid3 300 24 256
1768 #         |    |                 |   |  secondo livello di directory
1769 #         |    |                 |   directory primo livello
1770 #         |    |                 dimensione in MB
1771 #         |    path della cache
1772 #         algoritmo
1773 </pre>
1774
1775           <p>Se si modifica la struttura della cache di Squid, ad
1776           esempio variando il numero delle directory, puo' essere
1777           opportuno cancellare e rigenerare la cache. Tipicamente
1778           e' consigliabile cancellare (se si ha ridotto il numero
1779           delle directory) la vecchia cache e poi generare una
1780           nuova struttura. Se si vuole star nel sicuro ogni volta
1781           che si modifica l'impostazione delle directory si svuoti
1782           la vecchia cache e se ne generi una nuova:</p>
1783           <pre class="literal-block">
1784 # /etc/init.d/squid3 stop
1785 # rm -r /var/spool/squid3/??
1786 # squid3 -z
1787 # /etc/init.d/squid3 start
1788 </pre>
1789         </div>
1790
1791         <div class="section" id="tag-maximum-object-size">
1792           <h3><a class="toc-backref" href=
1793           "#id25">2.1.3&nbsp;&nbsp;&nbsp;TAG:
1794           maximum_object_size</a></h3>
1795
1796           <p>Questa direttiva imposta la dimensione massima degli
1797           oggetti che vengono salvati sul supporto di storaggio,
1798           oggetti di dimensioni superiori saranno comunque
1799           scaricati ma non tenuti in cache.</p>
1800
1801           <p>TAG: maximum_object_size (1760):</p>
1802           <pre class="literal-block">
1803 # TAG: maximum_object_size (1760)
1804 #       Objects larger than this size will NOT be saved on disk.  The
1805 #       value is specified in kilobytes, and the default is 4MB.  If
1806 #       you wish to get a high BYTES hit ratio, you should probably
1807 #       increase this (one 32 MB object hit counts for 3200 10KB
1808 #       hits).  If you wish to increase speed more than your want to
1809 #       save bandwidth you should leave this low.
1810 #
1811 #       NOTE: if using the LFUDA replacement policy you should increase
1812 #       this value to maximize the byte hit rate improvement of LFUDA!
1813 #       See replacement_policy below for a discussion of this policy.
1814 #
1815 #Default:
1816 # maximum_object_size 4096 KB
1817 maximum_object_size 150 MB
1818 </pre>
1819         </div>
1820
1821         <div class="section" id="tag-cache-mem">
1822           <h3><a class="toc-backref" href=
1823           "#id26">2.1.4&nbsp;&nbsp;&nbsp;TAG: cache_mem</a></h3>
1824
1825           <p><strong>Cache_mem</strong> imposta quanta memoria RAM
1826           venga dedicata alla cache di Squid. Si consideri non solo
1827           quanta RAM sia disponibile sul sistema, ma anche quale
1828           sia l'utilizzo tipico di questo: altri servizi
1829           fondamentali necessitano di molta memoria?</p>
1830
1831           <p>Questo parametro per altro influisce sulle prestazioni
1832           e sul degrado dei supporti di storaggio (sopratutto se
1833           magnetici). Ad esempio se si stanno utilizzando dischi
1834           rigidi esterni USB per la cache sara' preferibile cercare
1835           di usare quanta piu' RAM possibile per evitare il
1836           sovraccarico computazionale dovuto alla gestione dello
1837           stack USB, fenomeno evidente sui sistemi embedded come
1838           NAS.</p>
1839
1840           <p>Se si stesse pensando di usare dell'hardware
1841           <em>embedded</em> a basse prestazioni / consumo per
1842           realizzare un server gateway / NAT / Squid si tenga
1843           presente che Squid e' relativamente esoso di risorse
1844           rispetto agli altri servizi: avra' bisogno di <tt class=
1845           "docutils literal">~25MB</tt> (MegaByte) di RAM e
1846           <em>~150MHZ di CPU ARM</em> per servire decorosamente una
1847           decina di client http su una rete ethernet 10/100. In
1848           questo caso non fate scendere <tt class=
1849           "docutils literal">cache_mem</tt> sotto i <tt class=
1850           "docutils literal">2/4 MB</tt> pena un accesso continuo
1851           al supporto di storaggio.</p>
1852
1853           <p>Se invece si disponesse di una macchina dedicata a
1854           Squid con gigabytes di RAM non si esiti a dedicarne buona
1855           parte a <em>cache_mem</em>.</p>
1856
1857           <p>TAG: cache_mem (1566):</p>
1858           <pre class="literal-block">
1859 #       'cache_mem' specifies the ideal amount of memory to be used
1860 #       for:
1861 #               * In-Transit objects
1862 #               * Hot Objects
1863 #               * Negative-Cached objects
1864 #Default:
1865 # cache_mem 8 M
1866 cache_mem 100 M
1867 </pre>
1868         </div>
1869
1870         <div class="section" id="tag-minimum-object-size">
1871           <h3><a class="toc-backref" href=
1872           "#id27">2.1.5&nbsp;&nbsp;&nbsp;TAG:
1873           minimum_object_size</a></h3>
1874
1875           <p>Questo parametro imposta la dimensione minima degli
1876           oggetti salvati nella cache. Settato a <tt class=
1877           "docutils literal">0</tt> o a valori molto piccoli puo'
1878           influire negativamente sulla frammentazione del filesytem
1879           e consumare un numero elevato di <em>inode</em> (cosa non
1880           piu' importante con ext4 o altri filesytem).</p>
1881
1882           <p>In scenari con connessioni molto veloci ( &gt;~10Mb),
1883           pochi client (una decina) e server poco performanti nella
1884           velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1885           il limte sia piuttosto il <em>seek-time</em> ) tenere in
1886           cache i file piu' piccoli finisce per aumentare la
1887           latenza della navigazione.</p>
1888
1889           <p>TAG: minimum_object_size:</p>
1890           <pre class="literal-block">
1891 #  TAG: minimum_object_size     (bytes)
1892 #       Objects smaller than this size will NOT be saved on disk.  The
1893 #       value is specified in kilobytes, and the default is 0 KB, which
1894 #       means there is no minimum.
1895 #
1896 #Default:
1897 # minimum_object_size 0 KB
1898 minimum_object_size 0 KB
1899 </pre>
1900         </div>
1901       </div>
1902
1903       <div class="section" id=
1904       "negoziazione-degli-accesi-al-servizio">
1905         <h2><a class="toc-backref" href=
1906         "#id28">2.2&nbsp;&nbsp;&nbsp;Negoziazione degli accesi al
1907         servizio</a></h2>
1908
1909         <p>Squid fa parte di quei servizi suscettibili di diventare
1910         un open relay, sara' quindi necessario prestare attenzione
1911         a delimitare la rete che puo' accedere al servizio.</p>
1912
1913         <dl class="docutils">
1914           <dt>Open Relay:</dt>
1915
1916           <dd>Un servizio a cui possono accedere tutti
1917           indiscriminatamente. La cosa puo' andare bene per servizi
1918           come i server web, che aspirano per loro natura al
1919           maggior numero possibile di utenti, ma non a servizi come
1920           i proxy http oppure ai server di posta elettronica
1921           (adibiti ai soli utenti della rete locale).</dd>
1922         </dl>
1923
1924         <p>Generalmente non volete che il vostro proxy http venga
1925         usato da persone sconosciute ed esterne alla vostra rete,
1926         le quali sostanzialmente <em>navigherebbero sotto
1927         l'identita' del vostro proxy</em> (probabilmente per
1928         visionare materiali che non vorrebbero fossero ricondotti
1929         direttamente a loro) generando traffico e consumando banda
1930         della vostra connessione a internet. Tenere Squid in
1931         modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1932         modo per essere inseriti in una <em>black list</em>.</p>
1933
1934         <p>Per poter limitare gli accessi a Squid dal punto di
1935         vista dell'applicazione (quarto livello TCP/IP) si
1936         identifichera' inizialmente l'entita' <em>rete locale</em>
1937         (es: <tt class="docutils literal">localnet</tt>) con una
1938         ACL di tipo <em>src</em> (indirizzi IP sorgenti) indicando
1939         la <em>classe / range di IP</em> della nostra rete.</p>
1940
1941         <blockquote>
1942           Dopodiche l'accesso (<tt class=
1943           "docutils literal">http_access</tt>) si concedera'
1944           (<em>allow</em>) a questa entita' (es: <tt class=
1945           "docutils literal">localnet</tt>) negando chiunque altro.
1946         </blockquote>
1947
1948         <p>Per maggiori dettagli sulla sintassi utilizzabile per
1949         esprimere i range di IP: <a class="reference external"
1950         href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1951         http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1952
1953         <p>E' poi sempre possibile tenere il proxy in ascolto su un
1954         solo indirizzo IP, nel caso si disponga di piu' device di
1955         rete, oppure settare un IP firewall per limitare il
1956         traffico in base al protocollo IP.</p>
1957
1958         <div class="section" id="acl-e-http-access">
1959           <h3><a class="toc-backref" href=
1960           "#id29">2.2.1&nbsp;&nbsp;&nbsp;ACL e http access</a></h3>
1961
1962           <p>Si proceda a creare una <tt class=
1963           "docutils literal">ACL</tt> di tipo <tt class=
1964           "docutils literal">src</tt> per identificare la nostra
1965           rete locale, poi si abiliti l'accesso a questa con la
1966           direttiva <tt class="docutils literal">http_access</tt>.
1967           Tutto quanto non e' espressamente autorizzato viene poi
1968           negato da un <tt class="docutils literal">http_access
1969           deny all</tt> finale.</p>
1970           <pre class="literal-block">
1971 #  TAG: acl
1972 #       Defining an Access List
1973 #
1974 #       Every access list definition must begin with an aclname and acltype,
1975 #       followed by either type-specific arguments or a quoted filename that
1976 #       they are read from.
1977 #       ...
1978 #       ***** ACL TYPES AVAILABLE *****
1979 #
1980 #       acl aclname src ip-address/netmask ...          # clients IP address
1981 # riga 588
1982
1983 # Example rule allowing access from your local networks.
1984 # Adapt to list your (internal) IP networks from where browsing
1985 # should be allowed
1986 #acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
1987 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1988 #acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
1989 #
1990 acl localnet src 10.10.208.0/24
1991
1992 # Riga 606
1993 #  TAG: http_access
1994 #       Allowing or Denying access based on defined access lists
1995 #
1996 #       Access to the HTTP port:
1997 #       http_access allow|deny [!]aclname ...
1998 #
1999 #       NOTE on default values:
2000 #
2001 #       If there are no "access" lines present, the default is to deny
2002 #       the request.
2003
2004 # Riga 643
2005 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
2006
2007 # Example rule allowing access from your local networks.
2008 # Adapt localnet in the ACL section to list your (internal) IP networks
2009 # from where browsing should be allowed
2010 #http_access allow localnet
2011 http_access allow localnet
2012 </pre>
2013         </div>
2014       </div>
2015
2016       <div class="section" id="testare-squid">
2017         <h2><a class="toc-backref" href=
2018         "#id30">2.3&nbsp;&nbsp;&nbsp;Testare Squid</a></h2>
2019
2020         <p>Dopo aver configurato squid e' fondamentale testarne il
2021         corretto funzionamento per assicurarsi di non aver creato
2022         un <em>open-relay</em>. Per fare dei test significativi
2023         serve utilizzare degli host remoti: ci si connetta via ssh
2024         a questi e si usi <tt class="docutils literal">wget</tt> da
2025         riga di comando.</p>
2026
2027         <div class="section" id="client-wgetrc">
2028           <h3><a class="toc-backref" href=
2029           "#id31">2.3.1&nbsp;&nbsp;&nbsp;Client: ~/.wgetrc</a></h3>
2030
2031           <p>Nel file <tt class="docutils literal">.wgetrc</tt> (si
2032           noti il punto iniziale: e' un file nascosto) si puo'
2033           impostare il proxy per wget. Si utilizzi l'indirizzo IP
2034           del server che si vuole testare, e si seguano i log
2035           <tt class=
2036           "docutils literal">/var/log/squid3/access.log</tt> sul
2037           server.</p>
2038
2039           <p>Da notare che la prova va' fatta su una macchina della
2040           rete che si vuole testare, non da <em>localhost</em>. Per
2041           altro se si utilizzasse <em>direttamente</em> <tt class=
2042           "docutils literal">localhost</tt> non si testerebbe la
2043           <em>ACL</em> predisposta, dato che si si rientrerebbe
2044           nella ACL (pre-configurata di default) <tt class=
2045           "docutils literal">localhost</tt>.</p>
2046
2047           <dl class="docutils">
2048             <dt>.wgetrc</dt>
2049
2050             <dd>http_proxy=10.10.208.178:3128</dd>
2051           </dl>
2052
2053           <p>Si proceda a scaricare dal client scelto con un
2054           wget:</p>
2055           <pre class="literal-block">
2056 wget http://www.google.it
2057 </pre>
2058         </div>
2059
2060         <div class="section" id="server-access-log">
2061           <h3><a class="toc-backref" href=
2062           "#id32">2.3.2&nbsp;&nbsp;&nbsp;Server:
2063           access.log</a></h3>
2064
2065           <p>Si puo' controllare il corretto funzionamento del
2066           server seguendo i log di accesso a Squid:</p>
2067           <pre class="literal-block">
2068 # tail -f /var/log/squid3/access.log
2069 </pre>
2070
2071           <p>In oltre e' possibile configurare diversi
2072           <em>analizzatori di log</em> come <tt class=
2073           "docutils literal">Webalizer</tt> per studiare i log di
2074           Squid.</p>
2075         </div>
2076       </div>
2077     </div>
2078
2079     <div class="section" id="tiny-proxy">
2080       <h1><a class="toc-backref" href=
2081       "#id33">3&nbsp;&nbsp;&nbsp;Tiny proxy</a></h1>
2082
2083       <p>Se avete l'esigenza di un proxy server per la condivisione
2084       della connessione ad internet ma non avete la necessita' o le
2085       risorse di un <em>caching</em> proxy come Squid potete
2086       considerare <strong>tinyproxy</strong>, questo e' molto piu'
2087       leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2088       accedere continuamente ad un file system per lo storaggio
2089       della cache) e risulta piu' semplice nella
2090       configurazione.</p>
2091
2092       <p>TinyProxy puo' essere utilizzato come sostituto di
2093       emergenza in una rete in cui Squid e' momentaneamente non
2094       disponibile.</p>
2095
2096       <p>File di configurazione: <tt class=
2097       "docutils literal">/etc/tinyproxy/tinyproxy.conf</tt></p>
2098       <pre class="literal-block">
2099 # Porta su cui ascoltare
2100 Port 3128
2101 # IP su cui ascoltare
2102 Listen 10.10.208.160
2103 # Negoziazione accessi
2104 Allow 10.10.208.0/24
2105 </pre>
2106     </div>
2107
2108     <div class="section" id="apache">
2109       <h1><a class="toc-backref" href=
2110       "#id34">4&nbsp;&nbsp;&nbsp;Apache</a></h1>
2111
2112       <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2113       patchy NCSA web server</em> ), e' il server web modulare piu'
2114       diffuso e strutturato disponibile con licenza libera, in
2115       grado di operare da sistemi operativi UNIX/Linux e
2116       Microsoft.</p>
2117
2118       <p>Un server web e' un processo, e per estensione il computer
2119       su cui e' in esecuzione, che si occupa di fornire, su
2120       richiesta del browser, una pagina web (spesso scritta in
2121       HTML). Le informazioni inviate dal server web viaggiano in
2122       rete trasportate dal protocollo HTTP. L'insieme di server web
2123       da' vita al World Wide Web, uno dei servizi piu' utilizzati
2124       di Internet.</p>
2125
2126       <div class="section" id="pacchetti-da-installare">
2127         <h2><a class="toc-backref" href=
2128         "#id35">4.1&nbsp;&nbsp;&nbsp;Pacchetti da
2129         installare::</a></h2>
2130
2131         <blockquote>
2132           apache2 apache2-doc
2133         </blockquote>
2134
2135         <p>Con la release 2.0 di Apache viene automaticamente resa
2136         disponibile anche la versione SSL (Secure Socket Layer,
2137         connessioni criptate ) del web server senza che ci sia la
2138         necessita' di installare altri pacchetti.</p>
2139       </div>
2140
2141       <div class="section" id="configurazione-di-apache">
2142         <h2><a class="toc-backref" href=
2143         "#id36">4.2&nbsp;&nbsp;&nbsp;Configurazione di
2144         Apache</a></h2>
2145
2146         <p>I file di configurazione di apache si trovano nella
2147         cartella: <tt class="docutils literal">/etc/apache2</tt> e
2148         sono strutturati come descritto nel file <tt class=
2149         "docutils literal">/usr/share/doc/apache2/README.Debian.gz</tt>
2150         . Sostanzialmente lo schema e' il seguente:</p>
2151
2152         <dl class="docutils">
2153           <dt>apache2.conf</dt>
2154
2155           <dd>
2156             <p class="first">File di configurazione principale del
2157             servizio.</p>
2158
2159             <p class="last">httpd.conf e' il vecchio file di
2160             configurazione di Apache1, presente per motivi di
2161             retrocompatibilita' e' generalmente vuoto.</p>
2162           </dd>
2163
2164           <dt>ports.conf</dt>
2165
2166           <dd>In questo file vengono specificate le porte sulle
2167           quali resta in ascolto il server web. Si noti che
2168           utilizzando dei virtual hosts generalmente viene
2169           specificata per questi la porta su cui ascoltare nel file
2170           di configurazione del virtual host, ad es: <tt class=
2171           "docutils literal">&lt;VirtualHost *:80&gt;</tt></dd>
2172
2173           <dt>sites-available</dt>
2174
2175           <dd>In questa cartella vengono raccolti i file di
2176           configurazione dei virtual host disponibili.</dd>
2177
2178           <dt>sites-enabled</dt>
2179
2180           <dd>In questa cartella sono contenuti dei link simbolici
2181           ai files in ../sites-available : se il link e' presente
2182           in questa cartella il virtual host e' abilitato.</dd>
2183
2184           <dt>mods-available</dt>
2185
2186           <dd>Stesso metodo per i moduli: in questa cartella ci
2187           sono i moduli veri e propri che verranno poi abilitati
2188           grazie all'esistenza di link simbolici nella cartella
2189           mods-enabled .</dd>
2190
2191           <dt>mods-enabled</dt>
2192
2193           <dd>Moduli abilitati, effettivamente caricati.</dd>
2194         </dl>
2195       </div>
2196
2197       <div class="section" id="apache-conf">
2198         <h2><a class="toc-backref" href=
2199         "#id37">4.3&nbsp;&nbsp;&nbsp;apache.conf</a></h2>
2200
2201         <p>File di configurazione del servizio Apache, contiene le
2202         impostazioni generiche (ad esempio utilizzo della RAM e
2203         risorse di sistema) dell'intero servizio. Nella
2204         configurazione di default per Debian non viene definito un
2205         vero e proprio sito di default ma solo dei virtual
2206         hosts.</p>
2207
2208         <p>Guardiamo alcune direttive interessanti:</p>
2209
2210         <dl class="docutils">
2211           <dt>Timeout</dt>
2212
2213           <dd>Numero di secondi da aspettare prima di chiudere la
2214           connessione con il client. Questo parametro serve a
2215           liberare le risorse di sistema nel caso che un client,
2216           magari a causa di una connessione particolarmente lenta o
2217           instabili, tenga attivo indefinitamente un processo di
2218           apache.</dd>
2219
2220           <dt>KeepAlive</dt>
2221
2222           <dd>L'estensione keep-alive (http 1.0) congiuntamente
2223           alle connessioni persistenti (http 1.1) permettono al
2224           server di rispondere a piu' richieste dei client mediante
2225           la stessa connessione. Il protocollo http per sua natura
2226           e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2227           richiesta (per pagine web si pensi ad esempio alle
2228           immagini) dal client necessita di una connessione
2229           autonoma. Keep-alive permette di ottimizzare la
2230           connessione anche fino al 50% a seconda delle situazioni
2231           e contenuti.</dd>
2232
2233           <dt>Server-Pool Size Regulation</dt>
2234
2235           <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2236           Tutti spiegati nel manuale di apache) servono per
2237           attribuire le risorse di sistema disponibili al server
2238           Apache. Tenere questi parametri bassi serve a limitare il
2239           rischio di Denial of Service per il server, nel caso
2240           offra altri servizi. I settagli di default sono come
2241           sempre abbastanza conservativi, se si conta di usare il
2242           proprio Apache per servire un sito web con molti
2243           visitatori sara' necessario aumentare sensibilmente le
2244           impostazioni di base.</dd>
2245
2246           <dt>AccessFileName</dt>
2247
2248           <dd>Il nome del file che viene onorato per modificare le
2249           impostazioni per una singola directory, legato alla
2250           direttiva AllowOverride .</dd>
2251         </dl>
2252       </div>
2253
2254       <div class="section" id="installazione-di-php">
2255         <h2><a class="toc-backref" href=
2256         "#id38">4.4&nbsp;&nbsp;&nbsp;Installazione di PHP</a></h2>
2257
2258         <p>Pacchetti da installare: <tt class=
2259         "docutils literal">php5 <span class=
2260         "pre">php-pear</span></tt></p>
2261
2262         <div class="section" id="test-del-modulo-php">
2263           <h3><a class="toc-backref" href=
2264           "#id39">4.4.1&nbsp;&nbsp;&nbsp;Test del modulo
2265           php</a></h3>
2266
2267           <p>Creare nella cartella <tt class=
2268           "docutils literal">/var/www</tt> (o altra cartella
2269           visibile) un file con estensione *.php (es <tt class=
2270           "docutils literal">/var/www/info.php</tt> contenete
2271           codice php eseguibile dall'interprete, ad es:</p>
2272           <pre class="literal-block">
2273 &lt;?php phpinfo() ; ?&gt;
2274 </pre>
2275
2276           <p>Questa funzione di php generera' la tipica pagina con
2277           le impostazioni attuali per PHP. Richiamando la pagina
2278           (es: <tt class="docutils literal"><span class=
2279           "pre">http://localhost/info.php</span></tt> ) verra'
2280           generata dall'interprete PHP la pagina HTML e resa
2281           disponibile tramite Apache ai client HTTP, a prova del
2282           corretto funzionamento del modulo di PHP e della sua
2283           integrazione con il server web Apache. In caso contrario
2284           se il client http proporra' di scaricare la pagina invece
2285           che visualizzarla nel browser: non funziona l'interprete
2286           di php o sono mal configurati i MIME-type. prima di tutto
2287           assicurarsi di aver fatto ripartire Apache.</p>
2288         </div>
2289
2290         <div class="section" id=
2291         "installazione-del-supporto-per-mysql-a-php">
2292           <h3><a class="toc-backref" href=
2293           "#id40">4.4.2&nbsp;&nbsp;&nbsp;Installazione del supporto
2294           per Mysql a PHP</a></h3>
2295
2296           <p>Installare i pacchetti:</p>
2297           <pre class="literal-block">
2298 php5-mysql phpmyadmin
2299 </pre>
2300
2301           <p>Controllare tramite la pagina php.info che sia
2302           abilitato il supporto per Mysql (ripartito Apache,
2303           ricaricare la pagina e cercare con CTRL+f <tt class=
2304           "docutils literal">mysql</tt>).</p>
2305         </div>
2306
2307         <div class="section" id="phpmyadmin">
2308           <h3><a class="toc-backref" href=
2309           "#id41">4.4.3&nbsp;&nbsp;&nbsp;phpmyadmin</a></h3>
2310
2311           <p>L'interfaccia web Phpmyadmin non richiede
2312           necessariamente la presenza di un database Mysql locale,
2313           puo' infatti essere utilizzata per gestire database
2314           remoti (il suo file di configurazione: <tt class=
2315           "docutils literal">/etc/phpmyadmin/config.inc.php</tt> ).
2316           Nel caso si voglia installare localmente Mysql si
2317           utilizzi il pacchetto <tt class=
2318           "docutils literal"><span class=
2319           "pre">mysql-server</span></tt> .</p>
2320
2321           <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2322           <tt class="docutils literal"><span class=
2323           "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2324           non fosse controllare che sia incluso il file <tt class=
2325           "docutils literal">/etc/phpmyadmin/apache.conf</tt> in
2326           <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2327           .</p>
2328         </div>
2329
2330         <div class="section" id=
2331         "installazione-del-supporto-per-postgresql-a-php">
2332           <h3><a class="toc-backref" href=
2333           "#id42">4.4.4&nbsp;&nbsp;&nbsp;Installazione del supporto
2334           per Postgresql a PHP</a></h3>
2335
2336           <p>Installare i pacchetti:</p>
2337           <pre class="literal-block">
2338 php5-pgsql phppgadmin
2339 </pre>
2340
2341           <p>Controllare tramite la pagina php.info che sia
2342           abilitato il supporto per PostgreSQL (ripartito Apache,
2343           ricaricare la pagina e cercare con CTRL+f <tt class=
2344           "docutils literal">pgsql</tt>).</p>
2345         </div>
2346
2347         <div class="section" id="phppgadmin">
2348           <h3><a class="toc-backref" href=
2349           "#id43">4.4.5&nbsp;&nbsp;&nbsp;phppgadmin</a></h3>
2350
2351           <p>L'interfaccia web Phppgadmin per il database server
2352           PostgreSQL non richiede necessariamente la presenza di un
2353           database locale, puo' infatti essere utilizzata per
2354           gestire database remoti (il suo file di configurazione:
2355           <tt class=
2356           "docutils literal">/etc/phppgadmin/config.inc.php</tt> ).
2357           Nel caso si voglia installare localmente Mysql si
2358           utilizzi il pacchetto <tt class=
2359           "docutils literal">postgresql</tt> .</p>
2360
2361           <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2362           <tt class="docutils literal"><span class=
2363           "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2364           non fosse controllare che sia incluso il file <tt class=
2365           "docutils literal">/etc/phppgadmin/apache.conf</tt> in
2366           <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2367           .</p>
2368         </div>
2369       </div>
2370
2371       <div class="section" id="virtual-hosts">
2372         <h2><a class="toc-backref" href=
2373         "#id44">4.5&nbsp;&nbsp;&nbsp;Virtual hosts</a></h2>
2374
2375         <blockquote>
2376           <ul class="simple">
2377             <li><a class="reference external" href=
2378             "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2379
2380             <li><a class="reference external" href=
2381             "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2382             http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2383           </ul>
2384         </blockquote>
2385
2386         <p>I virtual host permettono di avere piu' siti internet
2387         disponibili tramite lo stesso server web, eventualmente
2388         mappati su un solo indirizzo IP. Sono generalmente di due
2389         tipi:</p>
2390
2391         <blockquote>
2392           <ul class="simple">
2393             <li>Basati su <em>indirizzi IP</em>. Se si ha la
2394             possibilita' di avere piu' indirizzi IP dedicati per i
2395             diversi siti che si vuole servire. ES: <tt class=
2396             "docutils literal">&lt;VirtualHost
2397             192.168.0.2:80&gt;</tt> . Soluzione dispendiosa, si
2398             tende ad usarla solo se servono certificati di
2399             sicurezza (SSL ) dedicati per ogni sito.</li>
2400
2401             <li>Basati su <em>nomi di dominio</em> che puntano allo
2402             stesso IP. Soluzione piu' economica e diffusa che si
2403             basa sulle funzionalita' di http 1.1 .</li>
2404           </ul>
2405         </blockquote>
2406
2407         <p>Prenderemo in esame la gestione di virtual hosts basati
2408         su nomi di dominio.</p>
2409
2410         <div class="section" id="gestione-dns">
2411           <h3><a class="toc-backref" href=
2412           "#id45">4.5.1&nbsp;&nbsp;&nbsp;Gestione DNS</a></h3>
2413
2414           <p>Prima di tutto per poter impostare i virtual hosts
2415           dovete avere un server DNS che risolva i vostri nomi di
2416           dominio sull'indirizzo IP del server. Questo si puo'
2417           ottenere in vari modi, ad es:</p>
2418
2419           <blockquote>
2420             <dl class="docutils">
2421               <dt><tt class="docutils literal">/etc/hosts</tt></dt>
2422
2423               <dd>Per prove sul proprio sistema potete impostare i
2424               nomi dei vostri virtual server nel file /etc/hosts
2425               .</dd>
2426
2427               <dt><em>Dnsmasq</em> (DNS server)</dt>
2428
2429               <dd>Utilizzabile al livello della rete locale per
2430               fare dei test, utilizzando direttive come: <tt class=
2431               "docutils literal"><span class=
2432               "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2433
2434               <dt><em>Servizio DNS dinamico on line</em>.</dt>
2435
2436               <dd>Utilizzare un servizio come ad es: <a class=
2437               "reference external" href=
2438               "https://www.dyndns.com/">https://www.dyndns.com/</a>
2439               per mappare nomi di dominio sul proprio indirizzo IP,
2440               comodo ad esempio se si dispone di un indirizzo IP
2441               pubblico (anche se dinamico) per la propria
2442               connessione ad internet.</dd>
2443
2444               <dt><em>Bind</em> (DNS server)</dt>
2445
2446               <dd>Impostare i campi A nelle proprie zone gestite
2447               dal server DNS Bind. Ad es: <tt class=
2448               "docutils literal">papo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2449               A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2450               212.22.136.248</tt></dd>
2451             </dl>
2452           </blockquote>
2453         </div>
2454
2455         <div class="section" id="eseguire-una-query-dns-con-dig">
2456           <h3><a class="toc-backref" href=
2457           "#id46">4.5.2&nbsp;&nbsp;&nbsp;Eseguire una query DNS con
2458           <tt class="docutils literal">dig</tt>::</a></h3>
2459
2460           <p>Per testare la corretta risoluzione dei vostri nomi di
2461           dominio sui relaivi indirizzi IP si usi dig (o altre
2462           utlity, vedere la sezione relativa i DNS). Dig e'
2463           contenuto nel pacchetto <tt class=
2464           "docutils literal">dnsutils</tt>.</p>
2465
2466           <blockquote>
2467             <p># dig 177.piffa.net</p>
2468
2469             <p>; &lt;&lt;&gt;&gt; DiG 9.5.1-P1 &lt;&lt;&gt;&gt;
2470             177.piffa.net ;; global options: printcmd ;; Got
2471             answer: ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY,
2472             status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2473             QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2474
2475             <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2476
2477             <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2478             10.10.208.177</p>
2479
2480             <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2481           </blockquote>
2482
2483           <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2484           <tt class=
2485           "docutils literal">177.piffa.net.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2486           0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2487           IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2488           A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.10.208.177</tt>
2489           . Il nome di dominio 177.piffa.net viene risolto sull'ip
2490           10.10.208.177 , nel nostro Apache (che risponde all'ip
2491           10.10.208.177 ) dovra' essere disponibile un virtual host
2492           che corrisponde al nome <tt class=
2493           "docutils literal">177.piffa.net</tt> (<tt class=
2494           "docutils literal">ServerName</tt>) .</p>
2495
2496           <p>Il server DNS utilizzato dal sistema e' evidenziato
2497           dalla stringa: <tt class="docutils literal">;; SERVER:
2498           10.10.28.248#53(10.10.28.248)</tt> che dovrebbe
2499           corrispondere a quanto impostato nel vostro <tt class=
2500           "docutils literal">/etc/resolv.conf</tt>. Se il vostro
2501           browser web utilizza un proxy http sara questo a
2502           risolvere i nomi di dominio, tipicamente potete
2503           disabilitare l'uso del proxy per determinati domini nella
2504           sezione di configurazione del browser.</p>
2505         </div>
2506
2507         <div class="section" id="id3">
2508           <h3><a class="toc-backref" href=
2509           "#id47">4.5.3&nbsp;&nbsp;&nbsp;Virtual hosts</a></h3>
2510
2511           <p>Esempio di Virtual host:</p>
2512           <pre class="literal-block">
2513 &lt;VirtualHost *:80 &gt;
2514     ServerName 177.piffa.net
2515     DocumentRoot /var/www/177.piffa.net/
2516     ServerAdmin webmaster@177.piffa.net
2517 &lt;/VirtualHost&gt;
2518 </pre>
2519
2520           <ol class="arabic simple">
2521             <li><tt class="docutils literal">&lt;VirtualHost
2522             <span class="pre">\*:80</span> &gt;</tt> La prima riga
2523             indica l'inizio della stanza relativa al nostro virtual
2524             host, che ascoltera' su qualunque indirizzo IP (nel
2525             caso il server abbia piu' indirizzi dai quali e'
2526             raggiungibile) sulla porta <tt class=
2527             "docutils literal">80</tt>.</li>
2528
2529             <li><tt class="docutils literal">Server/name</tt>
2530             precisa quale sara' il nome di dominio a cui verra'
2531             associato questo sito rispetto ad altri eventualmente
2532             presenti sullo stesso server web.</li>
2533
2534             <li><tt class="docutils literal">DocumentRoot</tt> : il
2535             path della directory che contiene le pagine del
2536             sito.</li>
2537
2538             <li><tt class="docutils literal">ServerAdmin</tt>:
2539             l'indirizzo del webmaster, in modo da poterlo
2540             contattare in caso di problemi col sito.</li>
2541
2542             <li><tt class=
2543             "docutils literal">&lt;/VirtualHost&gt;</tt>:
2544             <em>tag</em> di chiusura della stanza di definizione
2545             del virtual host.</li>
2546           </ol>
2547
2548           <p>Quelle che abbiamo appena visto sono le direttive
2549           essenziali per definire un sito virtuale, potrebbe essere
2550           utile aggiungere altre:</p>
2551
2552           <ul>
2553             <li>
2554               <dl class="first docutils">
2555                 <dt><tt class="docutils literal">ErrorLog
2556                 /var/log/apache2/177.piffa.net/error.log</tt></dt>
2557
2558                 <dd>
2559                   <p class="first last">Log degli errori separato
2560                   dai restanti siti web ospitati dal server.</p>
2561                 </dd>
2562               </dl>
2563             </li>
2564
2565             <li>
2566               <dl class="first docutils">
2567                 <dt><tt class="docutils literal">LogLevel
2568                 warn</tt></dt>
2569
2570                 <dd>
2571                   <p class="first last">Livello di importanza degli
2572                   eventi loggati: warning <em>attenzione</em> .</p>
2573                 </dd>
2574               </dl>
2575             </li>
2576
2577             <li>
2578               <dl class="first docutils">
2579                 <dt><tt class="docutils literal">CustomLog
2580                 /var/log/apache2/177.piffa.net/access.log
2581                 combined</tt></dt>
2582
2583                 <dd>
2584                   <p class="first last">Log di accesso separati
2585                   dagli altri siti, utile anche qua per statistiche
2586                   di accesso per il solo sito virtuale.</p>
2587                 </dd>
2588               </dl>
2589             </li>
2590           </ul>
2591
2592           <p>Potrebbe essere utile modificare le impostazioni di
2593           una intera directory, ad esempio per abilitare
2594           l'<tt class="docutils literal">AuthConfig</tt>:</p>
2595           <pre class="literal-block">
2596 &lt;Directory "/var/www/miosito.net/privata"&gt;
2597         AllowOverride AuthConfig
2598         Options ExecCGI Indexes MultiViews FollowSymLinks
2599         Order allow,deny
2600         Allow from all
2601 &lt;/Directory&gt;
2602 </pre>
2603
2604           <p><tt class="docutils literal">AllowOverride
2605           AuthConfig</tt> ora vale per l'intera directory, come le
2606           altre opzioni.</p>
2607         </div>
2608       </div>
2609
2610       <div class="section" id="negoziazione-accessi">
2611         <h2><a class="toc-backref" href=
2612         "#id48">4.6&nbsp;&nbsp;&nbsp;Negoziazione accessi</a></h2>
2613
2614         <p>Tipicamente quando si installa un server web il proprio
2615         desiderio e' di dare accesso ai materiali disponibili al
2616         maggior numero di visitatori possibile. Talvolta pero' puo'
2617         essere utile poter limitare questi accessi, ad esempio per
2618         escludere un <em>bot</em> indesiderato che scansiona
2619         ininterrottamente le nostre pagine o per creare una
2620         <em>Area Riservata</em> i cui materiali non devono essere
2621         disponibile a tutti.</p>
2622
2623         <div class="section" id="limiti-su-base-ip">
2624           <h3><a class="toc-backref" href=
2625           "#id49">4.6.1&nbsp;&nbsp;&nbsp;Limiti su base IP</a></h3>
2626
2627           <p>La forma piu' semplice di restrizione degli accessi e'
2628           su base degli indirizzi IP dei client: tipicamente i siti
2629           web sono settati per dare accesso a chiunque:</p>
2630           <pre class="literal-block">
2631 &lt;VirtualHost *:80 &gt;
2632        # ...
2633        &lt;Directory "/var/www/177.piffa.net"&gt;
2634          Order allow,deny
2635          Allow from all
2636        &lt;/Directory&gt;
2637 &lt;/VirtualHost&gt;
2638 </pre>
2639
2640           <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2641           questo modo:</p>
2642           <pre class="literal-block">
2643 &lt;VirtualHost *:80 &gt;
2644        # ...
2645        &lt;Directory "/var/www/177.piffa.net"&gt;
2646          Order allow,deny
2647          Allow from all
2648          Deny from 192.168.0.1
2649        &lt;/Directory&gt;
2650 &lt;/VirtualHost&gt;
2651 </pre>
2652
2653           <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2654           materiali dell'intero sito virtuale, oppure potremmo
2655           lavorare su una sola directory:</p>
2656           <pre class="literal-block">
2657 &lt;Directory "/var/www/miosito.net/limitata"&gt;
2658        Order allow,deny
2659        Allow from 192.168.0.0./24
2660        Deny from all
2661 &lt;/Directory&gt;
2662 </pre>
2663
2664           <p>In questo modo solo la classe IP <tt class=
2665           "docutils literal">192.168.0.0/24</tt> potra' accedere
2666           alla directory <tt class=
2667           "docutils literal">/limitata</tt> Si tenga pero' conto
2668           che e' relativamente facile per un malintenzionato
2669           cambiare il proprio indirizzo IP, oppure collegarsi da un
2670           altra zona. Meno facile e' accedere ad una classe privata
2671           trovandosi all'esterno di questa, ma ci sono comunque
2672           soluzioni piu' eleganti.</p>
2673
2674           <ul class="simple">
2675             <li>Mod_access: <a class="reference external" href=
2676             "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2677
2678             <li>mod_authz_hosti(Available in Apache 2.1 and later):
2679             <a class="reference external" href=
2680             "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2681             http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2682           </ul>
2683         </div>
2684       </div>
2685
2686       <div class="section" id="user-authentication">
2687         <h2><a class="toc-backref" href=
2688         "#id50">4.7&nbsp;&nbsp;&nbsp;User Authentication</a></h2>
2689
2690         <p>Si puo' negoziare gli accessi ad un area del sito
2691         tramite autenticazione basata su <em>nome utente /
2692         password</em>. Questo puo' venire utile per creare una area
2693         download <em>intranet</em>, alla quale possano accedere
2694         solo gli utenti previsti a prescindere dagli indirizzi IP
2695         dei loro client.</p>
2696
2697         <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2698         possibile implementare questo paradigma, per quanto
2699         esistano soluzioni piu' granulari e sofisticate, che
2700         richiedono pero' l'implementazione di interpreti di
2701         linguaggi di programmazione, criptazione delle passwords,
2702         gestione degli utenti ed eventualmente delle sessioni. Mod
2703         auth non richiede l'installazione di niente di tutto
2704         questo.</p>
2705
2706         <p>link: <a class="reference external" href=
2707         "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2708
2709         <div class="section" id="definire-la-cartella">
2710           <h3><a class="toc-backref" href=
2711           "#id51">4.7.1&nbsp;&nbsp;&nbsp;Definire la
2712           cartella</a></h3>
2713
2714           <p>Decidere quale sara' il <em>path</em> della cartella
2715           da sottoporre ad autenticazione:</p>
2716
2717           <blockquote>
2718             <tt class="docutils literal">mkdir
2719             /var/www/177.piffa.net/privata</tt>
2720           </blockquote>
2721         </div>
2722
2723         <div class="section" id=
2724         "creazione-del-database-delle-passwords">
2725           <h3><a class="toc-backref" href=
2726           "#id52">4.7.2&nbsp;&nbsp;&nbsp;Creazione del database
2727           delle passwords</a></h3>
2728
2729           <p>Un modo semplice per gestire una database di
2730           <em>user-id / passwords</em> e' utilizzare l'utility
2731           <tt class="docutils literal">htpasswd</tt> di Apache.
2732           Questa crea un file in cui un <em>crypt</em> delle
2733           password viene associato agli utenti.</p>
2734
2735           <p>Si dovra' decidere dove tenere questo file, la cosa
2736           importante e' che non sia visibile nel sito web: non deve
2737           essere scaricabile dai visitatori. Deve essere cioe'
2738           all'esterno della <em>DocumentRoot</em>: un buon posto
2739           potrebbe essere la /home dell'utente.</p>
2740
2741           <p>Creiamo (con il <em>flag</em> <tt class=
2742           "docutils literal"><span class="pre">-c</span></tt>) il
2743           file <tt class=
2744           "docutils literal">/home/utente/passwords</tt> con
2745           l'utente <tt class="docutils literal">luca</tt>:</p>
2746           <pre class="literal-block">
2747 htpasswd -c /home/utente/passwords luca
2748 </pre>
2749
2750           <p><tt class="docutils literal">htpasswd</tt> ci
2751           chiedera' la password da associare all'utente <tt class=
2752           "docutils literal">luca</tt>. Per successive modifiche
2753           della password o aggiunta di nuovi utenti non sara'
2754           necessario usare il flag <tt class=
2755           "docutils literal"><span class="pre">-c</span></tt>.</p>
2756         </div>
2757
2758         <div class="section" id="id4">
2759           <h3><a class="toc-backref" href=
2760           "#id53">4.7.3&nbsp;&nbsp;&nbsp;Configurazione di
2761           Apache</a></h3>
2762
2763           <p>Ora possiamo passare alla configurazione vera e
2764           propria di Apache, ma con una novita': andremo a inserire
2765           la voce in un <tt class="docutils literal">.htaccess</tt>
2766           invece che modificare (tramite una direttiva <tt class=
2767           "docutils literal">&lt;Directory&gt;</tt> ) il file di
2768           impostazione del virtual-host.</p>
2769
2770           <p>Questo per motivi pratici: solo l'utente <em>root</em>
2771           puo' modificare l'impostazione del virtual host nel file
2772           <tt class="docutils literal"><span class=
2773           "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2774           ma spesso il motivo per cui creiamo i virtual hosts e'
2775           ospitare i siti di altri utenti, che possono solo
2776           pubblicare (generalmente tramite <em>FTP</em>) i loro
2777           documenti nella loro <em>DocumentRoot</em>, senza poter
2778           quindi modificare in alcun modo la configurazione del
2779           virtual host.</p>
2780
2781           <p>Dando agli utenti la possibilita' di modificare
2782           (<em>AllowOverride</em>) autonomamente alcuni parametri
2783           (in questo caso solo l'<em>AuthConfig</em>) relativi al
2784           funzionamento del loro spazio web ci togliera'
2785           l'incombenza di dover intervenire continuamente sui vari
2786           virtual host.</p>
2787
2788           <p>Abilitiamo l'AllowOverride nel file di configurazione
2789           del virtual host per la sola directory <tt class=
2790           "docutils literal">privata</tt>:</p>
2791           <pre class="literal-block">
2792 &lt;VirtualHost *:80 &gt;
2793     ServerName 177.piffa.net
2794     DocumentRoot /var/www/177.piffa.net/
2795     ServerAdmin webmaster@177.piffa.net
2796     &lt;Directory "/var/www/177.piffa.net/privata"&gt;
2797         AllowOverride AuthConfig
2798     &lt;/Directory&gt;
2799 &lt;/VirtualHost&gt;
2800 </pre>
2801
2802           <p>Per rendere il cambiamento effettivo sara' necessario
2803           fare un restart / reload di Apache.</p>
2804
2805           <p>Ora sara' possibile, anche per l'utente di sistema,
2806           creare un file <tt class=
2807           "docutils literal">.htaccess</tt> che sara' onorato da
2808           Apache.</p>
2809
2810           <p>/var/www/177.piffa.net/privata/.htaccess</p>
2811           <pre class="literal-block">
2812 # Messaggio visualizzato al prompt per l'autenticazione
2813 AuthName "Area privata soggetta ad autentizazione"
2814 # tipo di autenticazione da usarsi
2815 AuthType Basic
2816 # File precedentemente generato con htpasswd
2817 AuthUserFile  /home/utente/passwords
2818
2819 # Negoziazione degli accessi
2820 # valid users permette l'accesso agli utenti specificati
2821 # nel file generato da htpasswd
2822 require valid-user
2823 </pre>
2824
2825           <p>Si noti che non e' necessario fare ripartire Apache
2826           per onorare i cambiamenti (un utente non avrebbe la
2827           possibilita' di farlo!).</p>
2828
2829           <dl class="docutils">
2830             <dt>Oltre a <tt class="docutils literal"><span class=
2831             "pre">valid-users</span></tt> si potrebbe scegliere di
2832             usare la formula <tt class=
2833             "docutils literal">users</tt> che permette di elencare
2834             esplicitamente gli utenti::</dt>
2835
2836             <dd>require user pippo pluto</dd>
2837           </dl>
2838
2839           <p>L'utente <em>paperino</em> che fosse comunque presente
2840           nel file generato da htpasswd non potrebbe accedere alla
2841           risorsa.</p>
2842
2843           <dl class="docutils">
2844             <dt>Nel caso ci fossero molti utenti conviene gestirli
2845             tramite <em>gruppi</em>::</dt>
2846
2847             <dd>require group staff studenti</dd>
2848           </dl>
2849
2850           <p>I gruppi vengono definiti in un file in modo simile a
2851           <tt class="docutils literal">/etc/groups</tt> per gli
2852           utenti di sistema:</p>
2853           <pre class="literal-block">
2854 staff:andrea sara
2855 studenti: lucap federico luca
2856 </pre>
2857
2858           <p>da richiamare tramite la direttiva <tt class=
2859           "docutils literal">AuthGroupFile</tt>.</p>
2860         </div>
2861       </div>
2862
2863       <div class="section" id="cavets">
2864         <h2><a class="toc-backref" href=
2865         "#id54">4.8&nbsp;&nbsp;&nbsp;Cavets</a></h2>
2866
2867         <p>Problemi di cache:</p>
2868
2869         <blockquote>
2870           <ul class="simple">
2871             <li>Proxy: nei settaggi del browser specificare di non
2872             utilizzare un server proxy http per il sito web locale
2873             (o per gli altri che si stanno monitorando). Se si ha
2874             il controllo del proxy server: stopparlo, ricaricare la
2875             pagina (operazione che fallira'), far ripartire il
2876             proxy, ricaricare la pagina.</li>
2877
2878             <li>Provare con un altro browser, o cercare di svuotare
2879             la cache chiudere/riaprire l'applicativo. Provare a
2880             fermare Apache, ricaricare la pagina (operazione che
2881             fallira'), far ripartire Apache, ricaricare la
2882             pagina.</li>
2883           </ul>
2884         </blockquote>
2885       </div>
2886     </div>
2887
2888     <div class="section" id="domain-name-system">
2889       <h1><a class="toc-backref" href=
2890       "#id55">5&nbsp;&nbsp;&nbsp;Domain Name System</a></h1>
2891
2892       <p>Domain Name System (spesso indicato con DNS) e' un
2893       servizio utilizzato per la risoluzione di nomi di host in
2894       indirizzi IP e viceversa. Il servizio e' realizzato tramite
2895       un sistema <strong>gerarchico</strong> (quindi una struttura
2896       ad albero, simile ai <em>file system</em>)
2897       <strong>distribuito</strong> (ogni server DNS facente parte
2898       del sistema puo' mantenere solo una parte delle informazioni,
2899       ad esempio per la sua sola <em>zona</em>), costituito dai
2900       server DNS.</p>
2901
2902       <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2903       rete internet come per qualunque rete locale. Ad esempio
2904       durante la navigazione web un client vorrebbe vedere
2905       l'<em>URL</em> <tt class="docutils literal"><span class=
2906       "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2907       connettere via <em>http</em> al server web deve prima
2908       ottenere l'indirizzo IP del <em>server http</em>
2909       corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2910       fornisce un IP sbagliato l'utente non potra' raggiungere il
2911       servizio: di fatto e' come se il serve http fosse spento.</p>
2912
2913       <p>Stessa cosa vale per gli altri servizi, come la posta
2914       elettronica, ssh, ecc. : <em>prima si deve effettuare una
2915       query DNS</em>.</p>
2916
2917       <p>Potrebbe verificarsi uno scenario simile a questo: i
2918       vostri server per i siti web funzionano correttamente come i
2919       siti ospitati, stessa cosa per i vostri server di posta, IMAP
2920       e POP3, e tutto il resto. Ma se poi un errore nella
2921       configurazione del DNS non rende raggiungibile l'intero
2922       <em>sito</em>: per l'utente finale e' come se nulla
2923       funzionasse.</p>
2924
2925       <p>Infatti quando si parla di un intervento della Polizia
2926       Postale per l'<em>oscuramento</em> di un sito dal punto di
2927       vista pratico questo si traduce generalmente nella rimozione
2928       o mistificazione del record DNS relativo a quel dominio (la
2929       <em>PP</em> ha facolta' di chiedere un simile intervento ai
2930       principali provider internet che forniscono connettivita'
2931       agli utenti italiani, oltre che poter agire direttamente sul
2932       NIC italiano per i domini della TLD <em>.it</em>)</p>
2933
2934       <p>L'operazione di convertire un nome in un indirizzo e'
2935       detta risoluzione DNS, convertire un indirizzo IP in nome e'
2936       detto risoluzione inversa.</p>
2937
2938       <blockquote>
2939         Un <em>Registar</em> e' un operatore che ha la facolta'
2940         (accreditamento da parte dell ICANN) di registrare i domini
2941         di secondo livello per gli utenti finali, dietro compenso
2942         di una modica cifra (una decina di euro) che vale come
2943         contributo su base annuale per il mantenimento
2944         dell'infrastruttura.
2945       </blockquote>
2946
2947       <div class="section" id="risoluzione-inversa">
2948         <h2><a class="toc-backref" href=
2949         "#id56">5.1&nbsp;&nbsp;&nbsp;Risoluzione Inversa</a></h2>
2950
2951         <p>Per la risoluzione inversa sono invece i provider di
2952         connettivita' a gestire i DNS: se volete impostare il
2953         <em>PTR</em> associato al vostro indirizzo IP dovete
2954         contattare il vostro provider (tipo <em>telecom</em> per
2955         una connessione ADSL) e <em>non il Registar del vostro
2956         dominio</em>.</p>
2957
2958         <p>Ad esempio all'IP <tt class=
2959         "docutils literal">212.22.136.248</tt> era associato un PTR
2960         <tt class="docutils literal">bender.piffa.net</tt>,
2961         corrispondente al record <tt class=
2962         "docutils literal">212</tt> facente parte della zona
2963         <tt class="docutils literal"><span class=
2964         "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2965         provider Tiscali/Nextra proprietario della classe C
2966         <tt class="docutils literal">212.22.136.0</tt>. Se avete un
2967         solo IP conviene lasciare al fornitore la gestire del PTR,
2968         ma se avete a disposizione un'itera classe potete chiedere
2969         sempre al vostro provider che vi <em>deleghi</em> la
2970         gestione della zona tramite i vostri DNS.</p>
2971
2972         <p>Per alcuni servizi, ad esempio la spedizione della posta
2973         elettronica, e' richiedeiesto che venga impostata
2974         correttamente l'associazione tra il PTR dell'indirizzo IP
2975         usato dal server di postai e il record A RR al quale questo
2976         punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2977
2978         <p>Si veda:</p>
2979
2980         <ul class="simple">
2981           <li><a class="reference external" href=
2982           "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2983           2.1 Inconsistent, Missing, or Bad Data</li>
2984
2985           <li><a class="reference external" href=
2986           "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2987         </ul>
2988       </div>
2989
2990       <div class="section" id="nomi-di-dominio">
2991         <h2><a class="toc-backref" href=
2992         "#id57">5.2&nbsp;&nbsp;&nbsp;Nomi di dominio</a></h2>
2993
2994         <p>Un nome a dominio e' costituito da una serie di stringhe
2995         separate da punti, ad esempio bender.piffa.net. I nomi di
2996         dominio si leggono da destra verso sinistra: <em>TLD</em> o
2997         dominio di primo livello <tt class=
2998         "docutils literal">net</tt>, secondo livello <tt class=
2999         "docutils literal">piffa</tt>, terzo livello <tt class=
3000         "docutils literal">bender</tt>. Il dominio di primo livello
3001         (o TLD, Top Level Domain, pronunciato <em>tilde</em> in
3002         Italia), per esempio .net o .it sono limitati e decisi
3003         direttamente dall'ente assegnatario ICANN ( Internet
3004         Corporation for Assigned Names and Numbers).</p>
3005
3006         <p>L'utente finale potra' chiedere l'assegnazione (pagando
3007         un contributo al Register preferito per il mantenimento
3008         delle spese dell'infrastruttura) di un dominio di
3009         <em>secondo</em> livello (es <tt class=
3010         "docutils literal">piffa</tt>) di una delle varie TLD
3011         disponibili (noi italiani diciamo <em>tildi</em>), sempre
3012         che non sia gia' stato assegnato a qualcun altro.</p>
3013
3014         <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
3015         potra' in stanziare domini di terzo livello (es <tt class=
3016         "docutils literal">bender</tt>) e anche oltre (es
3017         www.andrea.bender.piffa.net). Tali records saranno
3018         mantenuti dall'utente, sotto la sua responsbilita': se il
3019         proprio server DNS non fosse raggiungibile o risultasse mal
3020         configurato gli utenti non potrebbero risolvere /
3021         raggiungere i siti di loro interesse.</p>
3022
3023         <p>Tipicamente si ha almeno un server DNS secondario per
3024         garantire la sussistenza del servizio in caso di guasto del
3025         DNS principale. I secondari <em>replicano</em> i dati
3026         presenti nei DNS principali.</p>
3027       </div>
3028
3029       <div class="section" id="tipologie-di-record">
3030         <h2><a class="toc-backref" href=
3031         "#id58">5.3&nbsp;&nbsp;&nbsp;Tipologie di record</a></h2>
3032
3033         <p>Ad un nome DNS possono corrispondere diversi tipi di
3034         informazioni. Per questo motivo, esistono diversi tipi di
3035         record DNS. Ogni voce del database DNS deve essere
3036         caratterizzata da un tipo. I principali tipi sono:</p>
3037
3038         <ul class="simple">
3039           <li>Record A - Indica la corrispondenza tra un nome ed
3040           uno (o piu') indirizzi IP (per la precisione indirizzi
3041           IPv4, ovvero la versione attualmente in uso).</li>
3042
3043           <li>Record MX - (Mail eXchange) indica a quali server
3044           debba essere inviata la posta elettronica per un certo
3045           dominio.</li>
3046
3047           <li>Record CNAME - Sono usati per creare un alias, ovvero
3048           per fare in modo che lo stesso calcolatore sia noto con
3049           piu' nomi. Uno degli utilizzi di questo tipo di record
3050           consiste nell'attribuire ad un host che offre piu'
3051           servizi un nome per ciascun servizio. In questo modo, i
3052           servizi possono poi essere spostati su altri host senza
3053           dover riconfigurare i client, ma modificando solo il
3054           DNS.</li>
3055
3056           <li>Record PTR - Il DNS viene utilizzato anche per
3057           realizzare la risoluzione inversa, ovvero per far
3058           corrispondere ad un indirizzo IP il corrispondente nome a
3059           dominio. Per questo si usano i record di tipo "PTR" (e
3060           una apposita zona dello spazio dei nomi
3061           in-addr.arpa).</li>
3062
3063           <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3064
3065           <li>Record SRV - Identificano il server per un
3066           determinato servizio all'interno di un dominio. Possono
3067           essere considerati una generalizzazione dei record
3068           MX.</li>
3069
3070           <li>Record TXT - Associano campi di testo arbitrari ad un
3071           dominio. Questi campi possono contenere una descrizione
3072           informativa oppure essere utilizzati per realizzare
3073           servizi.</li>
3074         </ul>
3075
3076         <p>Vi sono anche tipi di record "di servizio", necessari al
3077         funzionamento del database distribuito: * Record NS -
3078         Utilizzato per indicare quali siano i server DNS
3079         autoritativi per un certo dominio, ovvero per delegarne la
3080         gestione. * Record SOA - (Start of Authority) usato per la
3081         gestione delle zone DNS.</p>
3082       </div>
3083
3084       <div class="section" id="utilizzo">
3085         <h2><a class="toc-backref" href=
3086         "#id59">5.4&nbsp;&nbsp;&nbsp;Utilizzo</a></h2>
3087
3088         <p>I computer vengono identificati in rete grazie agli
3089         indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3090         utenti come riferimento per i vari server. Ad esempio
3091         sarebbe scomodo riferirsi al motore di ricerca Goggle con
3092         uno dei suoi IP: <tt class=
3093         "docutils literal">74.125.43.104</tt>, e' preferibile usare
3094         il nome di dominio <em>www.google.com</em>:</p>
3095         <pre class="literal-block">
3096 ping -c 1 www.google.com
3097 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3098 </pre>
3099       </div>
3100
3101       <div class="section" id="risoluzione-dei-nomi-di-dominio">
3102         <h2><a class="toc-backref" href=
3103         "#id60">5.5&nbsp;&nbsp;&nbsp;Risoluzione dei nomi di
3104         dominio</a></h2>
3105
3106         <p>Ci sono vari strumenti per interrogare i server DNS e
3107         ottenere l'indirizzo IP associato al nome di dominio che ci
3108         interessa:</p>
3109         <pre class="literal-block">
3110 $ host www.piffa.net
3111 www.piffa.net is an alias for piffa.net.
3112 piffa.net has address 65.98.21.97
3113 piffa.net mail is handled by 10 65.98.21.97
3114
3115
3116 $ nslookup www.piffa.net
3117 Server:         192.168.0.10
3118 Address:        192.168.0.10#53
3119
3120 Non-authoritative answer:
3121 www.piffa.net   canonical name = piffa.net.
3122 Name:   piffa.net
3123 Address: 65.98.21.97
3124
3125
3126 $ dig www.piffa.net
3127
3128 ; &lt;&lt;&gt;&gt; DiG 9.6.0-P1 &lt;&lt;&gt;&gt; www.piffa.net
3129 ;; global options: +cmd
3130 ;; Got answer:
3131 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 47751
3132 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3133
3134 ;; QUESTION SECTION:
3135 ;www.piffa.net.                 IN      A
3136
3137 ;; ANSWER SECTION:
3138 www.piffa.net.          3489    IN      CNAME   piffa.net.
3139 piffa.net.              3489    IN      A       65.98.21.97
3140
3141 ;; AUTHORITY SECTION:
3142 piffa.net.              86289   IN      NS      ns2.mydomain.com.
3143 piffa.net.              86289   IN      NS      ns1.mydomain.com.
3144 piffa.net.              86289   IN      NS      ns4.mydomain.com.
3145 piffa.net.              86289   IN      NS      ns3.mydomain.com.
3146
3147 ;; ADDITIONAL SECTION:
3148 ns1.mydomain.com.       96208   IN      A       64.94.117.193
3149 ns2.mydomain.com.       96208   IN      A       64.94.31.67
3150 ns3.mydomain.com.       96208   IN      A       66.150.161.137
3151 ns4.mydomain.com.       96208   IN      A       63.251.83.74
3152
3153 ;; Query time: 1 msec
3154 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3155 ;; WHEN: Sun May 10 21:23:11 2009
3156 ;; MSG SIZE  rcvd: 209
3157 </pre>
3158
3159         <p>Lo strumento piu' esaustivo e' <tt class=
3160         "docutils literal">dig</tt>, installabile con il pacchetto
3161         <tt class="docutils literal">dnsutils</tt> .</p>
3162       </div>
3163
3164       <div class="section" id="dig">
3165         <h2><a class="toc-backref" href=
3166         "#id61">5.6&nbsp;&nbsp;&nbsp;Dig</a></h2>
3167
3168         <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3169         "docutils literal">dig</tt> per l'interrogazione dei DNS
3170         Server:</p>
3171         <pre class="literal-block">
3172 $ dig www.google.it
3173
3174 ; &lt;&lt;&gt;&gt; DiG 9.6.0-P1 &lt;&lt;&gt;&gt; www.google.it
3175 ;; global options: +cmd
3176 ;; Got answer:
3177 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 18816
3178 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3179
3180 ;; QUESTION SECTION:
3181 ;www.google.it.                 IN      A
3182
3183 ;; ANSWER SECTION:
3184 www.google.it.          250683  IN      CNAME   www.google.com.
3185 www.google.com.         334819  IN      CNAME   www.l.google.com.
3186 www.l.google.com.       186     IN      A       74.125.43.103
3187 www.l.google.com.       186     IN      A       74.125.43.104
3188 www.l.google.com.       186     IN      A       74.125.43.147
3189 www.l.google.com.       186     IN      A       74.125.43.99
3190
3191 ;; AUTHORITY SECTION:
3192 l.google.com.           80856   IN      NS      f.l.google.com.
3193 l.google.com.           80856   IN      NS      d.l.google.com.
3194 l.google.com.           80856   IN      NS      b.l.google.com.
3195 l.google.com.           80856   IN      NS      c.l.google.com.
3196 l.google.com.           80856   IN      NS      a.l.google.com.
3197 l.google.com.           80856   IN      NS      e.l.google.com.
3198 l.google.com.           80856   IN      NS      g.l.google.com.
3199
3200 ;; Query time: 1 msec
3201 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3202 ;; WHEN: Sun May 10 21:34:47 2009
3203 ;; MSG SIZE  rcvd: 255
3204 </pre>
3205
3206         <dl class="docutils">
3207           <dt>$ dig</dt>
3208
3209           <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3210           <em>root server</em> utilizzati. I root server sono i
3211           server che mantengono le informazioni sui domini di primo
3212           livello (TLD) e sono quindi il punto di partenza per
3213           scorrere nella directory dei DNS per recuperare le
3214           informazioni (tipicamente un campo <tt class=
3215           "docutils literal">A</tt> per un indirizzo IP) che ci
3216           servono per raggiungere un certo servizio.</dd>
3217         </dl>
3218
3219         <p>$ dig</p>
3220
3221         <blockquote>
3222           <p>...</p>
3223
3224           <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3225           . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3226           B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3227           192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3228           F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3229           192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3230           K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3231           192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3232           J.ROOT-SERVERS.NET. . 192032 IN NS
3233           D.ROOT-SERVERS.NET.</p>
3234
3235           <p>...</p>
3236         </blockquote>
3237
3238         <dl class="docutils">
3239           <dt>dig @nome_dns</dt>
3240
3241           <dd>Permette di fare una query ad un server dns
3242           particolare. Es: <tt class="docutils literal">dig
3243           @151.99.25.1 www.google.it</tt></dd>
3244
3245           <dt>dig MX www.google.it</dt>
3246
3247           <dd>Chiede un campo in particolare, in questo caso il
3248           campo MX</dd>
3249
3250           <dt>dig ANY www.google.it</dt>
3251
3252           <dd>Chiede tutti i campi, non solo i campi
3253           <em>a</em></dd>
3254
3255           <dt>dig -x 74.125.43.104</dt>
3256
3257           <dd>Effettua una richiesta inversa: dall'IP al PTR
3258           associato.</dd>
3259         </dl>
3260       </div>
3261
3262       <div class="section" id="resolv-conf">
3263         <h2><a class="toc-backref" href=
3264         "#id62">5.7&nbsp;&nbsp;&nbsp;resolv.conf</a></h2>
3265
3266         <p>Il file <tt class=
3267         "docutils literal">/etc/resolv.conf</tt> contiene le
3268         impostazioni sul dns usato dal sistema, in genere anche
3269         altre applicazioni che devono effettuare query DNS leggono
3270         resolv.conf per conoscere l'ubicazione del DNS.</p>
3271
3272         <p>/etc/resolv.conf:</p>
3273
3274         <blockquote>
3275           <ul class="simple">
3276             <li><tt class="docutils literal">nameserver</tt>:
3277             indica il nameserver da utilizzare, indicato con
3278             l'indirizzo IP.</li>
3279
3280             <li><tt class="docutils literal">domain</tt>: indica il
3281             nome di dominio della rete attuale, vedi voce
3282             successiva.</li>
3283
3284             <li><tt class="docutils literal">search</tt>: nome di
3285             dominio usato dalla rete sul quale cercare gli hosts.
3286             Ad esempio se impostato su <tt class=
3287             "docutils literal">piffa.net</tt> pingando l' host
3288             <tt class="docutils literal">bender</tt> viene
3289             automaticamente fatto un tentativo di ricerca per
3290             <tt class=
3291             "docutils literal">bender.piffa.net</tt>.</li>
3292           </ul>
3293         </blockquote>
3294
3295         <p>Predisponendo l'infrastruttura di rete della vostra LAN
3296         e' consigliabile impostare sempre almeno un DNS cache sul
3297         vostro server locale per i vari client. In questo modo in
3298         caso di malfunzionamento del DNS o necessita' di
3299         intervenire / sostituire i DNS non sara' piu' necessario
3300         dover reimpostare ogni singolo client della LAN: bastera'
3301         intervenire sul server DNS cache, ad esempio per utilizzare
3302         un nuovo forwarder, o modificare al volo un record DNS. La
3303         modifica, anche detta <em>mascheramento</em>, di un record
3304         come il <em>server smtp</em> o un <em>MX</em> potrebbe
3305         tirarvi rapidamente fuori dai guai nel caso di un problema
3306         improvviso con la posta elettronica o qualunque altro
3307         servizio che possiate reindirizzare col DNS.</p>
3308
3309         <p>Utilizzare un server DHCP e una DNS cache come
3310         <tt class="docutils literal">Dnsmasq</tt> possono
3311         permettervi di risolvere al volo molte delle problematiche
3312         relative alla configurazione della vostra LAN: ad esempio
3313         dover intervenire manualmente su decine di client per
3314         modificare le impostazioni di SMTP | gateway | DNS |
3315         proxy.</p>
3316
3317         <p>Si veda anche la pagina man di resolv.conf.</p>
3318
3319         <div class="warning">
3320           <p class="first admonition-title">Avvertenza</p>
3321
3322           <p class="last">Attenzione: se si usa un client DHCP, ppp
3323           (ADSL compresa) o simile questo file potrebbe' essere
3324           riscritto automaticamente in base a quanto ottenuto dal
3325           DHCP. Si veda la documentazione del pacchetto <tt class=
3326           "docutils literal">resolvconf</tt>.</p>
3327         </div>
3328       </div>
3329
3330       <div class="section" id="etc-hosts">
3331         <h2><a class="toc-backref" href=
3332         "#id63">5.8&nbsp;&nbsp;&nbsp;/etc/hosts</a></h2>
3333
3334         <p>Tabella statica per l'associazione tra IP e nomi di
3335         dominio:</p>
3336         <pre class="literal-block">
3337 # cat /etc/hosts
3338 </pre>
3339
3340         <blockquote>
3341           127.0.0.1 localhost.localdomain localhost 10.10.208.162
3342           daniela daniela.piffa.net 10.10.208.254 mirror
3343           mirror.piffa.net 91.191.138.15 thepiratebay.org
3344           192.168.0.11 chrome chrome.mydomain.com
3345         </blockquote>
3346
3347         <p>Il contenuto del file e' un associazione tra un
3348         <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3349         es: <tt class="docutils literal">mirror</tt> o veri e propi
3350         nomi di dominio <tt class=
3351         "docutils literal">mirror.piffa.net</tt>. Si puo inserire
3352         un nome semplice come <em>casa</em> per riferirsi ad un
3353         host che si ha necessita' di contattare spesso, oppure
3354         mappare un nome di dominio completo su un indirizzo IP.</p>
3355
3356         <p>Il problema e' la gestione di questo file su molti
3357         hosts: quando gli host cambiano IP si devono aggiornare
3358         manualmente i records, operazione in se' non
3359         particolarmente gravosa ma che andra' fatta per ogni client
3360         della vostra LAN. Un metodo semplice per distribuire questo
3361         file e' utilizzare <tt class=
3362         "docutils literal">Dnsmasq</tt>: questo infatti legge e
3363         onora il file <tt class="docutils literal">hosts</tt> che
3364         avete prodotto e lo rende disponibile ai clients tramite le
3365         query DNS.</p>
3366
3367         <p>Dnsmasq lavora come un server DNS, i vostri client lo
3368         interrogheranno per tradurre nomi di host e domini in
3369         indirizzi IP, risolvendo il problema della
3370         <em>distribuzione</em> del file <tt class=
3371         "docutils literal">hosts</tt> tra molteplici clients.
3372         Infatti il servizio DNS indica appunto una <em>directory
3373         distribuita</em> per la risoluzione dei nomi di dominio,
3374         risolvendo i problemi dell'aggiornamento e diffusione dei
3375         continui cambiamenti di questa.</p>
3376
3377         <p>Modificare la risoluzione di un nome di dominio
3378         esistente (ad esempio riconducendola a un IP interno) e' un
3379         modo drastico e funzionale per <em>annullarlo</em>
3380         rendendolo non disponibile alla propria rete locale. Ad
3381         esempio aggiungere al file <tt class=
3382         "docutils literal">/etc/hosts</tt>:</p>
3383         <pre class="literal-block">
3384 127.0.0.1       www.facebook.com
3385 </pre>
3386
3387         <p>Impedira' agli utenti della LAN di raggiungere
3388         <em>facebook</em>, ora reindirizzato a <tt class=
3389         "docutils literal">localhost</tt>.</p>
3390
3391         <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3392         server HTTP pubblico usato per i downloads (ad esempio un
3393         mirror della propia distribuzione come <tt class=
3394         "docutils literal">ftp.it.debian.org</tt>) a un equivalente
3395         mirror creato all'interno della rete locale, riducendo il
3396         traffico verso l'esterno e aumentando notevolmente la
3397         velocita' di scaricamento.</p>
3398       </div>
3399
3400       <div class="section" id="hostname">
3401         <h2><a class="toc-backref" href=
3402         "#id64">5.9&nbsp;&nbsp;&nbsp;Hostname</a></h2>
3403
3404         <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3405         (e modificabile) con il comando <tt class=
3406         "docutils literal">hostname</tt>. Quando utilizzate a una
3407         shell su un host in genere l'hostname compare nel prompt
3408         della shell.</p>
3409
3410         <p>Per visualizzare il nome dell'host su cui si sta
3411         operando si digiti semplicemnte <tt class=
3412         "docutils literal">hostname</tt>, lo stesso comando con un
3413         oggetto modifica temporaneamente il nome dell'host. Per
3414         modificare in modo permanente il nome del computer si
3415         modifichi il contenuto del file <tt class=
3416         "docutils literal">/etc/hostname</tt>.</p>
3417
3418         <p>Si faccia attenzione a non aver un hostname puramente
3419         numerico: ad es. <tt class="docutils literal">161</tt>. E'
3420         opportuno che il nome sia comunque un alfanumerico:
3421         <tt class="docutils literal"><span class=
3422         "pre">host-161</span></tt> o simile.</p>
3423
3424         <div class="section" id="fqdn">
3425           <h3><a class="toc-backref" href=
3426           "#id65">5.9.1&nbsp;&nbsp;&nbsp;FQDN</a></h3>
3427
3428           <p>Per semplicita' gli host sono generalemente
3429           raggiungibili dall'esterno mappando il loro IP su un nome
3430           di dominio FQDN: fully qualified domain name, composto
3431           generalmente da <em>hostname</em>.``domain-name``, ad es.
3432           <em>bender</em>.``piffa.net``.</p>
3433
3434           <p>Alcuni servizi internet fanno affidamento sul PTR
3435           dell'IP del server per cercare una conferma che il
3436           <em>servizio</em> sia veramente chi afferma di essere (ad
3437           esempio STMP).</p>
3438
3439           <p>Non e' automatico che un servizio, ad esempio un
3440           server di posta, si qualifichi leggendo il contenuto del
3441           file <tt class="docutils literal">hostname</tt>
3442           aggiungendo come suffisso il dominio della rete di cui fa
3443           parte l' host: a volte questo parametro puo' essere
3444           specificato nel file di configurazione del servizio:</p>
3445           <pre class="literal-block">
3446 * Squid (HTTP proxy): ``visible_hostname``
3447
3448 * Postfix (SMTP server): ``myhostname``
3449 </pre>
3450
3451           <p>I motivi sono diversi, senza entrare nel dettaglio dei
3452           vari protocolli si pensi comunque che un host ha sempre
3453           un solo nome, ma puo' avere un numero variabile di
3454           <em>device di rete</em> sia fisici che virtuali con
3455           relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3456           sui vari IP.</p>
3457         </div>
3458       </div>
3459     </div>
3460
3461     <div class="section" id="dnsmasq">
3462       <h1><a class="toc-backref" href=
3463       "#id66">6&nbsp;&nbsp;&nbsp;DNSmasq</a></h1>
3464
3465       <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3466       forwarder, server DHCP, e' caratterizzato dalla facilita' di
3467       configurazione, limitato uso di risorse, adattabilita' a
3468       connessioni <em>dinamiche</em> come ADSL o altre punto a
3469       punto (anche via cellulari) per condividere rapidamente la
3470       rete (cosa molto utile se ci dovesse trovare a ridare
3471       connettetivita' a una rete momentaneamente sprovvista), dalla
3472       possibilita' di modificare rapidamente i record DNS serviti
3473       alla rete anche grazie alla distribuzione del file <tt class=
3474       "docutils literal">/etc/hosts</tt> locale. Puo' essere anche
3475       utilizzato come <cite>server per il boot da rete
3476       &lt;http://www.debian-administration.org/articles/478&gt;_</cite>
3477       .</p>
3478
3479       <p>Dnsmasq e' un interessante alternativa all'uso del server
3480       DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3481       autoritativo) accompagnato dal server DHCPd. I vantaggi
3482       sono:</p>
3483
3484       <ul class="simple">
3485         <li>Leggerezza: puo' essere fatto girare su una macchina
3486         relativamente debole in caso di bisogno.</li>
3487
3488         <li>Rapidita' di configurazione (in particolare per servire
3489         dei record A / MX alla rete, modificando al volo i valori
3490         originali ospitati sul server DNS pubblico).</li>
3491
3492         <li>Ben integrato con connessioni PPP : e' ingrado di
3493         rilevare i cambiamenti dei dns suggeriti e impostarli come
3494         forwarders (utile se dovete rendere disponibile rapidamente
3495         una connessione a internet a una rete in difficolta').</li>
3496       </ul>
3497
3498       <p>Tutto cio' rende Dnsmasq una soluzione valida in
3499       particolare quando si deve intervenire in una rete
3500       pre-esistente in cui il server principale e' in crisi: si
3501       potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3502       <em>mascherare</em> i servizi al momento non disponibili.
3503       Molto utile per scopi didattici, sopratutto per testare
3504       server SMTP impostando al volo i campi MX per nomi di dominio
3505       fittizi.</p>
3506
3507       <div class="section" id="configurazione">
3508         <h2><a class="toc-backref" href=
3509         "#id67">6.1&nbsp;&nbsp;&nbsp;Configurazione</a></h2>
3510
3511         <p>Vediamo alcune direttive di basi del file di
3512         configurazione <tt class=
3513         "docutils literal">/etc/dnsmasq.conf</tt> utili per la
3514         configurazione sia del DNS cache che per il DHCP
3515         server:</p>
3516
3517         <dl class="docutils">
3518           <dt>domain-needed</dt>
3519
3520           <dd>Non inoltrare query ai server DNS esterni per nomi
3521           semplici (es andrea, portatile, pippo) che verranno
3522           risolti solo in locale o causeranno direttamente una
3523           risposta <em>not found</em> .</dd>
3524
3525           <dt>bogus-priv</dt>
3526
3527           <dd>Simile alla voce precedente ma per i reverse
3528           look-up.</dd>
3529
3530           <dt>domain</dt>
3531
3532           <dd>Nome di dominio della rete da passare ai client.</dd>
3533
3534           <dt>expand_hosts</dt>
3535
3536           <dd>Aggiunge il <tt class="docutils literal">nome
3537           host</tt> ( <tt class=
3538           "docutils literal">/etc/hostname</tt>) dei client al nome
3539           di dominio per qualificarli in rete, senza bisogno di
3540           dover comporre a un elenco statico di record nel file
3541           <tt class="docutils literal">/etc/hosts</tt> o nello
3542           stesso file di configurazione di dnsmasq. Es: se un
3543           vostro client si chiama <tt class=
3544           "docutils literal">chrome</tt> e il vostro dominio
3545           <tt class="docutils literal">piffa.net</tt> dnsmasq
3546           rendera' disponibile il campo <em>A</em> per il dominio
3547           <tt class="docutils literal">chrome.piffa.net</tt>
3548           diretto all'ip che verra' assegnato al client.</dd>
3549         </dl>
3550       </div>
3551
3552       <div class="section" id="dhcp">
3553         <h2><a class="toc-backref" href=
3554         "#id68">6.2&nbsp;&nbsp;&nbsp;DHCP</a></h2>
3555
3556         <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3557         al file di configurazione il <em>range</em> degli IP che si
3558         vuole assegnare ai client con il <em>lease time</em> (tempo
3559         di rilascio: quanto a lungo saranno validi gli IP
3560         assegnati) espresso in ore.</p>
3561
3562         <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3563         presente <strong>un solo server DHCP</strong>, o per meglio
3564         dire qualunque server DHCP ascolta sul broadcast <tt class=
3565         "docutils literal">255.255.255.255</tt> e potrebbe
3566         rispondere a un pacchetto di richiesta DHCP. Quindi non
3567         fate partire inavvertitamente un server DHCP in una rete
3568         gia' servita e <strong>non vi azzardate ad andare in giro
3569         con un portatile con un server DHCP attivo</strong> nelle
3570         reti altrui. Questo vale anche per i laboratori di
3571         informatica dei corsi di reti: non fate partire il vostro
3572         server DHCP se siete collegati alla rete interna!</p>
3573
3574         <p>/etc/dnsmasq.conf (riga 118):</p>
3575         <pre class="literal-block">
3576 dhcp-range=192.168.0.20,192.168.0.50,24h
3577 </pre>
3578       </div>
3579
3580       <div class="section" id="dns-cache">
3581         <h2><a class="toc-backref" href=
3582         "#id69">6.3&nbsp;&nbsp;&nbsp;DNS cache</a></h2>
3583
3584         <p>Dnsmasq lavora di default come cache dns: inserire al
3585         file <tt class="docutils literal">/etc/resolv.conf</tt> il
3586         nameserver localhost in cima alla lista dei
3587         <em>nameserver</em> disponibili.</p>
3588
3589         <blockquote>
3590           nameserver 127.0.0.1
3591         </blockquote>
3592
3593         <p>Questo pero' potrebbe essere problematico se un altro
3594         servizio, ad esempio il DHCP client, riscrive il contenuto
3595         del file <tt class=
3596         "docutils literal">/etc/resolv.conf</tt>. Per superare il
3597         problema si aggiunga (riga 20) al file di configurazione
3598         <tt class=
3599         "docutils literal">/etc/dhcp3/dhclient.conf</tt></p>
3600         <pre class="literal-block">
3601 prepend domain-name-servers 127.0.0.1;
3602 </pre>
3603
3604         <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3605         (per la connessione ADSL) a intervenire sul file <tt class=
3606         "docutils literal">//etc/resolv.conf</tt>, si modifichi
3607         quindi <tt class="docutils literal"><span class=
3608         "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3609         <tt class="docutils literal">usepeerdns</tt>. Se la vostra
3610         connessione ad internet e' ADSL raramente dovreste aver
3611         bisogno di cambiare i DNS una volta impostati (a meno che
3612         non usiate un portatile!).</p>
3613       </div>
3614     </div>
3615
3616     <div class="section" id="bind-dns-autoritativo">
3617       <h1><a class="toc-backref" href=
3618       "#id70">7&nbsp;&nbsp;&nbsp;Bind : DNS Autoritativo</a></h1>
3619
3620       <p>Le soluzioni viste possono bastare per la rete locale o
3621       per fare delle prove, ma prima o poi verra' il momento in cui
3622       si e' chiamati a gestire dei domini su internet: lo standard
3623       e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3624       versione 9.</p>
3625
3626       <p>Installare i pacchetti:</p>
3627       <pre class="literal-block">
3628 bind9
3629 </pre>
3630
3631       <div class="section" id="id5">
3632         <h2><a class="toc-backref" href=
3633         "#id71">7.1&nbsp;&nbsp;&nbsp;DNS cache</a></h2>
3634
3635         <p>Bind appena installato funzionera' come DNS cache: si
3636         faccia un test con un <tt class="docutils literal">dig
3637         @localhost</tt> . Bind a differenza di Dnsmasq e' autonomo:
3638         non ha bisogno di forwardare (inoltrare) le query a un DNS
3639         esterno: queste verranno risolte direttamente da Bind
3640         partendo dai <em>DNS root servers</em>.</p>
3641
3642         <p>E' comunque possibile impostare dei DNS forwarders,
3643         tipicamente i DNS server forniti dal proprio provider, per
3644         velocizzare le query:</p>
3645
3646         <p>/etc/bind/named.conf.options (riga 13):</p>
3647         <pre class="literal-block">
3648 forwarders {
3649                  10.10.208.254;
3650            };
3651 </pre>
3652
3653         <p>Nel caso si voglia usare Bind solo come server DNS cache
3654         per la propria LAN senza ospitare delle zone DNS pubbliche
3655         sara' il caso di limitare gli accessi al server alla sola
3656         LAN:</p>
3657
3658         <p>/etc/bind/named.conf.options (riga 19):</p>
3659         <pre class="literal-block">
3660 // Se il proprio server ha IP 10.10.208.254
3661 // sulla rete LAN privata:
3662 listen-on { 10.10.208.254; }
3663 </pre>
3664
3665         <p>E non si lasci il server in ascolto su uno degli
3666         eventuali indirizzi IP pubblici.</p>
3667
3668         <p>Se questo non fosse possibile si puo' sempre lavorare su
3669         una <em>acl</em>:</p>
3670
3671         <p>/etc/bind/named.conf</p>
3672         <pre class="literal-block">
3673 acl "localnet" {
3674         10.10.208.0/24 ; 127.0.0.0/8 ;
3675         } ;
3676 </pre>
3677
3678         <p>Per poi aggiungere all'interno della stanza options la
3679         direttiva che abilita' l'entita' <tt class=
3680         "docutils literal">localnet</tt>:</p>
3681
3682         <p>/etc/bind/named.conf.options</p>
3683         <pre class="literal-block">
3684 allow-query {"localnet" ;} ;
3685 </pre>
3686       </div>
3687
3688       <div class="section" id="ospitare-una-zona">
3689         <h2><a class="toc-backref" href=
3690         "#id72">7.2&nbsp;&nbsp;&nbsp;Ospitare una zona</a></h2>
3691
3692         <p>Se avete acquistato un nome di dominio e vi serve un
3693         software DNS per gestirlo Bind e' la scelta piu' diffusa.
3694         Ora vedremo come configurare una <em>zona</em> (come
3695         piffa.net) in modo che Bind sia autoritativoper questa,
3696         rispondendo alle query DNS di tutta la rete internet.</p>
3697
3698         <div class="section" id="named-conf-local">
3699           <h3><a class="toc-backref" href=
3700           "#id73">7.2.1&nbsp;&nbsp;&nbsp;named.conf.local</a></h3>
3701
3702           <p>Prima di tutti impostiamo il server bind per gestire
3703           la zona, per non fare confusione e' opportuno inserire le
3704           propie zone DNS nel file <tt class=
3705           "docutils literal">named.conf.local</tt> e non in
3706           <tt class="docutils literal">named.conf</tt>.</p>
3707
3708           <p>named.conf.local:</p>
3709           <pre class="literal-block">
3710 /
3711 // Do any local configuration here
3712 //
3713
3714 // Consider adding the 1918 zones here, if they are not used in your
3715 // organization
3716 //include "/etc/bind/zones.rfc1918";
3717
3718 zone "piffa.net" {
3719         type master;
3720         file "/etc/bind/pz/piffa.net";
3721         }
3722 </pre>
3723
3724           <dl class="docutils">
3725             <dt>type master</dt>
3726
3727             <dd>Il nostro server DNS sara' il principale, al quale
3728             poi potremo affiancare dei DNS secondari nel caso
3729             questo non sia disponibile.</dd>
3730
3731             <dt>file "/etc/bind/pz/piffa.net"</dt>
3732
3733             <dd>Dove verranno inserite le informazioni vere e
3734             propie di questa zona.</dd>
3735           </dl>
3736         </div>
3737
3738         <div class="section" id="configurazione-della-zona">
3739           <h3><a class="toc-backref" href=
3740           "#id74">7.2.2&nbsp;&nbsp;&nbsp;Configurazione della
3741           zona</a></h3>
3742
3743           <p>Ora dovremo preparare il file contenente i record DNS
3744           della zona <em>piffa.net</em>, come abbiamo indicato
3745           prima questi saranno contenuti nel file <tt class=
3746           "docutils literal">/etc/bind/pz/piffa.net</tt> . Tenere
3747           le zone dentro una sottocartella e' buona abitudine,
3748           usare <tt class="docutils literal">pz</tt> per queste e'
3749           una vecchia abitudine.</p>
3750
3751           <p>piffa.net:</p>
3752           <pre class="literal-block">
3753 ; Zona per il dominio di secondo livello piffa.net
3754
3755 $TTL 3D     ; 3 days
3756 @                    IN SOA  ns1.piffa.net. hostmaster.piffa.net. (
3757                                 200905245  ; serial
3758                                 8H         ; refresh (8 hours)
3759                                 2H         ; retry (2 hours)
3760                                 4W         ; expire (4 weeks)
3761                                 1D         ; minimum (1 day)
3762                                 )
3763 ;
3764                         NS      ns1
3765                         NS      ns2
3766                         A       94.23.63.105
3767                         MX      10 smtp
3768                         TXT     "Piffanet main site"
3769 ;
3770 ns1             A       94.23.63.105
3771 ns2             A       65.98.21.97
3772 zoo             A       94.23.63.105
3773 smtp            A       94.23.63.105
3774 test.piffa.net. A       94.23.63.105
3775 *.piffa.net.    A       94.23.63.105 ; *catch all domain
3776 www             CNAME   zoo
3777 ftp             CNAME   zoo
3778 </pre>
3779
3780           <p>All'interno di questo file si possono inserire dei
3781           commenti con il carattere <tt class=
3782           "docutils literal">;</tt> (punto-e-virgola), si faccia
3783           attenzione alla rigida sintassi: apertura e chiusura
3784           delle parentesi tonde nella parte <tt class=
3785           "docutils literal">IN SOA</tt>, uso del <tt class=
3786           "docutils literal">punto</tt> finale per precisare un
3787           nome di dominio specifico (<em>FQDN</em>: Fully-qualified
3788           Domain Name) come <tt class=
3789           "docutils literal">test.piffa.net.</tt> a differenza
3790           degli altri domini di terzo livello come <tt class=
3791           "docutils literal">pop,imap,smtp</tt> .</p>
3792
3793           <p>La zona inizia con una direttiva <tt class=
3794           "docutils literal">$TTL 3D</tt> (RFC 2308) che indica la
3795           durata (in questo caso tre giorni) che ogni record
3796           dovrebbe avrebbe nella cache degli altri serber DNS.
3797           Questo valore dovrebbe essere superiore a un giorno, se
3798           non modificate spesso i valori dei vostri record DNS e'
3799           consigliabile settarlo a 2/3 settimane in modo da
3800           limitare la frequenza delle query al propio server.
3801           Questo parametro puo' essere modificato per singoli
3802           record:</p>
3803           <pre class="literal-block">
3804 $TTL 3D     ; 3 giorni: default se non specificato altrimenti
3805 rapido  5h      IN      A       94.23.63.105 ; usa un TTL di 5 ore
3806 lento   3w      IN      A       94.23.63.105 ; usa un TTL di 3 settimane
3807 normale         IN      A       94.23.63.105 ; usa il TTL di default: 3 giorni
3808 </pre>
3809
3810           <p>Segue poi il nome della zona, indicato con la
3811           <tt class="docutils literal">@</tt> per richiamare la
3812           zona originale precisata nel file <tt class=
3813           "docutils literal">named.conf.options</tt> . Segue il
3814           campo <tt class="docutils literal">SOA</tt>.</p>
3815
3816           <div class="section" id="soa-start-of-authority-record">
3817             <h4><a class="toc-backref" href=
3818             "#id75">7.2.2.1&nbsp;&nbsp;&nbsp;SOA: Start of
3819             Authority Record</a></h4>
3820
3821             <p>Il record SOA puo' comparire solo una volta in una
3822             zona, contiene informazioni relative all'autorita' del
3823             server DNS.</p>
3824
3825             <dl class="docutils">
3826               <dt>ns1.piffa.net. name-server</dt>
3827
3828               <dd>primary master DNS di questo dominio.</dd>
3829
3830               <dt>hostmaster.piffa.net. email-addr</dt>
3831
3832               <dd>email-addr: indirizzo email della persona
3833               responsabile di questa zona, il primo punto viene
3834               tradotto in una <em>chiocciola</em> <tt class=
3835               "docutils literal">@</tt> dato che questo carattere
3836               ha un'altro utilizzo all'interno di questo file. Il
3837               referente della zona <strong>deve</strong> essere un
3838               email valido e controllato, come consuetudine si usa
3839               <tt class=
3840               "docutils literal">hostmaster@dominio.tilde</tt>
3841               .</dd>
3842
3843               <dt>200905245 serial number</dt>
3844
3845               <dd>Questo valore serve per indicare quando e' stato
3846               modificato questo file di configurazione, secondo il
3847               formato <tt class="docutils literal">yyyymmddss</tt>:
3848               <tt class="docutils literal">yyyy</tt> = anno, ''mm''
3849               = mese, ''dd'' = giorno, ''ss'' = seriale. Il seriale
3850               che deve essere sempre specificato anche per una
3851               cifra, va incrementato di una unita' nel caso vengano
3852               fatte piu' modifiche <em>nello stesso
3853               giorno</em>.</dd>
3854
3855               <dt>8H refresh</dt>
3856
3857               <dd>Indica ai DNS secondari quanto tempo attendere
3858               per cercare di aggiornare i loro dati con il DNS
3859               master.</dd>
3860
3861               <dt>2H retry</dt>
3862
3863               <dd>Intervallo di tempo per il DNS slave (secondario)
3864               da aspettare prima di cercare di ricontattare il
3865               <em>master</em> in caso di problemi col
3866               <em>refresh</em>.</dd>
3867
3868               <dt>4W expire</dt>
3869
3870               <dd>Indica quando i dati dei dns secondarinon sono
3871               piu' autoritativi in caso di impossibilita' degli
3872               <em>slaves</em> di ri-aggiornarsi con il
3873               <em>master</em>. Consigliato un valore di 2/4
3874               settimane.</dd>
3875
3876               <dt>1D minimum</dt>
3877
3878               <dd>Questo valore indicava il TTL fino alla versione
3879               8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3880               durata del <em>negative caching</em>, quanto i
3881               resolvers (ad esempio un server dns cache) puo'
3882               mantenere un record <em>negativo</em> (che non indica
3883               la corrispondenza tra un nome di dominio e un ip, ma
3884               la non esistenza del record). Nell'uso per il
3885               negative caching viene fissato un valore massimo di 3
3886               ore dalla RFC 2308.</dd>
3887             </dl>
3888           </div>
3889
3890           <div class="section" id="altri-campi">
3891             <h4><a class="toc-backref" href=
3892             "#id76">7.2.2.2&nbsp;&nbsp;&nbsp;Altri campi:</a></h4>
3893
3894             <p>All'interno della zona possono essere utilizati vari
3895             tipi di records (RR):</p>
3896
3897             <dl class="docutils">
3898               <dt>TXT</dt>
3899
3900               <dd>Informazioni testuali associate ad un record</dd>
3901
3902               <dt>NS</dt>
3903
3904               <dd>Name Server della zona. Non deve essere un
3905               cname.</dd>
3906
3907               <dt>A</dt>
3908
3909               <dd>Indirizzo ipv4 da associare al record</dd>
3910
3911               <dt>AAA</dt>
3912
3913               <dd>Indirizzo ipv6 da associare al record</dd>
3914
3915               <dt>CNAME</dt>
3916
3917               <dd>Canonical Name: un alias per un host: ad esempio
3918               per il dominio piffa.net possiamo settare degli alias
3919               come <tt class="docutils literal">www.piffa.net,
3920               http.piffa.net, virtual.piffa.net, ftp.piffa.net,
3921               imap.piffa.net</tt>. Comodo quando diversi alias sono
3922               sempre riferiti allo stesso ip.</dd>
3923
3924               <dt>MX</dt>
3925
3926               <dd>Mail Exchanger: server di posta che si occupera'
3927               della posta elettronica per questo dominio.E'
3928               opportuno avere almeno un server di posta di back-up,
3929               per indicare la priorita' di un MX rispettoad un
3930               altro si usa un valore di 2 cifre: il valore piu'
3931               basso indica priorita' piu' bassa. Es: <tt class=
3932               "docutils literal">MX&nbsp;&nbsp;&nbsp; 10
3933               smtp.piffa.net.</tt> per il server SMTP principale e
3934               <tt class=
3935               "docutils literal">MX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3936               40 smtp2.piffa.net</tt> per il secondario. Non deve
3937               essere un cname.</dd>
3938
3939               <dt>PTR</dt>
3940
3941               <dd>Reverse look-up, usato per la mappatura inversa
3942               di un indirizzo ip a una stringa identificativa
3943               dell'host. Si noti che per poter modificare questi
3944               record si deve avere <em>in gestione</em> la <em>zona
3945               IP</em>, se cosi' non fosse si dovra' chiedere al
3946               propio provider la modifica di questo record per il
3947               propio ip. Links: <a class="reference external" href=
3948               "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
3949             </dl>
3950           </div>
3951         </div>
3952       </div>
3953
3954       <div class="section" id="dns-slave">
3955         <h2><a class="toc-backref" href=
3956         "#id77">7.3&nbsp;&nbsp;&nbsp;DNS slave</a></h2>
3957
3958         <p>Data l'importanza del servizio DNS e' necessario avere
3959         ridondanza per i server DNS che ospitano i vostri dati: in
3960         caso di indisponibilita' del server <em>master</em> (nel
3961         caso fosse il solo a tenere i dati questo comporterebbe la
3962         <em>scomparsa</em> di tutti i servizi / host da esso
3963         seviti!) il client potrebbe contattare uno degli
3964         <em>slave</em>.</p>
3965
3966         <p>Gli slave recuperano i dati dei recordos RR direttamente
3967         dal master e non sara' quindi necessario dover mantenere
3968         manualmente il file di configurazione della zona sugli
3969         slaves, ogni volta che aggiorneremo il master questi dati
3970         si propaghera' agli slaves automaticamente.</p>
3971
3972         <p>Per attivare uno <em>slave</em> per la nostra zona di
3973         esempio <tt class="docutils literal">piffa.net</tt> si
3974         inserisca nel file <tt class=
3975         "docutils literal">named.conf.local</tt> dello slave
3976         server:</p>
3977         <pre class="literal-block">
3978 zone "piffa.net" {
3979         type slave;
3980         file "/etc/bind/pz/piffa.net";
3981         masters { 192.168.0.1; };
3982         };
3983 </pre>
3984
3985         <p>Facendo ripartire Bind il file <tt class=
3986         "docutils literal">/etc/bind/pz/piffa.net</tt> viene creato
3987         automaticamente.</p>
3988
3989         <p>Segue un estratto di <tt class=
3990         "docutils literal">/var/log/syslog</tt> al <tt class=
3991         "docutils literal">restart</tt> di <tt class=
3992         "docutils literal">bind9</tt> sullo slave:</p>
3993         <pre class="literal-block">
3994 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
3995 ... slave named[2256]: running
3996 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
3997 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
3998 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
3999 </pre>
4000
4001         <div class="warning">
4002           <p class="first admonition-title">Avvertenza</p>
4003
4004           <p class="last">Bind9 (versione 9.3 presente in Debian
4005           Lenny) richiede una esplicita autorizzazione alla
4006           notifica per lo stesso server slave, che in fase di avvio
4007           interroghera' (inviando un notify) se' stesso per
4008           valutare se i dati relativi alla zona di cui e' slave
4009           sono aggiornati. Si aggiunga quindi al file <tt class=
4010           "docutils literal">/etc/bind/named.conf.options</tt>
4011           dello slave: <tt class="docutils literal"><span class=
4012           "pre">allow-notify</span> { 192.168.0.1; };</tt>
4013           all'interno della stanza <tt class=
4014           "docutils literal">options</tt>, in cui l'inidirizzo IP
4015           inserito e' quello dello stesso slave server.</p>
4016         </div>
4017       </div>
4018
4019       <div class="section" id="aggiornamento-dinamico-nsupdate">
4020         <h2><a class="toc-backref" href=
4021         "#id78">7.4&nbsp;&nbsp;&nbsp;Aggiornamento dinamico:
4022         nsupdate</a></h2>
4023
4024         <p>Dalla versione 8 di Bind e' dsponibile l'utility
4025         <tt class="docutils literal">nsupdate</tt> (disponibile nel
4026         pacchetto <tt class="docutils literal">dnsutils</tt>) per
4027         aggiornare automaticamente i record di una zona secondo il
4028         paradigma client / server ( RFC2136 ) . Posto che abbiate a
4029         disposizione un server DNS Bind on-line su un indirizzo IP
4030         fisso e un zona da gestire (che potrebbe essere anche solo
4031         la delega di un dominio di terzo livello come
4032         <em>casa.miodominio.net</em>) sara' possibile aggiornare
4033         automaticamente i record che tirano a degli indirizzi IP
4034         <em>pubblici ma dnamici</em>, come quelli spesso messi a
4035         disposizione dei provider per le connessioni ad internet
4036         residenziali, in modo da poter rendere sempre raggiungibile
4037         la vostra workstation a casa anche dopo un aggiornamento
4038         dell'ip dinamico associato alla connessione.</p>
4039
4040         <p>L'auenticazione del client nsupdate che avra' la
4041         possibilita' di aggiornare il server DNS master avviene
4042         tramite <em>Transaction signatures</em> (TSIG, RFC2845)
4043         usando un algoritmo di criptazione dati asimmetrico
4044         <em>HMAC-MD5</em> : generata una coppia di chiavi sul
4045         client / nsupdate con l'utility si dovra' trasferire la
4046         chiave pubblica sul server <em>master</em>, che verra'
4047         configurato per onorare gli aggiornamenti (eliminazione e
4048         inserimento di record RR) autenticati dalla chiave
4049         privata.</p>
4050
4051         <div class="section" id="configurazione-client-nsupdate">
4052           <h3><a class="toc-backref" href=
4053           "#id79">7.4.1&nbsp;&nbsp;&nbsp;Configurazione client
4054           (nsupdate)</a></h3>
4055
4056           <p>Sul client, sul quale non deve essere necessariamente
4057           installato un server DNS Bind ma la sola utility
4058           <tt class="docutils literal">nsupdate</tt>, generiamo la
4059           coppia di chiavi con l'utility <tt class=
4060           "docutils literal"><span class=
4061           "pre">dnssec-keygen</span></tt> installabile tramite il
4062           pacchetto <tt class=
4063           "docutils literal">bind9utils</tt>:</p>
4064           <pre class="literal-block">
4065 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4066 </pre>
4067
4068           <p>Otterremo le due chiavi <tt class=
4069           "docutils literal"><span class=
4070           "pre">Khome.piffa.net.+157+04331.key</span>&nbsp;
4071           <span class=
4072           "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4073           chiave pubblica dovra' essere resa noto al server master
4074           che ricevera' l'update dei records.</p>
4075         </div>
4076
4077         <div class="section" id=
4078         "configurazione-server-riconoscimento-chiave">
4079           <h3><a class="toc-backref" href=
4080           "#id80">7.4.2&nbsp;&nbsp;&nbsp;Configurazione server:
4081           riconoscimento chiave</a></h3>
4082
4083           <dl class="docutils">
4084             <dt>Per rendere nota al server la chiave pubblica
4085             generata sul client si aggiunga quindi al file
4086             <tt class="docutils literal">/etc/bind/named.conf</tt>
4087             sul server::</dt>
4088
4089             <dd>
4090               <dl class="first last docutils">
4091                 <dt>key home.piffa.net. {</dt>
4092
4093                 <dd>algorithm HMAC-MD5; secret
4094                 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4095                 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4096               </dl>
4097             </dd>
4098           </dl>
4099
4100           <div class="note">
4101             <p class="first admonition-title">Nota</p>
4102
4103             <p class="last">La parte <tt class=
4104             "docutils literal">secret</tt>, che potete leggere
4105             direttamente nel file *.key della chiave genearta, e'
4106             scritto <em>tutto sulla stessa riga</em> senza ritorni
4107             a capo.</p>
4108           </div>
4109         </div>
4110
4111         <div class="section" id="server-gestione-dell-intera-zona">
4112           <h3><a class="toc-backref" href=
4113           "#id81">7.4.3&nbsp;&nbsp;&nbsp;Server: gestione
4114           dell'intera zona</a></h3>
4115
4116           <p>Sul server modifichiamo il file di configurazione
4117           <tt class="docutils literal">named.conf.local</tt> della
4118           zona della quale vogliamo concedere l'aggiornamento al
4119           client:</p>
4120           <pre class="literal-block">
4121 zone "piffa.net" {
4122         type master;
4123         file "/etc/bind/pz/piffa.net" ;
4124         allow-update {
4125                         key  home.piffa.net;
4126                         };
4127 };
4128 </pre>
4129
4130           <dl class="docutils">
4131             <dt>Sara' necessario assicurarsi che il demone di Bind
4132             sia in grado di modificare il file <tt class=
4133             "docutils literal">/etc/bind/pz/piffa.net</tt>: dato
4134             che questo file ora sara' gestito da lui si proceda a
4135             cedergli la propieta' del file::</dt>
4136
4137             <dd>chown bind /etc/bind/pz/piffa.net</dd>
4138           </dl>
4139
4140           <p>Altro problema che si potrebbe porre: gli orologi di
4141           sistema dei due host devono essere sincronizzati per
4142           poter valutare l'opportunita' di un aggiornamento: si
4143           consigla di installare su entrambi l'utility <tt class=
4144           "docutils literal">ntpdate</tt> e di eseguirla facendo
4145           riferimento ai time server di Debian:</p>
4146           <pre class="literal-block">
4147 apt-get install ntpdate
4148 ntpdate-debian
4149 </pre>
4150
4151           <p>Ora possiamo provare dal client a effettuare
4152           l'iserimento di un record per testarne il
4153           funzionamento:</p>
4154           <pre class="literal-block">
4155 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4156 &gt; server ns1.piffa.net
4157 &gt; update add home.piffa.net. 86400 A 192.168.0.2
4158 &gt; show
4159 Outgoing update query:
4160 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: UPDATE, status: NOERROR, id:      0
4161 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4162 ;; UPDATE SECTION:
4163 home.piffa.net.         86400   IN      A       192.168.0.1
4164
4165
4166 &gt; send
4167 </pre>
4168
4169           <p>Per comprendere meglio l'uso dell'utility <tt class=
4170           "docutils literal">nsupdate</tt> si consiglia la lettura
4171           della relativa pagina man. Nella prima riga viene
4172           invocato il comando <tt class=
4173           "docutils literal">nsupdate</tt> impostando col flag
4174           <tt class="docutils literal"><span class=
4175           "pre">-k</span></tt> la chiave privata generata
4176           precedentemente, con <tt class=
4177           "docutils literal">server</tt> si imposta quale server NS
4178           autoritario della zona (che abbiamo precedentemente
4179           configurato per ricevere gli aggiornamenti) vogliamo
4180           contattare. Alla riga sucessiva <tt class=
4181           "docutils literal">update</tt> viene aggiunto un record
4182           <tt class="docutils literal">A</tt> per la il dominio
4183           <tt class="docutils literal">home.piffa.net</tt>
4184           indirizzato all'IP <tt class=
4185           "docutils literal">192.168.0.2</tt>, poi <tt class=
4186           "docutils literal">show</tt> mostra quanto ci si prepara
4187           a comunicare al server con il finale <tt class=
4188           "docutils literal">send</tt> .</p>
4189
4190           <p>Si noti che in questo modo <em>l'intera zona</em>
4191           piffa.net e suscettibile di essere modificata dal client,
4192           che potra' eliminare e inserire qualunque record. E'
4193           possibile gestire in modo piu' granulare la zona, ad
4194           esempio concedendo al client i privilegi per gestire solo
4195           una parte della zona o i tipo di record da gestire.</p>
4196         </div>
4197
4198         <div class="section" id=
4199         "automatizzare-l-aggiornamento-dinamico">
4200           <h3><a class="toc-backref" href=
4201           "#id82">7.4.4&nbsp;&nbsp;&nbsp;Automatizzare
4202           l'aggiornamento dinamico</a></h3>
4203
4204           <p>Nsupdate risulta comodo per tenere aggiornati i record
4205           DNS degli host connessi ad internet con indirizzi IP
4206           dinamici (pubblici) assegnati dal provider. Il client
4207           deve essere in grado di contattare autonomamente il
4208           server DNS per comunicare un cambiamento del suo ip.
4209           Vediamo innanzi tutto un primo script per nsupdate:</p>
4210           <pre class="literal-block">
4211 #!/bin/bash
4212 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4213 # prima di leggere l'IP ottenuto
4214 sleep 15
4215 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4216
4217 nsupdate  -k /root/dns/Khome.piffa.net.+157+04331.private &lt;&lt;-EOF
4218         server 192.168.0.254
4219         zone home.piffa.net.
4220         update delete home.piffa.net. A
4221         update delete home.piffa.net. MX
4222         update add home.piffa.net. 432000 A $IPADDR
4223         update add home.piffa.net. 432000 MX 10  home.piffa.net.
4224         show
4225         send
4226         EOF
4227 </pre>
4228
4229           <p>Questo script legge il valore del device di rete
4230           <tt class="docutils literal">ppp0</tt> creato dal
4231           <cite>pppoe</cite> di una connessione ADSL per ottenere
4232           l'indirizzo IP ottenuto dal provider (prima di farlo
4233           aspetta 15 secondi per dare il tempo al <tt class=
4234           "docutils literal">pppoe</tt> di negoziare la
4235           connessione).Vengono poi eliminati gli esistenti valori
4236           <tt class="docutils literal">A</tt> e <tt class=
4237           "docutils literal">MX</tt> per <tt class=
4238           "docutils literal">home.piffa.net</tt> (si noti il punto
4239           finale dopo <em>net</em>) e inseriti quelli attuali.</p>
4240
4241           <p>Resta da decidere quando richiamare questo script:
4242           l'evento che causa l'assegnazione del nuovo IP in questo
4243           caso e una nuova connessione <tt class=
4244           "docutils literal">pppoe</tt>, quindi sarebbe
4245           consigliabile inserire lo script nelle routine comprese
4246           in <tt class="docutils literal"><span class=
4247           "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4248           documentazione di ppp), nel caso questo non desse i
4249           risultati sperati (per problemi di connessione) come via
4250           estrema si consideri di mettere lo script nella routine
4251           del demone <tt class="docutils literal">cron</tt> in modo
4252           che venga eseguito periodicamente (ad esempio ogni
4253           giorno).</p>
4254         </div>
4255       </div>
4256
4257       <div class="section" id="link-suggeriti">
4258         <h2><a class="toc-backref" href=
4259         "#id83">7.5&nbsp;&nbsp;&nbsp;Link suggeriti:</a></h2>
4260
4261         <ul class="simple">
4262           <li>DNS for Rocket Scientists <a class=
4263           "reference external" href=
4264           "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4265
4266           <li>DNS HOWTO <a class="reference external" href=
4267           "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4268         </ul>
4269       </div>
4270     </div>
4271
4272     <div class="section" id="samba">
4273       <h1><a class="toc-backref" href=
4274       "#id84">8&nbsp;&nbsp;&nbsp;Samba</a></h1>
4275
4276       <p>Samba e' un progetto libero che fornisce servizi di
4277       condivisione di file e stampanti a client SMB/CIFS.</p>
4278
4279       <p>Samba e' liberamente disponibile, al contrario di altre
4280       implementazioni SMB/CIFS, e permette di ottenere
4281       interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4282
4283       <p>Samba e' un software che puo' girare su piattaforme che
4284       non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4285       System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4286       il protocollo TCP/IP utilizzando i servizi offerti sul server
4287       ospite. Quando correttamente configurato, permette di
4288       interagire con client o server Microsoft Windows come se
4289       fosse un file e print server Microsoft agendo da Primary
4290       Domain Controller (PDC) o come Backup Domain Controller, puo'
4291       inoltre prendere parte ad un dominio Active Directory.</p>
4292
4293       <div class="section" id="pacchetti">
4294         <h2><a class="toc-backref" href=
4295         "#id85">8.1&nbsp;&nbsp;&nbsp;Pacchetti</a></h2>
4296
4297         <p>Pacchetti da installare per utilizzare Samba in
4298         modalita' client <a class="footnote-reference" href="#id7"
4299         id="id6" name="id6">[2]</a></p>
4300         <pre class="literal-block">
4301 samba-client
4302 </pre>
4303
4304         <p>Pacchetti da installare per utilizzare Samba in
4305         modalita' server:</p>
4306         <pre class="literal-block">
4307 samba smbfs smbclient
4308 </pre>
4309
4310         <table class="docutils footnote" frame="void" id="id7"
4311         rules="none">
4312           <colgroup>
4313             <col class="label">
4314             <col>
4315           </colgroup>
4316
4317           <tbody valign="top">
4318             <tr>
4319               <td class="label"><a class="fn-backref" href=
4320               "#id6">[2]</a></td>
4321
4322               <td>Anche se nato per i sistemi Windows, Samba puo'
4323               essere usato anche per montare cartelle sotto
4324               GNU/Linux come alternativa a NFS. Per la condivisione
4325               di stampanti sarebbe invece opportuno intervenire
4326               direttamente su <tt class=
4327               "docutils literal">CUPS</tt>.</td>
4328             </tr>
4329           </tbody>
4330         </table>
4331
4332         <p>Durante la prima installazione viene chiesto il nome del
4333         gruppo di appartenenza, il default per Windows e'
4334         <tt class="docutils literal">WORKGROUP</tt>. In aula usiamo
4335         invece <tt class="docutils literal">208</tt> .</p>
4336
4337         <p>Per riconfigurare Samba si usi il comando:</p>
4338         <pre class="literal-block">
4339 dpkg-reconfigure samba-common
4340 </pre>
4341       </div>
4342
4343       <div class="section" id="passwords-e-autenticazione">
4344         <h2><a class="toc-backref" href=
4345         "#id86">8.2&nbsp;&nbsp;&nbsp;Passwords e
4346         autenticazione</a></h2>
4347
4348         <p>Per poter configurare Samba in modo che usi un sistema
4349         di negoziazione degli accessi alle cartelle condivise
4350         basato su accoppiate <em>nome utente / password</em>
4351         bisogna distinguere tra 3 livelli di password (e
4352         generalmente volete usare <em>sempre la stessa
4353         password</em> per ognuno di questi) e delle differenze tra
4354         le modalita' di <em>autenticazione</em> (e quindi anche di
4355         criptaggio delle passwords) usate da sistemi GNU/Linux e
4356         Windows:</p>
4357
4358         <dl class="docutils">
4359           <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4360
4361           <dd>E' la password dell'<em>utente di sistema</em> che
4362           viene usata sul sistema operativo su cui gira il software
4363           Samba. E' importante tenere conto anche delle
4364           <em>user-id</em> e <em>group-id</em> degli utenti che
4365           dovranno fisicamente scrivere sui file system. Se un
4366           utente non puo' scrivere in una certa posizione del file
4367           system (ad esempio nella cartella <tt class=
4368           "docutils literal">/mnt/condivisione</tt> che sara' stata
4369           necessariamente creata inizialmente dall'utente
4370           <tt class="docutils literal">root</tt>) per mancanza dei
4371           privilegi di scrittura allora non potra' farlo neanche
4372           quando Samba rendera' disponibile la risorsa all'utente.
4373           Se si montano file-system dedicati per le condivisioni
4374           controllare i permessi e proprieta' dei <em>punti di
4375           mount*</em>. Queste passwords sono salvate nel solito
4376           file /etc/shadow (richiamato da /etc/passwd).</dd>
4377
4378           <dt>2 Password per l'applicativo Samba</dt>
4379
4380           <dd>Samba deve essere compatibile con Windows e quindi
4381           utilizzare un sistema di criptazione delle password
4382           diverso da <tt class="docutils literal">/etc/shadow</tt>
4383           . Le password per Samba possono essere gestite ad esempio
4384           col comando <tt class="docutils literal">smbpasswd</tt> e
4385           vengono normalmente salvate all'interno di <tt class=
4386           "docutils literal">/var/lib/samba/passdb.tdb</tt> .</dd>
4387
4388           <dt>3 Password per Windows.</dt>
4389
4390           <dd>Gli utenti Windows effettuano il log-in alla partenza
4391           della sessione di Windows. Se si avra' l'accortezza di
4392           usare sempre la <em>stessa password</em> data
4393           precedentemente anche a Windows (o viceversa impostare la
4394           password per GNU/Linux / Samba uguale a quella di
4395           Windows) l'utente potra' accedere automaticamente alle
4396           condivisioni a lui disponibili.</dd>
4397         </dl>
4398       </div>
4399
4400       <div class="section" id="creazione-utenti">
4401         <h2><a class="toc-backref" href=
4402         "#id87">8.3&nbsp;&nbsp;&nbsp;Creazione Utenti</a></h2>
4403
4404         <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4405         attenzione a <em>non dargli una shell di sistema</em>. Gli
4406         utenti Windows che accedono al server solo per le
4407         condivisioni non hanno bisogno di poter eseguire comandi
4408         sul server!</p>
4409
4410         <p>Creazione di un utente denominato sambo:</p>
4411         <pre class="literal-block">
4412 adduser --shell /bin/false sambo
4413 </pre>
4414
4415         <p>Nel file <tt class="docutils literal">/etc/passwd</tt>
4416         comparira' qualcosa come:</p>
4417         <pre class="literal-block">
4418 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4419 </pre>
4420
4421         <p>Aggiunta dell'utente al database delle password per
4422         Samba e generazione della sua password:</p>
4423         <pre class="literal-block">
4424 smbpasswd -a sambo
4425 </pre>
4426
4427         <p>Se successivamente si vorra' modificare la password di
4428         un utente gia' esistente si usi:</p>
4429         <pre class="literal-block">
4430 smbpasswd  sambo
4431 </pre>
4432
4433         <p>La password sotto Windows andra' modificata sul sistema
4434         Windows.</p>
4435       </div>
4436
4437       <div class="section" id="creare-la-condivisione">
4438         <h2><a class="toc-backref" href=
4439         "#id88">8.4&nbsp;&nbsp;&nbsp;Creare la
4440         condivisione</a></h2>
4441
4442         <p>La condivisione altro non e' che una cartella sul server
4443         che viene resa disponibile ai client negoziando l'accesso
4444         in base a una autenticazione basata su <em>user-name /
4445         password</em>. E' per altro possibile permettere l'accesso
4446         a una risorsa a chiunque indiscriminatamente (a tutti i
4447         <tt class="docutils literal">guest</tt>) ma la cosa e'
4448         sconsigliabile dal punto di vista della sicurezza. Si
4449         decida se la cartella condivisa debba risiedere nella
4450         <em>home</em> di un utente (nel caso quest'ultimo ne sia
4451         l'unico fruitore) o in una cartella in /mnt/ (nel caso piu'
4452         utenti accedano a questa). Nel secondo caso si potranno
4453         gestire gli accessi sotto GNU/Linux tramite i gruppi.</p>
4454
4455         <p>Creazione della risorsa sambo_share nella home
4456         dell'utente sambo:</p>
4457         <pre class="literal-block">
4458 # mkdir /home/sambo/sambo_share
4459 # chown sambo:sambo /home/sambo/sambo_share/
4460 </pre>
4461
4462         <div class="section" id=
4463         "sicurezza-permessi-di-esecuzione-sul-server">
4464           <h3><a class="toc-backref" href=
4465           "#id89">8.4.1&nbsp;&nbsp;&nbsp;Sicurezza: permessi di
4466           esecuzione sul server</a></h3>
4467
4468           <p>A lato server si presti attenzione ai permessi di
4469           esecuzione del file-system che ospita la cartella da
4470           condividere. Se i file che saranno contenuti nella
4471           condivisione saranno da usarsi sotto Windows non c'e'
4472           motivo che questi siano eseguibili sotto GNU/Linux. Si
4473           potrebbe avere quindi, ipotizzando una condivisione in
4474           <tt class="docutils literal">/mnt/share</tt> che risieda
4475           su di un file system dedicato:</p>
4476
4477           <p><tt class="docutils literal">/etc/fstab</tt></p>
4478
4479           <blockquote>
4480             /dev/hda10 /mnt/share ext3 rw,
4481             <strong>nosuid,noexec</strong> 0 3
4482           </blockquote>
4483
4484           <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4485           possibilita' di eseguire programmi con credenziali
4486           diverse.</p>
4487         </div>
4488       </div>
4489
4490       <div class="section" id=
4491       "configurazione-dell-applicativo-samba-vero-e-proprio">
4492         <h2><a class="toc-backref" href=
4493         "#id90">8.5&nbsp;&nbsp;&nbsp;Configurazione
4494         dell'applicativo Samba vero e proprio.</a></h2>
4495
4496         <p>Avendo preparato gli utenti (ancora una volta: non si
4497         dia una shell completa a un utente che accede solo a Samba
4498         o alla posta elettronica) e la cartella sul file system si
4499         puo' procedere a configurare la condivisione su Samba.</p>
4500
4501         <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4502         vim si usi 235gg ):</p>
4503         <pre class="literal-block">
4504 [sambo_share]
4505         # Percorso della cartella condivisa
4506         path = /home/sambo/sambo_share
4507         # Se gli utenti possono scrivere / modificare file
4508         writable = yes
4509         # Negoziazione degli accessi su base utenti / passwords
4510         valid users = sambo
4511
4512         # #######################################
4513         # Altri parametri opzionali di interesse
4514         # Se posso vedere la condivisione da esplora risorse
4515         # anche se non ho i privilegi per accedervi.
4516         browseable = yes
4517         # Commento indicativo della risorsa
4518         comment = Condivisione per Sambo
4519 </pre>
4520
4521         <p>Dopo aver salvato il file si puo' fare un primo
4522         controllo tramite l'utility <tt class=
4523         "docutils literal">testparm</tt> , che controlla la
4524         sintassi del file di configurazione di Samba. Se questo non
4525         rileva problemi si puo' procedere a un <tt class=
4526         "docutils literal"># /etc/init.d/samba restart</tt> .</p>
4527
4528         <div class="section" id="creazione-di-un-gruppo">
4529           <h3><a class="toc-backref" href=
4530           "#id91">8.5.1&nbsp;&nbsp;&nbsp;Creazione di un
4531           gruppo</a></h3>
4532
4533           <p>Se si deve condividere una risorsa con un numero
4534           consistente di utenti e' consigliabile lavorare in
4535           termini termini di gruppi piuttosto che elencare la lista
4536           degli utenti in <tt class="docutils literal">valid
4537           users</tt>.</p>
4538
4539           <p>Dopo aver creato il gruppo del quale volete facciano
4540           parte i vostri utenti (<tt class=
4541           "docutils literal">addgroup nome_gruppo</tt>), inserite i
4542           vostri utenti nel gruppo (<tt class=
4543           "docutils literal">adduser nome_utente nome_gruppo</tt>)
4544           e modificate la direttiva <tt class=
4545           "docutils literal">valid users</tt> in <tt class=
4546           "docutils literal">smb.conf</tt> per riferirsi ad un
4547           gruppo piuttosto che a degli utenti. Per riferirsi a un
4548           gruppo si usi il carattere <tt class="docutils literal">@
4549           chicciola</tt> col <tt class=
4550           "docutils literal">nome_del_gruppo</tt>:</p>
4551           <pre class="literal-block">
4552 # Negoziazione degli accessi su base gruppo
4553 valid users = @nome_gruppo
4554 </pre>
4555         </div>
4556       </div>
4557
4558       <div class="section" id="testare-il-servizio">
4559         <h2><a class="toc-backref" href=
4560         "#id92">8.6&nbsp;&nbsp;&nbsp;Testare il Servizio</a></h2>
4561
4562         <p>Come testare il servizio</p>
4563
4564         <p>es:</p>
4565         <pre class="literal-block">
4566 smbclient -U sambo -L localhost
4567 </pre>
4568
4569         <p>Questo comando permette di esplorare la risorsa
4570         qualificandosi come utente, in questo modo potete testare
4571         il corretto funzionamento dell'autenticazione. Si provi
4572         inizialmente a sbagliare la password deliberatamente, poi a
4573         inserirla correttamente: dovrebbero essere visibili le
4574         risorse disponibili al solo utente sambo: la suo /home e la
4575         cartella samba_share:</p>
4576         <pre class="literal-block">
4577 Sharename       Type      Comment
4578 ---------       ----      -------
4579 sambo_share     Disk      Condivisione per Sambo
4580 print$          Disk      Printer Drivers
4581 IPC$            IPC       IPC Service (base server)
4582 sambo           Disk      Home Directories
4583 </pre>
4584
4585         <p>In particolare l'ultima voce relativa alla home
4586         directory dell'utente dovrebbe essere visibile solo agli
4587         utenti autenticati.</p>
4588
4589         <p>In alternativa e' possibile montare realmente la
4590         condivisone anche su GNU/Linux tramite un client per samba
4591         e testarne il corretto funzionamento:</p>
4592         <pre class="literal-block">
4593 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4594 </pre>
4595       </div>
4596     </div>
4597
4598     <div class="section" id="server-di-posta-postfix">
4599       <h1><a class="toc-backref" href=
4600       "#id93">9&nbsp;&nbsp;&nbsp;Server di posta: Postfix</a></h1>
4601
4602       <p>Il server di posta che prenderemo in considerazione e'
4603       Postfix, a seguire un estratto di un file di configurazione
4604       <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4605       nelle <tt class="docutils literal">/home</tt> degli utenti
4606       per la consegna della posta:</p>
4607
4608       <p><tt class=
4609       "docutils literal">/etc/postfix/main.cf</tt>:</p>
4610       <pre class="literal-block">
4611 # ...segue dalla riga ~30
4612 myhostname = 162.piffa.net
4613 alias_maps = hash:/etc/aliases
4614 alias_database = hash:/etc/aliases
4615 myorigin = 162.piffa.net
4616 mydestination = 162.piffa.net, localhost
4617 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4618 # dovrete usare un realy host per l'invio della posta
4619 relayhost = smtp.piffa.net
4620
4621 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4622 # Se dovete inviare la posta per i client della vostra LAN privata:
4623 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4624 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4625
4626
4627 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4628 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4629 # si disabiliti procmail
4630 #mailbox_command = procmail -a "$EXTENSION"
4631
4632 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4633 # all'interno della  home dell'utente:
4634 home_mailbox = Maildir/
4635 mailbox_size_limit = 0
4636 recipient_delimiter = +
4637 inet_interfaces = all
4638 </pre>
4639
4640       <dl class="docutils">
4641         <dt>E' disponibile un file di configurazione di esempio ben
4642         piu' articolato e commentato::</dt>
4643
4644         <dd>/usr/share/postfix/main.cf.dist .</dd>
4645       </dl>
4646
4647       <div class="section" id="test-del-server-smtp">
4648         <h2><a class="toc-backref" href=
4649         "#id94">9.1&nbsp;&nbsp;&nbsp;Test del server smtp</a></h2>
4650
4651         <p>Per testare il corretto funzionamento del server di
4652         posta si puo' procedere in vari modi.</p>
4653
4654         <ul class="simple">
4655           <li>Spedire una mail a una casella locale / remota e
4656           controllare i log (syslog)</li>
4657
4658           <li>Collegarsi via <em>telnet</em> al server di posta:
4659           <a class="reference external" href=
4660           "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4661
4662           <li>usare una utility come SWAKS</li>
4663         </ul>
4664
4665         <div class="section" id="swaks">
4666           <h3><a class="toc-backref" href=
4667           "#id95">9.1.1&nbsp;&nbsp;&nbsp;Swaks</a></h3>
4668
4669           <dl class="docutils">
4670             <dt>Per gli utenti meno esperti e' consigliabile
4671             utilizzare <em>SWAKS</em>: si installi l'omonimo
4672             pacchetto e si esegua un test con::</dt>
4673
4674             <dd>swaks --to <a class="reference external" href=
4675             "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4676             --from <a class="reference external" href=
4677             "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4678           </dl>
4679
4680           <p>Ecco un esempio di una sessione corretta:</p>
4681           <pre class="literal-block">
4682 swaks --to andrea@piffa.net from andrea@mydomain.com
4683 === Trying smtp.piffa.net:25...
4684 === Connected to smtp.piffa.net.
4685 &lt;-  220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4686  -&gt; EHLO alice.mydomain.com
4687 &lt;-  250-zoo.piffa.net
4688 &lt;-  250-PIPELINING
4689 &lt;-  250-SIZE 10240000
4690 &lt;-  250-VRFY
4691 &lt;-  250-ETRN
4692 &lt;-  250-STARTTLS
4693 &lt;-  250-ENHANCEDSTATUSCODES
4694 &lt;-  250-8BITMIME
4695 &lt;-  250 DSN
4696  -&gt; MAIL FROM:&lt;root@alice.mydomain.com&gt;
4697 &lt;-  250 2.1.0 Ok
4698  -&gt; RCPT TO:&lt;andrea@piffa.net&gt;
4699 &lt;-  250 2.1.5 Ok
4700  -&gt; DATA
4701 &lt;-  354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
4702  -&gt; Date: Thu, 28 May 2009 13:11:19 +0200
4703  -&gt; To: andrea@piffa.net
4704  -&gt; From: root@alice.mydomain.com
4705  -&gt; Subject: test Thu, 28 May 2009 13:11:19 +0200
4706  -&gt; X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4707  -&gt;
4708  -&gt; This is a test mailing
4709  -&gt;
4710  -&gt; .
4711 &lt;-  250 2.0.0 Ok: queued as 41FB261AFC
4712  -&gt; QUIT
4713 &lt;-  221 2.0.0 Bye
4714 === Connection closed with remote host.
4715 </pre>
4716         </div>
4717       </div>
4718
4719       <div class="section" id="imap-e-pop">
4720         <h2><a class="toc-backref" href=
4721         "#id96">9.2&nbsp;&nbsp;&nbsp;Imap e pop</a></h2>
4722
4723         <p>Postfix e' un server SMTP, di conseguenza se volete che
4724         i vostri utenti possano <em>scaricare</em> in locale la
4725         posta generalmente volete mettere a loro disposizione un
4726         server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4727
4728         <dl class="docutils">
4729           <dt>Pacchetti da installare</dt>
4730
4731           <dd>courier-imap courier-pop</dd>
4732         </dl>
4733
4734         <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4735         funziona con le Mailbox in <tt class=
4736         "docutils literal">/var/mail/</tt> .</p>
4737       </div>
4738
4739       <div class="section" id="client-a-riga-di-comando">
4740         <h2><a class="toc-backref" href=
4741         "#id97">9.3&nbsp;&nbsp;&nbsp;Client a riga di
4742         comando</a></h2>
4743
4744         <p>Per testare il corretto funzionamento del server di
4745         posta e' utile avere a disposizione delle utility per
4746         inviare e leggere la posta: ovviamente da riga di
4747         comando.</p>
4748
4749         <div class="section" id="mailx">
4750           <h3><a class="toc-backref" href=
4751           "#id98">9.3.1&nbsp;&nbsp;&nbsp;mailx</a></h3>
4752
4753           <dl class="docutils">
4754             <dt>Uno dei client piu' semplici, sopratutto per
4755             inviare un messaggioi. e' sufficiente usare una formula
4756             come::</dt>
4757
4758             <dd>mail <a class="reference external" href=
4759             "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4760           </dl>
4761
4762           <p>Se il comando <tt class="docutils literal">mail</tt>
4763           non fosse disponibile si installi il pacchetto <tt class=
4764           "docutils literal">mailx</tt>.</p>
4765
4766           <p>Al primo prompt si digitera' l'oggetto, il testo del
4767           messaggio (per terminare l'inserimento lasciare una riga
4768           vuota, digitare un <tt class="docutils literal">punto +
4769           Invio</tt> su una riga vuota), la Carbon Copy (se
4770           necessaria).</p>
4771
4772           <p>es:</p>
4773           <pre class="literal-block">
4774 mail andrea@localhost
4775 Subject: Oggetto della mail
4776 Testo del messagio,
4777 per terminare il messaggio
4778 lasciare una riga vuota
4779 e un punto (poi Invio).
4780
4781 .
4782 Cc:
4783 </pre>
4784
4785           <p>Per altrre opzioni si veda la pagina man.</p>
4786         </div>
4787
4788         <div class="section" id="mutt">
4789           <h3><a class="toc-backref" href=
4790           "#id99">9.3.2&nbsp;&nbsp;&nbsp;Mutt</a></h3>
4791
4792           <p>Mutt e' uno dei gestori di posta preferiti da chi
4793           preferisce utilizzare l'interfaccia testuale per la
4794           gestione della posta.</p>
4795
4796           <p>Mutt ha un file di configurazione <tt class=
4797           "docutils literal">.muttrc</tt> nella <em>home</em>
4798           dell'utente, alcuni settaggi possono essere utili:</p>
4799
4800           <dl class="docutils">
4801             <dt>set folder="~/Maildir"</dt>
4802
4803             <dd>Per utilizzare <tt class=
4804             "docutils literal">/home/nome_utente/Maildir come
4805             mailbox</tt>, invece del default <tt class=
4806             "docutils literal">/var/mail/nome_utente</tt>.</dd>
4807
4808             <dt>set editor="vim"</dt>
4809
4810             <dd>Utilizzare <tt class="docutils literal">vim</tt>
4811             come editor per comporre i messaggi.</dd>
4812           </dl>
4813
4814           <p>Spesso e' utile poter <em>levvere al volo</em> la
4815           Mailbox / Maildir di un utente sul server di posta, per
4816           controllare se i messaggi vengono recapitati
4817           correttamente:</p>
4818           <pre class="literal-block">
4819 mutt -f /var/mail/utente
4820 mutt -f /home/utente/Maildir
4821 </pre>
4822
4823           <p>In modo analogo si puo' consultare al volo la propia
4824           mailbox su un server remoto tramite IMAP/POP:</p>
4825           <pre class="literal-block">
4826 mutt -f imap://nome_utente@piffa.net
4827 </pre>
4828         </div>
4829
4830         <div class="section" id="web-client">
4831           <h3><a class="toc-backref" href=
4832           "#id100">9.3.3&nbsp;&nbsp;&nbsp;Web client</a></h3>
4833
4834           <p>Per mettere a disposizione degli utenti un client web
4835           per gestire la propria posta si installi il pacchetto:
4836           <tt class="docutils literal">squirrelmail</tt> . Ci sono
4837           tanti altri client web disponibili: questo e'
4838           particolarmente semplice. Naturalmente dovrete aver
4839           installato: <tt class="docutils literal">php5
4840           apache2</tt> .</p>
4841
4842           <p>L'interfaccia dovrebbe essere disponibile all'url:
4843           <tt class="docutils literal"><span class=
4844           "pre">http://localhost/squirrelmail</span></tt> . Se
4845           cosi' non fosse assicuratevi che Apache abbia incluso il
4846           file di configurazione di squirrelmail:</p>
4847           <pre class="literal-block">
4848 cd /etc/apache2/conf.d/
4849 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
4850 </pre>
4851         </div>
4852       </div>
4853
4854       <div class="section" id="graylisting">
4855         <h2><a class="toc-backref" href=
4856         "#id101">9.4&nbsp;&nbsp;&nbsp;Graylisting</a></h2>
4857
4858         <p>Il <em>graylisting</em> e' un sistema relativamente poco
4859         invasivo, con un limitato consumo di risorse per limitare
4860         lo <em>SPAM</em> in arrivo sul propio server di posta. Come
4861         suggerisce il nome e' una via di mezzo tra una <em>white
4862         list</em> (una lista di mittenti privilegiata, sempre
4863         benvenuti) e una <em>black list</em> (mittenti
4864         <em>bannati</em>, banditi dal poter inviare nuovi
4865         messaggi).</p>
4866
4867         <p>Il funzionamento e' relativamente semplice: ogni
4868         mittente sconosciuto viene immediatamente rifiutato con un
4869         errore <em>non grave</em> come un <em>server non
4870         disponibile, provare piu' tardi</em>. Questo inconveniente
4871         non dovrebbe mettere in difficolta' un server di posta /
4872         mittente legittimo, che dopo un periodo di attesa tentera'
4873         nuovamente di inviare il messaggio ottenendo finalmente il
4874         risultato atteso. Diversamente un <em>bot</em> per l'invio
4875         di SPAM o un applicazione improvvisata (tipicamente di
4876         derivazione virale) che stesse inviando il messaggio
4877         <em>probabilmente</em> non insisterebbe, rinunciano ad
4878         inviare il messaggio preferendo destinazioni meno
4879         problematiche.</p>
4880
4881         <div class="section" id="abilitazione-in-postfix">
4882           <h3><a class="toc-backref" href=
4883           "#id102">9.4.1&nbsp;&nbsp;&nbsp;Abilitazione in
4884           Postfix</a></h3>
4885
4886           <p>Installare il pacchetto: <tt class=
4887           "docutils literal">postgrey</tt> e aggiungere il file di
4888           configurazione di Postfix <tt class=
4889           "docutils literal">/etc/postfix/main.cf</tt>:</p>
4890           <pre class="literal-block">
4891 smtpd_recipient_restrictions =
4892         permit_mynetworks,
4893         reject_unauth_destination,
4894         check_policy_service inet:127.0.0.1:60000
4895 </pre>
4896         </div>
4897
4898         <div class="section" id="test">
4899           <h3><a class="toc-backref" href=
4900           "#id103">9.4.2&nbsp;&nbsp;&nbsp;Test</a></h3>
4901
4902           <p>Inviando un messaggio il client dovrebbe ricevere un
4903           iniziale messaggio di rifiuto del messaggio:</p>
4904           <pre class="literal-block">
4905 swaks --to andrea@piffa.net from andrea@mydonain.com
4906 === Trying smtp.piffa.net:25...
4907 === Connected to smtp.piffa.net
4908 ...
4909 &lt;-  250 2.1.0 Ok
4910  -&gt; RCPT TO:&lt;andrea@piffa.net&gt;
4911 &lt;** 450 4.2.0 &lt;andrea@piffa.net&gt;: Recipient address rejected:
4912 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
4913  -&gt; QUIT
4914 &lt;-  221 2.0.0 Bye
4915 === Connection closed with remote host.
4916 </pre>
4917
4918           <p>A lato server si dovrebbe rilevare su <tt class=
4919           "docutils literal">/var/log/syslog</tt> qualcosa di
4920           simile:</p>
4921           <pre class="literal-block">
4922 connect from alice.mydomain.com[65.98.21.97]
4923 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
4924    client_name=alice.mydomain.com,
4925    client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
4926 May 28 14:53:34 r24266 postfix/smtpd[22538]:
4927    NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
4928    450 4.2.0 &lt;andrea@piffa.net&gt;: Recipient address rejected: Greylisted,
4929    see http://postgrey.schweikert.ch/help/piffa.net.html;
4930    from=&lt;root@alice.mydomain.com&gt; to=&lt;andrea@piffa.net&gt;
4931    proto=ESMTP helo=&lt;alice.mydomain.com&gt;
4932 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
4933 </pre>
4934         </div>
4935
4936         <div class="section" id="statistiche">
4937           <h3><a class="toc-backref" href=
4938           "#id104">9.4.3&nbsp;&nbsp;&nbsp;Statistiche</a></h3>
4939
4940           <p>E' sempre utile poter tracciare qualche statistica
4941           sulle percentuali di messaggi ricevuti, da chi, messaggi
4942           rifiutati (e per quale motivo). Statistiche che attingono
4943           dai soliti log del server di posta <tt class=
4944           "docutils literal">/var/log/syslog</tt> di default oltre
4945           che i dedicati <tt class=
4946           "docutils literal">/var/log/mail</tt> .</p>
4947
4948           <p>Una utility semplice per analizzare l'attivita' del
4949           propio server smtp potrebbe essere <tt class=
4950           "docutils literal">pflogsumm</tt> , installato il
4951           pacchetto la si puo' invocare con:</p>
4952           <pre class="literal-block">
4953 pflogsumm.pl  /var/log/mail.log
4954 </pre>
4955
4956           <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
4957           "docutils literal">/var/log/mail.log.0</tt></p>
4958         </div>
4959       </div>
4960     </div>
4961
4962     <div class="section" id="firewall">
4963       <h1><a class="toc-backref" href=
4964       "#id105">10&nbsp;&nbsp;&nbsp;Firewall</a></h1>
4965
4966       <p>In Informatica, nell'ambito delle reti di computer, un
4967       firewall (termine inglese dal significato originario di
4968       parete refrattaria, muro tagliafuoco, muro ignifugo; in
4969       italiano anche parafuoco o parafiamma) e' un componente
4970       passivo di difesa perimetrale che puo anche svolgere funzioni
4971       di collegamento tra due o piu' tronconi di rete. Usualmente
4972       la rete viene divisa in due sotto reti: una, detta esterna,
4973       comprende l'intera Internet mentre l'altra interna, detta LAN
4974       (Local Area Network), comprende una sezione piu' o meno
4975       grande di un insieme di computer locali. In alcuni casi e'
4976       possibile che si crei l'esigenza di creare una terza sotto
4977       rete detta DMZ (o zona demilitarizzata) atta a contenere quei
4978       sistemi che devono essere isolati dalla rete interna ma
4979       devono comunque essere protetti dal firewall.</p>
4980
4981       <p>Una prima definizione chiusa di firewall e' la
4982       seguente:</p>
4983
4984       <p>Apparato di rete hardware o software che filtra tutti i
4985       pacchetti entranti ed uscenti, da e verso una rete o un
4986       computer, applicando regole che contribuiscono alla sicurezza
4987       della stessa.</p>
4988
4989       <p>In realta' un firewall puo' essere realizzato con un
4990       normale computer (con almeno due schede di rete e software
4991       apposito), puo' essere una funzione inclusa in un router o
4992       puo' essere un apparato specializzato. Esistono inoltre i
4993       cosiddetti "firewall personali", che sono programmi
4994       installati sui normali calcolatori, che filtrano solamente i
4995       pacchetti che entrano ed escono da quel calcolatore; in tal
4996       caso viene utilizzata una sola scheda di rete.</p>
4997
4998       <p>La funzionalita' principale in sostanza e' quella di
4999       creare un filtro sulle connessioni entranti ed uscenti, in
5000       questo modo il dispositivo innalza il livello di sicurezza
5001       della rete e permette sia agli utenti interni che a quelli
5002       esterni di operare nel massimo della sicurezza. Il firewall
5003       agisce sui pacchetti in transito da e per la zona interna
5004       potendo eseguire su di essi operazioni di: controllo modifica
5005       monitoraggio</p>
5006
5007       <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
5008       IP per leggere le informazioni presenti sul suo header, e in
5009       alcuni casi anche di effettuare verifiche sul contenuto del
5010       pacchetto.</p>
5011
5012       <div class="section" id="links">
5013         <h2><a class="toc-backref" href=
5014         "#id106">10.1&nbsp;&nbsp;&nbsp;Links</a></h2>
5015
5016         <ul class="simple">
5017           <li><a class="reference external" href=
5018           "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
5019
5020           <li><a class="reference external" href=
5021           "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
5022           http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></li>
5023         </ul>
5024       </div>
5025
5026       <div class="section" id="ipfilter">
5027         <h2><a class="toc-backref" href=
5028         "#id107">10.2&nbsp;&nbsp;&nbsp;Ipfilter</a></h2>
5029
5030         <p>Link: <a class="reference external" href=
5031         "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
5032         http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
5033
5034         <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
5035         po' del 3) e su cosa <em>non</em> lavora (livello 4).
5036         Netfilter lavora anche su parti del livello 3 (TCP, UDP,
5037         etc) e del livello 1 (MAC source address). Iptables
5038         comunque permette di fare il <em>connection-tracking</em>,
5039         mediante il quale possiamo implementare il Network Address
5040         Translation.</p>
5041
5042         <p>Netfilter non ricostruisce il flusso di dati tra
5043         pacchetti, non puo' quindi rilevare la presenza di virus o
5044         simili che si trasmettono su pacchetti separati:
5045         ricomporre, analizzare e tornare a scomporre i frammenti
5046         richiederebbe troppa RAM e risorse di sistema, con il
5047         conseguente rischio di saturare il firewall fino
5048         all'abbandono dei nuovi pacchetti in transito. Ci sono
5049         altri software piu' adatti a questi compiti, ad esempio un
5050         proxy HTTP come Squid che e' appunto una applicazione di
5051         quarto livello, progettata e strutturata per analizzare e
5052         modificare i flussi di dati (il <em>contenuto</em> dei
5053         pacchetti, non le sole <em>intestazioni</em>) facendo
5054         abbondate uso delle risorse RAM e di calcolo del sistema.
5055         Non a caso su macchine embedded dalle prestazioni molto
5056         ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5057         massimo le risorse di sistema per gestire il traffico di
5058         una rete 10/100, mentre il lavoro tipico svolto da
5059         netfilter e' quasi irrilevante.</p>
5060       </div>
5061
5062       <div class="section" id="progettazione-di-un-firewall">
5063         <h2><a class="toc-backref" href=
5064         "#id108">10.3&nbsp;&nbsp;&nbsp;Progettazione di un
5065         firewall</a></h2>
5066
5067         <p>Per implementare un firewall bisogna decidere un aio di
5068         cose: la collocazione e l'approccio (inclusivo o esclusivo)
5069         al filtraggio, il tipo di hardware.</p>
5070
5071         <div class="section" id="collocazione">
5072           <h3><a class="toc-backref" href=
5073           "#id109">10.3.1&nbsp;&nbsp;&nbsp;Collocazione</a></h3>
5074
5075           <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5076           della rete, decidere se diversi reparti di una azienda si
5077           possano vedere tra loro e in che misura.</p>
5078
5079           <p>Collocazione:</p>
5080
5081           <blockquote>
5082             <ol class="arabic simple">
5083               <li>sul router</li>
5084
5085               <li>tra router e servers / LAN</li>
5086
5087               <li>Unico server / router / firewall e connessi
5088               rischi. considerare l'acquisto di un router hardware
5089               dedicato.</li>
5090             </ol>
5091           </blockquote>
5092
5093           <dl class="docutils">
5094             <dt>Layeed security:</dt>
5095
5096             <dd>Implementare piu' device / software sui diversi
5097             livelli: <a class="reference external" href=
5098             "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5099             http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5100           </dl>
5101         </div>
5102
5103         <div class="section" id="policy-di-default">
5104           <h3><a class="toc-backref" href=
5105           "#id110">10.3.2&nbsp;&nbsp;&nbsp;Policy di
5106           default</a></h3>
5107
5108           <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5109           gestione.</p>
5110         </div>
5111
5112         <div class="section" id="hardware">
5113           <h3><a class="toc-backref" href=
5114           "#id111">10.3.3&nbsp;&nbsp;&nbsp;Hardware</a></h3>
5115
5116           <p>Sostanzialmente potremmo distinguere due tipologie di
5117           hardware:</p>
5118
5119           <dl class="docutils">
5120             <dt>Network appliance dedicata::</dt>
5121
5122             <dd>Un dispositivo hardware dedicato alla funzione di
5123             Firewall, ad es un Cisco / Fortigate. Si noti che molti
5124             firewall economici altro non sono che Linux box molto
5125             striminzite.</dd>
5126
5127             <dt>Server / Personal computer:</dt>
5128
5129             <dd>Un server sul quale viene fatto girare Netfilter ad
5130             uso del server stesso e della rete connessa.</dd>
5131           </dl>
5132
5133           <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5134           flessibilita', strumenti di gestione, sicurezza,
5135           OpenBSD.</p>
5136         </div>
5137       </div>
5138
5139       <div class="section" id=
5140       "percorso-dei-pacchetti-tra-tabelle-e-catene">
5141         <h2><a class="toc-backref" href=
5142         "#id112">10.4&nbsp;&nbsp;&nbsp;Percorso dei pacchetti tra
5143         tabelle e catene</a></h2>
5144
5145         <p>E importante conoscere il percorso che i paccheti
5146         seguono passando tra le varie catene, l'ordine infatti puo'
5147         cambiare il riusultato ottenuto (che il pacchetto raggiunga
5148         o meno l'host, oppure modificare il pachetto stesso).</p>
5149
5150         <p>link: <a class="reference external" href=
5151         "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
5152         http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></p>
5153       </div>
5154
5155       <div class="section" id="concetti-di-base">
5156         <h2><a class="toc-backref" href=
5157         "#id113">10.5&nbsp;&nbsp;&nbsp;Concetti di base</a></h2>
5158
5159         <div class="section" id="tabelle-catene-regole">
5160           <h3><a class="toc-backref" href=
5161           "#id114">10.5.1&nbsp;&nbsp;&nbsp;Tabelle, catene,
5162           regole</a></h3>
5163
5164           <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5165
5166           <ul class="simple">
5167             <li>filter - Regola il firewalling: quali pacchetti
5168             accettare, quali bloccare</li>
5169
5170             <li>nat - Regola le attivita' di natting</li>
5171
5172             <li>mangle - Interviene sulla alterazione dei
5173             pacchetti.</li>
5174           </ul>
5175
5176           <p>Ogni tabella ha delle catene (chains) predefinite
5177           (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5178           aggiunte catene custom. Ogni catena e' composta da un
5179           elenco di regole (rules) che identificano pacchetti di
5180           rete secondo criteri diversi (es: -p tcp --dport 80 -d
5181           10.0.0.45) Ogni regola termina con una indicazione
5182           (target) su cosa fare dei pacchetti identificati dalla
5183           regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5184         </div>
5185
5186         <div class="section" id="match">
5187           <h3><a class="toc-backref" href=
5188           "#id115">10.5.2&nbsp;&nbsp;&nbsp;Match</a></h3>
5189
5190           <p>I Match di una regola (rule) servono a testare un
5191           pacchetto per valutare se corrisponda a certe
5192           caratteristiche. I match di possono servire a controllare
5193           se un pacchetto e' destinato a una porta particolare o
5194           utilizza un protocollo particolare.</p>
5195
5196           <p>Alcuni esempi:</p>
5197
5198           <dl class="docutils">
5199             <dt>-p [!] proto</dt>
5200
5201             <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5202             udp, gre, ah...)</dd>
5203
5204             <dt>-s [!] address[/mask]</dt>
5205
5206             <dd>Indirizzo IP sorgente (o network con maschera di
5207             sotto rete)</dd>
5208
5209             <dt>-d [!] address[/mask]</dt>
5210
5211             <dd>Indirizzo IP destinazione (o network)</dd>
5212
5213             <dt>-i [!] interface[+]</dt>
5214
5215             <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5216
5217             <dt>-o [!] interface[+]</dt>
5218
5219             <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5220           </dl>
5221
5222           <table class="docutils option-list" frame="void" rules=
5223           "none">
5224             <col class="option">
5225             <col class="description">
5226
5227             <tbody valign="top">
5228               <tr>
5229                 <td class="option-group"><kbd><span class=
5230                 "option">-f</span></kbd></td>
5231
5232                 <td>Frammento di pacchetto</td>
5233               </tr>
5234             </tbody>
5235           </table>
5236         </div>
5237
5238         <div class="section" id="targets">
5239           <h3><a class="toc-backref" href=
5240           "#id116">10.5.3&nbsp;&nbsp;&nbsp;Targets</a></h3>
5241
5242           <p>Se un pacchetto soddisfa le condizioni del Match
5243           <em>salta</em> (jump) su uno dei target possibili, in
5244           caso contrario continua il suo percorso tra regole catene
5245           e tabelle.</p>
5246
5247           <p>Target principali:</p>
5248
5249           <dl class="docutils">
5250             <dt><em>-j ACCEPT</em></dt>
5251
5252             <dd>Il pacchetto matchato viene accettato e procede
5253             verso la sua destinazione. Si usa per definire il
5254             traffico permesso.</dd>
5255
5256             <dt><em>-j DROP</em></dt>
5257
5258             <dd>Il pacchetto viene rifiutato e scartato, senza
5259             alcuna notifica al mittente. Si usa, in alternativa a
5260             REJECT, per bloccare traffico.</dd>
5261
5262             <dt><em>-j REJECT</em></dt>
5263
5264             <dd>Il pacchetto viene rifiutato. Al mittente viene
5265             mandato un pacchetto (configurabile) di notifica tipo
5266             ICMP port-unreachable (--reject-with
5267             icmp-port-unreachable)</dd>
5268           </dl>
5269
5270           <table class="docutils option-list" frame="void" rules=
5271           "none">
5272             <col class="option">
5273             <col class="description">
5274
5275             <tbody valign="top">
5276               <tr>
5277                 <td class="option-group"><kbd><span class=
5278                 "option">-t <var>LOG</var></span></kbd></td>
5279
5280                 <td>Il pacchetto viene loggato via syslog e procede
5281                 l'attraversamento della catena. Opzioni:
5282                 (--log-level, --log-prefix, --log-tcp-sequence,
5283                 --log-tcp-options, --log-ip-options)</td>
5284               </tr>
5285
5286               <tr>
5287                 <td class="option-group"><kbd><span class=
5288                 "option">-j <var>DNAT</var></span></kbd></td>
5289
5290                 <td>Viene modificato l'IP di destinazione del
5291                 pacchetto. Target disponibile solo in nat /
5292                 PREROUTING e nat / OUTPUT. L'opzione
5293                 --to-destination IP:porta definisce il nuovo IP di
5294                 destinazione. Si usa tipicamente su network
5295                 firewall che nattano server di una DMZ</td>
5296               </tr>
5297
5298               <tr>
5299                 <td class="option-group"><kbd><span class=
5300                 "option">-j <var>SNAT</var></span></kbd></td>
5301
5302                 <td>Viene modificato l'IP sorgente. Solo in nat /
5303                 POSTROUTING. Prevede l'opzione --to-source
5304                 IP:porta. Si usa per permettere l'accesso a
5305                 Internet da una rete locale con IP privati.</td>
5306               </tr>
5307
5308               <tr>
5309                 <td class="option-group"><kbd><span class=
5310                 "option">-j <var>MASQUERADE</var></span></kbd></td>
5311
5312                 <td>Simile a SNAT, si applica quando i pacchetti
5313                 escono da interfacce con IP dinamico (dialup, adsl,
5314                 dhcp...). Si usa solo in nat / POSTROUTING e
5315                 prevede l'opzione --to-ports porte.</td>
5316               </tr>
5317
5318               <tr>
5319                 <td class="option-group"><kbd><span class=
5320                 "option">-j <var>REDIRECT</var></span></kbd></td>
5321
5322                 <td>Redirige il pacchetto ad una porta locale.
5323                 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5324                 previsto per fare un transparent proxy (con proxy
5325                 server in esecuzione sulla macchina con
5326                 iptables)</td>
5327               </tr>
5328
5329               <tr>
5330                 <td class="option-group"><kbd><span class=
5331                 "option">-j <var>RETURN</var></span></kbd></td>
5332
5333                 <td>Interrompe l'attraversamento della catena. Se
5334                 questa e' una secondaria, il pacchetto torna ad
5335                 attraversare la catena madre da punto in cui aveva
5336                 fatto il salto nella secondaria. Se il RETURN e' in
5337                 una delle catene di default, il pacchetto
5338                 interrompe l'attraversamento e segue la policy di
5339                 default.</td>
5340               </tr>
5341
5342               <tr>
5343                 <td class="option-group"><kbd><span class=
5344                 "option">-j <var>TOS</var></span></kbd></td>
5345
5346                 <td>Usabile solo nella tabella mangle, permette di
5347                 cambiare il TOS (Type Of Service) di un pacchetto
5348                 con l'opzione --set-tos. Per un elenco dei
5349                 parametri disponibili: iptables -j TOS -h</td>
5350               </tr>
5351
5352               <tr>
5353                 <td class="option-group"><kbd><span class=
5354                 "option">-j <var>MIRROR</var></span></kbd></td>
5355
5356                 <td>Curioso e sperimentale, questo target invia un
5357                 pacchetto speculare al mittente. In pratica e' come
5358                 se facesse da specchio per tutti i pacchetti
5359                 ricevuti. Da usare con cautela, per evitare
5360                 attacchi DOS indiretti.</td>
5361               </tr>
5362             </tbody>
5363           </table>
5364         </div>
5365       </div>
5366
5367       <div class="section" id="tabella-filter">
5368         <h2><a class="toc-backref" href=
5369         "#id117">10.6&nbsp;&nbsp;&nbsp;Tabella Filter</a></h2>
5370
5371         <p>E' quella implicita e predefinita (-t filter) Riguarda
5372         le attivita' di filtraggio del traffico. Ha 3 catene di
5373         default: INPUT - Riguarda tutti i pacchetti destinati al
5374         sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5375         i pacchetti che sono originati dal sistema e destinati ad
5376         uscire. FORWARD - Riguarda i pacchetti che attraversano il
5377         sistema, con IP sorgente e destinazione esterni.</p>
5378
5379         <p>Esempio per permettere accesso alla porta 80 locale:
5380         iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5381         Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5382         ACCEPT</p>
5383
5384         <p>Esempio per permettere ad un pacchetto con IP sorgente
5385         10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5386         il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5387         -j ACCEPT</p>
5388       </div>
5389
5390       <div class="section" id=
5391       "flush-automatico-per-macchine-remote">
5392         <h2><a class="toc-backref" href=
5393         "#id118">10.7&nbsp;&nbsp;&nbsp;Flush automatico per
5394         macchine remote</a></h2>
5395
5396         <p>Se state provando una configurazione del firewall per
5397         una macchina remota e' buona norma per evitare brutte
5398         figure attivare uno script che faccia il <em>flush</em>
5399         delle regole dopo qualche minuto. Potreste infatti
5400         inavvertitamente impostare una regola che vi impedisca di
5401         raggiungere la macchina remota, cosi' da non poter neanche
5402         eliminare quella regola e ripristinare la situazione
5403         precedente.</p>
5404
5405         <p><em>Veramente</em>, prima di lavorare sul firewall di
5406         una macchina remota impostate almeno un <tt class=
5407         "docutils literal">at now +5 min</tt> o con un'oretta di
5408         margine per fare il <em>flush</em> delle regole (su tutte
5409         le tabelle):</p>
5410         <pre class="literal-block">
5411     at now +5 min
5412 at&gt; /sbin/iptables -F
5413 at&gt; [CTR+d]
5414 </pre>
5415       </div>
5416
5417       <div class="section" id="gestione-regole-rules">
5418         <h2><a class="toc-backref" href=
5419         "#id119">10.8&nbsp;&nbsp;&nbsp;Gestione regole
5420         (rules)</a></h2>
5421
5422         <p>Il comando iptables viene usato per ogni attivita' di
5423         gestione e configurazione.</p>
5424
5425         <p>Inserimento regole:</p>
5426
5427         <dl class="docutils">
5428           <dt>iptables -A CATENA ...</dt>
5429
5430           <dd>Aggiunge una regola alla fine della catena
5431           indicata</dd>
5432
5433           <dt>iptables -I CATENA [#] ...</dt>
5434
5435           <dd>Inserisce alla riga # (default 1) una regola nella
5436           catena indicata</dd>
5437
5438           <dt>iptables -N CATENA</dt>
5439
5440           <dd>Crea una nuova catena custom</dd>
5441
5442           <dt>iptables -P CATENA TARGET</dt>
5443
5444           <dd>Imposta il target di default per la catena
5445           indicata</dd>
5446         </dl>
5447
5448         <p>Rimozione regole e azzeramenti:</p>
5449
5450         <dl class="docutils">
5451           <dt>iptables -F [catena]</dt>
5452
5453           <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5454
5455           <dt>iptables -X [catena]</dt>
5456
5457           <dd>Ripulisce tutte le catene custom (o quella
5458           indicata)</dd>
5459
5460           <dt>iptables -Z [catena]</dt>
5461
5462           <dd>Azzera i contatori sulle catene</dd>
5463
5464           <dt>iptables -D catena #</dt>
5465
5466           <dd>Cancella la regola numero # dalla catena
5467           indicata</dd>
5468         </dl>
5469
5470         <p>Interrogazione:</p>
5471
5472         <dl class="docutils">
5473           <dt>iptables -L</dt>
5474
5475           <dd>Elenca le regole esistenti</dd>
5476
5477           <dt>iptables -L -n -v</dt>
5478
5479           <dd>Elenca, senza risolvere gli host, in modo verboso le
5480           regole esistenti</dd>
5481         </dl>
5482       </div>
5483
5484       <div class="section" id="salvataggio-regole">
5485         <h2><a class="toc-backref" href=
5486         "#id120">10.9&nbsp;&nbsp;&nbsp;Salvataggio regole</a></h2>
5487
5488         <p>Il comando <tt class="docutils literal">iptables</tt>
5489         serve per interagire con il framework <tt class=
5490         "docutils literal">Netfilter</tt> che gestisce il firewall
5491         di Linux al livello del kernel. Questo comporta, in modo
5492         analogo a quando avviene col comando <tt class=
5493         "docutils literal">ifconfig</tt>, che i cambiamenti
5494         impostati siano in <em>tempo reale, RAM</em>, non
5495         persistenti nel sistema: al boot successivo del sistema
5496         tutto tornera' alle impostazioni di base (in questo caso
5497         <em>nulle</em>, con policy di default settate su <tt class=
5498         "docutils literal">ACCEPT</tt> per tutto).</p>
5499
5500         <p>Le varie invocazioni di iptables potrebbero essere
5501         richiamate da degli scripts dedicati, ma fortunatamente e'
5502         stata predisposta una apposita utility per gestire questi
5503         scripts in modo da avere a disposizione un <em>formato
5504         standard</em> per il salvataggio e il ripristino delle
5505         regole del firewall.</p>
5506
5507         <p>Altro problema: decidere quando attivare / disattivare
5508         queste regole. Utilizzare i <em>runlevels</em> non e' una
5509         soluzione adeguata: le regole del firewall sono legate
5510         all'attivita' delle schede di rete (e un host con diverse
5511         schede di rete puo' attivarle a secondo delle esigenze di
5512         routing, partenza di servizi es file_sharing per un
5513         back-up...): il sistema operativo Debian permette di legare
5514         l'esecuzione di comandi alla attivazione di una device di
5515         rete (<tt class="docutils literal">up</tt>), dopo la sua
5516         attivazione (<tt class="docutils literal"><span class=
5517         "pre">post-up</span></tt>, utile per devices che richiedono
5518         un certo tempo per inizializzarsi: come un tunnel o una
5519         connessione punto a punto), prima della sua attivazione
5520         (<tt class="docutils literal"><span class=
5521         "pre">pre-up</span></tt>). Allo stesso modo sono
5522         disponibili eventi analoghi per accompagnare la
5523         disattivazione dei device di rete: si veda la pagina man di
5524         <tt class="docutils literal">interfaces</tt>.</p>
5525
5526         <p>Nel nostro caso avremo per una possibile scheda
5527         <tt class="docutils literal">eth0</tt>:</p>
5528
5529         <p><tt class=
5530         "docutils literal">/etc/network/interfaces</tt></p>
5531         <pre class="literal-block">
5532 iface eth1 inet static
5533         up /sbin/iptables-restore /root/firewall/basic_fw
5534         # Seguono i soliti parametri della scheda di rete
5535         address 10.10.208.21
5536 </pre>
5537
5538         <div class="section" id="iptables-save">
5539           <h3><a class="toc-backref" href=
5540           "#id121">10.9.1&nbsp;&nbsp;&nbsp;Iptables-save</a></h3>
5541
5542           <p>Per salvare le regole di iptables attualmente presenti
5543           nel kernel si usi il comando:</p>
5544           <pre class="literal-block">
5545 # iptables-save &gt;&gt; /root/firewall/basic_fw
5546 </pre>
5547
5548           <p>Il contenuto del file dovrebbe essere
5549           <em>comprensibile</em>: sostanzialmente sono regole di
5550           iptables, senza il comando iptables ripetuto, suddivisi
5551           per le varie tabelle. Potete comunque correggere
5552           eventuali parametri con un edito di testo.</p>
5553
5554           <p>Se non avete un'idea migliore potreste voler tenere
5555           gli script dei firewall in una cartella <tt class=
5556           "docutils literal">~/firewall</tt> nella home directory
5557           dell'utente <tt class="docutils literal">root</tt>.</p>
5558         </div>
5559
5560         <div class="section" id="iptables-restore">
5561           <h3><a class="toc-backref" href=
5562           "#id122">10.9.2&nbsp;&nbsp;&nbsp;Iptables-restore</a></h3>
5563
5564           <p>Per ripristinare un set di regole precedentemente
5565           salvate con <tt class="docutils literal"><span class=
5566           "pre">iptables-save</span></tt> si utilizzi <tt class=
5567           "docutils literal"><span class=
5568           "pre">iptables-restore</span></tt>. Se questo deve essere
5569           fatto in modalita' <em>non interattiva</em>, ad esempio
5570           deve essere eseguito dal demone che si occupa di
5571           inizializzare le schede di rete, oppure un <em>cron</em>
5572           o altro, e' buona norma richiamare i percorsi completi
5573           sia dei comandi che dei file:</p>
5574           <pre class="literal-block">
5575 /sbin/iptables-restore /root/firewall/basic_fw
5576 </pre>
5577         </div>
5578       </div>
5579
5580       <div class="section" id="esempi">
5581         <h2><a class="toc-backref" href=
5582         "#id123">10.10&nbsp;&nbsp;&nbsp;Esempi</a></h2>
5583
5584         <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5585         e' un computer con un paio di schede di rete fisiche una
5586         delle quali collegata alla rete internet l'altra a una rete
5587         privata per la LAN interna.</p>
5588
5589         <blockquote>
5590           <ol class="arabic simple">
5591             <li><tt class="docutils literal">eth0</tt> scheda di
5592             rete principale sulla rete privata interna
5593             192.168.0.0/24</li>
5594
5595             <li><tt class="docutils literal">eth1</tt> scheda di
5596             rete secondaria per la connessione ad internet</li>
5597
5598             <li><tt class="docutils literal">ppp0</tt>
5599             punto-a-punto per una connessione ad internet</li>
5600           </ol>
5601         </blockquote>
5602
5603         <div class="section" id="bloccare-i-ping-dall-esterno">
5604           <h3><a class="toc-backref" href=
5605           "#id124">10.10.1&nbsp;&nbsp;&nbsp;Bloccare i ping
5606           dall'esterno</a></h3>
5607
5608           <p>Spesso gli script che attaccano
5609           <em>automaticamente</em> le varie reti provano a fare un
5610           ping per verificare quali IP sono on-line: bloccare il
5611           traffico <tt class="docutils literal">ICMP</tt> in
5612           ingresso puo' aiutare ad evitare parte di questi
5613           attacchi:</p>
5614           <pre class="literal-block">
5615 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5616 </pre>
5617         </div>
5618
5619         <div class="section" id="masquerading-snat">
5620           <h3><a class="toc-backref" href=
5621           "#id125">10.10.2&nbsp;&nbsp;&nbsp;Masquerading
5622           (sNAT)</a></h3>
5623
5624           <dl class="docutils">
5625             <dt>Per attivare la network address translation (in
5626             questo caso un SNAT) per la rete locale privata
5627             sull'indirizzo ip del <em>modem</em>::</dt>
5628
5629             <dd>iptables -t nat -A POSTROUTING -s
5630             192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5631           </dl>
5632
5633           <p>Il <em>Masquerading</em> a differenza dello
5634           <em>SNAT</em> puro (<tt class=
5635           "docutils literal"><span class="pre">-j</span> SNAT
5636           <span class="pre">--to-source</span> proprio_ip_pubblico
5637           ) legge l'indirizzo ip del device ``ppp0</tt>. In questo
5638           modo se l'IP cambia automaticamente si aggiorna anche il
5639           source natting. Se avete un indirizzo IP statico
5640           assegnato al vostro gateway potete invece usare lo SNAT
5641           semplice.</p>
5642
5643           <dl class="docutils">
5644             <dt>Altri esempi::</dt>
5645
5646             <dd>
5647               <p class="first">## Change source addresses to
5648               1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5649               SNAT --to 1.2.3.4</p>
5650
5651               <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5652               1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5653               SNAT --to 1.2.3.4-1.2.3.6</p>
5654
5655               <p class="last">## Change source addresses to
5656               1.2.3.4, ports 1-1023 # iptables -t nat -A
5657               POSTROUTING -p tcp -o eth0 -j SNAT --to
5658               1.2.3.4:1-1023</p>
5659             </dd>
5660           </dl>
5661         </div>
5662
5663         <div class="section" id="brute-force">
5664           <h3><a class="toc-backref" href=
5665           "#id126">10.10.3&nbsp;&nbsp;&nbsp;Brute force</a></h3>
5666
5667           <p>Per limitare attacchi di tipo brute force su SSH:</p>
5668           <pre class="literal-block">
5669 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 3000 --hitcount 4 --name DEFAULT --rsource -j DROP
5670
5671 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5672 </pre>
5673         </div>
5674       </div>
5675
5676       <div class="section" id="proc-filesystem">
5677         <h2><a class="toc-backref" href=
5678         "#id127">10.11&nbsp;&nbsp;&nbsp;Proc filesystem</a></h2>
5679
5680         <p>Tramite il filesystem virtuale <strong>proc</strong>
5681         possiamo monitorare talvolta anche modificarei, a seconda
5682         dei casi, alcuni parametri utili per il networking. La
5683         parte di proc che ci interessa si riconduce al percorso:
5684         <tt class="docutils literal">/proc/sys/net/ipv4</tt> :
5685         vediamo alcuni dei parametri fondamentali.</p>
5686
5687         <div class="section" id="ip-forward">
5688           <h3><a class="toc-backref" href=
5689           "#id128">10.11.1&nbsp;&nbsp;&nbsp;ip_forward</a></h3>
5690
5691           <p>Questa variabile determine se l'instradamento dei
5692           pacchetti e' attvo, in caso positivo il kernel
5693           instradera' i pacchetti (routing). Con ip_forward settato
5694           a <tt class="docutils literal">0</tt> la nostra macchina
5695           continuera' a vedere le varie reti su cui eventualmente
5696           si trova (gateway) ma non instradera' i pacchetti da
5697           parte di altri host.</p>
5698
5699           <p>Questo parametro determina tutti gli instradamenti che
5700           il nostro host puo' fare, quindi e' determinante anche
5701           per NAT, firewall, masquerading.</p>
5702
5703           <p>E' possibile settarlo per le singole interfacce, ad
5704           esempio per eth0: <tt class=
5705           "docutils literal">/proc/sys/net/ipv4/conf/eth0/forwarding</tt>
5706           .</p>
5707
5708           <p>Per approfondimenti su cosa si intenda per
5709           instradamento: rfc1812.txt sezione 2.3:</p>
5710           <pre class="literal-block">
5711 In the Internet model, constituent networks are connected together by
5712    IP datagram forwarders which are called routers or IP routers.  In
5713    this document, every use of the term router is equivalent to IP
5714    router.  Many older Internet documents refer to routers as gateways.
5715
5716  A router connects to two or more logical interfaces, represented by
5717    IP subnets or unnumbered point to point lines (discussed in section
5718    [2.2.7]).  Thus, it has at least one physical interface.  Forwarding
5719    an IP datagram generally requires the router to choose the address
5720    and relevant interface of the next-hop router or (for the final hop)
5721    the destination host.  This choice, called relaying or forwarding
5722    depends upon a route database within the router.  The route database
5723    is also called a routing table or forwarding table.  The term
5724    "router" derives from the process of building this route database;
5725    routing protocols and configuration interact in a process called
5726    routing.
5727
5728 Routers provide datagram transport only, and they seek to minimize
5729    the state information necessary to sustain this service in the
5730    interest of routing flexibility and robustness.
5731 </pre>
5732         </div>
5733
5734         <div class="section" id="ip-default-ttl">
5735           <h3><a class="toc-backref" href=
5736           "#id129">10.11.2&nbsp;&nbsp;&nbsp;ip_default_ttl</a></h3>
5737
5738           <p><em>Time to leave</em> di default usato dal nostro
5739           host: in genere <tt class="docutils literal">64</tt>.</p>
5740         </div>
5741
5742         <div class="section" id="ip-local-port-range">
5743           <h3><a class="toc-backref" href=
5744           "#id130">10.11.3&nbsp;&nbsp;&nbsp;ip_local_port_range</a></h3>
5745
5746           <p>Il range di porte usato dal nostro host quando si
5747           connette come client ad altri host. Puo' essere utile
5748           modificarlo per poi intercettare piu' facilmente i
5749           pacchetti provenienti da qusto host, oppupure quel
5750           qualunqe limitazione vogliamo imporre sul range da
5751           usarsi. Si ricorda che solo root puo' aprire porte sotto
5752           la <tt class="docutils literal">1024</tt>.</p>
5753         </div>
5754       </div>
5755     </div>
5756
5757     <div class="section" id="ftp-server">
5758       <h1><a class="toc-backref" href=
5759       "#id131">11&nbsp;&nbsp;&nbsp;FTP Server</a></h1>
5760
5761       <p>Il File Transfer Protocol (FTP) (protocollo di
5762       trasferimento file), Ã¨ un Protocollo per la trasmissione di
5763       dati tra host basato su TCP, in genere usato dagli autori di
5764       pagine web per <em>pubblicare</em> queste nei propio spazi
5765       web. Storicamente veniva anche usato, mediate l'utilizzo di
5766       utenze anonime, come punto di scambio per materiali di vari
5767       utenti tra loro sconosciuti (una directory dei materiali
5768       scaricabili e una dedicata agli <em>uploads</em> degli
5769       utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
5770       mantiene la cosuetudine di renedere disponibile i materiali
5771       dei <em>mirrors</em> anche tramite FTP, probabilmente per
5772       garantire l'accesso ai client piu' datati che non possono
5773       utilizzare tecnologie piu' recenti.</p>
5774
5775       <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
5776       per quanto riguarda il traffico ad esso associato che per il
5777       passaggio delle passwords degli utenti, facilmente sniffabili
5778       da chiunque abbia accesso alla rete. Naturalmente vsftp per
5779       quanto votato alla sicurezza non modifica queste
5780       caratteristiche del protocollo FTP (ma consente di usare
5781       OpenSSL per la autenticazione degli utenti).</p>
5782
5783       <p>Se propio si deve mettere a disposizione un server FTP ai
5784       propi utenti si considerino le seguenti alternative:</p>
5785
5786       <ul class="simple">
5787         <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
5788
5789         <li>Spingere gli utenti ad usare SSL per autenticarsi al
5790         server FTP</li>
5791
5792         <li>Nel caso di webdesigners si consideri la possibilita'
5793         di offrire alternative come GIT, Subversion, Rsync o
5794         Webdav</li>
5795       </ul>
5796
5797       <p>Nel caso non si possa evitare il server FTP:</p>
5798
5799       <ul class="simple">
5800         <li>Non dare agli utenti FTP una shell di sistema (
5801         Concedere come shell <tt class="docutils literal">ftp</tt>
5802         al posto di <tt class="docutils literal">bash</tt> in
5803         <tt class="docutils literal">/etc/passwd</tt>)</li>
5804
5805         <li>Rendere il filesytem su cui scrive il demone FTP
5806         <tt class="docutils literal">noexec</tt> e <tt class=
5807         "docutils literal">nosuid</tt> (vedi dopo)</li>
5808
5809         <li>Utilizzare un demone FTP come Vsftp: un server FTP con
5810         una forte inclinazione alla sicurezza: <em>Very Secure FTP
5811         Daemon</em>.</li>
5812       </ul>
5813
5814       <p>Per maggiori informazioni sulle scelte di design legate
5815       alla sicurezza del demone si veda: <a class=
5816       "reference external" href=
5817       "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
5818
5819       <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
5820
5821       <ul class="simple">
5822         <li>Virtual IP configurations</li>
5823
5824         <li>Virtual users</li>
5825
5826         <li>Standalone or inetd operation</li>
5827
5828         <li>Powerful per-user configurability</li>
5829
5830         <li>Bandwidth throttling</li>
5831
5832         <li>Per-source-IP configurability</li>
5833
5834         <li>Per-source-IP limits</li>
5835
5836         <li>IPv6</li>
5837
5838         <li>Encryption support through SSL integration</li>
5839       </ul>
5840
5841       <div class="section" id="id8">
5842         <h2><a class="toc-backref" href=
5843         "#id132">11.1&nbsp;&nbsp;&nbsp;Pacchetti</a></h2>
5844
5845         <p>Per installare il demone vero e propio si usi il
5846         pacchetto <tt class="docutils literal">vsftpd</tt> , mentre
5847         per aver un client da cui fare qualche test sono
5848         dipsonibili:</p>
5849
5850         <ul class="simple">
5851           <li><tt class="docutils literal">ftp</tt> (pacchetto da
5852           installare) e' il solito client a riga di comando</li>
5853
5854           <li><tt class="docutils literal">gftp</tt> e' un client
5855           grafico simile al classico <em>WSftp</em></li>
5856
5857           <li>Normalmente i file mananager com Konqueror possono
5858           lavarorare come client FTP</li>
5859         </ul>
5860       </div>
5861
5862       <div class="section" id="sessioni-ftp">
5863         <h2><a class="toc-backref" href=
5864         "#id133">11.2&nbsp;&nbsp;&nbsp;Sessioni ftp</a></h2>
5865
5866         <p>Vediamo alcuni dei comandi di base per gestire una
5867         sessione ftp a riga di comando:</p>
5868
5869         <dl class="docutils">
5870           <dt>ftp nome_host</dt>
5871
5872           <dd>stabilire la connessione all'host, poi verra' chiesta
5873           la password dell'utente. Se avete sbagliato utente: user
5874           .</dd>
5875
5876           <dt>help</dt>
5877
5878           <dd>Lista dei comandi disponibili.</dd>
5879
5880           <dt>help [nome_comando]</dt>
5881
5882           <dd>Cosa fa quel comando.</dd>
5883
5884           <dt>put</dt>
5885
5886           <dd>Per caricare un file.</dd>
5887
5888           <dt>get</dt>
5889
5890           <dd>Per scaricare un file.</dd>
5891
5892           <dt>ls</dt>
5893
5894           <dd>Lista dei file disponibili.</dd>
5895
5896           <dt>cd</dt>
5897
5898           <dd>Spostarsi in un altra directory.</dd>
5899
5900           <dt>lcd</dt>
5901
5902           <dd>Cambio directory in LOCALE.</dd>
5903
5904           <dt>mput/mget</dt>
5905
5906           <dd>Per lavorare su file multipli.</dd>
5907
5908           <dt>prompt</dt>
5909
5910           <dd>
5911             <dl class="first last docutils">
5912               <dt>Per uscire dalla modalita' interattiva</dt>
5913
5914               <dd>
5915                 <dl class="first last docutils">
5916                   <dt>(non vi chiede conferma di ogni singola
5917                   operazione</dt>
5918
5919                   <dd>su ogni singolo file...).</dd>
5920                 </dl>
5921               </dd>
5922             </dl>
5923           </dd>
5924
5925           <dt>binary</dt>
5926
5927           <dd>Entra in modalita' trasferimento binario.</dd>
5928
5929           <dt>asii</dt>
5930
5931           <dd>Entra in modalita' trasferimento ascii.</dd>
5932
5933           <dt>bye</dt>
5934
5935           <dd>Per chiudere la sessione.</dd>
5936         </dl>
5937       </div>
5938
5939       <div class="section" id="configurazione-iniziale">
5940         <h2><a class="toc-backref" href=
5941         "#id134">11.3&nbsp;&nbsp;&nbsp;Configurazione
5942         iniziale</a></h2>
5943
5944         <p>Il demone di vsftpd e' immediatamente disponibile ma
5945         solo in modalita' anonima (si pensi a uno scenario in cui
5946         si vuole rendere disponibili dei files tramite FTP) e in
5947         <em>sola lettura</em>. Per accedere al servizio si usi
5948         quini come utente <tt class=
5949         "docutils literal">anonymous</tt> (la passwords in genere
5950         e' come consuetudine il propio indirizzo email), la cui
5951         <em>home</em> directory sara' <tt class=
5952         "docutils literal">/home/ftp/</tt> (<tt class=
5953         "docutils literal">/srv/ftp</tt> in Squeeze):</p>
5954         <pre class="literal-block">
5955 zoo:~# ftp localhost
5956 Connected to localhost.localdomain.
5957 220 (vsFTPd 2.0.7)
5958 Name (localhost:root): anonymous
5959 331 Please specify the password.
5960 Password:
5961 230 Login successful.
5962 Remote system type is UNIX.
5963 Using binary mode to transfer files.
5964 ftp&gt; ls
5965 200 PORT command successful. Consider using PASV.
5966 150 Here comes the directory listing.
5967 -rw-r--r--    1 0        0               0 Feb 03 17:17 anoni
5968 226 Directory send OK.
5969 </pre>
5970       </div>
5971
5972       <div class="section" id="abilitare-gli-utenti-locali">
5973         <h2><a class="toc-backref" href=
5974         "#id135">11.4&nbsp;&nbsp;&nbsp;Abilitare gli utenti
5975         locali</a></h2>
5976
5977         <p>Per poter modificare le impostazioni iniziali, ad
5978         esempio per permettere l'accesso agli utenti del server, si
5979         modifichera' il file <tt class=
5980         "docutils literal">/etc/vsftpd.conf</tt>, a seguire le
5981         impostazioni fondamentali ed altre interessanti per rendere
5982         il server accessibile da utenti di sistema (autenticati
5983         tramite la loro password, quindi con PAM) per il tipico
5984         utilizzo di web designers che debbano pubblicare le loro
5985         pagine web (e non si siano fatti convincere a usare
5986         SFTP!):</p>
5987         <pre class="literal-block">
5988 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
5989 anonymous_enable=NO
5990 # Disabilitiamo l'utente anonimo
5991
5992 # Uncomment this to allow local users to log in.
5993 local_enable=YES
5994 # Accesso garantito agli utenti di sistema
5995
5996 # Uncomment this to enable any form of FTP write command.
5997 write_enable=YES
5998 # Permettiamo agli utenti di caricare documenti nella loro home
5999
6000 # You may fully customise the login banner string:
6001 ftpd_banner=Benvenuti al servizio ftp del sito example.com
6002 </pre>
6003
6004         <p>Per abilitare i cambiamenti si proceda a riavviare il
6005         server: <tt class="docutils literal">/etc/init.d/vsftpd
6006         restart</tt> e si monitorizzi il file di log <tt class=
6007         "docutils literal">tail <span class="pre">-f</span>
6008         /var/log/vsftpd.log</tt> per controllarne il funzionamento
6009         (e anche <tt class="docutils literal">/var/log/syslog</tt>
6010         nel caso non si riuscisse a far partire correttamente il
6011         servizio.</p>
6012
6013         <p>NOTE: Se non riuscite ad ottenere un <em>directory
6014         listing</em> (<tt class="docutils literal">ls</tt>)
6015         ottenendo un errore <tt class="docutils literal">500
6016         Illegal PORT command? FTP error</tt> abilitare la modalita'
6017         passiva col comando ftp <tt class=
6018         "docutils literal">passive</tt>.</p>
6019       </div>
6020
6021       <div class="section" id="jail-chroot">
6022         <h2><a class="toc-backref" href=
6023         "#id136">11.5&nbsp;&nbsp;&nbsp;Jail chroot</a></h2>
6024
6025         <p>Si puo' impedire all'utente di spostarsi arbitrariamente
6026         per il file system del servere visualizzare il contenuto
6027         delle directory, ad esempio la cartella <tt class=
6028         "docutils literal">/etc</tt>, confinandolo in una jail
6029         chroot limitata alla sua home directory:</p>
6030         <pre class="literal-block">
6031 # You may restrict local users to their home directories.  See the FAQ for
6032 # the possible risks in this before using chroot_local_user or
6033 # chroot_list_enable below.
6034 chroot_local_user=YES
6035 </pre>
6036
6037         <p>Generalmente un utente di sistema con il solo accesso
6038         FTP non dovrebbe avere la possibilita' di poter navigare
6039         liberamente per il file system del server, esponendo file
6040         di configurazione e quant'altro l'utente potrebbe trarre
6041         utili informazioni sul quali software siano installati e di
6042         che tipo:</p>
6043         <pre class="literal-block">
6044 Remote system type is UNIX.
6045 Using binary mode to transfer files.
6046 ftp&gt; pwd
6047 257 "/"
6048 ftp&gt; cd /etc/
6049 550 Failed to change directory.
6050 </pre>
6051       </div>
6052
6053       <div class="section" id="permessi-sul-filesystem">
6054         <h2><a class="toc-backref" href=
6055         "#id137">11.6&nbsp;&nbsp;&nbsp;Permessi sul
6056         filesystem</a></h2>
6057
6058         <p>Come accennato precedentemente e' opportuno che i
6059         filesystems sui quali un utente puo' scrivere o modificare
6060         il contenuto non abbiano i privilegi di eseguibilita' e
6061         suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
6062         "docutils literal">/home/</tt> directory quindi avremo in
6063         <tt class="docutils literal">/etc/fstab</tt>:</p>
6064         <pre class="literal-block">
6065 /dev/mapper/store-homes /home   ext3    rw,nosuid,noexec     0      2
6066 </pre>
6067       </div>
6068
6069       <div class="section" id="shell-dell-utente">
6070         <h2><a class="toc-backref" href=
6071         "#id138">11.7&nbsp;&nbsp;&nbsp;Shell dell'utente</a></h2>
6072
6073         <p>Come gia' detto piu' volte le passwords degli utenti
6074         viaaggiano in rete in chiaro, ponendo un grave problema di
6075         sicurezza. Sara' quindi opportuno disbilitare la shell di
6076         questi utenti, tramite il flag <tt class=
6077         "docutils literal"><span class="pre">--shell</span>
6078         /bin/false</tt> in fase di creazione degli utenti:</p>
6079         <pre class="literal-block">
6080 # adduser --shell /bin/false nome_utente
6081 </pre>
6082
6083         <p>Oppure correggiendo manualmente il file <tt class=
6084         "docutils literal">/etc/passwd</tt> per modificare
6085         l'inpostazione della shell dell'utente:</p>
6086         <pre class="literal-block">
6087 nome_utente:x:1001:1001::/var/spool/postfix:/bin/bash
6088 # la riga sopra deve essere trasformata in
6089 nome_utente:x:1001:1001::/var/spool/postfix:/bin/false
6090 </pre>
6091
6092         <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
6093         <tt class="docutils literal">/bin/false</tt> all'elenco
6094         delle shell valide.</p>
6095
6096         <p><tt class="docutils literal">/etc/shells</tt></p>
6097         <pre class="literal-block">
6098 ...
6099 /bin/false
6100 </pre>
6101       </div>
6102
6103       <div class="section" id="altre-opzioni">
6104         <h2><a class="toc-backref" href=
6105         "#id139">11.8&nbsp;&nbsp;&nbsp;Altre opzioni</a></h2>
6106
6107         <dl class="docutils">
6108           <dt>xferlog_enable=YES</dt>
6109
6110           <dd>Verra' tenuto un file di log <tt class=
6111           "docutils literal">/var/log/vsftpd.log</tt> degli upload
6112           e download sul server.</dd>
6113
6114           <dt>hide_ids=YES</dt>
6115
6116           <dd>Nasconde le userid e groupid mascherandole con
6117           <tt class="docutils literal">ftp</tt> .</dd>
6118
6119           <dt>anon_root=/home/ftp</dt>
6120
6121           <dd>Home directory dell'utente anonimo.</dd>
6122
6123           <dt>write_enable=YES</dt>
6124
6125           <dd>Permette agli utenti di eseguire i comandi che
6126           possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
6127           MKD, RMD, APPE e SITE .</dd>
6128
6129           <dt>idle_session_timeout=600</dt>
6130
6131           <dd>Permette agli utenti di restare connessi piu' a
6132           lungo, utile per i webdesigners che passano intere
6133           giornate connessi al server.</dd>
6134         </dl>
6135       </div>
6136     </div>
6137   </div>
6138 </body>
6139 </html>