]> git.piffa.net Git - doc/.git/blob - servizi.html
Merge branch 'master' of git@chrome.andreamanni.com:/home/git/doc
[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 7 December 2008), 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.5: 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
31   p.topic-title {
32   font-weight: bold;
33   }
34
35   table.docinfo {
36   text-align: left;
37   margin: 2em 0em;
38   }
39
40   a[href] {
41   color: #436976;
42   background-color: transparent;
43   }
44
45   a.toc-backref {
46   text-decoration: none;
47   }
48
49   h1 a[href] {
50   color: #003a6b;
51   text-decoration: none;
52   background-color: transparent;
53   }
54
55   a.strong {
56   font-weight: bold;
57   }
58
59   img {
60   margin: 0;
61   border: 0;
62   }
63
64   p {
65   margin: 0.5em 0 1em 0;
66   line-height: 1.5em;
67   }
68
69   p a:visited {
70   color: purple;
71   background-color: transparent;
72   }
73
74   p a:active {
75   color: red;
76   background-color: transparent;
77   }
78
79   a:hover {
80   text-decoration: none;
81   }
82
83   p img {
84   border: 0;
85   margin: 0;
86   }
87
88   p.rubric {
89   font-weight: bold;
90   font-style: italic;
91   }
92
93   h1.title {
94   color: #003a6b;
95   font-size: 250%;
96   margin-bottom: 0em;
97   }
98
99   h2.subtitle {
100   color: #003a6b;
101   border-bottom: 0px;
102   }
103
104   h1, h2, h3, h4, h5, h6 {
105   color: #555;
106   background-color: transparent;
107   margin: 0em;
108   padding-top: 0.5em;
109   }
110
111   h1 {
112   font-size: 160%;
113   margin-bottom: 0.5em;
114   border-bottom: 2px solid #aaa;
115   }
116
117   h2 {
118   font-size: 140%;
119   margin-bottom: 0.5em;
120   border-bottom: 1px solid #aaa;
121   }
122
123   h3 {
124   font-size: 130%;
125   margin-bottom: 0.5em;
126   }
127
128   h4 {
129   font-size: 110%;
130   font-weight: bold;
131   margin-bottom: 0.5em;
132   }
133
134   h5 {
135   font-size: 105%;
136   font-weight: bold;
137   margin-bottom: 0.5em;
138   }
139
140   h6 {
141   font-size: 100%;
142   font-weight: bold;
143   margin-bottom: 0.5em;
144   }
145
146   dt {
147   font-style: italic;
148   }
149
150   dd {
151   margin-bottom: 1.5em;
152   }
153
154   div.admonition, div.note, div.tip, div.caution, div.important {
155   margin: 2em 2em;
156   padding: 0em 1em;
157   border-top: 1px solid #aaa;
158   border-left: 1px solid #aaa;
159   border-bottom: 2px solid #555;
160   border-right: 2px solid #555;
161   }
162
163   div.important {
164   background: transparent url('../images/important.png') 10px 2px no-repeat;
165   }
166
167   div.caution {
168   background: transparent url('../images/caution.png') 10px 2px no-repeat;
169   }
170
171   div.note {
172   background: transparent url('../images/note.png') 10px 2px no-repeat;
173   }
174
175   div.tip {
176   background: transparent url('../images/tip.png') 10px 2px no-repeat;
177   }
178
179   div.admonition-example {
180   background: transparent url('../images/tip.png') 10px 2px no-repeat;
181   }
182
183   div.admonition-critical-example {
184   background: transparent url('../images/important.png') 10px 2px no-repeat;
185   }
186
187   p.admonition-title {
188   font-weight: bold;
189   border-bottom: 1px solid #aaa;
190   padding-left: 30px;
191   }
192
193   table.docutils {
194   text-align: left;
195   border: 1px solid gray;
196   border-collapse: collapse;
197   width: 100%;
198   margin: 1.5em 0em;
199   }
200
201   table.docutils caption {
202   font-style: italic;
203   }
204
205   table.docutils td, table.docutils th {
206   padding: 0.25em 0.5em;
207   }
208
209   table.docutils th {
210   background-color: #dddddd;
211   }
212
213   div.sidebar {
214   width: 33%;
215   float: right;
216   margin: 0em 2em;
217   padding: 0em 1em;
218   border-top: 1px solid #aaa;
219   border-left: 1px solid #aaa;
220   border-bottom: 2px solid #555;
221   border-right: 2px solid #555;
222   }
223
224   p.sidebar-title {
225   margin-bottom: 0em;
226   color: #003a6b;
227   border-bottom: 1px solid #aaa;
228   font-weight: bold;
229   }
230
231   p.sidebar-subtitle {
232   margin-top: 0em;
233   font-style: italic;
234   color: #003a6b;
235   }
236
237   </style>
238 </head>
239
240 <body>
241   <div class="document" id="servizi-di-rete-passo-a-passo">
242     <h1 class="title">Servizi di rete passo a passo</h1>
243
244     <h2 class="subtitle" id=
245     "appunti-sulla-installazione-e-configurazione-dei-servizi">
246     Appunti sulla installazione e configurazione dei servizi</h2>
247
248     <blockquote>
249       <table class="docutils field-list" frame="void" rules="none">
250         <col class="field-name">
251         <col class="field-body">
252
253         <tbody valign="top">
254           <tr class="field">
255             <th class="field-name">Author:</th>
256
257             <td class="field-body">Andrea Manni</td>
258           </tr>
259
260           <tr class="field">
261             <th class="field-name">Copyright:</th>
262
263             <td class="field-body">GFDL</td>
264           </tr>
265
266           <tr class="field">
267             <th class="field-name">Version:</th>
268
269             <td class="field-body">0.7</td>
270           </tr>
271         </tbody>
272       </table>
273     </blockquote>
274
275     <p>Questa guida e' dedicata agli studenti delle lezioni di
276     informatica tenute da Andrea nel lab208. Nella parte iniziale
277     sono presenti alcuni richiami alle impostazioni di rete e di
278     installazione del laboratorio 208 (lab208) dove generalmente si
279     tengono le lezioni. Questi parametri non sono interessanti per
280     chiunque si trovasse al di fuori della rete piffa.net .</p>
281
282     <div class="contents topic" id="indice-degli-argomenti">
283       <p class="topic-title first">Indice degli argomenti</p>
284
285       <ul class="auto-toc simple">
286         <li>
287           <a class="reference internal" href=
288           "#configurazione-sistema" id="id6" name=
289           "id6">1&nbsp;&nbsp;&nbsp;Configurazione sistema</a>
290
291           <ul class="auto-toc">
292             <li><a class="reference internal" href=
293             "#solo-per-uso-interno" id="id7" name=
294             "id7">1.1&nbsp;&nbsp;&nbsp;Solo per uso
295             interno</a></li>
296
297             <li><a class="reference internal" href="#rete" id="id8"
298             name="id8">1.2&nbsp;&nbsp;&nbsp;Rete</a></li>
299
300             <li><a class="reference internal" href=
301             "#bash-completion" id="id9" name=
302             "id9">1.3&nbsp;&nbsp;&nbsp;Bash completion</a></li>
303
304             <li><a class="reference internal" href="#vim" id="id10"
305             name="id10">1.4&nbsp;&nbsp;&nbsp;Vim</a></li>
306
307             <li><a class="reference internal" href="#vnc" id="id11"
308             name="id11">1.5&nbsp;&nbsp;&nbsp;VNC</a></li>
309
310             <li><a class="reference internal" href=
311             "#lista-dei-pacchetti-di-base" id="id12" name=
312             "id12">1.6&nbsp;&nbsp;&nbsp;Lista dei pacchetti di
313             base</a></li>
314
315             <li>
316               <a class="reference internal" href=
317               "#apt-configurazione" id="id13" name=
318               "id13">1.7&nbsp;&nbsp;&nbsp;Apt configurazione</a>
319
320               <ul class="auto-toc">
321                 <li><a class="reference internal" href=
322                 "#sources-list" id="id14" name=
323                 "id14">1.7.1&nbsp;&nbsp;&nbsp;sources.list</a></li>
324
325                 <li><a class="reference internal" href=
326                 "#etc-apt-apt-conf" id="id15" name=
327                 "id15">1.7.2&nbsp;&nbsp;&nbsp;/etc/apt/apt.conf</a></li>
328               </ul>
329             </li>
330           </ul>
331         </li>
332
333         <li>
334           <a class="reference internal" href="#squid" id="id16"
335           name="id16">2&nbsp;&nbsp;&nbsp;Squid</a>
336
337           <ul class="auto-toc">
338             <li>
339               <a class="reference internal" href=
340               "#configurazione-squid-conf" id="id17" name=
341               "id17">2.1&nbsp;&nbsp;&nbsp;Configurazione:
342               squid.conf</a>
343
344               <ul class="auto-toc">
345                 <li><a class="reference internal" href="#cache-dir"
346                 id="id18" name=
347                 "id18">2.1.1&nbsp;&nbsp;&nbsp;Cache_dir</a></li>
348
349                 <li><a class="reference internal" href=
350                 "#tag-maximum-object-size" id="id19" name=
351                 "id19">2.1.2&nbsp;&nbsp;&nbsp;TAG:
352                 maximum_object_size</a></li>
353
354                 <li><a class="reference internal" href=
355                 "#tag-cache-mem" id="id20" name=
356                 "id20">2.1.3&nbsp;&nbsp;&nbsp;TAG:
357                 cache_mem</a></li>
358
359                 <li><a class="reference internal" href=
360                 "#tag-minimum-object-size" id="id21" name=
361                 "id21">2.1.4&nbsp;&nbsp;&nbsp;TAG:
362                 minimum_object_size</a></li>
363               </ul>
364             </li>
365
366             <li>
367               <a class="reference internal" href=
368               "#negoziazione-degli-accesi-al-servizio" id="id22"
369               name="id22">2.2&nbsp;&nbsp;&nbsp;Negoziazione degli
370               accesi al servizio</a>
371
372               <ul class="auto-toc">
373                 <li><a class="reference internal" href=
374                 "#acl-e-http-access" id="id23" name=
375                 "id23">2.2.1&nbsp;&nbsp;&nbsp;ACL e http
376                 access</a></li>
377               </ul>
378             </li>
379
380             <li>
381               <a class="reference internal" href="#testare-squid"
382               id="id24" name="id24">2.3&nbsp;&nbsp;&nbsp;Testare
383               Squid</a>
384
385               <ul class="auto-toc">
386                 <li><a class="reference internal" href=
387                 "#client-wgetrc" id="id25" name=
388                 "id25">2.3.1&nbsp;&nbsp;&nbsp;Client:
389                 ~/.wgetrc</a></li>
390
391                 <li><a class="reference internal" href=
392                 "#server-access-log" id="id26" name=
393                 "id26">2.3.2&nbsp;&nbsp;&nbsp;Server:
394                 access.log</a></li>
395               </ul>
396             </li>
397           </ul>
398         </li>
399
400         <li>
401           <a class="reference internal" href="#apache" id="id27"
402           name="id27">3&nbsp;&nbsp;&nbsp;Apache</a>
403
404           <ul class="auto-toc">
405             <li><a class="reference internal" href=
406             "#pacchetti-da-installare" id="id28" name=
407             "id28">3.1&nbsp;&nbsp;&nbsp;Pacchetti da
408             installare::</a></li>
409
410             <li><a class="reference internal" href=
411             "#configurazione-di-apache" id="id29" name=
412             "id29">3.2&nbsp;&nbsp;&nbsp;Configurazione di
413             Apache</a></li>
414
415             <li><a class="reference internal" href="#apache-conf"
416             id="id30" name=
417             "id30">3.3&nbsp;&nbsp;&nbsp;apache.conf</a></li>
418
419             <li>
420               <a class="reference internal" href=
421               "#installazione-di-php" id="id31" name=
422               "id31">3.4&nbsp;&nbsp;&nbsp;Installazione di PHP</a>
423
424               <ul class="auto-toc">
425                 <li><a class="reference internal" href=
426                 "#test-del-modulo-php" id="id32" name=
427                 "id32">3.4.1&nbsp;&nbsp;&nbsp;Test del modulo
428                 php</a></li>
429
430                 <li><a class="reference internal" href=
431                 "#installazione-del-supporto-per-mysql" id="id33"
432                 name="id33">3.4.2&nbsp;&nbsp;&nbsp;Installazione
433                 del supporto per Mysql</a></li>
434
435                 <li><a class="reference internal" href=
436                 "#phpmyadmin" id="id34" name=
437                 "id34">3.4.3&nbsp;&nbsp;&nbsp;phpmyadmin</a></li>
438
439                 <li><a class="reference internal" href=
440                 "#installazione-del-supporto-per-postgresql" id=
441                 "id35" name=
442                 "id35">3.4.4&nbsp;&nbsp;&nbsp;Installazione del
443                 supporto per Postgresql</a></li>
444
445                 <li><a class="reference internal" href=
446                 "#phppgadmin" id="id36" name=
447                 "id36">3.4.5&nbsp;&nbsp;&nbsp;phppgadmin</a></li>
448               </ul>
449             </li>
450
451             <li>
452               <a class="reference internal" href="#virtual-hosts"
453               id="id37" name="id37">3.5&nbsp;&nbsp;&nbsp;Virtual
454               hosts</a>
455
456               <ul class="auto-toc">
457                 <li><a class="reference internal" href=
458                 "#gestione-dns" id="id38" name=
459                 "id38">3.5.1&nbsp;&nbsp;&nbsp;Gestione DNS</a></li>
460
461                 <li><a class="reference internal" href=
462                 "#virtual-host" id="id39" name=
463                 "id39">3.5.2&nbsp;&nbsp;&nbsp;Virtual host</a></li>
464               </ul>
465             </li>
466
467             <li>
468               <a class="reference internal" href=
469               "#negoziazione-accessi" id="id40" name=
470               "id40">3.6&nbsp;&nbsp;&nbsp;Negoziazione accessi</a>
471
472               <ul class="auto-toc">
473                 <li><a class="reference internal" href=
474                 "#limiti-su-base-ip" id="id41" name=
475                 "id41">3.6.1&nbsp;&nbsp;&nbsp;Limiti su base
476                 ip</a></li>
477               </ul>
478             </li>
479
480             <li>
481               <a class="reference internal" href=
482               "#user-authentication" id="id42" name=
483               "id42">3.7&nbsp;&nbsp;&nbsp;User Authentication</a>
484
485               <ul class="auto-toc">
486                 <li><a class="reference internal" href=
487                 "#definire-la-cartella" id="id43" name=
488                 "id43">3.7.1&nbsp;&nbsp;&nbsp;Definire la
489                 cartella</a></li>
490
491                 <li><a class="reference internal" href=
492                 "#creazione-del-database-delle-passwords" id="id44"
493                 name="id44">3.7.2&nbsp;&nbsp;&nbsp;Creazione del
494                 database delle passwords</a></li>
495
496                 <li><a class="reference internal" href="#id3" id=
497                 "id45" name=
498                 "id45">3.7.3&nbsp;&nbsp;&nbsp;Configurazione di
499                 Apache</a></li>
500               </ul>
501             </li>
502
503             <li><a class="reference internal" href="#cavets" id=
504             "id46" name="id46">3.8&nbsp;&nbsp;&nbsp;Cavets</a></li>
505           </ul>
506         </li>
507
508         <li>
509           <a class="reference internal" href="#domain-name-system"
510           id="id47" name="id47">4&nbsp;&nbsp;&nbsp;Domain Name
511           System</a>
512
513           <ul class="auto-toc">
514             <li><a class="reference internal" href=
515             "#nomi-di-dominio" id="id48" name=
516             "id48">4.1&nbsp;&nbsp;&nbsp;Nomi di dominio</a></li>
517
518             <li><a class="reference internal" href=
519             "#tipologie-di-record" id="id49" name=
520             "id49">4.2&nbsp;&nbsp;&nbsp;Tipologie di
521             record</a></li>
522
523             <li><a class="reference internal" href="#utilizzo" id=
524             "id50" name=
525             "id50">4.3&nbsp;&nbsp;&nbsp;Utilizzo</a></li>
526
527             <li><a class="reference internal" href=
528             "#risoluzione-dei-nomi-di-dominio" id="id51" name=
529             "id51">4.4&nbsp;&nbsp;&nbsp;Risoluzione dei nomi di
530             dominio</a></li>
531
532             <li><a class="reference internal" href="#dig" id="id52"
533             name="id52">4.5&nbsp;&nbsp;&nbsp;Dig</a></li>
534
535             <li><a class="reference internal" href="#resolv-conf"
536             id="id53" name=
537             "id53">4.6&nbsp;&nbsp;&nbsp;resolv.conf</a></li>
538
539             <li><a class="reference internal" href="#etc-hosts" id=
540             "id54" name=
541             "id54">4.7&nbsp;&nbsp;&nbsp;/etc/hosts</a></li>
542
543             <li><a class="reference internal" href="#hostname" id=
544             "id55" name=
545             "id55">4.8&nbsp;&nbsp;&nbsp;Hostname</a></li>
546           </ul>
547         </li>
548
549         <li>
550           <a class="reference internal" href="#dnsmasq" id="id56"
551           name="id56">5&nbsp;&nbsp;&nbsp;DNSmasq</a>
552
553           <ul class="auto-toc">
554             <li><a class="reference internal" href=
555             "#configurazione" id="id57" name=
556             "id57">5.1&nbsp;&nbsp;&nbsp;Configurazione</a></li>
557
558             <li><a class="reference internal" href="#dhcp" id=
559             "id58" name="id58">5.2&nbsp;&nbsp;&nbsp;DHCP</a></li>
560
561             <li><a class="reference internal" href="#dns-cache" id=
562             "id59" name="id59">5.3&nbsp;&nbsp;&nbsp;DNS
563             cache</a></li>
564
565             <li><a class="reference internal" href="#dhcpd" id=
566             "id60" name="id60">5.4&nbsp;&nbsp;&nbsp;DHCPd</a></li>
567           </ul>
568         </li>
569
570         <li>
571           <a class="reference internal" href="#samba" id="id61"
572           name="id61">6&nbsp;&nbsp;&nbsp;Samba</a>
573
574           <ul class="auto-toc">
575             <li><a class="reference internal" href="#pacchetti" id=
576             "id62" name=
577             "id62">6.1&nbsp;&nbsp;&nbsp;Pacchetti</a></li>
578
579             <li><a class="reference internal" href=
580             "#passwords-e-autenticazione" id="id63" name=
581             "id63">6.2&nbsp;&nbsp;&nbsp;Passwords e
582             autenticazione</a></li>
583
584             <li><a class="reference internal" href=
585             "#creazione-utenti" id="id64" name=
586             "id64">6.3&nbsp;&nbsp;&nbsp;Creazione Utenti</a></li>
587
588             <li>
589               <a class="reference internal" href=
590               "#creare-la-condivisione" id="id65" name=
591               "id65">6.4&nbsp;&nbsp;&nbsp;Creare la
592               condivisione</a>
593
594               <ul class="auto-toc">
595                 <li><a class="reference internal" href=
596                 "#sicurezza-permessi-di-esecuzione-sul-server" id=
597                 "id66" name=
598                 "id66">6.4.1&nbsp;&nbsp;&nbsp;Sicurezza: permessi
599                 di esecuzione sul server</a></li>
600               </ul>
601             </li>
602
603             <li><a class="reference internal" href=
604             "#configurazione-dell-applicativo-samba-vero-e-proprio"
605             id="id67" name=
606             "id67">6.5&nbsp;&nbsp;&nbsp;Configurazione
607             dell'applicativo Samba vero e proprio.</a></li>
608
609             <li><a class="reference internal" href=
610             "#testare-il-servizio" id="id68" name=
611             "id68">6.6&nbsp;&nbsp;&nbsp;Testare il
612             Servizio</a></li>
613           </ul>
614         </li>
615
616         <li>
617           <a class="reference internal" href=
618           "#server-di-posta-postfix" id="id69" name=
619           "id69">7&nbsp;&nbsp;&nbsp;Server di posta: Postfix</a>
620
621           <ul class="auto-toc">
622             <li>
623               <a class="reference internal" href="#imap-e-pop" id=
624               "id70" name="id70">7.1&nbsp;&nbsp;&nbsp;Imap e
625               pop</a>
626
627               <ul class="auto-toc">
628                 <li><a class="reference internal" href=
629                 "#web-client" id="id71" name=
630                 "id71">7.1.1&nbsp;&nbsp;&nbsp;Web client</a></li>
631               </ul>
632             </li>
633           </ul>
634         </li>
635
636         <li>
637           <a class="reference internal" href="#firewall" id="id72"
638           name="id72">8&nbsp;&nbsp;&nbsp;Firewall</a>
639
640           <ul class="auto-toc">
641             <li><a class="reference internal" href="#links" id=
642             "id73" name="id73">8.1&nbsp;&nbsp;&nbsp;Links</a></li>
643
644             <li><a class="reference internal" href="#ipfilter" id=
645             "id74" name=
646             "id74">8.2&nbsp;&nbsp;&nbsp;Ipfilter</a></li>
647
648             <li>
649               <a class="reference internal" href=
650               "#progettazione-di-un-firewall" id="id75" name=
651               "id75">8.3&nbsp;&nbsp;&nbsp;Progettazione di un
652               firewall</a>
653
654               <ul class="auto-toc">
655                 <li><a class="reference internal" href=
656                 "#collocazione" id="id76" name=
657                 "id76">8.3.1&nbsp;&nbsp;&nbsp;Collocazione</a></li>
658
659                 <li><a class="reference internal" href=
660                 "#policy-di-default" id="id77" name=
661                 "id77">8.3.2&nbsp;&nbsp;&nbsp;Policy di
662                 default</a></li>
663
664                 <li><a class="reference internal" href="#hardware"
665                 id="id78" name=
666                 "id78">8.3.3&nbsp;&nbsp;&nbsp;Hardware</a></li>
667               </ul>
668             </li>
669
670             <li><a class="reference internal" href=
671             "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
672             "id79" name="id79">8.4&nbsp;&nbsp;&nbsp;Percorso dei
673             pacchetti tra tabelle e catene</a></li>
674
675             <li>
676               <a class="reference internal" href=
677               "#concetti-di-base" id="id80" name=
678               "id80">8.5&nbsp;&nbsp;&nbsp;Concetti di base</a>
679
680               <ul class="auto-toc">
681                 <li><a class="reference internal" href=
682                 "#tabelle-catene-regole" id="id81" name=
683                 "id81">8.5.1&nbsp;&nbsp;&nbsp;Tabelle, catene,
684                 regole</a></li>
685
686                 <li><a class="reference internal" href="#match" id=
687                 "id82" name=
688                 "id82">8.5.2&nbsp;&nbsp;&nbsp;Match</a></li>
689
690                 <li><a class="reference internal" href="#targets"
691                 id="id83" name=
692                 "id83">8.5.3&nbsp;&nbsp;&nbsp;Targets</a></li>
693               </ul>
694             </li>
695
696             <li><a class="reference internal" href=
697             "#tabella-filter" id="id84" name=
698             "id84">8.6&nbsp;&nbsp;&nbsp;Tabella Filter</a></li>
699
700             <li><a class="reference internal" href=
701             "#flush-automatico-per-macchine-remote" id="id85" name=
702             "id85">8.7&nbsp;&nbsp;&nbsp;Flush automatico per
703             macchine remote</a></li>
704
705             <li><a class="reference internal" href=
706             "#gestione-regole-rules" id="id86" name=
707             "id86">8.8&nbsp;&nbsp;&nbsp;Gestione regole
708             (rules)</a></li>
709
710             <li>
711               <a class="reference internal" href=
712               "#salvataggio-regole" id="id87" name=
713               "id87">8.9&nbsp;&nbsp;&nbsp;Salvataggio regole</a>
714
715               <ul class="auto-toc">
716                 <li><a class="reference internal" href=
717                 "#iptables-save" id="id88" name=
718                 "id88">8.9.1&nbsp;&nbsp;&nbsp;Iptables-save</a></li>
719
720                 <li><a class="reference internal" href=
721                 "#iptables-restore" id="id89" name=
722                 "id89">8.9.2&nbsp;&nbsp;&nbsp;Iptables-restore</a></li>
723               </ul>
724             </li>
725           </ul>
726         </li>
727
728         <li><a class="reference internal" href="#note" id="id90"
729         name="id90">9&nbsp;&nbsp;&nbsp;NOTE</a></li>
730       </ul>
731     </div>
732
733     <p>Generato con: <a class="reference external" href=
734     "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
735
736     <div class="section" id="configurazione-sistema">
737       <h1><a class="toc-backref" href=
738       "#id6">1&nbsp;&nbsp;&nbsp;Configurazione sistema</a></h1>
739
740       <div class="section" id="solo-per-uso-interno">
741         <h2><a class="toc-backref" href=
742         "#id7">1.1&nbsp;&nbsp;&nbsp;Solo per uso interno</a></h2>
743
744         <p>Impostazioni di base per la configurazione del sistema
745         operativo e della rete nel laboratorio 208 facente parte
746         della rete piffa.net .</p>
747
748         <p>Qui riportati per comodita' degli studenti (e del
749         docente che non sara' <strong>mai piu'</strong> costretto a
750         ripeterli continuamente! ). Gli altri lettori potranno
751         tenerli presenti per cercare di comprendere gli esempi nel
752         testo. Ad esempio: quando leggerete <tt class=
753         "docutils literal"><span class=
754         "pre">10.10.208.254:3128</span></tt> saprete che si tratta
755         del nostro <em>proxy http</em>, stara' quindi a voi
756         sostituire i dati con gli <em>ip</em> della vostra
757         rete.</p>
758       </div>
759
760       <div class="section" id="rete">
761         <h2><a class="toc-backref" href=
762         "#id8">1.2&nbsp;&nbsp;&nbsp;Rete</a></h2>
763
764         <p>Parametri della rete attualmente in uso:</p>
765
766         <table border="1" class="docutils">
767           <colgroup>
768             <col width="42%">
769             <col width="58%">
770           </colgroup>
771
772           <tbody valign="top">
773             <tr>
774               <td colspan="2">Parametri della rete</td>
775             </tr>
776
777             <tr>
778               <td>rete</td>
779
780               <td>10.10.208.0/24</td>
781             </tr>
782
783             <tr>
784               <td>netmask</td>
785
786               <td>255.255.255.0</td>
787             </tr>
788
789             <tr>
790               <td>broadcast</td>
791
792               <td>10.10.208.255</td>
793             </tr>
794
795             <tr>
796               <td>gateway</td>
797
798               <td>10.10.208.254</td>
799             </tr>
800
801             <tr>
802               <td>gateway</td>
803
804               <td>10.10.208.250 persistente</td>
805             </tr>
806
807             <tr>
808               <td>DNS</td>
809
810               <td>10.10.208.254</td>
811             </tr>
812
813             <tr>
814               <td>DNS</td>
815
816               <td>10.10.208.250 persistente</td>
817             </tr>
818
819             <tr>
820               <td>proxy http</td>
821
822               <td>10.10.208.254:3128</td>
823             </tr>
824           </tbody>
825         </table>
826
827         <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
828         un DHCP, proxy http e mirror di Debian ( <a class=
829         "reference external" href=
830         "http://debian.piffa.net">http://debian.piffa.net</a>). Se
831         Andrea non e' in aula (o ancora peggio non c'e' il suo
832         portatile Net) gli studenti dovranno darsi un indirizzo ip
833         manualmente e disabilitare il proxy (che pero' e
834         trasparente, quindi fate pure come se non ci fosse ;) .
835         Questo in attesa che si sappia se sara' nuovamente
836         utilizzabile il vecchio server Bender.</p>
837       </div>
838
839       <div class="section" id="bash-completion">
840         <h2><a class="toc-backref" href=
841         "#id9">1.3&nbsp;&nbsp;&nbsp;Bash completion</a></h2>
842
843         <p>Il completamento automatico della shell (che si attiva
844         premendo il tasto tab una o due volte mentre si sta
845         scrivendo un termine) permette di comporre automaticamente
846         i nomi dei comandi e i percorsi dei file, sopratutto la
847         composizione automatica dei percorsi dei file e' di grande
848         importanza.</p>
849
850         <p>Bash_completion permette di integrare il completamento
851         automatico con i nomi dei pacchetti e oggetti dei comandi:
852         ad es. volendo digitare <tt class=
853         "docutils literal"><span class="pre">apt-get</span>
854         <span class="pre">inst[TAB]</span> <span class=
855         "pre">xtigh[TAB]</span></tt> ora verra' completatato
856         automaticamente sia la parola <tt class=
857         "docutils literal"><span class="pre">install</span></tt>
858         che il nome del pacchetto <tt class=
859         "docutils literal"><span class=
860         "pre">xtightvncviewer</span></tt>.</p>
861
862         <p>Abilitare /etc/bash_completion nel file <tt class=
863         "docutils literal"><span class=
864         "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
865         proprio <tt class="docutils literal"><span class=
866         "pre">~/.bashrc</span></tt> (che sarebbe il file
867         <em>nascosto</em>, quindi con un punto all'inizio del nome
868         del file, di configurazione della shell bash per ogni
869         utente, presente nella propria <em>home
870         directory</em>):</p>
871         <pre class="literal-block">
872 echo ". /etc/bash_completion" &gt;&gt; ~/.bashrc
873 </pre>
874
875         <p>Esempio di ~/.bahsrc</p>
876         <pre class="literal-block">
877 # ~/.bashrc: executed by bash(1) for non-login shells.
878
879 export PS1='\h:\w\$ '
880 umask 022
881
882 # Decommentare le seguenti righr per abilitare la colorazione dei
883 # nomi dei file:
884  export LS_OPTIONS='--color=auto'
885  eval "`dircolors`"
886  alias ls='ls $LS_OPTIONS'
887  alias ll='ls $LS_OPTIONS -l'
888  alias l='ls $LS_OPTIONS -lA'
889
890 # Some more alias to avoid making mistakes:
891 # alias rm='rm -i'
892 # alias cp='cp -i'
893 # alias mv='mv -i'
894
895 # questo abilita bash completion
896 . /etc/bash_completion
897 </pre>
898
899         <p>Il file <tt class="docutils literal"><span class=
900         "pre">/etc/bash_completion</span></tt> deve essere presente
901         nel sistema, in caso contrario installare il pacchetto:
902         <tt class="docutils literal"><span class=
903         "pre">bash-completion</span></tt>. Generalmente l'utente
904         <tt class="docutils literal"><span class=
905         "pre">root</span></tt> ha un file <tt class=
906         "docutils literal"><span class="pre">.bashrc</span></tt>
907         preimpostato analogo a quello citato sopra, a differenza
908         dei normali utenti di sistema.</p>
909
910         <p>Links:</p>
911
912         <ul class="simple">
913           <li><a class="reference external" href=
914           "http://www.debian-administration.org/articles/316">An
915           introduction to bash completion</a></li>
916
917           <li><a class="reference external" href=
918           "http://www.caliban.org/bash/">Working more productively
919           with bash 2.x/3.x</a></li>
920         </ul>
921       </div>
922
923       <div class="section" id="vim">
924         <h2><a class="toc-backref" href=
925         "#id10">1.4&nbsp;&nbsp;&nbsp;Vim</a></h2>
926
927         <p>Vim e' l'editor di testo preferito dai sistemisti,
928         quindi sara' conveniente impostare fin da subito alcune
929         impostazioni per renderlo piu' comodo.</p>
930
931         <p>Assicurarsi che sia installata nel sistema la versione
932         completa dell'editor <tt class=
933         "docutils literal"><span class="pre">vim</span></tt>
934         nstallando il pacchetto vimi:</p>
935         <pre class="literal-block">
936        # apt-get install vim
937
938 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
939
940    " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
941    " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
942    " you can find below.  If you wish to change any of those settings, you should
943    " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
944    " everytime an upgrade of the vim packages is performed.  It is recommended to
945    " make changes after sourcing debian.vim since it alters the value of the
946    " 'compatible' option.
947
948    " This line should not be removed as it ensures that various options are
949    " properly set to work with the Vim-related packages available in Debian.
950    runtime! debian.vim
951
952    " Uncomment the next line to make Vim more Vi-compatible
953    " NOTE: debian.vim sets 'nocompatible'.  Setting 'compatible' changes numerous
954    " options, so any other options should be set AFTER setting 'compatible'.
955    "set compatible
956
957    " Vim5 and later versions support syntax highlighting. Uncommenting the next
958    " line enables syntax highlighting by default.
959    syntax on
960
961    " If using a dark background within the editing area and syntax highlighting
962    " turn on this option as well
963    set background=dark
964
965    " Uncomment the following to have Vim jump to the last position when
966    " reopening a file
967
968    if has("autocmd")
969      au BufReadPost * if line("'\"") &gt; 0 &amp;&amp; line("'\"") &lt;= line("$")
970        \| exe "normal! g'\"" | endif
971    endif
972
973    " Uncomment the following to have Vim load indentation rules and plugins
974    " according to the detected filetype.
975    if has("autocmd")
976      filetype plugin indent on
977    endif
978
979    " The following are commented out as they cause vim to behave a lot
980    " differently from regular Vi. They are highly recommended though.
981    set showcmd             " Show (partial) command in status line.
982    "set showmatch          " Show matching brackets.
983    set ignorecase          " Do case insensitive matching
984    "set smartcase          " Do smart case matching
985    "set incsearch          " Incremental search
986    set autowrite           " Automatically save before commands like :next and :make
987    "set hidden             " Hide buffers when they are abandoned
988    "set mouse=a            " Enable mouse usage (all modes) in terminals
989
990    " Source a global configuration file if available
991    " XXX Deprecated, please move your changes here in /etc/vim/vimrc
992    if filereadable("/etc/vim/vimrc.local")
993      source /etc/vim/vimrc.local
994    endif
995 </pre>
996       </div>
997
998       <div class="section" id="vnc">
999         <h2><a class="toc-backref" href=
1000         "#id11">1.5&nbsp;&nbsp;&nbsp;VNC</a></h2>
1001
1002         <p>I Virtual Network Computing (o VNC) sono software di
1003         controllo remoto e servono per amministrare il proprio
1004         computer a distanza o visuallizare la sessione di lavoro di
1005         un altro computer sul proprio a scopo didattico.
1006         Installando un server VNC sulla propria macchina ed
1007         impostando una opportuna password si consente ai client VNC
1008         di ricevere una immagine dello schermo ed eventualmente di
1009         inviare input di tastiera e mouse al computer server
1010         (durante le lezioni questo non e' possibile per gli
1011         studenti, solo Andrea esegue i comandi). In pratica si può
1012         gestire il computer server da un'altra postazione, come se
1013         fosse il proprio computer fisico.</p>
1014
1015         <p>Scaricare il pacchetto <tt class=
1016         "docutils literal"><span class=
1017         "pre">xtightvncviewer</span></tt> e lo script <tt class=
1018         "docutils literal"><span class="pre">guarda.sh</span></tt>
1019         in una posizione (collocazione nel <em>path</em> degli
1020         utenti, es <tt class="docutils literal"><span class=
1021         "pre">echo</span> <span class="pre">$PATH</span></tt> per
1022         visualizzare l'attuale path ) comoda per gli utenti ( in
1023         genere <tt class="docutils literal"><span class=
1024         "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1025
1026         <p>Procedura:</p>
1027         <pre class="literal-block">
1028 su root
1029 cd /bin
1030 wget http://debian.piffa.net/guarda.sh
1031 chmod +x guarda.sh
1032 exit
1033 </pre>
1034
1035         <p>Si noti che non e' possibile lanciare un applicativo sul
1036         server grafico di un utente da una shell in cui si sta
1037         lavorando come altro utente, anche se root. E' quindi
1038         necessario essere l'utente di sistema che si e' loggato
1039         inizialmente nella sessione grafica per poter lanciare lo
1040         script guarda.sh da una shell.</p>
1041
1042         <p>Controllare con <tt class=
1043         "docutils literal"><span class="pre">whoami</span></tt> di
1044         essere l'utente normale (es <tt class=
1045         "docutils literal"><span class="pre">utente</span>
1046         <span class="pre">|</span> <span class=
1047         "pre">studente</span> <span class="pre">|</span>
1048         <span class="pre">proprio</span> <span class=
1049         "pre">nome</span></tt> ), in caso si sia assunta una altra
1050         <tt class="docutils literal"><span class=
1051         "pre">id</span></tt> si apra un altra shell o si esca da
1052         quella attuale con <tt class=
1053         "docutils literal"><span class="pre">exit</span></tt> .</p>
1054       </div>
1055
1056       <div class="section" id="lista-dei-pacchetti-di-base">
1057         <h2><a class="toc-backref" href=
1058         "#id12">1.6&nbsp;&nbsp;&nbsp;Lista dei pacchetti di
1059         base</a></h2>
1060
1061         <p>I pacchetti installati generalmente <a class=
1062         "footnote-reference" href="#id2" id="id1" name=
1063         "id1">[1]</a> per poter seguire le lezioni sono:</p>
1064         <pre class="literal-block">
1065 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1066 </pre>
1067
1068         <table class="docutils footnote" frame="void" id="id2"
1069         rules="none">
1070           <colgroup>
1071             <col class="label">
1072             <col>
1073           </colgroup>
1074
1075           <tbody valign="top">
1076             <tr>
1077               <td class="label"><a class="fn-backref" href=
1078               "#id1">[1]</a></td>
1079
1080               <td><tt class="docutils literal"><span class=
1081               "pre">kde-core</span></tt> e' piu' leggero del
1082               pacchetto <tt class="docutils literal"><span class=
1083               "pre">kde</span></tt>, esiste anche un equivalente
1084               <tt class="docutils literal"><span class=
1085               "pre">gnome-core</span> <span class=
1086               "pre">gnome</span></tt> e il log-in manager
1087               <tt class="docutils literal"><span class=
1088               "pre">gdm</span></tt> per il l'ambiente grafico
1089               Gnome.</td>
1090             </tr>
1091           </tbody>
1092         </table>
1093       </div>
1094
1095       <div class="section" id="apt-configurazione">
1096         <h2><a class="toc-backref" href=
1097         "#id13">1.7&nbsp;&nbsp;&nbsp;Apt configurazione</a></h2>
1098
1099         <p>Vediamo i due file principali di apt:</p>
1100
1101         <ul class="simple">
1102           <li><tt class="docutils literal"><span class=
1103           "pre">/etc/apt/sources.list</span></tt></li>
1104
1105           <li><tt class="docutils literal"><span class=
1106           "pre">/etc/apt/apt.conf</span></tt></li>
1107         </ul>
1108
1109         <div class="section" id="sources-list">
1110           <h3><a class="toc-backref" href=
1111           "#id14">1.7.1&nbsp;&nbsp;&nbsp;sources.list</a></h3>
1112
1113           <p>Questo file contiene i sorgenti da cui <em>apt</em>
1114           preleva i pacchetti da installare tramite <em>dpkg</em>,
1115           vengono quindi precisati i metodi (ad es. http / ftp /
1116           cdrom / file), la release che si vuole tracciare (es
1117           <tt class="docutils literal"><span class=
1118           "pre">stable,</span> <span class="pre">testing,</span>
1119           <span class="pre">unstable</span></tt> oppure i
1120           corrispondenti release name es: <tt class=
1121           "docutils literal"><span class="pre">Lenny,</span>
1122           <span class="pre">Squeeze,</span> <span class=
1123           "pre">Sid</span></tt>), i rami di interesse (es:
1124           <tt class="docutils literal"><span class=
1125           "pre">main</span></tt> che e' l'archivio principale,
1126           <tt class="docutils literal"><span class=
1127           "pre">non-free</span></tt> per il software non libero,
1128           <tt class="docutils literal"><span class=
1129           "pre">contrib</span></tt> per i pacchetti non realizzati
1130           dai manutentori ufficiali).</p>
1131
1132           <p>Gli archivi sono generalmente:</p>
1133
1134           <ul class="simple">
1135             <li><tt class="docutils literal"><span class=
1136             "pre">deb</span></tt> per pacchetti Debian binari</li>
1137
1138             <li><tt class="docutils literal"><span class=
1139             "pre">deb-src</span></tt> per i pacchetti sorgenti
1140             (quindi da compilare, come il kernel) degli stessi
1141             pacchetti binari. In genere se non compilate spesso
1142             potete evitare di tracciare i sorgenti per risparmiare
1143             tempo e banda.</li>
1144           </ul>
1145
1146           <p><tt class="docutils literal"><span class=
1147           "pre">/etc/apt/sources.list</span></tt></p>
1148           <pre class="literal-block">
1149 # esempio di accesso a un CDROM:
1150 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1151
1152 # Archivio principale debian via http su piffa.net,
1153 # non funziona al difuori dell'aula dei corsi
1154 deb http://debian.piffa.net/debian/ Lenny main
1155 # deb http://debian.piffa.net/debian/ Lenny  non-free contrib
1156
1157 # Mirror da kernel.org da usare a casa:
1158 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1159
1160 # Security dal sito principale
1161 deb http://security.debian.org/ Lenny/updates main
1162 deb-src http://security.debian.org/ Lenny/updates main
1163
1164 # Debian volatile per le cose soggette a cambiamenti non legati
1165 # a dinamiche di sicurezza
1166 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1167 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1168
1169 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1170 # deb file:/mnt/mirror Sid main non-free contrib
1171 </pre>
1172         </div>
1173
1174         <div class="section" id="etc-apt-apt-conf">
1175           <h3><a class="toc-backref" href=
1176           "#id15">1.7.2&nbsp;&nbsp;&nbsp;/etc/apt/apt.conf</a></h3>
1177
1178           <p>Questo file contiene le opzioni di apt, come ad
1179           esempio il proxy:</p>
1180           <pre class="literal-block">
1181 Acquire::http::Proxy "http://10.10.208.254:3128";
1182 </pre>
1183
1184           <p>Si tenga conto che se si imposta un proxy per apt sul
1185           proprio portatile e tornati a casa propria si vuole
1186           scaricare nuovi pacchetti si dovra' disabilitare il
1187           proxy.</p>
1188         </div>
1189       </div>
1190     </div>
1191
1192     <div class="section" id="squid">
1193       <h1><a class="toc-backref" href=
1194       "#id16">2&nbsp;&nbsp;&nbsp;Squid</a></h1>
1195
1196       <p>Squid e' un proxy cache http (ma anche FTP e https)
1197       robusto e strutturato, puo' essere usato sia in reti
1198       relativamente piccole grazie alla semplicita' di
1199       configurazione che in scenari piu' complessi grazie alla
1200       possibilita' di gestirne in modo granulare le risorse
1201       partendo dalle configurazioni piu' semplici per la semplice
1202       <em>condivisione della navigazione</em> internet, la gestione
1203       degli accessi, il filtraggio dei contenuti (Squid e' una
1204       applicazione che si muove nel 4' livello del modello TCP/IP a
1205       differenza di un <em>ipfilter</em> limitato al 2') nel l
1206       bilanciamento del carico tra piu' hosts.</p>
1207
1208       <dl class="docutils">
1209         <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1210
1211         <dd>nasconde i client http alla rete internet: risulta solo
1212         il server proxy nei log dei server web frequentati dagli
1213         utenti di Squid.</dd>
1214       </dl>
1215
1216       <p>Cosa a volte sottovalutata, squid permette la navigazione
1217       web a una rete basata su <em>indirizzi ip privati</em> (es
1218       una 192.168.0.0/24). E se la rete privata deve <em>solo
1219       navigare</em> in internet, non serve un <em>NAT</em> od
1220       altro, basta il solo Squid. Per altro non servira' neanche un
1221       servizio DNS dato che <em>sara' il solo squid a risolvere i
1222       nomi di dominio</em> per i suoi client http.</p>
1223
1224       <p>Squid ascolta di default sulla porta 3128, per impostare
1225       <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1226       "docutils literal"><span class=
1227       "pre">/etc/apt/apt.conf</span></tt></p>
1228       <pre class="literal-block">
1229 Acquire::http::Proxy "10.10.208.254:3128";
1230 </pre>
1231
1232       <p>Per installare Squid si usino i pacchetti:</p>
1233       <pre class="literal-block">
1234 squid3
1235 </pre>
1236
1237       <div class="section" id="configurazione-squid-conf">
1238         <h2><a class="toc-backref" href=
1239         "#id17">2.1&nbsp;&nbsp;&nbsp;Configurazione:
1240         squid.conf</a></h2>
1241
1242         <p>Segue un estratto delle direttive principali viste in
1243         aula presenti nel file di configurazione <tt class=
1244         "docutils literal"><span class=
1245         "pre">/etc/squid3/squid.conf</span></tt> .</p>
1246
1247         <div class="section" id="cache-dir">
1248           <h3><a class="toc-backref" href=
1249           "#id18">2.1.1&nbsp;&nbsp;&nbsp;Cache_dir</a></h3>
1250
1251           <p>Cache dir serve per impostare dimensione e percorso
1252           della cache creata sul supporto di storaggio. Essendo la
1253           dimensione di default della cache pari a <tt class=
1254           "docutils literal"><span class="pre">~100</span>
1255           <span class="pre">MB</span></tt> e' altamente
1256           consigliabili aumentare questo parametro se si vuole
1257           poter utilizzare la funzione di <em>cache</em> http del
1258           software.</p>
1259
1260           <p>La dimensione ovviamente dipendera' dallo spazio
1261           disponibile, dimensioni tipiche e massime degli oggetti
1262           che si vuole tenere in cache (un solo file <em>.iso e'
1263           circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1264           <tt class="docutils literal"><span class="pre">150</span>
1265           <span class="pre">MB</span></tt>, un pacchetto debian
1266           circa <tt class="docutils literal"><span class=
1267           "pre">20</span> <span class="pre">MB</span></tt>), numero
1268           dei client.</p>
1269
1270           <p>Si presti poi attenzione alla natura dei dati che
1271           saranno salvati nella cache: sono tutti dati facilmenti
1272           sostituibili (gli originali sono <em>on-line</em>) la cui
1273           perdita non arreca danni permanenti. Questo rende la
1274           cache di Squid un possibile candidato ad un <em>RAID
1275           stripe</em> (livello 0), con vantaggi sia per le
1276           prestazioni (e la velocita' di navigazione e' uno dei
1277           motivi per cui si installa Squid) che per l'utilizzo
1278           estensivo dello spazio di storaggio. Questo fino al
1279           momento in cui per voi non sia piu' importante
1280           <em>garantire la disponibilita' del servizio</em> (se il
1281           RAID stripe dovesse rompersi gli utenti non potrebbero
1282           piu' navigare, cosa che per natura dello stripe e'
1283           maggiormente probabile rispetto ad un <em>mirror</em> o a
1284           un filesytem <em>normale</em>) con un RAID mirror o
1285           5.</p>
1286
1287           <p>Altra considerazione: i dati del proxy vengono slavati
1288           sul filesytem del server dietro richiesta di utenti
1289           esterni talvolta sconosciuti. Come per i servizi di file
1290           sharing o per la posta elettronica non c'e' motivo che il
1291           filesystem su cui sono ospitati questi dati abbia i
1292           privilegi di eseguibilita' o suid (in genere si puo'
1293           anche usare <em>noatime</em> per renderlo piu' veloce,
1294           che si usi o meno il journal dipende dalle preferenze:
1295           affidabilita' oppure prestazioni):</p>
1296
1297           <p>/etc/fstab</p>
1298           <pre class="literal-block">
1299 ...
1300 # Filesystem per Squid http cache
1301 /dev/md3/       /var/spool/squid/       ext3,noexec,nosuid,noatime  0 3
1302 </pre>
1303
1304           <p>Ora possiamo impostare la cache direttamente nel file
1305           <tt class="docutils literal"><span class=
1306           "pre">/etc/squid3/squid.conf</span></tt>:</p>
1307           <pre class="literal-block">
1308 #TAG: cache_dir (riga 1628)
1309 #       Usage:
1310 #
1311 #       cache_dir Type Directory-Name Fs-specific-data [options]
1312 #
1313 #       You can specify multiple cache_dir lines to spread the
1314 #       cache among different disk partitions.
1315 #       ...
1316 #Default:
1317 # cache_dir ufs /var/spool/squid3 100 16 256
1318 cache_dir aufs /var/spool/squid3 300 24 256
1319 #         algoritmo
1320 #              path della cache
1321 #                                dimensione in MB
1322 #                                    directory primo livello
1323 #                                       secondo livello di directory
1324 </pre>
1325
1326           <p>Se si modifica la struttura del filesytem della cache
1327           di Squid, ad esempio variando il numero delle directory,
1328           puo' essere opportuno rigenerare la struttura della cache
1329           di squid (per lo meno se si <em>aumenta il numero delle
1330           directory di primo o secondo livello). Tipicamente e'
1331           opportuno cancellare (se si ha *ridotto</em> il numero
1332           delle diectory) la vecchia cache e poi generare una nuova
1333           struttura. Se si vuole <em>star nel sicuro</em> ogni
1334           volta che si modifica l'impostazione delle directory
1335           <em>si svuoti la vecchia cache e se ne generi una
1336           nuova</em></p>
1337           <pre class="literal-block">
1338 # /etc/init.d/squid3 stop
1339 # rm -r /var/spool/squid3/??
1340 # squid3 -z
1341 # /etc/init.d/squid3 start
1342 </pre>
1343         </div>
1344
1345         <div class="section" id="tag-maximum-object-size">
1346           <h3><a class="toc-backref" href=
1347           "#id19">2.1.2&nbsp;&nbsp;&nbsp;TAG:
1348           maximum_object_size</a></h3>
1349
1350           <p>Questa direttiva imposta la dimensione massima degli
1351           oggetti che vengono slvati sul supporto di storaggio,
1352           oggetti di dimensioni superiori saranno comunque
1353           scaricati ma non tenuti in cache.</p>
1354
1355           <p>TAG: maximum_object_size (1760):</p>
1356           <pre class="literal-block">
1357 # TAG: maximum_object_size (1760)
1358 #       Objects larger than this size will NOT be saved on disk.  The
1359 #       value is specified in kilobytes, and the default is 4MB.  If
1360 #       you wish to get a high BYTES hit ratio, you should probably
1361 #       increase this (one 32 MB object hit counts for 3200 10KB
1362 #       hits).  If you wish to increase speed more than your want to
1363 #       save bandwidth you should leave this low.
1364 #
1365 #       NOTE: if using the LFUDA replacement policy you should increase
1366 #       this value to maximize the byte hit rate improvement of LFUDA!
1367 #       See replacement_policy below for a discussion of this policy.
1368 #
1369 #Default:
1370 # maximum_object_size 4096 KB
1371 maximum_object_size 150 MB
1372 </pre>
1373         </div>
1374
1375         <div class="section" id="tag-cache-mem">
1376           <h3><a class="toc-backref" href=
1377           "#id20">2.1.3&nbsp;&nbsp;&nbsp;TAG: cache_mem</a></h3>
1378
1379           <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1380           utilizzata per la cache di Squid. Questo dipendera' dalla
1381           RAM disponibile sul sistema, e da quanta di questa volete
1382           mettere a disposizione di Squid (altri servizi
1383           iimportanti girano sulla stessa macchina?). Questo
1384           paramentro influisce sulle prestazioni e sul degrado dei
1385           supporti di storaggio (sopratutto se magnetici).</p>
1386
1387           <p>Se si stesse pensando di usare dell'hardware
1388           <em>embedded</em> a basse prestazioni / consumo per
1389           realizzare un server gateway / NAT / Squid si tenga
1390           presente che Squid e' relativamente esoso di risorse:
1391           avra' bisogno di una macchina con <tt class=
1392           "docutils literal"><span class="pre">~25MB</span></tt>
1393           (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1394           servire decorosamente una decina di client http su una
1395           rete ethernet 10/100. In questo caso non fate scendere
1396           <tt class="docutils literal"><span class=
1397           "pre">cache_mem</span></tt> sotto i <tt class=
1398           "docutils literal"><span class="pre">2/4</span>
1399           <span class="pre">MB</span></tt> pena un accesso continuo
1400           al supporto di storaggio.</p>
1401
1402           <p>Se invece si disponesse di una macchina dedicata a
1403           Squid con gigabytes di RAM non si esiti a dedicarne buona
1404           parte a <em>cache_mem</em>.</p>
1405
1406           <p>TAG: cache_mem (1566):</p>
1407           <pre class="literal-block">
1408 #       'cache_mem' specifies the ideal amount of memory to be used
1409 #       for:
1410 #               * In-Transit objects
1411 #               * Hot Objects
1412 #               * Negative-Cached objects
1413 #Default:
1414 # cache_mem 8 M
1415 cache_mem 100 M
1416 </pre>
1417         </div>
1418
1419         <div class="section" id="tag-minimum-object-size">
1420           <h3><a class="toc-backref" href=
1421           "#id21">2.1.4&nbsp;&nbsp;&nbsp;TAG:
1422           minimum_object_size</a></h3>
1423
1424           <p>Questo parametro imposta la dimensione minima degli
1425           oggetti salvati nella cache. Settato a <tt class=
1426           "docutils literal"><span class="pre">0</span></tt> o a
1427           valori molto piccoli puo' influire negativamente sulla
1428           deframmentazione del filesytem e consumare un numero
1429           elevato di <em>inode</em> (cosa non piu' importante con
1430           ext4 o altri filesytem).</p>
1431
1432           <p>TAG: minimum_object_size:</p>
1433           <pre class="literal-block">
1434 #  TAG: minimum_object_size     (bytes)
1435 #       Objects smaller than this size will NOT be saved on disk.  The
1436 #       value is specified in kilobytes, and the default is 0 KB, which
1437 #       means there is no minimum.
1438 #
1439 #Default:
1440 # minimum_object_size 0 KB
1441 minimum_object_size 0 KB
1442 </pre>
1443         </div>
1444       </div>
1445
1446       <div class="section" id=
1447       "negoziazione-degli-accesi-al-servizio">
1448         <h2><a class="toc-backref" href=
1449         "#id22">2.2&nbsp;&nbsp;&nbsp;Negoziazione degli accesi al
1450         servizio</a></h2>
1451
1452         <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1453         <em>open relay</em> , si deve quindi limitare la rete che
1454         puo' accedere al servizio.</p>
1455
1456         <dl class="docutils">
1457           <dt>Open Relay:</dt>
1458
1459           <dd>Un servizio a cui possono accedere tutti
1460           indiscriminatamente. La cosa puo' andare bene per servizi
1461           come i server web, che aspirano per loro natura al
1462           maggior numero possibile di utenti, ma non a servizi come
1463           i proxy http oppure ai server di posta elettronica (che
1464           permetterebbero l'invio di SPAM).</dd>
1465         </dl>
1466
1467         <p>Generalmente non volete che il vostro proxy http venga
1468         usato da persone sconosciute le quali sostanzialmente
1469         <em>navigherebbero sotto l'identita' del vostro proxy</em>
1470         (probabilmente per visionare materiali che non vorrebbero
1471         fossero ricondotti direttamente a loro, per motivi che sta
1472         a voi prendere in considerazione) consumando traffico e
1473         banda della vostra connessione a internet. Tenere Squid in
1474         modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1475         modo per essere inseriti in una <em>black list</em>.</p>
1476
1477         <p>Per poter limitare gli accessi a Squid dal punto di
1478         vista dell'applicazione (quarto livello TCP/IP) si
1479         identifichera' inizialmente l'entita' <em>rete locale</em>
1480         (es: <tt class="docutils literal"><span class=
1481         "pre">localnet</span></tt>) con una ACL di tipo
1482         <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1483         / range di ip</em> della nostra rete.</p>
1484
1485         <blockquote>
1486           Dopodiche l'accesso (<tt class=
1487           "docutils literal"><span class=
1488           "pre">http_access</span></tt>) si concedera'
1489           (<em>allow</em>) a questa entita' (es: <tt class=
1490           "docutils literal"><span class=
1491           "pre">localnet</span></tt>) negando chiunque altro.
1492         </blockquote>
1493
1494         <p>Per maggiori dettagli sulla sintassi utilizzabile per
1495         esprimere i range di ip: <a class="reference external"
1496         href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1497         http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1498
1499         <div class="section" id="acl-e-http-access">
1500           <h3><a class="toc-backref" href=
1501           "#id23">2.2.1&nbsp;&nbsp;&nbsp;ACL e http access</a></h3>
1502
1503           <p>Si proceda a creare una <tt class=
1504           "docutils literal"><span class="pre">ACL</span></tt> di
1505           tipo <tt class="docutils literal"><span class=
1506           "pre">src</span></tt> per identificare la lostra rete
1507           locale, poi si abiliti l'accesso a questa con la
1508           direttiva <tt class="docutils literal"><span class=
1509           "pre">http_access</span></tt>. Tutto quanto non e'
1510           espressamente autorizzato viene poi negato da un
1511           <tt class="docutils literal"><span class=
1512           "pre">http_access</span> <span class="pre">deny</span>
1513           <span class="pre">all</span></tt> finale.</p>
1514           <pre class="literal-block">
1515 #  TAG: acl
1516 #       Defining an Access List
1517 #
1518 #       Every access list definition must begin with an aclname and acltype,
1519 #       followed by either type-specific arguments or a quoted filename that
1520 #       they are read from.
1521 #       ...
1522 #       ***** ACL TYPES AVAILABLE *****
1523 #
1524 #       acl aclname src ip-address/netmask ...          # clients IP address
1525 # riga 588
1526
1527 # Example rule allowing access from your local networks.
1528 # Adapt to list your (internal) IP networks from where browsing
1529 # should be allowed
1530 #acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
1531 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1532 #acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
1533 #
1534 acl localnet src 10.10.208.0/24
1535
1536 # Riga 606
1537 #  TAG: http_access
1538 #       Allowing or Denying access based on defined access lists
1539 #
1540 #       Access to the HTTP port:
1541 #       http_access allow|deny [!]aclname ...
1542 #
1543 #       NOTE on default values:
1544 #
1545 #       If there are no "access" lines present, the default is to deny
1546 #       the request.
1547
1548 # Riga 643
1549 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1550
1551 # Example rule allowing access from your local networks.
1552 # Adapt localnet in the ACL section to list your (internal) IP networks
1553 # from where browsing should be allowed
1554 #http_access allow localnet
1555 http_access allow localnet
1556 </pre>
1557         </div>
1558       </div>
1559
1560       <div class="section" id="testare-squid">
1561         <h2><a class="toc-backref" href=
1562         "#id24">2.3&nbsp;&nbsp;&nbsp;Testare Squid</a></h2>
1563
1564         <p>Configurato squid e' fondamentale testarne il corretto
1565         funzionamento per assicurarsi di non aver creato un
1566         <em>open-relay</em>. Per fare dei test significativi serve
1567         utilizzare degli host remoti: ci si connetta via ssh a
1568         questi per poi utilizzare <tt class=
1569         "docutils literal"><span class="pre">wget</span></tt> da
1570         riga di comando.</p>
1571
1572         <div class="section" id="client-wgetrc">
1573           <h3><a class="toc-backref" href=
1574           "#id25">2.3.1&nbsp;&nbsp;&nbsp;Client: ~/.wgetrc</a></h3>
1575
1576           <p>Nel file <tt class="docutils literal"><span class=
1577           "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1578           un file nascosto) si puo' impostare il proxy per wget. Si
1579           utililizzi l'indirizzo ip del server che si vuole
1580           testare, e si seguano i log <tt class=
1581           "docutils literal"><span class=
1582           "pre">/var/log/squid3/access.log</span></tt> sul
1583           server.</p>
1584
1585           <p>Da notare che la prova va' fatta su una macchina della
1586           rete che si vuole testare, non da <em>localhost</em>. Per
1587           altro se si utilizzasse <em>direttamente</em> <tt class=
1588           "docutils literal"><span class=
1589           "pre">localhost</span></tt> non si testerebbe la
1590           <em>ACL</em> predisposta, dato che si si rientrerebbe
1591           nella ACL (pre-configurata di default) <tt class=
1592           "docutils literal"><span class=
1593           "pre">localhost</span></tt>.</p>
1594
1595           <dl class="docutils">
1596             <dt>.wgetrc</dt>
1597
1598             <dd>http_proxy=10.10.208.178:3128</dd>
1599           </dl>
1600
1601           <p>Si proceda a scaricare dal client scelto con un
1602           wget:</p>
1603           <pre class="literal-block">
1604 wget http://www.google.it
1605 </pre>
1606         </div>
1607
1608         <div class="section" id="server-access-log">
1609           <h3><a class="toc-backref" href=
1610           "#id26">2.3.2&nbsp;&nbsp;&nbsp;Server:
1611           access.log</a></h3>
1612
1613           <p>Si puo' controllare il corretto funzionamento del
1614           server seguendo i log di accesso a Squid:</p>
1615           <pre class="literal-block">
1616 # tail -f /var/log/squid3/access.log
1617 </pre>
1618
1619           <p>In oltre e' possibile configurare diversi
1620           <em>analizzatori di log</em> come <tt class=
1621           "docutils literal"><span class=
1622           "pre">Webalizer</span></tt> per studiare i log di
1623           Squid.</p>
1624         </div>
1625       </div>
1626     </div>
1627
1628     <div class="section" id="apache">
1629       <h1><a class="toc-backref" href=
1630       "#id27">3&nbsp;&nbsp;&nbsp;Apache</a></h1>
1631
1632       <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1633       dato alla piattaforma server Web modulare piu' diffusa (ma
1634       anche al gruppo di lavoro open source che ha creato,
1635       sviluppato e aggiornato il software server), in grado di
1636       operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1637
1638       <p>Un server web e' un processo, e per estensione il computer
1639       su cui e' in esecuzione, che si occupa di fornire, su
1640       richiesta del browser, una pagina web (spesso scritta in
1641       HTML). Le informazioni inviate dal server web viaggiano in
1642       rete trasportate dal protocollo HTTP. L'insieme di server web
1643       dÃ&nbsp; vita al World Wide Web, uno dei servizi piu'
1644       utilizzati di Internet.</p>
1645
1646       <div class="section" id="pacchetti-da-installare">
1647         <h2><a class="toc-backref" href=
1648         "#id28">3.1&nbsp;&nbsp;&nbsp;Pacchetti da
1649         installare::</a></h2>
1650
1651         <blockquote>
1652           apache2 apache2-doc
1653         </blockquote>
1654
1655         <p>Con la release 2.0 di Apache viene automaticamente resa
1656         disponibile anche la versione SSL (Secure Socket Layer,
1657         cpnnessioni criptate ) del web server.</p>
1658       </div>
1659
1660       <div class="section" id="configurazione-di-apache">
1661         <h2><a class="toc-backref" href=
1662         "#id29">3.2&nbsp;&nbsp;&nbsp;Configurazione di
1663         Apache</a></h2>
1664
1665         <p>I file di configurazione di apache si trovano nella
1666         cartella: <tt class="docutils literal"><span class=
1667         "pre">/etc/apache2</span></tt> e sono strutturati come
1668         descritto nel file <tt class=
1669         "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1670         . Sostanzialmente lo schema e' il seguente:</p>
1671
1672         <dl class="docutils">
1673           <dt>apache2.conf</dt>
1674
1675           <dd>
1676             <p class="first">File di configurazione principale del
1677             servizio.</p>
1678
1679             <p class="last">httpd.conf e' il vecchio file di
1680             configurazione di Apache1, presente per motivi di
1681             retrocompatibilita' e' generalemente vuoto.</p>
1682           </dd>
1683
1684           <dt>ports.conf</dt>
1685
1686           <dd>In questo file vengono specificate le porte sulle
1687           quali resta in ascolto il server web. Si noti che
1688           utilizzando dei virtual hosts generalmente viene
1689           specificata per questi la porta su cui ascoltare nel file
1690           di configurazione del virtual host, ad es: <tt class=
1691           "docutils literal"><span class=
1692           "pre">&lt;VirtualHost</span> <span class=
1693           "pre">*:80&gt;</span></tt></dd>
1694
1695           <dt>sites-available</dt>
1696
1697           <dd>In questa cartella vengono raccolti i file di
1698           configurazione dei virtual host disponibili.</dd>
1699
1700           <dt>sites-enabled</dt>
1701
1702           <dd>In questa cartella sono contenuti dei link simbolici
1703           ai files in ../sites-available : se il link e' presente
1704           in questa cartella il virtual host e' abilitato.</dd>
1705
1706           <dt>mods-available</dt>
1707
1708           <dd>Stesso metodo per i moduli: in questa cartella ci
1709           sono i moduli veri e propri che verranno poi abilitati
1710           grazie all'esistenza di link simbolici nella cartella
1711           mods-enabled .</dd>
1712
1713           <dt>mods-enabled</dt>
1714
1715           <dd>Moduli abilitati, effettivamente caricati.</dd>
1716         </dl>
1717       </div>
1718
1719       <div class="section" id="apache-conf">
1720         <h2><a class="toc-backref" href=
1721         "#id30">3.3&nbsp;&nbsp;&nbsp;apache.conf</a></h2>
1722
1723         <p>File di configurazione del servizio Apache, contiene le
1724         impostazioni generiche (ad esempio utilizzo della RAM e
1725         risorse di sistema) dell'intero servizio. Nella
1726         configurazione di default per Debian non viene definito un
1727         vero e proprio sito di default ma solo dei virtual
1728         hosts.</p>
1729
1730         <p>Guardiamo alcune direttive interessanti:</p>
1731
1732         <dl class="docutils">
1733           <dt>Timeout</dt>
1734
1735           <dd>Numero di secondi da aspettare prima di chiudere la
1736           connessione con il client. Questo parametro serve a
1737           liberare le risorse di sistema nel caso che un client,
1738           magar a causa di una connessione particolarmente lenta o
1739           instabili, tenga attivo indefinitivamente un processo di
1740           apache.</dd>
1741
1742           <dt>KeepAlive</dt>
1743
1744           <dd>L'estensione keep-alive (http 1.0) congiuntamente
1745           alle connessioni persistenti (http 1.1) permettono al
1746           server di rispondere a piu' richieste dei client mediante
1747           la stessa connessione. Il protocoll http per sua natura
1748           e' senza stato (<em>statelessi</em> ), quindi ogni
1749           risorsa richiesta (per pagine web si pensi ad esempio
1750           alle immagini) dal client necessita di una connessione
1751           autonoma. Keep-alive permette di ottimizzare la
1752           connessione anche fino al 50% a seconda delle situazioni
1753           e contenuti.</dd>
1754
1755           <dt>Server-Pool Size Regulation</dt>
1756
1757           <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1758           Tutti spiegati nel manuale di apache) servono per
1759           attribuire le risorse di sistema disponibili al server
1760           Apache. Tenere questi parametri bassi serve a limitare il
1761           rischio di Denial of Service per il server, nel caso
1762           offra altri servizi. I settagi di default sono come
1763           sempre abbastanza conservativi, se si conta di usare il
1764           proprio Apache per servire un sito web con molti
1765           visitatori sara' necessario aumentare sensibilmente le
1766           impostazioni di base.</dd>
1767
1768           <dt>AccessFileName</dt>
1769
1770           <dd>Il nome del file che viene onorato per modificare le
1771           impostazioni per una singola directory, legato alla
1772           direttiva AllowOverride .</dd>
1773         </dl>
1774       </div>
1775
1776       <div class="section" id="installazione-di-php">
1777         <h2><a class="toc-backref" href=
1778         "#id31">3.4&nbsp;&nbsp;&nbsp;Installazione di PHP</a></h2>
1779
1780         <p>Pacchetti da installare: <tt class=
1781         "docutils literal"><span class="pre">php5</span>
1782         <span class="pre">php-pear</span></tt></p>
1783
1784         <div class="section" id="test-del-modulo-php">
1785           <h3><a class="toc-backref" href=
1786           "#id32">3.4.1&nbsp;&nbsp;&nbsp;Test del modulo
1787           php</a></h3>
1788
1789           <p>Creare nella cartella <tt class=
1790           "docutils literal"><span class="pre">/var/www</span></tt>
1791           (o altra cartella visibile) un file con estensione *.php
1792           (es <tt class="docutils literal"><span class=
1793           "pre">/var/ww/info.php</span></tt> contenete codice php
1794           eseguibile dall'interprete, ad es:</p>
1795           <pre class="literal-block">
1796 &lt;?php phpinfo() ; ?&gt;
1797 </pre>
1798
1799           <p>Questa funzione di php generera' la tipica pagina con
1800           le impostazioni attuali per PHP. Richiamando la pagina
1801           (es: <tt class="docutils literal"><span class=
1802           "pre">http://localhost/info.php</span></tt> ) verra
1803           generata dall'interprete PHP la pagina HTML e resa
1804           disponibile tramite Apache ai utclient HTTP, a prova del
1805           correto funzionamento del modulo di PHP e della sua
1806           integrazione con il serv web Apache. In caso contrario se
1807           il client http proporra di scaricare la pagina invece che
1808           visualizzarla nel browser: non funziona l'interprete di
1809           php o sono mal configurati i MIME-type. prima di tutto
1810           assicurarsi di aver fatoo ripartire Apache.</p>
1811         </div>
1812
1813         <div class="section" id=
1814         "installazione-del-supporto-per-mysql">
1815           <h3><a class="toc-backref" href=
1816           "#id33">3.4.2&nbsp;&nbsp;&nbsp;Installazione del supporto
1817           per Mysql</a></h3>
1818
1819           <p>Installare i pacchetti:</p>
1820           <pre class="literal-block">
1821 php5-mysql phpmyadmin
1822 </pre>
1823
1824           <p>Controllare tramite la pagina php.info che sia
1825           abilitato il supporto per Mysql (ripartito Apache,
1826           ricaricare la pagina e cercare con CTRL+f <tt class=
1827           "docutils literal"><span class=
1828           "pre">mysql</span></tt>).</p>
1829         </div>
1830
1831         <div class="section" id="phpmyadmin">
1832           <h3><a class="toc-backref" href=
1833           "#id34">3.4.3&nbsp;&nbsp;&nbsp;phpmyadmin</a></h3>
1834
1835           <p>L'interfaccia web Phpmyadmin non richede
1836           necessariamente la presenza di un database Mysql locale,
1837           puo' infatti essere utilizzata per gestire databases
1838           remoti (il suo file di configurazione: <tt class=
1839           "docutils literal"><span class=
1840           "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1841           caso si voglia installare localmente Mysql si utilizzi il
1842           pacchetto <tt class="docutils literal"><span class=
1843           "pre">mysql-server</span></tt> .</p>
1844
1845           <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1846           <tt class="docutils literal"><span class=
1847           "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1848           non fosse controllare che sia incluso il file <tt class=
1849           "docutils literal"><span class=
1850           "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1851           <tt class="docutils literal"><span class=
1852           "pre">/etc/apache2/conf.d/</span></tt> .</p>
1853         </div>
1854
1855         <div class="section" id=
1856         "installazione-del-supporto-per-postgresql">
1857           <h3><a class="toc-backref" href=
1858           "#id35">3.4.4&nbsp;&nbsp;&nbsp;Installazione del supporto
1859           per Postgresql</a></h3>
1860
1861           <p>Installare i pacchetti:</p>
1862           <pre class="literal-block">
1863 php5-pgsql phppgadmin
1864 </pre>
1865
1866           <p>Controllare tramite la pagina php.info che sia
1867           abilitato il supporto per PostgreSQL (ripartito Apache,
1868           ricaricare la pagina e cercare con CTRL+f <tt class=
1869           "docutils literal"><span class=
1870           "pre">pgsql</span></tt>).</p>
1871         </div>
1872
1873         <div class="section" id="phppgadmin">
1874           <h3><a class="toc-backref" href=
1875           "#id36">3.4.5&nbsp;&nbsp;&nbsp;phppgadmin</a></h3>
1876
1877           <p>L'interfaccia web Phppgadmin per il database server
1878           PostgreSQL non richede necessariamente la presenza di un
1879           database locale, puo' infatti essere utilizzata per
1880           gestire databases remoti (il suo file di configurazione:
1881           <tt class="docutils literal"><span class=
1882           "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1883           caso si voglia installare localmente Mysql si utilizzi il
1884           pacchetto <tt class="docutils literal"><span class=
1885           "pre">postgresql</span></tt> .</p>
1886
1887           <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1888           <tt class="docutils literal"><span class=
1889           "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1890           non fosse controllare che sia incluso il file <tt class=
1891           "docutils literal"><span class=
1892           "pre">/etc/phppgadmin/apache.conf</span></tt> in
1893           <tt class="docutils literal"><span class=
1894           "pre">/etc/apache2/conf.d/</span></tt> .</p>
1895         </div>
1896       </div>
1897
1898       <div class="section" id="virtual-hosts">
1899         <h2><a class="toc-backref" href=
1900         "#id37">3.5&nbsp;&nbsp;&nbsp;Virtual hosts</a></h2>
1901
1902         <blockquote>
1903           <ul class="simple">
1904             <li><a class="reference external" href=
1905             "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1906
1907             <li><a class="reference external" href=
1908             "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1909             http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1910           </ul>
1911         </blockquote>
1912
1913         <p>I virtual host permettono di avere piu' siti internet
1914         disponibili tramite lo stesso server web, eventualmente
1915         mappati su un solo indirizzo ip. Sono generalemente di due
1916         tipi:</p>
1917
1918         <blockquote>
1919           <ul class="simple">
1920             <li>Basati su <em>indirizzi ip</em>. Se si ha la
1921             possibilita' di avere piu' indirizzi ip dedicati per i
1922             diversi siti che si vuole servire. ES: <tt class=
1923             "docutils literal"><span class=
1924             "pre">&lt;VirtualHost</span> <span class=
1925             "pre">192.168.0.2:80&gt;</span></tt> . Soluzione
1926             dispendiosa, si tende ad usarla solo se servono
1927             certificati di sicurezza (SSL ) dedicati per ogni
1928             sito.</li>
1929
1930             <li>Basati su <em>nomi di dominio</em> che puntano allo
1931             stesso ip. Soluzione piu' economica e diffusa che si
1932             basa sulle funzionalita' di http 1.1 .</li>
1933           </ul>
1934         </blockquote>
1935
1936         <p>Prenderemo in esame la gestione di virtual hosts basati
1937         su nomi di dominio.</p>
1938
1939         <div class="section" id="gestione-dns">
1940           <h3><a class="toc-backref" href=
1941           "#id38">3.5.1&nbsp;&nbsp;&nbsp;Gestione DNS</a></h3>
1942
1943           <p>Prima di tutto per poter impostare i virtual hosts
1944           dovete avere un server DNS che risolva i vostri nomi di
1945           dominio sull'indirizzo ip del server. Questo si puo'
1946           ottenere in vari modi, ad es:</p>
1947
1948           <blockquote>
1949             <dl class="docutils">
1950               <dt><em>Bind</em> (DNS server)</dt>
1951
1952               <dd>Impostare i campi A nelle proprie zone gestite
1953               dal server dns Bind. Ad es: <tt class=
1954               "docutils literal"><span class=
1955               "pre">papo</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1956               <span class=
1957               "pre">A</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1958               <span class="pre">212.22.136.248</span></tt></dd>
1959
1960               <dt><em>Servizio DNS dinamico on line</em>.</dt>
1961
1962               <dd>Utilizzare un servizio come ad es: <a class=
1963               "reference external" href=
1964               "https://www.dyndns.com/">https://www.dyndns.com/</a>
1965               per mappare nomi di dominio sul proprio indirizzo ip,
1966               comodo ad esempio se si dispone di un indirzzo ip
1967               pubblico (anche se dinamico) per la propria
1968               connessione ad internet.</dd>
1969
1970               <dt><em>Dnsmasq</em> (DNS server)</dt>
1971
1972               <dd>Utilizzabile a livello locale per fare dei test,
1973               utilizzando direttive come: <tt class=
1974               "docutils literal"><span class=
1975               "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
1976
1977               <dt><tt class="docutils literal"><span class=
1978               "pre">/etc/hosts</span></tt></dt>
1979
1980               <dd>Per prove <em>strettamente a livello locale</em>
1981               potete impostare i nomi dei vostri virtual server nel
1982               file /etc/hosts .</dd>
1983             </dl>
1984           </blockquote>
1985           <pre class="literal-block">
1986 # dig 177.piffa.net
1987
1988 ; &lt;&lt;&gt;&gt; DiG 9.5.1-P1 &lt;&lt;&gt;&gt; 177.piffa.net
1989 ;; global options:  printcmd
1990 ;; Got answer:
1991 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 38036
1992 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
1993
1994 ;; QUESTION SECTION:
1995 ;177.piffa.net.                 IN      A
1996
1997 ;; ANSWER SECTION:
1998 177.piffa.net.          0       IN      A       10.10.208.177
1999
2000 ;; Query time: 12 msec
2001 ;; SERVER: 10.10.208.254#53(10.10.208.254)
2002 ;; WHEN: Wed May  6 12:27:08 2009
2003 ;; MSG SIZE  rcvd: 47
2004 </pre>
2005
2006           <p>La parte interessante e' <tt class=
2007           "docutils literal"><span class=
2008           "pre">177.piffa.net.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2009           <span class=
2010           "pre">0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2011           <span class="pre">IN</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2012           <span class=
2013           "pre">A</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2014           <span class="pre">10.10.208.177</span></tt> . Il nome di
2015           dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2016           , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2017           dovra' essere disponibile un virtual host che corrisponde
2018           al nome <tt class="docutils literal"><span class=
2019           "pre">177.piffa.net</span></tt> .</p>
2020         </div>
2021
2022         <div class="section" id="virtual-host">
2023           <h3><a class="toc-backref" href=
2024           "#id39">3.5.2&nbsp;&nbsp;&nbsp;Virtual host</a></h3>
2025
2026           <p>Esempio di Virtual host:</p>
2027           <pre class="literal-block">
2028 &lt;VirtualHost *:80 &gt;
2029     ServerName 177.piffa.net
2030     DocumentRoot /var/www/177.piffa.net/
2031     ServerAdmin webmaster@177.piffa.net
2032 &lt;/VirtualHost&gt;
2033 </pre>
2034
2035           <ol class="arabic simple">
2036             <li><tt class="docutils literal"><span class=
2037             "pre">&lt;VirtualHost</span> <span class=
2038             "pre">\*:80</span> <span class="pre">&gt;</span></tt>
2039             La prima riga indica l'inizio della stanza relativa al
2040             nostro virtual host, che ascolotera' su qualunque
2041             indirizzo ip (nel caso il server abbia piu' indirizzi
2042             dai quali e' raggiungibile) sulla porta <tt class=
2043             "docutils literal"><span class=
2044             "pre">80</span></tt>.</li>
2045
2046             <li><tt class="docutils literal"><span class=
2047             "pre">Server/name</span></tt> precisa quale sara' il
2048             nome di dominio a cui verra' associato questo sito
2049             rispetto ad altri eventualmenti presenti sullo stesso
2050             server web.</li>
2051
2052             <li><tt class="docutils literal"><span class=
2053             "pre">DocumentRoot</span></tt> : il path della
2054             directory che contiene le pagine del sito.</li>
2055
2056             <li><tt class="docutils literal"><span class=
2057             "pre">ServerAdmin</span></tt>: l'indirizzo del
2058             webmaster, in modo da poterlo contattare in caso di
2059             problemi col sito.</li>
2060
2061             <li><tt class="docutils literal"><span class=
2062             "pre">&lt;/VirtualHost&gt;</span></tt>: <em>tag</em> di
2063             chiusura della stanza di definizione del virtual
2064             host.</li>
2065           </ol>
2066
2067           <p>Quelle che abbiamo appena visto sono le direttive
2068           essenziali per definire un sito virtuale, potrebbe essere
2069           utile aggiungene altre:</p>
2070
2071           <ul>
2072             <li>
2073               <dl class="first docutils">
2074                 <dt><tt class="docutils literal"><span class=
2075                 "pre">ErrorLog</span> <span class=
2076                 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2077
2078                 <dd>
2079                   <p class="first last">Log degli errori separato
2080                   dai restanti siti web ospitati dal server.</p>
2081                 </dd>
2082               </dl>
2083             </li>
2084
2085             <li>
2086               <dl class="first docutils">
2087                 <dt><tt class="docutils literal"><span class=
2088                 "pre">LogLevel</span> <span class=
2089                 "pre">warn</span></tt></dt>
2090
2091                 <dd>
2092                   <p class="first last">Livello di importanza degli
2093                   eventi loggati= warning <em>attenzione</em> .</p>
2094                 </dd>
2095               </dl>
2096             </li>
2097
2098             <li>
2099               <dl class="first docutils">
2100                 <dt><tt class="docutils literal"><span class=
2101                 "pre">CustomLog</span> <span class=
2102                 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2103                 <span class="pre">combined</span></tt></dt>
2104
2105                 <dd>
2106                   <p class="first last">Log di accesso separati
2107                   dagli altri siti, utile anche qua per statistiche
2108                   di accesso per il solo sito virtuale.</p>
2109                 </dd>
2110               </dl>
2111             </li>
2112           </ul>
2113
2114           <p>Potrebbe essere utile modificare le impostazioni di
2115           una intera directory, ad esempio per abilitare
2116           l'<tt class="docutils literal"><span class=
2117           "pre">AuthConfig</span></tt>:</p>
2118           <pre class="literal-block">
2119 &lt;Directory "/var/www/miosito.net/privata"&gt;
2120         AllowOverride AuthConfig
2121         Options ExecCGI Indexes MultiViews FollowSymLinks
2122         Order allow,deny
2123         Allow from all
2124 &lt;/Directory&gt;
2125 </pre>
2126
2127           <p><tt class="docutils literal"><span class=
2128           "pre">AllowOverride</span> <span class=
2129           "pre">AuthConfig</span></tt> ora vale per l'intera
2130           directory, come le altre opzioni.</p>
2131         </div>
2132       </div>
2133
2134       <div class="section" id="negoziazione-accessi">
2135         <h2><a class="toc-backref" href=
2136         "#id40">3.6&nbsp;&nbsp;&nbsp;Negoziazione accessi</a></h2>
2137
2138         <p>Tipicamente quando si installa un server web il proprio
2139         desiderio e' di dare accesso ai materiali disponibili al
2140         maggior numero di visitatori possibile. Talvolta pero' puo
2141         essere utile o necessario limitare gli accessi, ad esempio
2142         per escludere un <em>bot</em> indesiderato che scansiona
2143         ininterottamente le nostre pagine o per creare una <em>Area
2144         Riservata</em> i cui materiali non devono essere
2145         disponibile a tutti.</p>
2146
2147         <div class="section" id="limiti-su-base-ip">
2148           <h3><a class="toc-backref" href=
2149           "#id41">3.6.1&nbsp;&nbsp;&nbsp;Limiti su base ip</a></h3>
2150
2151           <p>La forma piu' semplice di restrizine degli accessi e'
2152           su base degli indirizzi IP dei client: tipicamente i siti
2153           web sono settati per dare accesso a chiunque:</p>
2154           <pre class="literal-block">
2155 &lt;VirtualHost *:80 &gt;
2156        # ...
2157        &lt;Directory "/var/www/177.piffa.net"&gt;
2158        Order allow,deny
2159        Allow from all
2160        &lt;/Directory&gt;
2161 &lt;/VirtualHost&gt;
2162 </pre>
2163
2164           <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2165           questo modo:</p>
2166           <pre class="literal-block">
2167 &lt;VirtualHost *:80 &gt;
2168        &lt;Directory "/var/www/177.piffa.net"&gt;
2169        Order allow,deny
2170        Allow from all
2171        Deny from 192.168.0.1
2172        &lt;/Directory&gt;
2173 &lt;/VirtualHost&gt;
2174 </pre>
2175
2176           <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2177           materiali dell'intero sito virtuale, oppure potremmo
2178           lavorare su una sola directory:</p>
2179           <pre class="literal-block">
2180 &lt;Directory "/var/www/miosito.net/limitata"&gt;
2181        Order allow,deny
2182        Allow from 192.168.0.0./24
2183        Deny from all
2184 &lt;/Directory&gt;
2185 </pre>
2186
2187           <p>In questo modo solo la classe IP <tt class=
2188           "docutils literal"><span class=
2189           "pre">192.168.0.0/24</span></tt> potra' accedere alla
2190           directory <tt class="docutils literal"><span class=
2191           "pre">/limitata</span></tt> Si tenga pero' conto che e'
2192           relativamente facile per un malintenzionato cambiare il
2193           propio indirizzo ip, oppure collegarsi da un altra zona.
2194           Meno facile e' accedere ad una classe privata trovandosi
2195           all'esterno di questa, ma e' comunque possibile mandare
2196           delle richieste <tt class="docutils literal"><span class=
2197           "pre">GET</span></tt> per cercare di mandare in Denial Of
2198           Service il webserver.</p>
2199         </div>
2200       </div>
2201
2202       <div class="section" id="user-authentication">
2203         <h2><a class="toc-backref" href=
2204         "#id42">3.7&nbsp;&nbsp;&nbsp;User Authentication</a></h2>
2205
2206         <p>A volte conviene negoziare gli accessi ad un area di un
2207         sito tramite autenticazione basata sull'accopiata <em>nome
2208         utente / password</em>. Questo puo' venire utile per creare
2209         una area download <em>intranet</em>, alla quale possano
2210         accedere solo gli utenti previsti a prescindere dagli
2211         indirizzi IP dei loro client. Per quanto esistano soluzioni
2212         piu' granulari e sofisticate per ottenere questo,
2213         <em>mod-auth</em> puo'essere sufficente. E mod auth non
2214         richiede l'installazione di software aggiuntivi.</p>
2215
2216         <p>link: <a class="reference external" href=
2217         "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2218
2219         <div class="section" id="definire-la-cartella">
2220           <h3><a class="toc-backref" href=
2221           "#id43">3.7.1&nbsp;&nbsp;&nbsp;Definire la
2222           cartella</a></h3>
2223
2224           <p>Decidere quale sara' il <em>path</em> della cartella
2225           da sottoporre ad autentizazione:(e creiamo la
2226           cartella):</p>
2227
2228           <blockquote>
2229             <tt class="docutils literal"><span class=
2230             "pre">mkdir</span> <span class=
2231             "pre">/var/www/177.piffa.net/privata</span></tt>
2232           </blockquote>
2233         </div>
2234
2235         <div class="section" id=
2236         "creazione-del-database-delle-passwords">
2237           <h3><a class="toc-backref" href=
2238           "#id44">3.7.2&nbsp;&nbsp;&nbsp;Creazione del database
2239           delle passwords</a></h3>
2240
2241           <p>Un modo semplice per gestire una database di
2242           <em>user-id / passwords</em> e' utilizzare l'utility
2243           <tt class="docutils literal"><span class=
2244           "pre">htpasswd</span></tt> di Apache. Questa crea un file
2245           in cui un <em>crypt</em> delle password viene associato
2246           agli utenti.</p>
2247
2248           <p>Si dovra' decidere dove tenere questo file, la cosa
2249           importante e' che non sia visibile nel sito web: non deve
2250           essere scaricabile dai visitatori. Deve essere cioe'
2251           all'esterno della <em>DocumentRoot</em>: un buon posto
2252           potrebbe essere la /home dell'utente.</p>
2253
2254           <p>Creiamo (con il <em>flag</em> <tt class=
2255           "docutils literal"><span class="pre">-c</span></tt>) il
2256           file <tt class="docutils literal"><span class=
2257           "pre">/home/utente/passwords</span></tt> con l'utente
2258           <tt class="docutils literal"><span class=
2259           "pre">luca</span></tt>:</p>
2260           <pre class="literal-block">
2261 htpasswd -c /home/utente/passwords luca
2262 </pre>
2263
2264           <p><tt class="docutils literal"><span class=
2265           "pre">htpasswd</span></tt> ci chedera' la password da
2266           associare all'utente <tt class=
2267           "docutils literal"><span class="pre">luca</span></tt>.
2268           Per sucessive modifiche della password o aggiunta di
2269           nuovi utenti non sara' necessario usare il flag
2270           <tt class="docutils literal"><span class=
2271           "pre">-c</span></tt>.</p>
2272         </div>
2273
2274         <div class="section" id="id3">
2275           <h3><a class="toc-backref" href=
2276           "#id45">3.7.3&nbsp;&nbsp;&nbsp;Configurazione di
2277           Apache</a></h3>
2278
2279           <p>Ora possiamo passare alla configurazione vera e
2280           propria di Apache, ma con una novita': andremo a inserire
2281           la voce in un <tt class="docutils literal"><span class=
2282           "pre">.htaccess</span></tt> invece che modificare il file
2283           di impostazione del virtual-host.</p>
2284
2285           <p>Questo per motivi pratici: solo l'utente <em>root</em>
2286           puo' modificare l'impostazione del virtual host nel file
2287           <tt class="docutils literal"><span class=
2288           "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2289           ma spesso il motivo per cui creiamo i virtual hosts e'
2290           ospitare i siti di altri utenti, che possono solo
2291           pubblicare (generalmente tramite <em>FTP</em>) i loro
2292           documenti nella loro <em>DocumentRoot</em>, senza poter
2293           quindi modificare in alcun modo la configurazione del
2294           virtual host.</p>
2295
2296           <p>Dando agli utenti la possibilita' di modificare
2297           (<em>AllowOverride</em>) autonomamente alcuni parametri
2298           (in questo caso solo l'<em>AuthConfig</em>) relativi al
2299           funzionamenteo del loro spazio web ci togliera'
2300           l'incombenza di dover intervenire suii vari virtual
2301           host.</p>
2302
2303           <p>Abilitiamo l'AllowOverride nel file di configurazione
2304           del virtual host per la sola directory <tt class=
2305           "docutils literal"><span class=
2306           "pre">privata</span></tt>:</p>
2307           <pre class="literal-block">
2308 &lt;VirtualHost *:80 &gt;
2309     ServerName 177.piffa.net
2310     DocumentRoot /var/www/177.piffa.net/
2311     ServerAdmin webmaster@177.piffa.net
2312     &lt;Directory "/var/www/177.piffa.net/privata"&gt;
2313         AllowOverride AuthConfig
2314     &lt;/Directory&gt;
2315 &lt;/VirtualHost&gt;
2316 </pre>
2317
2318           <p>Per rendere il cambiamento effettivo sara' necessario
2319           fare un restart / reload di Apache.</p>
2320
2321           <p>Ora sara' possibile, anche per l'utente di sistema,
2322           creare un fie <tt class="docutils literal"><span class=
2323           "pre">.htaccess</span></tt> che sara' onorato da
2324           Apache.</p>
2325
2326           <p>/var/www/177.piffa.net/privata/.htaccess</p>
2327           <pre class="literal-block">
2328 # Questo file viene incluso
2329 # nella configurazione del sito web
2330 # Messaggio visualizzato al prompt per l'autenticazione
2331 AuthName "Area privata soggetta ad autentizazione"
2332 # tipo di autenticazione da usarsi
2333 AuthType Basic
2334 # File generato precedentemente con htpasswd
2335 AuthUserFile  /home/utente/passwords
2336
2337 # Negoziazione degli accessi
2338 # valid users permette l'accesso agli utenti specificati
2339 # nel file generato da htpasswd
2340 require valid-user
2341 </pre>
2342
2343           <p>Si noti che non e' necessario fare ripartire Apache
2344           per onorare i cambiamenti (un utente non avrebbe la
2345           possibilita' di farlo!).</p>
2346         </div>
2347       </div>
2348
2349       <div class="section" id="cavets">
2350         <h2><a class="toc-backref" href=
2351         "#id46">3.8&nbsp;&nbsp;&nbsp;Cavets</a></h2>
2352
2353         <p>Problemi di cache:</p>
2354
2355         <blockquote>
2356           <ul class="simple">
2357             <li>Proxy: nei settaggi del browser specificare di non
2358             utilizzare un server proxy http per il sito web locale
2359             (o per gli altri che si stanno monitorando). Se si ha
2360             il controllo del proxy server: stopparlo, ricaricare la
2361             pagina (operazione che fallira'), far ripartire il
2362             proxy, ricaricare la pagina.</li>
2363
2364             <li>Provare con un altro browser, o cercare di svuotare
2365             la cache chiudere/riaprire l'applicativo. Provare a
2366             fermare Apache, ricaricare la pagina (operazione che
2367             fallira'), far ripartire Apache, ricaricare la
2368             pagina.</li>
2369           </ul>
2370         </blockquote>
2371       </div>
2372     </div>
2373
2374     <div class="section" id="domain-name-system">
2375       <h1><a class="toc-backref" href=
2376       "#id47">4&nbsp;&nbsp;&nbsp;Domain Name System</a></h1>
2377
2378       <p>Domain Name System (spesso indicato con DNS) e' un
2379       servizio utilizzato per la risoluzione di nomi di host in
2380       indirizzi IP e viceversa. Il servizio e' realizzato tramite
2381       un database distribuito, costituito dai server DNS.</p>
2382
2383       <p>Il nome DNS denota anche il protocollo che regola il
2384       funzionamento del servizio, i programmi che lo implementano,
2385       i server su cui questi girano, l'insieme di questi server che
2386       cooperano per fornire il servizio.</p>
2387
2388       <p>I nomi DNS, o "nomi di dominio", sono una delle
2389       caratteristiche piu' visibili di Internet.</p>
2390
2391       <p>C'e' confusione in merito alla definizione dell'acronimo:
2392       la S spesso viene interpretata come service, ma la
2393       definizione corretta e' system.</p>
2394
2395       <p>L'operazione di convertire un nome in un indirizzo e'
2396       detta risoluzione DNS, convertire un indirizzo IP in nome e'
2397       detto risoluzione inversa.</p>
2398
2399       <div class="section" id="nomi-di-dominio">
2400         <h2><a class="toc-backref" href=
2401         "#id48">4.1&nbsp;&nbsp;&nbsp;Nomi di dominio</a></h2>
2402
2403         <p>Un nome a dominio e' costituito da una serie di stringhe
2404         separate da punti, ad esempio it.wikipedia.org. A
2405         differenza degli indirizzi IP, dove la parte piu'
2406         importante del numero e' la prima partendo da sinistra, in
2407         un nome DNS la parte piu' importante e' la prima partendo
2408         da destra. Questa e' detta dominio di primo livello (o TLD,
2409         Top Level Domain), per esempio .org o .it.</p>
2410
2411         <p>Un dominio di secondo livello consiste in due parti, per
2412         esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2413         specifica un'ulteriore suddivisione. Quando un dominio di
2414         secondo livello viene registrato all'assegnatario, questo
2415         e' autorizzato a usare i nomi di dominio relativi ai
2416         successivi livelli come it.wikipedia.org (dominio di terzo
2417         livello) e altri come some.other.stuff.wikipedia.org
2418         (dominio di quinto livello) e cosi' via.</p>
2419       </div>
2420
2421       <div class="section" id="tipologie-di-record">
2422         <h2><a class="toc-backref" href=
2423         "#id49">4.2&nbsp;&nbsp;&nbsp;Tipologie di record</a></h2>
2424
2425         <p>Ad un nome DNS possono corrispondere diversi tipi di
2426         informazioni. Per questo motivo, esistono diversi tipi di
2427         record DNS. Ogni voce del database DNS deve essere
2428         caratterizzata da un tipo. I principali tipi sono:</p>
2429
2430         <ul class="simple">
2431           <li>Record A - Indica la corrispondenza tra un nome ed
2432           uno (o piu') indirizzi IP (per la precisione indirizzi
2433           IPv4, ovvero la versione attualmente in uso).</li>
2434
2435           <li>Record MX - (Mail eXchange) indica a quali server
2436           debba essere inviata la posta elettronica per un certo
2437           dominio.</li>
2438
2439           <li>Record CNAME - Sono usati per creare un alias, ovvero
2440           per fare in modo che lo stesso calcolatore sia noto con
2441           piu' nomi. Uno degli utilizzi di questo tipo di record
2442           consiste nell'attribuire ad un host che offre piu'
2443           servizi un nome per ciascun servizio. In questo modo, i
2444           servizi possono poi essere spostati su altri host senza
2445           dover riconfigurare i client, ma modificando solo il
2446           DNS.</li>
2447
2448           <li>Record PTR - Il DNS viene utilizzato anche per
2449           realizzare la risoluzione inversa, ovvero per far
2450           corrispondere ad un indirizzo IP il corrispondente nome a
2451           dominio. Per questo si usano i record di tipo "PTR" (e
2452           una apposita zona dello spazio dei nomi
2453           in-addr.arpa).</li>
2454
2455           <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2456
2457           <li>Record SRV - Identificano il server per un
2458           determinato servizio all'interno di un dominio. Possono
2459           essere considerati una generalizzazione dei record
2460           MX.</li>
2461
2462           <li>Record TXT - Associano campi di testo arbitrari ad un
2463           dominio. Questi campi possono contenere una descrizione
2464           informativa oppure essere utilizzati per realizzare
2465           servizi.</li>
2466         </ul>
2467
2468         <p>Vi sono anche tipi di record "di servizio", necessari al
2469         funzionamento del database distribuito: * Record NS -
2470         Utilizzato per indicare quali siano i server DNS
2471         autoritativi per un certo dominio, ovvero per delegarne la
2472         gestione. * Record SOA - (Start of Authority) usato per la
2473         gestione delle zone DNS.</p>
2474       </div>
2475
2476       <div class="section" id="utilizzo">
2477         <h2><a class="toc-backref" href=
2478         "#id50">4.3&nbsp;&nbsp;&nbsp;Utilizzo</a></h2>
2479
2480         <p>I computer vengono identificati in rete grazie agli
2481         indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2482         utenti come riferimento per i vari server. Ad esempio
2483         sarebbe scomodoriferirsi al motore di ricerca Goggle con
2484         uno dei suoi IP: <tt class="docutils literal"><span class=
2485         "pre">74.125.43.104</span></tt>, e' preferibile usare il
2486         nome di dominio <em>www.google.com</em>:</p>
2487         <pre class="literal-block">
2488 ping -c 1 www.google.com
2489 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2490 </pre>
2491       </div>
2492
2493       <div class="section" id="risoluzione-dei-nomi-di-dominio">
2494         <h2><a class="toc-backref" href=
2495         "#id51">4.4&nbsp;&nbsp;&nbsp;Risoluzione dei nomi di
2496         dominio</a></h2>
2497
2498         <p>Ci sono vari strumenti per interrogare i server DNS e
2499         ottenere l'indirizzo IP associato al nome di dominio che ci
2500         interessa:</p>
2501         <pre class="literal-block">
2502 $ host www.piffa.net
2503 www.piffa.net is an alias for piffa.net.
2504 piffa.net has address 65.98.21.97
2505 piffa.net mail is handled by 10 65.98.21.97
2506
2507
2508 $ nslookup www.piffa.net
2509 Server:         192.168.0.10
2510 Address:        192.168.0.10#53
2511
2512 Non-authoritative answer:
2513 www.piffa.net   canonical name = piffa.net.
2514 Name:   piffa.net
2515 Address: 65.98.21.97
2516
2517
2518 $ dig www.piffa.net
2519
2520 ; &lt;&lt;&gt;&gt; DiG 9.6.0-P1 &lt;&lt;&gt;&gt; www.piffa.net
2521 ;; global options: +cmd
2522 ;; Got answer:
2523 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 47751
2524 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2525
2526 ;; QUESTION SECTION:
2527 ;www.piffa.net.                 IN      A
2528
2529 ;; ANSWER SECTION:
2530 www.piffa.net.          3489    IN      CNAME   piffa.net.
2531 piffa.net.              3489    IN      A       65.98.21.97
2532
2533 ;; AUTHORITY SECTION:
2534 piffa.net.              86289   IN      NS      ns2.mydomain.com.
2535 piffa.net.              86289   IN      NS      ns1.mydomain.com.
2536 piffa.net.              86289   IN      NS      ns4.mydomain.com.
2537 piffa.net.              86289   IN      NS      ns3.mydomain.com.
2538
2539 ;; ADDITIONAL SECTION:
2540 ns1.mydomain.com.       96208   IN      A       64.94.117.193
2541 ns2.mydomain.com.       96208   IN      A       64.94.31.67
2542 ns3.mydomain.com.       96208   IN      A       66.150.161.137
2543 ns4.mydomain.com.       96208   IN      A       63.251.83.74
2544
2545 ;; Query time: 1 msec
2546 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2547 ;; WHEN: Sun May 10 21:23:11 2009
2548 ;; MSG SIZE  rcvd: 209
2549 </pre>
2550
2551         <p>Lo strumento piu' esaustivo e' <tt class=
2552         "docutils literal"><span class="pre">dig</span></tt>,
2553         installabile con il pacchetto <tt class=
2554         "docutils literal"><span class="pre">dnsutils</span></tt>
2555         .</p>
2556       </div>
2557
2558       <div class="section" id="dig">
2559         <h2><a class="toc-backref" href=
2560         "#id52">4.5&nbsp;&nbsp;&nbsp;Dig</a></h2>
2561
2562         <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2563         "docutils literal"><span class="pre">dig</span></tt> per
2564         l'inerrogazione dei DNS Server:</p>
2565         <pre class="literal-block">
2566 $ dig www.google.it
2567
2568 ; &lt;&lt;&gt;&gt; DiG 9.6.0-P1 &lt;&lt;&gt;&gt; www.google.it
2569 ;; global options: +cmd
2570 ;; Got answer:
2571 ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 18816
2572 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2573
2574 ;; QUESTION SECTION:
2575 ;www.google.it.                 IN      A
2576
2577 ;; ANSWER SECTION:
2578 www.google.it.          250683  IN      CNAME   www.google.com.
2579 www.google.com.         334819  IN      CNAME   www.l.google.com.
2580 www.l.google.com.       186     IN      A       74.125.43.103
2581 www.l.google.com.       186     IN      A       74.125.43.104
2582 www.l.google.com.       186     IN      A       74.125.43.147
2583 www.l.google.com.       186     IN      A       74.125.43.99
2584
2585 ;; AUTHORITY SECTION:
2586 l.google.com.           80856   IN      NS      f.l.google.com.
2587 l.google.com.           80856   IN      NS      d.l.google.com.
2588 l.google.com.           80856   IN      NS      b.l.google.com.
2589 l.google.com.           80856   IN      NS      c.l.google.com.
2590 l.google.com.           80856   IN      NS      a.l.google.com.
2591 l.google.com.           80856   IN      NS      e.l.google.com.
2592 l.google.com.           80856   IN      NS      g.l.google.com.
2593
2594 ;; Query time: 1 msec
2595 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2596 ;; WHEN: Sun May 10 21:34:47 2009
2597 ;; MSG SIZE  rcvd: 255
2598 </pre>
2599
2600         <dl class="docutils">
2601           <dt>$ dig</dt>
2602
2603           <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2604           <em>root servers</em> utilizzati. I root server sono i
2605           server che mantengono le informazioni sui domini di primo
2606           livello (TLD) e sono quindi il punto di partenza per
2607           scorrere nella directory dei DNS per recuperare le
2608           informazioni (tipicamente un campo <tt class=
2609           "docutils literal"><span class="pre">A</span></tt> per un
2610           indirizzo IP) che ci servono per raggiungere un certo
2611           servizio.</dd>
2612         </dl>
2613
2614         <p>$ dig</p>
2615
2616         <blockquote>
2617           <p>...</p>
2618
2619           <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2620           . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2621           B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2622           192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2623           F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2624           192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2625           K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2626           192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2627           J.ROOT-SERVERS.NET. . 192032 IN NS
2628           D.ROOT-SERVERS.NET.</p>
2629
2630           <p>...</p>
2631         </blockquote>
2632
2633         <dl class="docutils">
2634           <dt>dig @nome_dns</dt>
2635
2636           <dd>Permette di fare una query ad un server dns
2637           particolare. Es: <tt class=
2638           "docutils literal"><span class="pre">dig</span>
2639           <span class="pre">@151.99.25.1</span> <span class=
2640           "pre">www.google.it</span></tt></dd>
2641
2642           <dt>dig MX www.google.it</dt>
2643
2644           <dd>Chiede un campo in particolare, in questo caso il
2645           campo MX</dd>
2646
2647           <dt>dig ANY www.google.it</dt>
2648
2649           <dd>Chiede tutti i campi, non solo i campi
2650           <em>a</em></dd>
2651
2652           <dt>dig -x 74.125.43.104</dt>
2653
2654           <dd>Effettua una richiesta inversa: dall'ip al PTR
2655           associato.</dd>
2656         </dl>
2657       </div>
2658
2659       <div class="section" id="resolv-conf">
2660         <h2><a class="toc-backref" href=
2661         "#id53">4.6&nbsp;&nbsp;&nbsp;resolv.conf</a></h2>
2662
2663         <p>Il file <tt class="docutils literal"><span class=
2664         "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2665         sul dns usato dal sistema, in genere anche altre
2666         applicazioni che devono effettuare query DNS leggono
2667         resolv.conf per conoscere l'ubicazione del DNS.</p>
2668
2669         <p>/etc/resolv.conf:</p>
2670
2671         <blockquote>
2672           <ul class="simple">
2673             <li><tt class="docutils literal"><span class=
2674             "pre">nameserver</span></tt>: indica il nameserver da
2675             utilizzare, indicato con l'indirizzo ip.</li>
2676
2677             <li><tt class="docutils literal"><span class=
2678             "pre">domain</span></tt>: indica il nome di dominio
2679             della rete attuale, vedi voce sucessiva.</li>
2680
2681             <li><tt class="docutils literal"><span class=
2682             "pre">search</span></tt>: nome di dominio usato dalla
2683             rete sul quale cercare gli hosts. Ad esempio se
2684             impostato su <tt class="docutils literal"><span class=
2685             "pre">piffa.net</span></tt> pingando l'host <tt class=
2686             "docutils literal"><span class="pre">bender</span></tt>
2687             viene automaticamente fatto un tentativo di ricerca per
2688             <tt class="docutils literal"><span class=
2689             "pre">bender.piffa.net</span></tt>.</li>
2690           </ul>
2691         </blockquote>
2692
2693         <p>Si veda anche la pagina man di resolv.conf.</p>
2694
2695         <p>Attenzione: se si usa un client DHCP o simile questo
2696         file potra' essere riscritto automaticamente in base a
2697         quanto ottenuto dal DHCP. Si veda la documentazione del
2698         pacchtto <tt class="docutils literal"><span class=
2699         "pre">resolvconf</span></tt>.</p>
2700       </div>
2701
2702       <div class="section" id="etc-hosts">
2703         <h2><a class="toc-backref" href=
2704         "#id54">4.7&nbsp;&nbsp;&nbsp;/etc/hosts</a></h2>
2705
2706         <p>Tabella statica per l'associazione tra IP e nomi di
2707         dominio:</p>
2708         <pre class="literal-block">
2709 # cat /etc/hosts
2710 </pre>
2711
2712         <blockquote>
2713           127.0.0.1 localhost.localdomain localhost 10.10.208.162
2714           daniela daniela.piffa.net 10.10.208.254 mirror
2715           mirror.piffa.net 91.191.138.15 thepiratebay.org
2716           192.168.0.11 chrome chrome.mydomain.com
2717         </blockquote>
2718
2719         <p>Il contenuto e' un associazione tra un <em>IP</em> e
2720         stringhe di testo (anche piu' di una es: <tt class=
2721         "docutils literal"><span class="pre">mirror</span></tt> e
2722         <tt class="docutils literal"><span class=
2723         "pre">mirror.piffa.net</span></tt>), un record per
2724         riga.</p>
2725
2726         <p>Il problema e' la gestione di questo file: quando gli
2727         host cambiano IP si devono aggiornare i records, e c'e' poi
2728         il problema di distribuire questo file tra i vari hosts
2729         della propia LAN. Un metodo semplice per distribuire questo
2730         file e' utilizzare <tt class=
2731         "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2732         questo infatti legge e onora il file <tt class=
2733         "docutils literal"><span class="pre">hosts</span></tt>
2734         locale e lo <em>distribuisce</em> ai clients.</p>
2735
2736         <p>Modificare (riconducendola a un ip interno, cosi'
2737         annullandola) la risoluzione di un nome di dominio e' un
2738         modo drastico e funzionale per <em>annullarlo</em>
2739         rendendolo indisponibile alla propia rete locale, ad
2740         esempio aggiungere al file <tt class=
2741         "docutils literal"><span class=
2742         "pre">/etc/hosts</span></tt>:</p>
2743         <pre class="literal-block">
2744 127.0.0.1       www.facebook.com
2745 </pre>
2746
2747         <p>Impedira' agli utenti della LAN di raggiungere
2748         <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2749       </div>
2750
2751       <div class="section" id="hostname">
2752         <h2><a class="toc-backref" href=
2753         "#id55">4.8&nbsp;&nbsp;&nbsp;Hostname</a></h2>
2754
2755         <p>Ogni computer ha un <em>propio nome</em> visualizzabile
2756         (e modificabile) con il comando <tt class=
2757         "docutils literal"><span class=
2758         "pre">hostname</span></tt>.</p>
2759
2760         <p>Per modificare in modo permanente il nome del computer
2761         si modifichi il contenuto del file <tt class=
2762         "docutils literal"><span class=
2763         "pre">/etc/hostname</span></tt>.</p>
2764
2765         <p>Tipicamente si vuole mantenere una correlazione tra il
2766         nome dell'host, o meglio la stringa con cui il server si
2767         qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
2768         di <em>servizi virtuali</em> ci sara' un <em>nome
2769         server</em> principale associato al <em>PTR</em> condiviso.
2770         Non e' automatico che un servizio, ad esempio un server di
2771         posta, si qualifichi leggendo il contenuto di questo file e
2772         magari aggiungendo come suffisso il dominio di cui fa parte
2773         l'host: a volte questo parametro puo' essere specificato
2774         nel file di configurazione del servizio:</p>
2775         <pre class="literal-block">
2776 * Squid: ``visible_hostname``
2777
2778 * Postfix: ``myhostname``
2779 </pre>
2780       </div>
2781     </div>
2782
2783     <div class="section" id="dnsmasq">
2784       <h1><a class="toc-backref" href=
2785       "#id56">5&nbsp;&nbsp;&nbsp;DNSmasq</a></h1>
2786
2787       <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2788       forwarder e un server DHCP caratterizzato dalla facilita' di
2789       configurazione, dalla leggerezza e dalla possibilita' di
2790       modificare rapidamente i record DNS serviti alla rete. Puo'
2791       essere anche utilizzato come <cite>server per il boot da rete
2792       &lt;http://www.debian-administration.org/articles/478&gt;_</cite>
2793       .</p>
2794
2795       <p>Dnsmasq e' un interessante alternativa all'uso del server
2796       DNS Bind in modalita' cache-only (non autoritativo)
2797       accompagnato dal server DHCPD. I vantaggi sono:</p>
2798
2799       <ul class="simple">
2800         <li>Leggerezza: puo' essere fatto girare su una macchina
2801         relativamente debole in caso di bisogno.</li>
2802
2803         <li>Rapidita' di configurazione (in particolare per servire
2804         dei record A / MX alla rete, modificando al volo i valori
2805         originali ospitati sul server DNS Publico).</li>
2806
2807         <li>Ben integrato con connssioni PPP (utile se dovete
2808         rendere disponibile rapidamente una connessione a internet
2809         a una rete in difficolta').</li>
2810       </ul>
2811
2812       <p>Tutto cio' rende Dnsmasq una soluzione valida in
2813       particolare quando si deve intervenire in una rete
2814       pre-esistente in cui il server principale e' in crisi: si
2815       potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2816       <em>mascherare</em> i servizi al momento non disponibili.
2817       Molto utile per scopi didattici, sopratutto per testare
2818       server SMTP impostando al volo i campi MX per nomi di dominio
2819       fittizi.</p>
2820
2821       <div class="section" id="configurazione">
2822         <h2><a class="toc-backref" href=
2823         "#id57">5.1&nbsp;&nbsp;&nbsp;Configurazione</a></h2>
2824
2825         <p>Vediamo alcune direttive di basi del file di
2826         configurazione <tt class="docutils literal"><span class=
2827         "pre">/etc/dnsmasq.conf</span></tt> utili per la
2828         configurazione sia del DNS cache che per il DHCP
2829         server:</p>
2830
2831         <dl class="docutils">
2832           <dt>domain-needed</dt>
2833
2834           <dd>Non inoltrare query ai server DNS esterni per nomi
2835           semplici (es andrea, portatile, pippo) che verranno
2836           risolti solo in locale o causeranno direttamente una
2837           risposta <em>not found</em> .</dd>
2838
2839           <dt>bogus-priv</dt>
2840
2841           <dd>Simile alla voce precedente ma per i reverse
2842           look-up.</dd>
2843
2844           <dt>domain</dt>
2845
2846           <dd>Nome di dominio della rete da passare ai client.</dd>
2847
2848           <dt>expand_hosts</dt>
2849
2850           <dd>Aggiunge il <tt class="docutils literal"><span class=
2851           "pre">nome</span> <span class="pre">host</span></tt> (
2852           <tt class="docutils literal"><span class=
2853           "pre">/etc/hostname</span></tt>) dei client al nome di
2854           dominio per qualificarli in rete, senza bisogno di dover
2855           comporre a un elenco statico di record nel file
2856           <tt class="docutils literal"><span class=
2857           "pre">/etc/hosts</span></tt> o nello stesso file di
2858           configurazione di dnsmasq. Es: se un vostro client si
2859           chiama <tt class="docutils literal"><span class=
2860           "pre">chrome</span></tt> e il vostro dominio <tt class=
2861           "docutils literal"><span class=
2862           "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
2863           il campo <em>A</em> per il dominio <tt class=
2864           "docutils literal"><span class=
2865           "pre">chrome.piffa.net</span></tt> diretto all'ip che
2866           verra' assegnato al client.</dd>
2867         </dl>
2868       </div>
2869
2870       <div class="section" id="dhcp">
2871         <h2><a class="toc-backref" href=
2872         "#id58">5.2&nbsp;&nbsp;&nbsp;DHCP</a></h2>
2873
2874         <p>Per attivare il demone DHCP di dnsmaq basta aggiungere
2875         al file di configurazione il <em>range</em> degli ip che si
2876         vuole assegnare ai client con il <em>lease time</em> (tempo
2877         di rilascio: quanto a lungo saranno validi gli ip
2878         assegnati) espresso in ore.</p>
2879
2880         <p>Si faccia <em>attenzione</em>: in una rete puo' esseere
2881         presente <strong>un solo server DHCP</strong>, o per meglio
2882         dire qualunque server DHCP ascolta sul broadcast <tt class=
2883         "docutils literal"><span class=
2884         "pre">255.255.255.255</span></tt> e potrebbe rispondere a
2885         un pacchetto di richesta DHCP. Quindi non fate partire
2886         inavvertitamente un server DHCP in una rete gia' servita e
2887         <strong>non vi azzardate ad andare in giro con un portatile
2888         con un server DHCP attivo</strong> nelle reti altrui.
2889         Questo vale anche per i laboratori di informatica dei corsi
2890         di reti: non fate partire il vostro server DHCP se siete
2891         collegati alla rete interna!</p>
2892
2893         <p>/etc/dnsmasq.conf (riga 118):</p>
2894         <pre class="literal-block">
2895 dhcp-range=192.168.0.20,192.168.0.50,24h
2896 </pre>
2897       </div>
2898
2899       <div class="section" id="dns-cache">
2900         <h2><a class="toc-backref" href=
2901         "#id59">5.3&nbsp;&nbsp;&nbsp;DNS cache</a></h2>
2902
2903         <p>Aggiungere al file <tt class=
2904         "docutils literal"><span class=
2905         "pre">/etc/resolv.conif</span></tt> il nameserver localhost
2906         in cima alla lista dei <em>nameserver</em> disponibili.
2907         Dnsmasq usera' la propia cache e in caso non abbia
2908         disponibile il <em>record DNS</em> richiesto fara' partire
2909         una query al primo DNS:</p>
2910         <pre class="literal-block">
2911 nameserver      127.0.0.1
2912 </pre>
2913
2914         <p>Questo pero' potrebbe essere problematico se un altro
2915         servizio, ad esempio il DHCP client, riscrive il contenuto
2916         del file <tt class="docutils literal"><span class=
2917         "pre">/etc/resolv.conf</span></tt>. Per superare il
2918         problema si aggiunga (riga 20) al file di configurazione
2919         <tt class="docutils literal"><span class=
2920         "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
2921         <pre class="literal-block">
2922 prepend domain-name-servers 127.0.0.1;
2923 </pre>
2924
2925         <p>Oppure potrebbe essere il nostro <em>PPP client</em>
2926         (per la connessione ADSL) a intervenire sul file <tt class=
2927         "docutils literal"><span class=
2928         "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
2929         <tt class="docutils literal"><span class=
2930         "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
2931         <tt class="docutils literal"><span class=
2932         "pre">usepeerdns</span></tt>. Se la vostra connessione ad
2933         internet e' ADSL raramente dovreste aver bisogno di
2934         cambiare i DNS una volta impostati (a meno che non usiate
2935         un portatile!).</p>
2936       </div>
2937
2938       <div class="section" id="dhcpd">
2939         <h2><a class="toc-backref" href=
2940         "#id60">5.4&nbsp;&nbsp;&nbsp;DHCPd</a></h2>
2941
2942         <p>Dnsmasq puo' lavorare anche come DHCP server per la
2943         vostra LAN.</p>
2944       </div>
2945     </div>
2946
2947     <div class="section" id="samba">
2948       <h1><a class="toc-backref" href=
2949       "#id61">6&nbsp;&nbsp;&nbsp;Samba</a></h1>
2950
2951       <p>Samba e' un progetto libero che fornisce servizi di
2952       condivisione di file e stampanti a client SMB/CIFS.</p>
2953
2954       <p>Samba e' liberamente disponibile, al contrario di altre
2955       implementazioni SMB/CIFS, e permette di ottenere
2956       interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
2957
2958       <p>Samba e' un software che puo girare su piattaforme che non
2959       siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
2960       390, OpenVMS e altri sistemi operativi. Samba utilizza il
2961       protocollo TCP/IP utilizzando i servizi offerti sul server
2962       ospite. Quando correttamente configurato, permette di
2963       interagire con client o server Microsoft Windows come se
2964       fosse un file e print server Microsoft agendo da Primary
2965       Domain Controller (PDC) o come Backup Domain Controller, puo'
2966       inoltre prendere parte ad un dominio Active Directory.</p>
2967
2968       <div class="section" id="pacchetti">
2969         <h2><a class="toc-backref" href=
2970         "#id62">6.1&nbsp;&nbsp;&nbsp;Pacchetti</a></h2>
2971
2972         <p>Pacchetti da installare per utilizzare Samba in
2973         modalita' client <a class="footnote-reference" href="#id5"
2974         id="id4" name="id4">[2]</a></p>
2975         <pre class="literal-block">
2976 samba-client
2977 </pre>
2978
2979         <p>Pacchetti da installare per utilizzare Samba in
2980         modalita' server:</p>
2981         <pre class="literal-block">
2982 samba smbfs smbclient
2983 </pre>
2984
2985         <table class="docutils footnote" frame="void" id="id5"
2986         rules="none">
2987           <colgroup>
2988             <col class="label">
2989             <col>
2990           </colgroup>
2991
2992           <tbody valign="top">
2993             <tr>
2994               <td class="label"><a class="fn-backref" href=
2995               "#id4">[2]</a></td>
2996
2997               <td>Anche se nato per i sistemi Windows, Samba puo'
2998               essere usato anche per montare cartelle sotto
2999               GNU/Linux come alternativa a NFS. Per la condivisione
3000               di stampanti sarebbe invece opportuno intervenire
3001               direttamente su <tt class=
3002               "docutils literal"><span class=
3003               "pre">CUPS</span></tt>.</td>
3004             </tr>
3005           </tbody>
3006         </table>
3007
3008         <p>Durante la prima installazione viene chiesto il nome del
3009         gruppo di appartenenza, il default per Windows e'
3010         <tt class="docutils literal"><span class=
3011         "pre">WORKGROUP</span></tt>. In aula usiamo invece
3012         <tt class="docutils literal"><span class=
3013         "pre">208</span></tt> .</p>
3014
3015         <p>Per riconfigurare Samba si usi il comando:</p>
3016         <pre class="literal-block">
3017 dpkg-reconfigure samba-common
3018 </pre>
3019       </div>
3020
3021       <div class="section" id="passwords-e-autenticazione">
3022         <h2><a class="toc-backref" href=
3023         "#id63">6.2&nbsp;&nbsp;&nbsp;Passwords e
3024         autenticazione</a></h2>
3025
3026         <p>Per poter configurare Samba in modo che usi un sistema
3027         di negoziazione degli accessi alle cartelle condivise
3028         basato su accoppiate <em>nome utente / password</em>
3029         bisogna distinguere tra 3 livelli di password (e
3030         generalmente volete usare <em>sempre la stessa
3031         password</em> per ognuno di questi) e delle differenze tra
3032         le modalita' di <em>autenticazione</em> (e quindi anche di
3033         criptaggio delle passwords) usate da sistemi GNU/Linux e
3034         Windows:</p>
3035
3036         <dl class="docutils">
3037           <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3038
3039           <dd>E' la password dell'<em>utente di sistema</em> che
3040           viene usata sul sistema operativo su cui gira il software
3041           Samba. E' importante tenere conto anche delle
3042           <em>user-id</em> e <em>group-id</em> degli utenti che
3043           dovranno fisicamente scrivere sui file system. Se un
3044           utente non puo' scrivere in una certa posizione del file
3045           system (ad esempio nella cartella <tt class=
3046           "docutils literal"><span class=
3047           "pre">/mnt/condivisione</span></tt> che sara' stata
3048           necessariamente creata inizialmente dall'utente
3049           <tt class="docutils literal"><span class=
3050           "pre">root</span></tt>) per mancanza dei privilegi di
3051           scrittura allora neanche Samba potra' farlo nel momento
3052           in mette a disposizione la risorsa all'utente. Se si
3053           montano file-system dedicati per le condivisioni
3054           controllare i permessi e propieta' dei <em>punti di
3055           mount*</em>. Queste passwords sono salvate nel solito
3056           file /etc/shadow (richiamato da /etc/passwd).</dd>
3057
3058           <dt>2 Password per l'applicativo Samba</dt>
3059
3060           <dd>Samba deve essere compatibile con Windows e quindi
3061           utilizzare un sistema di criptazione delle password
3062           diverso da /etc/shadow . Le password per Samba possono
3063           essere gestite ad esempio col comando <tt class=
3064           "docutils literal"><span class=
3065           "pre">smbpasswd</span></tt> e vengono generalmente
3066           salvate all'interno di <tt class=
3067           "docutils literal"><span class=
3068           "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3069
3070           <dt>3 Password per Windows.</dt>
3071
3072           <dd>Gli utenti Windows effettuano il log-in alla partenza
3073           della sessione di Windows. Se si avra' l'accortezza di
3074           usare sempre la <em>stessa password</em> data
3075           precedentemente anche a Windows (o viceversa impostare la
3076           password per GNU/Linux / Samba uguale a quella di
3077           Windows) l'utente potra' accedere automaticamente alle
3078           condivisioni a lui disponibili.</dd>
3079         </dl>
3080       </div>
3081
3082       <div class="section" id="creazione-utenti">
3083         <h2><a class="toc-backref" href=
3084         "#id64">6.3&nbsp;&nbsp;&nbsp;Creazione Utenti</a></h2>
3085
3086         <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3087         attenzione a <em>non dargli una shell di sistema</em>. Gli
3088         utenti Windows che accedono al server solo per le
3089         condivisioni non hanno bisogno di poter eseguire comandi
3090         sul server!</p>
3091
3092         <p>Creazione di un utente denominato sambo:</p>
3093         <pre class="literal-block">
3094 adduser --shell /bin/false sambo
3095 </pre>
3096
3097         <p>Nel file <tt class="docutils literal"><span class=
3098         "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3099         <pre class="literal-block">
3100 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3101 </pre>
3102
3103         <p>Aggiunta dell'utente al database delle password per
3104         Samba e generazione della sua password:</p>
3105         <pre class="literal-block">
3106 smbpasswd -a sambo
3107 </pre>
3108
3109         <p>Se successivamente si vorra' modificare la password di
3110         un utente gia' esistente si usi:</p>
3111         <pre class="literal-block">
3112 smbpasswd  sambo
3113 </pre>
3114
3115         <p>La password sotto Windows verra' modificata sul sistema
3116         Windows.</p>
3117       </div>
3118
3119       <div class="section" id="creare-la-condivisione">
3120         <h2><a class="toc-backref" href=
3121         "#id65">6.4&nbsp;&nbsp;&nbsp;Creare la
3122         condivisione</a></h2>
3123
3124         <p>La condivisione altro non e' che una cartella sul server
3125         che viene resa disponibile ai client negoziando l'accesso
3126         in base a una autenticazione basata su <em>user-name /
3127         password</em>. E' per altro possibile permettere l'accesso
3128         a una risorsa a chiunque indiscriminatamente (a tutti i
3129         <tt class="docutils literal"><span class=
3130         "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3131         punto di vista della sicurezza. Si decida se la cartella
3132         condivisa debba risiedere nella <em>home</em> di un utente
3133         (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3134         cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3135         Nel secondo caso si potranno gestire gli accessi sotto
3136         GNU/Linux tramite i gruppi.</p>
3137
3138         <p>Creazione della risorsa sambo_share nella home
3139         dell'utente sambo:</p>
3140         <pre class="literal-block">
3141 # mkdir /home/sambo/sambo_share
3142 # chown sambo:sambo /home/sambo/sambo_share/
3143 </pre>
3144
3145         <div class="section" id=
3146         "sicurezza-permessi-di-esecuzione-sul-server">
3147           <h3><a class="toc-backref" href=
3148           "#id66">6.4.1&nbsp;&nbsp;&nbsp;Sicurezza: permessi di
3149           esecuzione sul server</a></h3>
3150
3151           <p>Bisognerebbe notare sul server i permessi di
3152           esecuzione del file-system che ospita la cartella da
3153           condividere. Se i file che saranno contenuti nella
3154           condivisione saranno da usarsi sotto Windows non c'e'
3155           motivo che questi siano eseguibili sotto GNU/Linux. Si
3156           potrebbe avere quindi, ipotizzando una condivisione in
3157           <tt class="docutils literal"><span class=
3158           "pre">/mnt/share</span></tt> che risieda su di un file
3159           system dedicato:</p>
3160
3161           <p><tt class="docutils literal"><span class=
3162           "pre">/etc/fstab</span></tt></p>
3163
3164           <blockquote>
3165             /dev/hda10 /mnt/share ext3 rw,
3166             <strong>nosuid,noexec</strong> 0 3
3167           </blockquote>
3168
3169           <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3170           possibilita' di eseguire programmi con credenziali
3171           diverse.</p>
3172         </div>
3173       </div>
3174
3175       <div class="section" id=
3176       "configurazione-dell-applicativo-samba-vero-e-proprio">
3177         <h2><a class="toc-backref" href=
3178         "#id67">6.5&nbsp;&nbsp;&nbsp;Configurazione
3179         dell'applicativo Samba vero e proprio.</a></h2>
3180
3181         <p>Avendo preparato gli utenti (ancora una volta: non si
3182         dia una shell completa a un utente che serve solo per Samba
3183         o la posta elettronica) e la cartella sul file system si
3184         puo' procedere a configurare la condivisione su Samba.</p>
3185
3186         <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3187         vim si usi 235gg ):</p>
3188         <pre class="literal-block">
3189 [sambo_share]
3190         # Percorso della cartella condivisa
3191         path = /home/sambo/sambo_share
3192         # Se gli utenti possono scrivere / modificare file
3193         writable = yes
3194         # Negoziazione degli accessi su base utenti / passwords
3195         valid users = sambo
3196
3197         # #######################################
3198         # Altri parametri opzionali di interesse
3199         # Se posso vedere la condivisione da esplora risorse
3200         # anche se non ho i privilegi per accedervi.
3201         browseable = yes
3202         # Commento indicativo della risorsa
3203         comment = Condivisione per Sambo
3204 </pre>
3205
3206         <p>Dopo aver salvato il file si puo' fare un primo
3207         controllo tramite l'utility <tt class=
3208         "docutils literal"><span class="pre">testparm</span></tt> ,
3209         che controlla la sintassi del file di configurazione di
3210         Samba. Se questo non rileva problemi si puo' procedere a un
3211         <tt class="docutils literal"><span class="pre">#</span>
3212         <span class="pre">/etc/init.d/samba</span> <span class=
3213         "pre">restart</span></tt> .</p>
3214       </div>
3215
3216       <div class="section" id="testare-il-servizio">
3217         <h2><a class="toc-backref" href=
3218         "#id68">6.6&nbsp;&nbsp;&nbsp;Testare il Servizio</a></h2>
3219
3220         <p>Come testare il servizio</p>
3221
3222         <p>es:</p>
3223         <pre class="literal-block">
3224 smbclient -U sambo -L localhost
3225 </pre>
3226
3227         <p>Questo comando permette di esplorare la risorsa
3228         qualificandosi come utente, in questo modo potete testare
3229         il corretto funzionamento dell'autenticazione. Si provi
3230         inizialmente a sbagliare la password deliberatamente, poi a
3231         inserirla correttamente: dovrebbero essere visibili le
3232         risorse disponibili al solo utente sambo: la suo /home e la
3233         cartella samba_share:</p>
3234         <pre class="literal-block">
3235 Sharename       Type      Comment
3236 ---------       ----      -------
3237 sambo_share     Disk      Condivisione per Sambo
3238 print$          Disk      Printer Drivers
3239 IPC$            IPC       IPC Service (base server)
3240 sambo           Disk      Home Directories
3241 </pre>
3242
3243         <p>In particolare l'ultima voce relativa alla home
3244         directory dell'utente dovrebbe essere visibile solo agli
3245         utenti autenticati.</p>
3246
3247         <p>In alternativa e' possibile montare realmente la
3248         condivisone anche su GNU/Linux tramite un client per samba
3249         e testarne il corretto funzionamento:</p>
3250         <pre class="literal-block">
3251 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3252 </pre>
3253       </div>
3254     </div>
3255
3256     <div class="section" id="server-di-posta-postfix">
3257       <h1><a class="toc-backref" href=
3258       "#id69">7&nbsp;&nbsp;&nbsp;Server di posta: Postfix</a></h1>
3259
3260       <p>Il server di posta che prenderemo in considerazione e'
3261       Postfix, a seguire un estratto di un file do configurazione
3262       <em>semplie</em> con l'abilizazione delle <em>Maildir</em>
3263       nelle <tt class="docutils literal"><span class=
3264       "pre">/home</span></tt> degli utenti per la consegna della
3265       posta:</p>
3266
3267       <p><tt class="docutils literal"><span class=
3268       "pre">/etc/postfix/main.cf</span></tt>:</p>
3269       <pre class="literal-block">
3270 # ...segue dalla riga ~30
3271 myhostname = 162.piffa.net
3272 alias_maps = hash:/etc/aliases
3273 alias_database = hash:/etc/aliases
3274 myorigin = 162.piffa.net
3275 mydestination = 162.piffa.net, localhost
3276 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3277 # dovrete usare un realy host per l'invio della posta
3278 relayhost = smtp.piffa.net
3279 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3280
3281 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3282 # in una Maildir invece che la Mailbox in /var/mail/utente
3283 # si disabiliti procmail
3284 #mailbox_command = procmail -a "$EXTENSION"
3285
3286 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3287 # nella home dell'utente:
3288 home_mailbox = Maildir/
3289 mailbox_size_limit = 0
3290 recipient_delimiter = +
3291 inet_interfaces = all
3292 </pre>
3293
3294       <div class="section" id="imap-e-pop">
3295         <h2><a class="toc-backref" href=
3296         "#id70">7.1&nbsp;&nbsp;&nbsp;Imap e pop</a></h2>
3297
3298         <p>Postfix e' un server SMTP, di conseguenza se volete che
3299         i vostri utenti possano <em>scaricare</em> in locale la
3300         posta generalemtne volete mettere a loro disposizione un
3301         server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
3302         entrambi.</p>
3303
3304         <dl class="docutils">
3305           <dt>Pacchetti da installare</dt>
3306
3307           <dd>courier-imap courier-pop</dd>
3308         </dl>
3309
3310         <p>i noti che IMAP necessita delle Maildir, non funziona
3311         con le Mailbox in <tt class="docutils literal"><span class=
3312         "pre">/var/mail/</span></tt> .</p>
3313
3314         <div class="section" id="web-client">
3315           <h3><a class="toc-backref" href=
3316           "#id71">7.1.1&nbsp;&nbsp;&nbsp;Web client</a></h3>
3317
3318           <p>Per mettere a disposizione degli utenti un client web
3319           per gestire la propia posta si installi il pacchetto:
3320           <tt class="docutils literal"><span class=
3321           "pre">squirrelmail</span></tt> . Ci sono tanti altri
3322           client web disponibili: questo e' particolarmente
3323           semplice. Naturalemte dovrete aver installato: <tt class=
3324           "docutils literal"><span class="pre">php5</span>
3325           <span class="pre">apache2</span></tt> .</p>
3326
3327           <p>L'interfaccia dovrebbe essere disponibile all'url:
3328           <tt class="docutils literal"><span class=
3329           "pre">http://localhost/squirrelmail</span></tt> . Se
3330           cosi' non fosse assicuratevi che Apache abbia incluso il
3331           file di configurazione di squirrelmail:</p>
3332           <pre class="literal-block">
3333 cd /etc/apache2/conf.d/
3334 ln -s /etc/squirrelmail/apache.conf ./
3335 </pre>
3336         </div>
3337       </div>
3338     </div>
3339
3340     <div class="section" id="firewall">
3341       <h1><a class="toc-backref" href=
3342       "#id72">8&nbsp;&nbsp;&nbsp;Firewall</a></h1>
3343
3344       <p>In Informatica, nell'ambito delle reti di computer, un
3345       firewall (termine inglese dal significato originario di
3346       parete refrattaria, muro tagliafuoco, muro ignifugo; in
3347       italiano anche parafuoco o parafiamma) e' un componente
3348       passivo di difesa perimetrale che può anche svolgere
3349       funzioni di collegamento tra due o piu' tronconi di rete.
3350       Usualmente la rete viene divisa in due sottoreti: una, detta
3351       esterna, comprende l'intera Internet mentre l'altra interna,
3352       detta LAN (Local Area Network), comprende una sezione piu' o
3353       meno grande di un insieme di computer locali. In alcuni casi
3354       e' possibile che si crei l'esigenza di creare una terza
3355       sottorete detta DMZ (o zona demilitarizzata) atta a contenere
3356       quei sistemi che devono essere isolati dalla rete interna ma
3357       devono comunque essere protetti dal firewall.</p>
3358
3359       <p>Una prima definizione chiusa di firewall Ã¨ la
3360       seguente:</p>
3361
3362       <p>Apparato di rete hardware o software che filtra tutti i
3363       pacchetti entranti ed uscenti, da e verso una rete o un
3364       computer, applicando regole che contribuiscono alla sicurezza
3365       della stessa.</p>
3366
3367       <p>In realtÃ&nbsp; un firewall può essere realizzato con un
3368       normale computer (con almeno due schede di rete e software
3369       apposito), può essere una funzione inclusa in un router o
3370       può essere un apparato specializzato. Esistono inoltre i
3371       cosiddetti "firewall personali", che sono programmi
3372       installati sui normali calcolatori, che filtrano solamente i
3373       pacchetti che entrano ed escono da quel calcolatore; in tal
3374       caso viene utilizzata una sola scheda di rete.</p>
3375
3376       <p>La funzionalitÃ&nbsp; principale in sostanza ÃƒÂ¨ quella di
3377       creare un filtro sulle connessioni entranti ed uscenti, in
3378       questo modo il dispositivo innalza il livello di sicurezza
3379       della rete e permette sia agli utenti interni che a quelli
3380       esterni di operare nel massimo della sicurezza. Il firewall
3381       agisce sui pacchetti in transito da e per la zona interna
3382       potendo eseguire su di essi operazioni di: controllo modifica
3383       monitoraggio</p>
3384
3385       <p>Questo grazie alla sua capacitÃ&nbsp; di "aprire" il
3386       pacchetto IP per leggere le informazioni presenti sul suo
3387       header, e in alcuni casi anche di effettuare verifiche sul
3388       contenuto del pacchetto.</p>
3389
3390       <div class="section" id="links">
3391         <h2><a class="toc-backref" href=
3392         "#id73">8.1&nbsp;&nbsp;&nbsp;Links</a></h2>
3393
3394         <ul class="simple">
3395           <li><a class="reference external" href=
3396           "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3397
3398           <li><a class="reference external" href=
3399           "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3400           http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3401         </ul>
3402       </div>
3403
3404       <div class="section" id="ipfilter">
3405         <h2><a class="toc-backref" href=
3406         "#id74">8.2&nbsp;&nbsp;&nbsp;Ipfilter</a></h2>
3407
3408         <p>Link: <a class="reference external" href=
3409         "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3410         http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3411
3412         <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3413         po' del 3) e su cosa <em>non</em> lavora (livello 4).
3414         Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3415         etc) e del livello 1 (MAC source address). Iptables
3416         comunque permette di fare il <em>connection-tracking</em>,
3417         mediante il quale possiamo implementare il Network Address
3418         Translation.</p>
3419
3420         <p>Netfilter non ricostruisce il flusso di dati tra
3421         pacchetti, non puo' quindi rilevare la presenza di virus o
3422         simili che si trasmettono su pacchetti separati:
3423         ricomporre, analizzare e tornare a scomporre i frammenti
3424         rtichiederebbe troppa RAM e risorse di sistema, con il
3425         conseguente rischio di saturare il firewall fino
3426         all'abbandono dei nuovi pacchetti in transito. Ci sono
3427         altri software piu' adatti a questi compiti, ad esempio un
3428         proxy HTTP come Squid che e' appunto una applicazione di
3429         quarto livello, progettata e strutturata per analizzare e
3430         modificare i flussi di dati (il <em>contenuto</em> dei
3431         pacchetti, non le sole <em>inestazioni</em>) facendo
3432         abbondate uso delle risorse RAM e di calcolo del sistema.
3433         Non a caso su macchine embedded dalle prestazioni molto
3434         ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3435         massimo le risorse di sistema per gestire il traffico di
3436         una rete 10/100, mentre il lavoro tipico svolto da
3437         netfilter e' quasi irrilevante.</p>
3438       </div>
3439
3440       <div class="section" id="progettazione-di-un-firewall">
3441         <h2><a class="toc-backref" href=
3442         "#id75">8.3&nbsp;&nbsp;&nbsp;Progettazione di un
3443         firewall</a></h2>
3444
3445         <p>Per implementare un firewall bisogna decidere un aio di
3446         cose: la collocazione e l'approccio (inclusivo o esclusivo)
3447         al filtraggio, il tipo di hardware.</p>
3448
3449         <div class="section" id="collocazione">
3450           <h3><a class="toc-backref" href=
3451           "#id76">8.3.1&nbsp;&nbsp;&nbsp;Collocazione</a></h3>
3452
3453           <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3454           della rete, decidere se diversi reparti di una azienda si
3455           possano vedere tra loro e in che misura.</p>
3456
3457           <p>Collocazione:</p>
3458
3459           <blockquote>
3460             <ol class="arabic simple">
3461               <li>sul router</li>
3462
3463               <li>tra router e servers / LAN</li>
3464
3465               <li>Unico server / router / firewall e connessi
3466               rischi. considerare l'acquisto di un router hardware
3467               dedicato.</li>
3468             </ol>
3469           </blockquote>
3470
3471           <dl class="docutils">
3472             <dt>Layeed security:</dt>
3473
3474             <dd>Implementare piu' device / software sui diversi
3475             livelli: <a class="reference external" href=
3476             "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3477             http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3478           </dl>
3479         </div>
3480
3481         <div class="section" id="policy-di-default">
3482           <h3><a class="toc-backref" href=
3483           "#id77">8.3.2&nbsp;&nbsp;&nbsp;Policy di default</a></h3>
3484
3485           <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3486           gestione.</p>
3487         </div>
3488
3489         <div class="section" id="hardware">
3490           <h3><a class="toc-backref" href=
3491           "#id78">8.3.3&nbsp;&nbsp;&nbsp;Hardware</a></h3>
3492
3493           <p>Sostanzialmente potremmo distinquere due tipologie di
3494           hardware:</p>
3495
3496           <dl class="docutils">
3497             <dt>Network appliance dedicata::</dt>
3498
3499             <dd>Un dispositivo hardware dedicato alla funzione di
3500             Firewall, ad es un Cisco / Fortigate. Si noti che molti
3501             firewall economici altro non sono che Linux box molto
3502             striminzite.</dd>
3503
3504             <dt>Server / Personal computer:</dt>
3505
3506             <dd>Un server sul quale viene fatto girare Netfilter ad
3507             uso del server stesso e della rete connessa.</dd>
3508           </dl>
3509
3510           <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3511           flessibilita', strumenti di gestione, sicurezza,
3512           OpenBSD.</p>
3513         </div>
3514       </div>
3515
3516       <div class="section" id=
3517       "percorso-dei-pacchetti-tra-tabelle-e-catene">
3518         <h2><a class="toc-backref" href=
3519         "#id79">8.4&nbsp;&nbsp;&nbsp;Percorso dei pacchetti tra
3520         tabelle e catene</a></h2>
3521
3522         <p>link: <a class="reference external" href=
3523         "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3524         http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3525       </div>
3526
3527       <div class="section" id="concetti-di-base">
3528         <h2><a class="toc-backref" href=
3529         "#id80">8.5&nbsp;&nbsp;&nbsp;Concetti di base</a></h2>
3530
3531         <div class="section" id="tabelle-catene-regole">
3532           <h3><a class="toc-backref" href=
3533           "#id81">8.5.1&nbsp;&nbsp;&nbsp;Tabelle, catene,
3534           regole</a></h3>
3535
3536           <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3537
3538           <ul class="simple">
3539             <li>filter - Regola il firewalling: quali pacchetti
3540             accettare, quali bloccare</li>
3541
3542             <li>nat - Regola le attivitÃ&nbsp; di natting</li>
3543
3544             <li>mangle - Interviene sulla alterazione dei
3545             pacchetti.</li>
3546           </ul>
3547
3548           <p>Ogni tabella ha delle catene (chains) predefinite
3549           (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3550           aggiunte catene custom. Ogni catena Ã¨ composta da un
3551           elenco di regole (rules) che identificano pacchetti di
3552           rete secono criteri diversi (es: -p tcp --dport 80 -d
3553           10.0.0.45) Ogni regola termina con una indicazione
3554           (target) su cosa fare dei pacchetti identificati dalla
3555           regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3556         </div>
3557
3558         <div class="section" id="match">
3559           <h3><a class="toc-backref" href=
3560           "#id82">8.5.2&nbsp;&nbsp;&nbsp;Match</a></h3>
3561
3562           <p>I Match di una regola (rule) servono a testare un
3563           pacchetto per valutare se corrisponda a certe
3564           caratteriscttiche. I match di possono servire a
3565           controllare se un pacchetto e' destinato a una porta
3566           particolare o utilizza un protocollo particolare.</p>
3567
3568           <p>Alcuni esempi:</p>
3569
3570           <dl class="docutils">
3571             <dt>-p [!] proto</dt>
3572
3573             <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3574             udp, gre, ah...)</dd>
3575
3576             <dt>-s [!] address[/mask]</dt>
3577
3578             <dd>Indirizzo IP sorgente (o network con maschera di
3579             sottorete)</dd>
3580
3581             <dt>-d [!] address[/mask]</dt>
3582
3583             <dd>Indirizzo IP destinazione (o network)</dd>
3584
3585             <dt>-i [!] interface[+]</dt>
3586
3587             <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3588
3589             <dt>-o [!] interface[+]</dt>
3590
3591             <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3592           </dl>
3593
3594           <table class="docutils option-list" frame="void" rules=
3595           "none">
3596             <col class="option">
3597             <col class="description">
3598
3599             <tbody valign="top">
3600               <tr>
3601                 <td class="option-group"><kbd><span class=
3602                 "option">-f</span></kbd></td>
3603
3604                 <td>Frammento di pacchetto</td>
3605               </tr>
3606             </tbody>
3607           </table>
3608         </div>
3609
3610         <div class="section" id="targets">
3611           <h3><a class="toc-backref" href=
3612           "#id83">8.5.3&nbsp;&nbsp;&nbsp;Targets</a></h3>
3613
3614           <p>Se un pacchetto soddisfa le condizioni del Match
3615           <em>salta</em> (jump) su uno dei target possibili, in
3616           caso contrario continua il suo percorso tra regole catene
3617           e tabelle.</p>
3618
3619           <p>Target principali:</p>
3620
3621           <dl class="docutils">
3622             <dt><em>-j ACCEPT</em></dt>
3623
3624             <dd>Il pachetto matchato viene accettato e procede
3625             verso la sua destinazione. Si usa per definire il
3626             traffico permesso.</dd>
3627
3628             <dt><em>-j DROP</em></dt>
3629
3630             <dd>Il pacchetto viene rifiutato e scartato, senza
3631             alcuna notifica al mittente. Si usa, in alternativa a
3632             REJECT, per bloccare traffico.</dd>
3633
3634             <dt><em>-j REJECT</em></dt>
3635
3636             <dd>Il pacchetto viene rifiutato. Al mittente viene
3637             mandato un pacchetto (configurabile) di notifica tipo
3638             ICMP port-unreachable (--reject-with
3639             icmp-port-unreachable)</dd>
3640           </dl>
3641
3642           <table class="docutils option-list" frame="void" rules=
3643           "none">
3644             <col class="option">
3645             <col class="description">
3646
3647             <tbody valign="top">
3648               <tr>
3649                 <td class="option-group"><kbd><span class=
3650                 "option">-t <var>LOG</var></span></kbd></td>
3651
3652                 <td>Il pacchetto viene loggato via syslog e procede
3653                 l'attraversamento della catena. Opzioni:
3654                 (--log-level, --log-prefix, --log-tcp-sequence,
3655                 --log-tcp-options, --log-ip-options)</td>
3656               </tr>
3657
3658               <tr>
3659                 <td class="option-group"><kbd><span class=
3660                 "option">-j <var>DNAT</var></span></kbd></td>
3661
3662                 <td>Viene modificato l'IP di destinazione del
3663                 pacchetto. Target disponibile solo in nat /
3664                 PREROUTING e nat / OUTPUT. L'opzione
3665                 --to-destination IP:porta definisce il nuovo IP di
3666                 destinazione. Si usa tipicamente su network
3667                 firewall che nattano server di una DMZ</td>
3668               </tr>
3669
3670               <tr>
3671                 <td class="option-group"><kbd><span class=
3672                 "option">-j <var>SNAT</var></span></kbd></td>
3673
3674                 <td>Viene modificato l'IP sorgente. Solo in nat /
3675                 POSTROUTING. Prevede l'opzione --to-source
3676                 IP:porta. Si usa per permettere l'accesso a
3677                 Internet da una rete locale con IP privati.</td>
3678               </tr>
3679
3680               <tr>
3681                 <td class="option-group"><kbd><span class=
3682                 "option">-j <var>MASQUERADE</var></span></kbd></td>
3683
3684                 <td>Simile a SNAT, si applica quando i pacchetti
3685                 escono da interfacce con IP dinamico (dialup, adsl,
3686                 dhcp...). Si usa solo in nat / POSTROUTING e
3687                 prevede l'opzione --to-ports porte.</td>
3688               </tr>
3689
3690               <tr>
3691                 <td class="option-group"><kbd><span class=
3692                 "option">-j <var>REDIRECT</var></span></kbd></td>
3693
3694                 <td>Redirige il pacchetto ad una porta locale.
3695                 Usabile solo in nat / PREROUTING e nat / OUTPUT Ã¨
3696                 previsto per fare un transparent proxy (con proxy
3697                 server in esecuzione sulla macchina con
3698                 iptables)</td>
3699               </tr>
3700
3701               <tr>
3702                 <td class="option-group"><kbd><span class=
3703                 "option">-j <var>RETURN</var></span></kbd></td>
3704
3705                 <td>Interrompe l'attraversamento della catena. Se
3706                 questa Ã¨ una secondaria, il pacchetto torna ad
3707                 attraversare la catena madre da punto in cui aveva
3708                 fatto il salto nella secondaria. Se il RETURN Ã¨ in
3709                 una delle catene di default, il pacchetto
3710                 interrompe l'attraversamento e segue la policy di
3711                 default.</td>
3712               </tr>
3713
3714               <tr>
3715                 <td class="option-group"><kbd><span class=
3716                 "option">-j <var>TOS</var></span></kbd></td>
3717
3718                 <td>Usabile solo nella tabella mangle, permette di
3719                 cambiare il TOS (Type Of Service) di un pacchetto
3720                 con l'opzione --set-tos. Per un elenco dei
3721                 parametri disponibili: iptables -j TOS -h</td>
3722               </tr>
3723
3724               <tr>
3725                 <td class="option-group"><kbd><span class=
3726                 "option">-j <var>MIRROR</var></span></kbd></td>
3727
3728                 <td>Curioso e sperimentale, questo target invia un
3729                 pacchetto speculare al mittente. In pratica Ã¨ come
3730                 se facesse da specchio per tutti i pacchetti
3731                 ricevuti. Da usare con cautela, per evitare
3732                 attacchi DOS indiretti.</td>
3733               </tr>
3734             </tbody>
3735           </table>
3736         </div>
3737       </div>
3738
3739       <div class="section" id="tabella-filter">
3740         <h2><a class="toc-backref" href=
3741         "#id84">8.6&nbsp;&nbsp;&nbsp;Tabella Filter</a></h2>
3742
3743         <p>E' quella implicita e predefinita (-t filter) Riguarda
3744         le attivitÃ&nbsp; di filtraggio del traffico. Ha 3 catene
3745         di default: INPUT - Riguarda tutti i pacchetti destinati al
3746         sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3747         i pacchetti che sono originati dal sistema e destinati ad
3748         uscire. FORWARD - Riguarda i pacchetti che attraversano il
3749         sistema, con IP sorgente e destinazione esterni.</p>
3750
3751         <p>Esempio per permettere accesso alla porta 80 locale:
3752         iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3753         Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3754         ACCEPT</p>
3755
3756         <p>Esempio per permettere ad un pacchetto con IP sorgente
3757         10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3758         il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3759         -j ACCEPT</p>
3760       </div>
3761
3762       <div class="section" id=
3763       "flush-automatico-per-macchine-remote">
3764         <h2><a class="toc-backref" href=
3765         "#id85">8.7&nbsp;&nbsp;&nbsp;Flush automatico per macchine
3766         remote</a></h2>
3767
3768         <p>Se state provando una configurazione del firewall per
3769         una macchina remota e' buona norma per evitare brutte
3770         figure attivare uno script che faccia il <em>flush</em>
3771         delle regole dopo qualche minuto. Potreste infatti
3772         inavvertitamente impostare una regola che vi impedisca di
3773         raggiungere la macchina remota, cosi' da non poter neanche
3774         eliminare quella regola e ripristinare la situazioe
3775         precedente.</p>
3776
3777         <p><em>Veramnete</em>, prima di lavorare sul firewall di
3778         una macchina remota inpostate almeno un <tt class=
3779         "docutils literal"><span class="pre">at</span> <span class=
3780         "pre">now</span> <span class="pre">+5</span> <span class=
3781         "pre">min</span></tt> o con un'oretta di margine per fare
3782         il <em>flush</em> delle regole (su tutte le tabelle):</p>
3783         <pre class="literal-block">
3784     at now +5 min
3785 at&gt; /sbin/iptables -F
3786 at&gt; [CTR+d]
3787 </pre>
3788       </div>
3789
3790       <div class="section" id="gestione-regole-rules">
3791         <h2><a class="toc-backref" href=
3792         "#id86">8.8&nbsp;&nbsp;&nbsp;Gestione regole
3793         (rules)</a></h2>
3794
3795         <p>Il comando iptables viene usato per ogni attivitÃ&nbsp;
3796         di gestione e configurazione.</p>
3797
3798         <p>Inserimento regole:</p>
3799
3800         <dl class="docutils">
3801           <dt>iptables -A CATENA ...</dt>
3802
3803           <dd>Aggiunge una regola alla fine della catena
3804           indicata</dd>
3805
3806           <dt>iptables -I CATENA [#] ...</dt>
3807
3808           <dd>Inserisce alla riga # (default 1) una regola nella
3809           catena indicata</dd>
3810
3811           <dt>iptables -N CATENA</dt>
3812
3813           <dd>Crea una nuova catena custom</dd>
3814
3815           <dt>iptables -P CATENA TARGET</dt>
3816
3817           <dd>Imposta il target di default per la catena
3818           indicata</dd>
3819         </dl>
3820
3821         <p>Rimozione regole e azzeramenti:</p>
3822
3823         <dl class="docutils">
3824           <dt>iptables -F [catena]</dt>
3825
3826           <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3827
3828           <dt>iptables -X [catena]</dt>
3829
3830           <dd>Ripulisce tutte le catene custom (o quella
3831           indicata)</dd>
3832
3833           <dt>iptables -Z [catena]</dt>
3834
3835           <dd>Azzera i contatori sulle catene</dd>
3836
3837           <dt>iptables -D catena #</dt>
3838
3839           <dd>Cancella la regola numero # dalla catena
3840           indicata</dd>
3841         </dl>
3842
3843         <p>Interrogazione:</p>
3844
3845         <dl class="docutils">
3846           <dt>iptables -L</dt>
3847
3848           <dd>Elenca le regole esistenti</dd>
3849
3850           <dt>iptables -L -n -v</dt>
3851
3852           <dd>Elenca, senza risolvere gli host, in modo verboso le
3853           regole esistenti</dd>
3854         </dl>
3855       </div>
3856
3857       <div class="section" id="salvataggio-regole">
3858         <h2><a class="toc-backref" href=
3859         "#id87">8.9&nbsp;&nbsp;&nbsp;Salvataggio regole</a></h2>
3860
3861         <p>Il comando <tt class="docutils literal"><span class=
3862         "pre">iptables</span></tt> serve per interagire con il
3863         framework <tt class="docutils literal"><span class=
3864         "pre">Netfilter</span></tt> ch gestisce il firewall di
3865         Linux al livello del kernel. Questo comporta, in modo
3866         analogo a quando avvene col comando <tt class=
3867         "docutils literal"><span class="pre">ifconfig</span></tt>,
3868         che i cambiameti impostati siano in <em>tempo reale,
3869         RAM</em>, non persistenti nel sistema: al boot sucessivo
3870         del sistema tutto tornera' alle impostazioni di base (in
3871         questo caso <em>nulle</em>, con policy di default settate
3872         su <tt class="docutils literal"><span class=
3873         "pre">ACCEPT</span></tt> per tutto).</p>
3874
3875         <p>Le varie invocazioni di iptables potrebbero essere
3876         richiamate da degli scripts dedicati, ma fortunatamente e'
3877         stata predisposta una apposita utility per gestire questi
3878         scripts in modo da avere a disposizione un <em>formato
3879         standard</em> per il salvataggio e il ripristino delle
3880         regole del firewall.</p>
3881
3882         <p>Altro problema: decidere quando attivare / disattivare
3883         queste regole. Utilizzare i <em>runlevels</em> non e' una
3884         soluzione adeguata: le regole del firewall sono legate
3885         all'attivita' delle schede di rete (e un host con diverse
3886         schede di rete puo' attivarle a secondo delle esigenze di
3887         routing, partenza di servizi es file_sharing per un
3888         back-up...): il sistema operativo Debian permette di legare
3889         l'esecuzione di comandi alla attivazione di una device di
3890         rete (<tt class="docutils literal"><span class=
3891         "pre">up</span></tt>), dopo la sua attivazione (<tt class=
3892         "docutils literal"><span class="pre">post-up</span></tt>,
3893         utile per devices che richiedono un certo tempo per
3894         inizializzarsi: come un tunnel o una connessione punto a
3895         punto), prima della sua attivazione (<tt class=
3896         "docutils literal"><span class="pre">pre-up</span></tt>).
3897         Allo stesso modo sono disponibili eventi analoghi per
3898         accompagnare la disattivazione dei device di rete: si veda
3899         la pagina man di <tt class="docutils literal"><span class=
3900         "pre">interfaces</span></tt>.</p>
3901
3902         <p>Nel nostro caso avremo per una possibile scheda
3903         <tt class="docutils literal"><span class=
3904         "pre">eth0</span></tt>:</p>
3905
3906         <p><tt class="docutils literal"><span class=
3907         "pre">/etc/network/interfaces</span></tt></p>
3908         <pre class="literal-block">
3909 iface eth1 inet static
3910         up /sbin/iptables-restore /root/firewall/basic_fw
3911         # Seguno i soliti parametri della scheda di rete
3912         address 10.10.208.21
3913 </pre>
3914
3915         <div class="section" id="iptables-save">
3916           <h3><a class="toc-backref" href=
3917           "#id88">8.9.1&nbsp;&nbsp;&nbsp;Iptables-save</a></h3>
3918
3919           <p>Per salvare le regole di iptables attualmente presenti
3920           nel kernel si usi il comando:</p>
3921           <pre class="literal-block">
3922 # iptables-save &gt;&gt; /root/firewall/basic_fw
3923 </pre>
3924
3925           <p>Il contenuto del file dovrebbe essere
3926           <em>comprensibile</em>: sostanzialmente sono regole di
3927           iptables, senza il comando iptables ripetuto, suddivisi
3928           per le varie tabelle. Potete comunque correggere
3929           eventuali parametri con un edito di testo.</p>
3930
3931           <p>Se non avete un'idea migliore potreste voler tenere
3932           gli script dei firewall in una cartella <tt class=
3933           "docutils literal"><span class=
3934           "pre">~/firewall</span></tt> nella home directory
3935           dell'utente <tt class="docutils literal"><span class=
3936           "pre">root</span></tt>.</p>
3937         </div>
3938
3939         <div class="section" id="iptables-restore">
3940           <h3><a class="toc-backref" href=
3941           "#id89">8.9.2&nbsp;&nbsp;&nbsp;Iptables-restore</a></h3>
3942
3943           <p>Per ripristinare un set di regole prcedentemente
3944           salvate con <tt class="docutils literal"><span class=
3945           "pre">iptables-save</span></tt> si utilizzi <tt class=
3946           "docutils literal"><span class=
3947           "pre">iptables-restore</span></tt>. Se questo deve essere
3948           fatto in modalita' <em>non interattiva</em>, ad esempio
3949           deve essere eseguito dal demone che si occupa di
3950           inizializzare le schede di rete, oppure un <em>cron</em>
3951           o altro, e' buona norma richiamare i percorsi completi
3952           sia dei comandi che dei file:</p>
3953           <pre class="literal-block">
3954 /sbin/iptables-restore /root/firewall/basic_fw
3955 </pre>
3956         </div>
3957       </div>
3958     </div>
3959
3960     <div class="section" id="note">
3961       <h1><a class="toc-backref" href=
3962       "#id90">9&nbsp;&nbsp;&nbsp;NOTE</a></h1>
3963
3964       <ul class="simple">
3965         <li>controllare apache</li>
3966       </ul>
3967
3968       <p>sintassi: in <tt class="docutils literal"><span class=
3969       "pre">monospace</span></tt> :</p>
3970
3971       <ul class="simple">
3972         <li>nomi di files</li>
3973
3974         <li>comandi</li>
3975
3976         <li>pacchetti</li>
3977       </ul>
3978     </div>
3979   </div>
3980 </body>
3981 </html>