1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
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/">
13 <title>Servizi di rete passo a passo</title>
14 <style type="text/css">
17 :Author: David Goodger (goodger@python.org)
18 :Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
19 :Copyright: This stylesheet has been placed in the public domain.
21 Default cascading style sheet for the HTML output of Docutils.
23 See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
24 customize this style sheet.
27 /* used to remove borders from tables and images */
28 .borderless, table.borderless td, table.borderless th {
31 table.borderless td, table.borderless th {
32 /* Override padding for "table.docutils td" with "! important".
33 The right padding separates the table cells. */
34 padding: 0 0.5em 0 0 ! important }
37 /* Override more specific margin styles with "! important". */
38 margin-top: 0 ! important }
40 .last, .with-subtitle {
41 margin-bottom: 0 ! important }
47 text-decoration: none ;
54 margin-bottom: 0.5em }
56 /* Uncomment (and remove this text!) to get bold-faced definition list terms
64 div.abstract p.topic-title {
68 div.admonition, div.attention, div.caution, div.danger, div.error,
69 div.hint, div.important, div.note, div.tip, div.warning {
71 border: medium outset ;
74 div.admonition p.admonition-title, div.hint p.admonition-title,
75 div.important p.admonition-title, div.note p.admonition-title,
76 div.tip p.admonition-title {
78 font-family: sans-serif }
80 div.attention p.admonition-title, div.caution p.admonition-title,
81 div.danger p.admonition-title, div.error p.admonition-title,
82 div.warning p.admonition-title {
85 font-family: sans-serif }
87 /* Uncomment (and remove this text!) to get reduced vertical space in
89 div.compound .compound-first, div.compound .compound-middle {
90 margin-bottom: 0.5em }
92 div.compound .compound-last, div.compound .compound-middle {
101 div.dedication p.topic-title {
109 div.footer, div.header {
118 div.line-block div.line-block {
124 margin: 0 0 0.5em 1em ;
125 border: medium outset ;
127 background-color: #ffffee ;
132 div.sidebar p.rubric {
133 font-family: sans-serif ;
136 div.system-messages {
139 div.system-messages h1 {
143 border: medium outset ;
146 div.system-message p.system-message-title {
153 h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
154 h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
172 ol.simple, ul.simple {
176 list-style: decimal }
179 list-style: lower-alpha }
182 list-style: upper-alpha }
185 list-style: lower-roman }
188 list-style: upper-roman }
202 white-space: nowrap }
211 font-family: sans-serif ;
216 font-family: sans-serif ;
228 pre.literal-block, pre.doctest-block {
233 font-family: sans-serif ;
234 font-style: oblique }
236 span.classifier-delimiter {
237 font-family: sans-serif ;
241 font-family: sans-serif }
244 white-space: nowrap }
252 span.section-subtitle {
253 /* font-size relative to parent (h1..h6 element) */
257 border-left: solid 1px gray;
265 margin-bottom: 0.5em }
268 border-left: solid 1px black;
271 table.docutils td, table.docutils th,
272 table.docinfo td, table.docinfo th {
273 padding-left: 0.5em ;
274 padding-right: 0.5em ;
275 vertical-align: top }
277 table.docutils th.field-name, table.docinfo th.docinfo-name {
280 white-space: nowrap ;
283 h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
284 h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
288 list-style-type: none }
294 <div class="document" id="servizi-di-rete-passo-a-passo">
295 <h1 class="title">Servizi di rete passo a passo</h1>
297 <h2 class="subtitle" id=
298 "appunti-sulla-installazione-e-configurazione-dei-servizi">
299 Appunti sulla installazione e configurazione dei servizi</h2>
302 <table class="docutils field-list" frame="void" rules="none">
303 <col class="field-name">
304 <col class="field-body">
308 <th class="field-name">Author:</th>
310 <td class="field-body">Andrea Manni</td>
314 <th class="field-name">Copyright:</th>
316 <td class="field-body">GFDL</td>
320 <th class="field-name">Version:</th>
322 <td class="field-body">0.7</td>
328 <p>Questa guida e' dedicata agli studenti delle lezioni di
329 informatica tenute da Andrea nel lab208. Nella parte iniziale
330 sono presenti alcuni richiami alle impostazioni di rete e di
331 installazione del laboratorio 208 (lab208) dove generalmente si
332 tengono le lezioni. Questi parametri non sono interessanti per
333 chiunque si trovasse al di fuori della rete piffa.net .</p>
335 <div class="contents topic" id="indice-degli-argomenti">
336 <p class="topic-title first">Indice degli argomenti</p>
338 <ul class="auto-toc simple">
340 <a class="reference internal" href=
341 "#configurazione-sistema" id="id6" name=
342 "id6">1 Configurazione sistema</a>
344 <ul class="auto-toc">
345 <li><a class="reference internal" href=
346 "#solo-per-uso-interno" id="id7" name=
347 "id7">1.1 Solo per uso
350 <li><a class="reference internal" href="#rete" id="id8"
351 name="id8">1.2 Rete</a></li>
353 <li><a class="reference internal" href=
354 "#bash-completion" id="id9" name=
355 "id9">1.3 Bash completion</a></li>
357 <li><a class="reference internal" href="#vim" id="id10"
358 name="id10">1.4 Vim</a></li>
360 <li><a class="reference internal" href="#vnc" id="id11"
361 name="id11">1.5 VNC</a></li>
363 <li><a class="reference internal" href=
364 "#lista-dei-pacchetti-di-base" id="id12" name=
365 "id12">1.6 Lista dei pacchetti di
369 <a class="reference internal" href=
370 "#apt-configurazione" id="id13" name=
371 "id13">1.7 Apt configurazione</a>
373 <ul class="auto-toc">
374 <li><a class="reference internal" href=
375 "#sources-list" id="id14" name=
376 "id14">1.7.1 sources.list</a></li>
378 <li><a class="reference internal" href=
379 "#etc-apt-apt-conf" id="id15" name=
380 "id15">1.7.2 /etc/apt/apt.conf</a></li>
387 <a class="reference internal" href="#squid" id="id16"
388 name="id16">2 Squid</a>
390 <ul class="auto-toc">
392 <a class="reference internal" href=
393 "#configurazione-squid-conf" id="id17" name=
394 "id17">2.1 Configurazione:
397 <ul class="auto-toc">
398 <li><a class="reference internal" href="#cache-dir"
400 "id18">2.1.1 Cache_dir</a></li>
402 <li><a class="reference internal" href=
403 "#tag-maximum-object-size" id="id19" name=
404 "id19">2.1.2 TAG:
405 maximum_object_size</a></li>
407 <li><a class="reference internal" href=
408 "#tag-cache-mem" id="id20" name=
409 "id20">2.1.3 TAG:
412 <li><a class="reference internal" href=
413 "#tag-minimum-object-size" id="id21" name=
414 "id21">2.1.4 TAG:
415 minimum_object_size</a></li>
420 <a class="reference internal" href=
421 "#negoziazione-degli-accesi-al-servizio" id="id22"
422 name="id22">2.2 Negoziazione degli
423 accesi al servizio</a>
425 <ul class="auto-toc">
426 <li><a class="reference internal" href=
427 "#acl-e-http-access" id="id23" name=
428 "id23">2.2.1 ACL e http
434 <a class="reference internal" href="#testare-squid"
435 id="id24" name="id24">2.3 Testare
438 <ul class="auto-toc">
439 <li><a class="reference internal" href=
440 "#client-wgetrc" id="id25" name=
441 "id25">2.3.1 Client:
444 <li><a class="reference internal" href=
445 "#server-access-log" id="id26" name=
446 "id26">2.3.2 Server:
454 <a class="reference internal" href="#apache" id="id27"
455 name="id27">3 Apache</a>
457 <ul class="auto-toc">
458 <li><a class="reference internal" href=
459 "#pacchetti-da-installare" id="id28" name=
460 "id28">3.1 Pacchetti da
461 installare::</a></li>
463 <li><a class="reference internal" href=
464 "#configurazione-di-apache" id="id29" name=
465 "id29">3.2 Configurazione di
468 <li><a class="reference internal" href="#apache-conf"
470 "id30">3.3 apache.conf</a></li>
473 <a class="reference internal" href=
474 "#installazione-di-php" id="id31" name=
475 "id31">3.4 Installazione di PHP</a>
477 <ul class="auto-toc">
478 <li><a class="reference internal" href=
479 "#test-del-modulo-php" id="id32" name=
480 "id32">3.4.1 Test del modulo
483 <li><a class="reference internal" href=
484 "#installazione-del-supporto-per-mysql" id="id33"
485 name="id33">3.4.2 Installazione
486 del supporto per Mysql</a></li>
488 <li><a class="reference internal" href=
489 "#phpmyadmin" id="id34" name=
490 "id34">3.4.3 phpmyadmin</a></li>
492 <li><a class="reference internal" href=
493 "#installazione-del-supporto-per-postgresql" id=
495 "id35">3.4.4 Installazione del
496 supporto per Postgresql</a></li>
498 <li><a class="reference internal" href=
499 "#phppgadmin" id="id36" name=
500 "id36">3.4.5 phppgadmin</a></li>
505 <a class="reference internal" href="#virtual-hosts"
506 id="id37" name="id37">3.5 Virtual
509 <ul class="auto-toc">
510 <li><a class="reference internal" href=
511 "#gestione-dns" id="id38" name=
512 "id38">3.5.1 Gestione DNS</a></li>
514 <li><a class="reference internal" href=
515 "#virtual-host" id="id39" name=
516 "id39">3.5.2 Virtual host</a></li>
521 <a class="reference internal" href=
522 "#negoziazione-accessi" id="id40" name=
523 "id40">3.6 Negoziazione accessi</a>
525 <ul class="auto-toc">
526 <li><a class="reference internal" href=
527 "#limiti-su-base-ip" id="id41" name=
528 "id41">3.6.1 Limiti su base
534 <a class="reference internal" href=
535 "#user-authentication" id="id42" name=
536 "id42">3.7 User Authentication</a>
538 <ul class="auto-toc">
539 <li><a class="reference internal" href=
540 "#definire-la-cartella" id="id43" name=
541 "id43">3.7.1 Definire la
544 <li><a class="reference internal" href=
545 "#creazione-del-database-delle-passwords" id="id44"
546 name="id44">3.7.2 Creazione del
547 database delle passwords</a></li>
549 <li><a class="reference internal" href="#id3" id=
551 "id45">3.7.3 Configurazione di
556 <li><a class="reference internal" href="#cavets" id=
557 "id46" name="id46">3.8 Cavets</a></li>
562 <a class="reference internal" href="#domain-name-system"
563 id="id47" name="id47">4 Domain Name
566 <ul class="auto-toc">
567 <li><a class="reference internal" href=
568 "#nomi-di-dominio" id="id48" name=
569 "id48">4.1 Nomi di dominio</a></li>
571 <li><a class="reference internal" href=
572 "#tipologie-di-record" id="id49" name=
573 "id49">4.2 Tipologie di
576 <li><a class="reference internal" href="#utilizzo" id=
578 "id50">4.3 Utilizzo</a></li>
580 <li><a class="reference internal" href=
581 "#risoluzione-dei-nomi-di-dominio" id="id51" name=
582 "id51">4.4 Risoluzione dei nomi di
585 <li><a class="reference internal" href="#dig" id="id52"
586 name="id52">4.5 Dig</a></li>
588 <li><a class="reference internal" href="#resolv-conf"
590 "id53">4.6 resolv.conf</a></li>
592 <li><a class="reference internal" href="#etc-hosts" id=
594 "id54">4.7 /etc/hosts</a></li>
596 <li><a class="reference internal" href="#hostname" id=
598 "id55">4.8 Hostname</a></li>
603 <a class="reference internal" href="#dnsmasq" id="id56"
604 name="id56">5 DNSmasq</a>
606 <ul class="auto-toc">
607 <li><a class="reference internal" href=
608 "#configurazione" id="id57" name=
609 "id57">5.1 Configurazione</a></li>
611 <li><a class="reference internal" href="#dhcp" id=
612 "id58" name="id58">5.2 DHCP</a></li>
614 <li><a class="reference internal" href="#dns-cache" id=
615 "id59" name="id59">5.3 DNS
618 <li><a class="reference internal" href="#dhcpd" id=
619 "id60" name="id60">5.4 DHCPd</a></li>
624 <a class="reference internal" href="#samba" id="id61"
625 name="id61">6 Samba</a>
627 <ul class="auto-toc">
628 <li><a class="reference internal" href="#pacchetti" id=
630 "id62">6.1 Pacchetti</a></li>
632 <li><a class="reference internal" href=
633 "#passwords-e-autenticazione" id="id63" name=
634 "id63">6.2 Passwords e
635 autenticazione</a></li>
637 <li><a class="reference internal" href=
638 "#creazione-utenti" id="id64" name=
639 "id64">6.3 Creazione Utenti</a></li>
642 <a class="reference internal" href=
643 "#creare-la-condivisione" id="id65" name=
644 "id65">6.4 Creare la
647 <ul class="auto-toc">
648 <li><a class="reference internal" href=
649 "#sicurezza-permessi-di-esecuzione-sul-server" id=
651 "id66">6.4.1 Sicurezza: permessi
652 di esecuzione sul server</a></li>
656 <li><a class="reference internal" href=
657 "#configurazione-dell-applicativo-samba-vero-e-proprio"
659 "id67">6.5 Configurazione
660 dell'applicativo Samba vero e proprio.</a></li>
662 <li><a class="reference internal" href=
663 "#testare-il-servizio" id="id68" name=
664 "id68">6.6 Testare il
670 <a class="reference internal" href=
671 "#server-di-posta-postfix" id="id69" name=
672 "id69">7 Server di posta: Postfix</a>
674 <ul class="auto-toc">
676 <a class="reference internal" href="#imap-e-pop" id=
677 "id70" name="id70">7.1 Imap e
680 <ul class="auto-toc">
681 <li><a class="reference internal" href=
682 "#web-client" id="id71" name=
683 "id71">7.1.1 Web client</a></li>
690 <a class="reference internal" href="#firewall" id="id72"
691 name="id72">8 Firewall</a>
693 <ul class="auto-toc">
694 <li><a class="reference internal" href="#links" id=
695 "id73" name="id73">8.1 Links</a></li>
697 <li><a class="reference internal" href="#ipfilter" id=
699 "id74">8.2 Ipfilter</a></li>
702 <a class="reference internal" href=
703 "#progettazione-di-un-firewall" id="id75" name=
704 "id75">8.3 Progettazione di un
707 <ul class="auto-toc">
708 <li><a class="reference internal" href=
709 "#collocazione" id="id76" name=
710 "id76">8.3.1 Collocazione</a></li>
712 <li><a class="reference internal" href=
713 "#policy-di-default" id="id77" name=
714 "id77">8.3.2 Policy di
717 <li><a class="reference internal" href="#hardware"
719 "id78">8.3.3 Hardware</a></li>
723 <li><a class="reference internal" href=
724 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
725 "id79" name="id79">8.4 Percorso dei
726 pacchetti tra tabelle e catene</a></li>
729 <a class="reference internal" href=
730 "#concetti-di-base" id="id80" name=
731 "id80">8.5 Concetti di base</a>
733 <ul class="auto-toc">
734 <li><a class="reference internal" href=
735 "#tabelle-catene-regole" id="id81" name=
736 "id81">8.5.1 Tabelle, catene,
739 <li><a class="reference internal" href="#match" id=
741 "id82">8.5.2 Match</a></li>
743 <li><a class="reference internal" href="#targets"
745 "id83">8.5.3 Targets</a></li>
749 <li><a class="reference internal" href=
750 "#tabella-filter" id="id84" name=
751 "id84">8.6 Tabella Filter</a></li>
753 <li><a class="reference internal" href=
754 "#flush-automatico-per-macchine-remote" id="id85" name=
755 "id85">8.7 Flush automatico per
756 macchine remote</a></li>
758 <li><a class="reference internal" href=
759 "#gestione-regole-rules" id="id86" name=
760 "id86">8.8 Gestione regole
764 <a class="reference internal" href=
765 "#salvataggio-regole" id="id87" name=
766 "id87">8.9 Salvataggio regole</a>
768 <ul class="auto-toc">
769 <li><a class="reference internal" href=
770 "#iptables-save" id="id88" name=
771 "id88">8.9.1 Iptables-save</a></li>
773 <li><a class="reference internal" href=
774 "#iptables-restore" id="id89" name=
775 "id89">8.9.2 Iptables-restore</a></li>
781 <li><a class="reference internal" href="#note" id="id90"
782 name="id90">9 NOTE</a></li>
786 <p>Generato con: <a class="reference external" href=
787 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
789 <div class="section" id="configurazione-sistema">
790 <h1><a class="toc-backref" href=
791 "#id6">1 Configurazione sistema</a></h1>
793 <div class="section" id="solo-per-uso-interno">
794 <h2><a class="toc-backref" href=
795 "#id7">1.1 Solo per uso interno</a></h2>
797 <p>Impostazioni di base per la configurazione del sistema
798 operativo e della rete nel laboratorio 208 facente parte
799 della rete piffa.net .</p>
801 <p>Qui riportati per comodita' degli studenti (e del
802 docente che non sara' <strong>mai piu'</strong> costretto a
803 ripeterli continuamente! ). Gli altri lettori potranno
804 tenerli presenti per cercare di comprendere gli esempi nel
805 testo. Ad esempio: quando leggerete <tt class=
806 "docutils literal"><span class=
807 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
808 del nostro <em>proxy http</em>, stara' quindi a voi
809 sostituire i dati con gli <em>ip</em> della vostra
813 <div class="section" id="rete">
814 <h2><a class="toc-backref" href=
815 "#id8">1.2 Rete</a></h2>
817 <p>Parametri della rete attualmente in uso:</p>
819 <table border="1" class="docutils">
827 <td colspan="2">Parametri della rete</td>
833 <td>10.10.208.0/24</td>
839 <td>255.255.255.0</td>
845 <td>10.10.208.255</td>
851 <td>10.10.208.254</td>
857 <td>10.10.208.250 persistente</td>
863 <td>10.10.208.254</td>
869 <td>10.10.208.250 persistente</td>
875 <td>10.10.208.254:3128</td>
880 <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
881 un DHCP, proxy http e mirror di Debian ( <a class=
882 "reference external" href=
883 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
884 Andrea non e' in aula (o ancora peggio non c'e' il suo
885 portatile Net) gli studenti dovranno darsi un indirizzo ip
886 manualmente e disabilitare il proxy (che pero' e
887 trasparente, quindi fate pure come se non ci fosse ;) .
888 Questo in attesa che si sappia se sara' nuovamente
889 utilizzabile il vecchio server Bender.</p>
892 <div class="section" id="bash-completion">
893 <h2><a class="toc-backref" href=
894 "#id9">1.3 Bash completion</a></h2>
896 <p>Il completamento automatico della shell (che si attiva
897 premendo il tasto tab una o due volte mentre si sta
898 scrivendo un termine) permette di comporre automaticamente
899 i nomi dei comandi e i percorsi dei file, sopratutto la
900 composizione automatica dei percorsi dei file e' di grande
903 <p>Bash_completion permette di integrare il completamento
904 automatico con i nomi dei pacchetti e oggetti dei comandi:
905 ad es. volendo digitare <tt class=
906 "docutils literal"><span class="pre">apt-get</span>
907 <span class="pre">inst[TAB]</span> <span class=
908 "pre">xtigh[TAB]</span></tt> ora verra' completatato
909 automaticamente sia la parola <tt class=
910 "docutils literal"><span class="pre">install</span></tt>
911 che il nome del pacchetto <tt class=
912 "docutils literal"><span class=
913 "pre">xtightvncviewer</span></tt>.</p>
915 <p>Abilitare /etc/bash_completion nel file <tt class=
916 "docutils literal"><span class=
917 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
918 proprio <tt class="docutils literal"><span class=
919 "pre">~/.bashrc</span></tt> (che sarebbe il file
920 <em>nascosto</em>, quindi con un punto all'inizio del nome
921 del file, di configurazione della shell bash per ogni
922 utente, presente nella propria <em>home
924 <pre class="literal-block">
925 echo ". /etc/bash_completion" >> ~/.bashrc
928 <p>Esempio di ~/.bahsrc</p>
929 <pre class="literal-block">
930 # ~/.bashrc: executed by bash(1) for non-login shells.
932 export PS1='\h:\w\$ '
935 # Decommentare le seguenti righr per abilitare la colorazione dei
937 export LS_OPTIONS='--color=auto'
939 alias ls='ls $LS_OPTIONS'
940 alias ll='ls $LS_OPTIONS -l'
941 alias l='ls $LS_OPTIONS -lA'
943 # Some more alias to avoid making mistakes:
948 # questo abilita bash completion
949 . /etc/bash_completion
952 <p>Il file <tt class="docutils literal"><span class=
953 "pre">/etc/bash_completion</span></tt> deve essere presente
954 nel sistema, in caso contrario installare il pacchetto:
955 <tt class="docutils literal"><span class=
956 "pre">bash-completion</span></tt>. Generalmente l'utente
957 <tt class="docutils literal"><span class=
958 "pre">root</span></tt> ha un file <tt class=
959 "docutils literal"><span class="pre">.bashrc</span></tt>
960 preimpostato analogo a quello citato sopra, a differenza
961 dei normali utenti di sistema.</p>
966 <li><a class="reference external" href=
967 "http://www.debian-administration.org/articles/316">An
968 introduction to bash completion</a></li>
970 <li><a class="reference external" href=
971 "http://www.caliban.org/bash/">Working more productively
972 with bash 2.x/3.x</a></li>
976 <div class="section" id="vim">
977 <h2><a class="toc-backref" href=
978 "#id10">1.4 Vim</a></h2>
980 <p>Vim e' l'editor di testo preferito dai sistemisti,
981 quindi sara' conveniente impostare fin da subito alcune
982 impostazioni per renderlo piu' comodo.</p>
984 <p>Assicurarsi che sia installata nel sistema la versione
985 completa dell'editor <tt class=
986 "docutils literal"><span class="pre">vim</span></tt>
987 nstallando il pacchetto vimi:</p>
988 <pre class="literal-block">
989 # apt-get install vim
991 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
993 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
994 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
995 " you can find below. If you wish to change any of those settings, you should
996 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
997 " everytime an upgrade of the vim packages is performed. It is recommended to
998 " make changes after sourcing debian.vim since it alters the value of the
999 " 'compatible' option.
1001 " This line should not be removed as it ensures that various options are
1002 " properly set to work with the Vim-related packages available in Debian.
1005 " Uncomment the next line to make Vim more Vi-compatible
1006 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1007 " options, so any other options should be set AFTER setting 'compatible'.
1010 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1011 " line enables syntax highlighting by default.
1014 " If using a dark background within the editing area and syntax highlighting
1015 " turn on this option as well
1018 " Uncomment the following to have Vim jump to the last position when
1022 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1023 \| exe "normal! g'\"" | endif
1026 " Uncomment the following to have Vim load indentation rules and plugins
1027 " according to the detected filetype.
1029 filetype plugin indent on
1032 " The following are commented out as they cause vim to behave a lot
1033 " differently from regular Vi. They are highly recommended though.
1034 set showcmd " Show (partial) command in status line.
1035 "set showmatch " Show matching brackets.
1036 set ignorecase " Do case insensitive matching
1037 "set smartcase " Do smart case matching
1038 "set incsearch " Incremental search
1039 set autowrite " Automatically save before commands like :next and :make
1040 "set hidden " Hide buffers when they are abandoned
1041 "set mouse=a " Enable mouse usage (all modes) in terminals
1043 " Source a global configuration file if available
1044 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1045 if filereadable("/etc/vim/vimrc.local")
1046 source /etc/vim/vimrc.local
1051 <div class="section" id="vnc">
1052 <h2><a class="toc-backref" href=
1053 "#id11">1.5 VNC</a></h2>
1055 <p>I Virtual Network Computing (o VNC) sono software di
1056 controllo remoto e servono per amministrare il proprio
1057 computer a distanza o visuallizare la sessione di lavoro di
1058 un altro computer sul proprio a scopo didattico.
1059 Installando un server VNC sulla propria macchina ed
1060 impostando una opportuna password si consente ai client VNC
1061 di ricevere una immagine dello schermo ed eventualmente di
1062 inviare input di tastiera e mouse al computer server
1063 (durante le lezioni questo non e' possibile per gli
1064 studenti, solo Andrea esegue i comandi). In pratica si può
1065 gestire il computer server da un'altra postazione, come se
1066 fosse il proprio computer fisico.</p>
1068 <p>Scaricare il pacchetto <tt class=
1069 "docutils literal"><span class=
1070 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1071 "docutils literal"><span class="pre">guarda.sh</span></tt>
1072 in una posizione (collocazione nel <em>path</em> degli
1073 utenti, es <tt class="docutils literal"><span class=
1074 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1075 visualizzare l'attuale path ) comoda per gli utenti ( in
1076 genere <tt class="docutils literal"><span class=
1077 "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1080 <pre class="literal-block">
1083 wget http://debian.piffa.net/guarda.sh
1088 <p>Si noti che non e' possibile lanciare un applicativo sul
1089 server grafico di un utente da una shell in cui si sta
1090 lavorando come altro utente, anche se root. E' quindi
1091 necessario essere l'utente di sistema che si e' loggato
1092 inizialmente nella sessione grafica per poter lanciare lo
1093 script guarda.sh da una shell.</p>
1095 <p>Controllare con <tt class=
1096 "docutils literal"><span class="pre">whoami</span></tt> di
1097 essere l'utente normale (es <tt class=
1098 "docutils literal"><span class="pre">utente</span>
1099 <span class="pre">|</span> <span class=
1100 "pre">studente</span> <span class="pre">|</span>
1101 <span class="pre">proprio</span> <span class=
1102 "pre">nome</span></tt> ), in caso si sia assunta una altra
1103 <tt class="docutils literal"><span class=
1104 "pre">id</span></tt> si apra un altra shell o si esca da
1105 quella attuale con <tt class=
1106 "docutils literal"><span class="pre">exit</span></tt> .</p>
1109 <div class="section" id="lista-dei-pacchetti-di-base">
1110 <h2><a class="toc-backref" href=
1111 "#id12">1.6 Lista dei pacchetti di
1114 <p>I pacchetti installati generalmente <a class=
1115 "footnote-reference" href="#id2" id="id1" name=
1116 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1117 <pre class="literal-block">
1118 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1121 <table class="docutils footnote" frame="void" id="id2"
1128 <tbody valign="top">
1130 <td class="label"><a class="fn-backref" href=
1133 <td><tt class="docutils literal"><span class=
1134 "pre">kde-core</span></tt> e' piu' leggero del
1135 pacchetto <tt class="docutils literal"><span class=
1136 "pre">kde</span></tt>, esiste anche un equivalente
1137 <tt class="docutils literal"><span class=
1138 "pre">gnome-core</span> <span class=
1139 "pre">gnome</span></tt> e il log-in manager
1140 <tt class="docutils literal"><span class=
1141 "pre">gdm</span></tt> per il l'ambiente grafico
1148 <div class="section" id="apt-configurazione">
1149 <h2><a class="toc-backref" href=
1150 "#id13">1.7 Apt configurazione</a></h2>
1152 <p>Vediamo i due file principali di apt:</p>
1155 <li><tt class="docutils literal"><span class=
1156 "pre">/etc/apt/sources.list</span></tt></li>
1158 <li><tt class="docutils literal"><span class=
1159 "pre">/etc/apt/apt.conf</span></tt></li>
1162 <div class="section" id="sources-list">
1163 <h3><a class="toc-backref" href=
1164 "#id14">1.7.1 sources.list</a></h3>
1166 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1167 preleva i pacchetti da installare tramite <em>dpkg</em>,
1168 vengono quindi precisati i metodi (ad es. http / ftp /
1169 cdrom / file), la release che si vuole tracciare (es
1170 <tt class="docutils literal"><span class=
1171 "pre">stable,</span> <span class="pre">testing,</span>
1172 <span class="pre">unstable</span></tt> oppure i
1173 corrispondenti release name es: <tt class=
1174 "docutils literal"><span class="pre">Lenny,</span>
1175 <span class="pre">Squeeze,</span> <span class=
1176 "pre">Sid</span></tt>), i rami di interesse (es:
1177 <tt class="docutils literal"><span class=
1178 "pre">main</span></tt> che e' l'archivio principale,
1179 <tt class="docutils literal"><span class=
1180 "pre">non-free</span></tt> per il software non libero,
1181 <tt class="docutils literal"><span class=
1182 "pre">contrib</span></tt> per i pacchetti non realizzati
1183 dai manutentori ufficiali).</p>
1185 <p>Gli archivi sono generalmente:</p>
1188 <li><tt class="docutils literal"><span class=
1189 "pre">deb</span></tt> per pacchetti Debian binari</li>
1191 <li><tt class="docutils literal"><span class=
1192 "pre">deb-src</span></tt> per i pacchetti sorgenti
1193 (quindi da compilare, come il kernel) degli stessi
1194 pacchetti binari. In genere se non compilate spesso
1195 potete evitare di tracciare i sorgenti per risparmiare
1199 <p><tt class="docutils literal"><span class=
1200 "pre">/etc/apt/sources.list</span></tt></p>
1201 <pre class="literal-block">
1202 # esempio di accesso a un CDROM:
1203 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1205 # Archivio principale debian via http su piffa.net,
1206 # non funziona al difuori dell'aula dei corsi
1207 deb http://debian.piffa.net/debian/ Lenny main
1208 # deb http://debian.piffa.net/debian/ Lenny non-free contrib
1210 # Mirror da kernel.org da usare a casa:
1211 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1213 # Security dal sito principale
1214 deb http://security.debian.org/ Lenny/updates main
1215 deb-src http://security.debian.org/ Lenny/updates main
1217 # Debian volatile per le cose soggette a cambiamenti non legati
1218 # a dinamiche di sicurezza
1219 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1220 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1222 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1223 # deb file:/mnt/mirror Sid main non-free contrib
1227 <div class="section" id="etc-apt-apt-conf">
1228 <h3><a class="toc-backref" href=
1229 "#id15">1.7.2 /etc/apt/apt.conf</a></h3>
1231 <p>Questo file contiene le opzioni di apt, come ad
1232 esempio il proxy:</p>
1233 <pre class="literal-block">
1234 Acquire::http::Proxy "http://10.10.208.254:3128";
1237 <p>Si tenga conto che se si imposta un proxy per apt sul
1238 proprio portatile e tornati a casa propria si vuole
1239 scaricare nuovi pacchetti si dovra' disabilitare il
1245 <div class="section" id="squid">
1246 <h1><a class="toc-backref" href=
1247 "#id16">2 Squid</a></h1>
1249 <p>Squid e' un proxy cache http (ma anche FTP e https)
1250 robusto e strutturato, puo' essere usato sia in reti
1251 relativamente piccole grazie alla semplicita' di
1252 configurazione che in scenari piu' complessi grazie alla
1253 possibilita' di gestirne in modo granulare le risorse
1254 partendo dalle configurazioni piu' semplici per la semplice
1255 <em>condivisione della navigazione</em> internet, la gestione
1256 degli accessi, il filtraggio dei contenuti (Squid e' una
1257 applicazione che si muove nel 4' livello del modello TCP/IP a
1258 differenza di un <em>ipfilter</em> limitato al 2') nel l
1259 bilanciamento del carico tra piu' hosts.</p>
1261 <dl class="docutils">
1262 <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1264 <dd>nasconde i client http alla rete internet: risulta solo
1265 il server proxy nei log dei server web frequentati dagli
1266 utenti di Squid.</dd>
1269 <p>Cosa a volte sottovalutata, squid permette la navigazione
1270 web a una rete basata su <em>indirizzi ip privati</em> (es
1271 una 192.168.0.0/24). E se la rete privata deve <em>solo
1272 navigare</em> in internet, non serve un <em>NAT</em> od
1273 altro, basta il solo Squid. Per altro non servira' neanche un
1274 servizio DNS dato che <em>sara' il solo squid a risolvere i
1275 nomi di dominio</em> per i suoi client http.</p>
1277 <p>Squid ascolta di default sulla porta 3128, per impostare
1278 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1279 "docutils literal"><span class=
1280 "pre">/etc/apt/apt.conf</span></tt></p>
1281 <pre class="literal-block">
1282 Acquire::http::Proxy "10.10.208.254:3128";
1285 <p>Per installare Squid si usino i pacchetti:</p>
1286 <pre class="literal-block">
1290 <div class="section" id="configurazione-squid-conf">
1291 <h2><a class="toc-backref" href=
1292 "#id17">2.1 Configurazione:
1295 <p>Segue un estratto delle direttive principali viste in
1296 aula presenti nel file di configurazione <tt class=
1297 "docutils literal"><span class=
1298 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1300 <div class="section" id="cache-dir">
1301 <h3><a class="toc-backref" href=
1302 "#id18">2.1.1 Cache_dir</a></h3>
1304 <p>Cache dir serve per impostare dimensione e percorso
1305 della cache creata sul supporto di storaggio. Essendo la
1306 dimensione di default della cache pari a <tt class=
1307 "docutils literal"><span class="pre">~100</span>
1308 <span class="pre">MB</span></tt> e' altamente
1309 consigliabili aumentare questo parametro se si vuole
1310 poter utilizzare la funzione di <em>cache</em> http del
1313 <p>La dimensione ovviamente dipendera' dallo spazio
1314 disponibile, dimensioni tipiche e massime degli oggetti
1315 che si vuole tenere in cache (un solo file <em>.iso e'
1316 circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1317 <tt class="docutils literal"><span class="pre">150</span>
1318 <span class="pre">MB</span></tt>, un pacchetto debian
1319 circa <tt class="docutils literal"><span class=
1320 "pre">20</span> <span class="pre">MB</span></tt>), numero
1323 <p>Si presti poi attenzione alla natura dei dati che
1324 saranno salvati nella cache: sono tutti dati facilmenti
1325 sostituibili (gli originali sono <em>on-line</em>) la cui
1326 perdita non arreca danni permanenti. Questo rende la
1327 cache di Squid un possibile candidato ad un <em>RAID
1328 stripe</em> (livello 0), con vantaggi sia per le
1329 prestazioni (e la velocita' di navigazione e' uno dei
1330 motivi per cui si installa Squid) che per l'utilizzo
1331 estensivo dello spazio di storaggio. Questo fino al
1332 momento in cui per voi non sia piu' importante
1333 <em>garantire la disponibilita' del servizio</em> (se il
1334 RAID stripe dovesse rompersi gli utenti non potrebbero
1335 piu' navigare, cosa che per natura dello stripe e'
1336 maggiormente probabile rispetto ad un <em>mirror</em> o a
1337 un filesytem <em>normale</em>) con un RAID mirror o
1340 <p>Altra considerazione: i dati del proxy vengono slavati
1341 sul filesytem del server dietro richiesta di utenti
1342 esterni talvolta sconosciuti. Come per i servizi di file
1343 sharing o per la posta elettronica non c'e' motivo che il
1344 filesystem su cui sono ospitati questi dati abbia i
1345 privilegi di eseguibilita' o suid (in genere si puo'
1346 anche usare <em>noatime</em> per renderlo piu' veloce,
1347 che si usi o meno il journal dipende dalle preferenze:
1348 affidabilita' oppure prestazioni):</p>
1351 <pre class="literal-block">
1353 # Filesystem per Squid http cache
1354 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1357 <p>Ora possiamo impostare la cache direttamente nel file
1358 <tt class="docutils literal"><span class=
1359 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1360 <pre class="literal-block">
1361 #TAG: cache_dir (riga 1628)
1364 # cache_dir Type Directory-Name Fs-specific-data [options]
1366 # You can specify multiple cache_dir lines to spread the
1367 # cache among different disk partitions.
1370 # cache_dir ufs /var/spool/squid3 100 16 256
1371 cache_dir aufs /var/spool/squid3 300 24 256
1375 # directory primo livello
1376 # secondo livello di directory
1379 <p>Se si modifica la struttura del filesytem della cache
1380 di Squid, ad esempio variando il numero delle directory,
1381 puo' essere opportuno rigenerare la struttura della cache
1382 di squid (per lo meno se si <em>aumenta il numero delle
1383 directory di primo o secondo livello). Tipicamente e'
1384 opportuno cancellare (se si ha *ridotto</em> il numero
1385 delle diectory) la vecchia cache e poi generare una nuova
1386 struttura. Se si vuole <em>star nel sicuro</em> ogni
1387 volta che si modifica l'impostazione delle directory
1388 <em>si svuoti la vecchia cache e se ne generi una
1390 <pre class="literal-block">
1391 # /etc/init.d/squid3 stop
1392 # rm -r /var/spool/squid3/??
1394 # /etc/init.d/squid3 start
1398 <div class="section" id="tag-maximum-object-size">
1399 <h3><a class="toc-backref" href=
1400 "#id19">2.1.2 TAG:
1401 maximum_object_size</a></h3>
1403 <p>Questa direttiva imposta la dimensione massima degli
1404 oggetti che vengono slvati sul supporto di storaggio,
1405 oggetti di dimensioni superiori saranno comunque
1406 scaricati ma non tenuti in cache.</p>
1408 <p>TAG: maximum_object_size (1760):</p>
1409 <pre class="literal-block">
1410 # TAG: maximum_object_size (1760)
1411 # Objects larger than this size will NOT be saved on disk. The
1412 # value is specified in kilobytes, and the default is 4MB. If
1413 # you wish to get a high BYTES hit ratio, you should probably
1414 # increase this (one 32 MB object hit counts for 3200 10KB
1415 # hits). If you wish to increase speed more than your want to
1416 # save bandwidth you should leave this low.
1418 # NOTE: if using the LFUDA replacement policy you should increase
1419 # this value to maximize the byte hit rate improvement of LFUDA!
1420 # See replacement_policy below for a discussion of this policy.
1423 # maximum_object_size 4096 KB
1424 maximum_object_size 150 MB
1428 <div class="section" id="tag-cache-mem">
1429 <h3><a class="toc-backref" href=
1430 "#id20">2.1.3 TAG: cache_mem</a></h3>
1432 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1433 utilizzata per la cache di Squid. Questo dipendera' dalla
1434 RAM disponibile sul sistema, e da quanta di questa volete
1435 mettere a disposizione di Squid (altri servizi
1436 iimportanti girano sulla stessa macchina?). Questo
1437 paramentro influisce sulle prestazioni e sul degrado dei
1438 supporti di storaggio (sopratutto se magnetici).</p>
1440 <p>Se si stesse pensando di usare dell'hardware
1441 <em>embedded</em> a basse prestazioni / consumo per
1442 realizzare un server gateway / NAT / Squid si tenga
1443 presente che Squid e' relativamente esoso di risorse:
1444 avra' bisogno di una macchina con <tt class=
1445 "docutils literal"><span class="pre">~25MB</span></tt>
1446 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1447 servire decorosamente una decina di client http su una
1448 rete ethernet 10/100. In questo caso non fate scendere
1449 <tt class="docutils literal"><span class=
1450 "pre">cache_mem</span></tt> sotto i <tt class=
1451 "docutils literal"><span class="pre">2/4</span>
1452 <span class="pre">MB</span></tt> pena un accesso continuo
1453 al supporto di storaggio.</p>
1455 <p>Se invece si disponesse di una macchina dedicata a
1456 Squid con gigabytes di RAM non si esiti a dedicarne buona
1457 parte a <em>cache_mem</em>.</p>
1459 <p>TAG: cache_mem (1566):</p>
1460 <pre class="literal-block">
1461 # 'cache_mem' specifies the ideal amount of memory to be used
1463 # * In-Transit objects
1465 # * Negative-Cached objects
1472 <div class="section" id="tag-minimum-object-size">
1473 <h3><a class="toc-backref" href=
1474 "#id21">2.1.4 TAG:
1475 minimum_object_size</a></h3>
1477 <p>Questo parametro imposta la dimensione minima degli
1478 oggetti salvati nella cache. Settato a <tt class=
1479 "docutils literal"><span class="pre">0</span></tt> o a
1480 valori molto piccoli puo' influire negativamente sulla
1481 deframmentazione del filesytem e consumare un numero
1482 elevato di <em>inode</em> (cosa non piu' importante con
1483 ext4 o altri filesytem).</p>
1485 <p>TAG: minimum_object_size:</p>
1486 <pre class="literal-block">
1487 # TAG: minimum_object_size (bytes)
1488 # Objects smaller than this size will NOT be saved on disk. The
1489 # value is specified in kilobytes, and the default is 0 KB, which
1490 # means there is no minimum.
1493 # minimum_object_size 0 KB
1494 minimum_object_size 0 KB
1499 <div class="section" id=
1500 "negoziazione-degli-accesi-al-servizio">
1501 <h2><a class="toc-backref" href=
1502 "#id22">2.2 Negoziazione degli accesi al
1505 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1506 <em>open relay</em> , si deve quindi limitare la rete che
1507 puo' accedere al servizio.</p>
1509 <dl class="docutils">
1510 <dt>Open Relay:</dt>
1512 <dd>Un servizio a cui possono accedere tutti
1513 indiscriminatamente. La cosa puo' andare bene per servizi
1514 come i server web, che aspirano per loro natura al
1515 maggior numero possibile di utenti, ma non a servizi come
1516 i proxy http oppure ai server di posta elettronica (che
1517 permetterebbero l'invio di SPAM).</dd>
1520 <p>Generalmente non volete che il vostro proxy http venga
1521 usato da persone sconosciute le quali sostanzialmente
1522 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1523 (probabilmente per visionare materiali che non vorrebbero
1524 fossero ricondotti direttamente a loro, per motivi che sta
1525 a voi prendere in considerazione) consumando traffico e
1526 banda della vostra connessione a internet. Tenere Squid in
1527 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1528 modo per essere inseriti in una <em>black list</em>.</p>
1530 <p>Per poter limitare gli accessi a Squid dal punto di
1531 vista dell'applicazione (quarto livello TCP/IP) si
1532 identifichera' inizialmente l'entita' <em>rete locale</em>
1533 (es: <tt class="docutils literal"><span class=
1534 "pre">localnet</span></tt>) con una ACL di tipo
1535 <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1536 / range di ip</em> della nostra rete.</p>
1539 Dopodiche l'accesso (<tt class=
1540 "docutils literal"><span class=
1541 "pre">http_access</span></tt>) si concedera'
1542 (<em>allow</em>) a questa entita' (es: <tt class=
1543 "docutils literal"><span class=
1544 "pre">localnet</span></tt>) negando chiunque altro.
1547 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1548 esprimere i range di ip: <a class="reference external"
1549 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1550 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1552 <div class="section" id="acl-e-http-access">
1553 <h3><a class="toc-backref" href=
1554 "#id23">2.2.1 ACL e http access</a></h3>
1556 <p>Si proceda a creare una <tt class=
1557 "docutils literal"><span class="pre">ACL</span></tt> di
1558 tipo <tt class="docutils literal"><span class=
1559 "pre">src</span></tt> per identificare la lostra rete
1560 locale, poi si abiliti l'accesso a questa con la
1561 direttiva <tt class="docutils literal"><span class=
1562 "pre">http_access</span></tt>. Tutto quanto non e'
1563 espressamente autorizzato viene poi negato da un
1564 <tt class="docutils literal"><span class=
1565 "pre">http_access</span> <span class="pre">deny</span>
1566 <span class="pre">all</span></tt> finale.</p>
1567 <pre class="literal-block">
1569 # Defining an Access List
1571 # Every access list definition must begin with an aclname and acltype,
1572 # followed by either type-specific arguments or a quoted filename that
1573 # they are read from.
1575 # ***** ACL TYPES AVAILABLE *****
1577 # acl aclname src ip-address/netmask ... # clients IP address
1580 # Example rule allowing access from your local networks.
1581 # Adapt to list your (internal) IP networks from where browsing
1583 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1584 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1585 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1587 acl localnet src 10.10.208.0/24
1591 # Allowing or Denying access based on defined access lists
1593 # Access to the HTTP port:
1594 # http_access allow|deny [!]aclname ...
1596 # NOTE on default values:
1598 # If there are no "access" lines present, the default is to deny
1602 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1604 # Example rule allowing access from your local networks.
1605 # Adapt localnet in the ACL section to list your (internal) IP networks
1606 # from where browsing should be allowed
1607 #http_access allow localnet
1608 http_access allow localnet
1613 <div class="section" id="testare-squid">
1614 <h2><a class="toc-backref" href=
1615 "#id24">2.3 Testare Squid</a></h2>
1617 <p>Configurato squid e' fondamentale testarne il corretto
1618 funzionamento per assicurarsi di non aver creato un
1619 <em>open-relay</em>. Per fare dei test significativi serve
1620 utilizzare degli host remoti: ci si connetta via ssh a
1621 questi per poi utilizzare <tt class=
1622 "docutils literal"><span class="pre">wget</span></tt> da
1623 riga di comando.</p>
1625 <div class="section" id="client-wgetrc">
1626 <h3><a class="toc-backref" href=
1627 "#id25">2.3.1 Client: ~/.wgetrc</a></h3>
1629 <p>Nel file <tt class="docutils literal"><span class=
1630 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1631 un file nascosto) si puo' impostare il proxy per wget. Si
1632 utililizzi l'indirizzo ip del server che si vuole
1633 testare, e si seguano i log <tt class=
1634 "docutils literal"><span class=
1635 "pre">/var/log/squid3/access.log</span></tt> sul
1638 <p>Da notare che la prova va' fatta su una macchina della
1639 rete che si vuole testare, non da <em>localhost</em>. Per
1640 altro se si utilizzasse <em>direttamente</em> <tt class=
1641 "docutils literal"><span class=
1642 "pre">localhost</span></tt> non si testerebbe la
1643 <em>ACL</em> predisposta, dato che si si rientrerebbe
1644 nella ACL (pre-configurata di default) <tt class=
1645 "docutils literal"><span class=
1646 "pre">localhost</span></tt>.</p>
1648 <dl class="docutils">
1651 <dd>http_proxy=10.10.208.178:3128</dd>
1654 <p>Si proceda a scaricare dal client scelto con un
1656 <pre class="literal-block">
1657 wget http://www.google.it
1661 <div class="section" id="server-access-log">
1662 <h3><a class="toc-backref" href=
1663 "#id26">2.3.2 Server:
1666 <p>Si puo' controllare il corretto funzionamento del
1667 server seguendo i log di accesso a Squid:</p>
1668 <pre class="literal-block">
1669 # tail -f /var/log/squid3/access.log
1672 <p>In oltre e' possibile configurare diversi
1673 <em>analizzatori di log</em> come <tt class=
1674 "docutils literal"><span class=
1675 "pre">Webalizer</span></tt> per studiare i log di
1681 <div class="section" id="apache">
1682 <h1><a class="toc-backref" href=
1683 "#id27">3 Apache</a></h1>
1685 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1686 dato alla piattaforma server Web modulare piu' diffusa (ma
1687 anche al gruppo di lavoro open source che ha creato,
1688 sviluppato e aggiornato il software server), in grado di
1689 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1691 <p>Un server web e' un processo, e per estensione il computer
1692 su cui e' in esecuzione, che si occupa di fornire, su
1693 richiesta del browser, una pagina web (spesso scritta in
1694 HTML). Le informazioni inviate dal server web viaggiano in
1695 rete trasportate dal protocollo HTTP. L'insieme di server web
1696 dà vita al World Wide Web, uno dei servizi piu'
1697 utilizzati di Internet.</p>
1699 <div class="section" id="pacchetti-da-installare">
1700 <h2><a class="toc-backref" href=
1701 "#id28">3.1 Pacchetti da
1702 installare::</a></h2>
1708 <p>Con la release 2.0 di Apache viene automaticamente resa
1709 disponibile anche la versione SSL (Secure Socket Layer,
1710 cpnnessioni criptate ) del web server.</p>
1713 <div class="section" id="configurazione-di-apache">
1714 <h2><a class="toc-backref" href=
1715 "#id29">3.2 Configurazione di
1718 <p>I file di configurazione di apache si trovano nella
1719 cartella: <tt class="docutils literal"><span class=
1720 "pre">/etc/apache2</span></tt> e sono strutturati come
1721 descritto nel file <tt class=
1722 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1723 . Sostanzialmente lo schema e' il seguente:</p>
1725 <dl class="docutils">
1726 <dt>apache2.conf</dt>
1729 <p class="first">File di configurazione principale del
1732 <p class="last">httpd.conf e' il vecchio file di
1733 configurazione di Apache1, presente per motivi di
1734 retrocompatibilita' e' generalemente vuoto.</p>
1739 <dd>In questo file vengono specificate le porte sulle
1740 quali resta in ascolto il server web. Si noti che
1741 utilizzando dei virtual hosts generalmente viene
1742 specificata per questi la porta su cui ascoltare nel file
1743 di configurazione del virtual host, ad es: <tt class=
1744 "docutils literal"><span class=
1745 "pre"><VirtualHost</span> <span class=
1746 "pre">*:80></span></tt></dd>
1748 <dt>sites-available</dt>
1750 <dd>In questa cartella vengono raccolti i file di
1751 configurazione dei virtual host disponibili.</dd>
1753 <dt>sites-enabled</dt>
1755 <dd>In questa cartella sono contenuti dei link simbolici
1756 ai files in ../sites-available : se il link e' presente
1757 in questa cartella il virtual host e' abilitato.</dd>
1759 <dt>mods-available</dt>
1761 <dd>Stesso metodo per i moduli: in questa cartella ci
1762 sono i moduli veri e propri che verranno poi abilitati
1763 grazie all'esistenza di link simbolici nella cartella
1766 <dt>mods-enabled</dt>
1768 <dd>Moduli abilitati, effettivamente caricati.</dd>
1772 <div class="section" id="apache-conf">
1773 <h2><a class="toc-backref" href=
1774 "#id30">3.3 apache.conf</a></h2>
1776 <p>File di configurazione del servizio Apache, contiene le
1777 impostazioni generiche (ad esempio utilizzo della RAM e
1778 risorse di sistema) dell'intero servizio. Nella
1779 configurazione di default per Debian non viene definito un
1780 vero e proprio sito di default ma solo dei virtual
1783 <p>Guardiamo alcune direttive interessanti:</p>
1785 <dl class="docutils">
1788 <dd>Numero di secondi da aspettare prima di chiudere la
1789 connessione con il client. Questo parametro serve a
1790 liberare le risorse di sistema nel caso che un client,
1791 magar a causa di una connessione particolarmente lenta o
1792 instabili, tenga attivo indefinitivamente un processo di
1797 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1798 alle connessioni persistenti (http 1.1) permettono al
1799 server di rispondere a piu' richieste dei client mediante
1800 la stessa connessione. Il protocoll http per sua natura
1801 e' senza stato (<em>statelessi</em> ), quindi ogni
1802 risorsa richiesta (per pagine web si pensi ad esempio
1803 alle immagini) dal client necessita di una connessione
1804 autonoma. Keep-alive permette di ottimizzare la
1805 connessione anche fino al 50% a seconda delle situazioni
1808 <dt>Server-Pool Size Regulation</dt>
1810 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1811 Tutti spiegati nel manuale di apache) servono per
1812 attribuire le risorse di sistema disponibili al server
1813 Apache. Tenere questi parametri bassi serve a limitare il
1814 rischio di Denial of Service per il server, nel caso
1815 offra altri servizi. I settagi di default sono come
1816 sempre abbastanza conservativi, se si conta di usare il
1817 proprio Apache per servire un sito web con molti
1818 visitatori sara' necessario aumentare sensibilmente le
1819 impostazioni di base.</dd>
1821 <dt>AccessFileName</dt>
1823 <dd>Il nome del file che viene onorato per modificare le
1824 impostazioni per una singola directory, legato alla
1825 direttiva AllowOverride .</dd>
1829 <div class="section" id="installazione-di-php">
1830 <h2><a class="toc-backref" href=
1831 "#id31">3.4 Installazione di PHP</a></h2>
1833 <p>Pacchetti da installare: <tt class=
1834 "docutils literal"><span class="pre">php5</span>
1835 <span class="pre">php-pear</span></tt></p>
1837 <div class="section" id="test-del-modulo-php">
1838 <h3><a class="toc-backref" href=
1839 "#id32">3.4.1 Test del modulo
1842 <p>Creare nella cartella <tt class=
1843 "docutils literal"><span class="pre">/var/www</span></tt>
1844 (o altra cartella visibile) un file con estensione *.php
1845 (es <tt class="docutils literal"><span class=
1846 "pre">/var/ww/info.php</span></tt> contenete codice php
1847 eseguibile dall'interprete, ad es:</p>
1848 <pre class="literal-block">
1849 <?php phpinfo() ; ?>
1852 <p>Questa funzione di php generera' la tipica pagina con
1853 le impostazioni attuali per PHP. Richiamando la pagina
1854 (es: <tt class="docutils literal"><span class=
1855 "pre">http://localhost/info.php</span></tt> ) verra
1856 generata dall'interprete PHP la pagina HTML e resa
1857 disponibile tramite Apache ai utclient HTTP, a prova del
1858 correto funzionamento del modulo di PHP e della sua
1859 integrazione con il serv web Apache. In caso contrario se
1860 il client http proporra di scaricare la pagina invece che
1861 visualizzarla nel browser: non funziona l'interprete di
1862 php o sono mal configurati i MIME-type. prima di tutto
1863 assicurarsi di aver fatoo ripartire Apache.</p>
1866 <div class="section" id=
1867 "installazione-del-supporto-per-mysql">
1868 <h3><a class="toc-backref" href=
1869 "#id33">3.4.2 Installazione del supporto
1872 <p>Installare i pacchetti:</p>
1873 <pre class="literal-block">
1874 php5-mysql phpmyadmin
1877 <p>Controllare tramite la pagina php.info che sia
1878 abilitato il supporto per Mysql (ripartito Apache,
1879 ricaricare la pagina e cercare con CTRL+f <tt class=
1880 "docutils literal"><span class=
1881 "pre">mysql</span></tt>).</p>
1884 <div class="section" id="phpmyadmin">
1885 <h3><a class="toc-backref" href=
1886 "#id34">3.4.3 phpmyadmin</a></h3>
1888 <p>L'interfaccia web Phpmyadmin non richede
1889 necessariamente la presenza di un database Mysql locale,
1890 puo' infatti essere utilizzata per gestire databases
1891 remoti (il suo file di configurazione: <tt class=
1892 "docutils literal"><span class=
1893 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1894 caso si voglia installare localmente Mysql si utilizzi il
1895 pacchetto <tt class="docutils literal"><span class=
1896 "pre">mysql-server</span></tt> .</p>
1898 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1899 <tt class="docutils literal"><span class=
1900 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1901 non fosse controllare che sia incluso il file <tt class=
1902 "docutils literal"><span class=
1903 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1904 <tt class="docutils literal"><span class=
1905 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1908 <div class="section" id=
1909 "installazione-del-supporto-per-postgresql">
1910 <h3><a class="toc-backref" href=
1911 "#id35">3.4.4 Installazione del supporto
1912 per Postgresql</a></h3>
1914 <p>Installare i pacchetti:</p>
1915 <pre class="literal-block">
1916 php5-pgsql phppgadmin
1919 <p>Controllare tramite la pagina php.info che sia
1920 abilitato il supporto per PostgreSQL (ripartito Apache,
1921 ricaricare la pagina e cercare con CTRL+f <tt class=
1922 "docutils literal"><span class=
1923 "pre">pgsql</span></tt>).</p>
1926 <div class="section" id="phppgadmin">
1927 <h3><a class="toc-backref" href=
1928 "#id36">3.4.5 phppgadmin</a></h3>
1930 <p>L'interfaccia web Phppgadmin per il database server
1931 PostgreSQL non richede necessariamente la presenza di un
1932 database locale, puo' infatti essere utilizzata per
1933 gestire databases remoti (il suo file di configurazione:
1934 <tt class="docutils literal"><span class=
1935 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1936 caso si voglia installare localmente Mysql si utilizzi il
1937 pacchetto <tt class="docutils literal"><span class=
1938 "pre">postgresql</span></tt> .</p>
1940 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1941 <tt class="docutils literal"><span class=
1942 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1943 non fosse controllare che sia incluso il file <tt class=
1944 "docutils literal"><span class=
1945 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1946 <tt class="docutils literal"><span class=
1947 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1951 <div class="section" id="virtual-hosts">
1952 <h2><a class="toc-backref" href=
1953 "#id37">3.5 Virtual hosts</a></h2>
1957 <li><a class="reference external" href=
1958 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1960 <li><a class="reference external" href=
1961 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1962 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1966 <p>I virtual host permettono di avere piu' siti internet
1967 disponibili tramite lo stesso server web, eventualmente
1968 mappati su un solo indirizzo ip. Sono generalemente di due
1973 <li>Basati su <em>indirizzi ip</em>. Se si ha la
1974 possibilita' di avere piu' indirizzi ip dedicati per i
1975 diversi siti che si vuole servire. ES: <tt class=
1976 "docutils literal"><span class=
1977 "pre"><VirtualHost</span> <span class=
1978 "pre">192.168.0.2:80></span></tt> . Soluzione
1979 dispendiosa, si tende ad usarla solo se servono
1980 certificati di sicurezza (SSL ) dedicati per ogni
1983 <li>Basati su <em>nomi di dominio</em> che puntano allo
1984 stesso ip. Soluzione piu' economica e diffusa che si
1985 basa sulle funzionalita' di http 1.1 .</li>
1989 <p>Prenderemo in esame la gestione di virtual hosts basati
1990 su nomi di dominio.</p>
1992 <div class="section" id="gestione-dns">
1993 <h3><a class="toc-backref" href=
1994 "#id38">3.5.1 Gestione DNS</a></h3>
1996 <p>Prima di tutto per poter impostare i virtual hosts
1997 dovete avere un server DNS che risolva i vostri nomi di
1998 dominio sull'indirizzo ip del server. Questo si puo'
1999 ottenere in vari modi, ad es:</p>
2002 <dl class="docutils">
2003 <dt><em>Bind</em> (DNS server)</dt>
2005 <dd>Impostare i campi A nelle proprie zone gestite
2006 dal server dns Bind. Ad es: <tt class=
2007 "docutils literal"><span class=
2008 "pre">papo</span>
2010 "pre">A</span>
2011 <span class="pre">212.22.136.248</span></tt></dd>
2013 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2015 <dd>Utilizzare un servizio come ad es: <a class=
2016 "reference external" href=
2017 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2018 per mappare nomi di dominio sul proprio indirizzo ip,
2019 comodo ad esempio se si dispone di un indirzzo ip
2020 pubblico (anche se dinamico) per la propria
2021 connessione ad internet.</dd>
2023 <dt><em>Dnsmasq</em> (DNS server)</dt>
2025 <dd>Utilizzabile a livello locale per fare dei test,
2026 utilizzando direttive come: <tt class=
2027 "docutils literal"><span class=
2028 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2030 <dt><tt class="docutils literal"><span class=
2031 "pre">/etc/hosts</span></tt></dt>
2033 <dd>Per prove <em>strettamente a livello locale</em>
2034 potete impostare i nomi dei vostri virtual server nel
2035 file /etc/hosts .</dd>
2038 <pre class="literal-block">
2041 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2042 ;; global options: printcmd
2044 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2045 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2047 ;; QUESTION SECTION:
2048 ;177.piffa.net. IN A
2051 177.piffa.net. 0 IN A 10.10.208.177
2053 ;; Query time: 12 msec
2054 ;; SERVER: 10.10.208.254#53(10.10.208.254)
2055 ;; WHEN: Wed May 6 12:27:08 2009
2056 ;; MSG SIZE rcvd: 47
2059 <p>La parte interessante e' <tt class=
2060 "docutils literal"><span class=
2061 "pre">177.piffa.net.</span>
2063 "pre">0</span>
2064 <span class="pre">IN</span>
2066 "pre">A</span>
2067 <span class="pre">10.10.208.177</span></tt> . Il nome di
2068 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2069 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2070 dovra' essere disponibile un virtual host che corrisponde
2071 al nome <tt class="docutils literal"><span class=
2072 "pre">177.piffa.net</span></tt> .</p>
2075 <div class="section" id="virtual-host">
2076 <h3><a class="toc-backref" href=
2077 "#id39">3.5.2 Virtual host</a></h3>
2079 <p>Esempio di Virtual host:</p>
2080 <pre class="literal-block">
2081 <VirtualHost *:80 >
2082 ServerName 177.piffa.net
2083 DocumentRoot /var/www/177.piffa.net/
2084 ServerAdmin webmaster@177.piffa.net
2085 </VirtualHost>
2088 <ol class="arabic simple">
2089 <li><tt class="docutils literal"><span class=
2090 "pre"><VirtualHost</span> <span class=
2091 "pre">\*:80</span> <span class="pre">></span></tt>
2092 La prima riga indica l'inizio della stanza relativa al
2093 nostro virtual host, che ascolotera' su qualunque
2094 indirizzo ip (nel caso il server abbia piu' indirizzi
2095 dai quali e' raggiungibile) sulla porta <tt class=
2096 "docutils literal"><span class=
2097 "pre">80</span></tt>.</li>
2099 <li><tt class="docutils literal"><span class=
2100 "pre">Server/name</span></tt> precisa quale sara' il
2101 nome di dominio a cui verra' associato questo sito
2102 rispetto ad altri eventualmenti presenti sullo stesso
2105 <li><tt class="docutils literal"><span class=
2106 "pre">DocumentRoot</span></tt> : il path della
2107 directory che contiene le pagine del sito.</li>
2109 <li><tt class="docutils literal"><span class=
2110 "pre">ServerAdmin</span></tt>: l'indirizzo del
2111 webmaster, in modo da poterlo contattare in caso di
2112 problemi col sito.</li>
2114 <li><tt class="docutils literal"><span class=
2115 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2116 chiusura della stanza di definizione del virtual
2120 <p>Quelle che abbiamo appena visto sono le direttive
2121 essenziali per definire un sito virtuale, potrebbe essere
2122 utile aggiungene altre:</p>
2126 <dl class="first docutils">
2127 <dt><tt class="docutils literal"><span class=
2128 "pre">ErrorLog</span> <span class=
2129 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2132 <p class="first last">Log degli errori separato
2133 dai restanti siti web ospitati dal server.</p>
2139 <dl class="first docutils">
2140 <dt><tt class="docutils literal"><span class=
2141 "pre">LogLevel</span> <span class=
2142 "pre">warn</span></tt></dt>
2145 <p class="first last">Livello di importanza degli
2146 eventi loggati= warning <em>attenzione</em> .</p>
2152 <dl class="first docutils">
2153 <dt><tt class="docutils literal"><span class=
2154 "pre">CustomLog</span> <span class=
2155 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2156 <span class="pre">combined</span></tt></dt>
2159 <p class="first last">Log di accesso separati
2160 dagli altri siti, utile anche qua per statistiche
2161 di accesso per il solo sito virtuale.</p>
2167 <p>Potrebbe essere utile modificare le impostazioni di
2168 una intera directory, ad esempio per abilitare
2169 l'<tt class="docutils literal"><span class=
2170 "pre">AuthConfig</span></tt>:</p>
2171 <pre class="literal-block">
2172 <Directory "/var/www/miosito.net/privata">
2173 AllowOverride AuthConfig
2174 Options ExecCGI Indexes MultiViews FollowSymLinks
2180 <p><tt class="docutils literal"><span class=
2181 "pre">AllowOverride</span> <span class=
2182 "pre">AuthConfig</span></tt> ora vale per l'intera
2183 directory, come le altre opzioni.</p>
2187 <div class="section" id="negoziazione-accessi">
2188 <h2><a class="toc-backref" href=
2189 "#id40">3.6 Negoziazione accessi</a></h2>
2191 <p>Tipicamente quando si installa un server web il proprio
2192 desiderio e' di dare accesso ai materiali disponibili al
2193 maggior numero di visitatori possibile. Talvolta pero' puo
2194 essere utile o necessario limitare gli accessi, ad esempio
2195 per escludere un <em>bot</em> indesiderato che scansiona
2196 ininterottamente le nostre pagine o per creare una <em>Area
2197 Riservata</em> i cui materiali non devono essere
2198 disponibile a tutti.</p>
2200 <div class="section" id="limiti-su-base-ip">
2201 <h3><a class="toc-backref" href=
2202 "#id41">3.6.1 Limiti su base ip</a></h3>
2204 <p>La forma piu' semplice di restrizine degli accessi e'
2205 su base degli indirizzi IP dei client: tipicamente i siti
2206 web sono settati per dare accesso a chiunque:</p>
2207 <pre class="literal-block">
2208 <VirtualHost *:80 >
2210 <Directory "/var/www/177.piffa.net">
2214 </VirtualHost>
2217 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2219 <pre class="literal-block">
2220 <VirtualHost *:80 >
2221 <Directory "/var/www/177.piffa.net">
2224 Deny from 192.168.0.1
2226 </VirtualHost>
2229 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2230 materiali dell'intero sito virtuale, oppure potremmo
2231 lavorare su una sola directory:</p>
2232 <pre class="literal-block">
2233 <Directory "/var/www/miosito.net/limitata">
2235 Allow from 192.168.0.0./24
2240 <p>In questo modo solo la classe IP <tt class=
2241 "docutils literal"><span class=
2242 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2243 directory <tt class="docutils literal"><span class=
2244 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2245 relativamente facile per un malintenzionato cambiare il
2246 propio indirizzo ip, oppure collegarsi da un altra zona.
2247 Meno facile e' accedere ad una classe privata trovandosi
2248 all'esterno di questa, ma e' comunque possibile mandare
2249 delle richieste <tt class="docutils literal"><span class=
2250 "pre">GET</span></tt> per cercare di mandare in Denial Of
2251 Service il webserver.</p>
2255 <div class="section" id="user-authentication">
2256 <h2><a class="toc-backref" href=
2257 "#id42">3.7 User Authentication</a></h2>
2259 <p>A volte conviene negoziare gli accessi ad un area di un
2260 sito tramite autenticazione basata sull'accopiata <em>nome
2261 utente / password</em>. Questo puo' venire utile per creare
2262 una area download <em>intranet</em>, alla quale possano
2263 accedere solo gli utenti previsti a prescindere dagli
2264 indirizzi IP dei loro client. Per quanto esistano soluzioni
2265 piu' granulari e sofisticate per ottenere questo,
2266 <em>mod-auth</em> puo'essere sufficente. E mod auth non
2267 richiede l'installazione di software aggiuntivi.</p>
2269 <p>link: <a class="reference external" href=
2270 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2272 <div class="section" id="definire-la-cartella">
2273 <h3><a class="toc-backref" href=
2274 "#id43">3.7.1 Definire la
2277 <p>Decidere quale sara' il <em>path</em> della cartella
2278 da sottoporre ad autentizazione:(e creiamo la
2282 <tt class="docutils literal"><span class=
2283 "pre">mkdir</span> <span class=
2284 "pre">/var/www/177.piffa.net/privata</span></tt>
2288 <div class="section" id=
2289 "creazione-del-database-delle-passwords">
2290 <h3><a class="toc-backref" href=
2291 "#id44">3.7.2 Creazione del database
2292 delle passwords</a></h3>
2294 <p>Un modo semplice per gestire una database di
2295 <em>user-id / passwords</em> e' utilizzare l'utility
2296 <tt class="docutils literal"><span class=
2297 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2298 in cui un <em>crypt</em> delle password viene associato
2301 <p>Si dovra' decidere dove tenere questo file, la cosa
2302 importante e' che non sia visibile nel sito web: non deve
2303 essere scaricabile dai visitatori. Deve essere cioe'
2304 all'esterno della <em>DocumentRoot</em>: un buon posto
2305 potrebbe essere la /home dell'utente.</p>
2307 <p>Creiamo (con il <em>flag</em> <tt class=
2308 "docutils literal"><span class="pre">-c</span></tt>) il
2309 file <tt class="docutils literal"><span class=
2310 "pre">/home/utente/passwords</span></tt> con l'utente
2311 <tt class="docutils literal"><span class=
2312 "pre">luca</span></tt>:</p>
2313 <pre class="literal-block">
2314 htpasswd -c /home/utente/passwords luca
2317 <p><tt class="docutils literal"><span class=
2318 "pre">htpasswd</span></tt> ci chedera' la password da
2319 associare all'utente <tt class=
2320 "docutils literal"><span class="pre">luca</span></tt>.
2321 Per sucessive modifiche della password o aggiunta di
2322 nuovi utenti non sara' necessario usare il flag
2323 <tt class="docutils literal"><span class=
2324 "pre">-c</span></tt>.</p>
2327 <div class="section" id="id3">
2328 <h3><a class="toc-backref" href=
2329 "#id45">3.7.3 Configurazione di
2332 <p>Ora possiamo passare alla configurazione vera e
2333 propria di Apache, ma con una novita': andremo a inserire
2334 la voce in un <tt class="docutils literal"><span class=
2335 "pre">.htaccess</span></tt> invece che modificare il file
2336 di impostazione del virtual-host.</p>
2338 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2339 puo' modificare l'impostazione del virtual host nel file
2340 <tt class="docutils literal"><span class=
2341 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2342 ma spesso il motivo per cui creiamo i virtual hosts e'
2343 ospitare i siti di altri utenti, che possono solo
2344 pubblicare (generalmente tramite <em>FTP</em>) i loro
2345 documenti nella loro <em>DocumentRoot</em>, senza poter
2346 quindi modificare in alcun modo la configurazione del
2349 <p>Dando agli utenti la possibilita' di modificare
2350 (<em>AllowOverride</em>) autonomamente alcuni parametri
2351 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2352 funzionamenteo del loro spazio web ci togliera'
2353 l'incombenza di dover intervenire suii vari virtual
2356 <p>Abilitiamo l'AllowOverride nel file di configurazione
2357 del virtual host per la sola directory <tt class=
2358 "docutils literal"><span class=
2359 "pre">privata</span></tt>:</p>
2360 <pre class="literal-block">
2361 <VirtualHost *:80 >
2362 ServerName 177.piffa.net
2363 DocumentRoot /var/www/177.piffa.net/
2364 ServerAdmin webmaster@177.piffa.net
2365 <Directory "/var/www/177.piffa.net/privata">
2366 AllowOverride AuthConfig
2368 </VirtualHost>
2371 <p>Per rendere il cambiamento effettivo sara' necessario
2372 fare un restart / reload di Apache.</p>
2374 <p>Ora sara' possibile, anche per l'utente di sistema,
2375 creare un fie <tt class="docutils literal"><span class=
2376 "pre">.htaccess</span></tt> che sara' onorato da
2379 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2380 <pre class="literal-block">
2381 # Questo file viene incluso
2382 # nella configurazione del sito web
2383 # Messaggio visualizzato al prompt per l'autenticazione
2384 AuthName "Area privata soggetta ad autentizazione"
2385 # tipo di autenticazione da usarsi
2387 # File generato precedentemente con htpasswd
2388 AuthUserFile /home/utente/passwords
2390 # Negoziazione degli accessi
2391 # valid users permette l'accesso agli utenti specificati
2392 # nel file generato da htpasswd
2396 <p>Si noti che non e' necessario fare ripartire Apache
2397 per onorare i cambiamenti (un utente non avrebbe la
2398 possibilita' di farlo!).</p>
2402 <div class="section" id="cavets">
2403 <h2><a class="toc-backref" href=
2404 "#id46">3.8 Cavets</a></h2>
2406 <p>Problemi di cache:</p>
2410 <li>Proxy: nei settaggi del browser specificare di non
2411 utilizzare un server proxy http per il sito web locale
2412 (o per gli altri che si stanno monitorando). Se si ha
2413 il controllo del proxy server: stopparlo, ricaricare la
2414 pagina (operazione che fallira'), far ripartire il
2415 proxy, ricaricare la pagina.</li>
2417 <li>Provare con un altro browser, o cercare di svuotare
2418 la cache chiudere/riaprire l'applicativo. Provare a
2419 fermare Apache, ricaricare la pagina (operazione che
2420 fallira'), far ripartire Apache, ricaricare la
2427 <div class="section" id="domain-name-system">
2428 <h1><a class="toc-backref" href=
2429 "#id47">4 Domain Name System</a></h1>
2431 <p>Domain Name System (spesso indicato con DNS) e' un
2432 servizio utilizzato per la risoluzione di nomi di host in
2433 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2434 un database distribuito, costituito dai server DNS.</p>
2436 <p>Il nome DNS denota anche il protocollo che regola il
2437 funzionamento del servizio, i programmi che lo implementano,
2438 i server su cui questi girano, l'insieme di questi server che
2439 cooperano per fornire il servizio.</p>
2441 <p>I nomi DNS, o "nomi di dominio", sono una delle
2442 caratteristiche piu' visibili di Internet.</p>
2444 <p>C'e' confusione in merito alla definizione dell'acronimo:
2445 la S spesso viene interpretata come service, ma la
2446 definizione corretta e' system.</p>
2448 <p>L'operazione di convertire un nome in un indirizzo e'
2449 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2450 detto risoluzione inversa.</p>
2452 <div class="section" id="nomi-di-dominio">
2453 <h2><a class="toc-backref" href=
2454 "#id48">4.1 Nomi di dominio</a></h2>
2456 <p>Un nome a dominio e' costituito da una serie di stringhe
2457 separate da punti, ad esempio it.wikipedia.org. A
2458 differenza degli indirizzi IP, dove la parte piu'
2459 importante del numero e' la prima partendo da sinistra, in
2460 un nome DNS la parte piu' importante e' la prima partendo
2461 da destra. Questa e' detta dominio di primo livello (o TLD,
2462 Top Level Domain), per esempio .org o .it.</p>
2464 <p>Un dominio di secondo livello consiste in due parti, per
2465 esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2466 specifica un'ulteriore suddivisione. Quando un dominio di
2467 secondo livello viene registrato all'assegnatario, questo
2468 e' autorizzato a usare i nomi di dominio relativi ai
2469 successivi livelli come it.wikipedia.org (dominio di terzo
2470 livello) e altri come some.other.stuff.wikipedia.org
2471 (dominio di quinto livello) e cosi' via.</p>
2474 <div class="section" id="tipologie-di-record">
2475 <h2><a class="toc-backref" href=
2476 "#id49">4.2 Tipologie di record</a></h2>
2478 <p>Ad un nome DNS possono corrispondere diversi tipi di
2479 informazioni. Per questo motivo, esistono diversi tipi di
2480 record DNS. Ogni voce del database DNS deve essere
2481 caratterizzata da un tipo. I principali tipi sono:</p>
2484 <li>Record A - Indica la corrispondenza tra un nome ed
2485 uno (o piu') indirizzi IP (per la precisione indirizzi
2486 IPv4, ovvero la versione attualmente in uso).</li>
2488 <li>Record MX - (Mail eXchange) indica a quali server
2489 debba essere inviata la posta elettronica per un certo
2492 <li>Record CNAME - Sono usati per creare un alias, ovvero
2493 per fare in modo che lo stesso calcolatore sia noto con
2494 piu' nomi. Uno degli utilizzi di questo tipo di record
2495 consiste nell'attribuire ad un host che offre piu'
2496 servizi un nome per ciascun servizio. In questo modo, i
2497 servizi possono poi essere spostati su altri host senza
2498 dover riconfigurare i client, ma modificando solo il
2501 <li>Record PTR - Il DNS viene utilizzato anche per
2502 realizzare la risoluzione inversa, ovvero per far
2503 corrispondere ad un indirizzo IP il corrispondente nome a
2504 dominio. Per questo si usano i record di tipo "PTR" (e
2505 una apposita zona dello spazio dei nomi
2508 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2510 <li>Record SRV - Identificano il server per un
2511 determinato servizio all'interno di un dominio. Possono
2512 essere considerati una generalizzazione dei record
2515 <li>Record TXT - Associano campi di testo arbitrari ad un
2516 dominio. Questi campi possono contenere una descrizione
2517 informativa oppure essere utilizzati per realizzare
2521 <p>Vi sono anche tipi di record "di servizio", necessari al
2522 funzionamento del database distribuito: * Record NS -
2523 Utilizzato per indicare quali siano i server DNS
2524 autoritativi per un certo dominio, ovvero per delegarne la
2525 gestione. * Record SOA - (Start of Authority) usato per la
2526 gestione delle zone DNS.</p>
2529 <div class="section" id="utilizzo">
2530 <h2><a class="toc-backref" href=
2531 "#id50">4.3 Utilizzo</a></h2>
2533 <p>I computer vengono identificati in rete grazie agli
2534 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2535 utenti come riferimento per i vari server. Ad esempio
2536 sarebbe scomodoriferirsi al motore di ricerca Goggle con
2537 uno dei suoi IP: <tt class="docutils literal"><span class=
2538 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2539 nome di dominio <em>www.google.com</em>:</p>
2540 <pre class="literal-block">
2541 ping -c 1 www.google.com
2542 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2546 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2547 <h2><a class="toc-backref" href=
2548 "#id51">4.4 Risoluzione dei nomi di
2551 <p>Ci sono vari strumenti per interrogare i server DNS e
2552 ottenere l'indirizzo IP associato al nome di dominio che ci
2554 <pre class="literal-block">
2555 $ host www.piffa.net
2556 www.piffa.net is an alias for piffa.net.
2557 piffa.net has address 65.98.21.97
2558 piffa.net mail is handled by 10 65.98.21.97
2561 $ nslookup www.piffa.net
2562 Server: 192.168.0.10
2563 Address: 192.168.0.10#53
2565 Non-authoritative answer:
2566 www.piffa.net canonical name = piffa.net.
2568 Address: 65.98.21.97
2573 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2574 ;; global options: +cmd
2576 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2577 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2579 ;; QUESTION SECTION:
2580 ;www.piffa.net. IN A
2583 www.piffa.net. 3489 IN CNAME piffa.net.
2584 piffa.net. 3489 IN A 65.98.21.97
2586 ;; AUTHORITY SECTION:
2587 piffa.net. 86289 IN NS ns2.mydomain.com.
2588 piffa.net. 86289 IN NS ns1.mydomain.com.
2589 piffa.net. 86289 IN NS ns4.mydomain.com.
2590 piffa.net. 86289 IN NS ns3.mydomain.com.
2592 ;; ADDITIONAL SECTION:
2593 ns1.mydomain.com. 96208 IN A 64.94.117.193
2594 ns2.mydomain.com. 96208 IN A 64.94.31.67
2595 ns3.mydomain.com. 96208 IN A 66.150.161.137
2596 ns4.mydomain.com. 96208 IN A 63.251.83.74
2598 ;; Query time: 1 msec
2599 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2600 ;; WHEN: Sun May 10 21:23:11 2009
2601 ;; MSG SIZE rcvd: 209
2604 <p>Lo strumento piu' esaustivo e' <tt class=
2605 "docutils literal"><span class="pre">dig</span></tt>,
2606 installabile con il pacchetto <tt class=
2607 "docutils literal"><span class="pre">dnsutils</span></tt>
2611 <div class="section" id="dig">
2612 <h2><a class="toc-backref" href=
2613 "#id52">4.5 Dig</a></h2>
2615 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2616 "docutils literal"><span class="pre">dig</span></tt> per
2617 l'inerrogazione dei DNS Server:</p>
2618 <pre class="literal-block">
2621 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2622 ;; global options: +cmd
2624 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2625 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2627 ;; QUESTION SECTION:
2628 ;www.google.it. IN A
2631 www.google.it. 250683 IN CNAME www.google.com.
2632 www.google.com. 334819 IN CNAME www.l.google.com.
2633 www.l.google.com. 186 IN A 74.125.43.103
2634 www.l.google.com. 186 IN A 74.125.43.104
2635 www.l.google.com. 186 IN A 74.125.43.147
2636 www.l.google.com. 186 IN A 74.125.43.99
2638 ;; AUTHORITY SECTION:
2639 l.google.com. 80856 IN NS f.l.google.com.
2640 l.google.com. 80856 IN NS d.l.google.com.
2641 l.google.com. 80856 IN NS b.l.google.com.
2642 l.google.com. 80856 IN NS c.l.google.com.
2643 l.google.com. 80856 IN NS a.l.google.com.
2644 l.google.com. 80856 IN NS e.l.google.com.
2645 l.google.com. 80856 IN NS g.l.google.com.
2647 ;; Query time: 1 msec
2648 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2649 ;; WHEN: Sun May 10 21:34:47 2009
2650 ;; MSG SIZE rcvd: 255
2653 <dl class="docutils">
2656 <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2657 <em>root servers</em> utilizzati. I root server sono i
2658 server che mantengono le informazioni sui domini di primo
2659 livello (TLD) e sono quindi il punto di partenza per
2660 scorrere nella directory dei DNS per recuperare le
2661 informazioni (tipicamente un campo <tt class=
2662 "docutils literal"><span class="pre">A</span></tt> per un
2663 indirizzo IP) che ci servono per raggiungere un certo
2672 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2673 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2674 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2675 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2676 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2677 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2678 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2679 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2680 J.ROOT-SERVERS.NET. . 192032 IN NS
2681 D.ROOT-SERVERS.NET.</p>
2686 <dl class="docutils">
2687 <dt>dig @nome_dns</dt>
2689 <dd>Permette di fare una query ad un server dns
2690 particolare. Es: <tt class=
2691 "docutils literal"><span class="pre">dig</span>
2692 <span class="pre">@151.99.25.1</span> <span class=
2693 "pre">www.google.it</span></tt></dd>
2695 <dt>dig MX www.google.it</dt>
2697 <dd>Chiede un campo in particolare, in questo caso il
2700 <dt>dig ANY www.google.it</dt>
2702 <dd>Chiede tutti i campi, non solo i campi
2705 <dt>dig -x 74.125.43.104</dt>
2707 <dd>Effettua una richiesta inversa: dall'ip al PTR
2712 <div class="section" id="resolv-conf">
2713 <h2><a class="toc-backref" href=
2714 "#id53">4.6 resolv.conf</a></h2>
2716 <p>Il file <tt class="docutils literal"><span class=
2717 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2718 sul dns usato dal sistema, in genere anche altre
2719 applicazioni che devono effettuare query DNS leggono
2720 resolv.conf per conoscere l'ubicazione del DNS.</p>
2722 <p>/etc/resolv.conf:</p>
2726 <li><tt class="docutils literal"><span class=
2727 "pre">nameserver</span></tt>: indica il nameserver da
2728 utilizzare, indicato con l'indirizzo ip.</li>
2730 <li><tt class="docutils literal"><span class=
2731 "pre">domain</span></tt>: indica il nome di dominio
2732 della rete attuale, vedi voce sucessiva.</li>
2734 <li><tt class="docutils literal"><span class=
2735 "pre">search</span></tt>: nome di dominio usato dalla
2736 rete sul quale cercare gli hosts. Ad esempio se
2737 impostato su <tt class="docutils literal"><span class=
2738 "pre">piffa.net</span></tt> pingando l'host <tt class=
2739 "docutils literal"><span class="pre">bender</span></tt>
2740 viene automaticamente fatto un tentativo di ricerca per
2741 <tt class="docutils literal"><span class=
2742 "pre">bender.piffa.net</span></tt>.</li>
2746 <p>Si veda anche la pagina man di resolv.conf.</p>
2748 <p>Attenzione: se si usa un client DHCP o simile questo
2749 file potra' essere riscritto automaticamente in base a
2750 quanto ottenuto dal DHCP. Si veda la documentazione del
2751 pacchtto <tt class="docutils literal"><span class=
2752 "pre">resolvconf</span></tt>.</p>
2755 <div class="section" id="etc-hosts">
2756 <h2><a class="toc-backref" href=
2757 "#id54">4.7 /etc/hosts</a></h2>
2759 <p>Tabella statica per l'associazione tra IP e nomi di
2761 <pre class="literal-block">
2766 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2767 daniela daniela.piffa.net 10.10.208.254 mirror
2768 mirror.piffa.net 91.191.138.15 thepiratebay.org
2769 192.168.0.11 chrome chrome.mydomain.com
2772 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2773 stringhe di testo (anche piu' di una es: <tt class=
2774 "docutils literal"><span class="pre">mirror</span></tt> e
2775 <tt class="docutils literal"><span class=
2776 "pre">mirror.piffa.net</span></tt>), un record per
2779 <p>Il problema e' la gestione di questo file: quando gli
2780 host cambiano IP si devono aggiornare i records, e c'e' poi
2781 il problema di distribuire questo file tra i vari hosts
2782 della propia LAN. Un metodo semplice per distribuire questo
2783 file e' utilizzare <tt class=
2784 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2785 questo infatti legge e onora il file <tt class=
2786 "docutils literal"><span class="pre">hosts</span></tt>
2787 locale e lo <em>distribuisce</em> ai clients.</p>
2789 <p>Modificare (riconducendola a un ip interno, cosi'
2790 annullandola) la risoluzione di un nome di dominio e' un
2791 modo drastico e funzionale per <em>annullarlo</em>
2792 rendendolo indisponibile alla propia rete locale, ad
2793 esempio aggiungere al file <tt class=
2794 "docutils literal"><span class=
2795 "pre">/etc/hosts</span></tt>:</p>
2796 <pre class="literal-block">
2797 127.0.0.1 www.facebook.com
2800 <p>Impedira' agli utenti della LAN di raggiungere
2801 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2804 <div class="section" id="hostname">
2805 <h2><a class="toc-backref" href=
2806 "#id55">4.8 Hostname</a></h2>
2808 <p>Ogni computer ha un <em>propio nome</em> visualizzabile
2809 (e modificabile) con il comando <tt class=
2810 "docutils literal"><span class=
2811 "pre">hostname</span></tt>.</p>
2813 <p>Per modificare in modo permanente il nome del computer
2814 si modifichi il contenuto del file <tt class=
2815 "docutils literal"><span class=
2816 "pre">/etc/hostname</span></tt>.</p>
2818 <p>Tipicamente si vuole mantenere una correlazione tra il
2819 nome dell'host, o meglio la stringa con cui il server si
2820 qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
2821 di <em>servizi virtuali</em> ci sara' un <em>nome
2822 server</em> principale associato al <em>PTR</em> condiviso.
2823 Non e' automatico che un servizio, ad esempio un server di
2824 posta, si qualifichi leggendo il contenuto di questo file e
2825 magari aggiungendo come suffisso il dominio di cui fa parte
2826 l'host: a volte questo parametro puo' essere specificato
2827 nel file di configurazione del servizio:</p>
2828 <pre class="literal-block">
2829 * Squid: ``visible_hostname``
2831 * Postfix: ``myhostname``
2836 <div class="section" id="dnsmasq">
2837 <h1><a class="toc-backref" href=
2838 "#id56">5 DNSmasq</a></h1>
2840 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2841 forwarder e un server DHCP caratterizzato dalla facilita' di
2842 configurazione, dalla leggerezza e dalla possibilita' di
2843 modificare rapidamente i record DNS serviti alla rete. Puo'
2844 essere anche utilizzato come <cite>server per il boot da rete
2845 <http://www.debian-administration.org/articles/478>_</cite>
2848 <p>Dnsmasq e' un interessante alternativa all'uso del server
2849 DNS Bind in modalita' cache-only (non autoritativo)
2850 accompagnato dal server DHCPD. I vantaggi sono:</p>
2853 <li>Leggerezza: puo' essere fatto girare su una macchina
2854 relativamente debole in caso di bisogno.</li>
2856 <li>Rapidita' di configurazione (in particolare per servire
2857 dei record A / MX alla rete, modificando al volo i valori
2858 originali ospitati sul server DNS Publico).</li>
2860 <li>Ben integrato con connssioni PPP (utile se dovete
2861 rendere disponibile rapidamente una connessione a internet
2862 a una rete in difficolta').</li>
2865 <p>Tutto cio' rende Dnsmasq una soluzione valida in
2866 particolare quando si deve intervenire in una rete
2867 pre-esistente in cui il server principale e' in crisi: si
2868 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2869 <em>mascherare</em> i servizi al momento non disponibili.
2870 Molto utile per scopi didattici, sopratutto per testare
2871 server SMTP impostando al volo i campi MX per nomi di dominio
2874 <div class="section" id="configurazione">
2875 <h2><a class="toc-backref" href=
2876 "#id57">5.1 Configurazione</a></h2>
2878 <p>Vediamo alcune direttive di basi del file di
2879 configurazione <tt class="docutils literal"><span class=
2880 "pre">/etc/dnsmasq.conf</span></tt> utili per la
2881 configurazione sia del DNS cache che per il DHCP
2884 <dl class="docutils">
2885 <dt>domain-needed</dt>
2887 <dd>Non inoltrare query ai server DNS esterni per nomi
2888 semplici (es andrea, portatile, pippo) che verranno
2889 risolti solo in locale o causeranno direttamente una
2890 risposta <em>not found</em> .</dd>
2894 <dd>Simile alla voce precedente ma per i reverse
2899 <dd>Nome di dominio della rete da passare ai client.</dd>
2901 <dt>expand_hosts</dt>
2903 <dd>Aggiunge il <tt class="docutils literal"><span class=
2904 "pre">nome</span> <span class="pre">host</span></tt> (
2905 <tt class="docutils literal"><span class=
2906 "pre">/etc/hostname</span></tt>) dei client al nome di
2907 dominio per qualificarli in rete, senza bisogno di dover
2908 comporre a un elenco statico di record nel file
2909 <tt class="docutils literal"><span class=
2910 "pre">/etc/hosts</span></tt> o nello stesso file di
2911 configurazione di dnsmasq. Es: se un vostro client si
2912 chiama <tt class="docutils literal"><span class=
2913 "pre">chrome</span></tt> e il vostro dominio <tt class=
2914 "docutils literal"><span class=
2915 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
2916 il campo <em>A</em> per il dominio <tt class=
2917 "docutils literal"><span class=
2918 "pre">chrome.piffa.net</span></tt> diretto all'ip che
2919 verra' assegnato al client.</dd>
2923 <div class="section" id="dhcp">
2924 <h2><a class="toc-backref" href=
2925 "#id58">5.2 DHCP</a></h2>
2927 <p>Per attivare il demone DHCP di dnsmaq basta aggiungere
2928 al file di configurazione il <em>range</em> degli ip che si
2929 vuole assegnare ai client con il <em>lease time</em> (tempo
2930 di rilascio: quanto a lungo saranno validi gli ip
2931 assegnati) espresso in ore.</p>
2933 <p>Si faccia <em>attenzione</em>: in una rete puo' esseere
2934 presente <strong>un solo server DHCP</strong>, o per meglio
2935 dire qualunque server DHCP ascolta sul broadcast <tt class=
2936 "docutils literal"><span class=
2937 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
2938 un pacchetto di richesta DHCP. Quindi non fate partire
2939 inavvertitamente un server DHCP in una rete gia' servita e
2940 <strong>non vi azzardate ad andare in giro con un portatile
2941 con un server DHCP attivo</strong> nelle reti altrui.
2942 Questo vale anche per i laboratori di informatica dei corsi
2943 di reti: non fate partire il vostro server DHCP se siete
2944 collegati alla rete interna!</p>
2946 <p>/etc/dnsmasq.conf (riga 118):</p>
2947 <pre class="literal-block">
2948 dhcp-range=192.168.0.20,192.168.0.50,24h
2952 <div class="section" id="dns-cache">
2953 <h2><a class="toc-backref" href=
2954 "#id59">5.3 DNS cache</a></h2>
2956 <p>Aggiungere al file <tt class=
2957 "docutils literal"><span class=
2958 "pre">/etc/resolv.conif</span></tt> il nameserver localhost
2959 in cima alla lista dei <em>nameserver</em> disponibili.
2960 Dnsmasq usera' la propia cache e in caso non abbia
2961 disponibile il <em>record DNS</em> richiesto fara' partire
2962 una query al primo DNS:</p>
2963 <pre class="literal-block">
2964 nameserver 127.0.0.1
2967 <p>Questo pero' potrebbe essere problematico se un altro
2968 servizio, ad esempio il DHCP client, riscrive il contenuto
2969 del file <tt class="docutils literal"><span class=
2970 "pre">/etc/resolv.conf</span></tt>. Per superare il
2971 problema si aggiunga (riga 20) al file di configurazione
2972 <tt class="docutils literal"><span class=
2973 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
2974 <pre class="literal-block">
2975 prepend domain-name-servers 127.0.0.1;
2978 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
2979 (per la connessione ADSL) a intervenire sul file <tt class=
2980 "docutils literal"><span class=
2981 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
2982 <tt class="docutils literal"><span class=
2983 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
2984 <tt class="docutils literal"><span class=
2985 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
2986 internet e' ADSL raramente dovreste aver bisogno di
2987 cambiare i DNS una volta impostati (a meno che non usiate
2991 <div class="section" id="dhcpd">
2992 <h2><a class="toc-backref" href=
2993 "#id60">5.4 DHCPd</a></h2>
2995 <p>Dnsmasq puo' lavorare anche come DHCP server per la
3000 <div class="section" id="samba">
3001 <h1><a class="toc-backref" href=
3002 "#id61">6 Samba</a></h1>
3004 <p>Samba e' un progetto libero che fornisce servizi di
3005 condivisione di file e stampanti a client SMB/CIFS.</p>
3007 <p>Samba e' liberamente disponibile, al contrario di altre
3008 implementazioni SMB/CIFS, e permette di ottenere
3009 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
3011 <p>Samba e' un software che puo girare su piattaforme che non
3012 siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
3013 390, OpenVMS e altri sistemi operativi. Samba utilizza il
3014 protocollo TCP/IP utilizzando i servizi offerti sul server
3015 ospite. Quando correttamente configurato, permette di
3016 interagire con client o server Microsoft Windows come se
3017 fosse un file e print server Microsoft agendo da Primary
3018 Domain Controller (PDC) o come Backup Domain Controller, puo'
3019 inoltre prendere parte ad un dominio Active Directory.</p>
3021 <div class="section" id="pacchetti">
3022 <h2><a class="toc-backref" href=
3023 "#id62">6.1 Pacchetti</a></h2>
3025 <p>Pacchetti da installare per utilizzare Samba in
3026 modalita' client <a class="footnote-reference" href="#id5"
3027 id="id4" name="id4">[2]</a></p>
3028 <pre class="literal-block">
3032 <p>Pacchetti da installare per utilizzare Samba in
3033 modalita' server:</p>
3034 <pre class="literal-block">
3035 samba smbfs smbclient
3038 <table class="docutils footnote" frame="void" id="id5"
3045 <tbody valign="top">
3047 <td class="label"><a class="fn-backref" href=
3050 <td>Anche se nato per i sistemi Windows, Samba puo'
3051 essere usato anche per montare cartelle sotto
3052 GNU/Linux come alternativa a NFS. Per la condivisione
3053 di stampanti sarebbe invece opportuno intervenire
3054 direttamente su <tt class=
3055 "docutils literal"><span class=
3056 "pre">CUPS</span></tt>.</td>
3061 <p>Durante la prima installazione viene chiesto il nome del
3062 gruppo di appartenenza, il default per Windows e'
3063 <tt class="docutils literal"><span class=
3064 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3065 <tt class="docutils literal"><span class=
3066 "pre">208</span></tt> .</p>
3068 <p>Per riconfigurare Samba si usi il comando:</p>
3069 <pre class="literal-block">
3070 dpkg-reconfigure samba-common
3074 <div class="section" id="passwords-e-autenticazione">
3075 <h2><a class="toc-backref" href=
3076 "#id63">6.2 Passwords e
3077 autenticazione</a></h2>
3079 <p>Per poter configurare Samba in modo che usi un sistema
3080 di negoziazione degli accessi alle cartelle condivise
3081 basato su accoppiate <em>nome utente / password</em>
3082 bisogna distinguere tra 3 livelli di password (e
3083 generalmente volete usare <em>sempre la stessa
3084 password</em> per ognuno di questi) e delle differenze tra
3085 le modalita' di <em>autenticazione</em> (e quindi anche di
3086 criptaggio delle passwords) usate da sistemi GNU/Linux e
3089 <dl class="docutils">
3090 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3092 <dd>E' la password dell'<em>utente di sistema</em> che
3093 viene usata sul sistema operativo su cui gira il software
3094 Samba. E' importante tenere conto anche delle
3095 <em>user-id</em> e <em>group-id</em> degli utenti che
3096 dovranno fisicamente scrivere sui file system. Se un
3097 utente non puo' scrivere in una certa posizione del file
3098 system (ad esempio nella cartella <tt class=
3099 "docutils literal"><span class=
3100 "pre">/mnt/condivisione</span></tt> che sara' stata
3101 necessariamente creata inizialmente dall'utente
3102 <tt class="docutils literal"><span class=
3103 "pre">root</span></tt>) per mancanza dei privilegi di
3104 scrittura allora neanche Samba potra' farlo nel momento
3105 in mette a disposizione la risorsa all'utente. Se si
3106 montano file-system dedicati per le condivisioni
3107 controllare i permessi e propieta' dei <em>punti di
3108 mount*</em>. Queste passwords sono salvate nel solito
3109 file /etc/shadow (richiamato da /etc/passwd).</dd>
3111 <dt>2 Password per l'applicativo Samba</dt>
3113 <dd>Samba deve essere compatibile con Windows e quindi
3114 utilizzare un sistema di criptazione delle password
3115 diverso da /etc/shadow . Le password per Samba possono
3116 essere gestite ad esempio col comando <tt class=
3117 "docutils literal"><span class=
3118 "pre">smbpasswd</span></tt> e vengono generalmente
3119 salvate all'interno di <tt class=
3120 "docutils literal"><span class=
3121 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3123 <dt>3 Password per Windows.</dt>
3125 <dd>Gli utenti Windows effettuano il log-in alla partenza
3126 della sessione di Windows. Se si avra' l'accortezza di
3127 usare sempre la <em>stessa password</em> data
3128 precedentemente anche a Windows (o viceversa impostare la
3129 password per GNU/Linux / Samba uguale a quella di
3130 Windows) l'utente potra' accedere automaticamente alle
3131 condivisioni a lui disponibili.</dd>
3135 <div class="section" id="creazione-utenti">
3136 <h2><a class="toc-backref" href=
3137 "#id64">6.3 Creazione Utenti</a></h2>
3139 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3140 attenzione a <em>non dargli una shell di sistema</em>. Gli
3141 utenti Windows che accedono al server solo per le
3142 condivisioni non hanno bisogno di poter eseguire comandi
3145 <p>Creazione di un utente denominato sambo:</p>
3146 <pre class="literal-block">
3147 adduser --shell /bin/false sambo
3150 <p>Nel file <tt class="docutils literal"><span class=
3151 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3152 <pre class="literal-block">
3153 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3156 <p>Aggiunta dell'utente al database delle password per
3157 Samba e generazione della sua password:</p>
3158 <pre class="literal-block">
3162 <p>Se successivamente si vorra' modificare la password di
3163 un utente gia' esistente si usi:</p>
3164 <pre class="literal-block">
3168 <p>La password sotto Windows verra' modificata sul sistema
3172 <div class="section" id="creare-la-condivisione">
3173 <h2><a class="toc-backref" href=
3174 "#id65">6.4 Creare la
3175 condivisione</a></h2>
3177 <p>La condivisione altro non e' che una cartella sul server
3178 che viene resa disponibile ai client negoziando l'accesso
3179 in base a una autenticazione basata su <em>user-name /
3180 password</em>. E' per altro possibile permettere l'accesso
3181 a una risorsa a chiunque indiscriminatamente (a tutti i
3182 <tt class="docutils literal"><span class=
3183 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3184 punto di vista della sicurezza. Si decida se la cartella
3185 condivisa debba risiedere nella <em>home</em> di un utente
3186 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3187 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3188 Nel secondo caso si potranno gestire gli accessi sotto
3189 GNU/Linux tramite i gruppi.</p>
3191 <p>Creazione della risorsa sambo_share nella home
3192 dell'utente sambo:</p>
3193 <pre class="literal-block">
3194 # mkdir /home/sambo/sambo_share
3195 # chown sambo:sambo /home/sambo/sambo_share/
3198 <div class="section" id=
3199 "sicurezza-permessi-di-esecuzione-sul-server">
3200 <h3><a class="toc-backref" href=
3201 "#id66">6.4.1 Sicurezza: permessi di
3202 esecuzione sul server</a></h3>
3204 <p>Bisognerebbe notare sul server i permessi di
3205 esecuzione del file-system che ospita la cartella da
3206 condividere. Se i file che saranno contenuti nella
3207 condivisione saranno da usarsi sotto Windows non c'e'
3208 motivo che questi siano eseguibili sotto GNU/Linux. Si
3209 potrebbe avere quindi, ipotizzando una condivisione in
3210 <tt class="docutils literal"><span class=
3211 "pre">/mnt/share</span></tt> che risieda su di un file
3212 system dedicato:</p>
3214 <p><tt class="docutils literal"><span class=
3215 "pre">/etc/fstab</span></tt></p>
3218 /dev/hda10 /mnt/share ext3 rw,
3219 <strong>nosuid,noexec</strong> 0 3
3222 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3223 possibilita' di eseguire programmi con credenziali
3228 <div class="section" id=
3229 "configurazione-dell-applicativo-samba-vero-e-proprio">
3230 <h2><a class="toc-backref" href=
3231 "#id67">6.5 Configurazione
3232 dell'applicativo Samba vero e proprio.</a></h2>
3234 <p>Avendo preparato gli utenti (ancora una volta: non si
3235 dia una shell completa a un utente che serve solo per Samba
3236 o la posta elettronica) e la cartella sul file system si
3237 puo' procedere a configurare la condivisione su Samba.</p>
3239 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3240 vim si usi 235gg ):</p>
3241 <pre class="literal-block">
3243 # Percorso della cartella condivisa
3244 path = /home/sambo/sambo_share
3245 # Se gli utenti possono scrivere / modificare file
3247 # Negoziazione degli accessi su base utenti / passwords
3250 # #######################################
3251 # Altri parametri opzionali di interesse
3252 # Se posso vedere la condivisione da esplora risorse
3253 # anche se non ho i privilegi per accedervi.
3255 # Commento indicativo della risorsa
3256 comment = Condivisione per Sambo
3259 <p>Dopo aver salvato il file si puo' fare un primo
3260 controllo tramite l'utility <tt class=
3261 "docutils literal"><span class="pre">testparm</span></tt> ,
3262 che controlla la sintassi del file di configurazione di
3263 Samba. Se questo non rileva problemi si puo' procedere a un
3264 <tt class="docutils literal"><span class="pre">#</span>
3265 <span class="pre">/etc/init.d/samba</span> <span class=
3266 "pre">restart</span></tt> .</p>
3269 <div class="section" id="testare-il-servizio">
3270 <h2><a class="toc-backref" href=
3271 "#id68">6.6 Testare il Servizio</a></h2>
3273 <p>Come testare il servizio</p>
3276 <pre class="literal-block">
3277 smbclient -U sambo -L localhost
3280 <p>Questo comando permette di esplorare la risorsa
3281 qualificandosi come utente, in questo modo potete testare
3282 il corretto funzionamento dell'autenticazione. Si provi
3283 inizialmente a sbagliare la password deliberatamente, poi a
3284 inserirla correttamente: dovrebbero essere visibili le
3285 risorse disponibili al solo utente sambo: la suo /home e la
3286 cartella samba_share:</p>
3287 <pre class="literal-block">
3288 Sharename Type Comment
3289 --------- ---- -------
3290 sambo_share Disk Condivisione per Sambo
3291 print$ Disk Printer Drivers
3292 IPC$ IPC IPC Service (base server)
3293 sambo Disk Home Directories
3296 <p>In particolare l'ultima voce relativa alla home
3297 directory dell'utente dovrebbe essere visibile solo agli
3298 utenti autenticati.</p>
3300 <p>In alternativa e' possibile montare realmente la
3301 condivisone anche su GNU/Linux tramite un client per samba
3302 e testarne il corretto funzionamento:</p>
3303 <pre class="literal-block">
3304 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3309 <div class="section" id="server-di-posta-postfix">
3310 <h1><a class="toc-backref" href=
3311 "#id69">7 Server di posta: Postfix</a></h1>
3313 <p>Il server di posta che prenderemo in considerazione e'
3314 Postfix, a seguire un estratto di un file do configurazione
3315 <em>semplie</em> con l'abilizazione delle <em>Maildir</em>
3316 nelle <tt class="docutils literal"><span class=
3317 "pre">/home</span></tt> degli utenti per la consegna della
3320 <p><tt class="docutils literal"><span class=
3321 "pre">/etc/postfix/main.cf</span></tt>:</p>
3322 <pre class="literal-block">
3323 # ...segue dalla riga ~30
3324 myhostname = 162.piffa.net
3325 alias_maps = hash:/etc/aliases
3326 alias_database = hash:/etc/aliases
3327 myorigin = 162.piffa.net
3328 mydestination = 162.piffa.net, localhost
3329 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3330 # dovrete usare un realy host per l'invio della posta
3331 relayhost = smtp.piffa.net
3332 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3334 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3335 # in una Maildir invece che la Mailbox in /var/mail/utente
3336 # si disabiliti procmail
3337 #mailbox_command = procmail -a "$EXTENSION"
3339 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3340 # nella home dell'utente:
3341 home_mailbox = Maildir/
3342 mailbox_size_limit = 0
3343 recipient_delimiter = +
3344 inet_interfaces = all
3347 <div class="section" id="imap-e-pop">
3348 <h2><a class="toc-backref" href=
3349 "#id70">7.1 Imap e pop</a></h2>
3351 <p>Postfix e' un server SMTP, di conseguenza se volete che
3352 i vostri utenti possano <em>scaricare</em> in locale la
3353 posta generalemtne volete mettere a loro disposizione un
3354 server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
3357 <dl class="docutils">
3358 <dt>Pacchetti da installare</dt>
3360 <dd>courier-imap courier-pop</dd>
3363 <p>i noti che IMAP necessita delle Maildir, non funziona
3364 con le Mailbox in <tt class="docutils literal"><span class=
3365 "pre">/var/mail/</span></tt> .</p>
3367 <div class="section" id="web-client">
3368 <h3><a class="toc-backref" href=
3369 "#id71">7.1.1 Web client</a></h3>
3371 <p>Per mettere a disposizione degli utenti un client web
3372 per gestire la propia posta si installi il pacchetto:
3373 <tt class="docutils literal"><span class=
3374 "pre">squirrelmail</span></tt> . Ci sono tanti altri
3375 client web disponibili: questo e' particolarmente
3376 semplice. Naturalemte dovrete aver installato: <tt class=
3377 "docutils literal"><span class="pre">php5</span>
3378 <span class="pre">apache2</span></tt> .</p>
3380 <p>L'interfaccia dovrebbe essere disponibile all'url:
3381 <tt class="docutils literal"><span class=
3382 "pre">http://localhost/squirrelmail</span></tt> . Se
3383 cosi' non fosse assicuratevi che Apache abbia incluso il
3384 file di configurazione di squirrelmail:</p>
3387 cd /etc/apache2/conf.d/ ln -s
3388 /etc/squirrelmail/apache.conf ./
3394 <div class="section" id="firewall">
3395 <h1><a class="toc-backref" href=
3396 "#id72">8 Firewall</a></h1>
3398 <p>In Informatica, nell'ambito delle reti di computer, un
3399 firewall (termine inglese dal significato originario di
3400 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3401 italiano anche parafuoco o parafiamma) e' un componente
3402 passivo di difesa perimetrale che può anche svolgere
3403 funzioni di collegamento tra due o piu' tronconi di rete.
3404 Usualmente la rete viene divisa in due sottoreti: una, detta
3405 esterna, comprende l'intera Internet mentre l'altra interna,
3406 detta LAN (Local Area Network), comprende una sezione piu' o
3407 meno grande di un insieme di computer locali. In alcuni casi
3408 e' possibile che si crei l'esigenza di creare una terza
3409 sottorete detta DMZ (o zona demilitarizzata) atta a contenere
3410 quei sistemi che devono essere isolati dalla rete interna ma
3411 devono comunque essere protetti dal firewall.</p>
3413 <p>Una prima definizione chiusa di firewall è la
3416 <p>Apparato di rete hardware o software che filtra tutti i
3417 pacchetti entranti ed uscenti, da e verso una rete o un
3418 computer, applicando regole che contribuiscono alla sicurezza
3421 <p>In realtà un firewall può essere realizzato con un
3422 normale computer (con almeno due schede di rete e software
3423 apposito), può essere una funzione inclusa in un router o
3424 può essere un apparato specializzato. Esistono inoltre i
3425 cosiddetti "firewall personali", che sono programmi
3426 installati sui normali calcolatori, che filtrano solamente i
3427 pacchetti che entrano ed escono da quel calcolatore; in tal
3428 caso viene utilizzata una sola scheda di rete.</p>
3430 <p>La funzionalità principale in sostanza è quella di
3431 creare un filtro sulle connessioni entranti ed uscenti, in
3432 questo modo il dispositivo innalza il livello di sicurezza
3433 della rete e permette sia agli utenti interni che a quelli
3434 esterni di operare nel massimo della sicurezza. Il firewall
3435 agisce sui pacchetti in transito da e per la zona interna
3436 potendo eseguire su di essi operazioni di: controllo modifica
3439 <p>Questo grazie alla sua capacità di "aprire" il
3440 pacchetto IP per leggere le informazioni presenti sul suo
3441 header, e in alcuni casi anche di effettuare verifiche sul
3442 contenuto del pacchetto.</p>
3444 <div class="section" id="links">
3445 <h2><a class="toc-backref" href=
3446 "#id73">8.1 Links</a></h2>
3449 <li><a class="reference external" href=
3450 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3452 <li><a class="reference external" href=
3453 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3454 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3458 <div class="section" id="ipfilter">
3459 <h2><a class="toc-backref" href=
3460 "#id74">8.2 Ipfilter</a></h2>
3462 <p>Link: <a class="reference external" href=
3463 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3464 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3466 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3467 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3468 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3469 etc) e del livello 1 (MAC source address). Iptables
3470 comunque permette di fare il <em>connection-tracking</em>,
3471 mediante il quale possiamo implementare il Network Address
3474 <p>Netfilter non ricostruisce il flusso di dati tra
3475 pacchetti, non puo' quindi rilevare la presenza di virus o
3476 simili che si trasmettono su pacchetti separati:
3477 ricomporre, analizzare e tornare a scomporre i frammenti
3478 rtichiederebbe troppa RAM e risorse di sistema, con il
3479 conseguente rischio di saturare il firewall fino
3480 all'abbandono dei nuovi pacchetti in transito. Ci sono
3481 altri software piu' adatti a questi compiti, ad esempio un
3482 proxy HTTP come Squid che e' appunto una applicazione di
3483 quarto livello, progettata e strutturata per analizzare e
3484 modificare i flussi di dati (il <em>contenuto</em> dei
3485 pacchetti, non le sole <em>inestazioni</em>) facendo
3486 abbondate uso delle risorse RAM e di calcolo del sistema.
3487 Non a caso su macchine embedded dalle prestazioni molto
3488 ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3489 massimo le risorse di sistema per gestire il traffico di
3490 una rete 10/100, mentre il lavoro tipico svolto da
3491 netfilter e' quasi irrilevante.</p>
3494 <div class="section" id="progettazione-di-un-firewall">
3495 <h2><a class="toc-backref" href=
3496 "#id75">8.3 Progettazione di un
3499 <p>Per implementare un firewall bisogna decidere un aio di
3500 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3501 al filtraggio, il tipo di hardware.</p>
3503 <div class="section" id="collocazione">
3504 <h3><a class="toc-backref" href=
3505 "#id76">8.3.1 Collocazione</a></h3>
3507 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3508 della rete, decidere se diversi reparti di una azienda si
3509 possano vedere tra loro e in che misura.</p>
3511 <p>Collocazione:</p>
3514 <ol class="arabic simple">
3517 <li>tra router e servers / LAN</li>
3519 <li>Unico server / router / firewall e connessi
3520 rischi. considerare l'acquisto di un router hardware
3525 <dl class="docutils">
3526 <dt>Layeed security:</dt>
3528 <dd>Implementare piu' device / software sui diversi
3529 livelli: <a class="reference external" href=
3530 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3531 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3535 <div class="section" id="policy-di-default">
3536 <h3><a class="toc-backref" href=
3537 "#id77">8.3.2 Policy di default</a></h3>
3539 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3543 <div class="section" id="hardware">
3544 <h3><a class="toc-backref" href=
3545 "#id78">8.3.3 Hardware</a></h3>
3547 <p>Sostanzialmente potremmo distinquere due tipologie di
3550 <dl class="docutils">
3551 <dt>Network appliance dedicata::</dt>
3553 <dd>Un dispositivo hardware dedicato alla funzione di
3554 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3555 firewall economici altro non sono che Linux box molto
3558 <dt>Server / Personal computer:</dt>
3560 <dd>Un server sul quale viene fatto girare Netfilter ad
3561 uso del server stesso e della rete connessa.</dd>
3564 <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3565 flessibilita', strumenti di gestione, sicurezza,
3570 <div class="section" id=
3571 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3572 <h2><a class="toc-backref" href=
3573 "#id79">8.4 Percorso dei pacchetti tra
3574 tabelle e catene</a></h2>
3576 <p>link: <a class="reference external" href=
3577 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3578 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3581 <div class="section" id="concetti-di-base">
3582 <h2><a class="toc-backref" href=
3583 "#id80">8.5 Concetti di base</a></h2>
3585 <div class="section" id="tabelle-catene-regole">
3586 <h3><a class="toc-backref" href=
3587 "#id81">8.5.1 Tabelle, catene,
3590 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3593 <li>filter - Regola il firewalling: quali pacchetti
3594 accettare, quali bloccare</li>
3596 <li>nat - Regola le attività di natting</li>
3598 <li>mangle - Interviene sulla alterazione dei
3602 <p>Ogni tabella ha delle catene (chains) predefinite
3603 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3604 aggiunte catene custom. Ogni catena è composta da un
3605 elenco di regole (rules) che identificano pacchetti di
3606 rete secono criteri diversi (es: -p tcp --dport 80 -d
3607 10.0.0.45) Ogni regola termina con una indicazione
3608 (target) su cosa fare dei pacchetti identificati dalla
3609 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3612 <div class="section" id="match">
3613 <h3><a class="toc-backref" href=
3614 "#id82">8.5.2 Match</a></h3>
3616 <p>I Match di una regola (rule) servono a testare un
3617 pacchetto per valutare se corrisponda a certe
3618 caratteriscttiche. I match di possono servire a
3619 controllare se un pacchetto e' destinato a una porta
3620 particolare o utilizza un protocollo particolare.</p>
3622 <p>Alcuni esempi:</p>
3624 <dl class="docutils">
3625 <dt>-p [!] proto</dt>
3627 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3628 udp, gre, ah...)</dd>
3630 <dt>-s [!] address[/mask]</dt>
3632 <dd>Indirizzo IP sorgente (o network con maschera di
3635 <dt>-d [!] address[/mask]</dt>
3637 <dd>Indirizzo IP destinazione (o network)</dd>
3639 <dt>-i [!] interface[+]</dt>
3641 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3643 <dt>-o [!] interface[+]</dt>
3645 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3648 <table class="docutils option-list" frame="void" rules=
3650 <col class="option">
3651 <col class="description">
3653 <tbody valign="top">
3655 <td class="option-group"><kbd><span class=
3656 "option">-f</span></kbd></td>
3658 <td>Frammento di pacchetto</td>
3664 <div class="section" id="targets">
3665 <h3><a class="toc-backref" href=
3666 "#id83">8.5.3 Targets</a></h3>
3668 <p>Se un pacchetto soddisfa le condizioni del Match
3669 <em>salta</em> (jump) su uno dei target possibili, in
3670 caso contrario continua il suo percorso tra regole catene
3673 <p>Target principali:</p>
3675 <dl class="docutils">
3676 <dt><em>-j ACCEPT</em></dt>
3678 <dd>Il pachetto matchato viene accettato e procede
3679 verso la sua destinazione. Si usa per definire il
3680 traffico permesso.</dd>
3682 <dt><em>-j DROP</em></dt>
3684 <dd>Il pacchetto viene rifiutato e scartato, senza
3685 alcuna notifica al mittente. Si usa, in alternativa a
3686 REJECT, per bloccare traffico.</dd>
3688 <dt><em>-j REJECT</em></dt>
3690 <dd>Il pacchetto viene rifiutato. Al mittente viene
3691 mandato un pacchetto (configurabile) di notifica tipo
3692 ICMP port-unreachable (--reject-with
3693 icmp-port-unreachable)</dd>
3696 <table class="docutils option-list" frame="void" rules=
3698 <col class="option">
3699 <col class="description">
3701 <tbody valign="top">
3703 <td class="option-group"><kbd><span class=
3704 "option">-t <var>LOG</var></span></kbd></td>
3706 <td>Il pacchetto viene loggato via syslog e procede
3707 l'attraversamento della catena. Opzioni:
3708 (--log-level, --log-prefix, --log-tcp-sequence,
3709 --log-tcp-options, --log-ip-options)</td>
3713 <td class="option-group"><kbd><span class=
3714 "option">-j <var>DNAT</var></span></kbd></td>
3716 <td>Viene modificato l'IP di destinazione del
3717 pacchetto. Target disponibile solo in nat /
3718 PREROUTING e nat / OUTPUT. L'opzione
3719 --to-destination IP:porta definisce il nuovo IP di
3720 destinazione. Si usa tipicamente su network
3721 firewall che nattano server di una DMZ</td>
3725 <td class="option-group"><kbd><span class=
3726 "option">-j <var>SNAT</var></span></kbd></td>
3728 <td>Viene modificato l'IP sorgente. Solo in nat /
3729 POSTROUTING. Prevede l'opzione --to-source
3730 IP:porta. Si usa per permettere l'accesso a
3731 Internet da una rete locale con IP privati.</td>
3735 <td class="option-group"><kbd><span class=
3736 "option">-j <var>MASQUERADE</var></span></kbd></td>
3738 <td>Simile a SNAT, si applica quando i pacchetti
3739 escono da interfacce con IP dinamico (dialup, adsl,
3740 dhcp...). Si usa solo in nat / POSTROUTING e
3741 prevede l'opzione --to-ports porte.</td>
3745 <td class="option-group"><kbd><span class=
3746 "option">-j <var>REDIRECT</var></span></kbd></td>
3748 <td>Redirige il pacchetto ad una porta locale.
3749 Usabile solo in nat / PREROUTING e nat / OUTPUT è
3750 previsto per fare un transparent proxy (con proxy
3751 server in esecuzione sulla macchina con
3756 <td class="option-group"><kbd><span class=
3757 "option">-j <var>RETURN</var></span></kbd></td>
3759 <td>Interrompe l'attraversamento della catena. Se
3760 questa è una secondaria, il pacchetto torna ad
3761 attraversare la catena madre da punto in cui aveva
3762 fatto il salto nella secondaria. Se il RETURN è in
3763 una delle catene di default, il pacchetto
3764 interrompe l'attraversamento e segue la policy di
3769 <td class="option-group"><kbd><span class=
3770 "option">-j <var>TOS</var></span></kbd></td>
3772 <td>Usabile solo nella tabella mangle, permette di
3773 cambiare il TOS (Type Of Service) di un pacchetto
3774 con l'opzione --set-tos. Per un elenco dei
3775 parametri disponibili: iptables -j TOS -h</td>
3779 <td class="option-group"><kbd><span class=
3780 "option">-j <var>MIRROR</var></span></kbd></td>
3782 <td>Curioso e sperimentale, questo target invia un
3783 pacchetto speculare al mittente. In pratica è come
3784 se facesse da specchio per tutti i pacchetti
3785 ricevuti. Da usare con cautela, per evitare
3786 attacchi DOS indiretti.</td>
3793 <div class="section" id="tabella-filter">
3794 <h2><a class="toc-backref" href=
3795 "#id84">8.6 Tabella Filter</a></h2>
3797 <p>E' quella implicita e predefinita (-t filter) Riguarda
3798 le attività di filtraggio del traffico. Ha 3 catene
3799 di default: INPUT - Riguarda tutti i pacchetti destinati al
3800 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3801 i pacchetti che sono originati dal sistema e destinati ad
3802 uscire. FORWARD - Riguarda i pacchetti che attraversano il
3803 sistema, con IP sorgente e destinazione esterni.</p>
3805 <p>Esempio per permettere accesso alla porta 80 locale:
3806 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3807 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3810 <p>Esempio per permettere ad un pacchetto con IP sorgente
3811 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3812 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3816 <div class="section" id=
3817 "flush-automatico-per-macchine-remote">
3818 <h2><a class="toc-backref" href=
3819 "#id85">8.7 Flush automatico per macchine
3822 <p>Se state provando una configurazione del firewall per
3823 una macchina remota e' buona norma per evitare brutte
3824 figure attivare uno script che faccia il <em>flush</em>
3825 delle regole dopo qualche minuto. Potreste infatti
3826 inavvertitamente impostare una regola che vi impedisca di
3827 raggiungere la macchina remota, cosi' da non poter neanche
3828 eliminare quella regola e ripristinare la situazioe
3831 <p><em>Veramnete</em>, prima di lavorare sul firewall di
3832 una macchina remota inpostate almeno un <tt class=
3833 "docutils literal"><span class="pre">at</span> <span class=
3834 "pre">now</span> <span class="pre">+5</span> <span class=
3835 "pre">min</span></tt> o con un'oretta di margine per fare
3836 il <em>flush</em> delle regole (su tutte le tabelle):</p>
3837 <pre class="literal-block">
3839 at> /sbin/iptables -F
3844 <div class="section" id="gestione-regole-rules">
3845 <h2><a class="toc-backref" href=
3846 "#id86">8.8 Gestione regole
3849 <p>Il comando iptables viene usato per ogni attivitÃ
3850 di gestione e configurazione.</p>
3852 <p>Inserimento regole:</p>
3854 <dl class="docutils">
3855 <dt>iptables -A CATENA ...</dt>
3857 <dd>Aggiunge una regola alla fine della catena
3860 <dt>iptables -I CATENA [#] ...</dt>
3862 <dd>Inserisce alla riga # (default 1) una regola nella
3863 catena indicata</dd>
3865 <dt>iptables -N CATENA</dt>
3867 <dd>Crea una nuova catena custom</dd>
3869 <dt>iptables -P CATENA TARGET</dt>
3871 <dd>Imposta il target di default per la catena
3875 <p>Rimozione regole e azzeramenti:</p>
3877 <dl class="docutils">
3878 <dt>iptables -F [catena]</dt>
3880 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3882 <dt>iptables -X [catena]</dt>
3884 <dd>Ripulisce tutte le catene custom (o quella
3887 <dt>iptables -Z [catena]</dt>
3889 <dd>Azzera i contatori sulle catene</dd>
3891 <dt>iptables -D catena #</dt>
3893 <dd>Cancella la regola numero # dalla catena
3897 <p>Interrogazione:</p>
3899 <dl class="docutils">
3900 <dt>iptables -L</dt>
3902 <dd>Elenca le regole esistenti</dd>
3904 <dt>iptables -L -n -v</dt>
3906 <dd>Elenca, senza risolvere gli host, in modo verboso le
3907 regole esistenti</dd>
3911 <div class="section" id="salvataggio-regole">
3912 <h2><a class="toc-backref" href=
3913 "#id87">8.9 Salvataggio regole</a></h2>
3915 <p>Il comando <tt class="docutils literal"><span class=
3916 "pre">iptables</span></tt> serve per interagire con il
3917 framework <tt class="docutils literal"><span class=
3918 "pre">Netfilter</span></tt> ch gestisce il firewall di
3919 Linux al livello del kernel. Questo comporta, in modo
3920 analogo a quando avvene col comando <tt class=
3921 "docutils literal"><span class="pre">ifconfig</span></tt>,
3922 che i cambiameti impostati siano in <em>tempo reale,
3923 RAM</em>, non persistenti nel sistema: al boot sucessivo
3924 del sistema tutto tornera' alle impostazioni di base (in
3925 questo caso <em>nulle</em>, con policy di default settate
3926 su <tt class="docutils literal"><span class=
3927 "pre">ACCEPT</span></tt> per tutto).</p>
3929 <p>Le varie invocazioni di iptables potrebbero essere
3930 richiamate da degli scripts dedicati, ma fortunatamente e'
3931 stata predisposta una apposita utility per gestire questi
3932 scripts in modo da avere a disposizione un <em>formato
3933 standard</em> per il salvataggio e il ripristino delle
3934 regole del firewall.</p>
3936 <p>Altro problema: decidere quando attivare / disattivare
3937 queste regole. Utilizzare i <em>runlevels</em> non e' una
3938 soluzione adeguata: le regole del firewall sono legate
3939 all'attivita' delle schede di rete (e un host con diverse
3940 schede di rete puo' attivarle a secondo delle esigenze di
3941 routing, partenza di servizi es file_sharing per un
3942 back-up...): il sistema operativo Debian permette di legare
3943 l'esecuzione di comandi alla attivazione di una device di
3944 rete (<tt class="docutils literal"><span class=
3945 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
3946 "docutils literal"><span class="pre">post-up</span></tt>,
3947 utile per devices che richiedono un certo tempo per
3948 inizializzarsi: come un tunnel o una connessione punto a
3949 punto), prima della sua attivazione (<tt class=
3950 "docutils literal"><span class="pre">pre-up</span></tt>).
3951 Allo stesso modo sono disponibili eventi analoghi per
3952 accompagnare la disattivazione dei device di rete: si veda
3953 la pagina man di <tt class="docutils literal"><span class=
3954 "pre">interfaces</span></tt>.</p>
3956 <p>Nel nostro caso avremo per una possibile scheda
3957 <tt class="docutils literal"><span class=
3958 "pre">eth0</span></tt>:</p>
3960 <p><tt class="docutils literal"><span class=
3961 "pre">/etc/network/interfaces</span></tt></p>
3962 <pre class="literal-block">
3963 iface eth1 inet static
3964 up /sbin/iptables-restore /root/firewall/basic_fw
3965 # Seguno i soliti parametri della scheda di rete
3966 address 10.10.208.21
3969 <div class="section" id="iptables-save">
3970 <h3><a class="toc-backref" href=
3971 "#id88">8.9.1 Iptables-save</a></h3>
3973 <p>Per salvare le regole di iptables attualmente presenti
3974 nel kernel si usi il comando:</p>
3975 <pre class="literal-block">
3976 # iptables-save >> /root/firewall/basic_fw
3979 <p>Il contenuto del file dovrebbe essere
3980 <em>comprensibile</em>: sostanzialmente sono regole di
3981 iptables, senza il comando iptables ripetuto, suddivisi
3982 per le varie tabelle. Potete comunque correggere
3983 eventuali parametri con un edito di testo.</p>
3985 <p>Se non avete un'idea migliore potreste voler tenere
3986 gli script dei firewall in una cartella <tt class=
3987 "docutils literal"><span class=
3988 "pre">~/firewall</span></tt> nella home directory
3989 dell'utente <tt class="docutils literal"><span class=
3990 "pre">root</span></tt>.</p>
3993 <div class="section" id="iptables-restore">
3994 <h3><a class="toc-backref" href=
3995 "#id89">8.9.2 Iptables-restore</a></h3>
3997 <p>Per ripristinare un set di regole prcedentemente
3998 salvate con <tt class="docutils literal"><span class=
3999 "pre">iptables-save</span></tt> si utilizzi <tt class=
4000 "docutils literal"><span class=
4001 "pre">iptables-restore</span></tt>. Se questo deve essere
4002 fatto in modalita' <em>non interattiva</em>, ad esempio
4003 deve essere eseguito dal demone che si occupa di
4004 inizializzare le schede di rete, oppure un <em>cron</em>
4005 o altro, e' buona norma richiamare i percorsi completi
4006 sia dei comandi che dei file:</p>
4007 <pre class="literal-block">
4008 /sbin/iptables-restore /root/firewall/basic_fw
4014 <div class="section" id="note">
4015 <h1><a class="toc-backref" href=
4016 "#id90">9 NOTE</a></h1>
4019 <li>controllare apache</li>
4022 <p>sintassi: in <tt class="docutils literal"><span class=
4023 "pre">monospace</span></tt> :</p>
4026 <li>nomi di files</li>