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