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">
20 Copyright: This stylesheet has been placed in the public domain - free to edit and use for all uses.
24 font: 100% sans-serif;
42 background-color: transparent;
46 text-decoration: none;
51 text-decoration: none;
52 background-color: transparent;
65 margin: 0.5em 0 1em 0;
71 background-color: transparent;
76 background-color: transparent;
80 text-decoration: none;
104 h1, h2, h3, h4, h5, h6 {
106 background-color: transparent;
113 margin-bottom: 0.5em;
114 border-bottom: 2px solid #aaa;
119 margin-bottom: 0.5em;
120 border-bottom: 1px solid #aaa;
125 margin-bottom: 0.5em;
131 margin-bottom: 0.5em;
137 margin-bottom: 0.5em;
143 margin-bottom: 0.5em;
151 margin-bottom: 1.5em;
154 div.admonition, div.note, div.tip, div.caution, div.important {
157 border-top: 1px solid #aaa;
158 border-left: 1px solid #aaa;
159 border-bottom: 2px solid #555;
160 border-right: 2px solid #555;
164 background: transparent url('../images/important.png') 10px 2px no-repeat;
168 background: transparent url('../images/caution.png') 10px 2px no-repeat;
172 background: transparent url('../images/note.png') 10px 2px no-repeat;
176 background: transparent url('../images/tip.png') 10px 2px no-repeat;
179 div.admonition-example {
180 background: transparent url('../images/tip.png') 10px 2px no-repeat;
183 div.admonition-critical-example {
184 background: transparent url('../images/important.png') 10px 2px no-repeat;
189 border-bottom: 1px solid #aaa;
195 border: 1px solid gray;
196 border-collapse: collapse;
201 table.docutils caption {
205 table.docutils td, table.docutils th {
206 padding: 0.25em 0.5em;
210 background-color: #dddddd;
218 border-top: 1px solid #aaa;
219 border-left: 1px solid #aaa;
220 border-bottom: 2px solid #555;
221 border-right: 2px solid #555;
227 border-bottom: 1px solid #aaa;
241 <div class="document" id="servizi-di-rete-passo-a-passo">
242 <h1 class="title">Servizi di rete passo a passo</h1>
244 <h2 class="subtitle" id=
245 "appunti-sulla-installazione-e-configurazione-dei-servizi">
246 Appunti sulla installazione e configurazione dei servizi</h2>
249 <table class="docutils field-list" frame="void" rules="none">
250 <col class="field-name">
251 <col class="field-body">
255 <th class="field-name">Author:</th>
257 <td class="field-body">Andrea Manni</td>
261 <th class="field-name">Copyright:</th>
263 <td class="field-body">GFDL</td>
267 <th class="field-name">Version:</th>
269 <td class="field-body">0.7</td>
275 <p>Questa guida e' dedicata agli studenti delle lezioni di
276 informatica tenute da Andrea nel lab208. Nella parte iniziale
277 sono presenti alcuni richiami alle impostazioni di rete e di
278 installazione del laboratorio 208 (lab208) dove generalmente si
279 tengono le lezioni. Questi parametri non sono interessanti per
280 chiunque si trovasse al di fuori della rete piffa.net .</p>
282 <div class="contents topic" id="indice-degli-argomenti">
283 <p class="topic-title first">Indice degli argomenti</p>
285 <ul class="auto-toc simple">
287 <a class="reference internal" href=
288 "#configurazione-sistema" id="id6" name=
289 "id6">1 Configurazione sistema</a>
291 <ul class="auto-toc">
292 <li><a class="reference internal" href=
293 "#solo-per-uso-interno" id="id7" name=
294 "id7">1.1 Solo per uso
298 <a class="reference internal" href="#rete" id="id8"
299 name="id8">1.2 Rete</a>
301 <ul class="auto-toc">
302 <li><a class="reference internal" href=
303 "#interfaces" id="id9" name=
304 "id9">1.2.1 interfaces</a></li>
308 <li><a class="reference internal" href=
309 "#bash-completion" id="id10" name=
310 "id10">1.3 Bash completion</a></li>
312 <li><a class="reference internal" href="#vim" id="id11"
313 name="id11">1.4 Vim</a></li>
315 <li><a class="reference internal" href="#vnc" id="id12"
316 name="id12">1.5 VNC</a></li>
318 <li><a class="reference internal" href=
319 "#lista-dei-pacchetti-di-base" id="id13" name=
320 "id13">1.6 Lista dei pacchetti di
324 <a class="reference internal" href=
325 "#apt-configurazione" id="id14" name=
326 "id14">1.7 Apt configurazione</a>
328 <ul class="auto-toc">
329 <li><a class="reference internal" href=
330 "#sources-list" id="id15" name=
331 "id15">1.7.1 sources.list</a></li>
333 <li><a class="reference internal" href=
334 "#etc-apt-apt-conf" id="id16" name=
335 "id16">1.7.2 /etc/apt/apt.conf</a></li>
342 <a class="reference internal" href="#squid" id="id17"
343 name="id17">2 Squid</a>
345 <ul class="auto-toc">
347 <a class="reference internal" href=
348 "#configurazione-squid-conf" id="id18" name=
349 "id18">2.1 Configurazione:
352 <ul class="auto-toc">
353 <li><a class="reference internal" href="#cache-dir"
355 "id19">2.1.1 Cache_dir</a></li>
357 <li><a class="reference internal" href=
358 "#tag-maximum-object-size" id="id20" name=
359 "id20">2.1.2 TAG:
360 maximum_object_size</a></li>
362 <li><a class="reference internal" href=
363 "#tag-cache-mem" id="id21" name=
364 "id21">2.1.3 TAG:
367 <li><a class="reference internal" href=
368 "#tag-minimum-object-size" id="id22" name=
369 "id22">2.1.4 TAG:
370 minimum_object_size</a></li>
375 <a class="reference internal" href=
376 "#negoziazione-degli-accesi-al-servizio" id="id23"
377 name="id23">2.2 Negoziazione degli
378 accesi al servizio</a>
380 <ul class="auto-toc">
381 <li><a class="reference internal" href=
382 "#acl-e-http-access" id="id24" name=
383 "id24">2.2.1 ACL e http
389 <a class="reference internal" href="#testare-squid"
390 id="id25" name="id25">2.3 Testare
393 <ul class="auto-toc">
394 <li><a class="reference internal" href=
395 "#client-wgetrc" id="id26" name=
396 "id26">2.3.1 Client:
399 <li><a class="reference internal" href=
400 "#server-access-log" id="id27" name=
401 "id27">2.3.2 Server:
409 <a class="reference internal" href="#apache" id="id28"
410 name="id28">3 Apache</a>
412 <ul class="auto-toc">
413 <li><a class="reference internal" href=
414 "#pacchetti-da-installare" id="id29" name=
415 "id29">3.1 Pacchetti da
416 installare::</a></li>
418 <li><a class="reference internal" href=
419 "#configurazione-di-apache" id="id30" name=
420 "id30">3.2 Configurazione di
423 <li><a class="reference internal" href="#apache-conf"
425 "id31">3.3 apache.conf</a></li>
428 <a class="reference internal" href=
429 "#installazione-di-php" id="id32" name=
430 "id32">3.4 Installazione di PHP</a>
432 <ul class="auto-toc">
433 <li><a class="reference internal" href=
434 "#test-del-modulo-php" id="id33" name=
435 "id33">3.4.1 Test del modulo
438 <li><a class="reference internal" href=
439 "#installazione-del-supporto-per-mysql" id="id34"
440 name="id34">3.4.2 Installazione
441 del supporto per Mysql</a></li>
443 <li><a class="reference internal" href=
444 "#phpmyadmin" id="id35" name=
445 "id35">3.4.3 phpmyadmin</a></li>
447 <li><a class="reference internal" href=
448 "#installazione-del-supporto-per-postgresql" id=
450 "id36">3.4.4 Installazione del
451 supporto per Postgresql</a></li>
453 <li><a class="reference internal" href=
454 "#phppgadmin" id="id37" name=
455 "id37">3.4.5 phppgadmin</a></li>
460 <a class="reference internal" href="#virtual-hosts"
461 id="id38" name="id38">3.5 Virtual
464 <ul class="auto-toc">
465 <li><a class="reference internal" href=
466 "#gestione-dns" id="id39" name=
467 "id39">3.5.1 Gestione DNS</a></li>
469 <li><a class="reference internal" href=
470 "#virtual-host" id="id40" name=
471 "id40">3.5.2 Virtual host</a></li>
476 <a class="reference internal" href=
477 "#negoziazione-accessi" id="id41" name=
478 "id41">3.6 Negoziazione accessi</a>
480 <ul class="auto-toc">
481 <li><a class="reference internal" href=
482 "#limiti-su-base-ip" id="id42" name=
483 "id42">3.6.1 Limiti su base
489 <a class="reference internal" href=
490 "#user-authentication" id="id43" name=
491 "id43">3.7 User Authentication</a>
493 <ul class="auto-toc">
494 <li><a class="reference internal" href=
495 "#definire-la-cartella" id="id44" name=
496 "id44">3.7.1 Definire la
499 <li><a class="reference internal" href=
500 "#creazione-del-database-delle-passwords" id="id45"
501 name="id45">3.7.2 Creazione del
502 database delle passwords</a></li>
504 <li><a class="reference internal" href="#id3" id=
506 "id46">3.7.3 Configurazione di
511 <li><a class="reference internal" href="#cavets" id=
512 "id47" name="id47">3.8 Cavets</a></li>
517 <a class="reference internal" href="#domain-name-system"
518 id="id48" name="id48">4 Domain Name
521 <ul class="auto-toc">
522 <li><a class="reference internal" href=
523 "#nomi-di-dominio" id="id49" name=
524 "id49">4.1 Nomi di dominio</a></li>
526 <li><a class="reference internal" href=
527 "#tipologie-di-record" id="id50" name=
528 "id50">4.2 Tipologie di
531 <li><a class="reference internal" href="#utilizzo" id=
533 "id51">4.3 Utilizzo</a></li>
535 <li><a class="reference internal" href=
536 "#risoluzione-dei-nomi-di-dominio" id="id52" name=
537 "id52">4.4 Risoluzione dei nomi di
540 <li><a class="reference internal" href="#dig" id="id53"
541 name="id53">4.5 Dig</a></li>
543 <li><a class="reference internal" href="#resolv-conf"
545 "id54">4.6 resolv.conf</a></li>
547 <li><a class="reference internal" href="#etc-hosts" id=
549 "id55">4.7 /etc/hosts</a></li>
551 <li><a class="reference internal" href="#hostname" id=
553 "id56">4.8 Hostname</a></li>
558 <a class="reference internal" href="#dnsmasq" id="id57"
559 name="id57">5 DNSmasq</a>
561 <ul class="auto-toc">
562 <li><a class="reference internal" href=
563 "#configurazione" id="id58" name=
564 "id58">5.1 Configurazione</a></li>
566 <li><a class="reference internal" href="#dhcp" id=
567 "id59" name="id59">5.2 DHCP</a></li>
569 <li><a class="reference internal" href="#dns-cache" id=
570 "id60" name="id60">5.3 DNS
573 <li><a class="reference internal" href="#dhcpd" id=
574 "id61" name="id61">5.4 DHCPd</a></li>
579 <a class="reference internal" href="#samba" id="id62"
580 name="id62">6 Samba</a>
582 <ul class="auto-toc">
583 <li><a class="reference internal" href="#pacchetti" id=
585 "id63">6.1 Pacchetti</a></li>
587 <li><a class="reference internal" href=
588 "#passwords-e-autenticazione" id="id64" name=
589 "id64">6.2 Passwords e
590 autenticazione</a></li>
592 <li><a class="reference internal" href=
593 "#creazione-utenti" id="id65" name=
594 "id65">6.3 Creazione Utenti</a></li>
597 <a class="reference internal" href=
598 "#creare-la-condivisione" id="id66" name=
599 "id66">6.4 Creare la
602 <ul class="auto-toc">
603 <li><a class="reference internal" href=
604 "#sicurezza-permessi-di-esecuzione-sul-server" id=
606 "id67">6.4.1 Sicurezza: permessi
607 di esecuzione sul server</a></li>
611 <li><a class="reference internal" href=
612 "#configurazione-dell-applicativo-samba-vero-e-proprio"
614 "id68">6.5 Configurazione
615 dell'applicativo Samba vero e proprio.</a></li>
617 <li><a class="reference internal" href=
618 "#testare-il-servizio" id="id69" name=
619 "id69">6.6 Testare il
625 <a class="reference internal" href=
626 "#server-di-posta-postfix" id="id70" name=
627 "id70">7 Server di posta: Postfix</a>
629 <ul class="auto-toc">
631 <a class="reference internal" href="#imap-e-pop" id=
632 "id71" name="id71">7.1 Imap e
635 <ul class="auto-toc">
636 <li><a class="reference internal" href=
637 "#web-client" id="id72" name=
638 "id72">7.1.1 Web client</a></li>
645 <a class="reference internal" href="#firewall" id="id73"
646 name="id73">8 Firewall</a>
648 <ul class="auto-toc">
649 <li><a class="reference internal" href="#links" id=
650 "id74" name="id74">8.1 Links</a></li>
652 <li><a class="reference internal" href="#ipfilter" id=
654 "id75">8.2 Ipfilter</a></li>
657 <a class="reference internal" href=
658 "#progettazione-di-un-firewall" id="id76" name=
659 "id76">8.3 Progettazione di un
662 <ul class="auto-toc">
663 <li><a class="reference internal" href=
664 "#collocazione" id="id77" name=
665 "id77">8.3.1 Collocazione</a></li>
667 <li><a class="reference internal" href=
668 "#policy-di-default" id="id78" name=
669 "id78">8.3.2 Policy di
672 <li><a class="reference internal" href="#hardware"
674 "id79">8.3.3 Hardware</a></li>
678 <li><a class="reference internal" href=
679 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
680 "id80" name="id80">8.4 Percorso dei
681 pacchetti tra tabelle e catene</a></li>
684 <a class="reference internal" href=
685 "#concetti-di-base" id="id81" name=
686 "id81">8.5 Concetti di base</a>
688 <ul class="auto-toc">
689 <li><a class="reference internal" href=
690 "#tabelle-catene-regole" id="id82" name=
691 "id82">8.5.1 Tabelle, catene,
694 <li><a class="reference internal" href="#match" id=
696 "id83">8.5.2 Match</a></li>
698 <li><a class="reference internal" href="#targets"
700 "id84">8.5.3 Targets</a></li>
704 <li><a class="reference internal" href=
705 "#tabella-filter" id="id85" name=
706 "id85">8.6 Tabella Filter</a></li>
708 <li><a class="reference internal" href=
709 "#flush-automatico-per-macchine-remote" id="id86" name=
710 "id86">8.7 Flush automatico per
711 macchine remote</a></li>
713 <li><a class="reference internal" href=
714 "#gestione-regole-rules" id="id87" name=
715 "id87">8.8 Gestione regole
719 <a class="reference internal" href=
720 "#salvataggio-regole" id="id88" name=
721 "id88">8.9 Salvataggio regole</a>
723 <ul class="auto-toc">
724 <li><a class="reference internal" href=
725 "#iptables-save" id="id89" name=
726 "id89">8.9.1 Iptables-save</a></li>
728 <li><a class="reference internal" href=
729 "#iptables-restore" id="id90" name=
730 "id90">8.9.2 Iptables-restore</a></li>
735 <a class="reference internal" href="#esempi" id=
736 "id91" name="id91">8.10 Esempi</a>
738 <ul class="auto-toc">
739 <li><a class="reference internal" href=
740 "#bloccare-i-ping-dall-esterno" id="id92" name=
741 "id92">8.10.1 Bloccare i ping
742 dall'esterno</a></li>
744 <li><a class="reference internal" href=
745 "#masquerading-snat" id="id93" name=
746 "id93">8.10.2 Masquerading
749 <li><a class="reference internal" href=
750 "#brute-force" id="id94" name=
751 "id94">8.10.3 Brute force</a></li>
757 <li><a class="reference internal" href="#note" id="id95"
758 name="id95">9 NOTE</a></li>
762 <p>Generato con: <a class="reference external" href=
763 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
765 <div class="section" id="configurazione-sistema">
766 <h1><a class="toc-backref" href=
767 "#id6">1 Configurazione sistema</a></h1>
769 <div class="section" id="solo-per-uso-interno">
770 <h2><a class="toc-backref" href=
771 "#id7">1.1 Solo per uso interno</a></h2>
773 <p>Impostazioni di base per la configurazione del sistema
774 operativo e della rete nel laboratorio 208 facente parte
775 della rete piffa.net .</p>
777 <p>Qui riportati per comodita' degli studenti (e del
778 docente che non sara' <strong>mai piu'</strong> costretto a
779 ripeterli continuamente! ). Gli altri lettori potranno
780 tenerli presenti per cercare di comprendere gli esempi nel
781 testo. Ad esempio: quando leggerete <tt class=
782 "docutils literal"><span class=
783 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
784 del nostro <em>proxy http</em>, stara' quindi a voi
785 sostituire i dati con gli <em>ip</em> della vostra
789 <div class="section" id="rete">
790 <h2><a class="toc-backref" href=
791 "#id8">1.2 Rete</a></h2>
793 <p>Parametri della rete attualmente in uso:</p>
795 <table border="1" class="docutils">
803 <td colspan="2">Parametri della rete</td>
809 <td>10.10.208.0/24</td>
815 <td>255.255.255.0</td>
821 <td>10.10.208.255</td>
827 <td>10.10.208.254</td>
833 <td>10.10.208.250 persistente</td>
839 <td>10.10.208.254</td>
845 <td>10.10.208.250 persistente</td>
851 <td>10.10.208.254:3128</td>
856 <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
857 un DHCP, proxy http e mirror di Debian ( <a class=
858 "reference external" href=
859 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
860 Andrea non e' in aula (o ancora peggio non c'e' il suo
861 portatile Net) gli studenti dovranno darsi un indirizzo ip
862 manualmente e disabilitare il proxy (che pero' e
863 trasparente, quindi fate pure come se non ci fosse ;) .
864 Questo in attesa che si sappia se sara' nuovamente
865 utilizzabile il vecchio server Bender.</p>
867 <div class="section" id="interfaces">
868 <h3><a class="toc-backref" href=
869 "#id9">1.2.1 interfaces</a></h3>
871 <p>Segue un esempio del file di configurazione della
872 scheda di rete con configurazione statica:</p>
874 <p>/etc/network/interfaces:</p>
875 <pre class="literal-block">
876 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
878 # The loopback interface
879 iface lo inet loopback
881 # La prima scheda di rete (se si chiama eth0)
882 # (network, broadcast and gateway sono optional)
883 iface etho inet static
885 # iface etho inet dhcp
886 address 10.10.208.101
887 netmask 255.255.255.0
889 broadcast 10.10.208.255
890 gateway 10.10.208.254
892 # Quali interfaccie devono partire automaticamente:
896 <p>Controllare il nome della propia scheda di rete: a
897 volte <em>udev</em> rinomina la prima scheda a <tt class=
898 "docutils literal"><span class="pre">eth1</span></tt>,
899 oppure potreste avere piu' di una scheda di rete (anche
900 un'interfaccia <em>firewire</em> puo' essere
901 automaticamente abilitata come scheda di rete).</p>
903 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
904 , eth0:1 , ...) ricordarsi che queste dipendono dalla
905 scheda fisica a cui sono associate: abbattere con
906 <tt class="docutils literal"><span class=
907 "pre">ifconfig</span> <span class="pre">down</span>
908 <span class="pre">eth0</span></tt> la scheda principale
909 fara' cadere anche queste. Tornando ad attivare la schda
910 principale con <tt class="docutils literal"><span class=
911 "pre">ifconfig</span> <span class="pre">eth0</span>
912 <span class="pre">up</span></tt> la virtuale tornera'
913 attiva: nel caso voleste disabilitarla dovrete quindi
914 sempre abbattere manualmente la scheda virtuale
915 <em>prima</em> della scheda reale.</p>
919 <div class="section" id="bash-completion">
920 <h2><a class="toc-backref" href=
921 "#id10">1.3 Bash completion</a></h2>
923 <p>Il completamento automatico della shell (che si attiva
924 premendo il tasto tab una o due volte mentre si sta
925 scrivendo un termine) permette di comporre automaticamente
926 i nomi dei comandi e i percorsi dei file, sopratutto la
927 composizione automatica dei percorsi dei file e' di grande
930 <p>Bash_completion permette di integrare il completamento
931 automatico con i nomi dei pacchetti e oggetti dei comandi:
932 ad es. volendo digitare <tt class=
933 "docutils literal"><span class="pre">apt-get</span>
934 <span class="pre">inst[TAB]</span> <span class=
935 "pre">xtigh[TAB]</span></tt> ora verra' completatato
936 automaticamente sia la parola <tt class=
937 "docutils literal"><span class="pre">install</span></tt>
938 che il nome del pacchetto <tt class=
939 "docutils literal"><span class=
940 "pre">xtightvncviewer</span></tt>.</p>
942 <p>Abilitare /etc/bash_completion nel file <tt class=
943 "docutils literal"><span class=
944 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
945 proprio <tt class="docutils literal"><span class=
946 "pre">~/.bashrc</span></tt> (che sarebbe il file
947 <em>nascosto</em>, quindi con un punto all'inizio del nome
948 del file, di configurazione della shell bash per ogni
949 utente, presente nella propria <em>home
951 <pre class="literal-block">
952 echo ". /etc/bash_completion" >> ~/.bashrc
955 <p>Esempio di ~/.bahsrc</p>
956 <pre class="literal-block">
957 # ~/.bashrc: executed by bash(1) for non-login shells.
959 export PS1='\h:\w\$ '
962 # Decommentare le seguenti righr per abilitare la colorazione dei
964 export LS_OPTIONS='--color=auto'
966 alias ls='ls $LS_OPTIONS'
967 alias ll='ls $LS_OPTIONS -l'
968 alias l='ls $LS_OPTIONS -lA'
970 # Some more alias to avoid making mistakes:
975 # questo abilita bash completion
976 . /etc/bash_completion
979 <p>Il file <tt class="docutils literal"><span class=
980 "pre">/etc/bash_completion</span></tt> deve essere presente
981 nel sistema, in caso contrario installare il pacchetto:
982 <tt class="docutils literal"><span class=
983 "pre">bash-completion</span></tt>. Generalmente l'utente
984 <tt class="docutils literal"><span class=
985 "pre">root</span></tt> ha un file <tt class=
986 "docutils literal"><span class="pre">.bashrc</span></tt>
987 preimpostato analogo a quello citato sopra, a differenza
988 dei normali utenti di sistema.</p>
993 <li><a class="reference external" href=
994 "http://www.debian-administration.org/articles/316">An
995 introduction to bash completion</a></li>
997 <li><a class="reference external" href=
998 "http://www.caliban.org/bash/">Working more productively
999 with bash 2.x/3.x</a></li>
1003 <div class="section" id="vim">
1004 <h2><a class="toc-backref" href=
1005 "#id11">1.4 Vim</a></h2>
1007 <p>Vim e' l'editor di testo preferito dai sistemisti,
1008 quindi sara' conveniente impostare fin da subito alcune
1009 impostazioni per renderlo piu' comodo.</p>
1011 <p>Assicurarsi che sia installata nel sistema la versione
1012 completa dell'editor <tt class=
1013 "docutils literal"><span class="pre">vim</span></tt>
1014 nstallando il pacchetto vimi:</p>
1015 <pre class="literal-block">
1016 # apt-get install vim
1018 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
1020 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1021 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1022 " you can find below. If you wish to change any of those settings, you should
1023 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1024 " everytime an upgrade of the vim packages is performed. It is recommended to
1025 " make changes after sourcing debian.vim since it alters the value of the
1026 " 'compatible' option.
1028 " This line should not be removed as it ensures that various options are
1029 " properly set to work with the Vim-related packages available in Debian.
1032 " Uncomment the next line to make Vim more Vi-compatible
1033 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1034 " options, so any other options should be set AFTER setting 'compatible'.
1037 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1038 " line enables syntax highlighting by default.
1041 " If using a dark background within the editing area and syntax highlighting
1042 " turn on this option as well
1045 " Uncomment the following to have Vim jump to the last position when
1049 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1050 \| exe "normal! g'\"" | endif
1053 " Uncomment the following to have Vim load indentation rules and plugins
1054 " according to the detected filetype.
1056 filetype plugin indent on
1059 " The following are commented out as they cause vim to behave a lot
1060 " differently from regular Vi. They are highly recommended though.
1061 set showcmd " Show (partial) command in status line.
1062 "set showmatch " Show matching brackets.
1063 set ignorecase " Do case insensitive matching
1064 "set smartcase " Do smart case matching
1065 "set incsearch " Incremental search
1066 set autowrite " Automatically save before commands like :next and :make
1067 "set hidden " Hide buffers when they are abandoned
1068 "set mouse=a " Enable mouse usage (all modes) in terminals
1070 " Source a global configuration file if available
1071 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1072 if filereadable("/etc/vim/vimrc.local")
1073 source /etc/vim/vimrc.local
1078 <div class="section" id="vnc">
1079 <h2><a class="toc-backref" href=
1080 "#id12">1.5 VNC</a></h2>
1082 <p>I Virtual Network Computing (o VNC) sono software di
1083 controllo remoto e servono per amministrare il proprio
1084 computer a distanza o visuallizare la sessione di lavoro di
1085 un altro computer sul proprio a scopo didattico.
1086 Installando un server VNC sulla propria macchina ed
1087 impostando una opportuna password si consente ai client VNC
1088 di ricevere una immagine dello schermo ed eventualmente di
1089 inviare input di tastiera e mouse al computer server
1090 (durante le lezioni questo non e' possibile per gli
1091 studenti, solo Andrea esegue i comandi). In pratica si può
1092 gestire il computer server da un'altra postazione, come se
1093 fosse il proprio computer fisico.</p>
1095 <p>Scaricare il pacchetto <tt class=
1096 "docutils literal"><span class=
1097 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1098 "docutils literal"><span class="pre">guarda.sh</span></tt>
1099 in una posizione (collocazione nel <em>path</em> degli
1100 utenti, es <tt class="docutils literal"><span class=
1101 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1102 visualizzare l'attuale path ) comoda per gli utenti ( in
1103 genere <tt class="docutils literal"><span class=
1104 "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1107 <pre class="literal-block">
1110 wget http://debian.piffa.net/guarda.sh
1115 <p>Si noti che non e' possibile lanciare un applicativo sul
1116 server grafico di un utente da una shell in cui si sta
1117 lavorando come altro utente, anche se root. E' quindi
1118 necessario essere l'utente di sistema che si e' loggato
1119 inizialmente nella sessione grafica per poter lanciare lo
1120 script guarda.sh da una shell.</p>
1122 <p>Controllare con <tt class=
1123 "docutils literal"><span class="pre">whoami</span></tt> di
1124 essere l'utente normale (es <tt class=
1125 "docutils literal"><span class="pre">utente</span>
1126 <span class="pre">|</span> <span class=
1127 "pre">studente</span> <span class="pre">|</span>
1128 <span class="pre">proprio</span> <span class=
1129 "pre">nome</span></tt> ), in caso si sia assunta una altra
1130 <tt class="docutils literal"><span class=
1131 "pre">id</span></tt> si apra un altra shell o si esca da
1132 quella attuale con <tt class=
1133 "docutils literal"><span class="pre">exit</span></tt> .</p>
1136 <div class="section" id="lista-dei-pacchetti-di-base">
1137 <h2><a class="toc-backref" href=
1138 "#id13">1.6 Lista dei pacchetti di
1141 <p>I pacchetti installati generalmente <a class=
1142 "footnote-reference" href="#id2" id="id1" name=
1143 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1144 <pre class="literal-block">
1145 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1148 <table class="docutils footnote" frame="void" id="id2"
1155 <tbody valign="top">
1157 <td class="label"><a class="fn-backref" href=
1160 <td><tt class="docutils literal"><span class=
1161 "pre">kde-core</span></tt> e' piu' leggero del
1162 pacchetto <tt class="docutils literal"><span class=
1163 "pre">kde</span></tt>, esiste anche un equivalente
1164 <tt class="docutils literal"><span class=
1165 "pre">gnome-core</span> <span class=
1166 "pre">gnome</span></tt> e il log-in manager
1167 <tt class="docutils literal"><span class=
1168 "pre">gdm</span></tt> per il l'ambiente grafico
1175 <div class="section" id="apt-configurazione">
1176 <h2><a class="toc-backref" href=
1177 "#id14">1.7 Apt configurazione</a></h2>
1179 <p>Vediamo i due file principali di apt:</p>
1182 <li><tt class="docutils literal"><span class=
1183 "pre">/etc/apt/sources.list</span></tt></li>
1185 <li><tt class="docutils literal"><span class=
1186 "pre">/etc/apt/apt.conf</span></tt></li>
1189 <div class="section" id="sources-list">
1190 <h3><a class="toc-backref" href=
1191 "#id15">1.7.1 sources.list</a></h3>
1193 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1194 preleva i pacchetti da installare tramite <em>dpkg</em>,
1195 vengono quindi precisati i metodi (ad es. http / ftp /
1196 cdrom / file), la release che si vuole tracciare (es
1197 <tt class="docutils literal"><span class=
1198 "pre">stable,</span> <span class="pre">testing,</span>
1199 <span class="pre">unstable</span></tt> oppure i
1200 corrispondenti release name es: <tt class=
1201 "docutils literal"><span class="pre">Lenny,</span>
1202 <span class="pre">Squeeze,</span> <span class=
1203 "pre">Sid</span></tt>), i rami di interesse (es:
1204 <tt class="docutils literal"><span class=
1205 "pre">main</span></tt> che e' l'archivio principale,
1206 <tt class="docutils literal"><span class=
1207 "pre">non-free</span></tt> per il software non libero,
1208 <tt class="docutils literal"><span class=
1209 "pre">contrib</span></tt> per i pacchetti non realizzati
1210 dai manutentori ufficiali).</p>
1212 <p>Gli archivi sono generalmente:</p>
1215 <li><tt class="docutils literal"><span class=
1216 "pre">deb</span></tt> per pacchetti Debian binari</li>
1218 <li><tt class="docutils literal"><span class=
1219 "pre">deb-src</span></tt> per i pacchetti sorgenti
1220 (quindi da compilare, come il kernel) degli stessi
1221 pacchetti binari. In genere se non compilate spesso
1222 potete evitare di tracciare i sorgenti per risparmiare
1226 <p><tt class="docutils literal"><span class=
1227 "pre">/etc/apt/sources.list</span></tt></p>
1228 <pre class="literal-block">
1229 # esempio di accesso a un CDROM:
1230 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1232 # Archivio principale debian via http su piffa.net,
1233 # non funziona al difuori dell'aula dei corsi
1234 deb http://debian.piffa.net/debian/ Lenny main
1235 # deb http://debian.piffa.net/debian/ Lenny non-free contrib
1237 # Mirror da kernel.org da usare a casa:
1238 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1240 # Security dal sito principale
1241 deb http://security.debian.org/ Lenny/updates main
1242 deb-src http://security.debian.org/ Lenny/updates main
1244 # Debian volatile per le cose soggette a cambiamenti non legati
1245 # a dinamiche di sicurezza
1246 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1247 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1249 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1250 # deb file:/mnt/mirror Sid main non-free contrib
1254 <div class="section" id="etc-apt-apt-conf">
1255 <h3><a class="toc-backref" href=
1256 "#id16">1.7.2 /etc/apt/apt.conf</a></h3>
1258 <p>Questo file contiene le opzioni di apt, come ad
1259 esempio il proxy:</p>
1260 <pre class="literal-block">
1261 Acquire::http::Proxy "http://10.10.208.254:3128";
1264 <p>Si tenga conto che se si imposta un proxy per apt sul
1265 proprio portatile e tornati a casa propria si vuole
1266 scaricare nuovi pacchetti si dovra' disabilitare il
1272 <div class="section" id="squid">
1273 <h1><a class="toc-backref" href=
1274 "#id17">2 Squid</a></h1>
1276 <p>Squid e' un proxy cache http (ma anche FTP e https)
1277 robusto e strutturato, puo' essere usato sia in reti
1278 relativamente piccole grazie alla semplicita' di
1279 configurazione che in scenari piu' complessi grazie alla
1280 possibilita' di gestirne in modo granulare le risorse
1281 partendo dalle configurazioni piu' semplici per la semplice
1282 <em>condivisione della navigazione</em> internet, la gestione
1283 degli accessi, il filtraggio dei contenuti (Squid e' una
1284 applicazione che si muove nel 4' livello del modello TCP/IP a
1285 differenza di un <em>ipfilter</em> limitato al 2') nel l
1286 bilanciamento del carico tra piu' hosts.</p>
1288 <dl class="docutils">
1289 <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1291 <dd>nasconde i client http alla rete internet: risulta solo
1292 il server proxy nei log dei server web frequentati dagli
1293 utenti di Squid.</dd>
1296 <p>Cosa a volte sottovalutata, squid permette la navigazione
1297 web a una rete basata su <em>indirizzi ip privati</em> (es
1298 una 192.168.0.0/24). E se la rete privata deve <em>solo
1299 navigare</em> in internet, non serve un <em>NAT</em> od
1300 altro, basta il solo Squid. Per altro non servira' neanche un
1301 servizio DNS dato che <em>sara' il solo squid a risolvere i
1302 nomi di dominio</em> per i suoi client http.</p>
1304 <p>Squid ascolta di default sulla porta 3128, per impostare
1305 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1306 "docutils literal"><span class=
1307 "pre">/etc/apt/apt.conf</span></tt></p>
1308 <pre class="literal-block">
1309 Acquire::http::Proxy "10.10.208.254:3128";
1312 <p>Per installare Squid si usino i pacchetti:</p>
1313 <pre class="literal-block">
1317 <div class="section" id="configurazione-squid-conf">
1318 <h2><a class="toc-backref" href=
1319 "#id18">2.1 Configurazione:
1322 <p>Segue un estratto delle direttive principali viste in
1323 aula presenti nel file di configurazione <tt class=
1324 "docutils literal"><span class=
1325 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1327 <div class="section" id="cache-dir">
1328 <h3><a class="toc-backref" href=
1329 "#id19">2.1.1 Cache_dir</a></h3>
1331 <p>Cache dir serve per impostare dimensione e percorso
1332 della cache creata sul supporto di storaggio. Essendo la
1333 dimensione di default della cache pari a <tt class=
1334 "docutils literal"><span class="pre">~100</span>
1335 <span class="pre">MB</span></tt> e' altamente
1336 consigliabili aumentare questo parametro se si vuole
1337 poter utilizzare la funzione di <em>cache</em> http del
1340 <p>La dimensione ovviamente dipendera' dallo spazio
1341 disponibile, dimensioni tipiche e massime degli oggetti
1342 che si vuole tenere in cache (un solo file <em>.iso e'
1343 circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1344 <tt class="docutils literal"><span class="pre">150</span>
1345 <span class="pre">MB</span></tt>, un pacchetto debian
1346 circa <tt class="docutils literal"><span class=
1347 "pre">20</span> <span class="pre">MB</span></tt>), numero
1350 <p>Si presti poi attenzione alla natura dei dati che
1351 saranno salvati nella cache: sono tutti dati facilmenti
1352 sostituibili (gli originali sono <em>on-line</em>) la cui
1353 perdita non arreca danni permanenti. Questo rende la
1354 cache di Squid un possibile candidato ad un <em>RAID
1355 stripe</em> (livello 0), con vantaggi sia per le
1356 prestazioni (e la velocita' di navigazione e' uno dei
1357 motivi per cui si installa Squid) che per l'utilizzo
1358 estensivo dello spazio di storaggio. Questo fino al
1359 momento in cui per voi non sia piu' importante
1360 <em>garantire la disponibilita' del servizio</em> (se il
1361 RAID stripe dovesse rompersi gli utenti non potrebbero
1362 piu' navigare, cosa che per natura dello stripe e'
1363 maggiormente probabile rispetto ad un <em>mirror</em> o a
1364 un filesytem <em>normale</em>) con un RAID mirror o
1367 <p>Altra considerazione: i dati del proxy vengono slavati
1368 sul filesytem del server dietro richiesta di utenti
1369 esterni talvolta sconosciuti. Come per i servizi di file
1370 sharing o per la posta elettronica non c'e' motivo che il
1371 filesystem su cui sono ospitati questi dati abbia i
1372 privilegi di eseguibilita' o suid (in genere si puo'
1373 anche usare <em>noatime</em> per renderlo piu' veloce,
1374 che si usi o meno il journal dipende dalle preferenze:
1375 affidabilita' oppure prestazioni):</p>
1378 <pre class="literal-block">
1380 # Filesystem per Squid http cache
1381 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1384 <p>Ora possiamo impostare la cache direttamente nel file
1385 <tt class="docutils literal"><span class=
1386 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1387 <pre class="literal-block">
1388 #TAG: cache_dir (riga 1628)
1391 # cache_dir Type Directory-Name Fs-specific-data [options]
1393 # You can specify multiple cache_dir lines to spread the
1394 # cache among different disk partitions.
1397 # cache_dir ufs /var/spool/squid3 100 16 256
1398 cache_dir aufs /var/spool/squid3 300 24 256
1402 # directory primo livello
1403 # secondo livello di directory
1406 <p>Se si modifica la struttura del filesytem della cache
1407 di Squid, ad esempio variando il numero delle directory,
1408 puo' essere opportuno rigenerare la struttura della cache
1409 di squid (per lo meno se si <em>aumenta</em> il numero
1410 delle directory di primo o secondo livello). Tipicamente
1411 e' consigliabile cancellare (se si ha <em>ridotto</em> il
1412 numero delle diectory) la vecchia cache e poi generare
1413 una nuova struttura. Se si vuole <em>star nel sicuro</em>
1414 ogni volta che si modifica l'impostazione delle directory
1415 <em>si svuoti la vecchia cache e se ne generi una
1417 <pre class="literal-block">
1418 # /etc/init.d/squid3 stop
1419 # rm -r /var/spool/squid3/??
1421 # /etc/init.d/squid3 start
1425 <div class="section" id="tag-maximum-object-size">
1426 <h3><a class="toc-backref" href=
1427 "#id20">2.1.2 TAG:
1428 maximum_object_size</a></h3>
1430 <p>Questa direttiva imposta la dimensione massima degli
1431 oggetti che vengono slvati sul supporto di storaggio,
1432 oggetti di dimensioni superiori saranno comunque
1433 scaricati ma non tenuti in cache.</p>
1435 <p>TAG: maximum_object_size (1760):</p>
1436 <pre class="literal-block">
1437 # TAG: maximum_object_size (1760)
1438 # Objects larger than this size will NOT be saved on disk. The
1439 # value is specified in kilobytes, and the default is 4MB. If
1440 # you wish to get a high BYTES hit ratio, you should probably
1441 # increase this (one 32 MB object hit counts for 3200 10KB
1442 # hits). If you wish to increase speed more than your want to
1443 # save bandwidth you should leave this low.
1445 # NOTE: if using the LFUDA replacement policy you should increase
1446 # this value to maximize the byte hit rate improvement of LFUDA!
1447 # See replacement_policy below for a discussion of this policy.
1450 # maximum_object_size 4096 KB
1451 maximum_object_size 150 MB
1455 <div class="section" id="tag-cache-mem">
1456 <h3><a class="toc-backref" href=
1457 "#id21">2.1.3 TAG: cache_mem</a></h3>
1459 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1460 utilizzata per la cache di Squid. Questo dipendera' dalla
1461 RAM disponibile sul sistema, e da quanta di questa volete
1462 mettere a disposizione di Squid (altri servizi
1463 iimportanti girano sulla stessa macchina?). Questo
1464 paramentro influisce sulle prestazioni e sul degrado dei
1465 supporti di storaggio (sopratutto se magnetici).</p>
1467 <p>Se si stesse pensando di usare dell'hardware
1468 <em>embedded</em> a basse prestazioni / consumo per
1469 realizzare un server gateway / NAT / Squid si tenga
1470 presente che Squid e' relativamente esoso di risorse:
1471 avra' bisogno di una macchina con <tt class=
1472 "docutils literal"><span class="pre">~25MB</span></tt>
1473 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1474 servire decorosamente una decina di client http su una
1475 rete ethernet 10/100. In questo caso non fate scendere
1476 <tt class="docutils literal"><span class=
1477 "pre">cache_mem</span></tt> sotto i <tt class=
1478 "docutils literal"><span class="pre">2/4</span>
1479 <span class="pre">MB</span></tt> pena un accesso continuo
1480 al supporto di storaggio.</p>
1482 <p>Se invece si disponesse di una macchina dedicata a
1483 Squid con gigabytes di RAM non si esiti a dedicarne buona
1484 parte a <em>cache_mem</em>.</p>
1486 <p>TAG: cache_mem (1566):</p>
1487 <pre class="literal-block">
1488 # 'cache_mem' specifies the ideal amount of memory to be used
1490 # * In-Transit objects
1492 # * Negative-Cached objects
1499 <div class="section" id="tag-minimum-object-size">
1500 <h3><a class="toc-backref" href=
1501 "#id22">2.1.4 TAG:
1502 minimum_object_size</a></h3>
1504 <p>Questo parametro imposta la dimensione minima degli
1505 oggetti salvati nella cache. Settato a <tt class=
1506 "docutils literal"><span class="pre">0</span></tt> o a
1507 valori molto piccoli puo' influire negativamente sulla
1508 deframmentazione del filesytem e consumare un numero
1509 elevato di <em>inode</em> (cosa non piu' importante con
1510 ext4 o altri filesytem).</p>
1512 <p>TAG: minimum_object_size:</p>
1513 <pre class="literal-block">
1514 # TAG: minimum_object_size (bytes)
1515 # Objects smaller than this size will NOT be saved on disk. The
1516 # value is specified in kilobytes, and the default is 0 KB, which
1517 # means there is no minimum.
1520 # minimum_object_size 0 KB
1521 minimum_object_size 0 KB
1526 <div class="section" id=
1527 "negoziazione-degli-accesi-al-servizio">
1528 <h2><a class="toc-backref" href=
1529 "#id23">2.2 Negoziazione degli accesi al
1532 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1533 <em>open relay</em> , si deve quindi limitare la rete che
1534 puo' accedere al servizio.</p>
1536 <dl class="docutils">
1537 <dt>Open Relay:</dt>
1539 <dd>Un servizio a cui possono accedere tutti
1540 indiscriminatamente. La cosa puo' andare bene per servizi
1541 come i server web, che aspirano per loro natura al
1542 maggior numero possibile di utenti, ma non a servizi come
1543 i proxy http oppure ai server di posta elettronica (che
1544 permetterebbero l'invio di SPAM).</dd>
1547 <p>Generalmente non volete che il vostro proxy http venga
1548 usato da persone sconosciute le quali sostanzialmente
1549 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1550 (probabilmente per visionare materiali che non vorrebbero
1551 fossero ricondotti direttamente a loro, per motivi che sta
1552 a voi prendere in considerazione) consumando traffico e
1553 banda della vostra connessione a internet. Tenere Squid in
1554 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1555 modo per essere inseriti in una <em>black list</em>.</p>
1557 <p>Per poter limitare gli accessi a Squid dal punto di
1558 vista dell'applicazione (quarto livello TCP/IP) si
1559 identifichera' inizialmente l'entita' <em>rete locale</em>
1560 (es: <tt class="docutils literal"><span class=
1561 "pre">localnet</span></tt>) con una ACL di tipo
1562 <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1563 / range di ip</em> della nostra rete.</p>
1566 Dopodiche l'accesso (<tt class=
1567 "docutils literal"><span class=
1568 "pre">http_access</span></tt>) si concedera'
1569 (<em>allow</em>) a questa entita' (es: <tt class=
1570 "docutils literal"><span class=
1571 "pre">localnet</span></tt>) negando chiunque altro.
1574 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1575 esprimere i range di ip: <a class="reference external"
1576 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1577 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1579 <div class="section" id="acl-e-http-access">
1580 <h3><a class="toc-backref" href=
1581 "#id24">2.2.1 ACL e http access</a></h3>
1583 <p>Si proceda a creare una <tt class=
1584 "docutils literal"><span class="pre">ACL</span></tt> di
1585 tipo <tt class="docutils literal"><span class=
1586 "pre">src</span></tt> per identificare la lostra rete
1587 locale, poi si abiliti l'accesso a questa con la
1588 direttiva <tt class="docutils literal"><span class=
1589 "pre">http_access</span></tt>. Tutto quanto non e'
1590 espressamente autorizzato viene poi negato da un
1591 <tt class="docutils literal"><span class=
1592 "pre">http_access</span> <span class="pre">deny</span>
1593 <span class="pre">all</span></tt> finale.</p>
1594 <pre class="literal-block">
1596 # Defining an Access List
1598 # Every access list definition must begin with an aclname and acltype,
1599 # followed by either type-specific arguments or a quoted filename that
1600 # they are read from.
1602 # ***** ACL TYPES AVAILABLE *****
1604 # acl aclname src ip-address/netmask ... # clients IP address
1607 # Example rule allowing access from your local networks.
1608 # Adapt to list your (internal) IP networks from where browsing
1610 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1611 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1612 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1614 acl localnet src 10.10.208.0/24
1618 # Allowing or Denying access based on defined access lists
1620 # Access to the HTTP port:
1621 # http_access allow|deny [!]aclname ...
1623 # NOTE on default values:
1625 # If there are no "access" lines present, the default is to deny
1629 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1631 # Example rule allowing access from your local networks.
1632 # Adapt localnet in the ACL section to list your (internal) IP networks
1633 # from where browsing should be allowed
1634 #http_access allow localnet
1635 http_access allow localnet
1640 <div class="section" id="testare-squid">
1641 <h2><a class="toc-backref" href=
1642 "#id25">2.3 Testare Squid</a></h2>
1644 <p>Configurato squid e' fondamentale testarne il corretto
1645 funzionamento per assicurarsi di non aver creato un
1646 <em>open-relay</em>. Per fare dei test significativi serve
1647 utilizzare degli host remoti: ci si connetta via ssh a
1648 questi per poi utilizzare <tt class=
1649 "docutils literal"><span class="pre">wget</span></tt> da
1650 riga di comando.</p>
1652 <div class="section" id="client-wgetrc">
1653 <h3><a class="toc-backref" href=
1654 "#id26">2.3.1 Client: ~/.wgetrc</a></h3>
1656 <p>Nel file <tt class="docutils literal"><span class=
1657 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1658 un file nascosto) si puo' impostare il proxy per wget. Si
1659 utililizzi l'indirizzo ip del server che si vuole
1660 testare, e si seguano i log <tt class=
1661 "docutils literal"><span class=
1662 "pre">/var/log/squid3/access.log</span></tt> sul
1665 <p>Da notare che la prova va' fatta su una macchina della
1666 rete che si vuole testare, non da <em>localhost</em>. Per
1667 altro se si utilizzasse <em>direttamente</em> <tt class=
1668 "docutils literal"><span class=
1669 "pre">localhost</span></tt> non si testerebbe la
1670 <em>ACL</em> predisposta, dato che si si rientrerebbe
1671 nella ACL (pre-configurata di default) <tt class=
1672 "docutils literal"><span class=
1673 "pre">localhost</span></tt>.</p>
1675 <dl class="docutils">
1678 <dd>http_proxy=10.10.208.178:3128</dd>
1681 <p>Si proceda a scaricare dal client scelto con un
1683 <pre class="literal-block">
1684 wget http://www.google.it
1688 <div class="section" id="server-access-log">
1689 <h3><a class="toc-backref" href=
1690 "#id27">2.3.2 Server:
1693 <p>Si puo' controllare il corretto funzionamento del
1694 server seguendo i log di accesso a Squid:</p>
1695 <pre class="literal-block">
1696 # tail -f /var/log/squid3/access.log
1699 <p>In oltre e' possibile configurare diversi
1700 <em>analizzatori di log</em> come <tt class=
1701 "docutils literal"><span class=
1702 "pre">Webalizer</span></tt> per studiare i log di
1708 <div class="section" id="apache">
1709 <h1><a class="toc-backref" href=
1710 "#id28">3 Apache</a></h1>
1712 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1713 dato alla piattaforma server Web modulare piu' diffusa (ma
1714 anche al gruppo di lavoro open source che ha creato,
1715 sviluppato e aggiornato il software server), in grado di
1716 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1718 <p>Un server web e' un processo, e per estensione il computer
1719 su cui e' in esecuzione, che si occupa di fornire, su
1720 richiesta del browser, una pagina web (spesso scritta in
1721 HTML). Le informazioni inviate dal server web viaggiano in
1722 rete trasportate dal protocollo HTTP. L'insieme di server web
1723 dà vita al World Wide Web, uno dei servizi piu'
1724 utilizzati di Internet.</p>
1726 <div class="section" id="pacchetti-da-installare">
1727 <h2><a class="toc-backref" href=
1728 "#id29">3.1 Pacchetti da
1729 installare::</a></h2>
1735 <p>Con la release 2.0 di Apache viene automaticamente resa
1736 disponibile anche la versione SSL (Secure Socket Layer,
1737 cpnnessioni criptate ) del web server.</p>
1740 <div class="section" id="configurazione-di-apache">
1741 <h2><a class="toc-backref" href=
1742 "#id30">3.2 Configurazione di
1745 <p>I file di configurazione di apache si trovano nella
1746 cartella: <tt class="docutils literal"><span class=
1747 "pre">/etc/apache2</span></tt> e sono strutturati come
1748 descritto nel file <tt class=
1749 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1750 . Sostanzialmente lo schema e' il seguente:</p>
1752 <dl class="docutils">
1753 <dt>apache2.conf</dt>
1756 <p class="first">File di configurazione principale del
1759 <p class="last">httpd.conf e' il vecchio file di
1760 configurazione di Apache1, presente per motivi di
1761 retrocompatibilita' e' generalemente vuoto.</p>
1766 <dd>In questo file vengono specificate le porte sulle
1767 quali resta in ascolto il server web. Si noti che
1768 utilizzando dei virtual hosts generalmente viene
1769 specificata per questi la porta su cui ascoltare nel file
1770 di configurazione del virtual host, ad es: <tt class=
1771 "docutils literal"><span class=
1772 "pre"><VirtualHost</span> <span class=
1773 "pre">*:80></span></tt></dd>
1775 <dt>sites-available</dt>
1777 <dd>In questa cartella vengono raccolti i file di
1778 configurazione dei virtual host disponibili.</dd>
1780 <dt>sites-enabled</dt>
1782 <dd>In questa cartella sono contenuti dei link simbolici
1783 ai files in ../sites-available : se il link e' presente
1784 in questa cartella il virtual host e' abilitato.</dd>
1786 <dt>mods-available</dt>
1788 <dd>Stesso metodo per i moduli: in questa cartella ci
1789 sono i moduli veri e propri che verranno poi abilitati
1790 grazie all'esistenza di link simbolici nella cartella
1793 <dt>mods-enabled</dt>
1795 <dd>Moduli abilitati, effettivamente caricati.</dd>
1799 <div class="section" id="apache-conf">
1800 <h2><a class="toc-backref" href=
1801 "#id31">3.3 apache.conf</a></h2>
1803 <p>File di configurazione del servizio Apache, contiene le
1804 impostazioni generiche (ad esempio utilizzo della RAM e
1805 risorse di sistema) dell'intero servizio. Nella
1806 configurazione di default per Debian non viene definito un
1807 vero e proprio sito di default ma solo dei virtual
1810 <p>Guardiamo alcune direttive interessanti:</p>
1812 <dl class="docutils">
1815 <dd>Numero di secondi da aspettare prima di chiudere la
1816 connessione con il client. Questo parametro serve a
1817 liberare le risorse di sistema nel caso che un client,
1818 magar a causa di una connessione particolarmente lenta o
1819 instabili, tenga attivo indefinitivamente un processo di
1824 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1825 alle connessioni persistenti (http 1.1) permettono al
1826 server di rispondere a piu' richieste dei client mediante
1827 la stessa connessione. Il protocoll http per sua natura
1828 e' senza stato (<em>statelessi</em> ), quindi ogni
1829 risorsa richiesta (per pagine web si pensi ad esempio
1830 alle immagini) dal client necessita di una connessione
1831 autonoma. Keep-alive permette di ottimizzare la
1832 connessione anche fino al 50% a seconda delle situazioni
1835 <dt>Server-Pool Size Regulation</dt>
1837 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1838 Tutti spiegati nel manuale di apache) servono per
1839 attribuire le risorse di sistema disponibili al server
1840 Apache. Tenere questi parametri bassi serve a limitare il
1841 rischio di Denial of Service per il server, nel caso
1842 offra altri servizi. I settagi di default sono come
1843 sempre abbastanza conservativi, se si conta di usare il
1844 proprio Apache per servire un sito web con molti
1845 visitatori sara' necessario aumentare sensibilmente le
1846 impostazioni di base.</dd>
1848 <dt>AccessFileName</dt>
1850 <dd>Il nome del file che viene onorato per modificare le
1851 impostazioni per una singola directory, legato alla
1852 direttiva AllowOverride .</dd>
1856 <div class="section" id="installazione-di-php">
1857 <h2><a class="toc-backref" href=
1858 "#id32">3.4 Installazione di PHP</a></h2>
1860 <p>Pacchetti da installare: <tt class=
1861 "docutils literal"><span class="pre">php5</span>
1862 <span class="pre">php-pear</span></tt></p>
1864 <div class="section" id="test-del-modulo-php">
1865 <h3><a class="toc-backref" href=
1866 "#id33">3.4.1 Test del modulo
1869 <p>Creare nella cartella <tt class=
1870 "docutils literal"><span class="pre">/var/www</span></tt>
1871 (o altra cartella visibile) un file con estensione *.php
1872 (es <tt class="docutils literal"><span class=
1873 "pre">/var/ww/info.php</span></tt> contenete codice php
1874 eseguibile dall'interprete, ad es:</p>
1875 <pre class="literal-block">
1876 <?php phpinfo() ; ?>
1879 <p>Questa funzione di php generera' la tipica pagina con
1880 le impostazioni attuali per PHP. Richiamando la pagina
1881 (es: <tt class="docutils literal"><span class=
1882 "pre">http://localhost/info.php</span></tt> ) verra
1883 generata dall'interprete PHP la pagina HTML e resa
1884 disponibile tramite Apache ai utclient HTTP, a prova del
1885 correto funzionamento del modulo di PHP e della sua
1886 integrazione con il serv web Apache. In caso contrario se
1887 il client http proporra di scaricare la pagina invece che
1888 visualizzarla nel browser: non funziona l'interprete di
1889 php o sono mal configurati i MIME-type. prima di tutto
1890 assicurarsi di aver fatoo ripartire Apache.</p>
1893 <div class="section" id=
1894 "installazione-del-supporto-per-mysql">
1895 <h3><a class="toc-backref" href=
1896 "#id34">3.4.2 Installazione del supporto
1899 <p>Installare i pacchetti:</p>
1900 <pre class="literal-block">
1901 php5-mysql phpmyadmin
1904 <p>Controllare tramite la pagina php.info che sia
1905 abilitato il supporto per Mysql (ripartito Apache,
1906 ricaricare la pagina e cercare con CTRL+f <tt class=
1907 "docutils literal"><span class=
1908 "pre">mysql</span></tt>).</p>
1911 <div class="section" id="phpmyadmin">
1912 <h3><a class="toc-backref" href=
1913 "#id35">3.4.3 phpmyadmin</a></h3>
1915 <p>L'interfaccia web Phpmyadmin non richede
1916 necessariamente la presenza di un database Mysql locale,
1917 puo' infatti essere utilizzata per gestire databases
1918 remoti (il suo file di configurazione: <tt class=
1919 "docutils literal"><span class=
1920 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1921 caso si voglia installare localmente Mysql si utilizzi il
1922 pacchetto <tt class="docutils literal"><span class=
1923 "pre">mysql-server</span></tt> .</p>
1925 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1926 <tt class="docutils literal"><span class=
1927 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1928 non fosse controllare che sia incluso il file <tt class=
1929 "docutils literal"><span class=
1930 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1931 <tt class="docutils literal"><span class=
1932 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1935 <div class="section" id=
1936 "installazione-del-supporto-per-postgresql">
1937 <h3><a class="toc-backref" href=
1938 "#id36">3.4.4 Installazione del supporto
1939 per Postgresql</a></h3>
1941 <p>Installare i pacchetti:</p>
1942 <pre class="literal-block">
1943 php5-pgsql phppgadmin
1946 <p>Controllare tramite la pagina php.info che sia
1947 abilitato il supporto per PostgreSQL (ripartito Apache,
1948 ricaricare la pagina e cercare con CTRL+f <tt class=
1949 "docutils literal"><span class=
1950 "pre">pgsql</span></tt>).</p>
1953 <div class="section" id="phppgadmin">
1954 <h3><a class="toc-backref" href=
1955 "#id37">3.4.5 phppgadmin</a></h3>
1957 <p>L'interfaccia web Phppgadmin per il database server
1958 PostgreSQL non richede necessariamente la presenza di un
1959 database locale, puo' infatti essere utilizzata per
1960 gestire databases remoti (il suo file di configurazione:
1961 <tt class="docutils literal"><span class=
1962 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1963 caso si voglia installare localmente Mysql si utilizzi il
1964 pacchetto <tt class="docutils literal"><span class=
1965 "pre">postgresql</span></tt> .</p>
1967 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1968 <tt class="docutils literal"><span class=
1969 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1970 non fosse controllare che sia incluso il file <tt class=
1971 "docutils literal"><span class=
1972 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1973 <tt class="docutils literal"><span class=
1974 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1978 <div class="section" id="virtual-hosts">
1979 <h2><a class="toc-backref" href=
1980 "#id38">3.5 Virtual hosts</a></h2>
1984 <li><a class="reference external" href=
1985 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1987 <li><a class="reference external" href=
1988 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1989 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1993 <p>I virtual host permettono di avere piu' siti internet
1994 disponibili tramite lo stesso server web, eventualmente
1995 mappati su un solo indirizzo ip. Sono generalemente di due
2000 <li>Basati su <em>indirizzi ip</em>. Se si ha la
2001 possibilita' di avere piu' indirizzi ip dedicati per i
2002 diversi siti che si vuole servire. ES: <tt class=
2003 "docutils literal"><span class=
2004 "pre"><VirtualHost</span> <span class=
2005 "pre">192.168.0.2:80></span></tt> . Soluzione
2006 dispendiosa, si tende ad usarla solo se servono
2007 certificati di sicurezza (SSL ) dedicati per ogni
2010 <li>Basati su <em>nomi di dominio</em> che puntano allo
2011 stesso ip. Soluzione piu' economica e diffusa che si
2012 basa sulle funzionalita' di http 1.1 .</li>
2016 <p>Prenderemo in esame la gestione di virtual hosts basati
2017 su nomi di dominio.</p>
2019 <div class="section" id="gestione-dns">
2020 <h3><a class="toc-backref" href=
2021 "#id39">3.5.1 Gestione DNS</a></h3>
2023 <p>Prima di tutto per poter impostare i virtual hosts
2024 dovete avere un server DNS che risolva i vostri nomi di
2025 dominio sull'indirizzo ip del server. Questo si puo'
2026 ottenere in vari modi, ad es:</p>
2029 <dl class="docutils">
2030 <dt><em>Bind</em> (DNS server)</dt>
2032 <dd>Impostare i campi A nelle proprie zone gestite
2033 dal server dns Bind. Ad es: <tt class=
2034 "docutils literal"><span class=
2035 "pre">papo</span>
2037 "pre">A</span>
2038 <span class="pre">212.22.136.248</span></tt></dd>
2040 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2042 <dd>Utilizzare un servizio come ad es: <a class=
2043 "reference external" href=
2044 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2045 per mappare nomi di dominio sul proprio indirizzo ip,
2046 comodo ad esempio se si dispone di un indirzzo ip
2047 pubblico (anche se dinamico) per la propria
2048 connessione ad internet.</dd>
2050 <dt><em>Dnsmasq</em> (DNS server)</dt>
2052 <dd>Utilizzabile a livello locale per fare dei test,
2053 utilizzando direttive come: <tt class=
2054 "docutils literal"><span class=
2055 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2057 <dt><tt class="docutils literal"><span class=
2058 "pre">/etc/hosts</span></tt></dt>
2060 <dd>Per prove <em>strettamente a livello locale</em>
2061 potete impostare i nomi dei vostri virtual server nel
2062 file /etc/hosts .</dd>
2065 <pre class="literal-block">
2068 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2069 ;; global options: printcmd
2071 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2072 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2074 ;; QUESTION SECTION:
2075 ;177.piffa.net. IN A
2078 177.piffa.net. 0 IN A 10.10.208.177
2080 ;; Query time: 12 msec
2081 ;; SERVER: 10.10.208.254#53(10.10.208.254)
2082 ;; WHEN: Wed May 6 12:27:08 2009
2083 ;; MSG SIZE rcvd: 47
2086 <p>La parte interessante e' <tt class=
2087 "docutils literal"><span class=
2088 "pre">177.piffa.net.</span>
2090 "pre">0</span>
2091 <span class="pre">IN</span>
2093 "pre">A</span>
2094 <span class="pre">10.10.208.177</span></tt> . Il nome di
2095 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2096 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2097 dovra' essere disponibile un virtual host che corrisponde
2098 al nome <tt class="docutils literal"><span class=
2099 "pre">177.piffa.net</span></tt> .</p>
2102 <div class="section" id="virtual-host">
2103 <h3><a class="toc-backref" href=
2104 "#id40">3.5.2 Virtual host</a></h3>
2106 <p>Esempio di Virtual host:</p>
2107 <pre class="literal-block">
2108 <VirtualHost *:80 >
2109 ServerName 177.piffa.net
2110 DocumentRoot /var/www/177.piffa.net/
2111 ServerAdmin webmaster@177.piffa.net
2112 </VirtualHost>
2115 <ol class="arabic simple">
2116 <li><tt class="docutils literal"><span class=
2117 "pre"><VirtualHost</span> <span class=
2118 "pre">\*:80</span> <span class="pre">></span></tt>
2119 La prima riga indica l'inizio della stanza relativa al
2120 nostro virtual host, che ascolotera' su qualunque
2121 indirizzo ip (nel caso il server abbia piu' indirizzi
2122 dai quali e' raggiungibile) sulla porta <tt class=
2123 "docutils literal"><span class=
2124 "pre">80</span></tt>.</li>
2126 <li><tt class="docutils literal"><span class=
2127 "pre">Server/name</span></tt> precisa quale sara' il
2128 nome di dominio a cui verra' associato questo sito
2129 rispetto ad altri eventualmenti presenti sullo stesso
2132 <li><tt class="docutils literal"><span class=
2133 "pre">DocumentRoot</span></tt> : il path della
2134 directory che contiene le pagine del sito.</li>
2136 <li><tt class="docutils literal"><span class=
2137 "pre">ServerAdmin</span></tt>: l'indirizzo del
2138 webmaster, in modo da poterlo contattare in caso di
2139 problemi col sito.</li>
2141 <li><tt class="docutils literal"><span class=
2142 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2143 chiusura della stanza di definizione del virtual
2147 <p>Quelle che abbiamo appena visto sono le direttive
2148 essenziali per definire un sito virtuale, potrebbe essere
2149 utile aggiungene altre:</p>
2153 <dl class="first docutils">
2154 <dt><tt class="docutils literal"><span class=
2155 "pre">ErrorLog</span> <span class=
2156 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2159 <p class="first last">Log degli errori separato
2160 dai restanti siti web ospitati dal server.</p>
2166 <dl class="first docutils">
2167 <dt><tt class="docutils literal"><span class=
2168 "pre">LogLevel</span> <span class=
2169 "pre">warn</span></tt></dt>
2172 <p class="first last">Livello di importanza degli
2173 eventi loggati= warning <em>attenzione</em> .</p>
2179 <dl class="first docutils">
2180 <dt><tt class="docutils literal"><span class=
2181 "pre">CustomLog</span> <span class=
2182 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2183 <span class="pre">combined</span></tt></dt>
2186 <p class="first last">Log di accesso separati
2187 dagli altri siti, utile anche qua per statistiche
2188 di accesso per il solo sito virtuale.</p>
2194 <p>Potrebbe essere utile modificare le impostazioni di
2195 una intera directory, ad esempio per abilitare
2196 l'<tt class="docutils literal"><span class=
2197 "pre">AuthConfig</span></tt>:</p>
2198 <pre class="literal-block">
2199 <Directory "/var/www/miosito.net/privata">
2200 AllowOverride AuthConfig
2201 Options ExecCGI Indexes MultiViews FollowSymLinks
2207 <p><tt class="docutils literal"><span class=
2208 "pre">AllowOverride</span> <span class=
2209 "pre">AuthConfig</span></tt> ora vale per l'intera
2210 directory, come le altre opzioni.</p>
2214 <div class="section" id="negoziazione-accessi">
2215 <h2><a class="toc-backref" href=
2216 "#id41">3.6 Negoziazione accessi</a></h2>
2218 <p>Tipicamente quando si installa un server web il proprio
2219 desiderio e' di dare accesso ai materiali disponibili al
2220 maggior numero di visitatori possibile. Talvolta pero' puo
2221 essere utile o necessario limitare gli accessi, ad esempio
2222 per escludere un <em>bot</em> indesiderato che scansiona
2223 ininterottamente le nostre pagine o per creare una <em>Area
2224 Riservata</em> i cui materiali non devono essere
2225 disponibile a tutti.</p>
2227 <div class="section" id="limiti-su-base-ip">
2228 <h3><a class="toc-backref" href=
2229 "#id42">3.6.1 Limiti su base ip</a></h3>
2231 <p>La forma piu' semplice di restrizine degli accessi e'
2232 su base degli indirizzi IP dei client: tipicamente i siti
2233 web sono settati per dare accesso a chiunque:</p>
2234 <pre class="literal-block">
2235 <VirtualHost *:80 >
2237 <Directory "/var/www/177.piffa.net">
2241 </VirtualHost>
2244 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2246 <pre class="literal-block">
2247 <VirtualHost *:80 >
2248 <Directory "/var/www/177.piffa.net">
2251 Deny from 192.168.0.1
2253 </VirtualHost>
2256 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2257 materiali dell'intero sito virtuale, oppure potremmo
2258 lavorare su una sola directory:</p>
2259 <pre class="literal-block">
2260 <Directory "/var/www/miosito.net/limitata">
2262 Allow from 192.168.0.0./24
2267 <p>In questo modo solo la classe IP <tt class=
2268 "docutils literal"><span class=
2269 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2270 directory <tt class="docutils literal"><span class=
2271 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2272 relativamente facile per un malintenzionato cambiare il
2273 propio indirizzo ip, oppure collegarsi da un altra zona.
2274 Meno facile e' accedere ad una classe privata trovandosi
2275 all'esterno di questa, ma e' comunque possibile mandare
2276 delle richieste <tt class="docutils literal"><span class=
2277 "pre">GET</span></tt> per cercare di mandare in Denial Of
2278 Service il webserver.</p>
2282 <div class="section" id="user-authentication">
2283 <h2><a class="toc-backref" href=
2284 "#id43">3.7 User Authentication</a></h2>
2286 <p>A volte conviene negoziare gli accessi ad un area di un
2287 sito tramite autenticazione basata sull'accopiata <em>nome
2288 utente / password</em>. Questo puo' venire utile per creare
2289 una area download <em>intranet</em>, alla quale possano
2290 accedere solo gli utenti previsti a prescindere dagli
2291 indirizzi IP dei loro client. Per quanto esistano soluzioni
2292 piu' granulari e sofisticate per ottenere questo,
2293 <em>mod-auth</em> puo'essere sufficente. E mod auth non
2294 richiede l'installazione di software aggiuntivi.</p>
2296 <p>link: <a class="reference external" href=
2297 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2299 <div class="section" id="definire-la-cartella">
2300 <h3><a class="toc-backref" href=
2301 "#id44">3.7.1 Definire la
2304 <p>Decidere quale sara' il <em>path</em> della cartella
2305 da sottoporre ad autentizazione:(e creiamo la
2309 <tt class="docutils literal"><span class=
2310 "pre">mkdir</span> <span class=
2311 "pre">/var/www/177.piffa.net/privata</span></tt>
2315 <div class="section" id=
2316 "creazione-del-database-delle-passwords">
2317 <h3><a class="toc-backref" href=
2318 "#id45">3.7.2 Creazione del database
2319 delle passwords</a></h3>
2321 <p>Un modo semplice per gestire una database di
2322 <em>user-id / passwords</em> e' utilizzare l'utility
2323 <tt class="docutils literal"><span class=
2324 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2325 in cui un <em>crypt</em> delle password viene associato
2328 <p>Si dovra' decidere dove tenere questo file, la cosa
2329 importante e' che non sia visibile nel sito web: non deve
2330 essere scaricabile dai visitatori. Deve essere cioe'
2331 all'esterno della <em>DocumentRoot</em>: un buon posto
2332 potrebbe essere la /home dell'utente.</p>
2334 <p>Creiamo (con il <em>flag</em> <tt class=
2335 "docutils literal"><span class="pre">-c</span></tt>) il
2336 file <tt class="docutils literal"><span class=
2337 "pre">/home/utente/passwords</span></tt> con l'utente
2338 <tt class="docutils literal"><span class=
2339 "pre">luca</span></tt>:</p>
2340 <pre class="literal-block">
2341 htpasswd -c /home/utente/passwords luca
2344 <p><tt class="docutils literal"><span class=
2345 "pre">htpasswd</span></tt> ci chedera' la password da
2346 associare all'utente <tt class=
2347 "docutils literal"><span class="pre">luca</span></tt>.
2348 Per sucessive modifiche della password o aggiunta di
2349 nuovi utenti non sara' necessario usare il flag
2350 <tt class="docutils literal"><span class=
2351 "pre">-c</span></tt>.</p>
2354 <div class="section" id="id3">
2355 <h3><a class="toc-backref" href=
2356 "#id46">3.7.3 Configurazione di
2359 <p>Ora possiamo passare alla configurazione vera e
2360 propria di Apache, ma con una novita': andremo a inserire
2361 la voce in un <tt class="docutils literal"><span class=
2362 "pre">.htaccess</span></tt> invece che modificare il file
2363 di impostazione del virtual-host.</p>
2365 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2366 puo' modificare l'impostazione del virtual host nel file
2367 <tt class="docutils literal"><span class=
2368 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2369 ma spesso il motivo per cui creiamo i virtual hosts e'
2370 ospitare i siti di altri utenti, che possono solo
2371 pubblicare (generalmente tramite <em>FTP</em>) i loro
2372 documenti nella loro <em>DocumentRoot</em>, senza poter
2373 quindi modificare in alcun modo la configurazione del
2376 <p>Dando agli utenti la possibilita' di modificare
2377 (<em>AllowOverride</em>) autonomamente alcuni parametri
2378 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2379 funzionamenteo del loro spazio web ci togliera'
2380 l'incombenza di dover intervenire suii vari virtual
2383 <p>Abilitiamo l'AllowOverride nel file di configurazione
2384 del virtual host per la sola directory <tt class=
2385 "docutils literal"><span class=
2386 "pre">privata</span></tt>:</p>
2387 <pre class="literal-block">
2388 <VirtualHost *:80 >
2389 ServerName 177.piffa.net
2390 DocumentRoot /var/www/177.piffa.net/
2391 ServerAdmin webmaster@177.piffa.net
2392 <Directory "/var/www/177.piffa.net/privata">
2393 AllowOverride AuthConfig
2395 </VirtualHost>
2398 <p>Per rendere il cambiamento effettivo sara' necessario
2399 fare un restart / reload di Apache.</p>
2401 <p>Ora sara' possibile, anche per l'utente di sistema,
2402 creare un fie <tt class="docutils literal"><span class=
2403 "pre">.htaccess</span></tt> che sara' onorato da
2406 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2407 <pre class="literal-block">
2408 # Questo file viene incluso
2409 # nella configurazione del sito web
2410 # Messaggio visualizzato al prompt per l'autenticazione
2411 AuthName "Area privata soggetta ad autentizazione"
2412 # tipo di autenticazione da usarsi
2414 # File generato precedentemente con htpasswd
2415 AuthUserFile /home/utente/passwords
2417 # Negoziazione degli accessi
2418 # valid users permette l'accesso agli utenti specificati
2419 # nel file generato da htpasswd
2423 <p>Si noti che non e' necessario fare ripartire Apache
2424 per onorare i cambiamenti (un utente non avrebbe la
2425 possibilita' di farlo!).</p>
2429 <div class="section" id="cavets">
2430 <h2><a class="toc-backref" href=
2431 "#id47">3.8 Cavets</a></h2>
2433 <p>Problemi di cache:</p>
2437 <li>Proxy: nei settaggi del browser specificare di non
2438 utilizzare un server proxy http per il sito web locale
2439 (o per gli altri che si stanno monitorando). Se si ha
2440 il controllo del proxy server: stopparlo, ricaricare la
2441 pagina (operazione che fallira'), far ripartire il
2442 proxy, ricaricare la pagina.</li>
2444 <li>Provare con un altro browser, o cercare di svuotare
2445 la cache chiudere/riaprire l'applicativo. Provare a
2446 fermare Apache, ricaricare la pagina (operazione che
2447 fallira'), far ripartire Apache, ricaricare la
2454 <div class="section" id="domain-name-system">
2455 <h1><a class="toc-backref" href=
2456 "#id48">4 Domain Name System</a></h1>
2458 <p>Domain Name System (spesso indicato con DNS) e' un
2459 servizio utilizzato per la risoluzione di nomi di host in
2460 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2461 un database distribuito, costituito dai server DNS.</p>
2463 <p>Il nome DNS denota anche il protocollo che regola il
2464 funzionamento del servizio, i programmi che lo implementano,
2465 i server su cui questi girano, l'insieme di questi server che
2466 cooperano per fornire il servizio.</p>
2468 <p>I nomi DNS, o "nomi di dominio", sono una delle
2469 caratteristiche piu' visibili di Internet.</p>
2471 <p>C'e' confusione in merito alla definizione dell'acronimo:
2472 la S spesso viene interpretata come service, ma la
2473 definizione corretta e' system.</p>
2475 <p>L'operazione di convertire un nome in un indirizzo e'
2476 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2477 detto risoluzione inversa.</p>
2479 <div class="section" id="nomi-di-dominio">
2480 <h2><a class="toc-backref" href=
2481 "#id49">4.1 Nomi di dominio</a></h2>
2483 <p>Un nome a dominio e' costituito da una serie di stringhe
2484 separate da punti, ad esempio it.wikipedia.org. A
2485 differenza degli indirizzi IP, dove la parte piu'
2486 importante del numero e' la prima partendo da sinistra, in
2487 un nome DNS la parte piu' importante e' la prima partendo
2488 da destra. Questa e' detta dominio di primo livello (o TLD,
2489 Top Level Domain), per esempio .org o .it.</p>
2491 <p>Un dominio di secondo livello consiste in due parti, per
2492 esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2493 specifica un'ulteriore suddivisione. Quando un dominio di
2494 secondo livello viene registrato all'assegnatario, questo
2495 e' autorizzato a usare i nomi di dominio relativi ai
2496 successivi livelli come it.wikipedia.org (dominio di terzo
2497 livello) e altri come some.other.stuff.wikipedia.org
2498 (dominio di quinto livello) e cosi' via.</p>
2501 <div class="section" id="tipologie-di-record">
2502 <h2><a class="toc-backref" href=
2503 "#id50">4.2 Tipologie di record</a></h2>
2505 <p>Ad un nome DNS possono corrispondere diversi tipi di
2506 informazioni. Per questo motivo, esistono diversi tipi di
2507 record DNS. Ogni voce del database DNS deve essere
2508 caratterizzata da un tipo. I principali tipi sono:</p>
2511 <li>Record A - Indica la corrispondenza tra un nome ed
2512 uno (o piu') indirizzi IP (per la precisione indirizzi
2513 IPv4, ovvero la versione attualmente in uso).</li>
2515 <li>Record MX - (Mail eXchange) indica a quali server
2516 debba essere inviata la posta elettronica per un certo
2519 <li>Record CNAME - Sono usati per creare un alias, ovvero
2520 per fare in modo che lo stesso calcolatore sia noto con
2521 piu' nomi. Uno degli utilizzi di questo tipo di record
2522 consiste nell'attribuire ad un host che offre piu'
2523 servizi un nome per ciascun servizio. In questo modo, i
2524 servizi possono poi essere spostati su altri host senza
2525 dover riconfigurare i client, ma modificando solo il
2528 <li>Record PTR - Il DNS viene utilizzato anche per
2529 realizzare la risoluzione inversa, ovvero per far
2530 corrispondere ad un indirizzo IP il corrispondente nome a
2531 dominio. Per questo si usano i record di tipo "PTR" (e
2532 una apposita zona dello spazio dei nomi
2535 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2537 <li>Record SRV - Identificano il server per un
2538 determinato servizio all'interno di un dominio. Possono
2539 essere considerati una generalizzazione dei record
2542 <li>Record TXT - Associano campi di testo arbitrari ad un
2543 dominio. Questi campi possono contenere una descrizione
2544 informativa oppure essere utilizzati per realizzare
2548 <p>Vi sono anche tipi di record "di servizio", necessari al
2549 funzionamento del database distribuito: * Record NS -
2550 Utilizzato per indicare quali siano i server DNS
2551 autoritativi per un certo dominio, ovvero per delegarne la
2552 gestione. * Record SOA - (Start of Authority) usato per la
2553 gestione delle zone DNS.</p>
2556 <div class="section" id="utilizzo">
2557 <h2><a class="toc-backref" href=
2558 "#id51">4.3 Utilizzo</a></h2>
2560 <p>I computer vengono identificati in rete grazie agli
2561 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2562 utenti come riferimento per i vari server. Ad esempio
2563 sarebbe scomodoriferirsi al motore di ricerca Goggle con
2564 uno dei suoi IP: <tt class="docutils literal"><span class=
2565 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2566 nome di dominio <em>www.google.com</em>:</p>
2567 <pre class="literal-block">
2568 ping -c 1 www.google.com
2569 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2573 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2574 <h2><a class="toc-backref" href=
2575 "#id52">4.4 Risoluzione dei nomi di
2578 <p>Ci sono vari strumenti per interrogare i server DNS e
2579 ottenere l'indirizzo IP associato al nome di dominio che ci
2581 <pre class="literal-block">
2582 $ host www.piffa.net
2583 www.piffa.net is an alias for piffa.net.
2584 piffa.net has address 65.98.21.97
2585 piffa.net mail is handled by 10 65.98.21.97
2588 $ nslookup www.piffa.net
2589 Server: 192.168.0.10
2590 Address: 192.168.0.10#53
2592 Non-authoritative answer:
2593 www.piffa.net canonical name = piffa.net.
2595 Address: 65.98.21.97
2600 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2601 ;; global options: +cmd
2603 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2604 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2606 ;; QUESTION SECTION:
2607 ;www.piffa.net. IN A
2610 www.piffa.net. 3489 IN CNAME piffa.net.
2611 piffa.net. 3489 IN A 65.98.21.97
2613 ;; AUTHORITY SECTION:
2614 piffa.net. 86289 IN NS ns2.mydomain.com.
2615 piffa.net. 86289 IN NS ns1.mydomain.com.
2616 piffa.net. 86289 IN NS ns4.mydomain.com.
2617 piffa.net. 86289 IN NS ns3.mydomain.com.
2619 ;; ADDITIONAL SECTION:
2620 ns1.mydomain.com. 96208 IN A 64.94.117.193
2621 ns2.mydomain.com. 96208 IN A 64.94.31.67
2622 ns3.mydomain.com. 96208 IN A 66.150.161.137
2623 ns4.mydomain.com. 96208 IN A 63.251.83.74
2625 ;; Query time: 1 msec
2626 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2627 ;; WHEN: Sun May 10 21:23:11 2009
2628 ;; MSG SIZE rcvd: 209
2631 <p>Lo strumento piu' esaustivo e' <tt class=
2632 "docutils literal"><span class="pre">dig</span></tt>,
2633 installabile con il pacchetto <tt class=
2634 "docutils literal"><span class="pre">dnsutils</span></tt>
2638 <div class="section" id="dig">
2639 <h2><a class="toc-backref" href=
2640 "#id53">4.5 Dig</a></h2>
2642 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2643 "docutils literal"><span class="pre">dig</span></tt> per
2644 l'inerrogazione dei DNS Server:</p>
2645 <pre class="literal-block">
2648 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2649 ;; global options: +cmd
2651 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2652 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2654 ;; QUESTION SECTION:
2655 ;www.google.it. IN A
2658 www.google.it. 250683 IN CNAME www.google.com.
2659 www.google.com. 334819 IN CNAME www.l.google.com.
2660 www.l.google.com. 186 IN A 74.125.43.103
2661 www.l.google.com. 186 IN A 74.125.43.104
2662 www.l.google.com. 186 IN A 74.125.43.147
2663 www.l.google.com. 186 IN A 74.125.43.99
2665 ;; AUTHORITY SECTION:
2666 l.google.com. 80856 IN NS f.l.google.com.
2667 l.google.com. 80856 IN NS d.l.google.com.
2668 l.google.com. 80856 IN NS b.l.google.com.
2669 l.google.com. 80856 IN NS c.l.google.com.
2670 l.google.com. 80856 IN NS a.l.google.com.
2671 l.google.com. 80856 IN NS e.l.google.com.
2672 l.google.com. 80856 IN NS g.l.google.com.
2674 ;; Query time: 1 msec
2675 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2676 ;; WHEN: Sun May 10 21:34:47 2009
2677 ;; MSG SIZE rcvd: 255
2680 <dl class="docutils">
2683 <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2684 <em>root servers</em> utilizzati. I root server sono i
2685 server che mantengono le informazioni sui domini di primo
2686 livello (TLD) e sono quindi il punto di partenza per
2687 scorrere nella directory dei DNS per recuperare le
2688 informazioni (tipicamente un campo <tt class=
2689 "docutils literal"><span class="pre">A</span></tt> per un
2690 indirizzo IP) che ci servono per raggiungere un certo
2699 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2700 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2701 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2702 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2703 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2704 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2705 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2706 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2707 J.ROOT-SERVERS.NET. . 192032 IN NS
2708 D.ROOT-SERVERS.NET.</p>
2713 <dl class="docutils">
2714 <dt>dig @nome_dns</dt>
2716 <dd>Permette di fare una query ad un server dns
2717 particolare. Es: <tt class=
2718 "docutils literal"><span class="pre">dig</span>
2719 <span class="pre">@151.99.25.1</span> <span class=
2720 "pre">www.google.it</span></tt></dd>
2722 <dt>dig MX www.google.it</dt>
2724 <dd>Chiede un campo in particolare, in questo caso il
2727 <dt>dig ANY www.google.it</dt>
2729 <dd>Chiede tutti i campi, non solo i campi
2732 <dt>dig -x 74.125.43.104</dt>
2734 <dd>Effettua una richiesta inversa: dall'ip al PTR
2739 <div class="section" id="resolv-conf">
2740 <h2><a class="toc-backref" href=
2741 "#id54">4.6 resolv.conf</a></h2>
2743 <p>Il file <tt class="docutils literal"><span class=
2744 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2745 sul dns usato dal sistema, in genere anche altre
2746 applicazioni che devono effettuare query DNS leggono
2747 resolv.conf per conoscere l'ubicazione del DNS.</p>
2749 <p>/etc/resolv.conf:</p>
2753 <li><tt class="docutils literal"><span class=
2754 "pre">nameserver</span></tt>: indica il nameserver da
2755 utilizzare, indicato con l'indirizzo ip.</li>
2757 <li><tt class="docutils literal"><span class=
2758 "pre">domain</span></tt>: indica il nome di dominio
2759 della rete attuale, vedi voce sucessiva.</li>
2761 <li><tt class="docutils literal"><span class=
2762 "pre">search</span></tt>: nome di dominio usato dalla
2763 rete sul quale cercare gli hosts. Ad esempio se
2764 impostato su <tt class="docutils literal"><span class=
2765 "pre">piffa.net</span></tt> pingando l'host <tt class=
2766 "docutils literal"><span class="pre">bender</span></tt>
2767 viene automaticamente fatto un tentativo di ricerca per
2768 <tt class="docutils literal"><span class=
2769 "pre">bender.piffa.net</span></tt>.</li>
2773 <p>Si veda anche la pagina man di resolv.conf.</p>
2775 <p>Attenzione: se si usa un client DHCP o simile questo
2776 file potra' essere riscritto automaticamente in base a
2777 quanto ottenuto dal DHCP. Si veda la documentazione del
2778 pacchtto <tt class="docutils literal"><span class=
2779 "pre">resolvconf</span></tt>.</p>
2782 <div class="section" id="etc-hosts">
2783 <h2><a class="toc-backref" href=
2784 "#id55">4.7 /etc/hosts</a></h2>
2786 <p>Tabella statica per l'associazione tra IP e nomi di
2788 <pre class="literal-block">
2793 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2794 daniela daniela.piffa.net 10.10.208.254 mirror
2795 mirror.piffa.net 91.191.138.15 thepiratebay.org
2796 192.168.0.11 chrome chrome.mydomain.com
2799 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2800 stringhe di testo (anche piu' di una es: <tt class=
2801 "docutils literal"><span class="pre">mirror</span></tt> e
2802 <tt class="docutils literal"><span class=
2803 "pre">mirror.piffa.net</span></tt>), un record per
2806 <p>Il problema e' la gestione di questo file: quando gli
2807 host cambiano IP si devono aggiornare i records, e c'e' poi
2808 il problema di distribuire questo file tra i vari hosts
2809 della propia LAN. Un metodo semplice per distribuire questo
2810 file e' utilizzare <tt class=
2811 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2812 questo infatti legge e onora il file <tt class=
2813 "docutils literal"><span class="pre">hosts</span></tt>
2814 locale e lo <em>distribuisce</em> ai clients.</p>
2816 <p>Modificare (riconducendola a un ip interno, cosi'
2817 annullandola) la risoluzione di un nome di dominio e' un
2818 modo drastico e funzionale per <em>annullarlo</em>
2819 rendendolo indisponibile alla propia rete locale, ad
2820 esempio aggiungere al file <tt class=
2821 "docutils literal"><span class=
2822 "pre">/etc/hosts</span></tt>:</p>
2823 <pre class="literal-block">
2824 127.0.0.1 www.facebook.com
2827 <p>Impedira' agli utenti della LAN di raggiungere
2828 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2831 <div class="section" id="hostname">
2832 <h2><a class="toc-backref" href=
2833 "#id56">4.8 Hostname</a></h2>
2835 <p>Ogni computer ha un <em>propio nome</em> visualizzabile
2836 (e modificabile) con il comando <tt class=
2837 "docutils literal"><span class=
2838 "pre">hostname</span></tt>.</p>
2840 <p>Per modificare in modo permanente il nome del computer
2841 si modifichi il contenuto del file <tt class=
2842 "docutils literal"><span class=
2843 "pre">/etc/hostname</span></tt>.</p>
2845 <p>Tipicamente si vuole mantenere una correlazione tra il
2846 nome dell'host, o meglio la stringa con cui il server si
2847 qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
2848 di <em>servizi virtuali</em> ci sara' un <em>nome
2849 server</em> principale associato al <em>PTR</em> condiviso.
2850 Non e' automatico che un servizio, ad esempio un server di
2851 posta, si qualifichi leggendo il contenuto di questo file e
2852 magari aggiungendo come suffisso il dominio di cui fa parte
2853 l'host: a volte questo parametro puo' essere specificato
2854 nel file di configurazione del servizio:</p>
2855 <pre class="literal-block">
2856 * Squid: ``visible_hostname``
2858 * Postfix: ``myhostname``
2863 <div class="section" id="dnsmasq">
2864 <h1><a class="toc-backref" href=
2865 "#id57">5 DNSmasq</a></h1>
2867 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2868 forwarder e un server DHCP caratterizzato dalla facilita' di
2869 configurazione, dalla leggerezza e dalla possibilita' di
2870 modificare rapidamente i record DNS serviti alla rete. Puo'
2871 essere anche utilizzato come <cite>server per il boot da rete
2872 <http://www.debian-administration.org/articles/478>_</cite>
2875 <p>Dnsmasq e' un interessante alternativa all'uso del server
2876 DNS Bind in modalita' cache-only (non autoritativo)
2877 accompagnato dal server DHCPD. I vantaggi sono:</p>
2880 <li>Leggerezza: puo' essere fatto girare su una macchina
2881 relativamente debole in caso di bisogno.</li>
2883 <li>Rapidita' di configurazione (in particolare per servire
2884 dei record A / MX alla rete, modificando al volo i valori
2885 originali ospitati sul server DNS Publico).</li>
2887 <li>Ben integrato con connssioni PPP (utile se dovete
2888 rendere disponibile rapidamente una connessione a internet
2889 a una rete in difficolta').</li>
2892 <p>Tutto cio' rende Dnsmasq una soluzione valida in
2893 particolare quando si deve intervenire in una rete
2894 pre-esistente in cui il server principale e' in crisi: si
2895 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2896 <em>mascherare</em> i servizi al momento non disponibili.
2897 Molto utile per scopi didattici, sopratutto per testare
2898 server SMTP impostando al volo i campi MX per nomi di dominio
2901 <div class="section" id="configurazione">
2902 <h2><a class="toc-backref" href=
2903 "#id58">5.1 Configurazione</a></h2>
2905 <p>Vediamo alcune direttive di basi del file di
2906 configurazione <tt class="docutils literal"><span class=
2907 "pre">/etc/dnsmasq.conf</span></tt> utili per la
2908 configurazione sia del DNS cache che per il DHCP
2911 <dl class="docutils">
2912 <dt>domain-needed</dt>
2914 <dd>Non inoltrare query ai server DNS esterni per nomi
2915 semplici (es andrea, portatile, pippo) che verranno
2916 risolti solo in locale o causeranno direttamente una
2917 risposta <em>not found</em> .</dd>
2921 <dd>Simile alla voce precedente ma per i reverse
2926 <dd>Nome di dominio della rete da passare ai client.</dd>
2928 <dt>expand_hosts</dt>
2930 <dd>Aggiunge il <tt class="docutils literal"><span class=
2931 "pre">nome</span> <span class="pre">host</span></tt> (
2932 <tt class="docutils literal"><span class=
2933 "pre">/etc/hostname</span></tt>) dei client al nome di
2934 dominio per qualificarli in rete, senza bisogno di dover
2935 comporre a un elenco statico di record nel file
2936 <tt class="docutils literal"><span class=
2937 "pre">/etc/hosts</span></tt> o nello stesso file di
2938 configurazione di dnsmasq. Es: se un vostro client si
2939 chiama <tt class="docutils literal"><span class=
2940 "pre">chrome</span></tt> e il vostro dominio <tt class=
2941 "docutils literal"><span class=
2942 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
2943 il campo <em>A</em> per il dominio <tt class=
2944 "docutils literal"><span class=
2945 "pre">chrome.piffa.net</span></tt> diretto all'ip che
2946 verra' assegnato al client.</dd>
2950 <div class="section" id="dhcp">
2951 <h2><a class="toc-backref" href=
2952 "#id59">5.2 DHCP</a></h2>
2954 <p>Per attivare il demone DHCP di dnsmaq basta aggiungere
2955 al file di configurazione il <em>range</em> degli ip che si
2956 vuole assegnare ai client con il <em>lease time</em> (tempo
2957 di rilascio: quanto a lungo saranno validi gli ip
2958 assegnati) espresso in ore.</p>
2960 <p>Si faccia <em>attenzione</em>: in una rete puo' esseere
2961 presente <strong>un solo server DHCP</strong>, o per meglio
2962 dire qualunque server DHCP ascolta sul broadcast <tt class=
2963 "docutils literal"><span class=
2964 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
2965 un pacchetto di richesta DHCP. Quindi non fate partire
2966 inavvertitamente un server DHCP in una rete gia' servita e
2967 <strong>non vi azzardate ad andare in giro con un portatile
2968 con un server DHCP attivo</strong> nelle reti altrui.
2969 Questo vale anche per i laboratori di informatica dei corsi
2970 di reti: non fate partire il vostro server DHCP se siete
2971 collegati alla rete interna!</p>
2973 <p>/etc/dnsmasq.conf (riga 118):</p>
2974 <pre class="literal-block">
2975 dhcp-range=192.168.0.20,192.168.0.50,24h
2979 <div class="section" id="dns-cache">
2980 <h2><a class="toc-backref" href=
2981 "#id60">5.3 DNS cache</a></h2>
2983 <p>Aggiungere al file <tt class=
2984 "docutils literal"><span class=
2985 "pre">/etc/resolv.conif</span></tt> il nameserver localhost
2986 in cima alla lista dei <em>nameserver</em> disponibili.
2987 Dnsmasq usera' la propia cache e in caso non abbia
2988 disponibile il <em>record DNS</em> richiesto fara' partire
2989 una query al primo DNS:</p>
2990 <pre class="literal-block">
2991 nameserver 127.0.0.1
2994 <p>Questo pero' potrebbe essere problematico se un altro
2995 servizio, ad esempio il DHCP client, riscrive il contenuto
2996 del file <tt class="docutils literal"><span class=
2997 "pre">/etc/resolv.conf</span></tt>. Per superare il
2998 problema si aggiunga (riga 20) al file di configurazione
2999 <tt class="docutils literal"><span class=
3000 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
3001 <pre class="literal-block">
3002 prepend domain-name-servers 127.0.0.1;
3005 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3006 (per la connessione ADSL) a intervenire sul file <tt class=
3007 "docutils literal"><span class=
3008 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
3009 <tt class="docutils literal"><span class=
3010 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3011 <tt class="docutils literal"><span class=
3012 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
3013 internet e' ADSL raramente dovreste aver bisogno di
3014 cambiare i DNS una volta impostati (a meno che non usiate
3018 <div class="section" id="dhcpd">
3019 <h2><a class="toc-backref" href=
3020 "#id61">5.4 DHCPd</a></h2>
3022 <p>Dnsmasq puo' lavorare anche come DHCP server per la
3027 <div class="section" id="samba">
3028 <h1><a class="toc-backref" href=
3029 "#id62">6 Samba</a></h1>
3031 <p>Samba e' un progetto libero che fornisce servizi di
3032 condivisione di file e stampanti a client SMB/CIFS.</p>
3034 <p>Samba e' liberamente disponibile, al contrario di altre
3035 implementazioni SMB/CIFS, e permette di ottenere
3036 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
3038 <p>Samba e' un software che puo girare su piattaforme che non
3039 siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
3040 390, OpenVMS e altri sistemi operativi. Samba utilizza il
3041 protocollo TCP/IP utilizzando i servizi offerti sul server
3042 ospite. Quando correttamente configurato, permette di
3043 interagire con client o server Microsoft Windows come se
3044 fosse un file e print server Microsoft agendo da Primary
3045 Domain Controller (PDC) o come Backup Domain Controller, puo'
3046 inoltre prendere parte ad un dominio Active Directory.</p>
3048 <div class="section" id="pacchetti">
3049 <h2><a class="toc-backref" href=
3050 "#id63">6.1 Pacchetti</a></h2>
3052 <p>Pacchetti da installare per utilizzare Samba in
3053 modalita' client <a class="footnote-reference" href="#id5"
3054 id="id4" name="id4">[2]</a></p>
3055 <pre class="literal-block">
3059 <p>Pacchetti da installare per utilizzare Samba in
3060 modalita' server:</p>
3061 <pre class="literal-block">
3062 samba smbfs smbclient
3065 <table class="docutils footnote" frame="void" id="id5"
3072 <tbody valign="top">
3074 <td class="label"><a class="fn-backref" href=
3077 <td>Anche se nato per i sistemi Windows, Samba puo'
3078 essere usato anche per montare cartelle sotto
3079 GNU/Linux come alternativa a NFS. Per la condivisione
3080 di stampanti sarebbe invece opportuno intervenire
3081 direttamente su <tt class=
3082 "docutils literal"><span class=
3083 "pre">CUPS</span></tt>.</td>
3088 <p>Durante la prima installazione viene chiesto il nome del
3089 gruppo di appartenenza, il default per Windows e'
3090 <tt class="docutils literal"><span class=
3091 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3092 <tt class="docutils literal"><span class=
3093 "pre">208</span></tt> .</p>
3095 <p>Per riconfigurare Samba si usi il comando:</p>
3096 <pre class="literal-block">
3097 dpkg-reconfigure samba-common
3101 <div class="section" id="passwords-e-autenticazione">
3102 <h2><a class="toc-backref" href=
3103 "#id64">6.2 Passwords e
3104 autenticazione</a></h2>
3106 <p>Per poter configurare Samba in modo che usi un sistema
3107 di negoziazione degli accessi alle cartelle condivise
3108 basato su accoppiate <em>nome utente / password</em>
3109 bisogna distinguere tra 3 livelli di password (e
3110 generalmente volete usare <em>sempre la stessa
3111 password</em> per ognuno di questi) e delle differenze tra
3112 le modalita' di <em>autenticazione</em> (e quindi anche di
3113 criptaggio delle passwords) usate da sistemi GNU/Linux e
3116 <dl class="docutils">
3117 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3119 <dd>E' la password dell'<em>utente di sistema</em> che
3120 viene usata sul sistema operativo su cui gira il software
3121 Samba. E' importante tenere conto anche delle
3122 <em>user-id</em> e <em>group-id</em> degli utenti che
3123 dovranno fisicamente scrivere sui file system. Se un
3124 utente non puo' scrivere in una certa posizione del file
3125 system (ad esempio nella cartella <tt class=
3126 "docutils literal"><span class=
3127 "pre">/mnt/condivisione</span></tt> che sara' stata
3128 necessariamente creata inizialmente dall'utente
3129 <tt class="docutils literal"><span class=
3130 "pre">root</span></tt>) per mancanza dei privilegi di
3131 scrittura allora neanche Samba potra' farlo nel momento
3132 in mette a disposizione la risorsa all'utente. Se si
3133 montano file-system dedicati per le condivisioni
3134 controllare i permessi e propieta' dei <em>punti di
3135 mount*</em>. Queste passwords sono salvate nel solito
3136 file /etc/shadow (richiamato da /etc/passwd).</dd>
3138 <dt>2 Password per l'applicativo Samba</dt>
3140 <dd>Samba deve essere compatibile con Windows e quindi
3141 utilizzare un sistema di criptazione delle password
3142 diverso da /etc/shadow . Le password per Samba possono
3143 essere gestite ad esempio col comando <tt class=
3144 "docutils literal"><span class=
3145 "pre">smbpasswd</span></tt> e vengono generalmente
3146 salvate all'interno di <tt class=
3147 "docutils literal"><span class=
3148 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3150 <dt>3 Password per Windows.</dt>
3152 <dd>Gli utenti Windows effettuano il log-in alla partenza
3153 della sessione di Windows. Se si avra' l'accortezza di
3154 usare sempre la <em>stessa password</em> data
3155 precedentemente anche a Windows (o viceversa impostare la
3156 password per GNU/Linux / Samba uguale a quella di
3157 Windows) l'utente potra' accedere automaticamente alle
3158 condivisioni a lui disponibili.</dd>
3162 <div class="section" id="creazione-utenti">
3163 <h2><a class="toc-backref" href=
3164 "#id65">6.3 Creazione Utenti</a></h2>
3166 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3167 attenzione a <em>non dargli una shell di sistema</em>. Gli
3168 utenti Windows che accedono al server solo per le
3169 condivisioni non hanno bisogno di poter eseguire comandi
3172 <p>Creazione di un utente denominato sambo:</p>
3173 <pre class="literal-block">
3174 adduser --shell /bin/false sambo
3177 <p>Nel file <tt class="docutils literal"><span class=
3178 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3179 <pre class="literal-block">
3180 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3183 <p>Aggiunta dell'utente al database delle password per
3184 Samba e generazione della sua password:</p>
3185 <pre class="literal-block">
3189 <p>Se successivamente si vorra' modificare la password di
3190 un utente gia' esistente si usi:</p>
3191 <pre class="literal-block">
3195 <p>La password sotto Windows verra' modificata sul sistema
3199 <div class="section" id="creare-la-condivisione">
3200 <h2><a class="toc-backref" href=
3201 "#id66">6.4 Creare la
3202 condivisione</a></h2>
3204 <p>La condivisione altro non e' che una cartella sul server
3205 che viene resa disponibile ai client negoziando l'accesso
3206 in base a una autenticazione basata su <em>user-name /
3207 password</em>. E' per altro possibile permettere l'accesso
3208 a una risorsa a chiunque indiscriminatamente (a tutti i
3209 <tt class="docutils literal"><span class=
3210 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3211 punto di vista della sicurezza. Si decida se la cartella
3212 condivisa debba risiedere nella <em>home</em> di un utente
3213 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3214 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3215 Nel secondo caso si potranno gestire gli accessi sotto
3216 GNU/Linux tramite i gruppi.</p>
3218 <p>Creazione della risorsa sambo_share nella home
3219 dell'utente sambo:</p>
3220 <pre class="literal-block">
3221 # mkdir /home/sambo/sambo_share
3222 # chown sambo:sambo /home/sambo/sambo_share/
3225 <div class="section" id=
3226 "sicurezza-permessi-di-esecuzione-sul-server">
3227 <h3><a class="toc-backref" href=
3228 "#id67">6.4.1 Sicurezza: permessi di
3229 esecuzione sul server</a></h3>
3231 <p>Bisognerebbe notare sul server i permessi di
3232 esecuzione del file-system che ospita la cartella da
3233 condividere. Se i file che saranno contenuti nella
3234 condivisione saranno da usarsi sotto Windows non c'e'
3235 motivo che questi siano eseguibili sotto GNU/Linux. Si
3236 potrebbe avere quindi, ipotizzando una condivisione in
3237 <tt class="docutils literal"><span class=
3238 "pre">/mnt/share</span></tt> che risieda su di un file
3239 system dedicato:</p>
3241 <p><tt class="docutils literal"><span class=
3242 "pre">/etc/fstab</span></tt></p>
3245 /dev/hda10 /mnt/share ext3 rw,
3246 <strong>nosuid,noexec</strong> 0 3
3249 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3250 possibilita' di eseguire programmi con credenziali
3255 <div class="section" id=
3256 "configurazione-dell-applicativo-samba-vero-e-proprio">
3257 <h2><a class="toc-backref" href=
3258 "#id68">6.5 Configurazione
3259 dell'applicativo Samba vero e proprio.</a></h2>
3261 <p>Avendo preparato gli utenti (ancora una volta: non si
3262 dia una shell completa a un utente che serve solo per Samba
3263 o la posta elettronica) e la cartella sul file system si
3264 puo' procedere a configurare la condivisione su Samba.</p>
3266 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3267 vim si usi 235gg ):</p>
3268 <pre class="literal-block">
3270 # Percorso della cartella condivisa
3271 path = /home/sambo/sambo_share
3272 # Se gli utenti possono scrivere / modificare file
3274 # Negoziazione degli accessi su base utenti / passwords
3277 # #######################################
3278 # Altri parametri opzionali di interesse
3279 # Se posso vedere la condivisione da esplora risorse
3280 # anche se non ho i privilegi per accedervi.
3282 # Commento indicativo della risorsa
3283 comment = Condivisione per Sambo
3286 <p>Dopo aver salvato il file si puo' fare un primo
3287 controllo tramite l'utility <tt class=
3288 "docutils literal"><span class="pre">testparm</span></tt> ,
3289 che controlla la sintassi del file di configurazione di
3290 Samba. Se questo non rileva problemi si puo' procedere a un
3291 <tt class="docutils literal"><span class="pre">#</span>
3292 <span class="pre">/etc/init.d/samba</span> <span class=
3293 "pre">restart</span></tt> .</p>
3296 <div class="section" id="testare-il-servizio">
3297 <h2><a class="toc-backref" href=
3298 "#id69">6.6 Testare il Servizio</a></h2>
3300 <p>Come testare il servizio</p>
3303 <pre class="literal-block">
3304 smbclient -U sambo -L localhost
3307 <p>Questo comando permette di esplorare la risorsa
3308 qualificandosi come utente, in questo modo potete testare
3309 il corretto funzionamento dell'autenticazione. Si provi
3310 inizialmente a sbagliare la password deliberatamente, poi a
3311 inserirla correttamente: dovrebbero essere visibili le
3312 risorse disponibili al solo utente sambo: la suo /home e la
3313 cartella samba_share:</p>
3314 <pre class="literal-block">
3315 Sharename Type Comment
3316 --------- ---- -------
3317 sambo_share Disk Condivisione per Sambo
3318 print$ Disk Printer Drivers
3319 IPC$ IPC IPC Service (base server)
3320 sambo Disk Home Directories
3323 <p>In particolare l'ultima voce relativa alla home
3324 directory dell'utente dovrebbe essere visibile solo agli
3325 utenti autenticati.</p>
3327 <p>In alternativa e' possibile montare realmente la
3328 condivisone anche su GNU/Linux tramite un client per samba
3329 e testarne il corretto funzionamento:</p>
3330 <pre class="literal-block">
3331 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3336 <div class="section" id="server-di-posta-postfix">
3337 <h1><a class="toc-backref" href=
3338 "#id70">7 Server di posta: Postfix</a></h1>
3340 <p>Il server di posta che prenderemo in considerazione e'
3341 Postfix, a seguire un estratto di un file do configurazione
3342 <em>semplie</em> con l'abilizazione delle <em>Maildir</em>
3343 nelle <tt class="docutils literal"><span class=
3344 "pre">/home</span></tt> degli utenti per la consegna della
3347 <p><tt class="docutils literal"><span class=
3348 "pre">/etc/postfix/main.cf</span></tt>:</p>
3349 <pre class="literal-block">
3350 # ...segue dalla riga ~30
3351 myhostname = 162.piffa.net
3352 alias_maps = hash:/etc/aliases
3353 alias_database = hash:/etc/aliases
3354 myorigin = 162.piffa.net
3355 mydestination = 162.piffa.net, localhost
3356 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3357 # dovrete usare un realy host per l'invio della posta
3358 relayhost = smtp.piffa.net
3359 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3361 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3362 # in una Maildir invece che la Mailbox in /var/mail/utente
3363 # si disabiliti procmail
3364 #mailbox_command = procmail -a "$EXTENSION"
3366 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3367 # nella home dell'utente:
3368 home_mailbox = Maildir/
3369 mailbox_size_limit = 0
3370 recipient_delimiter = +
3371 inet_interfaces = all
3374 <div class="section" id="imap-e-pop">
3375 <h2><a class="toc-backref" href=
3376 "#id71">7.1 Imap e pop</a></h2>
3378 <p>Postfix e' un server SMTP, di conseguenza se volete che
3379 i vostri utenti possano <em>scaricare</em> in locale la
3380 posta generalemtne volete mettere a loro disposizione un
3381 server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
3384 <dl class="docutils">
3385 <dt>Pacchetti da installare</dt>
3387 <dd>courier-imap courier-pop</dd>
3390 <p>i noti che IMAP necessita delle Maildir, non funziona
3391 con le Mailbox in <tt class="docutils literal"><span class=
3392 "pre">/var/mail/</span></tt> .</p>
3394 <div class="section" id="web-client">
3395 <h3><a class="toc-backref" href=
3396 "#id72">7.1.1 Web client</a></h3>
3398 <p>Per mettere a disposizione degli utenti un client web
3399 per gestire la propia posta si installi il pacchetto:
3400 <tt class="docutils literal"><span class=
3401 "pre">squirrelmail</span></tt> . Ci sono tanti altri
3402 client web disponibili: questo e' particolarmente
3403 semplice. Naturalemte dovrete aver installato: <tt class=
3404 "docutils literal"><span class="pre">php5</span>
3405 <span class="pre">apache2</span></tt> .</p>
3407 <p>L'interfaccia dovrebbe essere disponibile all'url:
3408 <tt class="docutils literal"><span class=
3409 "pre">http://localhost/squirrelmail</span></tt> . Se
3410 cosi' non fosse assicuratevi che Apache abbia incluso il
3411 file di configurazione di squirrelmail:</p>
3412 <pre class="literal-block">
3413 cd /etc/apache2/conf.d/
3414 ln -s /etc/squirrelmail/apache.conf ./
3420 <div class="section" id="firewall">
3421 <h1><a class="toc-backref" href=
3422 "#id73">8 Firewall</a></h1>
3424 <p>In Informatica, nell'ambito delle reti di computer, un
3425 firewall (termine inglese dal significato originario di
3426 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3427 italiano anche parafuoco o parafiamma) e' un componente
3428 passivo di difesa perimetrale che può anche svolgere
3429 funzioni di collegamento tra due o piu' tronconi di rete.
3430 Usualmente la rete viene divisa in due sottoreti: una, detta
3431 esterna, comprende l'intera Internet mentre l'altra interna,
3432 detta LAN (Local Area Network), comprende una sezione piu' o
3433 meno grande di un insieme di computer locali. In alcuni casi
3434 e' possibile che si crei l'esigenza di creare una terza
3435 sottorete detta DMZ (o zona demilitarizzata) atta a contenere
3436 quei sistemi che devono essere isolati dalla rete interna ma
3437 devono comunque essere protetti dal firewall.</p>
3439 <p>Una prima definizione chiusa di firewall è la
3442 <p>Apparato di rete hardware o software che filtra tutti i
3443 pacchetti entranti ed uscenti, da e verso una rete o un
3444 computer, applicando regole che contribuiscono alla sicurezza
3447 <p>In realtà un firewall può essere realizzato con un
3448 normale computer (con almeno due schede di rete e software
3449 apposito), può essere una funzione inclusa in un router o
3450 può essere un apparato specializzato. Esistono inoltre i
3451 cosiddetti "firewall personali", che sono programmi
3452 installati sui normali calcolatori, che filtrano solamente i
3453 pacchetti che entrano ed escono da quel calcolatore; in tal
3454 caso viene utilizzata una sola scheda di rete.</p>
3456 <p>La funzionalità principale in sostanza è quella di
3457 creare un filtro sulle connessioni entranti ed uscenti, in
3458 questo modo il dispositivo innalza il livello di sicurezza
3459 della rete e permette sia agli utenti interni che a quelli
3460 esterni di operare nel massimo della sicurezza. Il firewall
3461 agisce sui pacchetti in transito da e per la zona interna
3462 potendo eseguire su di essi operazioni di: controllo modifica
3465 <p>Questo grazie alla sua capacità di "aprire" il
3466 pacchetto IP per leggere le informazioni presenti sul suo
3467 header, e in alcuni casi anche di effettuare verifiche sul
3468 contenuto del pacchetto.</p>
3470 <div class="section" id="links">
3471 <h2><a class="toc-backref" href=
3472 "#id74">8.1 Links</a></h2>
3475 <li><a class="reference external" href=
3476 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3478 <li><a class="reference external" href=
3479 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3480 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3484 <div class="section" id="ipfilter">
3485 <h2><a class="toc-backref" href=
3486 "#id75">8.2 Ipfilter</a></h2>
3488 <p>Link: <a class="reference external" href=
3489 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3490 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3492 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3493 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3494 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3495 etc) e del livello 1 (MAC source address). Iptables
3496 comunque permette di fare il <em>connection-tracking</em>,
3497 mediante il quale possiamo implementare il Network Address
3500 <p>Netfilter non ricostruisce il flusso di dati tra
3501 pacchetti, non puo' quindi rilevare la presenza di virus o
3502 simili che si trasmettono su pacchetti separati:
3503 ricomporre, analizzare e tornare a scomporre i frammenti
3504 rtichiederebbe troppa RAM e risorse di sistema, con il
3505 conseguente rischio di saturare il firewall fino
3506 all'abbandono dei nuovi pacchetti in transito. Ci sono
3507 altri software piu' adatti a questi compiti, ad esempio un
3508 proxy HTTP come Squid che e' appunto una applicazione di
3509 quarto livello, progettata e strutturata per analizzare e
3510 modificare i flussi di dati (il <em>contenuto</em> dei
3511 pacchetti, non le sole <em>inestazioni</em>) facendo
3512 abbondate uso delle risorse RAM e di calcolo del sistema.
3513 Non a caso su macchine embedded dalle prestazioni molto
3514 ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3515 massimo le risorse di sistema per gestire il traffico di
3516 una rete 10/100, mentre il lavoro tipico svolto da
3517 netfilter e' quasi irrilevante.</p>
3520 <div class="section" id="progettazione-di-un-firewall">
3521 <h2><a class="toc-backref" href=
3522 "#id76">8.3 Progettazione di un
3525 <p>Per implementare un firewall bisogna decidere un aio di
3526 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3527 al filtraggio, il tipo di hardware.</p>
3529 <div class="section" id="collocazione">
3530 <h3><a class="toc-backref" href=
3531 "#id77">8.3.1 Collocazione</a></h3>
3533 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3534 della rete, decidere se diversi reparti di una azienda si
3535 possano vedere tra loro e in che misura.</p>
3537 <p>Collocazione:</p>
3540 <ol class="arabic simple">
3543 <li>tra router e servers / LAN</li>
3545 <li>Unico server / router / firewall e connessi
3546 rischi. considerare l'acquisto di un router hardware
3551 <dl class="docutils">
3552 <dt>Layeed security:</dt>
3554 <dd>Implementare piu' device / software sui diversi
3555 livelli: <a class="reference external" href=
3556 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3557 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3561 <div class="section" id="policy-di-default">
3562 <h3><a class="toc-backref" href=
3563 "#id78">8.3.2 Policy di default</a></h3>
3565 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3569 <div class="section" id="hardware">
3570 <h3><a class="toc-backref" href=
3571 "#id79">8.3.3 Hardware</a></h3>
3573 <p>Sostanzialmente potremmo distinquere due tipologie di
3576 <dl class="docutils">
3577 <dt>Network appliance dedicata::</dt>
3579 <dd>Un dispositivo hardware dedicato alla funzione di
3580 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3581 firewall economici altro non sono che Linux box molto
3584 <dt>Server / Personal computer:</dt>
3586 <dd>Un server sul quale viene fatto girare Netfilter ad
3587 uso del server stesso e della rete connessa.</dd>
3590 <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3591 flessibilita', strumenti di gestione, sicurezza,
3596 <div class="section" id=
3597 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3598 <h2><a class="toc-backref" href=
3599 "#id80">8.4 Percorso dei pacchetti tra
3600 tabelle e catene</a></h2>
3602 <p>link: <a class="reference external" href=
3603 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3604 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3607 <div class="section" id="concetti-di-base">
3608 <h2><a class="toc-backref" href=
3609 "#id81">8.5 Concetti di base</a></h2>
3611 <div class="section" id="tabelle-catene-regole">
3612 <h3><a class="toc-backref" href=
3613 "#id82">8.5.1 Tabelle, catene,
3616 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3619 <li>filter - Regola il firewalling: quali pacchetti
3620 accettare, quali bloccare</li>
3622 <li>nat - Regola le attività di natting</li>
3624 <li>mangle - Interviene sulla alterazione dei
3628 <p>Ogni tabella ha delle catene (chains) predefinite
3629 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3630 aggiunte catene custom. Ogni catena è composta da un
3631 elenco di regole (rules) che identificano pacchetti di
3632 rete secono criteri diversi (es: -p tcp --dport 80 -d
3633 10.0.0.45) Ogni regola termina con una indicazione
3634 (target) su cosa fare dei pacchetti identificati dalla
3635 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3638 <div class="section" id="match">
3639 <h3><a class="toc-backref" href=
3640 "#id83">8.5.2 Match</a></h3>
3642 <p>I Match di una regola (rule) servono a testare un
3643 pacchetto per valutare se corrisponda a certe
3644 caratteriscttiche. I match di possono servire a
3645 controllare se un pacchetto e' destinato a una porta
3646 particolare o utilizza un protocollo particolare.</p>
3648 <p>Alcuni esempi:</p>
3650 <dl class="docutils">
3651 <dt>-p [!] proto</dt>
3653 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3654 udp, gre, ah...)</dd>
3656 <dt>-s [!] address[/mask]</dt>
3658 <dd>Indirizzo IP sorgente (o network con maschera di
3661 <dt>-d [!] address[/mask]</dt>
3663 <dd>Indirizzo IP destinazione (o network)</dd>
3665 <dt>-i [!] interface[+]</dt>
3667 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3669 <dt>-o [!] interface[+]</dt>
3671 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3674 <table class="docutils option-list" frame="void" rules=
3676 <col class="option">
3677 <col class="description">
3679 <tbody valign="top">
3681 <td class="option-group"><kbd><span class=
3682 "option">-f</span></kbd></td>
3684 <td>Frammento di pacchetto</td>
3690 <div class="section" id="targets">
3691 <h3><a class="toc-backref" href=
3692 "#id84">8.5.3 Targets</a></h3>
3694 <p>Se un pacchetto soddisfa le condizioni del Match
3695 <em>salta</em> (jump) su uno dei target possibili, in
3696 caso contrario continua il suo percorso tra regole catene
3699 <p>Target principali:</p>
3701 <dl class="docutils">
3702 <dt><em>-j ACCEPT</em></dt>
3704 <dd>Il pachetto matchato viene accettato e procede
3705 verso la sua destinazione. Si usa per definire il
3706 traffico permesso.</dd>
3708 <dt><em>-j DROP</em></dt>
3710 <dd>Il pacchetto viene rifiutato e scartato, senza
3711 alcuna notifica al mittente. Si usa, in alternativa a
3712 REJECT, per bloccare traffico.</dd>
3714 <dt><em>-j REJECT</em></dt>
3716 <dd>Il pacchetto viene rifiutato. Al mittente viene
3717 mandato un pacchetto (configurabile) di notifica tipo
3718 ICMP port-unreachable (--reject-with
3719 icmp-port-unreachable)</dd>
3722 <table class="docutils option-list" frame="void" rules=
3724 <col class="option">
3725 <col class="description">
3727 <tbody valign="top">
3729 <td class="option-group"><kbd><span class=
3730 "option">-t <var>LOG</var></span></kbd></td>
3732 <td>Il pacchetto viene loggato via syslog e procede
3733 l'attraversamento della catena. Opzioni:
3734 (--log-level, --log-prefix, --log-tcp-sequence,
3735 --log-tcp-options, --log-ip-options)</td>
3739 <td class="option-group"><kbd><span class=
3740 "option">-j <var>DNAT</var></span></kbd></td>
3742 <td>Viene modificato l'IP di destinazione del
3743 pacchetto. Target disponibile solo in nat /
3744 PREROUTING e nat / OUTPUT. L'opzione
3745 --to-destination IP:porta definisce il nuovo IP di
3746 destinazione. Si usa tipicamente su network
3747 firewall che nattano server di una DMZ</td>
3751 <td class="option-group"><kbd><span class=
3752 "option">-j <var>SNAT</var></span></kbd></td>
3754 <td>Viene modificato l'IP sorgente. Solo in nat /
3755 POSTROUTING. Prevede l'opzione --to-source
3756 IP:porta. Si usa per permettere l'accesso a
3757 Internet da una rete locale con IP privati.</td>
3761 <td class="option-group"><kbd><span class=
3762 "option">-j <var>MASQUERADE</var></span></kbd></td>
3764 <td>Simile a SNAT, si applica quando i pacchetti
3765 escono da interfacce con IP dinamico (dialup, adsl,
3766 dhcp...). Si usa solo in nat / POSTROUTING e
3767 prevede l'opzione --to-ports porte.</td>
3771 <td class="option-group"><kbd><span class=
3772 "option">-j <var>REDIRECT</var></span></kbd></td>
3774 <td>Redirige il pacchetto ad una porta locale.
3775 Usabile solo in nat / PREROUTING e nat / OUTPUT è
3776 previsto per fare un transparent proxy (con proxy
3777 server in esecuzione sulla macchina con
3782 <td class="option-group"><kbd><span class=
3783 "option">-j <var>RETURN</var></span></kbd></td>
3785 <td>Interrompe l'attraversamento della catena. Se
3786 questa è una secondaria, il pacchetto torna ad
3787 attraversare la catena madre da punto in cui aveva
3788 fatto il salto nella secondaria. Se il RETURN è in
3789 una delle catene di default, il pacchetto
3790 interrompe l'attraversamento e segue la policy di
3795 <td class="option-group"><kbd><span class=
3796 "option">-j <var>TOS</var></span></kbd></td>
3798 <td>Usabile solo nella tabella mangle, permette di
3799 cambiare il TOS (Type Of Service) di un pacchetto
3800 con l'opzione --set-tos. Per un elenco dei
3801 parametri disponibili: iptables -j TOS -h</td>
3805 <td class="option-group"><kbd><span class=
3806 "option">-j <var>MIRROR</var></span></kbd></td>
3808 <td>Curioso e sperimentale, questo target invia un
3809 pacchetto speculare al mittente. In pratica è come
3810 se facesse da specchio per tutti i pacchetti
3811 ricevuti. Da usare con cautela, per evitare
3812 attacchi DOS indiretti.</td>
3819 <div class="section" id="tabella-filter">
3820 <h2><a class="toc-backref" href=
3821 "#id85">8.6 Tabella Filter</a></h2>
3823 <p>E' quella implicita e predefinita (-t filter) Riguarda
3824 le attività di filtraggio del traffico. Ha 3 catene
3825 di default: INPUT - Riguarda tutti i pacchetti destinati al
3826 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3827 i pacchetti che sono originati dal sistema e destinati ad
3828 uscire. FORWARD - Riguarda i pacchetti che attraversano il
3829 sistema, con IP sorgente e destinazione esterni.</p>
3831 <p>Esempio per permettere accesso alla porta 80 locale:
3832 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3833 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3836 <p>Esempio per permettere ad un pacchetto con IP sorgente
3837 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3838 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3842 <div class="section" id=
3843 "flush-automatico-per-macchine-remote">
3844 <h2><a class="toc-backref" href=
3845 "#id86">8.7 Flush automatico per macchine
3848 <p>Se state provando una configurazione del firewall per
3849 una macchina remota e' buona norma per evitare brutte
3850 figure attivare uno script che faccia il <em>flush</em>
3851 delle regole dopo qualche minuto. Potreste infatti
3852 inavvertitamente impostare una regola che vi impedisca di
3853 raggiungere la macchina remota, cosi' da non poter neanche
3854 eliminare quella regola e ripristinare la situazioe
3857 <p><em>Veramnete</em>, prima di lavorare sul firewall di
3858 una macchina remota inpostate almeno un <tt class=
3859 "docutils literal"><span class="pre">at</span> <span class=
3860 "pre">now</span> <span class="pre">+5</span> <span class=
3861 "pre">min</span></tt> o con un'oretta di margine per fare
3862 il <em>flush</em> delle regole (su tutte le tabelle):</p>
3863 <pre class="literal-block">
3865 at> /sbin/iptables -F
3870 <div class="section" id="gestione-regole-rules">
3871 <h2><a class="toc-backref" href=
3872 "#id87">8.8 Gestione regole
3875 <p>Il comando iptables viene usato per ogni attivitÃ
3876 di gestione e configurazione.</p>
3878 <p>Inserimento regole:</p>
3880 <dl class="docutils">
3881 <dt>iptables -A CATENA ...</dt>
3883 <dd>Aggiunge una regola alla fine della catena
3886 <dt>iptables -I CATENA [#] ...</dt>
3888 <dd>Inserisce alla riga # (default 1) una regola nella
3889 catena indicata</dd>
3891 <dt>iptables -N CATENA</dt>
3893 <dd>Crea una nuova catena custom</dd>
3895 <dt>iptables -P CATENA TARGET</dt>
3897 <dd>Imposta il target di default per la catena
3901 <p>Rimozione regole e azzeramenti:</p>
3903 <dl class="docutils">
3904 <dt>iptables -F [catena]</dt>
3906 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3908 <dt>iptables -X [catena]</dt>
3910 <dd>Ripulisce tutte le catene custom (o quella
3913 <dt>iptables -Z [catena]</dt>
3915 <dd>Azzera i contatori sulle catene</dd>
3917 <dt>iptables -D catena #</dt>
3919 <dd>Cancella la regola numero # dalla catena
3923 <p>Interrogazione:</p>
3925 <dl class="docutils">
3926 <dt>iptables -L</dt>
3928 <dd>Elenca le regole esistenti</dd>
3930 <dt>iptables -L -n -v</dt>
3932 <dd>Elenca, senza risolvere gli host, in modo verboso le
3933 regole esistenti</dd>
3937 <div class="section" id="salvataggio-regole">
3938 <h2><a class="toc-backref" href=
3939 "#id88">8.9 Salvataggio regole</a></h2>
3941 <p>Il comando <tt class="docutils literal"><span class=
3942 "pre">iptables</span></tt> serve per interagire con il
3943 framework <tt class="docutils literal"><span class=
3944 "pre">Netfilter</span></tt> ch gestisce il firewall di
3945 Linux al livello del kernel. Questo comporta, in modo
3946 analogo a quando avvene col comando <tt class=
3947 "docutils literal"><span class="pre">ifconfig</span></tt>,
3948 che i cambiameti impostati siano in <em>tempo reale,
3949 RAM</em>, non persistenti nel sistema: al boot sucessivo
3950 del sistema tutto tornera' alle impostazioni di base (in
3951 questo caso <em>nulle</em>, con policy di default settate
3952 su <tt class="docutils literal"><span class=
3953 "pre">ACCEPT</span></tt> per tutto).</p>
3955 <p>Le varie invocazioni di iptables potrebbero essere
3956 richiamate da degli scripts dedicati, ma fortunatamente e'
3957 stata predisposta una apposita utility per gestire questi
3958 scripts in modo da avere a disposizione un <em>formato
3959 standard</em> per il salvataggio e il ripristino delle
3960 regole del firewall.</p>
3962 <p>Altro problema: decidere quando attivare / disattivare
3963 queste regole. Utilizzare i <em>runlevels</em> non e' una
3964 soluzione adeguata: le regole del firewall sono legate
3965 all'attivita' delle schede di rete (e un host con diverse
3966 schede di rete puo' attivarle a secondo delle esigenze di
3967 routing, partenza di servizi es file_sharing per un
3968 back-up...): il sistema operativo Debian permette di legare
3969 l'esecuzione di comandi alla attivazione di una device di
3970 rete (<tt class="docutils literal"><span class=
3971 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
3972 "docutils literal"><span class="pre">post-up</span></tt>,
3973 utile per devices che richiedono un certo tempo per
3974 inizializzarsi: come un tunnel o una connessione punto a
3975 punto), prima della sua attivazione (<tt class=
3976 "docutils literal"><span class="pre">pre-up</span></tt>).
3977 Allo stesso modo sono disponibili eventi analoghi per
3978 accompagnare la disattivazione dei device di rete: si veda
3979 la pagina man di <tt class="docutils literal"><span class=
3980 "pre">interfaces</span></tt>.</p>
3982 <p>Nel nostro caso avremo per una possibile scheda
3983 <tt class="docutils literal"><span class=
3984 "pre">eth0</span></tt>:</p>
3986 <p><tt class="docutils literal"><span class=
3987 "pre">/etc/network/interfaces</span></tt></p>
3988 <pre class="literal-block">
3989 iface eth1 inet static
3990 up /sbin/iptables-restore /root/firewall/basic_fw
3991 # Seguno i soliti parametri della scheda di rete
3992 address 10.10.208.21
3995 <div class="section" id="iptables-save">
3996 <h3><a class="toc-backref" href=
3997 "#id89">8.9.1 Iptables-save</a></h3>
3999 <p>Per salvare le regole di iptables attualmente presenti
4000 nel kernel si usi il comando:</p>
4001 <pre class="literal-block">
4002 # iptables-save >> /root/firewall/basic_fw
4005 <p>Il contenuto del file dovrebbe essere
4006 <em>comprensibile</em>: sostanzialmente sono regole di
4007 iptables, senza il comando iptables ripetuto, suddivisi
4008 per le varie tabelle. Potete comunque correggere
4009 eventuali parametri con un edito di testo.</p>
4011 <p>Se non avete un'idea migliore potreste voler tenere
4012 gli script dei firewall in una cartella <tt class=
4013 "docutils literal"><span class=
4014 "pre">~/firewall</span></tt> nella home directory
4015 dell'utente <tt class="docutils literal"><span class=
4016 "pre">root</span></tt>.</p>
4019 <div class="section" id="iptables-restore">
4020 <h3><a class="toc-backref" href=
4021 "#id90">8.9.2 Iptables-restore</a></h3>
4023 <p>Per ripristinare un set di regole prcedentemente
4024 salvate con <tt class="docutils literal"><span class=
4025 "pre">iptables-save</span></tt> si utilizzi <tt class=
4026 "docutils literal"><span class=
4027 "pre">iptables-restore</span></tt>. Se questo deve essere
4028 fatto in modalita' <em>non interattiva</em>, ad esempio
4029 deve essere eseguito dal demone che si occupa di
4030 inizializzare le schede di rete, oppure un <em>cron</em>
4031 o altro, e' buona norma richiamare i percorsi completi
4032 sia dei comandi che dei file:</p>
4033 <pre class="literal-block">
4034 /sbin/iptables-restore /root/firewall/basic_fw
4039 <div class="section" id="esempi">
4040 <h2><a class="toc-backref" href=
4041 "#id91">8.10 Esempi</a></h2>
4043 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
4044 e' un computer con un paio di schede di rete fisiche una
4045 delle quali collegata alla rete internet l'altra a una rete
4046 privata per la LAN interna.</p>
4049 <ol class="arabic simple">
4050 <li><tt class="docutils literal"><span class=
4051 "pre">eth0</span></tt> scheda di rete principale sulla
4052 rete privata interna 192.168.0.0/24</li>
4054 <li><tt class="docutils literal"><span class=
4055 "pre">eth1</span></tt> scheda di rete secondaria per la
4056 connessione ad internet</li>
4058 <li><tt class="docutils literal"><span class=
4059 "pre">ppp0</span></tt> punto-a-punto per una
4060 connessione ad internet</li>
4064 <div class="section" id="bloccare-i-ping-dall-esterno">
4065 <h3><a class="toc-backref" href=
4066 "#id92">8.10.1 Bloccare i ping
4067 dall'esterno</a></h3>
4069 <p>Spesso gli script che attaccano
4070 <em>automaticamente</em> le varie reti provano a fare un
4071 ping per verificare quali IP sono on-line: bloccare il
4072 traffico <tt class="docutils literal"><span class=
4073 "pre">ICMP</span></tt> in ingresso puo' aiutare ad
4074 evitare parte di questi attacchi:</p>
4075 <pre class="literal-block">
4076 iptables -A INPUT -i ppp0 -p ICMP -j DROP
4080 <div class="section" id="masquerading-snat">
4081 <h3><a class="toc-backref" href=
4082 "#id93">8.10.2 Masquerading
4085 <dl class="docutils">
4086 <dt>Per attivare la network address translation (in
4087 questo caso un SNAT) per la rete locale privata
4088 sull'indirizzo ip del <em>modem</em>::</dt>
4090 <dd>iptables -A POSTROUTING -s
4091 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
4094 <p>Il <em>Masquerading</em> a differenza dello
4095 <em>SNAT</em> puro (<tt class=
4096 "docutils literal"><span class="pre">-j</span>
4097 <span class="pre">SNAT</span> <span class=
4098 "pre">--to-source</span> <span class=
4099 "pre">propio_ip_pubblico</span> <span class=
4100 "pre">)</span> <span class="pre">legge</span>
4101 <span class="pre">l'indirizzo</span> <span class=
4102 "pre">ip</span> <span class="pre">del</span> <span class=
4103 "pre">device</span> <span class="pre">``ppp0</span></tt>.
4104 In questo modo se l'IP cambia automaticamente si aggiorna
4105 anche il source natting. Se avete un indirizzo IP statico
4106 assegnato al vostro gateway potete invece usare lo SNAT
4110 <div class="section" id="brute-force">
4111 <h3><a class="toc-backref" href=
4112 "#id94">8.10.3 Brute force</a></h3>
4114 <dl class="docutils">
4115 <dt>Per limitare attacchi di tipo brute force su
4119 <p class="first">iptables -A INPUT -i ppp0 -p tcp -m
4120 tcp --dport 22 -m state --state NEW -m recent
4121 --update --seconds 3000 --hitcount 4 --name DEFAULT
4122 --rsource -j DROP</p>
4124 <p class="last">iptables -A INPUT -i ppp0 -p tcp -m
4125 tcp --dport 22 -m state --state NEW -m recent --set
4126 --name DEFAULT --rsource</p>
4133 <div class="section" id="note">
4134 <h1><a class="toc-backref" href=
4135 "#id95">9 NOTE</a></h1>
4138 <li>controllare apache</li>
4141 <p>sintassi: in <tt class="docutils literal"><span class=
4142 "pre">monospace</span></tt> :</p>
4145 <li>nomi di files</li>