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.5</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>
590 <li><a class="reference internal" href="#dnsmasq" id="id53"
591 name="id53">5 DNSmasq</a></li>
594 <a class="reference internal" href="#samba" id="id54"
595 name="id54">6 Samba</a>
597 <ul class="auto-toc">
598 <li><a class="reference internal" href="#pacchetti" id=
600 "id55">6.1 Pacchetti</a></li>
602 <li><a class="reference internal" href=
603 "#passwords-e-autenticazione" id="id56" name=
604 "id56">6.2 Passwords e
605 autenticazione</a></li>
607 <li><a class="reference internal" href=
608 "#creazione-utenti" id="id57" name=
609 "id57">6.3 Creazione Utenti</a></li>
612 <a class="reference internal" href=
613 "#creare-la-condivisione" id="id58" name=
614 "id58">6.4 Creare la
617 <ul class="auto-toc">
618 <li><a class="reference internal" href=
619 "#sicurezza-permessi-di-esecuzione-sul-server" id=
621 "id59">6.4.1 Sicurezza: permessi
622 di esecuzione sul server</a></li>
626 <li><a class="reference internal" href=
627 "#configurazione-dell-applicativo-samba-vero-e-proprio"
629 "id60">6.5 Configurazione
630 dell'applicativo Samba vero e proprio.</a></li>
632 <li><a class="reference internal" href=
633 "#testare-il-servizio" id="id61" name=
634 "id61">6.6 Testare il
640 <a class="reference internal" href="#firewall" id="id62"
641 name="id62">7 Firewall</a>
643 <ul class="auto-toc">
644 <li><a class="reference internal" href="#links" id=
645 "id63" name="id63">7.1 Links</a></li>
647 <li><a class="reference internal" href="#ipfilter" id=
649 "id64">7.2 Ipfilter</a></li>
652 <a class="reference internal" href=
653 "#progettazione-di-un-firewall" id="id65" name=
654 "id65">7.3 Progettazione di un
657 <ul class="auto-toc">
658 <li><a class="reference internal" href=
659 "#collocazione" id="id66" name=
660 "id66">7.3.1 Collocazione</a></li>
662 <li><a class="reference internal" href=
663 "#policy-di-default" id="id67" name=
664 "id67">7.3.2 Policy di
667 <li><a class="reference internal" href="#hardware"
669 "id68">7.3.3 Hardware</a></li>
673 <li><a class="reference internal" href=
674 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
675 "id69" name="id69">7.4 Percorso dei
676 pacchetti tra tabelle e catene</a></li>
679 <a class="reference internal" href=
680 "#concetti-di-base" id="id70" name=
681 "id70">7.5 Concetti di base</a>
683 <ul class="auto-toc">
684 <li><a class="reference internal" href=
685 "#tabelle-catene-regole" id="id71" name=
686 "id71">7.5.1 Tabelle, catene,
689 <li><a class="reference internal" href="#match" id=
691 "id72">7.5.2 Match</a></li>
693 <li><a class="reference internal" href="#targets"
695 "id73">7.5.3 Targets</a></li>
699 <li><a class="reference internal" href=
700 "#tabella-filter" id="id74" name=
701 "id74">7.6 Tabella Filter</a></li>
703 <li><a class="reference internal" href=
704 "#flush-automatico-per-macchine-remote" id="id75" name=
705 "id75">7.7 Flush automatico per
706 macchine remote</a></li>
708 <li><a class="reference internal" href=
709 "#gestione-regole-rules" id="id76" name=
710 "id76">7.8 Gestione regole
715 <li><a class="reference internal" href="#note" id="id77"
716 name="id77">8 NOTE</a></li>
720 <p>Generato con: <a class="reference external" href=
721 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
723 <div class="section" id="configurazione-sistema">
724 <h1><a class="toc-backref" href=
725 "#id6">1 Configurazione sistema</a></h1>
727 <div class="section" id="solo-per-uso-interno">
728 <h2><a class="toc-backref" href=
729 "#id7">1.1 Solo per uso interno</a></h2>
731 <p>Impostazioni di base per la configurazione del sistema
732 operativo e della rete nel laboratorio 208 facente parte
733 della rete piffa.net .</p>
735 <p>Qui riportati per comodita' degli studenti (e del
736 docente che non sara' <strong>mai piu'</strong> costretto a
737 ripeterli continuamente! ). Gli altri lettori potranno
738 tenerli presenti per cercare di comprendere gli esempi nel
739 testo. Ad esempio: quando leggerete <tt class=
740 "docutils literal"><span class=
741 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
742 del nostro <em>proxy http</em>, stara' quindi a voi
743 sostituire i dati con gli <em>ip</em> della vostra
747 <div class="section" id="rete">
748 <h2><a class="toc-backref" href=
749 "#id8">1.2 Rete</a></h2>
751 <p>Parametri della rete attualmente in uso:</p>
753 <table border="1" class="docutils">
761 <td colspan="2">Parametri della rete</td>
767 <td>10.10.208.0/24</td>
773 <td>255.255.255.0</td>
779 <td>10.10.208.255</td>
785 <td>10.10.208.254</td>
791 <td>10.10.208.250 persistente</td>
797 <td>10.10.208.254</td>
803 <td>10.10.208.250 persistente</td>
809 <td>10.10.208.254:3128</td>
814 <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
815 un DHCP, proxy http e mirror di Debian ( <a class=
816 "reference external" href=
817 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
818 Andrea non e' in aula (o ancora peggio non c'e' il suo
819 portatile Net) gli studenti dovranno darsi un indirizzo ip
820 manualmente e disabilitare il proxy (che pero' e
821 trasparente, quindi fate pure come se non ci fosse ;) .
822 Questo in attesa che si sappia se sara' nuovamente
823 utilizzabile il vecchio server Bender.</p>
826 <div class="section" id="bash-completion">
827 <h2><a class="toc-backref" href=
828 "#id9">1.3 Bash completion</a></h2>
830 <p>Il completamento automatico della shell (che si attiva
831 premendo il tasto tab una o due volte mentre si sta
832 scrivendo un termine) permette di comporre automaticamente
833 i nomi dei comandi e i percorsi dei file, sopratutto la
834 composizione automatica dei percorsi dei file e' di grande
837 <p>Bash_completion permette di integrare il completamento
838 automatico con i nomi dei pacchetti e oggetti dei comandi:
839 ad es. volendo digitare <tt class=
840 "docutils literal"><span class="pre">apt-get</span>
841 <span class="pre">inst[TAB]</span> <span class=
842 "pre">xtigh[TAB]</span></tt> ora verra' completatato
843 automaticamente sia la parola <tt class=
844 "docutils literal"><span class="pre">install</span></tt>
845 che il nome del pacchetto <tt class=
846 "docutils literal"><span class=
847 "pre">xtightvncviewer</span></tt>.</p>
849 <p>Abilitare /etc/bash_completion nel file <tt class=
850 "docutils literal"><span class=
851 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
852 proprio <tt class="docutils literal"><span class=
853 "pre">~/.bashrc</span></tt> (che sarebbe il file
854 <em>nascosto</em>, quindi con un punto all'inizio del nome
855 del file, di configurazione della shell bash per ogni
856 utente, presente nella propria <em>home
858 <pre class="literal-block">
859 echo ". /etc/bash_completion" >> ~/.bashrc
862 <p>Esempio di ~/.bahsrc</p>
863 <pre class="literal-block">
864 # ~/.bashrc: executed by bash(1) for non-login shells.
866 export PS1='\h:\w\$ '
869 # Decommentare le seguenti righr per abilitare la colorazione dei
871 export LS_OPTIONS='--color=auto'
873 alias ls='ls $LS_OPTIONS'
874 alias ll='ls $LS_OPTIONS -l'
875 alias l='ls $LS_OPTIONS -lA'
877 # Some more alias to avoid making mistakes:
882 # questo abilita bash completion
883 . /etc/bash_completion
886 <p>Il file <tt class="docutils literal"><span class=
887 "pre">/etc/bash_completion</span></tt> deve essere presente
888 nel sistema, in caso contrario installare il pacchetto:
889 <tt class="docutils literal"><span class=
890 "pre">bash-completion</span></tt>. Generalmente l'utente
891 <tt class="docutils literal"><span class=
892 "pre">root</span></tt> ha un file <tt class=
893 "docutils literal"><span class="pre">.bashrc</span></tt>
894 preimpostato analogo a quello citato sopra, a differenza
895 dei normali utenti di sistema.</p>
900 <li><a class="reference external" href=
901 "http://www.debian-administration.org/articles/316">An
902 introduction to bash completion</a></li>
904 <li><a class="reference external" href=
905 "http://www.caliban.org/bash/">Working more productively
906 with bash 2.x/3.x</a></li>
910 <div class="section" id="vim">
911 <h2><a class="toc-backref" href=
912 "#id10">1.4 Vim</a></h2>
914 <p>Vim e' l'editor di testo preferito dai sistemisti,
915 quindi sara' conveniente impostare fin da subito alcune
916 impostazioni per renderlo piu' comodo.</p>
918 <p>Assicurarsi che sia installata nel sistema la versione
919 completa dell'editor <tt class=
920 "docutils literal"><span class="pre">vim</span></tt>
921 nstallando il pacchetto vimi:</p>
922 <pre class="literal-block">
923 # apt-get install vim
925 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
927 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
928 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
929 " you can find below. If you wish to change any of those settings, you should
930 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
931 " everytime an upgrade of the vim packages is performed. It is recommended to
932 " make changes after sourcing debian.vim since it alters the value of the
933 " 'compatible' option.
935 " This line should not be removed as it ensures that various options are
936 " properly set to work with the Vim-related packages available in Debian.
939 " Uncomment the next line to make Vim more Vi-compatible
940 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
941 " options, so any other options should be set AFTER setting 'compatible'.
944 " Vim5 and later versions support syntax highlighting. Uncommenting the next
945 " line enables syntax highlighting by default.
948 " If using a dark background within the editing area and syntax highlighting
949 " turn on this option as well
952 " Uncomment the following to have Vim jump to the last position when
956 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
957 \| exe "normal! g'\"" | endif
960 " Uncomment the following to have Vim load indentation rules and plugins
961 " according to the detected filetype.
963 filetype plugin indent on
966 " The following are commented out as they cause vim to behave a lot
967 " differently from regular Vi. They are highly recommended though.
968 set showcmd " Show (partial) command in status line.
969 "set showmatch " Show matching brackets.
970 set ignorecase " Do case insensitive matching
971 "set smartcase " Do smart case matching
972 "set incsearch " Incremental search
973 set autowrite " Automatically save before commands like :next and :make
974 "set hidden " Hide buffers when they are abandoned
975 "set mouse=a " Enable mouse usage (all modes) in terminals
977 " Source a global configuration file if available
978 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
979 if filereadable("/etc/vim/vimrc.local")
980 source /etc/vim/vimrc.local
985 <div class="section" id="vnc">
986 <h2><a class="toc-backref" href=
987 "#id11">1.5 VNC</a></h2>
989 <p>I Virtual Network Computing (o VNC) sono software di
990 controllo remoto e servono per amministrare il proprio
991 computer a distanza o visuallizare la sessione di lavoro di
992 un altro computer sul proprio a scopo didattico.
993 Installando un server VNC sulla propria macchina ed
994 impostando una opportuna password si consente ai client VNC
995 di ricevere una immagine dello schermo ed eventualmente di
996 inviare input di tastiera e mouse al computer server
997 (durante le lezioni questo non e' possibile per gli
998 studenti, solo Andrea esegue i comandi). In pratica si può
999 gestire il computer server da un'altra postazione, come se
1000 fosse il proprio computer fisico.</p>
1002 <p>Scaricare il pacchetto <tt class=
1003 "docutils literal"><span class=
1004 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1005 "docutils literal"><span class="pre">guarda.sh</span></tt>
1006 in una posizione (collocazione nel <em>path</em> degli
1007 utenti, es <tt class="docutils literal"><span class=
1008 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1009 visualizzare l'attuale path ) comoda per gli utenti ( in
1010 genere <tt class="docutils literal"><span class=
1011 "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1014 <pre class="literal-block">
1017 wget http://debian.piffa.net/guarda.sh
1022 <p>Si noti che non e' possibile lanciare un applicativo sul
1023 server grafico di un utente da una shell in cui si sta
1024 lavorando come altro utente, anche se root. E' quindi
1025 necessario essere l'utente di sistema che si e' loggato
1026 inizialmente nella sessione grafica per poter lanciare lo
1027 script guarda.sh da una shell.</p>
1029 <p>Controllare con <tt class=
1030 "docutils literal"><span class="pre">whoami</span></tt> di
1031 essere l'utente normale (es <tt class=
1032 "docutils literal"><span class="pre">utente</span>
1033 <span class="pre">|</span> <span class=
1034 "pre">studente</span> <span class="pre">|</span>
1035 <span class="pre">proprio</span> <span class=
1036 "pre">nome</span></tt> ), in caso si sia assunta una altra
1037 <tt class="docutils literal"><span class=
1038 "pre">id</span></tt> si apra un altra shell o si esca da
1039 quella attuale con <tt class=
1040 "docutils literal"><span class="pre">exit</span></tt> .</p>
1043 <div class="section" id="lista-dei-pacchetti-di-base">
1044 <h2><a class="toc-backref" href=
1045 "#id12">1.6 Lista dei pacchetti di
1048 <p>I pacchetti installati generalmente <a class=
1049 "footnote-reference" href="#id2" id="id1" name=
1050 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1051 <pre class="literal-block">
1052 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1055 <table class="docutils footnote" frame="void" id="id2"
1062 <tbody valign="top">
1064 <td class="label"><a class="fn-backref" href=
1067 <td><tt class="docutils literal"><span class=
1068 "pre">kde-core</span></tt> e' piu' leggero del
1069 pacchetto <tt class="docutils literal"><span class=
1070 "pre">kde</span></tt>, esiste anche un equivalente
1071 <tt class="docutils literal"><span class=
1072 "pre">gnome-core</span> <span class=
1073 "pre">gnome</span></tt> e il log-in manager
1074 <tt class="docutils literal"><span class=
1075 "pre">gdm</span></tt> per il l'ambiente grafico
1082 <div class="section" id="apt-configurazione">
1083 <h2><a class="toc-backref" href=
1084 "#id13">1.7 Apt configurazione</a></h2>
1086 <p>Vediamo i due file principali di apt:</p>
1089 <li><tt class="docutils literal"><span class=
1090 "pre">/etc/apt/sources.list</span></tt></li>
1092 <li><tt class="docutils literal"><span class=
1093 "pre">/etc/apt/apt.conf</span></tt></li>
1096 <div class="section" id="sources-list">
1097 <h3><a class="toc-backref" href=
1098 "#id14">1.7.1 sources.list</a></h3>
1100 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1101 preleva i pacchetti da installare tramite <em>dpkg</em>,
1102 vengono quindi precisati i metodi (ad es. http / ftp /
1103 cdrom / file), la release che si vuole tracciare (es
1104 <tt class="docutils literal"><span class=
1105 "pre">stable,</span> <span class="pre">testing,</span>
1106 <span class="pre">unstable</span></tt> oppure i
1107 corrispondenti release name es: <tt class=
1108 "docutils literal"><span class="pre">Lenny,</span>
1109 <span class="pre">Squeeze,</span> <span class=
1110 "pre">Sid</span></tt>), i rami di interesse (es:
1111 <tt class="docutils literal"><span class=
1112 "pre">main</span></tt> che e' l'archivio principale,
1113 <tt class="docutils literal"><span class=
1114 "pre">non-free</span></tt> per il software non libero,
1115 <tt class="docutils literal"><span class=
1116 "pre">contrib</span></tt> per i pacchetti non realizzati
1117 dai manutentori ufficiali).</p>
1119 <p>Gli archivi sono generalmente:</p>
1122 <li><tt class="docutils literal"><span class=
1123 "pre">deb</span></tt> per pacchetti Debian binari</li>
1125 <li><tt class="docutils literal"><span class=
1126 "pre">deb-src</span></tt> per i pacchetti sorgenti
1127 (quindi da compilare, come il kernel) degli stessi
1128 pacchetti binari. In genere se non compilate spesso
1129 potete evitare di tracciare i sorgenti per risparmiare
1133 <p><tt class="docutils literal"><span class=
1134 "pre">/etc/apt/sources.list</span></tt></p>
1135 <pre class="literal-block">
1136 # esempio di accesso a un CDROM:
1137 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1139 # Archivio principale debian via http su piffa.net,
1140 # non funziona al difuori dell'aula dei corsi
1141 deb http://debian.piffa.net/debian/ Lenny main
1142 # deb http://debian.piffa.net/debian/ Lenny non-free contrib
1144 # Mirror da kernel.org da usare a casa:
1145 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1147 # Security dal sito principale
1148 deb http://security.debian.org/ Lenny/updates main
1149 deb-src http://security.debian.org/ Lenny/updates main
1151 # Debian volatile per le cose soggette a cambiamenti non legati
1152 # a dinamiche di sicurezza
1153 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1154 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1156 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1157 # deb file:/mnt/mirror Sid main non-free contrib
1161 <div class="section" id="etc-apt-apt-conf">
1162 <h3><a class="toc-backref" href=
1163 "#id15">1.7.2 /etc/apt/apt.conf</a></h3>
1165 <p>Questo file contiene le opzioni di apt, come ad
1166 esempio il proxy:</p>
1167 <pre class="literal-block">
1168 Acquire::http::Proxy "http://10.10.208.254:3128";
1171 <p>Si tenga conto che se si imposta un proxy per apt sul
1172 proprio portatile e tornati a casa propria si vuole
1173 scaricare nuovi pacchetti si dovra' disabilitare il
1179 <div class="section" id="squid">
1180 <h1><a class="toc-backref" href=
1181 "#id16">2 Squid</a></h1>
1183 <p>Squid e' un proxy cache http (ma anche FTP e https)
1184 robusto e strutturato, puo' essere usato sia in reti
1185 relativamente piccole grazie alla semplicita' di
1186 configurazione che in scenari piu' complessi grazie alla
1187 possibilita' di gestirne in modo granulare le risorse
1188 partendo dalle configurazioni piu' semplici per la semplice
1189 <em>condivisione della navigazione</em> internet, la gestione
1190 degli accessi, il filtraggio dei contenuti (Squid e' una
1191 applicazione che si muove nel 4' livello del modello TCP/IP a
1192 differenza di un <em>ipfilter</em> limitato al 2') nel l
1193 bilanciamento del carico tra piu' hosts.</p>
1195 <dl class="docutils">
1196 <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1198 <dd>nasconde i client http alla rete internet: risulta solo
1199 il server proxy nei log dei server web frequentati dagli
1200 utenti di Squid.</dd>
1203 <p>Cosa a volte sottovalutata, squid permette la navigazione
1204 web a una rete basata su <em>indirizzi ip privati</em> (es
1205 una 192.168.0.0/24). E se la rete privata deve <em>solo
1206 navigare</em> in internet, non serve un <em>NAT</em> od
1207 altro, basta il solo Squid. Per altro non servira' neanche un
1208 servizio DNS dato che <em>sara' il solo squid a risolvere i
1209 nomi di dominio</em> per i suoi client http.</p>
1211 <p>Squid ascolta di default sulla porta 3128, per impostare
1212 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1213 "docutils literal"><span class=
1214 "pre">/etc/apt/apt.conf</span></tt></p>
1215 <pre class="literal-block">
1216 Acquire::http::Proxy "10.10.208.254:3128";
1219 <p>Per installare Squid si usino i pacchetti:</p>
1220 <pre class="literal-block">
1224 <div class="section" id="configurazione-squid-conf">
1225 <h2><a class="toc-backref" href=
1226 "#id17">2.1 Configurazione:
1229 <p>Segue un estratto delle direttive principali viste in
1230 aula presenti nel file di configurazione <tt class=
1231 "docutils literal"><span class=
1232 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1234 <div class="section" id="cache-dir">
1235 <h3><a class="toc-backref" href=
1236 "#id18">2.1.1 Cache_dir</a></h3>
1238 <p>Cache dir serve per impostare dimensione e percorso
1239 della cache creata sul supporto di storaggio. Essendo la
1240 dimensione di default della cache pari a <tt class=
1241 "docutils literal"><span class="pre">~100</span>
1242 <span class="pre">MB</span></tt> e' altamente
1243 consigliabili aumentare questo parametro se si vuole
1244 poter utilizzare la funzione di <em>cache</em> http del
1247 <p>La dimensione ovviamente dipendera' dallo spazio
1248 disponibile, dimensioni tipiche e massime degli oggetti
1249 che si vuole tenere in cache (un solo file <em>.iso e'
1250 circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1251 <tt class="docutils literal"><span class="pre">150</span>
1252 <span class="pre">MB</span></tt>, un pacchetto debian
1253 circa <tt class="docutils literal"><span class=
1254 "pre">20</span> <span class="pre">MB</span></tt>), numero
1257 <p>Si presti poi attenzione alla natura dei dati che
1258 saranno salvati nella cache: sono tutti dati facilmenti
1259 sostituibili (gli originali sono <em>on-line</em>) la cui
1260 perdita non arreca danni permanenti. Questo rende la
1261 cache di Squid un possibile candidato ad un <em>RAID
1262 stripe</em> (livello 0), con vantaggi sia per le
1263 prestazioni (e la velocita' di navigazione e' uno dei
1264 motivi per cui si installa Squid) che per l'utilizzo
1265 estensivo dello spazio di storaggio. Questo fino al
1266 momento in cui per voi non sia piu' importante
1267 <em>garantire la disponibilita' del servizio</em> (se il
1268 RAID stripe dovesse rompersi gli utenti non potrebbero
1269 piu' navigare, cosa che per natura dello stripe e'
1270 maggiormente probabile rispetto ad un <em>mirror</em> o a
1271 un filesytem <em>normale</em>) con un RAID mirror o
1274 <p>Altra considerazione: i dati del proxy vengono slavati
1275 sul filesytem del server dietro richiesta di utenti
1276 esterni talvolta sconosciuti. Come per i servizi di file
1277 sharing o per la posta elettronica non c'e' motivo che il
1278 filesystem su cui sono ospitati questi dati abbia i
1279 privilegi di eseguibilita' o suid (in genere si puo'
1280 anche usare <em>noatime</em> per renderlo piu' veloce,
1281 che si usi o meno il journal dipende dalle preferenze:
1282 affidabilita' oppure prestazioni):</p>
1285 <pre class="literal-block">
1287 # Filesystem per Squid http cache
1288 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1291 <p>Ora possiamo impostare la cache direttamente nel file
1292 <tt class="docutils literal"><span class=
1293 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1294 <pre class="literal-block">
1295 #TAG: cache_dir (riga 1628)
1298 # cache_dir Type Directory-Name Fs-specific-data [options]
1300 # You can specify multiple cache_dir lines to spread the
1301 # cache among different disk partitions.
1304 # cache_dir ufs /var/spool/squid3 100 16 256
1305 cache_dir aufs /var/spool/squid3 300 24 256
1309 # directory primo livello
1310 # secondo livello di directory
1313 <p>Se si modifica la struttura del filesytem della cache
1314 di Squid, ad esempio variando il numero delle directory,
1315 puo' essere opportuno rigenerare la struttura della cache
1316 di squid (per lo meno se si <em>aumenta il numero delle
1317 directory di primo o secondo livello). Tipicamente e'
1318 opportuno cancellare (se si ha *ridotto</em> il numero
1319 delle diectory) la vecchia cache e poi generare una nuova
1320 struttura. Se si vuole <em>star nel sicuro</em> ogni
1321 volta che si modifica l'impostazione delle directory
1322 <em>si svuoti la vecchia cache e se ne generi una
1324 <pre class="literal-block">
1325 # /etc/init.d/squid3 stop
1326 # rm -r /var/spool/squid3/??
1328 # /etc/init.d/squid3 start
1332 <div class="section" id="tag-maximum-object-size">
1333 <h3><a class="toc-backref" href=
1334 "#id19">2.1.2 TAG:
1335 maximum_object_size</a></h3>
1337 <p>Questa direttiva imposta la dimensione massima degli
1338 oggetti che vengono slvati sul supporto di storaggio,
1339 oggetti di dimensioni superiori saranno comunque
1340 scaricati ma non tenuti in cache.</p>
1342 <p>TAG: maximum_object_size (1760):</p>
1343 <pre class="literal-block">
1344 # TAG: maximum_object_size (1760)
1345 # Objects larger than this size will NOT be saved on disk. The
1346 # value is specified in kilobytes, and the default is 4MB. If
1347 # you wish to get a high BYTES hit ratio, you should probably
1348 # increase this (one 32 MB object hit counts for 3200 10KB
1349 # hits). If you wish to increase speed more than your want to
1350 # save bandwidth you should leave this low.
1352 # NOTE: if using the LFUDA replacement policy you should increase
1353 # this value to maximize the byte hit rate improvement of LFUDA!
1354 # See replacement_policy below for a discussion of this policy.
1357 # maximum_object_size 4096 KB
1358 maximum_object_size 150 MB
1362 <div class="section" id="tag-cache-mem">
1363 <h3><a class="toc-backref" href=
1364 "#id20">2.1.3 TAG: cache_mem</a></h3>
1366 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1367 utilizzata per la cache di Squid. Questo dipendera' dalla
1368 RAM disponibile sul sistema, e da quanta di questa volete
1369 mettere a disposizione di Squid (altri servizi
1370 iimportanti girano sulla stessa macchina?). Questo
1371 paramentro influisce sulle prestazioni e sul degrado dei
1372 supporti di storaggio (sopratutto se magnetici).</p>
1374 <p>Se si stesse pensando di usare dell'hardware
1375 <em>embedded</em> a basse prestazioni / consumo per
1376 realizzare un server gateway / NAT / Squid si tenga
1377 presente che Squid e' relativamente esoso di risorse:
1378 avra' bisogno di una macchina con <tt class=
1379 "docutils literal"><span class="pre">~25MB</span></tt>
1380 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1381 servire decorosamente una decina di client http su una
1382 rete ethernet 10/100. In questo caso non fate scendere
1383 <tt class="docutils literal"><span class=
1384 "pre">cache_mem</span></tt> sotto i <tt class=
1385 "docutils literal"><span class="pre">2/4</span>
1386 <span class="pre">MB</span></tt> pena un accesso continuo
1387 al supporto di storaggio.</p>
1389 <p>Se invece si disponesse di una macchina dedicata a
1390 Squid con gigabytes di RAM non si esiti a dedicarne buona
1391 parte a <em>cache_mem</em>.</p>
1393 <p>TAG: cache_mem (1566):</p>
1394 <pre class="literal-block">
1395 # 'cache_mem' specifies the ideal amount of memory to be used
1397 # * In-Transit objects
1399 # * Negative-Cached objects
1406 <div class="section" id="tag-minimum-object-size">
1407 <h3><a class="toc-backref" href=
1408 "#id21">2.1.4 TAG:
1409 minimum_object_size</a></h3>
1411 <p>Questo parametro imposta la dimensione minima degli
1412 oggetti salvati nella cache. Settato a <tt class=
1413 "docutils literal"><span class="pre">0</span></tt> o a
1414 valori molto piccoli puo' influire negativamente sulla
1415 deframmentazione del filesytem e consumare un numero
1416 elevato di <em>inode</em> (cosa non piu' importante con
1417 ext4 o altri filesytem).</p>
1419 <p>TAG: minimum_object_size:</p>
1420 <pre class="literal-block">
1421 # TAG: minimum_object_size (bytes)
1422 # Objects smaller than this size will NOT be saved on disk. The
1423 # value is specified in kilobytes, and the default is 0 KB, which
1424 # means there is no minimum.
1427 # minimum_object_size 0 KB
1428 minimum_object_size 0 KB
1433 <div class="section" id=
1434 "negoziazione-degli-accesi-al-servizio">
1435 <h2><a class="toc-backref" href=
1436 "#id22">2.2 Negoziazione degli accesi al
1439 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1440 <em>open relay</em> , si deve quindi limitare la rete che
1441 puo' accedere al servizio.</p>
1443 <dl class="docutils">
1444 <dt>Open Relay:</dt>
1446 <dd>Un servizio a cui possono accedere tutti
1447 indiscriminatamente. La cosa puo' andare bene per servizi
1448 come i server web, che aspirano per loro natura al
1449 maggior numero possibile di utenti, ma non a servizi come
1450 i proxy http oppure ai server di posta elettronica (che
1451 permetterebbero l'invio di SPAM).</dd>
1454 <p>Generalmente non volete che il vostro proxy http venga
1455 usato da persone sconosciute le quali sostanzialmente
1456 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1457 (probabilmente per visionare materiali che non vorrebbero
1458 fossero ricondotti direttamente a loro, per motivi che sta
1459 a voi prendere in considerazione) consumando traffico e
1460 banda della vostra connessione a internet. Tenere Squid in
1461 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1462 modo per essere inseriti in una <em>black list</em>.</p>
1464 <p>Per poter limitare gli accessi a Squid dal punto di
1465 vista dell'applicazione (quarto livello TCP/IP) si
1466 identifichera' inizialmente l'entita' <em>rete locale</em>
1467 (es: <tt class="docutils literal"><span class=
1468 "pre">localnet</span></tt>) con una ACL di tipo
1469 <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1470 / range di ip</em> della nostra rete.</p>
1473 Dopodiche l'accesso (<tt class=
1474 "docutils literal"><span class=
1475 "pre">http_access</span></tt>) si concedera'
1476 (<em>allow</em>) a questa entita' (es: <tt class=
1477 "docutils literal"><span class=
1478 "pre">localnet</span></tt>) negando chiunque altro.
1481 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1482 esprimere i range di ip: <a class="reference external"
1483 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1484 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1486 <div class="section" id="acl-e-http-access">
1487 <h3><a class="toc-backref" href=
1488 "#id23">2.2.1 ACL e http access</a></h3>
1490 <p>Si proceda a creare una <tt class=
1491 "docutils literal"><span class="pre">ACL</span></tt> di
1492 tipo <tt class="docutils literal"><span class=
1493 "pre">src</span></tt> per identificare la lostra rete
1494 locale, poi si abiliti l'accesso a questa con la
1495 direttiva <tt class="docutils literal"><span class=
1496 "pre">http_access</span></tt>. Tutto quanto non e'
1497 espressamente autorizzato viene poi negato da un
1498 <tt class="docutils literal"><span class=
1499 "pre">http_access</span> <span class="pre">deny</span>
1500 <span class="pre">all</span></tt> finale.</p>
1501 <pre class="literal-block">
1503 # Defining an Access List
1505 # Every access list definition must begin with an aclname and acltype,
1506 # followed by either type-specific arguments or a quoted filename that
1507 # they are read from.
1509 # ***** ACL TYPES AVAILABLE *****
1511 # acl aclname src ip-address/netmask ... # clients IP address
1514 # Example rule allowing access from your local networks.
1515 # Adapt to list your (internal) IP networks from where browsing
1517 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1518 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1519 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1521 acl localnet src 10.10.208.0/24
1525 # Allowing or Denying access based on defined access lists
1527 # Access to the HTTP port:
1528 # http_access allow|deny [!]aclname ...
1530 # NOTE on default values:
1532 # If there are no "access" lines present, the default is to deny
1536 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1538 # Example rule allowing access from your local networks.
1539 # Adapt localnet in the ACL section to list your (internal) IP networks
1540 # from where browsing should be allowed
1541 #http_access allow localnet
1542 http_access allow localnet
1547 <div class="section" id="testare-squid">
1548 <h2><a class="toc-backref" href=
1549 "#id24">2.3 Testare Squid</a></h2>
1551 <p>Configurato squid e' fondamentale testarne il corretto
1552 funzionamento per assicurarsi di non aver creato un
1553 <em>open-relay</em>. Per fare dei test significativi serve
1554 utilizzare degli host remoti: ci si connetta via ssh a
1555 questi per poi utilizzare <tt class=
1556 "docutils literal"><span class="pre">wget</span></tt> da
1557 riga di comando.</p>
1559 <div class="section" id="client-wgetrc">
1560 <h3><a class="toc-backref" href=
1561 "#id25">2.3.1 Client: ~/.wgetrc</a></h3>
1563 <p>Nel file <tt class="docutils literal"><span class=
1564 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1565 un file nascosto) si puo' impostare il proxy per wget. Si
1566 utililizzi l'indirizzo ip del server che si vuole
1567 testare, e si seguano i log <tt class=
1568 "docutils literal"><span class=
1569 "pre">/var/log/squid3/access.log</span></tt> sul
1572 <p>Da notare che la prova va' fatta su una macchina della
1573 rete che si vuole testare, non da <em>localhost</em>. Per
1574 altro se si utilizzasse <em>direttamente</em> <tt class=
1575 "docutils literal"><span class=
1576 "pre">localhost</span></tt> non si testerebbe la
1577 <em>ACL</em> predisposta, dato che si si rientrerebbe
1578 nella ACL (pre-configurata di default) <tt class=
1579 "docutils literal"><span class=
1580 "pre">localhost</span></tt>.</p>
1582 <dl class="docutils">
1585 <dd>http_proxy=10.10.208.178:3128</dd>
1588 <p>Si proceda a scaricare dal client scelto con un
1590 <pre class="literal-block">
1591 wget http://www.google.it
1595 <div class="section" id="server-access-log">
1596 <h3><a class="toc-backref" href=
1597 "#id26">2.3.2 Server:
1600 <p>Si puo' controllare il corretto funzionamento del
1601 server seguendo i log di accesso a Squid:</p>
1602 <pre class="literal-block">
1603 # tail -f /var/log/squid3/access.log
1606 <p>In oltre e' possibile configurare diversi
1607 <em>analizzatori di log</em> come <tt class=
1608 "docutils literal"><span class=
1609 "pre">Webalizer</span></tt> per studiare i log di
1615 <div class="section" id="apache">
1616 <h1><a class="toc-backref" href=
1617 "#id27">3 Apache</a></h1>
1619 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1620 dato alla piattaforma server Web modulare piu' diffusa (ma
1621 anche al gruppo di lavoro open source che ha creato,
1622 sviluppato e aggiornato il software server), in grado di
1623 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1625 <p>Un server web e' un processo, e per estensione il computer
1626 su cui e' in esecuzione, che si occupa di fornire, su
1627 richiesta del browser, una pagina web (spesso scritta in
1628 HTML). Le informazioni inviate dal server web viaggiano in
1629 rete trasportate dal protocollo HTTP. L'insieme di server web
1630 dà vita al World Wide Web, uno dei servizi piu'
1631 utilizzati di Internet.</p>
1633 <div class="section" id="pacchetti-da-installare">
1634 <h2><a class="toc-backref" href=
1635 "#id28">3.1 Pacchetti da
1636 installare::</a></h2>
1642 <p>Con la release 2.0 di Apache viene automaticamente resa
1643 disponibile anche la versione SSL (Secure Socket Layer,
1644 cpnnessioni criptate ) del web server.</p>
1647 <div class="section" id="configurazione-di-apache">
1648 <h2><a class="toc-backref" href=
1649 "#id29">3.2 Configurazione di
1652 <p>I file di configurazione di apache si trovano nella
1653 cartella: <tt class="docutils literal"><span class=
1654 "pre">/etc/apache2</span></tt> e sono strutturati come
1655 descritto nel file <tt class=
1656 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1657 . Sostanzialmente lo schema e' il seguente:</p>
1659 <dl class="docutils">
1660 <dt>apache2.conf</dt>
1663 <p class="first">File di configurazione principale del
1666 <p class="last">httpd.conf e' il vecchio file di
1667 configurazione di Apache1, presente per motivi di
1668 retrocompatibilita' e' generalemente vuoto.</p>
1673 <dd>In questo file vengono specificate le porte sulle
1674 quali resta in ascolto il server web. Si noti che
1675 utilizzando dei virtual hosts generalmente viene
1676 specificata per questi la porta su cui ascoltare nel file
1677 di configurazione del virtual host, ad es: <tt class=
1678 "docutils literal"><span class=
1679 "pre"><VirtualHost</span> <span class=
1680 "pre">*:80></span></tt></dd>
1682 <dt>sites-available</dt>
1684 <dd>In questa cartella vengono raccolti i file di
1685 configurazione dei virtual host disponibili.</dd>
1687 <dt>sites-enabled</dt>
1689 <dd>In questa cartella sono contenuti dei link simbolici
1690 ai files in ../sites-available : se il link e' presente
1691 in questa cartella il virtual host e' abilitato.</dd>
1693 <dt>mods-available</dt>
1695 <dd>Stesso metodo per i moduli: in questa cartella ci
1696 sono i moduli veri e propri che verranno poi abilitati
1697 grazie all'esistenza di link simbolici nella cartella
1700 <dt>mods-enabled</dt>
1702 <dd>Moduli abilitati, effettivamente caricati.</dd>
1706 <div class="section" id="apache-conf">
1707 <h2><a class="toc-backref" href=
1708 "#id30">3.3 apache.conf</a></h2>
1710 <p>File di configurazione del servizio Apache, contiene le
1711 impostazioni generiche (ad esempio utilizzo della RAM e
1712 risorse di sistema) dell'intero servizio. Nella
1713 configurazione di default per Debian non viene definito un
1714 vero e proprio sito di default ma solo dei virtual
1717 <p>Guardiamo alcune direttive interessanti:</p>
1719 <dl class="docutils">
1722 <dd>Numero di secondi da aspettare prima di chiudere la
1723 connessione con il client. Questo parametro serve a
1724 liberare le risorse di sistema nel caso che un client,
1725 magar a causa di una connessione particolarmente lenta o
1726 instabili, tenga attivo indefinitivamente un processo di
1731 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1732 alle connessioni persistenti (http 1.1) permettono al
1733 server di rispondere a piu' richieste dei client mediante
1734 la stessa connessione. Il protocoll http per sua natura
1735 e' senza stato (<em>statelessi</em> ), quindi ogni
1736 risorsa richiesta (per pagine web si pensi ad esempio
1737 alle immagini) dal client necessita di una connessione
1738 autonoma. Keep-alive permette di ottimizzare la
1739 connessione anche fino al 50% a seconda delle situazioni
1742 <dt>Server-Pool Size Regulation</dt>
1744 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1745 Tutti spiegati nel manuale di apache) servono per
1746 attribuire le risorse di sistema disponibili al server
1747 Apache. Tenere questi parametri bassi serve a limitare il
1748 rischio di Denial of Service per il server, nel caso
1749 offra altri servizi. I settagi di default sono come
1750 sempre abbastanza conservativi, se si conta di usare il
1751 proprio Apache per servire un sito web con molti
1752 visitatori sara' necessario aumentare sensibilmente le
1753 impostazioni di base.</dd>
1755 <dt>AccessFileName</dt>
1757 <dd>Il nome del file che viene onorato per modificare le
1758 impostazioni per una singola directory, legato alla
1759 direttiva AllowOverride .</dd>
1763 <div class="section" id="installazione-di-php">
1764 <h2><a class="toc-backref" href=
1765 "#id31">3.4 Installazione di PHP</a></h2>
1767 <p>Pacchetti da installare: <tt class=
1768 "docutils literal"><span class="pre">php5</span>
1769 <span class="pre">php-pear</span></tt></p>
1771 <div class="section" id="test-del-modulo-php">
1772 <h3><a class="toc-backref" href=
1773 "#id32">3.4.1 Test del modulo
1776 <p>Creare nella cartella <tt class=
1777 "docutils literal"><span class="pre">/var/www</span></tt>
1778 (o altra cartella visibile) un file con estensione *.php
1779 (es <tt class="docutils literal"><span class=
1780 "pre">/var/ww/info.php</span></tt> contenete codice php
1781 eseguibile dall'interprete, ad es:</p>
1782 <pre class="literal-block">
1783 <?php phpinfo() ; ?>
1786 <p>Questa funzione di php generera' la tipica pagina con
1787 le impostazioni attuali per PHP. Richiamando la pagina
1788 (es: <tt class="docutils literal"><span class=
1789 "pre">http://localhost/info.php</span></tt> ) verra
1790 generata dall'interprete PHP la pagina HTML e resa
1791 disponibile tramite Apache ai utclient HTTP, a prova del
1792 correto funzionamento del modulo di PHP e della sua
1793 integrazione con il serv web Apache. In caso contrario se
1794 il client http proporra di scaricare la pagina invece che
1795 visualizzarla nel browser: non funziona l'interprete di
1796 php o sono mal configurati i MIME-type. prima di tutto
1797 assicurarsi di aver fatoo ripartire Apache.</p>
1800 <div class="section" id=
1801 "installazione-del-supporto-per-mysql">
1802 <h3><a class="toc-backref" href=
1803 "#id33">3.4.2 Installazione del supporto
1806 <p>Installare i pacchetti:</p>
1807 <pre class="literal-block">
1808 php5-mysql phpmyadmin
1811 <p>Controllare tramite la pagina php.info che sia
1812 abilitato il supporto per Mysql (ripartito Apache,
1813 ricaricare la pagina e cercare con CTRL+f <tt class=
1814 "docutils literal"><span class=
1815 "pre">mysql</span></tt>).</p>
1818 <div class="section" id="phpmyadmin">
1819 <h3><a class="toc-backref" href=
1820 "#id34">3.4.3 phpmyadmin</a></h3>
1822 <p>L'interfaccia web Phpmyadmin non richede
1823 necessariamente la presenza di un database Mysql locale,
1824 puo' infatti essere utilizzata per gestire databases
1825 remoti (il suo file di configurazione: <tt class=
1826 "docutils literal"><span class=
1827 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1828 caso si voglia installare localmente Mysql si utilizzi il
1829 pacchetto <tt class="docutils literal"><span class=
1830 "pre">mysql-server</span></tt> .</p>
1832 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1833 <tt class="docutils literal"><span class=
1834 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1835 non fosse controllare che sia incluso il file <tt class=
1836 "docutils literal"><span class=
1837 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1838 <tt class="docutils literal"><span class=
1839 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1842 <div class="section" id=
1843 "installazione-del-supporto-per-postgresql">
1844 <h3><a class="toc-backref" href=
1845 "#id35">3.4.4 Installazione del supporto
1846 per Postgresql</a></h3>
1848 <p>Installare i pacchetti:</p>
1849 <pre class="literal-block">
1850 php5-pgsql phppgadmin
1853 <p>Controllare tramite la pagina php.info che sia
1854 abilitato il supporto per PostgreSQL (ripartito Apache,
1855 ricaricare la pagina e cercare con CTRL+f <tt class=
1856 "docutils literal"><span class=
1857 "pre">pgsql</span></tt>).</p>
1860 <div class="section" id="phppgadmin">
1861 <h3><a class="toc-backref" href=
1862 "#id36">3.4.5 phppgadmin</a></h3>
1864 <p>L'interfaccia web Phppgadmin per il database server
1865 PostgreSQL non richede necessariamente la presenza di un
1866 database locale, puo' infatti essere utilizzata per
1867 gestire databases remoti (il suo file di configurazione:
1868 <tt class="docutils literal"><span class=
1869 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1870 caso si voglia installare localmente Mysql si utilizzi il
1871 pacchetto <tt class="docutils literal"><span class=
1872 "pre">postgresql</span></tt> .</p>
1874 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1875 <tt class="docutils literal"><span class=
1876 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1877 non fosse controllare che sia incluso il file <tt class=
1878 "docutils literal"><span class=
1879 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1880 <tt class="docutils literal"><span class=
1881 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1885 <div class="section" id="virtual-hosts">
1886 <h2><a class="toc-backref" href=
1887 "#id37">3.5 Virtual hosts</a></h2>
1891 <li><a class="reference external" href=
1892 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1894 <li><a class="reference external" href=
1895 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1896 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1900 <p>I virtual host permettono di avere piu' siti internet
1901 disponibili tramite lo stesso server web, eventualmente
1902 mappati su un solo indirizzo ip. Sono generalemente di due
1907 <li>Basati su <em>indirizzi ip</em>. Se si ha la
1908 possibilita' di avere piu' indirizzi ip dedicati per i
1909 diversi siti che si vuole servire. ES: <tt class=
1910 "docutils literal"><span class=
1911 "pre"><VirtualHost</span> <span class=
1912 "pre">192.168.0.2:80></span></tt> . Soluzione
1913 dispendiosa, si tende ad usarla solo se servono
1914 certificati di sicurezza (SSL ) dedicati per ogni
1917 <li>Basati su <em>nomi di dominio</em> che puntano allo
1918 stesso ip. Soluzione piu' economica e diffusa che si
1919 basa sulle funzionalita' di http 1.1 .</li>
1923 <p>Prenderemo in esame la gestione di virtual hosts basati
1924 su nomi di dominio.</p>
1926 <div class="section" id="gestione-dns">
1927 <h3><a class="toc-backref" href=
1928 "#id38">3.5.1 Gestione DNS</a></h3>
1930 <p>Prima di tutto per poter impostare i virtual hosts
1931 dovete avere un server DNS che risolva i vostri nomi di
1932 dominio sull'indirizzo ip del server. Questo si puo'
1933 ottenere in vari modi, ad es:</p>
1936 <dl class="docutils">
1937 <dt><em>Bind</em> (DNS server)</dt>
1939 <dd>Impostare i campi A nelle proprie zone gestite
1940 dal server dns Bind. Ad es: <tt class=
1941 "docutils literal"><span class=
1942 "pre">papo</span>
1944 "pre">A</span>
1945 <span class="pre">212.22.136.248</span></tt></dd>
1947 <dt><em>Servizio DNS dinamico on line</em>.</dt>
1949 <dd>Utilizzare un servizio come ad es: <a class=
1950 "reference external" href=
1951 "https://www.dyndns.com/">https://www.dyndns.com/</a>
1952 per mappare nomi di dominio sul proprio indirizzo ip,
1953 comodo ad esempio se si dispone di un indirzzo ip
1954 pubblico (anche se dinamico) per la propria
1955 connessione ad internet.</dd>
1957 <dt><em>Dnsmasq</em> (DNS server)</dt>
1959 <dd>Utilizzabile a livello locale per fare dei test,
1960 utilizzando direttive come: <tt class=
1961 "docutils literal"><span class=
1962 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
1964 <dt><tt class="docutils literal"><span class=
1965 "pre">/etc/hosts</span></tt></dt>
1967 <dd>Per prove <em>strettamente a livello locale</em>
1968 potete impostare i nomi dei vostri virtual server nel
1969 file /etc/hosts .</dd>
1972 <pre class="literal-block">
1975 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
1976 ;; global options: printcmd
1978 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
1979 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
1981 ;; QUESTION SECTION:
1982 ;177.piffa.net. IN A
1985 177.piffa.net. 0 IN A 10.10.208.177
1987 ;; Query time: 12 msec
1988 ;; SERVER: 10.10.208.254#53(10.10.208.254)
1989 ;; WHEN: Wed May 6 12:27:08 2009
1990 ;; MSG SIZE rcvd: 47
1993 <p>La parte interessante e' <tt class=
1994 "docutils literal"><span class=
1995 "pre">177.piffa.net.</span>
1997 "pre">0</span>
1998 <span class="pre">IN</span>
2000 "pre">A</span>
2001 <span class="pre">10.10.208.177</span></tt> . Il nome di
2002 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2003 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2004 dovra' essere disponibile un virtual host che corrisponde
2005 al nome <tt class="docutils literal"><span class=
2006 "pre">177.piffa.net</span></tt> .</p>
2009 <div class="section" id="virtual-host">
2010 <h3><a class="toc-backref" href=
2011 "#id39">3.5.2 Virtual host</a></h3>
2013 <p>Esempio di Virtual host:</p>
2014 <pre class="literal-block">
2015 <VirtualHost *:80 >
2016 ServerName 177.piffa.net
2017 DocumentRoot /var/www/177.piffa.net/
2018 ServerAdmin webmaster@177.piffa.net
2019 </VirtualHost>
2022 <ol class="arabic simple">
2023 <li><tt class="docutils literal"><span class=
2024 "pre"><VirtualHost</span> <span class=
2025 "pre">\*:80</span> <span class="pre">></span></tt>
2026 La prima riga indica l'inizio della stanza relativa al
2027 nostro virtual host, che ascolotera' su qualunque
2028 indirizzo ip (nel caso il server abbia piu' indirizzi
2029 dai quali e' raggiungibile) sulla porta <tt class=
2030 "docutils literal"><span class=
2031 "pre">80</span></tt>.</li>
2033 <li><tt class="docutils literal"><span class=
2034 "pre">Server/name</span></tt> precisa quale sara' il
2035 nome di dominio a cui verra' associato questo sito
2036 rispetto ad altri eventualmenti presenti sullo stesso
2039 <li><tt class="docutils literal"><span class=
2040 "pre">DocumentRoot</span></tt> : il path della
2041 directory che contiene le pagine del sito.</li>
2043 <li><tt class="docutils literal"><span class=
2044 "pre">ServerAdmin</span></tt>: l'indirizzo del
2045 webmaster, in modo da poterlo contattare in caso di
2046 problemi col sito.</li>
2048 <li><tt class="docutils literal"><span class=
2049 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2050 chiusura della stanza di definizione del virtual
2054 <p>Quelle che abbiamo appena visto sono le direttive
2055 essenziali per definire un sito virtuale, potrebbe essere
2056 utile aggiungene altre:</p>
2060 <dl class="first docutils">
2061 <dt><tt class="docutils literal"><span class=
2062 "pre">ErrorLog</span> <span class=
2063 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2066 <p class="first last">Log degli errori separato
2067 dai restanti siti web ospitati dal server.</p>
2073 <dl class="first docutils">
2074 <dt><tt class="docutils literal"><span class=
2075 "pre">LogLevel</span> <span class=
2076 "pre">warn</span></tt></dt>
2079 <p class="first last">Livello di importanza degli
2080 eventi loggati= warning <em>attenzione</em> .</p>
2086 <dl class="first docutils">
2087 <dt><tt class="docutils literal"><span class=
2088 "pre">CustomLog</span> <span class=
2089 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2090 <span class="pre">combined</span></tt></dt>
2093 <p class="first last">Log di accesso separati
2094 dagli altri siti, utile anche qua per statistiche
2095 di accesso per il solo sito virtuale.</p>
2101 <p>Potrebbe essere utile modificare le impostazioni di
2102 una intera directory, ad esempio per abilitare
2103 l'<tt class="docutils literal"><span class=
2104 "pre">AuthConfig</span></tt>:</p>
2105 <pre class="literal-block">
2106 <Directory "/var/www/miosito.net/privata">
2107 AllowOverride AuthConfig
2108 Options ExecCGI Indexes MultiViews FollowSymLinks
2114 <p><tt class="docutils literal"><span class=
2115 "pre">AllowOverride</span> <span class=
2116 "pre">AuthConfig</span></tt> ora vale per l'intera
2117 directory, come le altre opzioni.</p>
2121 <div class="section" id="negoziazione-accessi">
2122 <h2><a class="toc-backref" href=
2123 "#id40">3.6 Negoziazione accessi</a></h2>
2125 <p>Tipicamente quando si installa un server web il proprio
2126 desiderio e' di dare accesso ai materiali disponibili al
2127 maggior numero di visitatori possibile. Talvolta pero' puo
2128 essere utile o necessario limitare gli accessi, ad esempio
2129 per escludere un <em>bot</em> indesiderato che scansiona
2130 ininterottamente le nostre pagine o per creare una <em>Area
2131 Riservata</em> i cui materiali non devono essere
2132 disponibile a tutti.</p>
2134 <div class="section" id="limiti-su-base-ip">
2135 <h3><a class="toc-backref" href=
2136 "#id41">3.6.1 Limiti su base ip</a></h3>
2138 <p>La forma piu' semplice di restrizine degli accessi e'
2139 su base degli indirizzi IP dei client: tipicamente i siti
2140 web sono settati per dare accesso a chiunque:</p>
2141 <pre class="literal-block">
2142 <VirtualHost *:80 >
2144 <Directory "/var/www/177.piffa.net">
2148 </VirtualHost>
2151 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2153 <pre class="literal-block">
2154 <VirtualHost *:80 >
2155 <Directory "/var/www/177.piffa.net">
2158 Deny from 192.168.0.1
2160 </VirtualHost>
2163 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2164 materiali dell'intero sito virtuale, oppure potremmo
2165 lavorare su una sola directory:</p>
2166 <pre class="literal-block">
2167 <Directory "/var/www/miosito.net/limitata">
2169 Allow from 192.168.0.0./24
2174 <p>In questo modo solo la classe IP <tt class=
2175 "docutils literal"><span class=
2176 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2177 directory <tt class="docutils literal"><span class=
2178 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2179 relativamente facile per un malintenzionato cambiare il
2180 propio indirizzo ip, oppure collegarsi da un altra zona.
2181 Meno facile e' accedere ad una classe privata trovandosi
2182 all'esterno di questa, ma e' comunque possibile mandare
2183 delle richieste <tt class="docutils literal"><span class=
2184 "pre">GET</span></tt> per cercare di mandare in Denial Of
2185 Service il webserver.</p>
2189 <div class="section" id="user-authentication">
2190 <h2><a class="toc-backref" href=
2191 "#id42">3.7 User Authentication</a></h2>
2193 <p>A volte conviene negoziare gli accessi ad un area di un
2194 sito tramite autenticazione basata sull'accopiata <em>nome
2195 utente / password</em>. Questo puo' venire utile per creare
2196 una area download <em>intranet</em>, alla quale possano
2197 accedere solo gli utenti previsti a prescindere dagli
2198 indirizzi IP dei loro client. Per quanto esistano soluzioni
2199 piu' granulari e sofisticate per ottenere questo,
2200 <em>mod-auth</em> puo'essere sufficente. E mod auth non
2201 richiede l'installazione di software aggiuntivi.</p>
2203 <p>link: <a class="reference external" href=
2204 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2206 <div class="section" id="definire-la-cartella">
2207 <h3><a class="toc-backref" href=
2208 "#id43">3.7.1 Definire la
2211 <p>Decidere quale sara' il <em>path</em> della cartella
2212 da sottoporre ad autentizazione:(e creiamo la
2216 <tt class="docutils literal"><span class=
2217 "pre">mkdir</span> <span class=
2218 "pre">/var/www/177.piffa.net/privata</span></tt>
2222 <div class="section" id=
2223 "creazione-del-database-delle-passwords">
2224 <h3><a class="toc-backref" href=
2225 "#id44">3.7.2 Creazione del database
2226 delle passwords</a></h3>
2228 <p>Un modo semplice per gestire una database di
2229 <em>user-id / passwords</em> e' utilizzare l'utility
2230 <tt class="docutils literal"><span class=
2231 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2232 in cui un <em>crypt</em> delle password viene associato
2235 <p>Si dovra' decidere dove tenere questo file, la cosa
2236 importante e' che non sia visibile nel sito web: non deve
2237 essere scaricabile dai visitatori. Deve essere cioe'
2238 all'esterno della <em>DocumentRoot</em>: un buon posto
2239 potrebbe essere la /home dell'utente.</p>
2241 <p>Creiamo (con il <em>flag</em> <tt class=
2242 "docutils literal"><span class="pre">-c</span></tt>) il
2243 file <tt class="docutils literal"><span class=
2244 "pre">/home/utente/passwords</span></tt> con l'utente
2245 <tt class="docutils literal"><span class=
2246 "pre">luca</span></tt>:</p>
2247 <pre class="literal-block">
2248 htpasswd -c /home/utente/passwords luca
2251 <p><tt class="docutils literal"><span class=
2252 "pre">htpasswd</span></tt> ci chedera' la password da
2253 associare all'utente <tt class=
2254 "docutils literal"><span class="pre">luca</span></tt>.
2255 Per sucessive modifiche della password o aggiunta di
2256 nuovi utenti non sara' necessario usare il flag
2257 <tt class="docutils literal"><span class=
2258 "pre">-c</span></tt>.</p>
2261 <div class="section" id="id3">
2262 <h3><a class="toc-backref" href=
2263 "#id45">3.7.3 Configurazione di
2266 <p>Ora possiamo passare alla configurazione vera e
2267 propria di Apache, ma con una novita': andremo a inserire
2268 la voce in un <tt class="docutils literal"><span class=
2269 "pre">.htaccess</span></tt> invece che modificare il file
2270 di impostazione del virtual-host.</p>
2272 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2273 puo' modificare l'impostazione del virtual host nel file
2274 <tt class="docutils literal"><span class=
2275 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2276 ma spesso il motivo per cui creiamo i virtual hosts e'
2277 ospitare i siti di altri utenti, che possono solo
2278 pubblicare (generalmente tramite <em>FTP</em>) i loro
2279 documenti nella loro <em>DocumentRoot</em>, senza poter
2280 quindi modificare in alcun modo la configurazione del
2283 <p>Dando agli utenti la possibilita' di modificare
2284 (<em>AllowOverride</em>) autonomamente alcuni parametri
2285 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2286 funzionamenteo del loro spazio web ci togliera'
2287 l'incombenza di dover intervenire suii vari virtual
2290 <p>Abilitiamo l'AllowOverride nel file di configurazione
2291 del virtual host per la sola directory <tt class=
2292 "docutils literal"><span class=
2293 "pre">privata</span></tt>:</p>
2294 <pre class="literal-block">
2295 <VirtualHost *:80 >
2296 ServerName 177.piffa.net
2297 DocumentRoot /var/www/177.piffa.net/
2298 ServerAdmin webmaster@177.piffa.net
2299 <Directory "/var/www/177.piffa.net/privata">
2300 AllowOverride AuthConfig
2302 </VirtualHost>
2305 <p>Per rendere il cambiamento effettivo sara' necessario
2306 fare un restart / reload di Apache.</p>
2308 <p>Ora sara' possibile, anche per l'utente di sistema,
2309 creare un fie <tt class="docutils literal"><span class=
2310 "pre">.htaccess</span></tt> che sara' onorato da
2313 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2314 <pre class="literal-block">
2315 # Questo file viene incluso
2316 # nella configurazione del sito web
2317 # Messaggio visualizzato al prompt per l'autenticazione
2318 AuthName "Area privata soggetta ad autentizazione"
2319 # tipo di autenticazione da usarsi
2321 # File generato precedentemente con htpasswd
2322 AuthUserFile /home/utente/passwords
2324 # Negoziazione degli accessi
2325 # valid users permette l'accesso agli utenti specificati
2326 # nel file generato da htpasswd
2330 <p>Si noti che non e' necessario fare ripartire Apache
2331 per onorare i cambiamenti (un utente non avrebbe la
2332 possibilita' di farlo!).</p>
2336 <div class="section" id="cavets">
2337 <h2><a class="toc-backref" href=
2338 "#id46">3.8 Cavets</a></h2>
2340 <p>Problemi di cache:</p>
2344 <li>Proxy: nei settaggi del browser specificare di non
2345 utilizzare un server proxy http per il sito web locale
2346 (o per gli altri che si stanno monitorando). Se si ha
2347 il controllo del proxy server: stopparlo, ricaricare la
2348 pagina (operazione che fallira'), far ripartire il
2349 proxy, ricaricare la pagina.</li>
2351 <li>Provare con un altro browser, o cercare di svuotare
2352 la cache chiudere/riaprire l'applicativo. Provare a
2353 fermare Apache, ricaricare la pagina (operazione che
2354 fallira'), far ripartire Apache, ricaricare la
2361 <div class="section" id="domain-name-system">
2362 <h1><a class="toc-backref" href=
2363 "#id47">4 Domain Name System</a></h1>
2365 <p>Domain Name System (spesso indicato con DNS) e' un
2366 servizio utilizzato per la risoluzione di nomi di host in
2367 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2368 un database distribuito, costituito dai server DNS.</p>
2370 <p>Il nome DNS denota anche il protocollo che regola il
2371 funzionamento del servizio, i programmi che lo implementano,
2372 i server su cui questi girano, l'insieme di questi server che
2373 cooperano per fornire il servizio.</p>
2375 <p>I nomi DNS, o "nomi di dominio", sono una delle
2376 caratteristiche piu' visibili di Internet.</p>
2378 <p>C'e' confusione in merito alla definizione dell'acronimo:
2379 la S spesso viene interpretata come service, ma la
2380 definizione corretta e' system.</p>
2382 <p>L'operazione di convertire un nome in un indirizzo e'
2383 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2384 detto risoluzione inversa.</p>
2386 <div class="section" id="nomi-di-dominio">
2387 <h2><a class="toc-backref" href=
2388 "#id48">4.1 Nomi di dominio</a></h2>
2390 <p>Un nome a dominio e' costituito da una serie di stringhe
2391 separate da punti, ad esempio it.wikipedia.org. A
2392 differenza degli indirizzi IP, dove la parte piu'
2393 importante del numero e' la prima partendo da sinistra, in
2394 un nome DNS la parte piu' importante e' la prima partendo
2395 da destra. Questa e' detta dominio di primo livello (o TLD,
2396 Top Level Domain), per esempio .org o .it.</p>
2398 <p>Un dominio di secondo livello consiste in due parti, per
2399 esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2400 specifica un'ulteriore suddivisione. Quando un dominio di
2401 secondo livello viene registrato all'assegnatario, questo
2402 e' autorizzato a usare i nomi di dominio relativi ai
2403 successivi livelli come it.wikipedia.org (dominio di terzo
2404 livello) e altri come some.other.stuff.wikipedia.org
2405 (dominio di quinto livello) e cosi' via.</p>
2408 <div class="section" id="tipologie-di-record">
2409 <h2><a class="toc-backref" href=
2410 "#id49">4.2 Tipologie di record</a></h2>
2412 <p>Ad un nome DNS possono corrispondere diversi tipi di
2413 informazioni. Per questo motivo, esistono diversi tipi di
2414 record DNS. Ogni voce del database DNS deve essere
2415 caratterizzata da un tipo. I principali tipi sono:</p>
2418 <li>Record A - Indica la corrispondenza tra un nome ed
2419 uno (o piu') indirizzi IP (per la precisione indirizzi
2420 IPv4, ovvero la versione attualmente in uso).</li>
2422 <li>Record MX - (Mail eXchange) indica a quali server
2423 debba essere inviata la posta elettronica per un certo
2426 <li>Record CNAME - Sono usati per creare un alias, ovvero
2427 per fare in modo che lo stesso calcolatore sia noto con
2428 piu' nomi. Uno degli utilizzi di questo tipo di record
2429 consiste nell'attribuire ad un host che offre piu'
2430 servizi un nome per ciascun servizio. In questo modo, i
2431 servizi possono poi essere spostati su altri host senza
2432 dover riconfigurare i client, ma modificando solo il
2435 <li>Record PTR - Il DNS viene utilizzato anche per
2436 realizzare la risoluzione inversa, ovvero per far
2437 corrispondere ad un indirizzo IP il corrispondente nome a
2438 dominio. Per questo si usano i record di tipo "PTR" (e
2439 una apposita zona dello spazio dei nomi
2442 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2444 <li>Record SRV - Identificano il server per un
2445 determinato servizio all'interno di un dominio. Possono
2446 essere considerati una generalizzazione dei record
2449 <li>Record TXT - Associano campi di testo arbitrari ad un
2450 dominio. Questi campi possono contenere una descrizione
2451 informativa oppure essere utilizzati per realizzare
2455 <p>Vi sono anche tipi di record "di servizio", necessari al
2456 funzionamento del database distribuito: * Record NS -
2457 Utilizzato per indicare quali siano i server DNS
2458 autoritativi per un certo dominio, ovvero per delegarne la
2459 gestione. * Record SOA - (Start of Authority) usato per la
2460 gestione delle zone DNS.</p>
2463 <div class="section" id="utilizzo">
2464 <h2><a class="toc-backref" href=
2465 "#id50">4.3 Utilizzo</a></h2>
2467 <p>I computer vengono identificati in rete grazie agli
2468 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2469 utenti come riferimento per i vari server. Ad esempio
2470 sarebbe scomodoriferirsi al motore di ricerca Goggle con
2471 uno dei suoi IP: <tt class="docutils literal"><span class=
2472 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2473 nome di dominio <em>www.google.com</em>:</p>
2474 <pre class="literal-block">
2475 ping -c 1 www.google.com
2476 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2480 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2481 <h2><a class="toc-backref" href=
2482 "#id51">4.4 Risoluzione dei nomi di
2485 <p>Ci sono vari strumenti per interrogare i server DNS e
2486 ottenere l'indirizzo IP associato al nome di dominio che ci
2488 <pre class="literal-block">
2489 $ host www.piffa.net
2490 www.piffa.net is an alias for piffa.net.
2491 piffa.net has address 65.98.21.97
2492 piffa.net mail is handled by 10 65.98.21.97
2495 $ nslookup www.piffa.net
2496 Server: 192.168.0.10
2497 Address: 192.168.0.10#53
2499 Non-authoritative answer:
2500 www.piffa.net canonical name = piffa.net.
2502 Address: 65.98.21.97
2507 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2508 ;; global options: +cmd
2510 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2511 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2513 ;; QUESTION SECTION:
2514 ;www.piffa.net. IN A
2517 www.piffa.net. 3489 IN CNAME piffa.net.
2518 piffa.net. 3489 IN A 65.98.21.97
2520 ;; AUTHORITY SECTION:
2521 piffa.net. 86289 IN NS ns2.mydomain.com.
2522 piffa.net. 86289 IN NS ns1.mydomain.com.
2523 piffa.net. 86289 IN NS ns4.mydomain.com.
2524 piffa.net. 86289 IN NS ns3.mydomain.com.
2526 ;; ADDITIONAL SECTION:
2527 ns1.mydomain.com. 96208 IN A 64.94.117.193
2528 ns2.mydomain.com. 96208 IN A 64.94.31.67
2529 ns3.mydomain.com. 96208 IN A 66.150.161.137
2530 ns4.mydomain.com. 96208 IN A 63.251.83.74
2532 ;; Query time: 1 msec
2533 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2534 ;; WHEN: Sun May 10 21:23:11 2009
2535 ;; MSG SIZE rcvd: 209
2538 <p>Lo strumento piu' esaustivo e' <tt class=
2539 "docutils literal"><span class="pre">dig</span></tt>,
2540 installabile con il pacchetto <tt class=
2541 "docutils literal"><span class="pre">dnsutils</span></tt>
2545 <div class="section" id="dig">
2546 <h2><a class="toc-backref" href=
2547 "#id52">4.5 Dig</a></h2>
2549 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2550 "docutils literal"><span class="pre">dig</span></tt> per
2551 l'inerrogazione dei DNS Server:</p>
2552 <pre class="literal-block">
2555 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2556 ;; global options: +cmd
2558 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2559 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2561 ;; QUESTION SECTION:
2562 ;www.google.it. IN A
2565 www.google.it. 250683 IN CNAME www.google.com.
2566 www.google.com. 334819 IN CNAME www.l.google.com.
2567 www.l.google.com. 186 IN A 74.125.43.103
2568 www.l.google.com. 186 IN A 74.125.43.104
2569 www.l.google.com. 186 IN A 74.125.43.147
2570 www.l.google.com. 186 IN A 74.125.43.99
2572 ;; AUTHORITY SECTION:
2573 l.google.com. 80856 IN NS f.l.google.com.
2574 l.google.com. 80856 IN NS d.l.google.com.
2575 l.google.com. 80856 IN NS b.l.google.com.
2576 l.google.com. 80856 IN NS c.l.google.com.
2577 l.google.com. 80856 IN NS a.l.google.com.
2578 l.google.com. 80856 IN NS e.l.google.com.
2579 l.google.com. 80856 IN NS g.l.google.com.
2581 ;; Query time: 1 msec
2582 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2583 ;; WHEN: Sun May 10 21:34:47 2009
2584 ;; MSG SIZE rcvd: 255
2587 <dl class="docutils">
2590 <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2591 <em>root servers</em> utilizzati. I root server sono i
2592 server che mantengono le informazioni sui domini di primo
2593 livello (TLD) e sono quindi il punto di partenza per
2594 scorrere nella directory dei DNS per recuperare le
2595 informazioni (tipicamente un campo <tt class=
2596 "docutils literal"><span class="pre">A</span></tt> per un
2597 indirizzo IP) che ci servono per raggiungere un certo
2606 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2607 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2608 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2609 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2610 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2611 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2612 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2613 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2614 J.ROOT-SERVERS.NET. . 192032 IN NS
2615 D.ROOT-SERVERS.NET.</p>
2622 <div class="section" id="dnsmasq">
2623 <h1><a class="toc-backref" href=
2624 "#id53">5 DNSmasq</a></h1>
2626 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2627 forwarder e un server DHCP caratterizzato dalla facilita' di
2628 configurazione, dalla leggerezza e dalla possibilita' di
2629 modificare rapidamente i record DNS serviti alla rete. Puo'
2630 essere anche utilizzato come <cite>server per il boot da rete
2631 <http://www.debian-administration.org/articles/478>_</cite>
2634 <p>Dnsmasq e' un interessante alternativa all'uso del server
2635 DNS Bind in modalita' cache-only (non autoritativo)
2636 accompagnato dal server DHCPD. I vantaggi sono:</p>
2639 <li>Leggerezza: puo' essere fatto girare su una macchina
2640 relativamente debole in caso di bisogno.</li>
2642 <li>Rapidita' di configurazione (in particolare per servire
2643 dei record A / MX alla rete, modificando al volo i valori
2644 originali ospitati sul server DNS Publico).</li>
2646 <li>Ben integrato con connssioni PPP (utile se dovete
2647 rendere disponibile rapidamente una connessione a internet
2648 a una rete in difficolta').</li>
2651 <p>Tutto cio' rende Dnsmasq una soluzione valida in
2652 particolare quando si deve intervenire in una rete
2653 pre-esistente in cui il server principale e' in crisi: si
2654 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2655 <em>mascherare</em> i servizi al momento non disponibili.
2656 Molto utile per scopi didattici, sopratutto per testare
2657 server SMTP impostando al volo i campi MX per nomi di dominio
2661 <div class="section" id="samba">
2662 <h1><a class="toc-backref" href=
2663 "#id54">6 Samba</a></h1>
2665 <p>Samba e' un progetto libero che fornisce servizi di
2666 condivisione di file e stampanti a client SMB/CIFS.</p>
2668 <p>Samba e' liberamente disponibile, al contrario di altre
2669 implementazioni SMB/CIFS, e permette di ottenere
2670 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
2672 <p>Samba e' un software che puo girare su piattaforme che non
2673 siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
2674 390, OpenVMS e altri sistemi operativi. Samba utilizza il
2675 protocollo TCP/IP utilizzando i servizi offerti sul server
2676 ospite. Quando correttamente configurato, permette di
2677 interagire con client o server Microsoft Windows come se
2678 fosse un file e print server Microsoft agendo da Primary
2679 Domain Controller (PDC) o come Backup Domain Controller, puo'
2680 inoltre prendere parte ad un dominio Active Directory.</p>
2682 <div class="section" id="pacchetti">
2683 <h2><a class="toc-backref" href=
2684 "#id55">6.1 Pacchetti</a></h2>
2686 <p>Pacchetti da installare per utilizzare Samba in
2687 modalita' client <a class="footnote-reference" href="#id5"
2688 id="id4" name="id4">[2]</a></p>
2689 <pre class="literal-block">
2693 <p>Pacchetti da installare per utilizzare Samba in
2694 modalita' server:</p>
2695 <pre class="literal-block">
2696 samba smbfs smbclient
2699 <table class="docutils footnote" frame="void" id="id5"
2706 <tbody valign="top">
2708 <td class="label"><a class="fn-backref" href=
2711 <td>Anche se nato per i sistemi Windows, Samba puo'
2712 essere usato anche per montare cartelle sotto
2713 GNU/Linux come alternativa a NFS. Per la condivisione
2714 di stampanti sarebbe invece opportuno intervenire
2715 direttamente su <tt class=
2716 "docutils literal"><span class=
2717 "pre">CUPS</span></tt>.</td>
2722 <p>Durante la prima installazione viene chiesto il nome del
2723 gruppo di appartenenza, il default per Windows e'
2724 <tt class="docutils literal"><span class=
2725 "pre">WORKGROUP</span></tt>. In aula usiamo invece
2726 <tt class="docutils literal"><span class=
2727 "pre">208</span></tt> .</p>
2729 <p>Per riconfigurare Samba si usi il comando:</p>
2730 <pre class="literal-block">
2731 dpkg-reconfigure samba-common
2735 <div class="section" id="passwords-e-autenticazione">
2736 <h2><a class="toc-backref" href=
2737 "#id56">6.2 Passwords e
2738 autenticazione</a></h2>
2740 <p>Per poter configurare Samba in modo che usi un sistema
2741 di negoziazione degli accessi alle cartelle condivise
2742 basato su accoppiate <em>nome utente / password</em>
2743 bisogna distinguere tra 3 livelli di password (e
2744 generalmente volete usare <em>sempre la stessa
2745 password</em> per ognuno di questi) e delle differenze tra
2746 le modalita' di <em>autenticazione</em> (e quindi anche di
2747 criptaggio delle passwords) usate da sistemi GNU/Linux e
2750 <dl class="docutils">
2751 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
2753 <dd>E' la password dell'<em>utente di sistema</em> che
2754 viene usata sul sistema operativo su cui gira il software
2755 Samba. E' importante tenere conto anche delle
2756 <em>user-id</em> e <em>group-id</em> degli utenti che
2757 dovranno fisicamente scrivere sui file system. Se un
2758 utente non puo' scrivere in una certa posizione del file
2759 system (ad esempio nella cartella <tt class=
2760 "docutils literal"><span class=
2761 "pre">/mnt/condivisione</span></tt> che sara' stata
2762 necessariamente creata inizialmente dall'utente
2763 <tt class="docutils literal"><span class=
2764 "pre">root</span></tt>) per mancanza dei privilegi di
2765 scrittura allora neanche Samba potra' farlo nel momento
2766 in mette a disposizione la risorsa all'utente. Se si
2767 montano file-system dedicati per le condivisioni
2768 controllare i permessi e propieta' dei <em>punti di
2769 mount*</em>. Queste passwords sono salvate nel solito
2770 file /etc/shadow (richiamato da /etc/passwd).</dd>
2772 <dt>2 Password per l'applicativo Samba</dt>
2774 <dd>Samba deve essere compatibile con Windows e quindi
2775 utilizzare un sistema di criptazione delle password
2776 diverso da /etc/shadow . Le password per Samba possono
2777 essere gestite ad esempio col comando <tt class=
2778 "docutils literal"><span class=
2779 "pre">smbpasswd</span></tt> e vengono generalmente
2780 salvate all'interno di <tt class=
2781 "docutils literal"><span class=
2782 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
2784 <dt>3 Password per Windows.</dt>
2786 <dd>Gli utenti Windows effettuano il log-in alla partenza
2787 della sessione di Windows. Se si avra' l'accortezza di
2788 usare sempre la <em>stessa password</em> data
2789 precedentemente anche a Windows (o viceversa impostare la
2790 password per GNU/Linux / Samba uguale a quella di
2791 Windows) l'utente potra' accedere automaticamente alle
2792 condivisioni a lui disponibili.</dd>
2796 <div class="section" id="creazione-utenti">
2797 <h2><a class="toc-backref" href=
2798 "#id57">6.3 Creazione Utenti</a></h2>
2800 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
2801 attenzione a <em>non dargli una shell di sistema</em>. Gli
2802 utenti Windows che accedono al server solo per le
2803 condivisioni non hanno bisogno di poter eseguire comandi
2806 <p>Creazione di un utente denominato sambo:</p>
2807 <pre class="literal-block">
2808 adduser --shell /bin/false sambo
2811 <p>Nel file <tt class="docutils literal"><span class=
2812 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
2813 <pre class="literal-block">
2814 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
2817 <p>Aggiunta dell'utente al database delle password per
2818 Samba e generazione della sua password:</p>
2819 <pre class="literal-block">
2823 <p>Se successivamente si vorra' modificare la password di
2824 un utente gia' esistente si usi:</p>
2825 <pre class="literal-block">
2829 <p>La password sotto Windows verra' modificata sul sistema
2833 <div class="section" id="creare-la-condivisione">
2834 <h2><a class="toc-backref" href=
2835 "#id58">6.4 Creare la
2836 condivisione</a></h2>
2838 <p>La condivisione altro non e' che una cartella sul server
2839 che viene resa disponibile ai client negoziando l'accesso
2840 in base a una autenticazione basata su <em>user-name /
2841 password</em>. E' per altro possibile permettere l'accesso
2842 a una risorsa a chiunque indiscriminatamente (a tutti i
2843 <tt class="docutils literal"><span class=
2844 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
2845 punto di vista della sicurezza. Si decida se la cartella
2846 condivisa debba risiedere nella <em>home</em> di un utente
2847 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
2848 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
2849 Nel secondo caso si potranno gestire gli accessi sotto
2850 GNU/Linux tramite i gruppi.</p>
2852 <p>Creazione della risorsa sambo_share nella home
2853 dell'utente sambo:</p>
2854 <pre class="literal-block">
2855 # mkdir /home/sambo/sambo_share
2856 # chown sambo:sambo /home/sambo/sambo_share/
2859 <div class="section" id=
2860 "sicurezza-permessi-di-esecuzione-sul-server">
2861 <h3><a class="toc-backref" href=
2862 "#id59">6.4.1 Sicurezza: permessi di
2863 esecuzione sul server</a></h3>
2865 <p>Bisognerebbe notare sul server i permessi di
2866 esecuzione del file-system che ospita la cartella da
2867 condividere. Se i file che saranno contenuti nella
2868 condivisione saranno da usarsi sotto Windows non c'e'
2869 motivo che questi siano eseguibili sotto GNU/Linux. Si
2870 potrebbe avere quindi, ipotizzando una condivisione in
2871 <tt class="docutils literal"><span class=
2872 "pre">/mnt/share</span></tt> che risieda su di un file
2873 system dedicato:</p>
2875 <p><tt class="docutils literal"><span class=
2876 "pre">/etc/fstab</span></tt></p>
2879 /dev/hda10 /mnt/share ext3 rw,
2880 <strong>nosuid,noexec</strong> 0 3
2883 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
2884 possibilita' di eseguire programmi con credenziali
2889 <div class="section" id=
2890 "configurazione-dell-applicativo-samba-vero-e-proprio">
2891 <h2><a class="toc-backref" href=
2892 "#id60">6.5 Configurazione
2893 dell'applicativo Samba vero e proprio.</a></h2>
2895 <p>Avendo preparato gli utenti (ancora una volta: non si
2896 dia una shell completa a un utente che serve solo per Samba
2897 o la posta elettronica) e la cartella sul file system si
2898 puo' procedere a configurare la condivisione su Samba.</p>
2900 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
2901 vim si usi 235gg ):</p>
2902 <pre class="literal-block">
2904 # Percorso della cartella condivisa
2905 path = /home/sambo/sambo_share
2906 # Se gli utenti possono scrivere / modificare file
2908 # Negoziazione degli accessi su base utenti / passwords
2911 # #######################################
2912 # Altri parametri opzionali di interesse
2913 # Se posso vedere la condivisione da esplora risorse
2914 # anche se non ho i privilegi per accedervi.
2916 # Commento indicativo della risorsa
2917 comment = Condivisione per Sambo
2920 <p>Dopo aver salvato il file si puo' fare un primo
2921 controllo tramite l'utility <tt class=
2922 "docutils literal"><span class="pre">testparm</span></tt> ,
2923 che controlla la sintassi del file di configurazione di
2924 Samba. Se questo non rileva problemi si puo' procedere a un
2925 <tt class="docutils literal"><span class="pre">#</span>
2926 <span class="pre">/etc/init.d/samba</span> <span class=
2927 "pre">restart</span></tt> .</p>
2930 <div class="section" id="testare-il-servizio">
2931 <h2><a class="toc-backref" href=
2932 "#id61">6.6 Testare il Servizio</a></h2>
2934 <p>Come testare il servizio</p>
2937 <pre class="literal-block">
2938 smbclient -U sambo -L localhost
2941 <p>Questo comando permette di esplorare la risorsa
2942 qualificandosi come utente, in questo modo potete testare
2943 il corretto funzionamento dell'autenticazione. Si provi
2944 inizialmente a sbagliare la password deliberatamente, poi a
2945 inserirla correttamente: dovrebbero essere visibili le
2946 risorse disponibili al solo utente sambo: la suo /home e la
2947 cartella samba_share:</p>
2948 <pre class="literal-block">
2949 Sharename Type Comment
2950 --------- ---- -------
2951 sambo_share Disk Condivisione per Sambo
2952 print$ Disk Printer Drivers
2953 IPC$ IPC IPC Service (base server)
2954 sambo Disk Home Directories
2957 <p>In particolare l'ultima voce relativa alla home
2958 directory dell'utente dovrebbe essere visibile solo agli
2959 utenti autenticati.</p>
2961 <p>In alternativa e' possibile montare realmente la
2962 condivisone anche su GNU/Linux tramite un client per samba
2963 e testarne il corretto funzionamento:</p>
2964 <pre class="literal-block">
2965 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
2970 <div class="section" id="firewall">
2971 <h1><a class="toc-backref" href=
2972 "#id62">7 Firewall</a></h1>
2974 <p>In Informatica, nell'ambito delle reti di computer, un
2975 firewall (termine inglese dal significato originario di
2976 parete refrattaria, muro tagliafuoco, muro ignifugo; in
2977 italiano anche parafuoco o parafiamma) e' un componente
2978 passivo di difesa perimetrale che può anche svolgere
2979 funzioni di collegamento tra due o piu' tronconi di rete.
2980 Usualmente la rete viene divisa in due sottoreti: una, detta
2981 esterna, comprende l'intera Internet mentre l'altra interna,
2982 detta LAN (Local Area Network), comprende una sezione piu' o
2983 meno grande di un insieme di computer locali. In alcuni casi
2984 e' possibile che si crei l'esigenza di creare una terza
2985 sottorete detta DMZ (o zona demilitarizzata) atta a contenere
2986 quei sistemi che devono essere isolati dalla rete interna ma
2987 devono comunque essere protetti dal firewall.</p>
2989 <p>Una prima definizione chiusa di firewall è la
2992 <p>Apparato di rete hardware o software che filtra tutti i
2993 pacchetti entranti ed uscenti, da e verso una rete o un
2994 computer, applicando regole che contribuiscono alla sicurezza
2997 <p>In realtà un firewall può essere realizzato con un
2998 normale computer (con almeno due schede di rete e software
2999 apposito), può essere una funzione inclusa in un router o
3000 può essere un apparato specializzato. Esistono inoltre i
3001 cosiddetti "firewall personali", che sono programmi
3002 installati sui normali calcolatori, che filtrano solamente i
3003 pacchetti che entrano ed escono da quel calcolatore; in tal
3004 caso viene utilizzata una sola scheda di rete.</p>
3006 <p>La funzionalità principale in sostanza è quella di
3007 creare un filtro sulle connessioni entranti ed uscenti, in
3008 questo modo il dispositivo innalza il livello di sicurezza
3009 della rete e permette sia agli utenti interni che a quelli
3010 esterni di operare nel massimo della sicurezza. Il firewall
3011 agisce sui pacchetti in transito da e per la zona interna
3012 potendo eseguire su di essi operazioni di: controllo modifica
3015 <p>Questo grazie alla sua capacità di "aprire" il
3016 pacchetto IP per leggere le informazioni presenti sul suo
3017 header, e in alcuni casi anche di effettuare verifiche sul
3018 contenuto del pacchetto.</p>
3020 <div class="section" id="links">
3021 <h2><a class="toc-backref" href=
3022 "#id63">7.1 Links</a></h2>
3025 <li><a class="reference external" href=
3026 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3028 <li><a class="reference external" href=
3029 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3030 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3034 <div class="section" id="ipfilter">
3035 <h2><a class="toc-backref" href=
3036 "#id64">7.2 Ipfilter</a></h2>
3038 <p>Link: <a class="reference external" href=
3039 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3040 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3042 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3043 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3044 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3045 etc) e del livello 1 (MAC source address). Iptables
3046 comunque permette di fare il <em>connection-tracking</em>,
3047 mediante il quale possiamo implementare il Network Address
3050 <p>Netfilter non ricostruisce il flusso di dati tra
3051 pacchetti, non puo' quindi rilevare la presenza di virus o
3052 simili che si trasmettono su pacchetti separati:
3053 ricomporre, analizzare e tornare a scomporre i frammenti
3054 rtichiederebbe troppa RAM e risorse di sistema, con il
3055 conseguente rischio di saturare il firewall fino
3056 all'abbandono dei nuovi pacchetti in transito. Ci sono
3057 altri software piu' adatti a questi compiti, ad esempio un
3058 proxy HTTP come Squid che e' appunto una applicazione di
3059 quarto livello, progettata e strutturata per analizzare e
3060 modificare i flussi di dati (il <em>contenuto</em> dei
3061 pacchetti, non le sole <em>inestazioni</em>) facendo
3062 abbondate uso delle risorse RAM e di calcolo del sistema.
3063 Non a caso su macchine embedded dalle prestazioni molto
3064 ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3065 massimo le risorse di sistema per gestire il traffico di
3066 una rete 10/100, mentre il lavoro tipico svolto da
3067 netfilter e' quasi irrilevante.</p>
3070 <div class="section" id="progettazione-di-un-firewall">
3071 <h2><a class="toc-backref" href=
3072 "#id65">7.3 Progettazione di un
3075 <p>Per implementare un firewall bisogna decidere un aio di
3076 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3077 al filtraggio, il tipo di hardware.</p>
3079 <div class="section" id="collocazione">
3080 <h3><a class="toc-backref" href=
3081 "#id66">7.3.1 Collocazione</a></h3>
3083 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3084 della rete, decidere se diversi reparti di una azienda si
3085 possano vedere tra loro e in che misura.</p>
3087 <p>Collocazione:</p>
3090 <ol class="arabic simple">
3093 <li>tra router e servers / LAN</li>
3095 <li>Unico server / router / firewall e connessi
3096 rischi. considerare l'acquisto di un router hardware
3101 <dl class="docutils">
3102 <dt>Layeed security:</dt>
3104 <dd>Implementare piu' device / software sui diversi
3105 livelli: <a class="reference external" href=
3106 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3107 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3111 <div class="section" id="policy-di-default">
3112 <h3><a class="toc-backref" href=
3113 "#id67">7.3.2 Policy di default</a></h3>
3115 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3119 <div class="section" id="hardware">
3120 <h3><a class="toc-backref" href=
3121 "#id68">7.3.3 Hardware</a></h3>
3123 <p>Sostanzialmente potremmo distinquere due tipologie di
3126 <dl class="docutils">
3127 <dt>Network appliance dedicata::</dt>
3129 <dd>Un dispositivo hardware dedicato alla funzione di
3130 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3131 firewall economici altro non sono che Linux box molto
3134 <dt>Server / Personal computer:</dt>
3136 <dd>Un server sul quale viene fatto girare Netfilter ad
3137 uso del server stesso e della rete connessa.</dd>
3140 <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3141 flessibilita', strumenti di gestione, sicurezza,
3146 <div class="section" id=
3147 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3148 <h2><a class="toc-backref" href=
3149 "#id69">7.4 Percorso dei pacchetti tra
3150 tabelle e catene</a></h2>
3152 <p>link: <a class="reference external" href=
3153 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3154 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3157 <div class="section" id="concetti-di-base">
3158 <h2><a class="toc-backref" href=
3159 "#id70">7.5 Concetti di base</a></h2>
3161 <div class="section" id="tabelle-catene-regole">
3162 <h3><a class="toc-backref" href=
3163 "#id71">7.5.1 Tabelle, catene,
3166 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3169 <li>filter - Regola il firewalling: quali pacchetti
3170 accettare, quali bloccare</li>
3172 <li>nat - Regola le attività di natting</li>
3174 <li>mangle - Interviene sulla alterazione dei
3178 <p>Ogni tabella ha delle catene (chains) predefinite
3179 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3180 aggiunte catene custom. Ogni catena è composta da un
3181 elenco di regole (rules) che identificano pacchetti di
3182 rete secono criteri diversi (es: -p tcp --dport 80 -d
3183 10.0.0.45) Ogni regola termina con una indicazione
3184 (target) su cosa fare dei pacchetti identificati dalla
3185 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3188 <div class="section" id="match">
3189 <h3><a class="toc-backref" href=
3190 "#id72">7.5.2 Match</a></h3>
3192 <p>I Match di una regola (rule) servono a testare un
3193 pacchetto per valutare se corrisponda a certe
3194 caratteriscttiche. I match di possono servire a
3195 controllare se un pacchetto e' destinato a una porta
3196 particolare o utilizza un protocollo particolare.</p>
3198 <p>Alcuni esempi:</p>
3200 <dl class="docutils">
3201 <dt>-p [!] proto</dt>
3203 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3204 udp, gre, ah...)</dd>
3206 <dt>-s [!] address[/mask]</dt>
3208 <dd>Indirizzo IP sorgente (o network con maschera di
3211 <dt>-d [!] address[/mask]</dt>
3213 <dd>Indirizzo IP destinazione (o network)</dd>
3215 <dt>-i [!] interface[+]</dt>
3217 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3219 <dt>-o [!] interface[+]</dt>
3221 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3224 <table class="docutils option-list" frame="void" rules=
3226 <col class="option">
3227 <col class="description">
3229 <tbody valign="top">
3231 <td class="option-group"><kbd><span class=
3232 "option">-f</span></kbd></td>
3234 <td>Frammento di pacchetto</td>
3240 <div class="section" id="targets">
3241 <h3><a class="toc-backref" href=
3242 "#id73">7.5.3 Targets</a></h3>
3244 <p>Se un pacchetto soddisfa le condizioni del Match
3245 <em>salta</em> (jump) su uno dei target possibili, in
3246 caso contrario continua il suo percorso tra regole catene
3249 <p>Target principali:</p>
3251 <dl class="docutils">
3252 <dt><em>-j ACCEPT</em></dt>
3254 <dd>Il pachetto matchato viene accettato e procede
3255 verso la sua destinazione. Si usa per definire il
3256 traffico permesso.</dd>
3258 <dt><em>-j DROP</em></dt>
3260 <dd>Il pacchetto viene rifiutato e scartato, senza
3261 alcuna notifica al mittente. Si usa, in alternativa a
3262 REJECT, per bloccare traffico.</dd>
3264 <dt><em>-j REJECT</em></dt>
3266 <dd>Il pacchetto viene rifiutato. Al mittente viene
3267 mandato un pacchetto (configurabile) di notifica tipo
3268 ICMP port-unreachable (--reject-with
3269 icmp-port-unreachable)</dd>
3272 <table class="docutils option-list" frame="void" rules=
3274 <col class="option">
3275 <col class="description">
3277 <tbody valign="top">
3279 <td class="option-group"><kbd><span class=
3280 "option">-t <var>LOG</var></span></kbd></td>
3282 <td>Il pacchetto viene loggato via syslog e procede
3283 l'attraversamento della catena. Opzioni:
3284 (--log-level, --log-prefix, --log-tcp-sequence,
3285 --log-tcp-options, --log-ip-options)</td>
3289 <td class="option-group"><kbd><span class=
3290 "option">-j <var>DNAT</var></span></kbd></td>
3292 <td>Viene modificato l'IP di destinazione del
3293 pacchetto. Target disponibile solo in nat /
3294 PREROUTING e nat / OUTPUT. L'opzione
3295 --to-destination IP:porta definisce il nuovo IP di
3296 destinazione. Si usa tipicamente su network
3297 firewall che nattano server di una DMZ</td>
3301 <td class="option-group"><kbd><span class=
3302 "option">-j <var>SNAT</var></span></kbd></td>
3304 <td>Viene modificato l'IP sorgente. Solo in nat /
3305 POSTROUTING. Prevede l'opzione --to-source
3306 IP:porta. Si usa per permettere l'accesso a
3307 Internet da una rete locale con IP privati.</td>
3311 <td class="option-group"><kbd><span class=
3312 "option">-j <var>MASQUERADE</var></span></kbd></td>
3314 <td>Simile a SNAT, si applica quando i pacchetti
3315 escono da interfacce con IP dinamico (dialup, adsl,
3316 dhcp...). Si usa solo in nat / POSTROUTING e
3317 prevede l'opzione --to-ports porte.</td>
3321 <td class="option-group"><kbd><span class=
3322 "option">-j <var>REDIRECT</var></span></kbd></td>
3324 <td>Redirige il pacchetto ad una porta locale.
3325 Usabile solo in nat / PREROUTING e nat / OUTPUT è
3326 previsto per fare un transparent proxy (con proxy
3327 server in esecuzione sulla macchina con
3332 <td class="option-group"><kbd><span class=
3333 "option">-j <var>RETURN</var></span></kbd></td>
3335 <td>Interrompe l'attraversamento della catena. Se
3336 questa è una secondaria, il pacchetto torna ad
3337 attraversare la catena madre da punto in cui aveva
3338 fatto il salto nella secondaria. Se il RETURN è in
3339 una delle catene di default, il pacchetto
3340 interrompe l'attraversamento e segue la policy di
3345 <td class="option-group"><kbd><span class=
3346 "option">-j <var>TOS</var></span></kbd></td>
3348 <td>Usabile solo nella tabella mangle, permette di
3349 cambiare il TOS (Type Of Service) di un pacchetto
3350 con l'opzione --set-tos. Per un elenco dei
3351 parametri disponibili: iptables -j TOS -h</td>
3355 <td class="option-group"><kbd><span class=
3356 "option">-j <var>MIRROR</var></span></kbd></td>
3358 <td>Curioso e sperimentale, questo target invia un
3359 pacchetto speculare al mittente. In pratica è come
3360 se facesse da specchio per tutti i pacchetti
3361 ricevuti. Da usare con cautela, per evitare
3362 attacchi DOS indiretti.</td>
3369 <div class="section" id="tabella-filter">
3370 <h2><a class="toc-backref" href=
3371 "#id74">7.6 Tabella Filter</a></h2>
3373 <p>E' quella implicita e predefinita (-t filter) Riguarda
3374 le attività di filtraggio del traffico. Ha 3 catene
3375 di default: INPUT - Riguarda tutti i pacchetti destinati al
3376 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3377 i pacchetti che sono originati dal sistema e destinati ad
3378 uscire. FORWARD - Riguarda i pacchetti che attraversano il
3379 sistema, con IP sorgente e destinazione esterni.</p>
3381 <p>Esempio per permettere accesso alla porta 80 locale:
3382 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3383 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3386 <p>Esempio per permettere ad un pacchetto con IP sorgente
3387 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3388 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3392 <div class="section" id=
3393 "flush-automatico-per-macchine-remote">
3394 <h2><a class="toc-backref" href=
3395 "#id75">7.7 Flush automatico per macchine
3398 <p>Se state provando una configurazione del firewall per
3399 una macchina remota e' buona norma per evitare brutte
3400 figure attivare uno script che faccia il <em>flush</em>
3401 delle regole dopo qualche minuto. Potreste infatti
3402 inavvertitamente impostare una regola che vi impedisca di
3403 raggiungere la macchina remota, cosi' da non poter neanche
3404 eliminare quella regola e ripristinare la situazioe
3407 <p><em>Veramnete</em>, prima di lavorare sul firewall di
3408 una macchina remota inpostate almeno un <tt class=
3409 "docutils literal"><span class="pre">at</span> <span class=
3410 "pre">now</span> <span class="pre">+5</span> <span class=
3411 "pre">min</span></tt> o con un'oretta di margine per fare
3412 il <em>flush</em> delle regole (su tutte le tabelle):</p>
3413 <pre class="literal-block">
3415 at> /sbin/iptables -F
3420 <div class="section" id="gestione-regole-rules">
3421 <h2><a class="toc-backref" href=
3422 "#id76">7.8 Gestione regole
3425 <p>Il comando iptables viene usato per ogni attivitÃ
3426 di gestione e configurazione.</p>
3428 <p>Inserimento regole:</p>
3430 <dl class="docutils">
3431 <dt>iptables -A CATENA ...</dt>
3433 <dd>Aggiunge una regola alla fine della catena
3436 <dt>iptables -I CATENA [#] ...</dt>
3438 <dd>Inserisce alla riga # (default 1) una regola nella
3439 catena indicata</dd>
3441 <dt>iptables -N CATENA</dt>
3443 <dd>Crea una nuova catena custom</dd>
3445 <dt>iptables -P CATENA TARGET</dt>
3447 <dd>Imposta il target di default per la catena
3451 <p>Rimozione regole e azzeramenti:</p>
3453 <dl class="docutils">
3454 <dt>iptables -F [catena]</dt>
3456 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3458 <dt>iptables -X [catena]</dt>
3460 <dd>Ripulisce tutte le catene custom (o quella
3463 <dt>iptables -Z [catena]</dt>
3465 <dd>Azzera i contatori sulle catene</dd>
3467 <dt>iptables -D catena #</dt>
3469 <dd>Cancella la regola numero # dalla catena
3473 <p>Interrogazione:</p>
3475 <dl class="docutils">
3476 <dt>iptables -L</dt>
3478 <dd>Elenca le regole esistenti</dd>
3480 <dt>iptables -L -n -v</dt>
3482 <dd>Elenca, senza risolvere gli host, in modo verboso le
3483 regole esistenti</dd>
3488 <div class="section" id="note">
3489 <h1><a class="toc-backref" href=
3490 "#id77">8 NOTE</a></h1>
3493 <li>controllare apache</li>
3496 <p>sintassi: in <tt class="docutils literal"><span class=
3497 "pre">monospace</span></tt> :</p>
3500 <li>nomi di files</li>