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="#firewall" id="id69"
671 name="id69">7 Firewall</a>
673 <ul class="auto-toc">
674 <li><a class="reference internal" href="#links" id=
675 "id70" name="id70">7.1 Links</a></li>
677 <li><a class="reference internal" href="#ipfilter" id=
679 "id71">7.2 Ipfilter</a></li>
682 <a class="reference internal" href=
683 "#progettazione-di-un-firewall" id="id72" name=
684 "id72">7.3 Progettazione di un
687 <ul class="auto-toc">
688 <li><a class="reference internal" href=
689 "#collocazione" id="id73" name=
690 "id73">7.3.1 Collocazione</a></li>
692 <li><a class="reference internal" href=
693 "#policy-di-default" id="id74" name=
694 "id74">7.3.2 Policy di
697 <li><a class="reference internal" href="#hardware"
699 "id75">7.3.3 Hardware</a></li>
703 <li><a class="reference internal" href=
704 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
705 "id76" name="id76">7.4 Percorso dei
706 pacchetti tra tabelle e catene</a></li>
709 <a class="reference internal" href=
710 "#concetti-di-base" id="id77" name=
711 "id77">7.5 Concetti di base</a>
713 <ul class="auto-toc">
714 <li><a class="reference internal" href=
715 "#tabelle-catene-regole" id="id78" name=
716 "id78">7.5.1 Tabelle, catene,
719 <li><a class="reference internal" href="#match" id=
721 "id79">7.5.2 Match</a></li>
723 <li><a class="reference internal" href="#targets"
725 "id80">7.5.3 Targets</a></li>
729 <li><a class="reference internal" href=
730 "#tabella-filter" id="id81" name=
731 "id81">7.6 Tabella Filter</a></li>
733 <li><a class="reference internal" href=
734 "#flush-automatico-per-macchine-remote" id="id82" name=
735 "id82">7.7 Flush automatico per
736 macchine remote</a></li>
738 <li><a class="reference internal" href=
739 "#gestione-regole-rules" id="id83" name=
740 "id83">7.8 Gestione regole
744 <a class="reference internal" href=
745 "#salvataggio-regole" id="id84" name=
746 "id84">7.9 Salvataggio regole</a>
748 <ul class="auto-toc">
749 <li><a class="reference internal" href=
750 "#iptables-save" id="id85" name=
751 "id85">7.9.1 Iptables-save</a></li>
753 <li><a class="reference internal" href=
754 "#iptables-restore" id="id86" name=
755 "id86">7.9.2 Iptables-restore</a></li>
761 <li><a class="reference internal" href="#note" id="id87"
762 name="id87">8 NOTE</a></li>
766 <p>Generato con: <a class="reference external" href=
767 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
769 <div class="section" id="configurazione-sistema">
770 <h1><a class="toc-backref" href=
771 "#id6">1 Configurazione sistema</a></h1>
773 <div class="section" id="solo-per-uso-interno">
774 <h2><a class="toc-backref" href=
775 "#id7">1.1 Solo per uso interno</a></h2>
777 <p>Impostazioni di base per la configurazione del sistema
778 operativo e della rete nel laboratorio 208 facente parte
779 della rete piffa.net .</p>
781 <p>Qui riportati per comodita' degli studenti (e del
782 docente che non sara' <strong>mai piu'</strong> costretto a
783 ripeterli continuamente! ). Gli altri lettori potranno
784 tenerli presenti per cercare di comprendere gli esempi nel
785 testo. Ad esempio: quando leggerete <tt class=
786 "docutils literal"><span class=
787 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
788 del nostro <em>proxy http</em>, stara' quindi a voi
789 sostituire i dati con gli <em>ip</em> della vostra
793 <div class="section" id="rete">
794 <h2><a class="toc-backref" href=
795 "#id8">1.2 Rete</a></h2>
797 <p>Parametri della rete attualmente in uso:</p>
799 <table border="1" class="docutils">
807 <td colspan="2">Parametri della rete</td>
813 <td>10.10.208.0/24</td>
819 <td>255.255.255.0</td>
825 <td>10.10.208.255</td>
831 <td>10.10.208.254</td>
837 <td>10.10.208.250 persistente</td>
843 <td>10.10.208.254</td>
849 <td>10.10.208.250 persistente</td>
855 <td>10.10.208.254:3128</td>
860 <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
861 un DHCP, proxy http e mirror di Debian ( <a class=
862 "reference external" href=
863 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
864 Andrea non e' in aula (o ancora peggio non c'e' il suo
865 portatile Net) gli studenti dovranno darsi un indirizzo ip
866 manualmente e disabilitare il proxy (che pero' e
867 trasparente, quindi fate pure come se non ci fosse ;) .
868 Questo in attesa che si sappia se sara' nuovamente
869 utilizzabile il vecchio server Bender.</p>
872 <div class="section" id="bash-completion">
873 <h2><a class="toc-backref" href=
874 "#id9">1.3 Bash completion</a></h2>
876 <p>Il completamento automatico della shell (che si attiva
877 premendo il tasto tab una o due volte mentre si sta
878 scrivendo un termine) permette di comporre automaticamente
879 i nomi dei comandi e i percorsi dei file, sopratutto la
880 composizione automatica dei percorsi dei file e' di grande
883 <p>Bash_completion permette di integrare il completamento
884 automatico con i nomi dei pacchetti e oggetti dei comandi:
885 ad es. volendo digitare <tt class=
886 "docutils literal"><span class="pre">apt-get</span>
887 <span class="pre">inst[TAB]</span> <span class=
888 "pre">xtigh[TAB]</span></tt> ora verra' completatato
889 automaticamente sia la parola <tt class=
890 "docutils literal"><span class="pre">install</span></tt>
891 che il nome del pacchetto <tt class=
892 "docutils literal"><span class=
893 "pre">xtightvncviewer</span></tt>.</p>
895 <p>Abilitare /etc/bash_completion nel file <tt class=
896 "docutils literal"><span class=
897 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
898 proprio <tt class="docutils literal"><span class=
899 "pre">~/.bashrc</span></tt> (che sarebbe il file
900 <em>nascosto</em>, quindi con un punto all'inizio del nome
901 del file, di configurazione della shell bash per ogni
902 utente, presente nella propria <em>home
904 <pre class="literal-block">
905 echo ". /etc/bash_completion" >> ~/.bashrc
908 <p>Esempio di ~/.bahsrc</p>
909 <pre class="literal-block">
910 # ~/.bashrc: executed by bash(1) for non-login shells.
912 export PS1='\h:\w\$ '
915 # Decommentare le seguenti righr per abilitare la colorazione dei
917 export LS_OPTIONS='--color=auto'
919 alias ls='ls $LS_OPTIONS'
920 alias ll='ls $LS_OPTIONS -l'
921 alias l='ls $LS_OPTIONS -lA'
923 # Some more alias to avoid making mistakes:
928 # questo abilita bash completion
929 . /etc/bash_completion
932 <p>Il file <tt class="docutils literal"><span class=
933 "pre">/etc/bash_completion</span></tt> deve essere presente
934 nel sistema, in caso contrario installare il pacchetto:
935 <tt class="docutils literal"><span class=
936 "pre">bash-completion</span></tt>. Generalmente l'utente
937 <tt class="docutils literal"><span class=
938 "pre">root</span></tt> ha un file <tt class=
939 "docutils literal"><span class="pre">.bashrc</span></tt>
940 preimpostato analogo a quello citato sopra, a differenza
941 dei normali utenti di sistema.</p>
946 <li><a class="reference external" href=
947 "http://www.debian-administration.org/articles/316">An
948 introduction to bash completion</a></li>
950 <li><a class="reference external" href=
951 "http://www.caliban.org/bash/">Working more productively
952 with bash 2.x/3.x</a></li>
956 <div class="section" id="vim">
957 <h2><a class="toc-backref" href=
958 "#id10">1.4 Vim</a></h2>
960 <p>Vim e' l'editor di testo preferito dai sistemisti,
961 quindi sara' conveniente impostare fin da subito alcune
962 impostazioni per renderlo piu' comodo.</p>
964 <p>Assicurarsi che sia installata nel sistema la versione
965 completa dell'editor <tt class=
966 "docutils literal"><span class="pre">vim</span></tt>
967 nstallando il pacchetto vimi:</p>
968 <pre class="literal-block">
969 # apt-get install vim
971 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
973 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
974 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
975 " you can find below. If you wish to change any of those settings, you should
976 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
977 " everytime an upgrade of the vim packages is performed. It is recommended to
978 " make changes after sourcing debian.vim since it alters the value of the
979 " 'compatible' option.
981 " This line should not be removed as it ensures that various options are
982 " properly set to work with the Vim-related packages available in Debian.
985 " Uncomment the next line to make Vim more Vi-compatible
986 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
987 " options, so any other options should be set AFTER setting 'compatible'.
990 " Vim5 and later versions support syntax highlighting. Uncommenting the next
991 " line enables syntax highlighting by default.
994 " If using a dark background within the editing area and syntax highlighting
995 " turn on this option as well
998 " Uncomment the following to have Vim jump to the last position when
1002 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1003 \| exe "normal! g'\"" | endif
1006 " Uncomment the following to have Vim load indentation rules and plugins
1007 " according to the detected filetype.
1009 filetype plugin indent on
1012 " The following are commented out as they cause vim to behave a lot
1013 " differently from regular Vi. They are highly recommended though.
1014 set showcmd " Show (partial) command in status line.
1015 "set showmatch " Show matching brackets.
1016 set ignorecase " Do case insensitive matching
1017 "set smartcase " Do smart case matching
1018 "set incsearch " Incremental search
1019 set autowrite " Automatically save before commands like :next and :make
1020 "set hidden " Hide buffers when they are abandoned
1021 "set mouse=a " Enable mouse usage (all modes) in terminals
1023 " Source a global configuration file if available
1024 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1025 if filereadable("/etc/vim/vimrc.local")
1026 source /etc/vim/vimrc.local
1031 <div class="section" id="vnc">
1032 <h2><a class="toc-backref" href=
1033 "#id11">1.5 VNC</a></h2>
1035 <p>I Virtual Network Computing (o VNC) sono software di
1036 controllo remoto e servono per amministrare il proprio
1037 computer a distanza o visuallizare la sessione di lavoro di
1038 un altro computer sul proprio a scopo didattico.
1039 Installando un server VNC sulla propria macchina ed
1040 impostando una opportuna password si consente ai client VNC
1041 di ricevere una immagine dello schermo ed eventualmente di
1042 inviare input di tastiera e mouse al computer server
1043 (durante le lezioni questo non e' possibile per gli
1044 studenti, solo Andrea esegue i comandi). In pratica si può
1045 gestire il computer server da un'altra postazione, come se
1046 fosse il proprio computer fisico.</p>
1048 <p>Scaricare il pacchetto <tt class=
1049 "docutils literal"><span class=
1050 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1051 "docutils literal"><span class="pre">guarda.sh</span></tt>
1052 in una posizione (collocazione nel <em>path</em> degli
1053 utenti, es <tt class="docutils literal"><span class=
1054 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1055 visualizzare l'attuale path ) comoda per gli utenti ( in
1056 genere <tt class="docutils literal"><span class=
1057 "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1060 <pre class="literal-block">
1063 wget http://debian.piffa.net/guarda.sh
1068 <p>Si noti che non e' possibile lanciare un applicativo sul
1069 server grafico di un utente da una shell in cui si sta
1070 lavorando come altro utente, anche se root. E' quindi
1071 necessario essere l'utente di sistema che si e' loggato
1072 inizialmente nella sessione grafica per poter lanciare lo
1073 script guarda.sh da una shell.</p>
1075 <p>Controllare con <tt class=
1076 "docutils literal"><span class="pre">whoami</span></tt> di
1077 essere l'utente normale (es <tt class=
1078 "docutils literal"><span class="pre">utente</span>
1079 <span class="pre">|</span> <span class=
1080 "pre">studente</span> <span class="pre">|</span>
1081 <span class="pre">proprio</span> <span class=
1082 "pre">nome</span></tt> ), in caso si sia assunta una altra
1083 <tt class="docutils literal"><span class=
1084 "pre">id</span></tt> si apra un altra shell o si esca da
1085 quella attuale con <tt class=
1086 "docutils literal"><span class="pre">exit</span></tt> .</p>
1089 <div class="section" id="lista-dei-pacchetti-di-base">
1090 <h2><a class="toc-backref" href=
1091 "#id12">1.6 Lista dei pacchetti di
1094 <p>I pacchetti installati generalmente <a class=
1095 "footnote-reference" href="#id2" id="id1" name=
1096 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1097 <pre class="literal-block">
1098 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1101 <table class="docutils footnote" frame="void" id="id2"
1108 <tbody valign="top">
1110 <td class="label"><a class="fn-backref" href=
1113 <td><tt class="docutils literal"><span class=
1114 "pre">kde-core</span></tt> e' piu' leggero del
1115 pacchetto <tt class="docutils literal"><span class=
1116 "pre">kde</span></tt>, esiste anche un equivalente
1117 <tt class="docutils literal"><span class=
1118 "pre">gnome-core</span> <span class=
1119 "pre">gnome</span></tt> e il log-in manager
1120 <tt class="docutils literal"><span class=
1121 "pre">gdm</span></tt> per il l'ambiente grafico
1128 <div class="section" id="apt-configurazione">
1129 <h2><a class="toc-backref" href=
1130 "#id13">1.7 Apt configurazione</a></h2>
1132 <p>Vediamo i due file principali di apt:</p>
1135 <li><tt class="docutils literal"><span class=
1136 "pre">/etc/apt/sources.list</span></tt></li>
1138 <li><tt class="docutils literal"><span class=
1139 "pre">/etc/apt/apt.conf</span></tt></li>
1142 <div class="section" id="sources-list">
1143 <h3><a class="toc-backref" href=
1144 "#id14">1.7.1 sources.list</a></h3>
1146 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1147 preleva i pacchetti da installare tramite <em>dpkg</em>,
1148 vengono quindi precisati i metodi (ad es. http / ftp /
1149 cdrom / file), la release che si vuole tracciare (es
1150 <tt class="docutils literal"><span class=
1151 "pre">stable,</span> <span class="pre">testing,</span>
1152 <span class="pre">unstable</span></tt> oppure i
1153 corrispondenti release name es: <tt class=
1154 "docutils literal"><span class="pre">Lenny,</span>
1155 <span class="pre">Squeeze,</span> <span class=
1156 "pre">Sid</span></tt>), i rami di interesse (es:
1157 <tt class="docutils literal"><span class=
1158 "pre">main</span></tt> che e' l'archivio principale,
1159 <tt class="docutils literal"><span class=
1160 "pre">non-free</span></tt> per il software non libero,
1161 <tt class="docutils literal"><span class=
1162 "pre">contrib</span></tt> per i pacchetti non realizzati
1163 dai manutentori ufficiali).</p>
1165 <p>Gli archivi sono generalmente:</p>
1168 <li><tt class="docutils literal"><span class=
1169 "pre">deb</span></tt> per pacchetti Debian binari</li>
1171 <li><tt class="docutils literal"><span class=
1172 "pre">deb-src</span></tt> per i pacchetti sorgenti
1173 (quindi da compilare, come il kernel) degli stessi
1174 pacchetti binari. In genere se non compilate spesso
1175 potete evitare di tracciare i sorgenti per risparmiare
1179 <p><tt class="docutils literal"><span class=
1180 "pre">/etc/apt/sources.list</span></tt></p>
1181 <pre class="literal-block">
1182 # esempio di accesso a un CDROM:
1183 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1185 # Archivio principale debian via http su piffa.net,
1186 # non funziona al difuori dell'aula dei corsi
1187 deb http://debian.piffa.net/debian/ Lenny main
1188 # deb http://debian.piffa.net/debian/ Lenny non-free contrib
1190 # Mirror da kernel.org da usare a casa:
1191 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1193 # Security dal sito principale
1194 deb http://security.debian.org/ Lenny/updates main
1195 deb-src http://security.debian.org/ Lenny/updates main
1197 # Debian volatile per le cose soggette a cambiamenti non legati
1198 # a dinamiche di sicurezza
1199 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1200 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1202 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1203 # deb file:/mnt/mirror Sid main non-free contrib
1207 <div class="section" id="etc-apt-apt-conf">
1208 <h3><a class="toc-backref" href=
1209 "#id15">1.7.2 /etc/apt/apt.conf</a></h3>
1211 <p>Questo file contiene le opzioni di apt, come ad
1212 esempio il proxy:</p>
1213 <pre class="literal-block">
1214 Acquire::http::Proxy "http://10.10.208.254:3128";
1217 <p>Si tenga conto che se si imposta un proxy per apt sul
1218 proprio portatile e tornati a casa propria si vuole
1219 scaricare nuovi pacchetti si dovra' disabilitare il
1225 <div class="section" id="squid">
1226 <h1><a class="toc-backref" href=
1227 "#id16">2 Squid</a></h1>
1229 <p>Squid e' un proxy cache http (ma anche FTP e https)
1230 robusto e strutturato, puo' essere usato sia in reti
1231 relativamente piccole grazie alla semplicita' di
1232 configurazione che in scenari piu' complessi grazie alla
1233 possibilita' di gestirne in modo granulare le risorse
1234 partendo dalle configurazioni piu' semplici per la semplice
1235 <em>condivisione della navigazione</em> internet, la gestione
1236 degli accessi, il filtraggio dei contenuti (Squid e' una
1237 applicazione che si muove nel 4' livello del modello TCP/IP a
1238 differenza di un <em>ipfilter</em> limitato al 2') nel l
1239 bilanciamento del carico tra piu' hosts.</p>
1241 <dl class="docutils">
1242 <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1244 <dd>nasconde i client http alla rete internet: risulta solo
1245 il server proxy nei log dei server web frequentati dagli
1246 utenti di Squid.</dd>
1249 <p>Cosa a volte sottovalutata, squid permette la navigazione
1250 web a una rete basata su <em>indirizzi ip privati</em> (es
1251 una 192.168.0.0/24). E se la rete privata deve <em>solo
1252 navigare</em> in internet, non serve un <em>NAT</em> od
1253 altro, basta il solo Squid. Per altro non servira' neanche un
1254 servizio DNS dato che <em>sara' il solo squid a risolvere i
1255 nomi di dominio</em> per i suoi client http.</p>
1257 <p>Squid ascolta di default sulla porta 3128, per impostare
1258 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1259 "docutils literal"><span class=
1260 "pre">/etc/apt/apt.conf</span></tt></p>
1261 <pre class="literal-block">
1262 Acquire::http::Proxy "10.10.208.254:3128";
1265 <p>Per installare Squid si usino i pacchetti:</p>
1266 <pre class="literal-block">
1270 <div class="section" id="configurazione-squid-conf">
1271 <h2><a class="toc-backref" href=
1272 "#id17">2.1 Configurazione:
1275 <p>Segue un estratto delle direttive principali viste in
1276 aula presenti nel file di configurazione <tt class=
1277 "docutils literal"><span class=
1278 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1280 <div class="section" id="cache-dir">
1281 <h3><a class="toc-backref" href=
1282 "#id18">2.1.1 Cache_dir</a></h3>
1284 <p>Cache dir serve per impostare dimensione e percorso
1285 della cache creata sul supporto di storaggio. Essendo la
1286 dimensione di default della cache pari a <tt class=
1287 "docutils literal"><span class="pre">~100</span>
1288 <span class="pre">MB</span></tt> e' altamente
1289 consigliabili aumentare questo parametro se si vuole
1290 poter utilizzare la funzione di <em>cache</em> http del
1293 <p>La dimensione ovviamente dipendera' dallo spazio
1294 disponibile, dimensioni tipiche e massime degli oggetti
1295 che si vuole tenere in cache (un solo file <em>.iso e'
1296 circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1297 <tt class="docutils literal"><span class="pre">150</span>
1298 <span class="pre">MB</span></tt>, un pacchetto debian
1299 circa <tt class="docutils literal"><span class=
1300 "pre">20</span> <span class="pre">MB</span></tt>), numero
1303 <p>Si presti poi attenzione alla natura dei dati che
1304 saranno salvati nella cache: sono tutti dati facilmenti
1305 sostituibili (gli originali sono <em>on-line</em>) la cui
1306 perdita non arreca danni permanenti. Questo rende la
1307 cache di Squid un possibile candidato ad un <em>RAID
1308 stripe</em> (livello 0), con vantaggi sia per le
1309 prestazioni (e la velocita' di navigazione e' uno dei
1310 motivi per cui si installa Squid) che per l'utilizzo
1311 estensivo dello spazio di storaggio. Questo fino al
1312 momento in cui per voi non sia piu' importante
1313 <em>garantire la disponibilita' del servizio</em> (se il
1314 RAID stripe dovesse rompersi gli utenti non potrebbero
1315 piu' navigare, cosa che per natura dello stripe e'
1316 maggiormente probabile rispetto ad un <em>mirror</em> o a
1317 un filesytem <em>normale</em>) con un RAID mirror o
1320 <p>Altra considerazione: i dati del proxy vengono slavati
1321 sul filesytem del server dietro richiesta di utenti
1322 esterni talvolta sconosciuti. Come per i servizi di file
1323 sharing o per la posta elettronica non c'e' motivo che il
1324 filesystem su cui sono ospitati questi dati abbia i
1325 privilegi di eseguibilita' o suid (in genere si puo'
1326 anche usare <em>noatime</em> per renderlo piu' veloce,
1327 che si usi o meno il journal dipende dalle preferenze:
1328 affidabilita' oppure prestazioni):</p>
1331 <pre class="literal-block">
1333 # Filesystem per Squid http cache
1334 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1337 <p>Ora possiamo impostare la cache direttamente nel file
1338 <tt class="docutils literal"><span class=
1339 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1340 <pre class="literal-block">
1341 #TAG: cache_dir (riga 1628)
1344 # cache_dir Type Directory-Name Fs-specific-data [options]
1346 # You can specify multiple cache_dir lines to spread the
1347 # cache among different disk partitions.
1350 # cache_dir ufs /var/spool/squid3 100 16 256
1351 cache_dir aufs /var/spool/squid3 300 24 256
1355 # directory primo livello
1356 # secondo livello di directory
1359 <p>Se si modifica la struttura del filesytem della cache
1360 di Squid, ad esempio variando il numero delle directory,
1361 puo' essere opportuno rigenerare la struttura della cache
1362 di squid (per lo meno se si <em>aumenta il numero delle
1363 directory di primo o secondo livello). Tipicamente e'
1364 opportuno cancellare (se si ha *ridotto</em> il numero
1365 delle diectory) la vecchia cache e poi generare una nuova
1366 struttura. Se si vuole <em>star nel sicuro</em> ogni
1367 volta che si modifica l'impostazione delle directory
1368 <em>si svuoti la vecchia cache e se ne generi una
1370 <pre class="literal-block">
1371 # /etc/init.d/squid3 stop
1372 # rm -r /var/spool/squid3/??
1374 # /etc/init.d/squid3 start
1378 <div class="section" id="tag-maximum-object-size">
1379 <h3><a class="toc-backref" href=
1380 "#id19">2.1.2 TAG:
1381 maximum_object_size</a></h3>
1383 <p>Questa direttiva imposta la dimensione massima degli
1384 oggetti che vengono slvati sul supporto di storaggio,
1385 oggetti di dimensioni superiori saranno comunque
1386 scaricati ma non tenuti in cache.</p>
1388 <p>TAG: maximum_object_size (1760):</p>
1389 <pre class="literal-block">
1390 # TAG: maximum_object_size (1760)
1391 # Objects larger than this size will NOT be saved on disk. The
1392 # value is specified in kilobytes, and the default is 4MB. If
1393 # you wish to get a high BYTES hit ratio, you should probably
1394 # increase this (one 32 MB object hit counts for 3200 10KB
1395 # hits). If you wish to increase speed more than your want to
1396 # save bandwidth you should leave this low.
1398 # NOTE: if using the LFUDA replacement policy you should increase
1399 # this value to maximize the byte hit rate improvement of LFUDA!
1400 # See replacement_policy below for a discussion of this policy.
1403 # maximum_object_size 4096 KB
1404 maximum_object_size 150 MB
1408 <div class="section" id="tag-cache-mem">
1409 <h3><a class="toc-backref" href=
1410 "#id20">2.1.3 TAG: cache_mem</a></h3>
1412 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1413 utilizzata per la cache di Squid. Questo dipendera' dalla
1414 RAM disponibile sul sistema, e da quanta di questa volete
1415 mettere a disposizione di Squid (altri servizi
1416 iimportanti girano sulla stessa macchina?). Questo
1417 paramentro influisce sulle prestazioni e sul degrado dei
1418 supporti di storaggio (sopratutto se magnetici).</p>
1420 <p>Se si stesse pensando di usare dell'hardware
1421 <em>embedded</em> a basse prestazioni / consumo per
1422 realizzare un server gateway / NAT / Squid si tenga
1423 presente che Squid e' relativamente esoso di risorse:
1424 avra' bisogno di una macchina con <tt class=
1425 "docutils literal"><span class="pre">~25MB</span></tt>
1426 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1427 servire decorosamente una decina di client http su una
1428 rete ethernet 10/100. In questo caso non fate scendere
1429 <tt class="docutils literal"><span class=
1430 "pre">cache_mem</span></tt> sotto i <tt class=
1431 "docutils literal"><span class="pre">2/4</span>
1432 <span class="pre">MB</span></tt> pena un accesso continuo
1433 al supporto di storaggio.</p>
1435 <p>Se invece si disponesse di una macchina dedicata a
1436 Squid con gigabytes di RAM non si esiti a dedicarne buona
1437 parte a <em>cache_mem</em>.</p>
1439 <p>TAG: cache_mem (1566):</p>
1440 <pre class="literal-block">
1441 # 'cache_mem' specifies the ideal amount of memory to be used
1443 # * In-Transit objects
1445 # * Negative-Cached objects
1452 <div class="section" id="tag-minimum-object-size">
1453 <h3><a class="toc-backref" href=
1454 "#id21">2.1.4 TAG:
1455 minimum_object_size</a></h3>
1457 <p>Questo parametro imposta la dimensione minima degli
1458 oggetti salvati nella cache. Settato a <tt class=
1459 "docutils literal"><span class="pre">0</span></tt> o a
1460 valori molto piccoli puo' influire negativamente sulla
1461 deframmentazione del filesytem e consumare un numero
1462 elevato di <em>inode</em> (cosa non piu' importante con
1463 ext4 o altri filesytem).</p>
1465 <p>TAG: minimum_object_size:</p>
1466 <pre class="literal-block">
1467 # TAG: minimum_object_size (bytes)
1468 # Objects smaller than this size will NOT be saved on disk. The
1469 # value is specified in kilobytes, and the default is 0 KB, which
1470 # means there is no minimum.
1473 # minimum_object_size 0 KB
1474 minimum_object_size 0 KB
1479 <div class="section" id=
1480 "negoziazione-degli-accesi-al-servizio">
1481 <h2><a class="toc-backref" href=
1482 "#id22">2.2 Negoziazione degli accesi al
1485 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1486 <em>open relay</em> , si deve quindi limitare la rete che
1487 puo' accedere al servizio.</p>
1489 <dl class="docutils">
1490 <dt>Open Relay:</dt>
1492 <dd>Un servizio a cui possono accedere tutti
1493 indiscriminatamente. La cosa puo' andare bene per servizi
1494 come i server web, che aspirano per loro natura al
1495 maggior numero possibile di utenti, ma non a servizi come
1496 i proxy http oppure ai server di posta elettronica (che
1497 permetterebbero l'invio di SPAM).</dd>
1500 <p>Generalmente non volete che il vostro proxy http venga
1501 usato da persone sconosciute le quali sostanzialmente
1502 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1503 (probabilmente per visionare materiali che non vorrebbero
1504 fossero ricondotti direttamente a loro, per motivi che sta
1505 a voi prendere in considerazione) consumando traffico e
1506 banda della vostra connessione a internet. Tenere Squid in
1507 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1508 modo per essere inseriti in una <em>black list</em>.</p>
1510 <p>Per poter limitare gli accessi a Squid dal punto di
1511 vista dell'applicazione (quarto livello TCP/IP) si
1512 identifichera' inizialmente l'entita' <em>rete locale</em>
1513 (es: <tt class="docutils literal"><span class=
1514 "pre">localnet</span></tt>) con una ACL di tipo
1515 <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1516 / range di ip</em> della nostra rete.</p>
1519 Dopodiche l'accesso (<tt class=
1520 "docutils literal"><span class=
1521 "pre">http_access</span></tt>) si concedera'
1522 (<em>allow</em>) a questa entita' (es: <tt class=
1523 "docutils literal"><span class=
1524 "pre">localnet</span></tt>) negando chiunque altro.
1527 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1528 esprimere i range di ip: <a class="reference external"
1529 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1530 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1532 <div class="section" id="acl-e-http-access">
1533 <h3><a class="toc-backref" href=
1534 "#id23">2.2.1 ACL e http access</a></h3>
1536 <p>Si proceda a creare una <tt class=
1537 "docutils literal"><span class="pre">ACL</span></tt> di
1538 tipo <tt class="docutils literal"><span class=
1539 "pre">src</span></tt> per identificare la lostra rete
1540 locale, poi si abiliti l'accesso a questa con la
1541 direttiva <tt class="docutils literal"><span class=
1542 "pre">http_access</span></tt>. Tutto quanto non e'
1543 espressamente autorizzato viene poi negato da un
1544 <tt class="docutils literal"><span class=
1545 "pre">http_access</span> <span class="pre">deny</span>
1546 <span class="pre">all</span></tt> finale.</p>
1547 <pre class="literal-block">
1549 # Defining an Access List
1551 # Every access list definition must begin with an aclname and acltype,
1552 # followed by either type-specific arguments or a quoted filename that
1553 # they are read from.
1555 # ***** ACL TYPES AVAILABLE *****
1557 # acl aclname src ip-address/netmask ... # clients IP address
1560 # Example rule allowing access from your local networks.
1561 # Adapt to list your (internal) IP networks from where browsing
1563 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1564 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1565 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1567 acl localnet src 10.10.208.0/24
1571 # Allowing or Denying access based on defined access lists
1573 # Access to the HTTP port:
1574 # http_access allow|deny [!]aclname ...
1576 # NOTE on default values:
1578 # If there are no "access" lines present, the default is to deny
1582 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1584 # Example rule allowing access from your local networks.
1585 # Adapt localnet in the ACL section to list your (internal) IP networks
1586 # from where browsing should be allowed
1587 #http_access allow localnet
1588 http_access allow localnet
1593 <div class="section" id="testare-squid">
1594 <h2><a class="toc-backref" href=
1595 "#id24">2.3 Testare Squid</a></h2>
1597 <p>Configurato squid e' fondamentale testarne il corretto
1598 funzionamento per assicurarsi di non aver creato un
1599 <em>open-relay</em>. Per fare dei test significativi serve
1600 utilizzare degli host remoti: ci si connetta via ssh a
1601 questi per poi utilizzare <tt class=
1602 "docutils literal"><span class="pre">wget</span></tt> da
1603 riga di comando.</p>
1605 <div class="section" id="client-wgetrc">
1606 <h3><a class="toc-backref" href=
1607 "#id25">2.3.1 Client: ~/.wgetrc</a></h3>
1609 <p>Nel file <tt class="docutils literal"><span class=
1610 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1611 un file nascosto) si puo' impostare il proxy per wget. Si
1612 utililizzi l'indirizzo ip del server che si vuole
1613 testare, e si seguano i log <tt class=
1614 "docutils literal"><span class=
1615 "pre">/var/log/squid3/access.log</span></tt> sul
1618 <p>Da notare che la prova va' fatta su una macchina della
1619 rete che si vuole testare, non da <em>localhost</em>. Per
1620 altro se si utilizzasse <em>direttamente</em> <tt class=
1621 "docutils literal"><span class=
1622 "pre">localhost</span></tt> non si testerebbe la
1623 <em>ACL</em> predisposta, dato che si si rientrerebbe
1624 nella ACL (pre-configurata di default) <tt class=
1625 "docutils literal"><span class=
1626 "pre">localhost</span></tt>.</p>
1628 <dl class="docutils">
1631 <dd>http_proxy=10.10.208.178:3128</dd>
1634 <p>Si proceda a scaricare dal client scelto con un
1636 <pre class="literal-block">
1637 wget http://www.google.it
1641 <div class="section" id="server-access-log">
1642 <h3><a class="toc-backref" href=
1643 "#id26">2.3.2 Server:
1646 <p>Si puo' controllare il corretto funzionamento del
1647 server seguendo i log di accesso a Squid:</p>
1648 <pre class="literal-block">
1649 # tail -f /var/log/squid3/access.log
1652 <p>In oltre e' possibile configurare diversi
1653 <em>analizzatori di log</em> come <tt class=
1654 "docutils literal"><span class=
1655 "pre">Webalizer</span></tt> per studiare i log di
1661 <div class="section" id="apache">
1662 <h1><a class="toc-backref" href=
1663 "#id27">3 Apache</a></h1>
1665 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1666 dato alla piattaforma server Web modulare piu' diffusa (ma
1667 anche al gruppo di lavoro open source che ha creato,
1668 sviluppato e aggiornato il software server), in grado di
1669 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1671 <p>Un server web e' un processo, e per estensione il computer
1672 su cui e' in esecuzione, che si occupa di fornire, su
1673 richiesta del browser, una pagina web (spesso scritta in
1674 HTML). Le informazioni inviate dal server web viaggiano in
1675 rete trasportate dal protocollo HTTP. L'insieme di server web
1676 dà vita al World Wide Web, uno dei servizi piu'
1677 utilizzati di Internet.</p>
1679 <div class="section" id="pacchetti-da-installare">
1680 <h2><a class="toc-backref" href=
1681 "#id28">3.1 Pacchetti da
1682 installare::</a></h2>
1688 <p>Con la release 2.0 di Apache viene automaticamente resa
1689 disponibile anche la versione SSL (Secure Socket Layer,
1690 cpnnessioni criptate ) del web server.</p>
1693 <div class="section" id="configurazione-di-apache">
1694 <h2><a class="toc-backref" href=
1695 "#id29">3.2 Configurazione di
1698 <p>I file di configurazione di apache si trovano nella
1699 cartella: <tt class="docutils literal"><span class=
1700 "pre">/etc/apache2</span></tt> e sono strutturati come
1701 descritto nel file <tt class=
1702 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1703 . Sostanzialmente lo schema e' il seguente:</p>
1705 <dl class="docutils">
1706 <dt>apache2.conf</dt>
1709 <p class="first">File di configurazione principale del
1712 <p class="last">httpd.conf e' il vecchio file di
1713 configurazione di Apache1, presente per motivi di
1714 retrocompatibilita' e' generalemente vuoto.</p>
1719 <dd>In questo file vengono specificate le porte sulle
1720 quali resta in ascolto il server web. Si noti che
1721 utilizzando dei virtual hosts generalmente viene
1722 specificata per questi la porta su cui ascoltare nel file
1723 di configurazione del virtual host, ad es: <tt class=
1724 "docutils literal"><span class=
1725 "pre"><VirtualHost</span> <span class=
1726 "pre">*:80></span></tt></dd>
1728 <dt>sites-available</dt>
1730 <dd>In questa cartella vengono raccolti i file di
1731 configurazione dei virtual host disponibili.</dd>
1733 <dt>sites-enabled</dt>
1735 <dd>In questa cartella sono contenuti dei link simbolici
1736 ai files in ../sites-available : se il link e' presente
1737 in questa cartella il virtual host e' abilitato.</dd>
1739 <dt>mods-available</dt>
1741 <dd>Stesso metodo per i moduli: in questa cartella ci
1742 sono i moduli veri e propri che verranno poi abilitati
1743 grazie all'esistenza di link simbolici nella cartella
1746 <dt>mods-enabled</dt>
1748 <dd>Moduli abilitati, effettivamente caricati.</dd>
1752 <div class="section" id="apache-conf">
1753 <h2><a class="toc-backref" href=
1754 "#id30">3.3 apache.conf</a></h2>
1756 <p>File di configurazione del servizio Apache, contiene le
1757 impostazioni generiche (ad esempio utilizzo della RAM e
1758 risorse di sistema) dell'intero servizio. Nella
1759 configurazione di default per Debian non viene definito un
1760 vero e proprio sito di default ma solo dei virtual
1763 <p>Guardiamo alcune direttive interessanti:</p>
1765 <dl class="docutils">
1768 <dd>Numero di secondi da aspettare prima di chiudere la
1769 connessione con il client. Questo parametro serve a
1770 liberare le risorse di sistema nel caso che un client,
1771 magar a causa di una connessione particolarmente lenta o
1772 instabili, tenga attivo indefinitivamente un processo di
1777 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1778 alle connessioni persistenti (http 1.1) permettono al
1779 server di rispondere a piu' richieste dei client mediante
1780 la stessa connessione. Il protocoll http per sua natura
1781 e' senza stato (<em>statelessi</em> ), quindi ogni
1782 risorsa richiesta (per pagine web si pensi ad esempio
1783 alle immagini) dal client necessita di una connessione
1784 autonoma. Keep-alive permette di ottimizzare la
1785 connessione anche fino al 50% a seconda delle situazioni
1788 <dt>Server-Pool Size Regulation</dt>
1790 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1791 Tutti spiegati nel manuale di apache) servono per
1792 attribuire le risorse di sistema disponibili al server
1793 Apache. Tenere questi parametri bassi serve a limitare il
1794 rischio di Denial of Service per il server, nel caso
1795 offra altri servizi. I settagi di default sono come
1796 sempre abbastanza conservativi, se si conta di usare il
1797 proprio Apache per servire un sito web con molti
1798 visitatori sara' necessario aumentare sensibilmente le
1799 impostazioni di base.</dd>
1801 <dt>AccessFileName</dt>
1803 <dd>Il nome del file che viene onorato per modificare le
1804 impostazioni per una singola directory, legato alla
1805 direttiva AllowOverride .</dd>
1809 <div class="section" id="installazione-di-php">
1810 <h2><a class="toc-backref" href=
1811 "#id31">3.4 Installazione di PHP</a></h2>
1813 <p>Pacchetti da installare: <tt class=
1814 "docutils literal"><span class="pre">php5</span>
1815 <span class="pre">php-pear</span></tt></p>
1817 <div class="section" id="test-del-modulo-php">
1818 <h3><a class="toc-backref" href=
1819 "#id32">3.4.1 Test del modulo
1822 <p>Creare nella cartella <tt class=
1823 "docutils literal"><span class="pre">/var/www</span></tt>
1824 (o altra cartella visibile) un file con estensione *.php
1825 (es <tt class="docutils literal"><span class=
1826 "pre">/var/ww/info.php</span></tt> contenete codice php
1827 eseguibile dall'interprete, ad es:</p>
1828 <pre class="literal-block">
1829 <?php phpinfo() ; ?>
1832 <p>Questa funzione di php generera' la tipica pagina con
1833 le impostazioni attuali per PHP. Richiamando la pagina
1834 (es: <tt class="docutils literal"><span class=
1835 "pre">http://localhost/info.php</span></tt> ) verra
1836 generata dall'interprete PHP la pagina HTML e resa
1837 disponibile tramite Apache ai utclient HTTP, a prova del
1838 correto funzionamento del modulo di PHP e della sua
1839 integrazione con il serv web Apache. In caso contrario se
1840 il client http proporra di scaricare la pagina invece che
1841 visualizzarla nel browser: non funziona l'interprete di
1842 php o sono mal configurati i MIME-type. prima di tutto
1843 assicurarsi di aver fatoo ripartire Apache.</p>
1846 <div class="section" id=
1847 "installazione-del-supporto-per-mysql">
1848 <h3><a class="toc-backref" href=
1849 "#id33">3.4.2 Installazione del supporto
1852 <p>Installare i pacchetti:</p>
1853 <pre class="literal-block">
1854 php5-mysql phpmyadmin
1857 <p>Controllare tramite la pagina php.info che sia
1858 abilitato il supporto per Mysql (ripartito Apache,
1859 ricaricare la pagina e cercare con CTRL+f <tt class=
1860 "docutils literal"><span class=
1861 "pre">mysql</span></tt>).</p>
1864 <div class="section" id="phpmyadmin">
1865 <h3><a class="toc-backref" href=
1866 "#id34">3.4.3 phpmyadmin</a></h3>
1868 <p>L'interfaccia web Phpmyadmin non richede
1869 necessariamente la presenza di un database Mysql locale,
1870 puo' infatti essere utilizzata per gestire databases
1871 remoti (il suo file di configurazione: <tt class=
1872 "docutils literal"><span class=
1873 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1874 caso si voglia installare localmente Mysql si utilizzi il
1875 pacchetto <tt class="docutils literal"><span class=
1876 "pre">mysql-server</span></tt> .</p>
1878 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1879 <tt class="docutils literal"><span class=
1880 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1881 non fosse controllare che sia incluso il file <tt class=
1882 "docutils literal"><span class=
1883 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1884 <tt class="docutils literal"><span class=
1885 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1888 <div class="section" id=
1889 "installazione-del-supporto-per-postgresql">
1890 <h3><a class="toc-backref" href=
1891 "#id35">3.4.4 Installazione del supporto
1892 per Postgresql</a></h3>
1894 <p>Installare i pacchetti:</p>
1895 <pre class="literal-block">
1896 php5-pgsql phppgadmin
1899 <p>Controllare tramite la pagina php.info che sia
1900 abilitato il supporto per PostgreSQL (ripartito Apache,
1901 ricaricare la pagina e cercare con CTRL+f <tt class=
1902 "docutils literal"><span class=
1903 "pre">pgsql</span></tt>).</p>
1906 <div class="section" id="phppgadmin">
1907 <h3><a class="toc-backref" href=
1908 "#id36">3.4.5 phppgadmin</a></h3>
1910 <p>L'interfaccia web Phppgadmin per il database server
1911 PostgreSQL non richede necessariamente la presenza di un
1912 database locale, puo' infatti essere utilizzata per
1913 gestire databases remoti (il suo file di configurazione:
1914 <tt class="docutils literal"><span class=
1915 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1916 caso si voglia installare localmente Mysql si utilizzi il
1917 pacchetto <tt class="docutils literal"><span class=
1918 "pre">postgresql</span></tt> .</p>
1920 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1921 <tt class="docutils literal"><span class=
1922 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1923 non fosse controllare che sia incluso il file <tt class=
1924 "docutils literal"><span class=
1925 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1926 <tt class="docutils literal"><span class=
1927 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1931 <div class="section" id="virtual-hosts">
1932 <h2><a class="toc-backref" href=
1933 "#id37">3.5 Virtual hosts</a></h2>
1937 <li><a class="reference external" href=
1938 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1940 <li><a class="reference external" href=
1941 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1942 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1946 <p>I virtual host permettono di avere piu' siti internet
1947 disponibili tramite lo stesso server web, eventualmente
1948 mappati su un solo indirizzo ip. Sono generalemente di due
1953 <li>Basati su <em>indirizzi ip</em>. Se si ha la
1954 possibilita' di avere piu' indirizzi ip dedicati per i
1955 diversi siti che si vuole servire. ES: <tt class=
1956 "docutils literal"><span class=
1957 "pre"><VirtualHost</span> <span class=
1958 "pre">192.168.0.2:80></span></tt> . Soluzione
1959 dispendiosa, si tende ad usarla solo se servono
1960 certificati di sicurezza (SSL ) dedicati per ogni
1963 <li>Basati su <em>nomi di dominio</em> che puntano allo
1964 stesso ip. Soluzione piu' economica e diffusa che si
1965 basa sulle funzionalita' di http 1.1 .</li>
1969 <p>Prenderemo in esame la gestione di virtual hosts basati
1970 su nomi di dominio.</p>
1972 <div class="section" id="gestione-dns">
1973 <h3><a class="toc-backref" href=
1974 "#id38">3.5.1 Gestione DNS</a></h3>
1976 <p>Prima di tutto per poter impostare i virtual hosts
1977 dovete avere un server DNS che risolva i vostri nomi di
1978 dominio sull'indirizzo ip del server. Questo si puo'
1979 ottenere in vari modi, ad es:</p>
1982 <dl class="docutils">
1983 <dt><em>Bind</em> (DNS server)</dt>
1985 <dd>Impostare i campi A nelle proprie zone gestite
1986 dal server dns Bind. Ad es: <tt class=
1987 "docutils literal"><span class=
1988 "pre">papo</span>
1990 "pre">A</span>
1991 <span class="pre">212.22.136.248</span></tt></dd>
1993 <dt><em>Servizio DNS dinamico on line</em>.</dt>
1995 <dd>Utilizzare un servizio come ad es: <a class=
1996 "reference external" href=
1997 "https://www.dyndns.com/">https://www.dyndns.com/</a>
1998 per mappare nomi di dominio sul proprio indirizzo ip,
1999 comodo ad esempio se si dispone di un indirzzo ip
2000 pubblico (anche se dinamico) per la propria
2001 connessione ad internet.</dd>
2003 <dt><em>Dnsmasq</em> (DNS server)</dt>
2005 <dd>Utilizzabile a livello locale per fare dei test,
2006 utilizzando direttive come: <tt class=
2007 "docutils literal"><span class=
2008 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2010 <dt><tt class="docutils literal"><span class=
2011 "pre">/etc/hosts</span></tt></dt>
2013 <dd>Per prove <em>strettamente a livello locale</em>
2014 potete impostare i nomi dei vostri virtual server nel
2015 file /etc/hosts .</dd>
2018 <pre class="literal-block">
2021 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2022 ;; global options: printcmd
2024 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2025 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2027 ;; QUESTION SECTION:
2028 ;177.piffa.net. IN A
2031 177.piffa.net. 0 IN A 10.10.208.177
2033 ;; Query time: 12 msec
2034 ;; SERVER: 10.10.208.254#53(10.10.208.254)
2035 ;; WHEN: Wed May 6 12:27:08 2009
2036 ;; MSG SIZE rcvd: 47
2039 <p>La parte interessante e' <tt class=
2040 "docutils literal"><span class=
2041 "pre">177.piffa.net.</span>
2043 "pre">0</span>
2044 <span class="pre">IN</span>
2046 "pre">A</span>
2047 <span class="pre">10.10.208.177</span></tt> . Il nome di
2048 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2049 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2050 dovra' essere disponibile un virtual host che corrisponde
2051 al nome <tt class="docutils literal"><span class=
2052 "pre">177.piffa.net</span></tt> .</p>
2055 <div class="section" id="virtual-host">
2056 <h3><a class="toc-backref" href=
2057 "#id39">3.5.2 Virtual host</a></h3>
2059 <p>Esempio di Virtual host:</p>
2060 <pre class="literal-block">
2061 <VirtualHost *:80 >
2062 ServerName 177.piffa.net
2063 DocumentRoot /var/www/177.piffa.net/
2064 ServerAdmin webmaster@177.piffa.net
2065 </VirtualHost>
2068 <ol class="arabic simple">
2069 <li><tt class="docutils literal"><span class=
2070 "pre"><VirtualHost</span> <span class=
2071 "pre">\*:80</span> <span class="pre">></span></tt>
2072 La prima riga indica l'inizio della stanza relativa al
2073 nostro virtual host, che ascolotera' su qualunque
2074 indirizzo ip (nel caso il server abbia piu' indirizzi
2075 dai quali e' raggiungibile) sulla porta <tt class=
2076 "docutils literal"><span class=
2077 "pre">80</span></tt>.</li>
2079 <li><tt class="docutils literal"><span class=
2080 "pre">Server/name</span></tt> precisa quale sara' il
2081 nome di dominio a cui verra' associato questo sito
2082 rispetto ad altri eventualmenti presenti sullo stesso
2085 <li><tt class="docutils literal"><span class=
2086 "pre">DocumentRoot</span></tt> : il path della
2087 directory che contiene le pagine del sito.</li>
2089 <li><tt class="docutils literal"><span class=
2090 "pre">ServerAdmin</span></tt>: l'indirizzo del
2091 webmaster, in modo da poterlo contattare in caso di
2092 problemi col sito.</li>
2094 <li><tt class="docutils literal"><span class=
2095 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2096 chiusura della stanza di definizione del virtual
2100 <p>Quelle che abbiamo appena visto sono le direttive
2101 essenziali per definire un sito virtuale, potrebbe essere
2102 utile aggiungene altre:</p>
2106 <dl class="first docutils">
2107 <dt><tt class="docutils literal"><span class=
2108 "pre">ErrorLog</span> <span class=
2109 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2112 <p class="first last">Log degli errori separato
2113 dai restanti siti web ospitati dal server.</p>
2119 <dl class="first docutils">
2120 <dt><tt class="docutils literal"><span class=
2121 "pre">LogLevel</span> <span class=
2122 "pre">warn</span></tt></dt>
2125 <p class="first last">Livello di importanza degli
2126 eventi loggati= warning <em>attenzione</em> .</p>
2132 <dl class="first docutils">
2133 <dt><tt class="docutils literal"><span class=
2134 "pre">CustomLog</span> <span class=
2135 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2136 <span class="pre">combined</span></tt></dt>
2139 <p class="first last">Log di accesso separati
2140 dagli altri siti, utile anche qua per statistiche
2141 di accesso per il solo sito virtuale.</p>
2147 <p>Potrebbe essere utile modificare le impostazioni di
2148 una intera directory, ad esempio per abilitare
2149 l'<tt class="docutils literal"><span class=
2150 "pre">AuthConfig</span></tt>:</p>
2151 <pre class="literal-block">
2152 <Directory "/var/www/miosito.net/privata">
2153 AllowOverride AuthConfig
2154 Options ExecCGI Indexes MultiViews FollowSymLinks
2160 <p><tt class="docutils literal"><span class=
2161 "pre">AllowOverride</span> <span class=
2162 "pre">AuthConfig</span></tt> ora vale per l'intera
2163 directory, come le altre opzioni.</p>
2167 <div class="section" id="negoziazione-accessi">
2168 <h2><a class="toc-backref" href=
2169 "#id40">3.6 Negoziazione accessi</a></h2>
2171 <p>Tipicamente quando si installa un server web il proprio
2172 desiderio e' di dare accesso ai materiali disponibili al
2173 maggior numero di visitatori possibile. Talvolta pero' puo
2174 essere utile o necessario limitare gli accessi, ad esempio
2175 per escludere un <em>bot</em> indesiderato che scansiona
2176 ininterottamente le nostre pagine o per creare una <em>Area
2177 Riservata</em> i cui materiali non devono essere
2178 disponibile a tutti.</p>
2180 <div class="section" id="limiti-su-base-ip">
2181 <h3><a class="toc-backref" href=
2182 "#id41">3.6.1 Limiti su base ip</a></h3>
2184 <p>La forma piu' semplice di restrizine degli accessi e'
2185 su base degli indirizzi IP dei client: tipicamente i siti
2186 web sono settati per dare accesso a chiunque:</p>
2187 <pre class="literal-block">
2188 <VirtualHost *:80 >
2190 <Directory "/var/www/177.piffa.net">
2194 </VirtualHost>
2197 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2199 <pre class="literal-block">
2200 <VirtualHost *:80 >
2201 <Directory "/var/www/177.piffa.net">
2204 Deny from 192.168.0.1
2206 </VirtualHost>
2209 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2210 materiali dell'intero sito virtuale, oppure potremmo
2211 lavorare su una sola directory:</p>
2212 <pre class="literal-block">
2213 <Directory "/var/www/miosito.net/limitata">
2215 Allow from 192.168.0.0./24
2220 <p>In questo modo solo la classe IP <tt class=
2221 "docutils literal"><span class=
2222 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2223 directory <tt class="docutils literal"><span class=
2224 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2225 relativamente facile per un malintenzionato cambiare il
2226 propio indirizzo ip, oppure collegarsi da un altra zona.
2227 Meno facile e' accedere ad una classe privata trovandosi
2228 all'esterno di questa, ma e' comunque possibile mandare
2229 delle richieste <tt class="docutils literal"><span class=
2230 "pre">GET</span></tt> per cercare di mandare in Denial Of
2231 Service il webserver.</p>
2235 <div class="section" id="user-authentication">
2236 <h2><a class="toc-backref" href=
2237 "#id42">3.7 User Authentication</a></h2>
2239 <p>A volte conviene negoziare gli accessi ad un area di un
2240 sito tramite autenticazione basata sull'accopiata <em>nome
2241 utente / password</em>. Questo puo' venire utile per creare
2242 una area download <em>intranet</em>, alla quale possano
2243 accedere solo gli utenti previsti a prescindere dagli
2244 indirizzi IP dei loro client. Per quanto esistano soluzioni
2245 piu' granulari e sofisticate per ottenere questo,
2246 <em>mod-auth</em> puo'essere sufficente. E mod auth non
2247 richiede l'installazione di software aggiuntivi.</p>
2249 <p>link: <a class="reference external" href=
2250 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2252 <div class="section" id="definire-la-cartella">
2253 <h3><a class="toc-backref" href=
2254 "#id43">3.7.1 Definire la
2257 <p>Decidere quale sara' il <em>path</em> della cartella
2258 da sottoporre ad autentizazione:(e creiamo la
2262 <tt class="docutils literal"><span class=
2263 "pre">mkdir</span> <span class=
2264 "pre">/var/www/177.piffa.net/privata</span></tt>
2268 <div class="section" id=
2269 "creazione-del-database-delle-passwords">
2270 <h3><a class="toc-backref" href=
2271 "#id44">3.7.2 Creazione del database
2272 delle passwords</a></h3>
2274 <p>Un modo semplice per gestire una database di
2275 <em>user-id / passwords</em> e' utilizzare l'utility
2276 <tt class="docutils literal"><span class=
2277 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2278 in cui un <em>crypt</em> delle password viene associato
2281 <p>Si dovra' decidere dove tenere questo file, la cosa
2282 importante e' che non sia visibile nel sito web: non deve
2283 essere scaricabile dai visitatori. Deve essere cioe'
2284 all'esterno della <em>DocumentRoot</em>: un buon posto
2285 potrebbe essere la /home dell'utente.</p>
2287 <p>Creiamo (con il <em>flag</em> <tt class=
2288 "docutils literal"><span class="pre">-c</span></tt>) il
2289 file <tt class="docutils literal"><span class=
2290 "pre">/home/utente/passwords</span></tt> con l'utente
2291 <tt class="docutils literal"><span class=
2292 "pre">luca</span></tt>:</p>
2293 <pre class="literal-block">
2294 htpasswd -c /home/utente/passwords luca
2297 <p><tt class="docutils literal"><span class=
2298 "pre">htpasswd</span></tt> ci chedera' la password da
2299 associare all'utente <tt class=
2300 "docutils literal"><span class="pre">luca</span></tt>.
2301 Per sucessive modifiche della password o aggiunta di
2302 nuovi utenti non sara' necessario usare il flag
2303 <tt class="docutils literal"><span class=
2304 "pre">-c</span></tt>.</p>
2307 <div class="section" id="id3">
2308 <h3><a class="toc-backref" href=
2309 "#id45">3.7.3 Configurazione di
2312 <p>Ora possiamo passare alla configurazione vera e
2313 propria di Apache, ma con una novita': andremo a inserire
2314 la voce in un <tt class="docutils literal"><span class=
2315 "pre">.htaccess</span></tt> invece che modificare il file
2316 di impostazione del virtual-host.</p>
2318 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2319 puo' modificare l'impostazione del virtual host nel file
2320 <tt class="docutils literal"><span class=
2321 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2322 ma spesso il motivo per cui creiamo i virtual hosts e'
2323 ospitare i siti di altri utenti, che possono solo
2324 pubblicare (generalmente tramite <em>FTP</em>) i loro
2325 documenti nella loro <em>DocumentRoot</em>, senza poter
2326 quindi modificare in alcun modo la configurazione del
2329 <p>Dando agli utenti la possibilita' di modificare
2330 (<em>AllowOverride</em>) autonomamente alcuni parametri
2331 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2332 funzionamenteo del loro spazio web ci togliera'
2333 l'incombenza di dover intervenire suii vari virtual
2336 <p>Abilitiamo l'AllowOverride nel file di configurazione
2337 del virtual host per la sola directory <tt class=
2338 "docutils literal"><span class=
2339 "pre">privata</span></tt>:</p>
2340 <pre class="literal-block">
2341 <VirtualHost *:80 >
2342 ServerName 177.piffa.net
2343 DocumentRoot /var/www/177.piffa.net/
2344 ServerAdmin webmaster@177.piffa.net
2345 <Directory "/var/www/177.piffa.net/privata">
2346 AllowOverride AuthConfig
2348 </VirtualHost>
2351 <p>Per rendere il cambiamento effettivo sara' necessario
2352 fare un restart / reload di Apache.</p>
2354 <p>Ora sara' possibile, anche per l'utente di sistema,
2355 creare un fie <tt class="docutils literal"><span class=
2356 "pre">.htaccess</span></tt> che sara' onorato da
2359 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2360 <pre class="literal-block">
2361 # Questo file viene incluso
2362 # nella configurazione del sito web
2363 # Messaggio visualizzato al prompt per l'autenticazione
2364 AuthName "Area privata soggetta ad autentizazione"
2365 # tipo di autenticazione da usarsi
2367 # File generato precedentemente con htpasswd
2368 AuthUserFile /home/utente/passwords
2370 # Negoziazione degli accessi
2371 # valid users permette l'accesso agli utenti specificati
2372 # nel file generato da htpasswd
2376 <p>Si noti che non e' necessario fare ripartire Apache
2377 per onorare i cambiamenti (un utente non avrebbe la
2378 possibilita' di farlo!).</p>
2382 <div class="section" id="cavets">
2383 <h2><a class="toc-backref" href=
2384 "#id46">3.8 Cavets</a></h2>
2386 <p>Problemi di cache:</p>
2390 <li>Proxy: nei settaggi del browser specificare di non
2391 utilizzare un server proxy http per il sito web locale
2392 (o per gli altri che si stanno monitorando). Se si ha
2393 il controllo del proxy server: stopparlo, ricaricare la
2394 pagina (operazione che fallira'), far ripartire il
2395 proxy, ricaricare la pagina.</li>
2397 <li>Provare con un altro browser, o cercare di svuotare
2398 la cache chiudere/riaprire l'applicativo. Provare a
2399 fermare Apache, ricaricare la pagina (operazione che
2400 fallira'), far ripartire Apache, ricaricare la
2407 <div class="section" id="domain-name-system">
2408 <h1><a class="toc-backref" href=
2409 "#id47">4 Domain Name System</a></h1>
2411 <p>Domain Name System (spesso indicato con DNS) e' un
2412 servizio utilizzato per la risoluzione di nomi di host in
2413 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2414 un database distribuito, costituito dai server DNS.</p>
2416 <p>Il nome DNS denota anche il protocollo che regola il
2417 funzionamento del servizio, i programmi che lo implementano,
2418 i server su cui questi girano, l'insieme di questi server che
2419 cooperano per fornire il servizio.</p>
2421 <p>I nomi DNS, o "nomi di dominio", sono una delle
2422 caratteristiche piu' visibili di Internet.</p>
2424 <p>C'e' confusione in merito alla definizione dell'acronimo:
2425 la S spesso viene interpretata come service, ma la
2426 definizione corretta e' system.</p>
2428 <p>L'operazione di convertire un nome in un indirizzo e'
2429 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2430 detto risoluzione inversa.</p>
2432 <div class="section" id="nomi-di-dominio">
2433 <h2><a class="toc-backref" href=
2434 "#id48">4.1 Nomi di dominio</a></h2>
2436 <p>Un nome a dominio e' costituito da una serie di stringhe
2437 separate da punti, ad esempio it.wikipedia.org. A
2438 differenza degli indirizzi IP, dove la parte piu'
2439 importante del numero e' la prima partendo da sinistra, in
2440 un nome DNS la parte piu' importante e' la prima partendo
2441 da destra. Questa e' detta dominio di primo livello (o TLD,
2442 Top Level Domain), per esempio .org o .it.</p>
2444 <p>Un dominio di secondo livello consiste in due parti, per
2445 esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2446 specifica un'ulteriore suddivisione. Quando un dominio di
2447 secondo livello viene registrato all'assegnatario, questo
2448 e' autorizzato a usare i nomi di dominio relativi ai
2449 successivi livelli come it.wikipedia.org (dominio di terzo
2450 livello) e altri come some.other.stuff.wikipedia.org
2451 (dominio di quinto livello) e cosi' via.</p>
2454 <div class="section" id="tipologie-di-record">
2455 <h2><a class="toc-backref" href=
2456 "#id49">4.2 Tipologie di record</a></h2>
2458 <p>Ad un nome DNS possono corrispondere diversi tipi di
2459 informazioni. Per questo motivo, esistono diversi tipi di
2460 record DNS. Ogni voce del database DNS deve essere
2461 caratterizzata da un tipo. I principali tipi sono:</p>
2464 <li>Record A - Indica la corrispondenza tra un nome ed
2465 uno (o piu') indirizzi IP (per la precisione indirizzi
2466 IPv4, ovvero la versione attualmente in uso).</li>
2468 <li>Record MX - (Mail eXchange) indica a quali server
2469 debba essere inviata la posta elettronica per un certo
2472 <li>Record CNAME - Sono usati per creare un alias, ovvero
2473 per fare in modo che lo stesso calcolatore sia noto con
2474 piu' nomi. Uno degli utilizzi di questo tipo di record
2475 consiste nell'attribuire ad un host che offre piu'
2476 servizi un nome per ciascun servizio. In questo modo, i
2477 servizi possono poi essere spostati su altri host senza
2478 dover riconfigurare i client, ma modificando solo il
2481 <li>Record PTR - Il DNS viene utilizzato anche per
2482 realizzare la risoluzione inversa, ovvero per far
2483 corrispondere ad un indirizzo IP il corrispondente nome a
2484 dominio. Per questo si usano i record di tipo "PTR" (e
2485 una apposita zona dello spazio dei nomi
2488 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2490 <li>Record SRV - Identificano il server per un
2491 determinato servizio all'interno di un dominio. Possono
2492 essere considerati una generalizzazione dei record
2495 <li>Record TXT - Associano campi di testo arbitrari ad un
2496 dominio. Questi campi possono contenere una descrizione
2497 informativa oppure essere utilizzati per realizzare
2501 <p>Vi sono anche tipi di record "di servizio", necessari al
2502 funzionamento del database distribuito: * Record NS -
2503 Utilizzato per indicare quali siano i server DNS
2504 autoritativi per un certo dominio, ovvero per delegarne la
2505 gestione. * Record SOA - (Start of Authority) usato per la
2506 gestione delle zone DNS.</p>
2509 <div class="section" id="utilizzo">
2510 <h2><a class="toc-backref" href=
2511 "#id50">4.3 Utilizzo</a></h2>
2513 <p>I computer vengono identificati in rete grazie agli
2514 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2515 utenti come riferimento per i vari server. Ad esempio
2516 sarebbe scomodoriferirsi al motore di ricerca Goggle con
2517 uno dei suoi IP: <tt class="docutils literal"><span class=
2518 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2519 nome di dominio <em>www.google.com</em>:</p>
2520 <pre class="literal-block">
2521 ping -c 1 www.google.com
2522 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2526 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2527 <h2><a class="toc-backref" href=
2528 "#id51">4.4 Risoluzione dei nomi di
2531 <p>Ci sono vari strumenti per interrogare i server DNS e
2532 ottenere l'indirizzo IP associato al nome di dominio che ci
2534 <pre class="literal-block">
2535 $ host www.piffa.net
2536 www.piffa.net is an alias for piffa.net.
2537 piffa.net has address 65.98.21.97
2538 piffa.net mail is handled by 10 65.98.21.97
2541 $ nslookup www.piffa.net
2542 Server: 192.168.0.10
2543 Address: 192.168.0.10#53
2545 Non-authoritative answer:
2546 www.piffa.net canonical name = piffa.net.
2548 Address: 65.98.21.97
2553 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2554 ;; global options: +cmd
2556 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2557 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2559 ;; QUESTION SECTION:
2560 ;www.piffa.net. IN A
2563 www.piffa.net. 3489 IN CNAME piffa.net.
2564 piffa.net. 3489 IN A 65.98.21.97
2566 ;; AUTHORITY SECTION:
2567 piffa.net. 86289 IN NS ns2.mydomain.com.
2568 piffa.net. 86289 IN NS ns1.mydomain.com.
2569 piffa.net. 86289 IN NS ns4.mydomain.com.
2570 piffa.net. 86289 IN NS ns3.mydomain.com.
2572 ;; ADDITIONAL SECTION:
2573 ns1.mydomain.com. 96208 IN A 64.94.117.193
2574 ns2.mydomain.com. 96208 IN A 64.94.31.67
2575 ns3.mydomain.com. 96208 IN A 66.150.161.137
2576 ns4.mydomain.com. 96208 IN A 63.251.83.74
2578 ;; Query time: 1 msec
2579 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2580 ;; WHEN: Sun May 10 21:23:11 2009
2581 ;; MSG SIZE rcvd: 209
2584 <p>Lo strumento piu' esaustivo e' <tt class=
2585 "docutils literal"><span class="pre">dig</span></tt>,
2586 installabile con il pacchetto <tt class=
2587 "docutils literal"><span class="pre">dnsutils</span></tt>
2591 <div class="section" id="dig">
2592 <h2><a class="toc-backref" href=
2593 "#id52">4.5 Dig</a></h2>
2595 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2596 "docutils literal"><span class="pre">dig</span></tt> per
2597 l'inerrogazione dei DNS Server:</p>
2598 <pre class="literal-block">
2601 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2602 ;; global options: +cmd
2604 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2605 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2607 ;; QUESTION SECTION:
2608 ;www.google.it. IN A
2611 www.google.it. 250683 IN CNAME www.google.com.
2612 www.google.com. 334819 IN CNAME www.l.google.com.
2613 www.l.google.com. 186 IN A 74.125.43.103
2614 www.l.google.com. 186 IN A 74.125.43.104
2615 www.l.google.com. 186 IN A 74.125.43.147
2616 www.l.google.com. 186 IN A 74.125.43.99
2618 ;; AUTHORITY SECTION:
2619 l.google.com. 80856 IN NS f.l.google.com.
2620 l.google.com. 80856 IN NS d.l.google.com.
2621 l.google.com. 80856 IN NS b.l.google.com.
2622 l.google.com. 80856 IN NS c.l.google.com.
2623 l.google.com. 80856 IN NS a.l.google.com.
2624 l.google.com. 80856 IN NS e.l.google.com.
2625 l.google.com. 80856 IN NS g.l.google.com.
2627 ;; Query time: 1 msec
2628 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2629 ;; WHEN: Sun May 10 21:34:47 2009
2630 ;; MSG SIZE rcvd: 255
2633 <dl class="docutils">
2636 <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2637 <em>root servers</em> utilizzati. I root server sono i
2638 server che mantengono le informazioni sui domini di primo
2639 livello (TLD) e sono quindi il punto di partenza per
2640 scorrere nella directory dei DNS per recuperare le
2641 informazioni (tipicamente un campo <tt class=
2642 "docutils literal"><span class="pre">A</span></tt> per un
2643 indirizzo IP) che ci servono per raggiungere un certo
2652 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2653 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2654 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2655 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2656 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2657 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2658 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2659 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2660 J.ROOT-SERVERS.NET. . 192032 IN NS
2661 D.ROOT-SERVERS.NET.</p>
2666 <dl class="docutils">
2667 <dt>dig @nome_dns</dt>
2669 <dd>Permette di fare una query ad un server dns
2670 particolare. Es: <tt class=
2671 "docutils literal"><span class="pre">dig</span>
2672 <span class="pre">@151.99.25.1</span> <span class=
2673 "pre">www.google.it</span></tt></dd>
2675 <dt>dig MX www.google.it</dt>
2677 <dd>Chiede un campo in particolare, in questo caso il
2680 <dt>dig ANY www.google.it</dt>
2682 <dd>Chiede tutti i campi, non solo i campi
2685 <dt>dig -x 74.125.43.104</dt>
2687 <dd>Effettua una richiesta inversa: dall'ip al PTR
2692 <div class="section" id="resolv-conf">
2693 <h2><a class="toc-backref" href=
2694 "#id53">4.6 resolv.conf</a></h2>
2696 <p>Il file <tt class="docutils literal"><span class=
2697 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2698 sul dns usato dal sistema, in genere anche altre
2699 applicazioni che devono effettuare query DNS leggono
2700 resolv.conf per conoscere l'ubicazione del DNS.</p>
2702 <p>/etc/resolv.conf:</p>
2706 <li><tt class="docutils literal"><span class=
2707 "pre">nameserver</span></tt>: indica il nameserver da
2708 utilizzare, indicato con l'indirizzo ip.</li>
2710 <li><tt class="docutils literal"><span class=
2711 "pre">domain</span></tt>: indica il nome di dominio
2712 della rete attuale, vedi voce sucessiva.</li>
2714 <li><tt class="docutils literal"><span class=
2715 "pre">search</span></tt>: nome di dominio usato dalla
2716 rete sul quale cercare gli hosts. Ad esempio se
2717 impostato su <tt class="docutils literal"><span class=
2718 "pre">piffa.net</span></tt> pingando l'host <tt class=
2719 "docutils literal"><span class="pre">bender</span></tt>
2720 viene automaticamente fatto un tentativo di ricerca per
2721 <tt class="docutils literal"><span class=
2722 "pre">bender.piffa.net</span></tt>.</li>
2726 <p>Si veda anche la pagina man di resolv.conf.</p>
2728 <p>Attenzione: se si usa un client DHCP o simile questo
2729 file potra' essere riscritto automaticamente in base a
2730 quanto ottenuto dal DHCP. Si veda la documentazione del
2731 pacchtto <tt class="docutils literal"><span class=
2732 "pre">resolvconf</span></tt>.</p>
2735 <div class="section" id="etc-hosts">
2736 <h2><a class="toc-backref" href=
2737 "#id54">4.7 /etc/hosts</a></h2>
2739 <p>Tabella statica per l'associazione tra IP e nomi di
2741 <pre class="literal-block">
2746 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2747 daniela daniela.piffa.net 10.10.208.254 mirror
2748 mirror.piffa.net 91.191.138.15 thepiratebay.org
2749 192.168.0.11 chrome chrome.mydomain.com
2752 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2753 stringhe di testo (anche piu' di una es: <tt class=
2754 "docutils literal"><span class="pre">mirror</span></tt> e
2755 <tt class="docutils literal"><span class=
2756 "pre">mirror.piffa.net</span></tt>), un record per
2759 <p>Il problema e' la gestione di questo file: quando gli
2760 host cambiano IP si devono aggiornare i records, e c'e' poi
2761 il problema di distribuire questo file tra i vari hosts
2762 della propia LAN. Un metodo semplice per distribuire questo
2763 file e' utilizzare <tt class=
2764 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2765 questo infatti legge e onora il file <tt class=
2766 "docutils literal"><span class="pre">hosts</span></tt>
2767 locale e lo <em>distribuisce</em> ai clients.</p>
2769 <p>Modificare (riconducendola a un ip interno, cosi'
2770 annullandola) la risoluzione di un nome di dominio e' un
2771 modo drastico e funzionale per <em>annullarlo</em>
2772 rendendolo indisponibile alla propia rete locale, ad
2773 esempio aggiungere al file <tt class=
2774 "docutils literal"><span class=
2775 "pre">/etc/hosts</span></tt>:</p>
2776 <pre class="literal-block">
2777 127.0.0.1 www.facebook.com
2780 <p>Impedira' agli utenti della LAN di raggiungere
2781 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2784 <div class="section" id="hostname">
2785 <h2><a class="toc-backref" href=
2786 "#id55">4.8 Hostname</a></h2>
2788 <p>Ogni computer ha un <em>propio nome</em> visualizzabile
2789 (e modificabile) con il comando <tt class=
2790 "docutils literal"><span class=
2791 "pre">hostname</span></tt>.</p>
2793 <p>Per modificare in modo permanente il nome del computer
2794 si modifichi il contenuto del file <tt class=
2795 "docutils literal"><span class=
2796 "pre">/etc/hostname</span></tt>.</p>
2798 <p>Tipicamente si vuole mantenere una correlazione tra il
2799 nome dell'host, o meglio la stringa con cui il server si
2800 qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
2801 di <em>servizi virtuali</em> ci sara' un <em>nome
2802 server</em> principale associato al <em>PTR</em> condiviso.
2803 Non e' automatico che un servizio, ad esempio un server di
2804 posta, si qualifichi leggendo il contenuto di questo file e
2805 magari aggiungendo come suffisso il dominio di cui fa parte
2806 l'host: a volte questo parametro puo' essere specificato
2807 nel file di configurazione del servizio:</p>
2808 <pre class="literal-block">
2809 * Squid: ``visible_hostname``
2811 * Postfix: ``myhostname``
2816 <div class="section" id="dnsmasq">
2817 <h1><a class="toc-backref" href=
2818 "#id56">5 DNSmasq</a></h1>
2820 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2821 forwarder e un server DHCP caratterizzato dalla facilita' di
2822 configurazione, dalla leggerezza e dalla possibilita' di
2823 modificare rapidamente i record DNS serviti alla rete. Puo'
2824 essere anche utilizzato come <cite>server per il boot da rete
2825 <http://www.debian-administration.org/articles/478>_</cite>
2828 <p>Dnsmasq e' un interessante alternativa all'uso del server
2829 DNS Bind in modalita' cache-only (non autoritativo)
2830 accompagnato dal server DHCPD. I vantaggi sono:</p>
2833 <li>Leggerezza: puo' essere fatto girare su una macchina
2834 relativamente debole in caso di bisogno.</li>
2836 <li>Rapidita' di configurazione (in particolare per servire
2837 dei record A / MX alla rete, modificando al volo i valori
2838 originali ospitati sul server DNS Publico).</li>
2840 <li>Ben integrato con connssioni PPP (utile se dovete
2841 rendere disponibile rapidamente una connessione a internet
2842 a una rete in difficolta').</li>
2845 <p>Tutto cio' rende Dnsmasq una soluzione valida in
2846 particolare quando si deve intervenire in una rete
2847 pre-esistente in cui il server principale e' in crisi: si
2848 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2849 <em>mascherare</em> i servizi al momento non disponibili.
2850 Molto utile per scopi didattici, sopratutto per testare
2851 server SMTP impostando al volo i campi MX per nomi di dominio
2854 <div class="section" id="configurazione">
2855 <h2><a class="toc-backref" href=
2856 "#id57">5.1 Configurazione</a></h2>
2858 <p>Vediamo alcune direttive di basi del file di
2859 configurazione <tt class="docutils literal"><span class=
2860 "pre">/etc/dnsmasq.conf</span></tt> utili per la
2861 configurazione sia del DNS cache che per il DHCP
2864 <dl class="docutils">
2865 <dt>domain-needed</dt>
2867 <dd>Non inoltrare query ai server DNS esterni per nomi
2868 semplici (es andrea, portatile, pippo) che verranno
2869 risolti solo in locale o causeranno direttamente una
2870 risposta <em>not found</em> .</dd>
2874 <dd>Simile alla voce precedente ma per i reverse
2879 <dd>Nome di dominio della rete da passare ai client.</dd>
2881 <dt>expand_hosts</dt>
2883 <dd>Aggiunge il <tt class="docutils literal"><span class=
2884 "pre">nome</span> <span class="pre">host</span></tt> (
2885 <tt class="docutils literal"><span class=
2886 "pre">/etc/hostname</span></tt>) dei client al nome di
2887 dominio per qualificarli in rete, senza bisogno di dover
2888 comporre a un elenco statico di record nel file
2889 <tt class="docutils literal"><span class=
2890 "pre">/etc/hosts</span></tt> o nello stesso file di
2891 configurazione di dnsmasq. Es: se un vostro client si
2892 chiama <tt class="docutils literal"><span class=
2893 "pre">chrome</span></tt> e il vostro dominio <tt class=
2894 "docutils literal"><span class=
2895 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
2896 il campo <em>A</em> per il dominio <tt class=
2897 "docutils literal"><span class=
2898 "pre">chrome.piffa.net</span></tt> diretto all'ip che
2899 verra' assegnato al client.</dd>
2903 <div class="section" id="dhcp">
2904 <h2><a class="toc-backref" href=
2905 "#id58">5.2 DHCP</a></h2>
2907 <p>Per attivare il demone DHCP di dnsmaq basta aggiungere
2908 al file di configurazione il <em>range</em> degli ip che si
2909 vuole assegnare ai client con il <em>lease time</em> (tempo
2910 di rilascio: quanto a lungo saranno validi gli ip
2911 assegnati) espresso in ore.</p>
2913 <p>Si faccia <em>attenzione</em>: in una rete puo' esseere
2914 presente <strong>un solo server DHCP</strong>, o per meglio
2915 dire qualunque server DHCP ascolta sul broadcast <tt class=
2916 "docutils literal"><span class=
2917 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
2918 un pacchetto di richesta DHCP. Quindi non fate partire
2919 inavvertitamente un server DHCP in una rete gia' servita e
2920 <strong>non vi azzardate ad andare in giro con un portatile
2921 con un server DHCP attivo</strong> nelle reti altrui.
2922 Questo vale anche per i laboratori di informatica dei corsi
2923 di reti: non fate partire il vostro server DHCP se siete
2924 collegati alla rete interna!</p>
2926 <p>/etc/dnsmasq.conf (riga 118):</p>
2927 <pre class="literal-block">
2928 dhcp-range=192.168.0.20,192.168.0.50,24h
2932 <div class="section" id="dns-cache">
2933 <h2><a class="toc-backref" href=
2934 "#id59">5.3 DNS cache</a></h2>
2936 <p>Aggiungere al file <tt class=
2937 "docutils literal"><span class=
2938 "pre">/etc/resolv.conif</span></tt> il nameserver localhost
2939 in cima alla lista dei <em>nameserver</em> disponibili.
2940 Dnsmasq usera' la propia cache e in caso non abbia
2941 disponibile il <em>record DNS</em> richiesto fara' partire
2942 una query al primo DNS:</p>
2943 <pre class="literal-block">
2944 nameserver 127.0.0.1
2947 <p>Questo pero' potrebbe essere problematico se un altro
2948 servizio, ad esempio il DHCP client, riscrive il contenuto
2949 del file <tt class="docutils literal"><span class=
2950 "pre">/etc/resolv.conf</span></tt>. Per superare il
2951 problema si aggiunga (riga 20) al file di configurazione
2952 <tt class="docutils literal"><span class=
2953 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
2954 <pre class="literal-block">
2955 prepend domain-name-servers 127.0.0.1;
2958 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
2959 (per la connessione ADSL) a intervenire sul file <tt class=
2960 "docutils literal"><span class=
2961 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
2962 <tt class="docutils literal"><span class=
2963 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
2964 <tt class="docutils literal"><span class=
2965 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
2966 internet e' ADSL raramente dovreste aver bisogno di
2967 cambiare i DNS una volta impostati (a meno che non usiate
2971 <div class="section" id="dhcpd">
2972 <h2><a class="toc-backref" href=
2973 "#id60">5.4 DHCPd</a></h2>
2975 <p>Dnsmasq puo' lavorare anche come DHCP server per la
2980 <div class="section" id="samba">
2981 <h1><a class="toc-backref" href=
2982 "#id61">6 Samba</a></h1>
2984 <p>Samba e' un progetto libero che fornisce servizi di
2985 condivisione di file e stampanti a client SMB/CIFS.</p>
2987 <p>Samba e' liberamente disponibile, al contrario di altre
2988 implementazioni SMB/CIFS, e permette di ottenere
2989 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
2991 <p>Samba e' un software che puo girare su piattaforme che non
2992 siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
2993 390, OpenVMS e altri sistemi operativi. Samba utilizza il
2994 protocollo TCP/IP utilizzando i servizi offerti sul server
2995 ospite. Quando correttamente configurato, permette di
2996 interagire con client o server Microsoft Windows come se
2997 fosse un file e print server Microsoft agendo da Primary
2998 Domain Controller (PDC) o come Backup Domain Controller, puo'
2999 inoltre prendere parte ad un dominio Active Directory.</p>
3001 <div class="section" id="pacchetti">
3002 <h2><a class="toc-backref" href=
3003 "#id62">6.1 Pacchetti</a></h2>
3005 <p>Pacchetti da installare per utilizzare Samba in
3006 modalita' client <a class="footnote-reference" href="#id5"
3007 id="id4" name="id4">[2]</a></p>
3008 <pre class="literal-block">
3012 <p>Pacchetti da installare per utilizzare Samba in
3013 modalita' server:</p>
3014 <pre class="literal-block">
3015 samba smbfs smbclient
3018 <table class="docutils footnote" frame="void" id="id5"
3025 <tbody valign="top">
3027 <td class="label"><a class="fn-backref" href=
3030 <td>Anche se nato per i sistemi Windows, Samba puo'
3031 essere usato anche per montare cartelle sotto
3032 GNU/Linux come alternativa a NFS. Per la condivisione
3033 di stampanti sarebbe invece opportuno intervenire
3034 direttamente su <tt class=
3035 "docutils literal"><span class=
3036 "pre">CUPS</span></tt>.</td>
3041 <p>Durante la prima installazione viene chiesto il nome del
3042 gruppo di appartenenza, il default per Windows e'
3043 <tt class="docutils literal"><span class=
3044 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3045 <tt class="docutils literal"><span class=
3046 "pre">208</span></tt> .</p>
3048 <p>Per riconfigurare Samba si usi il comando:</p>
3049 <pre class="literal-block">
3050 dpkg-reconfigure samba-common
3054 <div class="section" id="passwords-e-autenticazione">
3055 <h2><a class="toc-backref" href=
3056 "#id63">6.2 Passwords e
3057 autenticazione</a></h2>
3059 <p>Per poter configurare Samba in modo che usi un sistema
3060 di negoziazione degli accessi alle cartelle condivise
3061 basato su accoppiate <em>nome utente / password</em>
3062 bisogna distinguere tra 3 livelli di password (e
3063 generalmente volete usare <em>sempre la stessa
3064 password</em> per ognuno di questi) e delle differenze tra
3065 le modalita' di <em>autenticazione</em> (e quindi anche di
3066 criptaggio delle passwords) usate da sistemi GNU/Linux e
3069 <dl class="docutils">
3070 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3072 <dd>E' la password dell'<em>utente di sistema</em> che
3073 viene usata sul sistema operativo su cui gira il software
3074 Samba. E' importante tenere conto anche delle
3075 <em>user-id</em> e <em>group-id</em> degli utenti che
3076 dovranno fisicamente scrivere sui file system. Se un
3077 utente non puo' scrivere in una certa posizione del file
3078 system (ad esempio nella cartella <tt class=
3079 "docutils literal"><span class=
3080 "pre">/mnt/condivisione</span></tt> che sara' stata
3081 necessariamente creata inizialmente dall'utente
3082 <tt class="docutils literal"><span class=
3083 "pre">root</span></tt>) per mancanza dei privilegi di
3084 scrittura allora neanche Samba potra' farlo nel momento
3085 in mette a disposizione la risorsa all'utente. Se si
3086 montano file-system dedicati per le condivisioni
3087 controllare i permessi e propieta' dei <em>punti di
3088 mount*</em>. Queste passwords sono salvate nel solito
3089 file /etc/shadow (richiamato da /etc/passwd).</dd>
3091 <dt>2 Password per l'applicativo Samba</dt>
3093 <dd>Samba deve essere compatibile con Windows e quindi
3094 utilizzare un sistema di criptazione delle password
3095 diverso da /etc/shadow . Le password per Samba possono
3096 essere gestite ad esempio col comando <tt class=
3097 "docutils literal"><span class=
3098 "pre">smbpasswd</span></tt> e vengono generalmente
3099 salvate all'interno di <tt class=
3100 "docutils literal"><span class=
3101 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3103 <dt>3 Password per Windows.</dt>
3105 <dd>Gli utenti Windows effettuano il log-in alla partenza
3106 della sessione di Windows. Se si avra' l'accortezza di
3107 usare sempre la <em>stessa password</em> data
3108 precedentemente anche a Windows (o viceversa impostare la
3109 password per GNU/Linux / Samba uguale a quella di
3110 Windows) l'utente potra' accedere automaticamente alle
3111 condivisioni a lui disponibili.</dd>
3115 <div class="section" id="creazione-utenti">
3116 <h2><a class="toc-backref" href=
3117 "#id64">6.3 Creazione Utenti</a></h2>
3119 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3120 attenzione a <em>non dargli una shell di sistema</em>. Gli
3121 utenti Windows che accedono al server solo per le
3122 condivisioni non hanno bisogno di poter eseguire comandi
3125 <p>Creazione di un utente denominato sambo:</p>
3126 <pre class="literal-block">
3127 adduser --shell /bin/false sambo
3130 <p>Nel file <tt class="docutils literal"><span class=
3131 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3132 <pre class="literal-block">
3133 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3136 <p>Aggiunta dell'utente al database delle password per
3137 Samba e generazione della sua password:</p>
3138 <pre class="literal-block">
3142 <p>Se successivamente si vorra' modificare la password di
3143 un utente gia' esistente si usi:</p>
3144 <pre class="literal-block">
3148 <p>La password sotto Windows verra' modificata sul sistema
3152 <div class="section" id="creare-la-condivisione">
3153 <h2><a class="toc-backref" href=
3154 "#id65">6.4 Creare la
3155 condivisione</a></h2>
3157 <p>La condivisione altro non e' che una cartella sul server
3158 che viene resa disponibile ai client negoziando l'accesso
3159 in base a una autenticazione basata su <em>user-name /
3160 password</em>. E' per altro possibile permettere l'accesso
3161 a una risorsa a chiunque indiscriminatamente (a tutti i
3162 <tt class="docutils literal"><span class=
3163 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3164 punto di vista della sicurezza. Si decida se la cartella
3165 condivisa debba risiedere nella <em>home</em> di un utente
3166 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3167 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3168 Nel secondo caso si potranno gestire gli accessi sotto
3169 GNU/Linux tramite i gruppi.</p>
3171 <p>Creazione della risorsa sambo_share nella home
3172 dell'utente sambo:</p>
3173 <pre class="literal-block">
3174 # mkdir /home/sambo/sambo_share
3175 # chown sambo:sambo /home/sambo/sambo_share/
3178 <div class="section" id=
3179 "sicurezza-permessi-di-esecuzione-sul-server">
3180 <h3><a class="toc-backref" href=
3181 "#id66">6.4.1 Sicurezza: permessi di
3182 esecuzione sul server</a></h3>
3184 <p>Bisognerebbe notare sul server i permessi di
3185 esecuzione del file-system che ospita la cartella da
3186 condividere. Se i file che saranno contenuti nella
3187 condivisione saranno da usarsi sotto Windows non c'e'
3188 motivo che questi siano eseguibili sotto GNU/Linux. Si
3189 potrebbe avere quindi, ipotizzando una condivisione in
3190 <tt class="docutils literal"><span class=
3191 "pre">/mnt/share</span></tt> che risieda su di un file
3192 system dedicato:</p>
3194 <p><tt class="docutils literal"><span class=
3195 "pre">/etc/fstab</span></tt></p>
3198 /dev/hda10 /mnt/share ext3 rw,
3199 <strong>nosuid,noexec</strong> 0 3
3202 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3203 possibilita' di eseguire programmi con credenziali
3208 <div class="section" id=
3209 "configurazione-dell-applicativo-samba-vero-e-proprio">
3210 <h2><a class="toc-backref" href=
3211 "#id67">6.5 Configurazione
3212 dell'applicativo Samba vero e proprio.</a></h2>
3214 <p>Avendo preparato gli utenti (ancora una volta: non si
3215 dia una shell completa a un utente che serve solo per Samba
3216 o la posta elettronica) e la cartella sul file system si
3217 puo' procedere a configurare la condivisione su Samba.</p>
3219 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3220 vim si usi 235gg ):</p>
3221 <pre class="literal-block">
3223 # Percorso della cartella condivisa
3224 path = /home/sambo/sambo_share
3225 # Se gli utenti possono scrivere / modificare file
3227 # Negoziazione degli accessi su base utenti / passwords
3230 # #######################################
3231 # Altri parametri opzionali di interesse
3232 # Se posso vedere la condivisione da esplora risorse
3233 # anche se non ho i privilegi per accedervi.
3235 # Commento indicativo della risorsa
3236 comment = Condivisione per Sambo
3239 <p>Dopo aver salvato il file si puo' fare un primo
3240 controllo tramite l'utility <tt class=
3241 "docutils literal"><span class="pre">testparm</span></tt> ,
3242 che controlla la sintassi del file di configurazione di
3243 Samba. Se questo non rileva problemi si puo' procedere a un
3244 <tt class="docutils literal"><span class="pre">#</span>
3245 <span class="pre">/etc/init.d/samba</span> <span class=
3246 "pre">restart</span></tt> .</p>
3249 <div class="section" id="testare-il-servizio">
3250 <h2><a class="toc-backref" href=
3251 "#id68">6.6 Testare il Servizio</a></h2>
3253 <p>Come testare il servizio</p>
3256 <pre class="literal-block">
3257 smbclient -U sambo -L localhost
3260 <p>Questo comando permette di esplorare la risorsa
3261 qualificandosi come utente, in questo modo potete testare
3262 il corretto funzionamento dell'autenticazione. Si provi
3263 inizialmente a sbagliare la password deliberatamente, poi a
3264 inserirla correttamente: dovrebbero essere visibili le
3265 risorse disponibili al solo utente sambo: la suo /home e la
3266 cartella samba_share:</p>
3267 <pre class="literal-block">
3268 Sharename Type Comment
3269 --------- ---- -------
3270 sambo_share Disk Condivisione per Sambo
3271 print$ Disk Printer Drivers
3272 IPC$ IPC IPC Service (base server)
3273 sambo Disk Home Directories
3276 <p>In particolare l'ultima voce relativa alla home
3277 directory dell'utente dovrebbe essere visibile solo agli
3278 utenti autenticati.</p>
3280 <p>In alternativa e' possibile montare realmente la
3281 condivisone anche su GNU/Linux tramite un client per samba
3282 e testarne il corretto funzionamento:</p>
3283 <pre class="literal-block">
3284 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3289 <div class="section" id="firewall">
3290 <h1><a class="toc-backref" href=
3291 "#id69">7 Firewall</a></h1>
3293 <p>In Informatica, nell'ambito delle reti di computer, un
3294 firewall (termine inglese dal significato originario di
3295 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3296 italiano anche parafuoco o parafiamma) e' un componente
3297 passivo di difesa perimetrale che può anche svolgere
3298 funzioni di collegamento tra due o piu' tronconi di rete.
3299 Usualmente la rete viene divisa in due sottoreti: una, detta
3300 esterna, comprende l'intera Internet mentre l'altra interna,
3301 detta LAN (Local Area Network), comprende una sezione piu' o
3302 meno grande di un insieme di computer locali. In alcuni casi
3303 e' possibile che si crei l'esigenza di creare una terza
3304 sottorete detta DMZ (o zona demilitarizzata) atta a contenere
3305 quei sistemi che devono essere isolati dalla rete interna ma
3306 devono comunque essere protetti dal firewall.</p>
3308 <p>Una prima definizione chiusa di firewall è la
3311 <p>Apparato di rete hardware o software che filtra tutti i
3312 pacchetti entranti ed uscenti, da e verso una rete o un
3313 computer, applicando regole che contribuiscono alla sicurezza
3316 <p>In realtà un firewall può essere realizzato con un
3317 normale computer (con almeno due schede di rete e software
3318 apposito), può essere una funzione inclusa in un router o
3319 può essere un apparato specializzato. Esistono inoltre i
3320 cosiddetti "firewall personali", che sono programmi
3321 installati sui normali calcolatori, che filtrano solamente i
3322 pacchetti che entrano ed escono da quel calcolatore; in tal
3323 caso viene utilizzata una sola scheda di rete.</p>
3325 <p>La funzionalità principale in sostanza è quella di
3326 creare un filtro sulle connessioni entranti ed uscenti, in
3327 questo modo il dispositivo innalza il livello di sicurezza
3328 della rete e permette sia agli utenti interni che a quelli
3329 esterni di operare nel massimo della sicurezza. Il firewall
3330 agisce sui pacchetti in transito da e per la zona interna
3331 potendo eseguire su di essi operazioni di: controllo modifica
3334 <p>Questo grazie alla sua capacità di "aprire" il
3335 pacchetto IP per leggere le informazioni presenti sul suo
3336 header, e in alcuni casi anche di effettuare verifiche sul
3337 contenuto del pacchetto.</p>
3339 <div class="section" id="links">
3340 <h2><a class="toc-backref" href=
3341 "#id70">7.1 Links</a></h2>
3344 <li><a class="reference external" href=
3345 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3347 <li><a class="reference external" href=
3348 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3349 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3353 <div class="section" id="ipfilter">
3354 <h2><a class="toc-backref" href=
3355 "#id71">7.2 Ipfilter</a></h2>
3357 <p>Link: <a class="reference external" href=
3358 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3359 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3361 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3362 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3363 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3364 etc) e del livello 1 (MAC source address). Iptables
3365 comunque permette di fare il <em>connection-tracking</em>,
3366 mediante il quale possiamo implementare il Network Address
3369 <p>Netfilter non ricostruisce il flusso di dati tra
3370 pacchetti, non puo' quindi rilevare la presenza di virus o
3371 simili che si trasmettono su pacchetti separati:
3372 ricomporre, analizzare e tornare a scomporre i frammenti
3373 rtichiederebbe troppa RAM e risorse di sistema, con il
3374 conseguente rischio di saturare il firewall fino
3375 all'abbandono dei nuovi pacchetti in transito. Ci sono
3376 altri software piu' adatti a questi compiti, ad esempio un
3377 proxy HTTP come Squid che e' appunto una applicazione di
3378 quarto livello, progettata e strutturata per analizzare e
3379 modificare i flussi di dati (il <em>contenuto</em> dei
3380 pacchetti, non le sole <em>inestazioni</em>) facendo
3381 abbondate uso delle risorse RAM e di calcolo del sistema.
3382 Non a caso su macchine embedded dalle prestazioni molto
3383 ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3384 massimo le risorse di sistema per gestire il traffico di
3385 una rete 10/100, mentre il lavoro tipico svolto da
3386 netfilter e' quasi irrilevante.</p>
3389 <div class="section" id="progettazione-di-un-firewall">
3390 <h2><a class="toc-backref" href=
3391 "#id72">7.3 Progettazione di un
3394 <p>Per implementare un firewall bisogna decidere un aio di
3395 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3396 al filtraggio, il tipo di hardware.</p>
3398 <div class="section" id="collocazione">
3399 <h3><a class="toc-backref" href=
3400 "#id73">7.3.1 Collocazione</a></h3>
3402 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3403 della rete, decidere se diversi reparti di una azienda si
3404 possano vedere tra loro e in che misura.</p>
3406 <p>Collocazione:</p>
3409 <ol class="arabic simple">
3412 <li>tra router e servers / LAN</li>
3414 <li>Unico server / router / firewall e connessi
3415 rischi. considerare l'acquisto di un router hardware
3420 <dl class="docutils">
3421 <dt>Layeed security:</dt>
3423 <dd>Implementare piu' device / software sui diversi
3424 livelli: <a class="reference external" href=
3425 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3426 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3430 <div class="section" id="policy-di-default">
3431 <h3><a class="toc-backref" href=
3432 "#id74">7.3.2 Policy di default</a></h3>
3434 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3438 <div class="section" id="hardware">
3439 <h3><a class="toc-backref" href=
3440 "#id75">7.3.3 Hardware</a></h3>
3442 <p>Sostanzialmente potremmo distinquere due tipologie di
3445 <dl class="docutils">
3446 <dt>Network appliance dedicata::</dt>
3448 <dd>Un dispositivo hardware dedicato alla funzione di
3449 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3450 firewall economici altro non sono che Linux box molto
3453 <dt>Server / Personal computer:</dt>
3455 <dd>Un server sul quale viene fatto girare Netfilter ad
3456 uso del server stesso e della rete connessa.</dd>
3459 <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3460 flessibilita', strumenti di gestione, sicurezza,
3465 <div class="section" id=
3466 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3467 <h2><a class="toc-backref" href=
3468 "#id76">7.4 Percorso dei pacchetti tra
3469 tabelle e catene</a></h2>
3471 <p>link: <a class="reference external" href=
3472 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3473 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3476 <div class="section" id="concetti-di-base">
3477 <h2><a class="toc-backref" href=
3478 "#id77">7.5 Concetti di base</a></h2>
3480 <div class="section" id="tabelle-catene-regole">
3481 <h3><a class="toc-backref" href=
3482 "#id78">7.5.1 Tabelle, catene,
3485 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3488 <li>filter - Regola il firewalling: quali pacchetti
3489 accettare, quali bloccare</li>
3491 <li>nat - Regola le attività di natting</li>
3493 <li>mangle - Interviene sulla alterazione dei
3497 <p>Ogni tabella ha delle catene (chains) predefinite
3498 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3499 aggiunte catene custom. Ogni catena è composta da un
3500 elenco di regole (rules) che identificano pacchetti di
3501 rete secono criteri diversi (es: -p tcp --dport 80 -d
3502 10.0.0.45) Ogni regola termina con una indicazione
3503 (target) su cosa fare dei pacchetti identificati dalla
3504 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3507 <div class="section" id="match">
3508 <h3><a class="toc-backref" href=
3509 "#id79">7.5.2 Match</a></h3>
3511 <p>I Match di una regola (rule) servono a testare un
3512 pacchetto per valutare se corrisponda a certe
3513 caratteriscttiche. I match di possono servire a
3514 controllare se un pacchetto e' destinato a una porta
3515 particolare o utilizza un protocollo particolare.</p>
3517 <p>Alcuni esempi:</p>
3519 <dl class="docutils">
3520 <dt>-p [!] proto</dt>
3522 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3523 udp, gre, ah...)</dd>
3525 <dt>-s [!] address[/mask]</dt>
3527 <dd>Indirizzo IP sorgente (o network con maschera di
3530 <dt>-d [!] address[/mask]</dt>
3532 <dd>Indirizzo IP destinazione (o network)</dd>
3534 <dt>-i [!] interface[+]</dt>
3536 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3538 <dt>-o [!] interface[+]</dt>
3540 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3543 <table class="docutils option-list" frame="void" rules=
3545 <col class="option">
3546 <col class="description">
3548 <tbody valign="top">
3550 <td class="option-group"><kbd><span class=
3551 "option">-f</span></kbd></td>
3553 <td>Frammento di pacchetto</td>
3559 <div class="section" id="targets">
3560 <h3><a class="toc-backref" href=
3561 "#id80">7.5.3 Targets</a></h3>
3563 <p>Se un pacchetto soddisfa le condizioni del Match
3564 <em>salta</em> (jump) su uno dei target possibili, in
3565 caso contrario continua il suo percorso tra regole catene
3568 <p>Target principali:</p>
3570 <dl class="docutils">
3571 <dt><em>-j ACCEPT</em></dt>
3573 <dd>Il pachetto matchato viene accettato e procede
3574 verso la sua destinazione. Si usa per definire il
3575 traffico permesso.</dd>
3577 <dt><em>-j DROP</em></dt>
3579 <dd>Il pacchetto viene rifiutato e scartato, senza
3580 alcuna notifica al mittente. Si usa, in alternativa a
3581 REJECT, per bloccare traffico.</dd>
3583 <dt><em>-j REJECT</em></dt>
3585 <dd>Il pacchetto viene rifiutato. Al mittente viene
3586 mandato un pacchetto (configurabile) di notifica tipo
3587 ICMP port-unreachable (--reject-with
3588 icmp-port-unreachable)</dd>
3591 <table class="docutils option-list" frame="void" rules=
3593 <col class="option">
3594 <col class="description">
3596 <tbody valign="top">
3598 <td class="option-group"><kbd><span class=
3599 "option">-t <var>LOG</var></span></kbd></td>
3601 <td>Il pacchetto viene loggato via syslog e procede
3602 l'attraversamento della catena. Opzioni:
3603 (--log-level, --log-prefix, --log-tcp-sequence,
3604 --log-tcp-options, --log-ip-options)</td>
3608 <td class="option-group"><kbd><span class=
3609 "option">-j <var>DNAT</var></span></kbd></td>
3611 <td>Viene modificato l'IP di destinazione del
3612 pacchetto. Target disponibile solo in nat /
3613 PREROUTING e nat / OUTPUT. L'opzione
3614 --to-destination IP:porta definisce il nuovo IP di
3615 destinazione. Si usa tipicamente su network
3616 firewall che nattano server di una DMZ</td>
3620 <td class="option-group"><kbd><span class=
3621 "option">-j <var>SNAT</var></span></kbd></td>
3623 <td>Viene modificato l'IP sorgente. Solo in nat /
3624 POSTROUTING. Prevede l'opzione --to-source
3625 IP:porta. Si usa per permettere l'accesso a
3626 Internet da una rete locale con IP privati.</td>
3630 <td class="option-group"><kbd><span class=
3631 "option">-j <var>MASQUERADE</var></span></kbd></td>
3633 <td>Simile a SNAT, si applica quando i pacchetti
3634 escono da interfacce con IP dinamico (dialup, adsl,
3635 dhcp...). Si usa solo in nat / POSTROUTING e
3636 prevede l'opzione --to-ports porte.</td>
3640 <td class="option-group"><kbd><span class=
3641 "option">-j <var>REDIRECT</var></span></kbd></td>
3643 <td>Redirige il pacchetto ad una porta locale.
3644 Usabile solo in nat / PREROUTING e nat / OUTPUT è
3645 previsto per fare un transparent proxy (con proxy
3646 server in esecuzione sulla macchina con
3651 <td class="option-group"><kbd><span class=
3652 "option">-j <var>RETURN</var></span></kbd></td>
3654 <td>Interrompe l'attraversamento della catena. Se
3655 questa è una secondaria, il pacchetto torna ad
3656 attraversare la catena madre da punto in cui aveva
3657 fatto il salto nella secondaria. Se il RETURN è in
3658 una delle catene di default, il pacchetto
3659 interrompe l'attraversamento e segue la policy di
3664 <td class="option-group"><kbd><span class=
3665 "option">-j <var>TOS</var></span></kbd></td>
3667 <td>Usabile solo nella tabella mangle, permette di
3668 cambiare il TOS (Type Of Service) di un pacchetto
3669 con l'opzione --set-tos. Per un elenco dei
3670 parametri disponibili: iptables -j TOS -h</td>
3674 <td class="option-group"><kbd><span class=
3675 "option">-j <var>MIRROR</var></span></kbd></td>
3677 <td>Curioso e sperimentale, questo target invia un
3678 pacchetto speculare al mittente. In pratica è come
3679 se facesse da specchio per tutti i pacchetti
3680 ricevuti. Da usare con cautela, per evitare
3681 attacchi DOS indiretti.</td>
3688 <div class="section" id="tabella-filter">
3689 <h2><a class="toc-backref" href=
3690 "#id81">7.6 Tabella Filter</a></h2>
3692 <p>E' quella implicita e predefinita (-t filter) Riguarda
3693 le attività di filtraggio del traffico. Ha 3 catene
3694 di default: INPUT - Riguarda tutti i pacchetti destinati al
3695 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3696 i pacchetti che sono originati dal sistema e destinati ad
3697 uscire. FORWARD - Riguarda i pacchetti che attraversano il
3698 sistema, con IP sorgente e destinazione esterni.</p>
3700 <p>Esempio per permettere accesso alla porta 80 locale:
3701 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3702 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3705 <p>Esempio per permettere ad un pacchetto con IP sorgente
3706 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3707 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3711 <div class="section" id=
3712 "flush-automatico-per-macchine-remote">
3713 <h2><a class="toc-backref" href=
3714 "#id82">7.7 Flush automatico per macchine
3717 <p>Se state provando una configurazione del firewall per
3718 una macchina remota e' buona norma per evitare brutte
3719 figure attivare uno script che faccia il <em>flush</em>
3720 delle regole dopo qualche minuto. Potreste infatti
3721 inavvertitamente impostare una regola che vi impedisca di
3722 raggiungere la macchina remota, cosi' da non poter neanche
3723 eliminare quella regola e ripristinare la situazioe
3726 <p><em>Veramnete</em>, prima di lavorare sul firewall di
3727 una macchina remota inpostate almeno un <tt class=
3728 "docutils literal"><span class="pre">at</span> <span class=
3729 "pre">now</span> <span class="pre">+5</span> <span class=
3730 "pre">min</span></tt> o con un'oretta di margine per fare
3731 il <em>flush</em> delle regole (su tutte le tabelle):</p>
3732 <pre class="literal-block">
3734 at> /sbin/iptables -F
3739 <div class="section" id="gestione-regole-rules">
3740 <h2><a class="toc-backref" href=
3741 "#id83">7.8 Gestione regole
3744 <p>Il comando iptables viene usato per ogni attivitÃ
3745 di gestione e configurazione.</p>
3747 <p>Inserimento regole:</p>
3749 <dl class="docutils">
3750 <dt>iptables -A CATENA ...</dt>
3752 <dd>Aggiunge una regola alla fine della catena
3755 <dt>iptables -I CATENA [#] ...</dt>
3757 <dd>Inserisce alla riga # (default 1) una regola nella
3758 catena indicata</dd>
3760 <dt>iptables -N CATENA</dt>
3762 <dd>Crea una nuova catena custom</dd>
3764 <dt>iptables -P CATENA TARGET</dt>
3766 <dd>Imposta il target di default per la catena
3770 <p>Rimozione regole e azzeramenti:</p>
3772 <dl class="docutils">
3773 <dt>iptables -F [catena]</dt>
3775 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3777 <dt>iptables -X [catena]</dt>
3779 <dd>Ripulisce tutte le catene custom (o quella
3782 <dt>iptables -Z [catena]</dt>
3784 <dd>Azzera i contatori sulle catene</dd>
3786 <dt>iptables -D catena #</dt>
3788 <dd>Cancella la regola numero # dalla catena
3792 <p>Interrogazione:</p>
3794 <dl class="docutils">
3795 <dt>iptables -L</dt>
3797 <dd>Elenca le regole esistenti</dd>
3799 <dt>iptables -L -n -v</dt>
3801 <dd>Elenca, senza risolvere gli host, in modo verboso le
3802 regole esistenti</dd>
3806 <div class="section" id="salvataggio-regole">
3807 <h2><a class="toc-backref" href=
3808 "#id84">7.9 Salvataggio regole</a></h2>
3810 <p>Il comando <tt class="docutils literal"><span class=
3811 "pre">iptables</span></tt> serve per interagire con il
3812 framework <tt class="docutils literal"><span class=
3813 "pre">Netfilter</span></tt> ch gestisce il firewall di
3814 Linux al livello del kernel. Questo comporta, in modo
3815 analogo a quando avvene col comando <tt class=
3816 "docutils literal"><span class="pre">ifconfig</span></tt>,
3817 che i cambiameti impostati siano in <em>tempo reale,
3818 RAM</em>, non persistenti nel sistema: al boot sucessivo
3819 del sistema tutto tornera' alle impostazioni di base (in
3820 questo caso <em>nulle</em>, con policy di default settate
3821 su <tt class="docutils literal"><span class=
3822 "pre">ACCEPT</span></tt> per tutto).</p>
3824 <p>Le varie invocazioni di iptables potrebbero essere
3825 richiamate da degli scripts dedicati, ma fortunatamente e'
3826 stata predisposta una apposita utility per gestire questi
3827 scripts in modo da avere a disposizione un <em>formato
3828 standard</em> per il salvataggio e il ripristino delle
3829 regole del firewall.</p>
3831 <p>Altro problema: decidere quando attivare / disattivare
3832 queste regole. Utilizzare i <em>runlevels</em> non e' una
3833 soluzione adeguata: le regole del firewall sono legate
3834 all'attivita' delle schede di rete (e un host con diverse
3835 schede di rete puo' attivarle a secondo delle esigenze di
3836 routing, partenza di servizi es file_sharing per un
3837 back-up...): il sistema operativo Debian permette di legare
3838 l'esecuzione di comandi alla attivazione di una device di
3839 rete (<tt class="docutils literal"><span class=
3840 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
3841 "docutils literal"><span class="pre">post-up</span></tt>,
3842 utile per devices che richiedono un certo tempo per
3843 inizializzarsi: come un tunnel o una connessione punto a
3844 punto), prima della sua attivazione (<tt class=
3845 "docutils literal"><span class="pre">pre-up</span></tt>).
3846 Allo stesso modo sono disponibili eventi analoghi per
3847 accompagnare la disattivazione dei device di rete: si veda
3848 la pagina man di <tt class="docutils literal"><span class=
3849 "pre">interfaces</span></tt>.</p>
3851 <p>Nel nostro caso avremo per una possibile scheda
3852 <tt class="docutils literal"><span class=
3853 "pre">eth0</span></tt>:</p>
3855 <p><tt class="docutils literal"><span class=
3856 "pre">/etc/network/interfaces</span></tt></p>
3857 <pre class="literal-block">
3858 iface eth1 inet static
3859 up /sbin/iptables-restore /root/firewall/basic_fw
3860 # Seguno i soliti parametri della scheda di rete
3861 address 10.10.208.21
3864 <div class="section" id="iptables-save">
3865 <h3><a class="toc-backref" href=
3866 "#id85">7.9.1 Iptables-save</a></h3>
3868 <p>Per salvare le regole di iptables attualmente presenti
3869 nel kernel si usi il comando:</p>
3870 <pre class="literal-block">
3871 # iptables-save >> /root/firewall/basic_fw
3874 <p>Il contenuto del file dovrebbe essere
3875 <em>comprensibile</em>: sostanzialmente sono regole di
3876 iptables, senza il comando iptables ripetuto, suddivisi
3877 per le varie tabelle. Potete comunque correggere
3878 eventuali parametri con un edito di testo.</p>
3880 <p>Se non avete un'idea migliore potreste voler tenere
3881 gli script dei firewall in una cartella <tt class=
3882 "docutils literal"><span class=
3883 "pre">~/firewall</span></tt> nella home directory
3884 dell'utente <tt class="docutils literal"><span class=
3885 "pre">root</span></tt>.</p>
3888 <div class="section" id="iptables-restore">
3889 <h3><a class="toc-backref" href=
3890 "#id86">7.9.2 Iptables-restore</a></h3>
3892 <p>Per ripristinare un set di regole prcedentemente
3893 salvate con <tt class="docutils literal"><span class=
3894 "pre">iptables-save</span></tt> si utilizzi <tt class=
3895 "docutils literal"><span class=
3896 "pre">iptables-restore</span></tt>. Se questo deve essere
3897 fatto in modalita' <em>non interattiva</em>, ad esempio
3898 deve essere eseguito dal demone che si occupa di
3899 inizializzare le schede di rete, oppure un <em>cron</em>
3900 o altro, e' buona norma richiamare i percorsi completi
3901 sia dei comandi che dei file:</p>
3902 <pre class="literal-block">
3903 /sbin/iptables-restore /root/firewall/basic_fw
3909 <div class="section" id="note">
3910 <h1><a class="toc-backref" href=
3911 "#id87">8 NOTE</a></h1>
3914 <li>controllare apache</li>
3917 <p>sintassi: in <tt class="docutils literal"><span class=
3918 "pre">monospace</span></tt> :</p>
3921 <li>nomi di files</li>