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>
736 <li><a class="reference internal" href="#note" id="id91"
737 name="id91">9 NOTE</a></li>
741 <p>Generato con: <a class="reference external" href=
742 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
744 <div class="section" id="configurazione-sistema">
745 <h1><a class="toc-backref" href=
746 "#id6">1 Configurazione sistema</a></h1>
748 <div class="section" id="solo-per-uso-interno">
749 <h2><a class="toc-backref" href=
750 "#id7">1.1 Solo per uso interno</a></h2>
752 <p>Impostazioni di base per la configurazione del sistema
753 operativo e della rete nel laboratorio 208 facente parte
754 della rete piffa.net .</p>
756 <p>Qui riportati per comodita' degli studenti (e del
757 docente che non sara' <strong>mai piu'</strong> costretto a
758 ripeterli continuamente! ). Gli altri lettori potranno
759 tenerli presenti per cercare di comprendere gli esempi nel
760 testo. Ad esempio: quando leggerete <tt class=
761 "docutils literal"><span class=
762 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
763 del nostro <em>proxy http</em>, stara' quindi a voi
764 sostituire i dati con gli <em>ip</em> della vostra
768 <div class="section" id="rete">
769 <h2><a class="toc-backref" href=
770 "#id8">1.2 Rete</a></h2>
772 <p>Parametri della rete attualmente in uso:</p>
774 <table border="1" class="docutils">
782 <td colspan="2">Parametri della rete</td>
788 <td>10.10.208.0/24</td>
794 <td>255.255.255.0</td>
800 <td>10.10.208.255</td>
806 <td>10.10.208.254</td>
812 <td>10.10.208.250 persistente</td>
818 <td>10.10.208.254</td>
824 <td>10.10.208.250 persistente</td>
830 <td>10.10.208.254:3128</td>
835 <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
836 un DHCP, proxy http e mirror di Debian ( <a class=
837 "reference external" href=
838 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
839 Andrea non e' in aula (o ancora peggio non c'e' il suo
840 portatile Net) gli studenti dovranno darsi un indirizzo ip
841 manualmente e disabilitare il proxy (che pero' e
842 trasparente, quindi fate pure come se non ci fosse ;) .
843 Questo in attesa che si sappia se sara' nuovamente
844 utilizzabile il vecchio server Bender.</p>
846 <div class="section" id="interfaces">
847 <h3><a class="toc-backref" href=
848 "#id9">1.2.1 interfaces</a></h3>
850 <p>Segue un esempio del file di configurazione della
851 scheda di rete con configurazione statica:</p>
853 <p>/etc/network/interfaces:</p>
854 <pre class="literal-block">
855 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
857 # The loopback interface
858 iface lo inet loopback
860 # La prima scheda di rete (se si chiama eth0)
861 # (network, broadcast and gateway sono optional)
862 iface etho inet static
864 # iface etho inet dhcp
865 address 212.22.136.101
866 netmask 255.255.255.0
868 broadcast 212.22.136.255
869 gateway 212.22.136.254
871 # Quali interfaccie devono partire automaticamente:
875 <p>Controllare il nome della propia scheda di rete: a
876 volte <em>udev</em> rinomina la prima scheda a <tt class=
877 "docutils literal"><span class="pre">eth1</span></tt>,
878 oppure potreste avere piu' di una scheda di rete (anche
879 un'interfaccia <em>firewire</em> puo' essere
880 automaticamente abilitata come scheda di rete).</p>
882 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
883 , eth0:1 , ...) ricordarsi che queste dipendono dalla
884 scheda fisica a cui sono associate: abbattere con
885 <tt class="docutils literal"><span class=
886 "pre">ifconfig</span> <span class="pre">down</span>
887 <span class="pre">eth0</span></tt> la scheda principale
888 fara' cadere anche queste. Tornando ad attivare la schda
889 principale con <tt class="docutils literal"><span class=
890 "pre">ifconfig</span> <span class="pre">eth0</span>
891 <span class="pre">up</span></tt> la virtuale tornera'
892 attiva: nel caso voleste disabilitarla dovrete quindi
893 sempre abbattere manualmente la scheda virtuale
894 <em>prima</em> della scheda reale.</p>
898 <div class="section" id="bash-completion">
899 <h2><a class="toc-backref" href=
900 "#id10">1.3 Bash completion</a></h2>
902 <p>Il completamento automatico della shell (che si attiva
903 premendo il tasto tab una o due volte mentre si sta
904 scrivendo un termine) permette di comporre automaticamente
905 i nomi dei comandi e i percorsi dei file, sopratutto la
906 composizione automatica dei percorsi dei file e' di grande
909 <p>Bash_completion permette di integrare il completamento
910 automatico con i nomi dei pacchetti e oggetti dei comandi:
911 ad es. volendo digitare <tt class=
912 "docutils literal"><span class="pre">apt-get</span>
913 <span class="pre">inst[TAB]</span> <span class=
914 "pre">xtigh[TAB]</span></tt> ora verra' completatato
915 automaticamente sia la parola <tt class=
916 "docutils literal"><span class="pre">install</span></tt>
917 che il nome del pacchetto <tt class=
918 "docutils literal"><span class=
919 "pre">xtightvncviewer</span></tt>.</p>
921 <p>Abilitare /etc/bash_completion nel file <tt class=
922 "docutils literal"><span class=
923 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
924 proprio <tt class="docutils literal"><span class=
925 "pre">~/.bashrc</span></tt> (che sarebbe il file
926 <em>nascosto</em>, quindi con un punto all'inizio del nome
927 del file, di configurazione della shell bash per ogni
928 utente, presente nella propria <em>home
930 <pre class="literal-block">
931 echo ". /etc/bash_completion" >> ~/.bashrc
934 <p>Esempio di ~/.bahsrc</p>
935 <pre class="literal-block">
936 # ~/.bashrc: executed by bash(1) for non-login shells.
938 export PS1='\h:\w\$ '
941 # Decommentare le seguenti righr per abilitare la colorazione dei
943 export LS_OPTIONS='--color=auto'
945 alias ls='ls $LS_OPTIONS'
946 alias ll='ls $LS_OPTIONS -l'
947 alias l='ls $LS_OPTIONS -lA'
949 # Some more alias to avoid making mistakes:
954 # questo abilita bash completion
955 . /etc/bash_completion
958 <p>Il file <tt class="docutils literal"><span class=
959 "pre">/etc/bash_completion</span></tt> deve essere presente
960 nel sistema, in caso contrario installare il pacchetto:
961 <tt class="docutils literal"><span class=
962 "pre">bash-completion</span></tt>. Generalmente l'utente
963 <tt class="docutils literal"><span class=
964 "pre">root</span></tt> ha un file <tt class=
965 "docutils literal"><span class="pre">.bashrc</span></tt>
966 preimpostato analogo a quello citato sopra, a differenza
967 dei normali utenti di sistema.</p>
972 <li><a class="reference external" href=
973 "http://www.debian-administration.org/articles/316">An
974 introduction to bash completion</a></li>
976 <li><a class="reference external" href=
977 "http://www.caliban.org/bash/">Working more productively
978 with bash 2.x/3.x</a></li>
982 <div class="section" id="vim">
983 <h2><a class="toc-backref" href=
984 "#id11">1.4 Vim</a></h2>
986 <p>Vim e' l'editor di testo preferito dai sistemisti,
987 quindi sara' conveniente impostare fin da subito alcune
988 impostazioni per renderlo piu' comodo.</p>
990 <p>Assicurarsi che sia installata nel sistema la versione
991 completa dell'editor <tt class=
992 "docutils literal"><span class="pre">vim</span></tt>
993 nstallando il pacchetto vimi:</p>
994 <pre class="literal-block">
995 # apt-get install vim
997 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
999 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1000 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1001 " you can find below. If you wish to change any of those settings, you should
1002 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1003 " everytime an upgrade of the vim packages is performed. It is recommended to
1004 " make changes after sourcing debian.vim since it alters the value of the
1005 " 'compatible' option.
1007 " This line should not be removed as it ensures that various options are
1008 " properly set to work with the Vim-related packages available in Debian.
1011 " Uncomment the next line to make Vim more Vi-compatible
1012 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1013 " options, so any other options should be set AFTER setting 'compatible'.
1016 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1017 " line enables syntax highlighting by default.
1020 " If using a dark background within the editing area and syntax highlighting
1021 " turn on this option as well
1024 " Uncomment the following to have Vim jump to the last position when
1028 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1029 \| exe "normal! g'\"" | endif
1032 " Uncomment the following to have Vim load indentation rules and plugins
1033 " according to the detected filetype.
1035 filetype plugin indent on
1038 " The following are commented out as they cause vim to behave a lot
1039 " differently from regular Vi. They are highly recommended though.
1040 set showcmd " Show (partial) command in status line.
1041 "set showmatch " Show matching brackets.
1042 set ignorecase " Do case insensitive matching
1043 "set smartcase " Do smart case matching
1044 "set incsearch " Incremental search
1045 set autowrite " Automatically save before commands like :next and :make
1046 "set hidden " Hide buffers when they are abandoned
1047 "set mouse=a " Enable mouse usage (all modes) in terminals
1049 " Source a global configuration file if available
1050 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1051 if filereadable("/etc/vim/vimrc.local")
1052 source /etc/vim/vimrc.local
1057 <div class="section" id="vnc">
1058 <h2><a class="toc-backref" href=
1059 "#id12">1.5 VNC</a></h2>
1061 <p>I Virtual Network Computing (o VNC) sono software di
1062 controllo remoto e servono per amministrare il proprio
1063 computer a distanza o visuallizare la sessione di lavoro di
1064 un altro computer sul proprio a scopo didattico.
1065 Installando un server VNC sulla propria macchina ed
1066 impostando una opportuna password si consente ai client VNC
1067 di ricevere una immagine dello schermo ed eventualmente di
1068 inviare input di tastiera e mouse al computer server
1069 (durante le lezioni questo non e' possibile per gli
1070 studenti, solo Andrea esegue i comandi). In pratica si può
1071 gestire il computer server da un'altra postazione, come se
1072 fosse il proprio computer fisico.</p>
1074 <p>Scaricare il pacchetto <tt class=
1075 "docutils literal"><span class=
1076 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1077 "docutils literal"><span class="pre">guarda.sh</span></tt>
1078 in una posizione (collocazione nel <em>path</em> degli
1079 utenti, es <tt class="docutils literal"><span class=
1080 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1081 visualizzare l'attuale path ) comoda per gli utenti ( in
1082 genere <tt class="docutils literal"><span class=
1083 "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
1086 <pre class="literal-block">
1089 wget http://debian.piffa.net/guarda.sh
1094 <p>Si noti che non e' possibile lanciare un applicativo sul
1095 server grafico di un utente da una shell in cui si sta
1096 lavorando come altro utente, anche se root. E' quindi
1097 necessario essere l'utente di sistema che si e' loggato
1098 inizialmente nella sessione grafica per poter lanciare lo
1099 script guarda.sh da una shell.</p>
1101 <p>Controllare con <tt class=
1102 "docutils literal"><span class="pre">whoami</span></tt> di
1103 essere l'utente normale (es <tt class=
1104 "docutils literal"><span class="pre">utente</span>
1105 <span class="pre">|</span> <span class=
1106 "pre">studente</span> <span class="pre">|</span>
1107 <span class="pre">proprio</span> <span class=
1108 "pre">nome</span></tt> ), in caso si sia assunta una altra
1109 <tt class="docutils literal"><span class=
1110 "pre">id</span></tt> si apra un altra shell o si esca da
1111 quella attuale con <tt class=
1112 "docutils literal"><span class="pre">exit</span></tt> .</p>
1115 <div class="section" id="lista-dei-pacchetti-di-base">
1116 <h2><a class="toc-backref" href=
1117 "#id13">1.6 Lista dei pacchetti di
1120 <p>I pacchetti installati generalmente <a class=
1121 "footnote-reference" href="#id2" id="id1" name=
1122 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1123 <pre class="literal-block">
1124 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1127 <table class="docutils footnote" frame="void" id="id2"
1134 <tbody valign="top">
1136 <td class="label"><a class="fn-backref" href=
1139 <td><tt class="docutils literal"><span class=
1140 "pre">kde-core</span></tt> e' piu' leggero del
1141 pacchetto <tt class="docutils literal"><span class=
1142 "pre">kde</span></tt>, esiste anche un equivalente
1143 <tt class="docutils literal"><span class=
1144 "pre">gnome-core</span> <span class=
1145 "pre">gnome</span></tt> e il log-in manager
1146 <tt class="docutils literal"><span class=
1147 "pre">gdm</span></tt> per il l'ambiente grafico
1154 <div class="section" id="apt-configurazione">
1155 <h2><a class="toc-backref" href=
1156 "#id14">1.7 Apt configurazione</a></h2>
1158 <p>Vediamo i due file principali di apt:</p>
1161 <li><tt class="docutils literal"><span class=
1162 "pre">/etc/apt/sources.list</span></tt></li>
1164 <li><tt class="docutils literal"><span class=
1165 "pre">/etc/apt/apt.conf</span></tt></li>
1168 <div class="section" id="sources-list">
1169 <h3><a class="toc-backref" href=
1170 "#id15">1.7.1 sources.list</a></h3>
1172 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1173 preleva i pacchetti da installare tramite <em>dpkg</em>,
1174 vengono quindi precisati i metodi (ad es. http / ftp /
1175 cdrom / file), la release che si vuole tracciare (es
1176 <tt class="docutils literal"><span class=
1177 "pre">stable,</span> <span class="pre">testing,</span>
1178 <span class="pre">unstable</span></tt> oppure i
1179 corrispondenti release name es: <tt class=
1180 "docutils literal"><span class="pre">Lenny,</span>
1181 <span class="pre">Squeeze,</span> <span class=
1182 "pre">Sid</span></tt>), i rami di interesse (es:
1183 <tt class="docutils literal"><span class=
1184 "pre">main</span></tt> che e' l'archivio principale,
1185 <tt class="docutils literal"><span class=
1186 "pre">non-free</span></tt> per il software non libero,
1187 <tt class="docutils literal"><span class=
1188 "pre">contrib</span></tt> per i pacchetti non realizzati
1189 dai manutentori ufficiali).</p>
1191 <p>Gli archivi sono generalmente:</p>
1194 <li><tt class="docutils literal"><span class=
1195 "pre">deb</span></tt> per pacchetti Debian binari</li>
1197 <li><tt class="docutils literal"><span class=
1198 "pre">deb-src</span></tt> per i pacchetti sorgenti
1199 (quindi da compilare, come il kernel) degli stessi
1200 pacchetti binari. In genere se non compilate spesso
1201 potete evitare di tracciare i sorgenti per risparmiare
1205 <p><tt class="docutils literal"><span class=
1206 "pre">/etc/apt/sources.list</span></tt></p>
1207 <pre class="literal-block">
1208 # esempio di accesso a un CDROM:
1209 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1211 # Archivio principale debian via http su piffa.net,
1212 # non funziona al difuori dell'aula dei corsi
1213 deb http://debian.piffa.net/debian/ Lenny main
1214 # deb http://debian.piffa.net/debian/ Lenny non-free contrib
1216 # Mirror da kernel.org da usare a casa:
1217 deb http://mirrors.eu.kernel.org/debian/ Lenny main
1219 # Security dal sito principale
1220 deb http://security.debian.org/ Lenny/updates main
1221 deb-src http://security.debian.org/ Lenny/updates main
1223 # Debian volatile per le cose soggette a cambiamenti non legati
1224 # a dinamiche di sicurezza
1225 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1226 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1228 # Esempio di accesso a un filesystem locale contenente i pacchetti:
1229 # deb file:/mnt/mirror Sid main non-free contrib
1233 <div class="section" id="etc-apt-apt-conf">
1234 <h3><a class="toc-backref" href=
1235 "#id16">1.7.2 /etc/apt/apt.conf</a></h3>
1237 <p>Questo file contiene le opzioni di apt, come ad
1238 esempio il proxy:</p>
1239 <pre class="literal-block">
1240 Acquire::http::Proxy "http://10.10.208.254:3128";
1243 <p>Si tenga conto che se si imposta un proxy per apt sul
1244 proprio portatile e tornati a casa propria si vuole
1245 scaricare nuovi pacchetti si dovra' disabilitare il
1251 <div class="section" id="squid">
1252 <h1><a class="toc-backref" href=
1253 "#id17">2 Squid</a></h1>
1255 <p>Squid e' un proxy cache http (ma anche FTP e https)
1256 robusto e strutturato, puo' essere usato sia in reti
1257 relativamente piccole grazie alla semplicita' di
1258 configurazione che in scenari piu' complessi grazie alla
1259 possibilita' di gestirne in modo granulare le risorse
1260 partendo dalle configurazioni piu' semplici per la semplice
1261 <em>condivisione della navigazione</em> internet, la gestione
1262 degli accessi, il filtraggio dei contenuti (Squid e' una
1263 applicazione che si muove nel 4' livello del modello TCP/IP a
1264 differenza di un <em>ipfilter</em> limitato al 2') nel l
1265 bilanciamento del carico tra piu' hosts.</p>
1267 <dl class="docutils">
1268 <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
1270 <dd>nasconde i client http alla rete internet: risulta solo
1271 il server proxy nei log dei server web frequentati dagli
1272 utenti di Squid.</dd>
1275 <p>Cosa a volte sottovalutata, squid permette la navigazione
1276 web a una rete basata su <em>indirizzi ip privati</em> (es
1277 una 192.168.0.0/24). E se la rete privata deve <em>solo
1278 navigare</em> in internet, non serve un <em>NAT</em> od
1279 altro, basta il solo Squid. Per altro non servira' neanche un
1280 servizio DNS dato che <em>sara' il solo squid a risolvere i
1281 nomi di dominio</em> per i suoi client http.</p>
1283 <p>Squid ascolta di default sulla porta 3128, per impostare
1284 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1285 "docutils literal"><span class=
1286 "pre">/etc/apt/apt.conf</span></tt></p>
1287 <pre class="literal-block">
1288 Acquire::http::Proxy "10.10.208.254:3128";
1291 <p>Per installare Squid si usino i pacchetti:</p>
1292 <pre class="literal-block">
1296 <div class="section" id="configurazione-squid-conf">
1297 <h2><a class="toc-backref" href=
1298 "#id18">2.1 Configurazione:
1301 <p>Segue un estratto delle direttive principali viste in
1302 aula presenti nel file di configurazione <tt class=
1303 "docutils literal"><span class=
1304 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1306 <div class="section" id="cache-dir">
1307 <h3><a class="toc-backref" href=
1308 "#id19">2.1.1 Cache_dir</a></h3>
1310 <p>Cache dir serve per impostare dimensione e percorso
1311 della cache creata sul supporto di storaggio. Essendo la
1312 dimensione di default della cache pari a <tt class=
1313 "docutils literal"><span class="pre">~100</span>
1314 <span class="pre">MB</span></tt> e' altamente
1315 consigliabili aumentare questo parametro se si vuole
1316 poter utilizzare la funzione di <em>cache</em> http del
1319 <p>La dimensione ovviamente dipendera' dallo spazio
1320 disponibile, dimensioni tipiche e massime degli oggetti
1321 che si vuole tenere in cache (un solo file <em>.iso e'
1322 circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
1323 <tt class="docutils literal"><span class="pre">150</span>
1324 <span class="pre">MB</span></tt>, un pacchetto debian
1325 circa <tt class="docutils literal"><span class=
1326 "pre">20</span> <span class="pre">MB</span></tt>), numero
1329 <p>Si presti poi attenzione alla natura dei dati che
1330 saranno salvati nella cache: sono tutti dati facilmenti
1331 sostituibili (gli originali sono <em>on-line</em>) la cui
1332 perdita non arreca danni permanenti. Questo rende la
1333 cache di Squid un possibile candidato ad un <em>RAID
1334 stripe</em> (livello 0), con vantaggi sia per le
1335 prestazioni (e la velocita' di navigazione e' uno dei
1336 motivi per cui si installa Squid) che per l'utilizzo
1337 estensivo dello spazio di storaggio. Questo fino al
1338 momento in cui per voi non sia piu' importante
1339 <em>garantire la disponibilita' del servizio</em> (se il
1340 RAID stripe dovesse rompersi gli utenti non potrebbero
1341 piu' navigare, cosa che per natura dello stripe e'
1342 maggiormente probabile rispetto ad un <em>mirror</em> o a
1343 un filesytem <em>normale</em>) con un RAID mirror o
1346 <p>Altra considerazione: i dati del proxy vengono slavati
1347 sul filesytem del server dietro richiesta di utenti
1348 esterni talvolta sconosciuti. Come per i servizi di file
1349 sharing o per la posta elettronica non c'e' motivo che il
1350 filesystem su cui sono ospitati questi dati abbia i
1351 privilegi di eseguibilita' o suid (in genere si puo'
1352 anche usare <em>noatime</em> per renderlo piu' veloce,
1353 che si usi o meno il journal dipende dalle preferenze:
1354 affidabilita' oppure prestazioni):</p>
1357 <pre class="literal-block">
1359 # Filesystem per Squid http cache
1360 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1363 <p>Ora possiamo impostare la cache direttamente nel file
1364 <tt class="docutils literal"><span class=
1365 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1366 <pre class="literal-block">
1367 #TAG: cache_dir (riga 1628)
1370 # cache_dir Type Directory-Name Fs-specific-data [options]
1372 # You can specify multiple cache_dir lines to spread the
1373 # cache among different disk partitions.
1376 # cache_dir ufs /var/spool/squid3 100 16 256
1377 cache_dir aufs /var/spool/squid3 300 24 256
1381 # directory primo livello
1382 # secondo livello di directory
1385 <p>Se si modifica la struttura del filesytem della cache
1386 di Squid, ad esempio variando il numero delle directory,
1387 puo' essere opportuno rigenerare la struttura della cache
1388 di squid (per lo meno se si <em>aumenta</em> il numero
1389 delle directory di primo o secondo livello). Tipicamente
1390 e' consigliabile cancellare (se si ha <em>ridotto</em> il
1391 numero delle diectory) la vecchia cache e poi generare
1392 una nuova struttura. Se si vuole <em>star nel sicuro</em>
1393 ogni volta che si modifica l'impostazione delle directory
1394 <em>si svuoti la vecchia cache e se ne generi una
1396 <pre class="literal-block">
1397 # /etc/init.d/squid3 stop
1398 # rm -r /var/spool/squid3/??
1400 # /etc/init.d/squid3 start
1404 <div class="section" id="tag-maximum-object-size">
1405 <h3><a class="toc-backref" href=
1406 "#id20">2.1.2 TAG:
1407 maximum_object_size</a></h3>
1409 <p>Questa direttiva imposta la dimensione massima degli
1410 oggetti che vengono slvati sul supporto di storaggio,
1411 oggetti di dimensioni superiori saranno comunque
1412 scaricati ma non tenuti in cache.</p>
1414 <p>TAG: maximum_object_size (1760):</p>
1415 <pre class="literal-block">
1416 # TAG: maximum_object_size (1760)
1417 # Objects larger than this size will NOT be saved on disk. The
1418 # value is specified in kilobytes, and the default is 4MB. If
1419 # you wish to get a high BYTES hit ratio, you should probably
1420 # increase this (one 32 MB object hit counts for 3200 10KB
1421 # hits). If you wish to increase speed more than your want to
1422 # save bandwidth you should leave this low.
1424 # NOTE: if using the LFUDA replacement policy you should increase
1425 # this value to maximize the byte hit rate improvement of LFUDA!
1426 # See replacement_policy below for a discussion of this policy.
1429 # maximum_object_size 4096 KB
1430 maximum_object_size 150 MB
1434 <div class="section" id="tag-cache-mem">
1435 <h3><a class="toc-backref" href=
1436 "#id21">2.1.3 TAG: cache_mem</a></h3>
1438 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1439 utilizzata per la cache di Squid. Questo dipendera' dalla
1440 RAM disponibile sul sistema, e da quanta di questa volete
1441 mettere a disposizione di Squid (altri servizi
1442 iimportanti girano sulla stessa macchina?). Questo
1443 paramentro influisce sulle prestazioni e sul degrado dei
1444 supporti di storaggio (sopratutto se magnetici).</p>
1446 <p>Se si stesse pensando di usare dell'hardware
1447 <em>embedded</em> a basse prestazioni / consumo per
1448 realizzare un server gateway / NAT / Squid si tenga
1449 presente che Squid e' relativamente esoso di risorse:
1450 avra' bisogno di una macchina con <tt class=
1451 "docutils literal"><span class="pre">~25MB</span></tt>
1452 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1453 servire decorosamente una decina di client http su una
1454 rete ethernet 10/100. In questo caso non fate scendere
1455 <tt class="docutils literal"><span class=
1456 "pre">cache_mem</span></tt> sotto i <tt class=
1457 "docutils literal"><span class="pre">2/4</span>
1458 <span class="pre">MB</span></tt> pena un accesso continuo
1459 al supporto di storaggio.</p>
1461 <p>Se invece si disponesse di una macchina dedicata a
1462 Squid con gigabytes di RAM non si esiti a dedicarne buona
1463 parte a <em>cache_mem</em>.</p>
1465 <p>TAG: cache_mem (1566):</p>
1466 <pre class="literal-block">
1467 # 'cache_mem' specifies the ideal amount of memory to be used
1469 # * In-Transit objects
1471 # * Negative-Cached objects
1478 <div class="section" id="tag-minimum-object-size">
1479 <h3><a class="toc-backref" href=
1480 "#id22">2.1.4 TAG:
1481 minimum_object_size</a></h3>
1483 <p>Questo parametro imposta la dimensione minima degli
1484 oggetti salvati nella cache. Settato a <tt class=
1485 "docutils literal"><span class="pre">0</span></tt> o a
1486 valori molto piccoli puo' influire negativamente sulla
1487 deframmentazione del filesytem e consumare un numero
1488 elevato di <em>inode</em> (cosa non piu' importante con
1489 ext4 o altri filesytem).</p>
1491 <p>TAG: minimum_object_size:</p>
1492 <pre class="literal-block">
1493 # TAG: minimum_object_size (bytes)
1494 # Objects smaller than this size will NOT be saved on disk. The
1495 # value is specified in kilobytes, and the default is 0 KB, which
1496 # means there is no minimum.
1499 # minimum_object_size 0 KB
1500 minimum_object_size 0 KB
1505 <div class="section" id=
1506 "negoziazione-degli-accesi-al-servizio">
1507 <h2><a class="toc-backref" href=
1508 "#id23">2.2 Negoziazione degli accesi al
1511 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1512 <em>open relay</em> , si deve quindi limitare la rete che
1513 puo' accedere al servizio.</p>
1515 <dl class="docutils">
1516 <dt>Open Relay:</dt>
1518 <dd>Un servizio a cui possono accedere tutti
1519 indiscriminatamente. La cosa puo' andare bene per servizi
1520 come i server web, che aspirano per loro natura al
1521 maggior numero possibile di utenti, ma non a servizi come
1522 i proxy http oppure ai server di posta elettronica (che
1523 permetterebbero l'invio di SPAM).</dd>
1526 <p>Generalmente non volete che il vostro proxy http venga
1527 usato da persone sconosciute le quali sostanzialmente
1528 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1529 (probabilmente per visionare materiali che non vorrebbero
1530 fossero ricondotti direttamente a loro, per motivi che sta
1531 a voi prendere in considerazione) consumando traffico e
1532 banda della vostra connessione a internet. Tenere Squid in
1533 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1534 modo per essere inseriti in una <em>black list</em>.</p>
1536 <p>Per poter limitare gli accessi a Squid dal punto di
1537 vista dell'applicazione (quarto livello TCP/IP) si
1538 identifichera' inizialmente l'entita' <em>rete locale</em>
1539 (es: <tt class="docutils literal"><span class=
1540 "pre">localnet</span></tt>) con una ACL di tipo
1541 <em>src</em> (indirizi IP sorgenti) indicando la <em>classe
1542 / range di ip</em> della nostra rete.</p>
1545 Dopodiche l'accesso (<tt class=
1546 "docutils literal"><span class=
1547 "pre">http_access</span></tt>) si concedera'
1548 (<em>allow</em>) a questa entita' (es: <tt class=
1549 "docutils literal"><span class=
1550 "pre">localnet</span></tt>) negando chiunque altro.
1553 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1554 esprimere i range di ip: <a class="reference external"
1555 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1556 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1558 <div class="section" id="acl-e-http-access">
1559 <h3><a class="toc-backref" href=
1560 "#id24">2.2.1 ACL e http access</a></h3>
1562 <p>Si proceda a creare una <tt class=
1563 "docutils literal"><span class="pre">ACL</span></tt> di
1564 tipo <tt class="docutils literal"><span class=
1565 "pre">src</span></tt> per identificare la lostra rete
1566 locale, poi si abiliti l'accesso a questa con la
1567 direttiva <tt class="docutils literal"><span class=
1568 "pre">http_access</span></tt>. Tutto quanto non e'
1569 espressamente autorizzato viene poi negato da un
1570 <tt class="docutils literal"><span class=
1571 "pre">http_access</span> <span class="pre">deny</span>
1572 <span class="pre">all</span></tt> finale.</p>
1573 <pre class="literal-block">
1575 # Defining an Access List
1577 # Every access list definition must begin with an aclname and acltype,
1578 # followed by either type-specific arguments or a quoted filename that
1579 # they are read from.
1581 # ***** ACL TYPES AVAILABLE *****
1583 # acl aclname src ip-address/netmask ... # clients IP address
1586 # Example rule allowing access from your local networks.
1587 # Adapt to list your (internal) IP networks from where browsing
1589 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1590 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1591 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1593 acl localnet src 10.10.208.0/24
1597 # Allowing or Denying access based on defined access lists
1599 # Access to the HTTP port:
1600 # http_access allow|deny [!]aclname ...
1602 # NOTE on default values:
1604 # If there are no "access" lines present, the default is to deny
1608 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1610 # Example rule allowing access from your local networks.
1611 # Adapt localnet in the ACL section to list your (internal) IP networks
1612 # from where browsing should be allowed
1613 #http_access allow localnet
1614 http_access allow localnet
1619 <div class="section" id="testare-squid">
1620 <h2><a class="toc-backref" href=
1621 "#id25">2.3 Testare Squid</a></h2>
1623 <p>Configurato squid e' fondamentale testarne il corretto
1624 funzionamento per assicurarsi di non aver creato un
1625 <em>open-relay</em>. Per fare dei test significativi serve
1626 utilizzare degli host remoti: ci si connetta via ssh a
1627 questi per poi utilizzare <tt class=
1628 "docutils literal"><span class="pre">wget</span></tt> da
1629 riga di comando.</p>
1631 <div class="section" id="client-wgetrc">
1632 <h3><a class="toc-backref" href=
1633 "#id26">2.3.1 Client: ~/.wgetrc</a></h3>
1635 <p>Nel file <tt class="docutils literal"><span class=
1636 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1637 un file nascosto) si puo' impostare il proxy per wget. Si
1638 utililizzi l'indirizzo ip del server che si vuole
1639 testare, e si seguano i log <tt class=
1640 "docutils literal"><span class=
1641 "pre">/var/log/squid3/access.log</span></tt> sul
1644 <p>Da notare che la prova va' fatta su una macchina della
1645 rete che si vuole testare, non da <em>localhost</em>. Per
1646 altro se si utilizzasse <em>direttamente</em> <tt class=
1647 "docutils literal"><span class=
1648 "pre">localhost</span></tt> non si testerebbe la
1649 <em>ACL</em> predisposta, dato che si si rientrerebbe
1650 nella ACL (pre-configurata di default) <tt class=
1651 "docutils literal"><span class=
1652 "pre">localhost</span></tt>.</p>
1654 <dl class="docutils">
1657 <dd>http_proxy=10.10.208.178:3128</dd>
1660 <p>Si proceda a scaricare dal client scelto con un
1662 <pre class="literal-block">
1663 wget http://www.google.it
1667 <div class="section" id="server-access-log">
1668 <h3><a class="toc-backref" href=
1669 "#id27">2.3.2 Server:
1672 <p>Si puo' controllare il corretto funzionamento del
1673 server seguendo i log di accesso a Squid:</p>
1674 <pre class="literal-block">
1675 # tail -f /var/log/squid3/access.log
1678 <p>In oltre e' possibile configurare diversi
1679 <em>analizzatori di log</em> come <tt class=
1680 "docutils literal"><span class=
1681 "pre">Webalizer</span></tt> per studiare i log di
1687 <div class="section" id="apache">
1688 <h1><a class="toc-backref" href=
1689 "#id28">3 Apache</a></h1>
1691 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1692 dato alla piattaforma server Web modulare piu' diffusa (ma
1693 anche al gruppo di lavoro open source che ha creato,
1694 sviluppato e aggiornato il software server), in grado di
1695 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1697 <p>Un server web e' un processo, e per estensione il computer
1698 su cui e' in esecuzione, che si occupa di fornire, su
1699 richiesta del browser, una pagina web (spesso scritta in
1700 HTML). Le informazioni inviate dal server web viaggiano in
1701 rete trasportate dal protocollo HTTP. L'insieme di server web
1702 dà vita al World Wide Web, uno dei servizi piu'
1703 utilizzati di Internet.</p>
1705 <div class="section" id="pacchetti-da-installare">
1706 <h2><a class="toc-backref" href=
1707 "#id29">3.1 Pacchetti da
1708 installare::</a></h2>
1714 <p>Con la release 2.0 di Apache viene automaticamente resa
1715 disponibile anche la versione SSL (Secure Socket Layer,
1716 cpnnessioni criptate ) del web server.</p>
1719 <div class="section" id="configurazione-di-apache">
1720 <h2><a class="toc-backref" href=
1721 "#id30">3.2 Configurazione di
1724 <p>I file di configurazione di apache si trovano nella
1725 cartella: <tt class="docutils literal"><span class=
1726 "pre">/etc/apache2</span></tt> e sono strutturati come
1727 descritto nel file <tt class=
1728 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1729 . Sostanzialmente lo schema e' il seguente:</p>
1731 <dl class="docutils">
1732 <dt>apache2.conf</dt>
1735 <p class="first">File di configurazione principale del
1738 <p class="last">httpd.conf e' il vecchio file di
1739 configurazione di Apache1, presente per motivi di
1740 retrocompatibilita' e' generalemente vuoto.</p>
1745 <dd>In questo file vengono specificate le porte sulle
1746 quali resta in ascolto il server web. Si noti che
1747 utilizzando dei virtual hosts generalmente viene
1748 specificata per questi la porta su cui ascoltare nel file
1749 di configurazione del virtual host, ad es: <tt class=
1750 "docutils literal"><span class=
1751 "pre"><VirtualHost</span> <span class=
1752 "pre">*:80></span></tt></dd>
1754 <dt>sites-available</dt>
1756 <dd>In questa cartella vengono raccolti i file di
1757 configurazione dei virtual host disponibili.</dd>
1759 <dt>sites-enabled</dt>
1761 <dd>In questa cartella sono contenuti dei link simbolici
1762 ai files in ../sites-available : se il link e' presente
1763 in questa cartella il virtual host e' abilitato.</dd>
1765 <dt>mods-available</dt>
1767 <dd>Stesso metodo per i moduli: in questa cartella ci
1768 sono i moduli veri e propri che verranno poi abilitati
1769 grazie all'esistenza di link simbolici nella cartella
1772 <dt>mods-enabled</dt>
1774 <dd>Moduli abilitati, effettivamente caricati.</dd>
1778 <div class="section" id="apache-conf">
1779 <h2><a class="toc-backref" href=
1780 "#id31">3.3 apache.conf</a></h2>
1782 <p>File di configurazione del servizio Apache, contiene le
1783 impostazioni generiche (ad esempio utilizzo della RAM e
1784 risorse di sistema) dell'intero servizio. Nella
1785 configurazione di default per Debian non viene definito un
1786 vero e proprio sito di default ma solo dei virtual
1789 <p>Guardiamo alcune direttive interessanti:</p>
1791 <dl class="docutils">
1794 <dd>Numero di secondi da aspettare prima di chiudere la
1795 connessione con il client. Questo parametro serve a
1796 liberare le risorse di sistema nel caso che un client,
1797 magar a causa di una connessione particolarmente lenta o
1798 instabili, tenga attivo indefinitivamente un processo di
1803 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1804 alle connessioni persistenti (http 1.1) permettono al
1805 server di rispondere a piu' richieste dei client mediante
1806 la stessa connessione. Il protocoll http per sua natura
1807 e' senza stato (<em>statelessi</em> ), quindi ogni
1808 risorsa richiesta (per pagine web si pensi ad esempio
1809 alle immagini) dal client necessita di una connessione
1810 autonoma. Keep-alive permette di ottimizzare la
1811 connessione anche fino al 50% a seconda delle situazioni
1814 <dt>Server-Pool Size Regulation</dt>
1816 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1817 Tutti spiegati nel manuale di apache) servono per
1818 attribuire le risorse di sistema disponibili al server
1819 Apache. Tenere questi parametri bassi serve a limitare il
1820 rischio di Denial of Service per il server, nel caso
1821 offra altri servizi. I settagi di default sono come
1822 sempre abbastanza conservativi, se si conta di usare il
1823 proprio Apache per servire un sito web con molti
1824 visitatori sara' necessario aumentare sensibilmente le
1825 impostazioni di base.</dd>
1827 <dt>AccessFileName</dt>
1829 <dd>Il nome del file che viene onorato per modificare le
1830 impostazioni per una singola directory, legato alla
1831 direttiva AllowOverride .</dd>
1835 <div class="section" id="installazione-di-php">
1836 <h2><a class="toc-backref" href=
1837 "#id32">3.4 Installazione di PHP</a></h2>
1839 <p>Pacchetti da installare: <tt class=
1840 "docutils literal"><span class="pre">php5</span>
1841 <span class="pre">php-pear</span></tt></p>
1843 <div class="section" id="test-del-modulo-php">
1844 <h3><a class="toc-backref" href=
1845 "#id33">3.4.1 Test del modulo
1848 <p>Creare nella cartella <tt class=
1849 "docutils literal"><span class="pre">/var/www</span></tt>
1850 (o altra cartella visibile) un file con estensione *.php
1851 (es <tt class="docutils literal"><span class=
1852 "pre">/var/ww/info.php</span></tt> contenete codice php
1853 eseguibile dall'interprete, ad es:</p>
1854 <pre class="literal-block">
1855 <?php phpinfo() ; ?>
1858 <p>Questa funzione di php generera' la tipica pagina con
1859 le impostazioni attuali per PHP. Richiamando la pagina
1860 (es: <tt class="docutils literal"><span class=
1861 "pre">http://localhost/info.php</span></tt> ) verra
1862 generata dall'interprete PHP la pagina HTML e resa
1863 disponibile tramite Apache ai utclient HTTP, a prova del
1864 correto funzionamento del modulo di PHP e della sua
1865 integrazione con il serv web Apache. In caso contrario se
1866 il client http proporra di scaricare la pagina invece che
1867 visualizzarla nel browser: non funziona l'interprete di
1868 php o sono mal configurati i MIME-type. prima di tutto
1869 assicurarsi di aver fatoo ripartire Apache.</p>
1872 <div class="section" id=
1873 "installazione-del-supporto-per-mysql">
1874 <h3><a class="toc-backref" href=
1875 "#id34">3.4.2 Installazione del supporto
1878 <p>Installare i pacchetti:</p>
1879 <pre class="literal-block">
1880 php5-mysql phpmyadmin
1883 <p>Controllare tramite la pagina php.info che sia
1884 abilitato il supporto per Mysql (ripartito Apache,
1885 ricaricare la pagina e cercare con CTRL+f <tt class=
1886 "docutils literal"><span class=
1887 "pre">mysql</span></tt>).</p>
1890 <div class="section" id="phpmyadmin">
1891 <h3><a class="toc-backref" href=
1892 "#id35">3.4.3 phpmyadmin</a></h3>
1894 <p>L'interfaccia web Phpmyadmin non richede
1895 necessariamente la presenza di un database Mysql locale,
1896 puo' infatti essere utilizzata per gestire databases
1897 remoti (il suo file di configurazione: <tt class=
1898 "docutils literal"><span class=
1899 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1900 caso si voglia installare localmente Mysql si utilizzi il
1901 pacchetto <tt class="docutils literal"><span class=
1902 "pre">mysql-server</span></tt> .</p>
1904 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1905 <tt class="docutils literal"><span class=
1906 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1907 non fosse controllare che sia incluso il file <tt class=
1908 "docutils literal"><span class=
1909 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1910 <tt class="docutils literal"><span class=
1911 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1914 <div class="section" id=
1915 "installazione-del-supporto-per-postgresql">
1916 <h3><a class="toc-backref" href=
1917 "#id36">3.4.4 Installazione del supporto
1918 per Postgresql</a></h3>
1920 <p>Installare i pacchetti:</p>
1921 <pre class="literal-block">
1922 php5-pgsql phppgadmin
1925 <p>Controllare tramite la pagina php.info che sia
1926 abilitato il supporto per PostgreSQL (ripartito Apache,
1927 ricaricare la pagina e cercare con CTRL+f <tt class=
1928 "docutils literal"><span class=
1929 "pre">pgsql</span></tt>).</p>
1932 <div class="section" id="phppgadmin">
1933 <h3><a class="toc-backref" href=
1934 "#id37">3.4.5 phppgadmin</a></h3>
1936 <p>L'interfaccia web Phppgadmin per il database server
1937 PostgreSQL non richede necessariamente la presenza di un
1938 database locale, puo' infatti essere utilizzata per
1939 gestire databases remoti (il suo file di configurazione:
1940 <tt class="docutils literal"><span class=
1941 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1942 caso si voglia installare localmente Mysql si utilizzi il
1943 pacchetto <tt class="docutils literal"><span class=
1944 "pre">postgresql</span></tt> .</p>
1946 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1947 <tt class="docutils literal"><span class=
1948 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1949 non fosse controllare che sia incluso il file <tt class=
1950 "docutils literal"><span class=
1951 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1952 <tt class="docutils literal"><span class=
1953 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1957 <div class="section" id="virtual-hosts">
1958 <h2><a class="toc-backref" href=
1959 "#id38">3.5 Virtual hosts</a></h2>
1963 <li><a class="reference external" href=
1964 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1966 <li><a class="reference external" href=
1967 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1968 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
1972 <p>I virtual host permettono di avere piu' siti internet
1973 disponibili tramite lo stesso server web, eventualmente
1974 mappati su un solo indirizzo ip. Sono generalemente di due
1979 <li>Basati su <em>indirizzi ip</em>. Se si ha la
1980 possibilita' di avere piu' indirizzi ip dedicati per i
1981 diversi siti che si vuole servire. ES: <tt class=
1982 "docutils literal"><span class=
1983 "pre"><VirtualHost</span> <span class=
1984 "pre">192.168.0.2:80></span></tt> . Soluzione
1985 dispendiosa, si tende ad usarla solo se servono
1986 certificati di sicurezza (SSL ) dedicati per ogni
1989 <li>Basati su <em>nomi di dominio</em> che puntano allo
1990 stesso ip. Soluzione piu' economica e diffusa che si
1991 basa sulle funzionalita' di http 1.1 .</li>
1995 <p>Prenderemo in esame la gestione di virtual hosts basati
1996 su nomi di dominio.</p>
1998 <div class="section" id="gestione-dns">
1999 <h3><a class="toc-backref" href=
2000 "#id39">3.5.1 Gestione DNS</a></h3>
2002 <p>Prima di tutto per poter impostare i virtual hosts
2003 dovete avere un server DNS che risolva i vostri nomi di
2004 dominio sull'indirizzo ip del server. Questo si puo'
2005 ottenere in vari modi, ad es:</p>
2008 <dl class="docutils">
2009 <dt><em>Bind</em> (DNS server)</dt>
2011 <dd>Impostare i campi A nelle proprie zone gestite
2012 dal server dns Bind. Ad es: <tt class=
2013 "docutils literal"><span class=
2014 "pre">papo</span>
2016 "pre">A</span>
2017 <span class="pre">212.22.136.248</span></tt></dd>
2019 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2021 <dd>Utilizzare un servizio come ad es: <a class=
2022 "reference external" href=
2023 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2024 per mappare nomi di dominio sul proprio indirizzo ip,
2025 comodo ad esempio se si dispone di un indirzzo ip
2026 pubblico (anche se dinamico) per la propria
2027 connessione ad internet.</dd>
2029 <dt><em>Dnsmasq</em> (DNS server)</dt>
2031 <dd>Utilizzabile a livello locale per fare dei test,
2032 utilizzando direttive come: <tt class=
2033 "docutils literal"><span class=
2034 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2036 <dt><tt class="docutils literal"><span class=
2037 "pre">/etc/hosts</span></tt></dt>
2039 <dd>Per prove <em>strettamente a livello locale</em>
2040 potete impostare i nomi dei vostri virtual server nel
2041 file /etc/hosts .</dd>
2044 <pre class="literal-block">
2047 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2048 ;; global options: printcmd
2050 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2051 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2053 ;; QUESTION SECTION:
2054 ;177.piffa.net. IN A
2057 177.piffa.net. 0 IN A 10.10.208.177
2059 ;; Query time: 12 msec
2060 ;; SERVER: 10.10.208.254#53(10.10.208.254)
2061 ;; WHEN: Wed May 6 12:27:08 2009
2062 ;; MSG SIZE rcvd: 47
2065 <p>La parte interessante e' <tt class=
2066 "docutils literal"><span class=
2067 "pre">177.piffa.net.</span>
2069 "pre">0</span>
2070 <span class="pre">IN</span>
2072 "pre">A</span>
2073 <span class="pre">10.10.208.177</span></tt> . Il nome di
2074 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2075 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2076 dovra' essere disponibile un virtual host che corrisponde
2077 al nome <tt class="docutils literal"><span class=
2078 "pre">177.piffa.net</span></tt> .</p>
2081 <div class="section" id="virtual-host">
2082 <h3><a class="toc-backref" href=
2083 "#id40">3.5.2 Virtual host</a></h3>
2085 <p>Esempio di Virtual host:</p>
2086 <pre class="literal-block">
2087 <VirtualHost *:80 >
2088 ServerName 177.piffa.net
2089 DocumentRoot /var/www/177.piffa.net/
2090 ServerAdmin webmaster@177.piffa.net
2091 </VirtualHost>
2094 <ol class="arabic simple">
2095 <li><tt class="docutils literal"><span class=
2096 "pre"><VirtualHost</span> <span class=
2097 "pre">\*:80</span> <span class="pre">></span></tt>
2098 La prima riga indica l'inizio della stanza relativa al
2099 nostro virtual host, che ascolotera' su qualunque
2100 indirizzo ip (nel caso il server abbia piu' indirizzi
2101 dai quali e' raggiungibile) sulla porta <tt class=
2102 "docutils literal"><span class=
2103 "pre">80</span></tt>.</li>
2105 <li><tt class="docutils literal"><span class=
2106 "pre">Server/name</span></tt> precisa quale sara' il
2107 nome di dominio a cui verra' associato questo sito
2108 rispetto ad altri eventualmenti presenti sullo stesso
2111 <li><tt class="docutils literal"><span class=
2112 "pre">DocumentRoot</span></tt> : il path della
2113 directory che contiene le pagine del sito.</li>
2115 <li><tt class="docutils literal"><span class=
2116 "pre">ServerAdmin</span></tt>: l'indirizzo del
2117 webmaster, in modo da poterlo contattare in caso di
2118 problemi col sito.</li>
2120 <li><tt class="docutils literal"><span class=
2121 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2122 chiusura della stanza di definizione del virtual
2126 <p>Quelle che abbiamo appena visto sono le direttive
2127 essenziali per definire un sito virtuale, potrebbe essere
2128 utile aggiungene altre:</p>
2132 <dl class="first docutils">
2133 <dt><tt class="docutils literal"><span class=
2134 "pre">ErrorLog</span> <span class=
2135 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2138 <p class="first last">Log degli errori separato
2139 dai restanti siti web ospitati dal server.</p>
2145 <dl class="first docutils">
2146 <dt><tt class="docutils literal"><span class=
2147 "pre">LogLevel</span> <span class=
2148 "pre">warn</span></tt></dt>
2151 <p class="first last">Livello di importanza degli
2152 eventi loggati= warning <em>attenzione</em> .</p>
2158 <dl class="first docutils">
2159 <dt><tt class="docutils literal"><span class=
2160 "pre">CustomLog</span> <span class=
2161 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2162 <span class="pre">combined</span></tt></dt>
2165 <p class="first last">Log di accesso separati
2166 dagli altri siti, utile anche qua per statistiche
2167 di accesso per il solo sito virtuale.</p>
2173 <p>Potrebbe essere utile modificare le impostazioni di
2174 una intera directory, ad esempio per abilitare
2175 l'<tt class="docutils literal"><span class=
2176 "pre">AuthConfig</span></tt>:</p>
2177 <pre class="literal-block">
2178 <Directory "/var/www/miosito.net/privata">
2179 AllowOverride AuthConfig
2180 Options ExecCGI Indexes MultiViews FollowSymLinks
2186 <p><tt class="docutils literal"><span class=
2187 "pre">AllowOverride</span> <span class=
2188 "pre">AuthConfig</span></tt> ora vale per l'intera
2189 directory, come le altre opzioni.</p>
2193 <div class="section" id="negoziazione-accessi">
2194 <h2><a class="toc-backref" href=
2195 "#id41">3.6 Negoziazione accessi</a></h2>
2197 <p>Tipicamente quando si installa un server web il proprio
2198 desiderio e' di dare accesso ai materiali disponibili al
2199 maggior numero di visitatori possibile. Talvolta pero' puo
2200 essere utile o necessario limitare gli accessi, ad esempio
2201 per escludere un <em>bot</em> indesiderato che scansiona
2202 ininterottamente le nostre pagine o per creare una <em>Area
2203 Riservata</em> i cui materiali non devono essere
2204 disponibile a tutti.</p>
2206 <div class="section" id="limiti-su-base-ip">
2207 <h3><a class="toc-backref" href=
2208 "#id42">3.6.1 Limiti su base ip</a></h3>
2210 <p>La forma piu' semplice di restrizine degli accessi e'
2211 su base degli indirizzi IP dei client: tipicamente i siti
2212 web sono settati per dare accesso a chiunque:</p>
2213 <pre class="literal-block">
2214 <VirtualHost *:80 >
2216 <Directory "/var/www/177.piffa.net">
2220 </VirtualHost>
2223 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2225 <pre class="literal-block">
2226 <VirtualHost *:80 >
2227 <Directory "/var/www/177.piffa.net">
2230 Deny from 192.168.0.1
2232 </VirtualHost>
2235 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2236 materiali dell'intero sito virtuale, oppure potremmo
2237 lavorare su una sola directory:</p>
2238 <pre class="literal-block">
2239 <Directory "/var/www/miosito.net/limitata">
2241 Allow from 192.168.0.0./24
2246 <p>In questo modo solo la classe IP <tt class=
2247 "docutils literal"><span class=
2248 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2249 directory <tt class="docutils literal"><span class=
2250 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2251 relativamente facile per un malintenzionato cambiare il
2252 propio indirizzo ip, oppure collegarsi da un altra zona.
2253 Meno facile e' accedere ad una classe privata trovandosi
2254 all'esterno di questa, ma e' comunque possibile mandare
2255 delle richieste <tt class="docutils literal"><span class=
2256 "pre">GET</span></tt> per cercare di mandare in Denial Of
2257 Service il webserver.</p>
2261 <div class="section" id="user-authentication">
2262 <h2><a class="toc-backref" href=
2263 "#id43">3.7 User Authentication</a></h2>
2265 <p>A volte conviene negoziare gli accessi ad un area di un
2266 sito tramite autenticazione basata sull'accopiata <em>nome
2267 utente / password</em>. Questo puo' venire utile per creare
2268 una area download <em>intranet</em>, alla quale possano
2269 accedere solo gli utenti previsti a prescindere dagli
2270 indirizzi IP dei loro client. Per quanto esistano soluzioni
2271 piu' granulari e sofisticate per ottenere questo,
2272 <em>mod-auth</em> puo'essere sufficente. E mod auth non
2273 richiede l'installazione di software aggiuntivi.</p>
2275 <p>link: <a class="reference external" href=
2276 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2278 <div class="section" id="definire-la-cartella">
2279 <h3><a class="toc-backref" href=
2280 "#id44">3.7.1 Definire la
2283 <p>Decidere quale sara' il <em>path</em> della cartella
2284 da sottoporre ad autentizazione:(e creiamo la
2288 <tt class="docutils literal"><span class=
2289 "pre">mkdir</span> <span class=
2290 "pre">/var/www/177.piffa.net/privata</span></tt>
2294 <div class="section" id=
2295 "creazione-del-database-delle-passwords">
2296 <h3><a class="toc-backref" href=
2297 "#id45">3.7.2 Creazione del database
2298 delle passwords</a></h3>
2300 <p>Un modo semplice per gestire una database di
2301 <em>user-id / passwords</em> e' utilizzare l'utility
2302 <tt class="docutils literal"><span class=
2303 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2304 in cui un <em>crypt</em> delle password viene associato
2307 <p>Si dovra' decidere dove tenere questo file, la cosa
2308 importante e' che non sia visibile nel sito web: non deve
2309 essere scaricabile dai visitatori. Deve essere cioe'
2310 all'esterno della <em>DocumentRoot</em>: un buon posto
2311 potrebbe essere la /home dell'utente.</p>
2313 <p>Creiamo (con il <em>flag</em> <tt class=
2314 "docutils literal"><span class="pre">-c</span></tt>) il
2315 file <tt class="docutils literal"><span class=
2316 "pre">/home/utente/passwords</span></tt> con l'utente
2317 <tt class="docutils literal"><span class=
2318 "pre">luca</span></tt>:</p>
2319 <pre class="literal-block">
2320 htpasswd -c /home/utente/passwords luca
2323 <p><tt class="docutils literal"><span class=
2324 "pre">htpasswd</span></tt> ci chedera' la password da
2325 associare all'utente <tt class=
2326 "docutils literal"><span class="pre">luca</span></tt>.
2327 Per sucessive modifiche della password o aggiunta di
2328 nuovi utenti non sara' necessario usare il flag
2329 <tt class="docutils literal"><span class=
2330 "pre">-c</span></tt>.</p>
2333 <div class="section" id="id3">
2334 <h3><a class="toc-backref" href=
2335 "#id46">3.7.3 Configurazione di
2338 <p>Ora possiamo passare alla configurazione vera e
2339 propria di Apache, ma con una novita': andremo a inserire
2340 la voce in un <tt class="docutils literal"><span class=
2341 "pre">.htaccess</span></tt> invece che modificare il file
2342 di impostazione del virtual-host.</p>
2344 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2345 puo' modificare l'impostazione del virtual host nel file
2346 <tt class="docutils literal"><span class=
2347 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2348 ma spesso il motivo per cui creiamo i virtual hosts e'
2349 ospitare i siti di altri utenti, che possono solo
2350 pubblicare (generalmente tramite <em>FTP</em>) i loro
2351 documenti nella loro <em>DocumentRoot</em>, senza poter
2352 quindi modificare in alcun modo la configurazione del
2355 <p>Dando agli utenti la possibilita' di modificare
2356 (<em>AllowOverride</em>) autonomamente alcuni parametri
2357 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2358 funzionamenteo del loro spazio web ci togliera'
2359 l'incombenza di dover intervenire suii vari virtual
2362 <p>Abilitiamo l'AllowOverride nel file di configurazione
2363 del virtual host per la sola directory <tt class=
2364 "docutils literal"><span class=
2365 "pre">privata</span></tt>:</p>
2366 <pre class="literal-block">
2367 <VirtualHost *:80 >
2368 ServerName 177.piffa.net
2369 DocumentRoot /var/www/177.piffa.net/
2370 ServerAdmin webmaster@177.piffa.net
2371 <Directory "/var/www/177.piffa.net/privata">
2372 AllowOverride AuthConfig
2374 </VirtualHost>
2377 <p>Per rendere il cambiamento effettivo sara' necessario
2378 fare un restart / reload di Apache.</p>
2380 <p>Ora sara' possibile, anche per l'utente di sistema,
2381 creare un fie <tt class="docutils literal"><span class=
2382 "pre">.htaccess</span></tt> che sara' onorato da
2385 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2386 <pre class="literal-block">
2387 # Questo file viene incluso
2388 # nella configurazione del sito web
2389 # Messaggio visualizzato al prompt per l'autenticazione
2390 AuthName "Area privata soggetta ad autentizazione"
2391 # tipo di autenticazione da usarsi
2393 # File generato precedentemente con htpasswd
2394 AuthUserFile /home/utente/passwords
2396 # Negoziazione degli accessi
2397 # valid users permette l'accesso agli utenti specificati
2398 # nel file generato da htpasswd
2402 <p>Si noti che non e' necessario fare ripartire Apache
2403 per onorare i cambiamenti (un utente non avrebbe la
2404 possibilita' di farlo!).</p>
2408 <div class="section" id="cavets">
2409 <h2><a class="toc-backref" href=
2410 "#id47">3.8 Cavets</a></h2>
2412 <p>Problemi di cache:</p>
2416 <li>Proxy: nei settaggi del browser specificare di non
2417 utilizzare un server proxy http per il sito web locale
2418 (o per gli altri che si stanno monitorando). Se si ha
2419 il controllo del proxy server: stopparlo, ricaricare la
2420 pagina (operazione che fallira'), far ripartire il
2421 proxy, ricaricare la pagina.</li>
2423 <li>Provare con un altro browser, o cercare di svuotare
2424 la cache chiudere/riaprire l'applicativo. Provare a
2425 fermare Apache, ricaricare la pagina (operazione che
2426 fallira'), far ripartire Apache, ricaricare la
2433 <div class="section" id="domain-name-system">
2434 <h1><a class="toc-backref" href=
2435 "#id48">4 Domain Name System</a></h1>
2437 <p>Domain Name System (spesso indicato con DNS) e' un
2438 servizio utilizzato per la risoluzione di nomi di host in
2439 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2440 un database distribuito, costituito dai server DNS.</p>
2442 <p>Il nome DNS denota anche il protocollo che regola il
2443 funzionamento del servizio, i programmi che lo implementano,
2444 i server su cui questi girano, l'insieme di questi server che
2445 cooperano per fornire il servizio.</p>
2447 <p>I nomi DNS, o "nomi di dominio", sono una delle
2448 caratteristiche piu' visibili di Internet.</p>
2450 <p>C'e' confusione in merito alla definizione dell'acronimo:
2451 la S spesso viene interpretata come service, ma la
2452 definizione corretta e' system.</p>
2454 <p>L'operazione di convertire un nome in un indirizzo e'
2455 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2456 detto risoluzione inversa.</p>
2458 <div class="section" id="nomi-di-dominio">
2459 <h2><a class="toc-backref" href=
2460 "#id49">4.1 Nomi di dominio</a></h2>
2462 <p>Un nome a dominio e' costituito da una serie di stringhe
2463 separate da punti, ad esempio it.wikipedia.org. A
2464 differenza degli indirizzi IP, dove la parte piu'
2465 importante del numero e' la prima partendo da sinistra, in
2466 un nome DNS la parte piu' importante e' la prima partendo
2467 da destra. Questa e' detta dominio di primo livello (o TLD,
2468 Top Level Domain), per esempio .org o .it.</p>
2470 <p>Un dominio di secondo livello consiste in due parti, per
2471 esempio wikipedia.org, e cosi' via. Ogni ulteriore elemento
2472 specifica un'ulteriore suddivisione. Quando un dominio di
2473 secondo livello viene registrato all'assegnatario, questo
2474 e' autorizzato a usare i nomi di dominio relativi ai
2475 successivi livelli come it.wikipedia.org (dominio di terzo
2476 livello) e altri come some.other.stuff.wikipedia.org
2477 (dominio di quinto livello) e cosi' via.</p>
2480 <div class="section" id="tipologie-di-record">
2481 <h2><a class="toc-backref" href=
2482 "#id50">4.2 Tipologie di record</a></h2>
2484 <p>Ad un nome DNS possono corrispondere diversi tipi di
2485 informazioni. Per questo motivo, esistono diversi tipi di
2486 record DNS. Ogni voce del database DNS deve essere
2487 caratterizzata da un tipo. I principali tipi sono:</p>
2490 <li>Record A - Indica la corrispondenza tra un nome ed
2491 uno (o piu') indirizzi IP (per la precisione indirizzi
2492 IPv4, ovvero la versione attualmente in uso).</li>
2494 <li>Record MX - (Mail eXchange) indica a quali server
2495 debba essere inviata la posta elettronica per un certo
2498 <li>Record CNAME - Sono usati per creare un alias, ovvero
2499 per fare in modo che lo stesso calcolatore sia noto con
2500 piu' nomi. Uno degli utilizzi di questo tipo di record
2501 consiste nell'attribuire ad un host che offre piu'
2502 servizi un nome per ciascun servizio. In questo modo, i
2503 servizi possono poi essere spostati su altri host senza
2504 dover riconfigurare i client, ma modificando solo il
2507 <li>Record PTR - Il DNS viene utilizzato anche per
2508 realizzare la risoluzione inversa, ovvero per far
2509 corrispondere ad un indirizzo IP il corrispondente nome a
2510 dominio. Per questo si usano i record di tipo "PTR" (e
2511 una apposita zona dello spazio dei nomi
2514 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2516 <li>Record SRV - Identificano il server per un
2517 determinato servizio all'interno di un dominio. Possono
2518 essere considerati una generalizzazione dei record
2521 <li>Record TXT - Associano campi di testo arbitrari ad un
2522 dominio. Questi campi possono contenere una descrizione
2523 informativa oppure essere utilizzati per realizzare
2527 <p>Vi sono anche tipi di record "di servizio", necessari al
2528 funzionamento del database distribuito: * Record NS -
2529 Utilizzato per indicare quali siano i server DNS
2530 autoritativi per un certo dominio, ovvero per delegarne la
2531 gestione. * Record SOA - (Start of Authority) usato per la
2532 gestione delle zone DNS.</p>
2535 <div class="section" id="utilizzo">
2536 <h2><a class="toc-backref" href=
2537 "#id51">4.3 Utilizzo</a></h2>
2539 <p>I computer vengono identificati in rete grazie agli
2540 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2541 utenti come riferimento per i vari server. Ad esempio
2542 sarebbe scomodoriferirsi al motore di ricerca Goggle con
2543 uno dei suoi IP: <tt class="docutils literal"><span class=
2544 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2545 nome di dominio <em>www.google.com</em>:</p>
2546 <pre class="literal-block">
2547 ping -c 1 www.google.com
2548 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2552 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2553 <h2><a class="toc-backref" href=
2554 "#id52">4.4 Risoluzione dei nomi di
2557 <p>Ci sono vari strumenti per interrogare i server DNS e
2558 ottenere l'indirizzo IP associato al nome di dominio che ci
2560 <pre class="literal-block">
2561 $ host www.piffa.net
2562 www.piffa.net is an alias for piffa.net.
2563 piffa.net has address 65.98.21.97
2564 piffa.net mail is handled by 10 65.98.21.97
2567 $ nslookup www.piffa.net
2568 Server: 192.168.0.10
2569 Address: 192.168.0.10#53
2571 Non-authoritative answer:
2572 www.piffa.net canonical name = piffa.net.
2574 Address: 65.98.21.97
2579 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2580 ;; global options: +cmd
2582 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2583 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2585 ;; QUESTION SECTION:
2586 ;www.piffa.net. IN A
2589 www.piffa.net. 3489 IN CNAME piffa.net.
2590 piffa.net. 3489 IN A 65.98.21.97
2592 ;; AUTHORITY SECTION:
2593 piffa.net. 86289 IN NS ns2.mydomain.com.
2594 piffa.net. 86289 IN NS ns1.mydomain.com.
2595 piffa.net. 86289 IN NS ns4.mydomain.com.
2596 piffa.net. 86289 IN NS ns3.mydomain.com.
2598 ;; ADDITIONAL SECTION:
2599 ns1.mydomain.com. 96208 IN A 64.94.117.193
2600 ns2.mydomain.com. 96208 IN A 64.94.31.67
2601 ns3.mydomain.com. 96208 IN A 66.150.161.137
2602 ns4.mydomain.com. 96208 IN A 63.251.83.74
2604 ;; Query time: 1 msec
2605 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2606 ;; WHEN: Sun May 10 21:23:11 2009
2607 ;; MSG SIZE rcvd: 209
2610 <p>Lo strumento piu' esaustivo e' <tt class=
2611 "docutils literal"><span class="pre">dig</span></tt>,
2612 installabile con il pacchetto <tt class=
2613 "docutils literal"><span class="pre">dnsutils</span></tt>
2617 <div class="section" id="dig">
2618 <h2><a class="toc-backref" href=
2619 "#id53">4.5 Dig</a></h2>
2621 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2622 "docutils literal"><span class="pre">dig</span></tt> per
2623 l'inerrogazione dei DNS Server:</p>
2624 <pre class="literal-block">
2627 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2628 ;; global options: +cmd
2630 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2631 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2633 ;; QUESTION SECTION:
2634 ;www.google.it. IN A
2637 www.google.it. 250683 IN CNAME www.google.com.
2638 www.google.com. 334819 IN CNAME www.l.google.com.
2639 www.l.google.com. 186 IN A 74.125.43.103
2640 www.l.google.com. 186 IN A 74.125.43.104
2641 www.l.google.com. 186 IN A 74.125.43.147
2642 www.l.google.com. 186 IN A 74.125.43.99
2644 ;; AUTHORITY SECTION:
2645 l.google.com. 80856 IN NS f.l.google.com.
2646 l.google.com. 80856 IN NS d.l.google.com.
2647 l.google.com. 80856 IN NS b.l.google.com.
2648 l.google.com. 80856 IN NS c.l.google.com.
2649 l.google.com. 80856 IN NS a.l.google.com.
2650 l.google.com. 80856 IN NS e.l.google.com.
2651 l.google.com. 80856 IN NS g.l.google.com.
2653 ;; Query time: 1 msec
2654 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2655 ;; WHEN: Sun May 10 21:34:47 2009
2656 ;; MSG SIZE rcvd: 255
2659 <dl class="docutils">
2662 <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
2663 <em>root servers</em> utilizzati. I root server sono i
2664 server che mantengono le informazioni sui domini di primo
2665 livello (TLD) e sono quindi il punto di partenza per
2666 scorrere nella directory dei DNS per recuperare le
2667 informazioni (tipicamente un campo <tt class=
2668 "docutils literal"><span class="pre">A</span></tt> per un
2669 indirizzo IP) che ci servono per raggiungere un certo
2678 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2679 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2680 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2681 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2682 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2683 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2684 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2685 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2686 J.ROOT-SERVERS.NET. . 192032 IN NS
2687 D.ROOT-SERVERS.NET.</p>
2692 <dl class="docutils">
2693 <dt>dig @nome_dns</dt>
2695 <dd>Permette di fare una query ad un server dns
2696 particolare. Es: <tt class=
2697 "docutils literal"><span class="pre">dig</span>
2698 <span class="pre">@151.99.25.1</span> <span class=
2699 "pre">www.google.it</span></tt></dd>
2701 <dt>dig MX www.google.it</dt>
2703 <dd>Chiede un campo in particolare, in questo caso il
2706 <dt>dig ANY www.google.it</dt>
2708 <dd>Chiede tutti i campi, non solo i campi
2711 <dt>dig -x 74.125.43.104</dt>
2713 <dd>Effettua una richiesta inversa: dall'ip al PTR
2718 <div class="section" id="resolv-conf">
2719 <h2><a class="toc-backref" href=
2720 "#id54">4.6 resolv.conf</a></h2>
2722 <p>Il file <tt class="docutils literal"><span class=
2723 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2724 sul dns usato dal sistema, in genere anche altre
2725 applicazioni che devono effettuare query DNS leggono
2726 resolv.conf per conoscere l'ubicazione del DNS.</p>
2728 <p>/etc/resolv.conf:</p>
2732 <li><tt class="docutils literal"><span class=
2733 "pre">nameserver</span></tt>: indica il nameserver da
2734 utilizzare, indicato con l'indirizzo ip.</li>
2736 <li><tt class="docutils literal"><span class=
2737 "pre">domain</span></tt>: indica il nome di dominio
2738 della rete attuale, vedi voce sucessiva.</li>
2740 <li><tt class="docutils literal"><span class=
2741 "pre">search</span></tt>: nome di dominio usato dalla
2742 rete sul quale cercare gli hosts. Ad esempio se
2743 impostato su <tt class="docutils literal"><span class=
2744 "pre">piffa.net</span></tt> pingando l'host <tt class=
2745 "docutils literal"><span class="pre">bender</span></tt>
2746 viene automaticamente fatto un tentativo di ricerca per
2747 <tt class="docutils literal"><span class=
2748 "pre">bender.piffa.net</span></tt>.</li>
2752 <p>Si veda anche la pagina man di resolv.conf.</p>
2754 <p>Attenzione: se si usa un client DHCP o simile questo
2755 file potra' essere riscritto automaticamente in base a
2756 quanto ottenuto dal DHCP. Si veda la documentazione del
2757 pacchtto <tt class="docutils literal"><span class=
2758 "pre">resolvconf</span></tt>.</p>
2761 <div class="section" id="etc-hosts">
2762 <h2><a class="toc-backref" href=
2763 "#id55">4.7 /etc/hosts</a></h2>
2765 <p>Tabella statica per l'associazione tra IP e nomi di
2767 <pre class="literal-block">
2772 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2773 daniela daniela.piffa.net 10.10.208.254 mirror
2774 mirror.piffa.net 91.191.138.15 thepiratebay.org
2775 192.168.0.11 chrome chrome.mydomain.com
2778 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2779 stringhe di testo (anche piu' di una es: <tt class=
2780 "docutils literal"><span class="pre">mirror</span></tt> e
2781 <tt class="docutils literal"><span class=
2782 "pre">mirror.piffa.net</span></tt>), un record per
2785 <p>Il problema e' la gestione di questo file: quando gli
2786 host cambiano IP si devono aggiornare i records, e c'e' poi
2787 il problema di distribuire questo file tra i vari hosts
2788 della propia LAN. Un metodo semplice per distribuire questo
2789 file e' utilizzare <tt class=
2790 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2791 questo infatti legge e onora il file <tt class=
2792 "docutils literal"><span class="pre">hosts</span></tt>
2793 locale e lo <em>distribuisce</em> ai clients.</p>
2795 <p>Modificare (riconducendola a un ip interno, cosi'
2796 annullandola) la risoluzione di un nome di dominio e' un
2797 modo drastico e funzionale per <em>annullarlo</em>
2798 rendendolo indisponibile alla propia rete locale, ad
2799 esempio aggiungere al file <tt class=
2800 "docutils literal"><span class=
2801 "pre">/etc/hosts</span></tt>:</p>
2802 <pre class="literal-block">
2803 127.0.0.1 www.facebook.com
2806 <p>Impedira' agli utenti della LAN di raggiungere
2807 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2810 <div class="section" id="hostname">
2811 <h2><a class="toc-backref" href=
2812 "#id56">4.8 Hostname</a></h2>
2814 <p>Ogni computer ha un <em>propio nome</em> visualizzabile
2815 (e modificabile) con il comando <tt class=
2816 "docutils literal"><span class=
2817 "pre">hostname</span></tt>.</p>
2819 <p>Per modificare in modo permanente il nome del computer
2820 si modifichi il contenuto del file <tt class=
2821 "docutils literal"><span class=
2822 "pre">/etc/hostname</span></tt>.</p>
2824 <p>Tipicamente si vuole mantenere una correlazione tra il
2825 nome dell'host, o meglio la stringa con cui il server si
2826 qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
2827 di <em>servizi virtuali</em> ci sara' un <em>nome
2828 server</em> principale associato al <em>PTR</em> condiviso.
2829 Non e' automatico che un servizio, ad esempio un server di
2830 posta, si qualifichi leggendo il contenuto di questo file e
2831 magari aggiungendo come suffisso il dominio di cui fa parte
2832 l'host: a volte questo parametro puo' essere specificato
2833 nel file di configurazione del servizio:</p>
2834 <pre class="literal-block">
2835 * Squid: ``visible_hostname``
2837 * Postfix: ``myhostname``
2842 <div class="section" id="dnsmasq">
2843 <h1><a class="toc-backref" href=
2844 "#id57">5 DNSmasq</a></h1>
2846 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
2847 forwarder e un server DHCP caratterizzato dalla facilita' di
2848 configurazione, dalla leggerezza e dalla possibilita' di
2849 modificare rapidamente i record DNS serviti alla rete. Puo'
2850 essere anche utilizzato come <cite>server per il boot da rete
2851 <http://www.debian-administration.org/articles/478>_</cite>
2854 <p>Dnsmasq e' un interessante alternativa all'uso del server
2855 DNS Bind in modalita' cache-only (non autoritativo)
2856 accompagnato dal server DHCPD. I vantaggi sono:</p>
2859 <li>Leggerezza: puo' essere fatto girare su una macchina
2860 relativamente debole in caso di bisogno.</li>
2862 <li>Rapidita' di configurazione (in particolare per servire
2863 dei record A / MX alla rete, modificando al volo i valori
2864 originali ospitati sul server DNS Publico).</li>
2866 <li>Ben integrato con connssioni PPP (utile se dovete
2867 rendere disponibile rapidamente una connessione a internet
2868 a una rete in difficolta').</li>
2871 <p>Tutto cio' rende Dnsmasq una soluzione valida in
2872 particolare quando si deve intervenire in una rete
2873 pre-esistente in cui il server principale e' in crisi: si
2874 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
2875 <em>mascherare</em> i servizi al momento non disponibili.
2876 Molto utile per scopi didattici, sopratutto per testare
2877 server SMTP impostando al volo i campi MX per nomi di dominio
2880 <div class="section" id="configurazione">
2881 <h2><a class="toc-backref" href=
2882 "#id58">5.1 Configurazione</a></h2>
2884 <p>Vediamo alcune direttive di basi del file di
2885 configurazione <tt class="docutils literal"><span class=
2886 "pre">/etc/dnsmasq.conf</span></tt> utili per la
2887 configurazione sia del DNS cache che per il DHCP
2890 <dl class="docutils">
2891 <dt>domain-needed</dt>
2893 <dd>Non inoltrare query ai server DNS esterni per nomi
2894 semplici (es andrea, portatile, pippo) che verranno
2895 risolti solo in locale o causeranno direttamente una
2896 risposta <em>not found</em> .</dd>
2900 <dd>Simile alla voce precedente ma per i reverse
2905 <dd>Nome di dominio della rete da passare ai client.</dd>
2907 <dt>expand_hosts</dt>
2909 <dd>Aggiunge il <tt class="docutils literal"><span class=
2910 "pre">nome</span> <span class="pre">host</span></tt> (
2911 <tt class="docutils literal"><span class=
2912 "pre">/etc/hostname</span></tt>) dei client al nome di
2913 dominio per qualificarli in rete, senza bisogno di dover
2914 comporre a un elenco statico di record nel file
2915 <tt class="docutils literal"><span class=
2916 "pre">/etc/hosts</span></tt> o nello stesso file di
2917 configurazione di dnsmasq. Es: se un vostro client si
2918 chiama <tt class="docutils literal"><span class=
2919 "pre">chrome</span></tt> e il vostro dominio <tt class=
2920 "docutils literal"><span class=
2921 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
2922 il campo <em>A</em> per il dominio <tt class=
2923 "docutils literal"><span class=
2924 "pre">chrome.piffa.net</span></tt> diretto all'ip che
2925 verra' assegnato al client.</dd>
2929 <div class="section" id="dhcp">
2930 <h2><a class="toc-backref" href=
2931 "#id59">5.2 DHCP</a></h2>
2933 <p>Per attivare il demone DHCP di dnsmaq basta aggiungere
2934 al file di configurazione il <em>range</em> degli ip che si
2935 vuole assegnare ai client con il <em>lease time</em> (tempo
2936 di rilascio: quanto a lungo saranno validi gli ip
2937 assegnati) espresso in ore.</p>
2939 <p>Si faccia <em>attenzione</em>: in una rete puo' esseere
2940 presente <strong>un solo server DHCP</strong>, o per meglio
2941 dire qualunque server DHCP ascolta sul broadcast <tt class=
2942 "docutils literal"><span class=
2943 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
2944 un pacchetto di richesta DHCP. Quindi non fate partire
2945 inavvertitamente un server DHCP in una rete gia' servita e
2946 <strong>non vi azzardate ad andare in giro con un portatile
2947 con un server DHCP attivo</strong> nelle reti altrui.
2948 Questo vale anche per i laboratori di informatica dei corsi
2949 di reti: non fate partire il vostro server DHCP se siete
2950 collegati alla rete interna!</p>
2952 <p>/etc/dnsmasq.conf (riga 118):</p>
2953 <pre class="literal-block">
2954 dhcp-range=192.168.0.20,192.168.0.50,24h
2958 <div class="section" id="dns-cache">
2959 <h2><a class="toc-backref" href=
2960 "#id60">5.3 DNS cache</a></h2>
2962 <p>Aggiungere al file <tt class=
2963 "docutils literal"><span class=
2964 "pre">/etc/resolv.conif</span></tt> il nameserver localhost
2965 in cima alla lista dei <em>nameserver</em> disponibili.
2966 Dnsmasq usera' la propia cache e in caso non abbia
2967 disponibile il <em>record DNS</em> richiesto fara' partire
2968 una query al primo DNS:</p>
2969 <pre class="literal-block">
2970 nameserver 127.0.0.1
2973 <p>Questo pero' potrebbe essere problematico se un altro
2974 servizio, ad esempio il DHCP client, riscrive il contenuto
2975 del file <tt class="docutils literal"><span class=
2976 "pre">/etc/resolv.conf</span></tt>. Per superare il
2977 problema si aggiunga (riga 20) al file di configurazione
2978 <tt class="docutils literal"><span class=
2979 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
2980 <pre class="literal-block">
2981 prepend domain-name-servers 127.0.0.1;
2984 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
2985 (per la connessione ADSL) a intervenire sul file <tt class=
2986 "docutils literal"><span class=
2987 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
2988 <tt class="docutils literal"><span class=
2989 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
2990 <tt class="docutils literal"><span class=
2991 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
2992 internet e' ADSL raramente dovreste aver bisogno di
2993 cambiare i DNS una volta impostati (a meno che non usiate
2997 <div class="section" id="dhcpd">
2998 <h2><a class="toc-backref" href=
2999 "#id61">5.4 DHCPd</a></h2>
3001 <p>Dnsmasq puo' lavorare anche come DHCP server per la
3006 <div class="section" id="samba">
3007 <h1><a class="toc-backref" href=
3008 "#id62">6 Samba</a></h1>
3010 <p>Samba e' un progetto libero che fornisce servizi di
3011 condivisione di file e stampanti a client SMB/CIFS.</p>
3013 <p>Samba e' liberamente disponibile, al contrario di altre
3014 implementazioni SMB/CIFS, e permette di ottenere
3015 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
3017 <p>Samba e' un software che puo girare su piattaforme che non
3018 siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
3019 390, OpenVMS e altri sistemi operativi. Samba utilizza il
3020 protocollo TCP/IP utilizzando i servizi offerti sul server
3021 ospite. Quando correttamente configurato, permette di
3022 interagire con client o server Microsoft Windows come se
3023 fosse un file e print server Microsoft agendo da Primary
3024 Domain Controller (PDC) o come Backup Domain Controller, puo'
3025 inoltre prendere parte ad un dominio Active Directory.</p>
3027 <div class="section" id="pacchetti">
3028 <h2><a class="toc-backref" href=
3029 "#id63">6.1 Pacchetti</a></h2>
3031 <p>Pacchetti da installare per utilizzare Samba in
3032 modalita' client <a class="footnote-reference" href="#id5"
3033 id="id4" name="id4">[2]</a></p>
3034 <pre class="literal-block">
3038 <p>Pacchetti da installare per utilizzare Samba in
3039 modalita' server:</p>
3040 <pre class="literal-block">
3041 samba smbfs smbclient
3044 <table class="docutils footnote" frame="void" id="id5"
3051 <tbody valign="top">
3053 <td class="label"><a class="fn-backref" href=
3056 <td>Anche se nato per i sistemi Windows, Samba puo'
3057 essere usato anche per montare cartelle sotto
3058 GNU/Linux come alternativa a NFS. Per la condivisione
3059 di stampanti sarebbe invece opportuno intervenire
3060 direttamente su <tt class=
3061 "docutils literal"><span class=
3062 "pre">CUPS</span></tt>.</td>
3067 <p>Durante la prima installazione viene chiesto il nome del
3068 gruppo di appartenenza, il default per Windows e'
3069 <tt class="docutils literal"><span class=
3070 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3071 <tt class="docutils literal"><span class=
3072 "pre">208</span></tt> .</p>
3074 <p>Per riconfigurare Samba si usi il comando:</p>
3075 <pre class="literal-block">
3076 dpkg-reconfigure samba-common
3080 <div class="section" id="passwords-e-autenticazione">
3081 <h2><a class="toc-backref" href=
3082 "#id64">6.2 Passwords e
3083 autenticazione</a></h2>
3085 <p>Per poter configurare Samba in modo che usi un sistema
3086 di negoziazione degli accessi alle cartelle condivise
3087 basato su accoppiate <em>nome utente / password</em>
3088 bisogna distinguere tra 3 livelli di password (e
3089 generalmente volete usare <em>sempre la stessa
3090 password</em> per ognuno di questi) e delle differenze tra
3091 le modalita' di <em>autenticazione</em> (e quindi anche di
3092 criptaggio delle passwords) usate da sistemi GNU/Linux e
3095 <dl class="docutils">
3096 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3098 <dd>E' la password dell'<em>utente di sistema</em> che
3099 viene usata sul sistema operativo su cui gira il software
3100 Samba. E' importante tenere conto anche delle
3101 <em>user-id</em> e <em>group-id</em> degli utenti che
3102 dovranno fisicamente scrivere sui file system. Se un
3103 utente non puo' scrivere in una certa posizione del file
3104 system (ad esempio nella cartella <tt class=
3105 "docutils literal"><span class=
3106 "pre">/mnt/condivisione</span></tt> che sara' stata
3107 necessariamente creata inizialmente dall'utente
3108 <tt class="docutils literal"><span class=
3109 "pre">root</span></tt>) per mancanza dei privilegi di
3110 scrittura allora neanche Samba potra' farlo nel momento
3111 in mette a disposizione la risorsa all'utente. Se si
3112 montano file-system dedicati per le condivisioni
3113 controllare i permessi e propieta' dei <em>punti di
3114 mount*</em>. Queste passwords sono salvate nel solito
3115 file /etc/shadow (richiamato da /etc/passwd).</dd>
3117 <dt>2 Password per l'applicativo Samba</dt>
3119 <dd>Samba deve essere compatibile con Windows e quindi
3120 utilizzare un sistema di criptazione delle password
3121 diverso da /etc/shadow . Le password per Samba possono
3122 essere gestite ad esempio col comando <tt class=
3123 "docutils literal"><span class=
3124 "pre">smbpasswd</span></tt> e vengono generalmente
3125 salvate all'interno di <tt class=
3126 "docutils literal"><span class=
3127 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3129 <dt>3 Password per Windows.</dt>
3131 <dd>Gli utenti Windows effettuano il log-in alla partenza
3132 della sessione di Windows. Se si avra' l'accortezza di
3133 usare sempre la <em>stessa password</em> data
3134 precedentemente anche a Windows (o viceversa impostare la
3135 password per GNU/Linux / Samba uguale a quella di
3136 Windows) l'utente potra' accedere automaticamente alle
3137 condivisioni a lui disponibili.</dd>
3141 <div class="section" id="creazione-utenti">
3142 <h2><a class="toc-backref" href=
3143 "#id65">6.3 Creazione Utenti</a></h2>
3145 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3146 attenzione a <em>non dargli una shell di sistema</em>. Gli
3147 utenti Windows che accedono al server solo per le
3148 condivisioni non hanno bisogno di poter eseguire comandi
3151 <p>Creazione di un utente denominato sambo:</p>
3152 <pre class="literal-block">
3153 adduser --shell /bin/false sambo
3156 <p>Nel file <tt class="docutils literal"><span class=
3157 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3158 <pre class="literal-block">
3159 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3162 <p>Aggiunta dell'utente al database delle password per
3163 Samba e generazione della sua password:</p>
3164 <pre class="literal-block">
3168 <p>Se successivamente si vorra' modificare la password di
3169 un utente gia' esistente si usi:</p>
3170 <pre class="literal-block">
3174 <p>La password sotto Windows verra' modificata sul sistema
3178 <div class="section" id="creare-la-condivisione">
3179 <h2><a class="toc-backref" href=
3180 "#id66">6.4 Creare la
3181 condivisione</a></h2>
3183 <p>La condivisione altro non e' che una cartella sul server
3184 che viene resa disponibile ai client negoziando l'accesso
3185 in base a una autenticazione basata su <em>user-name /
3186 password</em>. E' per altro possibile permettere l'accesso
3187 a una risorsa a chiunque indiscriminatamente (a tutti i
3188 <tt class="docutils literal"><span class=
3189 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3190 punto di vista della sicurezza. Si decida se la cartella
3191 condivisa debba risiedere nella <em>home</em> di un utente
3192 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3193 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3194 Nel secondo caso si potranno gestire gli accessi sotto
3195 GNU/Linux tramite i gruppi.</p>
3197 <p>Creazione della risorsa sambo_share nella home
3198 dell'utente sambo:</p>
3199 <pre class="literal-block">
3200 # mkdir /home/sambo/sambo_share
3201 # chown sambo:sambo /home/sambo/sambo_share/
3204 <div class="section" id=
3205 "sicurezza-permessi-di-esecuzione-sul-server">
3206 <h3><a class="toc-backref" href=
3207 "#id67">6.4.1 Sicurezza: permessi di
3208 esecuzione sul server</a></h3>
3210 <p>Bisognerebbe notare sul server i permessi di
3211 esecuzione del file-system che ospita la cartella da
3212 condividere. Se i file che saranno contenuti nella
3213 condivisione saranno da usarsi sotto Windows non c'e'
3214 motivo che questi siano eseguibili sotto GNU/Linux. Si
3215 potrebbe avere quindi, ipotizzando una condivisione in
3216 <tt class="docutils literal"><span class=
3217 "pre">/mnt/share</span></tt> che risieda su di un file
3218 system dedicato:</p>
3220 <p><tt class="docutils literal"><span class=
3221 "pre">/etc/fstab</span></tt></p>
3224 /dev/hda10 /mnt/share ext3 rw,
3225 <strong>nosuid,noexec</strong> 0 3
3228 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3229 possibilita' di eseguire programmi con credenziali
3234 <div class="section" id=
3235 "configurazione-dell-applicativo-samba-vero-e-proprio">
3236 <h2><a class="toc-backref" href=
3237 "#id68">6.5 Configurazione
3238 dell'applicativo Samba vero e proprio.</a></h2>
3240 <p>Avendo preparato gli utenti (ancora una volta: non si
3241 dia una shell completa a un utente che serve solo per Samba
3242 o la posta elettronica) e la cartella sul file system si
3243 puo' procedere a configurare la condivisione su Samba.</p>
3245 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3246 vim si usi 235gg ):</p>
3247 <pre class="literal-block">
3249 # Percorso della cartella condivisa
3250 path = /home/sambo/sambo_share
3251 # Se gli utenti possono scrivere / modificare file
3253 # Negoziazione degli accessi su base utenti / passwords
3256 # #######################################
3257 # Altri parametri opzionali di interesse
3258 # Se posso vedere la condivisione da esplora risorse
3259 # anche se non ho i privilegi per accedervi.
3261 # Commento indicativo della risorsa
3262 comment = Condivisione per Sambo
3265 <p>Dopo aver salvato il file si puo' fare un primo
3266 controllo tramite l'utility <tt class=
3267 "docutils literal"><span class="pre">testparm</span></tt> ,
3268 che controlla la sintassi del file di configurazione di
3269 Samba. Se questo non rileva problemi si puo' procedere a un
3270 <tt class="docutils literal"><span class="pre">#</span>
3271 <span class="pre">/etc/init.d/samba</span> <span class=
3272 "pre">restart</span></tt> .</p>
3275 <div class="section" id="testare-il-servizio">
3276 <h2><a class="toc-backref" href=
3277 "#id69">6.6 Testare il Servizio</a></h2>
3279 <p>Come testare il servizio</p>
3282 <pre class="literal-block">
3283 smbclient -U sambo -L localhost
3286 <p>Questo comando permette di esplorare la risorsa
3287 qualificandosi come utente, in questo modo potete testare
3288 il corretto funzionamento dell'autenticazione. Si provi
3289 inizialmente a sbagliare la password deliberatamente, poi a
3290 inserirla correttamente: dovrebbero essere visibili le
3291 risorse disponibili al solo utente sambo: la suo /home e la
3292 cartella samba_share:</p>
3293 <pre class="literal-block">
3294 Sharename Type Comment
3295 --------- ---- -------
3296 sambo_share Disk Condivisione per Sambo
3297 print$ Disk Printer Drivers
3298 IPC$ IPC IPC Service (base server)
3299 sambo Disk Home Directories
3302 <p>In particolare l'ultima voce relativa alla home
3303 directory dell'utente dovrebbe essere visibile solo agli
3304 utenti autenticati.</p>
3306 <p>In alternativa e' possibile montare realmente la
3307 condivisone anche su GNU/Linux tramite un client per samba
3308 e testarne il corretto funzionamento:</p>
3309 <pre class="literal-block">
3310 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3315 <div class="section" id="server-di-posta-postfix">
3316 <h1><a class="toc-backref" href=
3317 "#id70">7 Server di posta: Postfix</a></h1>
3319 <p>Il server di posta che prenderemo in considerazione e'
3320 Postfix, a seguire un estratto di un file do configurazione
3321 <em>semplie</em> con l'abilizazione delle <em>Maildir</em>
3322 nelle <tt class="docutils literal"><span class=
3323 "pre">/home</span></tt> degli utenti per la consegna della
3326 <p><tt class="docutils literal"><span class=
3327 "pre">/etc/postfix/main.cf</span></tt>:</p>
3328 <pre class="literal-block">
3329 # ...segue dalla riga ~30
3330 myhostname = 162.piffa.net
3331 alias_maps = hash:/etc/aliases
3332 alias_database = hash:/etc/aliases
3333 myorigin = 162.piffa.net
3334 mydestination = 162.piffa.net, localhost
3335 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3336 # dovrete usare un realy host per l'invio della posta
3337 relayhost = smtp.piffa.net
3338 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3340 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3341 # in una Maildir invece che la Mailbox in /var/mail/utente
3342 # si disabiliti procmail
3343 #mailbox_command = procmail -a "$EXTENSION"
3345 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3346 # nella home dell'utente:
3347 home_mailbox = Maildir/
3348 mailbox_size_limit = 0
3349 recipient_delimiter = +
3350 inet_interfaces = all
3353 <div class="section" id="imap-e-pop">
3354 <h2><a class="toc-backref" href=
3355 "#id71">7.1 Imap e pop</a></h2>
3357 <p>Postfix e' un server SMTP, di conseguenza se volete che
3358 i vostri utenti possano <em>scaricare</em> in locale la
3359 posta generalemtne volete mettere a loro disposizione un
3360 server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
3363 <dl class="docutils">
3364 <dt>Pacchetti da installare</dt>
3366 <dd>courier-imap courier-pop</dd>
3369 <p>i noti che IMAP necessita delle Maildir, non funziona
3370 con le Mailbox in <tt class="docutils literal"><span class=
3371 "pre">/var/mail/</span></tt> .</p>
3373 <div class="section" id="web-client">
3374 <h3><a class="toc-backref" href=
3375 "#id72">7.1.1 Web client</a></h3>
3377 <p>Per mettere a disposizione degli utenti un client web
3378 per gestire la propia posta si installi il pacchetto:
3379 <tt class="docutils literal"><span class=
3380 "pre">squirrelmail</span></tt> . Ci sono tanti altri
3381 client web disponibili: questo e' particolarmente
3382 semplice. Naturalemte dovrete aver installato: <tt class=
3383 "docutils literal"><span class="pre">php5</span>
3384 <span class="pre">apache2</span></tt> .</p>
3386 <p>L'interfaccia dovrebbe essere disponibile all'url:
3387 <tt class="docutils literal"><span class=
3388 "pre">http://localhost/squirrelmail</span></tt> . Se
3389 cosi' non fosse assicuratevi che Apache abbia incluso il
3390 file di configurazione di squirrelmail:</p>
3391 <pre class="literal-block">
3392 cd /etc/apache2/conf.d/
3393 ln -s /etc/squirrelmail/apache.conf ./
3399 <div class="section" id="firewall">
3400 <h1><a class="toc-backref" href=
3401 "#id73">8 Firewall</a></h1>
3403 <p>In Informatica, nell'ambito delle reti di computer, un
3404 firewall (termine inglese dal significato originario di
3405 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3406 italiano anche parafuoco o parafiamma) e' un componente
3407 passivo di difesa perimetrale che può anche svolgere
3408 funzioni di collegamento tra due o piu' tronconi di rete.
3409 Usualmente la rete viene divisa in due sottoreti: una, detta
3410 esterna, comprende l'intera Internet mentre l'altra interna,
3411 detta LAN (Local Area Network), comprende una sezione piu' o
3412 meno grande di un insieme di computer locali. In alcuni casi
3413 e' possibile che si crei l'esigenza di creare una terza
3414 sottorete detta DMZ (o zona demilitarizzata) atta a contenere
3415 quei sistemi che devono essere isolati dalla rete interna ma
3416 devono comunque essere protetti dal firewall.</p>
3418 <p>Una prima definizione chiusa di firewall è la
3421 <p>Apparato di rete hardware o software che filtra tutti i
3422 pacchetti entranti ed uscenti, da e verso una rete o un
3423 computer, applicando regole che contribuiscono alla sicurezza
3426 <p>In realtà un firewall può essere realizzato con un
3427 normale computer (con almeno due schede di rete e software
3428 apposito), può essere una funzione inclusa in un router o
3429 può essere un apparato specializzato. Esistono inoltre i
3430 cosiddetti "firewall personali", che sono programmi
3431 installati sui normali calcolatori, che filtrano solamente i
3432 pacchetti che entrano ed escono da quel calcolatore; in tal
3433 caso viene utilizzata una sola scheda di rete.</p>
3435 <p>La funzionalità principale in sostanza è quella di
3436 creare un filtro sulle connessioni entranti ed uscenti, in
3437 questo modo il dispositivo innalza il livello di sicurezza
3438 della rete e permette sia agli utenti interni che a quelli
3439 esterni di operare nel massimo della sicurezza. Il firewall
3440 agisce sui pacchetti in transito da e per la zona interna
3441 potendo eseguire su di essi operazioni di: controllo modifica
3444 <p>Questo grazie alla sua capacità di "aprire" il
3445 pacchetto IP per leggere le informazioni presenti sul suo
3446 header, e in alcuni casi anche di effettuare verifiche sul
3447 contenuto del pacchetto.</p>
3449 <div class="section" id="links">
3450 <h2><a class="toc-backref" href=
3451 "#id74">8.1 Links</a></h2>
3454 <li><a class="reference external" href=
3455 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3457 <li><a class="reference external" href=
3458 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3459 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3463 <div class="section" id="ipfilter">
3464 <h2><a class="toc-backref" href=
3465 "#id75">8.2 Ipfilter</a></h2>
3467 <p>Link: <a class="reference external" href=
3468 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3469 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3471 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3472 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3473 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3474 etc) e del livello 1 (MAC source address). Iptables
3475 comunque permette di fare il <em>connection-tracking</em>,
3476 mediante il quale possiamo implementare il Network Address
3479 <p>Netfilter non ricostruisce il flusso di dati tra
3480 pacchetti, non puo' quindi rilevare la presenza di virus o
3481 simili che si trasmettono su pacchetti separati:
3482 ricomporre, analizzare e tornare a scomporre i frammenti
3483 rtichiederebbe troppa RAM e risorse di sistema, con il
3484 conseguente rischio di saturare il firewall fino
3485 all'abbandono dei nuovi pacchetti in transito. Ci sono
3486 altri software piu' adatti a questi compiti, ad esempio un
3487 proxy HTTP come Squid che e' appunto una applicazione di
3488 quarto livello, progettata e strutturata per analizzare e
3489 modificare i flussi di dati (il <em>contenuto</em> dei
3490 pacchetti, non le sole <em>inestazioni</em>) facendo
3491 abbondate uso delle risorse RAM e di calcolo del sistema.
3492 Non a caso su macchine embedded dalle prestazioni molto
3493 ridotte (CPU ARM ~250Mhz con ~30MB di RAM) Squid sfrutta al
3494 massimo le risorse di sistema per gestire il traffico di
3495 una rete 10/100, mentre il lavoro tipico svolto da
3496 netfilter e' quasi irrilevante.</p>
3499 <div class="section" id="progettazione-di-un-firewall">
3500 <h2><a class="toc-backref" href=
3501 "#id76">8.3 Progettazione di un
3504 <p>Per implementare un firewall bisogna decidere un aio di
3505 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3506 al filtraggio, il tipo di hardware.</p>
3508 <div class="section" id="collocazione">
3509 <h3><a class="toc-backref" href=
3510 "#id77">8.3.1 Collocazione</a></h3>
3512 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3513 della rete, decidere se diversi reparti di una azienda si
3514 possano vedere tra loro e in che misura.</p>
3516 <p>Collocazione:</p>
3519 <ol class="arabic simple">
3522 <li>tra router e servers / LAN</li>
3524 <li>Unico server / router / firewall e connessi
3525 rischi. considerare l'acquisto di un router hardware
3530 <dl class="docutils">
3531 <dt>Layeed security:</dt>
3533 <dd>Implementare piu' device / software sui diversi
3534 livelli: <a class="reference external" href=
3535 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3536 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3540 <div class="section" id="policy-di-default">
3541 <h3><a class="toc-backref" href=
3542 "#id78">8.3.2 Policy di default</a></h3>
3544 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3548 <div class="section" id="hardware">
3549 <h3><a class="toc-backref" href=
3550 "#id79">8.3.3 Hardware</a></h3>
3552 <p>Sostanzialmente potremmo distinquere due tipologie di
3555 <dl class="docutils">
3556 <dt>Network appliance dedicata::</dt>
3558 <dd>Un dispositivo hardware dedicato alla funzione di
3559 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3560 firewall economici altro non sono che Linux box molto
3563 <dt>Server / Personal computer:</dt>
3565 <dd>Un server sul quale viene fatto girare Netfilter ad
3566 uso del server stesso e della rete connessa.</dd>
3569 <p>Vantaggi e svantaggi: consumo elettrico, efficenza,
3570 flessibilita', strumenti di gestione, sicurezza,
3575 <div class="section" id=
3576 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3577 <h2><a class="toc-backref" href=
3578 "#id80">8.4 Percorso dei pacchetti tra
3579 tabelle e catene</a></h2>
3581 <p>link: <a class="reference external" href=
3582 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3583 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3586 <div class="section" id="concetti-di-base">
3587 <h2><a class="toc-backref" href=
3588 "#id81">8.5 Concetti di base</a></h2>
3590 <div class="section" id="tabelle-catene-regole">
3591 <h3><a class="toc-backref" href=
3592 "#id82">8.5.1 Tabelle, catene,
3595 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3598 <li>filter - Regola il firewalling: quali pacchetti
3599 accettare, quali bloccare</li>
3601 <li>nat - Regola le attività di natting</li>
3603 <li>mangle - Interviene sulla alterazione dei
3607 <p>Ogni tabella ha delle catene (chains) predefinite
3608 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3609 aggiunte catene custom. Ogni catena è composta da un
3610 elenco di regole (rules) che identificano pacchetti di
3611 rete secono criteri diversi (es: -p tcp --dport 80 -d
3612 10.0.0.45) Ogni regola termina con una indicazione
3613 (target) su cosa fare dei pacchetti identificati dalla
3614 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3617 <div class="section" id="match">
3618 <h3><a class="toc-backref" href=
3619 "#id83">8.5.2 Match</a></h3>
3621 <p>I Match di una regola (rule) servono a testare un
3622 pacchetto per valutare se corrisponda a certe
3623 caratteriscttiche. I match di possono servire a
3624 controllare se un pacchetto e' destinato a una porta
3625 particolare o utilizza un protocollo particolare.</p>
3627 <p>Alcuni esempi:</p>
3629 <dl class="docutils">
3630 <dt>-p [!] proto</dt>
3632 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3633 udp, gre, ah...)</dd>
3635 <dt>-s [!] address[/mask]</dt>
3637 <dd>Indirizzo IP sorgente (o network con maschera di
3640 <dt>-d [!] address[/mask]</dt>
3642 <dd>Indirizzo IP destinazione (o network)</dd>
3644 <dt>-i [!] interface[+]</dt>
3646 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3648 <dt>-o [!] interface[+]</dt>
3650 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3653 <table class="docutils option-list" frame="void" rules=
3655 <col class="option">
3656 <col class="description">
3658 <tbody valign="top">
3660 <td class="option-group"><kbd><span class=
3661 "option">-f</span></kbd></td>
3663 <td>Frammento di pacchetto</td>
3669 <div class="section" id="targets">
3670 <h3><a class="toc-backref" href=
3671 "#id84">8.5.3 Targets</a></h3>
3673 <p>Se un pacchetto soddisfa le condizioni del Match
3674 <em>salta</em> (jump) su uno dei target possibili, in
3675 caso contrario continua il suo percorso tra regole catene
3678 <p>Target principali:</p>
3680 <dl class="docutils">
3681 <dt><em>-j ACCEPT</em></dt>
3683 <dd>Il pachetto matchato viene accettato e procede
3684 verso la sua destinazione. Si usa per definire il
3685 traffico permesso.</dd>
3687 <dt><em>-j DROP</em></dt>
3689 <dd>Il pacchetto viene rifiutato e scartato, senza
3690 alcuna notifica al mittente. Si usa, in alternativa a
3691 REJECT, per bloccare traffico.</dd>
3693 <dt><em>-j REJECT</em></dt>
3695 <dd>Il pacchetto viene rifiutato. Al mittente viene
3696 mandato un pacchetto (configurabile) di notifica tipo
3697 ICMP port-unreachable (--reject-with
3698 icmp-port-unreachable)</dd>
3701 <table class="docutils option-list" frame="void" rules=
3703 <col class="option">
3704 <col class="description">
3706 <tbody valign="top">
3708 <td class="option-group"><kbd><span class=
3709 "option">-t <var>LOG</var></span></kbd></td>
3711 <td>Il pacchetto viene loggato via syslog e procede
3712 l'attraversamento della catena. Opzioni:
3713 (--log-level, --log-prefix, --log-tcp-sequence,
3714 --log-tcp-options, --log-ip-options)</td>
3718 <td class="option-group"><kbd><span class=
3719 "option">-j <var>DNAT</var></span></kbd></td>
3721 <td>Viene modificato l'IP di destinazione del
3722 pacchetto. Target disponibile solo in nat /
3723 PREROUTING e nat / OUTPUT. L'opzione
3724 --to-destination IP:porta definisce il nuovo IP di
3725 destinazione. Si usa tipicamente su network
3726 firewall che nattano server di una DMZ</td>
3730 <td class="option-group"><kbd><span class=
3731 "option">-j <var>SNAT</var></span></kbd></td>
3733 <td>Viene modificato l'IP sorgente. Solo in nat /
3734 POSTROUTING. Prevede l'opzione --to-source
3735 IP:porta. Si usa per permettere l'accesso a
3736 Internet da una rete locale con IP privati.</td>
3740 <td class="option-group"><kbd><span class=
3741 "option">-j <var>MASQUERADE</var></span></kbd></td>
3743 <td>Simile a SNAT, si applica quando i pacchetti
3744 escono da interfacce con IP dinamico (dialup, adsl,
3745 dhcp...). Si usa solo in nat / POSTROUTING e
3746 prevede l'opzione --to-ports porte.</td>
3750 <td class="option-group"><kbd><span class=
3751 "option">-j <var>REDIRECT</var></span></kbd></td>
3753 <td>Redirige il pacchetto ad una porta locale.
3754 Usabile solo in nat / PREROUTING e nat / OUTPUT è
3755 previsto per fare un transparent proxy (con proxy
3756 server in esecuzione sulla macchina con
3761 <td class="option-group"><kbd><span class=
3762 "option">-j <var>RETURN</var></span></kbd></td>
3764 <td>Interrompe l'attraversamento della catena. Se
3765 questa è una secondaria, il pacchetto torna ad
3766 attraversare la catena madre da punto in cui aveva
3767 fatto il salto nella secondaria. Se il RETURN è in
3768 una delle catene di default, il pacchetto
3769 interrompe l'attraversamento e segue la policy di
3774 <td class="option-group"><kbd><span class=
3775 "option">-j <var>TOS</var></span></kbd></td>
3777 <td>Usabile solo nella tabella mangle, permette di
3778 cambiare il TOS (Type Of Service) di un pacchetto
3779 con l'opzione --set-tos. Per un elenco dei
3780 parametri disponibili: iptables -j TOS -h</td>
3784 <td class="option-group"><kbd><span class=
3785 "option">-j <var>MIRROR</var></span></kbd></td>
3787 <td>Curioso e sperimentale, questo target invia un
3788 pacchetto speculare al mittente. In pratica è come
3789 se facesse da specchio per tutti i pacchetti
3790 ricevuti. Da usare con cautela, per evitare
3791 attacchi DOS indiretti.</td>
3798 <div class="section" id="tabella-filter">
3799 <h2><a class="toc-backref" href=
3800 "#id85">8.6 Tabella Filter</a></h2>
3802 <p>E' quella implicita e predefinita (-t filter) Riguarda
3803 le attività di filtraggio del traffico. Ha 3 catene
3804 di default: INPUT - Riguarda tutti i pacchetti destinati al
3805 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
3806 i pacchetti che sono originati dal sistema e destinati ad
3807 uscire. FORWARD - Riguarda i pacchetti che attraversano il
3808 sistema, con IP sorgente e destinazione esterni.</p>
3810 <p>Esempio per permettere accesso alla porta 80 locale:
3811 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
3812 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
3815 <p>Esempio per permettere ad un pacchetto con IP sorgente
3816 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
3817 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
3821 <div class="section" id=
3822 "flush-automatico-per-macchine-remote">
3823 <h2><a class="toc-backref" href=
3824 "#id86">8.7 Flush automatico per macchine
3827 <p>Se state provando una configurazione del firewall per
3828 una macchina remota e' buona norma per evitare brutte
3829 figure attivare uno script che faccia il <em>flush</em>
3830 delle regole dopo qualche minuto. Potreste infatti
3831 inavvertitamente impostare una regola che vi impedisca di
3832 raggiungere la macchina remota, cosi' da non poter neanche
3833 eliminare quella regola e ripristinare la situazioe
3836 <p><em>Veramnete</em>, prima di lavorare sul firewall di
3837 una macchina remota inpostate almeno un <tt class=
3838 "docutils literal"><span class="pre">at</span> <span class=
3839 "pre">now</span> <span class="pre">+5</span> <span class=
3840 "pre">min</span></tt> o con un'oretta di margine per fare
3841 il <em>flush</em> delle regole (su tutte le tabelle):</p>
3842 <pre class="literal-block">
3844 at> /sbin/iptables -F
3849 <div class="section" id="gestione-regole-rules">
3850 <h2><a class="toc-backref" href=
3851 "#id87">8.8 Gestione regole
3854 <p>Il comando iptables viene usato per ogni attivitÃ
3855 di gestione e configurazione.</p>
3857 <p>Inserimento regole:</p>
3859 <dl class="docutils">
3860 <dt>iptables -A CATENA ...</dt>
3862 <dd>Aggiunge una regola alla fine della catena
3865 <dt>iptables -I CATENA [#] ...</dt>
3867 <dd>Inserisce alla riga # (default 1) una regola nella
3868 catena indicata</dd>
3870 <dt>iptables -N CATENA</dt>
3872 <dd>Crea una nuova catena custom</dd>
3874 <dt>iptables -P CATENA TARGET</dt>
3876 <dd>Imposta il target di default per la catena
3880 <p>Rimozione regole e azzeramenti:</p>
3882 <dl class="docutils">
3883 <dt>iptables -F [catena]</dt>
3885 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
3887 <dt>iptables -X [catena]</dt>
3889 <dd>Ripulisce tutte le catene custom (o quella
3892 <dt>iptables -Z [catena]</dt>
3894 <dd>Azzera i contatori sulle catene</dd>
3896 <dt>iptables -D catena #</dt>
3898 <dd>Cancella la regola numero # dalla catena
3902 <p>Interrogazione:</p>
3904 <dl class="docutils">
3905 <dt>iptables -L</dt>
3907 <dd>Elenca le regole esistenti</dd>
3909 <dt>iptables -L -n -v</dt>
3911 <dd>Elenca, senza risolvere gli host, in modo verboso le
3912 regole esistenti</dd>
3916 <div class="section" id="salvataggio-regole">
3917 <h2><a class="toc-backref" href=
3918 "#id88">8.9 Salvataggio regole</a></h2>
3920 <p>Il comando <tt class="docutils literal"><span class=
3921 "pre">iptables</span></tt> serve per interagire con il
3922 framework <tt class="docutils literal"><span class=
3923 "pre">Netfilter</span></tt> ch gestisce il firewall di
3924 Linux al livello del kernel. Questo comporta, in modo
3925 analogo a quando avvene col comando <tt class=
3926 "docutils literal"><span class="pre">ifconfig</span></tt>,
3927 che i cambiameti impostati siano in <em>tempo reale,
3928 RAM</em>, non persistenti nel sistema: al boot sucessivo
3929 del sistema tutto tornera' alle impostazioni di base (in
3930 questo caso <em>nulle</em>, con policy di default settate
3931 su <tt class="docutils literal"><span class=
3932 "pre">ACCEPT</span></tt> per tutto).</p>
3934 <p>Le varie invocazioni di iptables potrebbero essere
3935 richiamate da degli scripts dedicati, ma fortunatamente e'
3936 stata predisposta una apposita utility per gestire questi
3937 scripts in modo da avere a disposizione un <em>formato
3938 standard</em> per il salvataggio e il ripristino delle
3939 regole del firewall.</p>
3941 <p>Altro problema: decidere quando attivare / disattivare
3942 queste regole. Utilizzare i <em>runlevels</em> non e' una
3943 soluzione adeguata: le regole del firewall sono legate
3944 all'attivita' delle schede di rete (e un host con diverse
3945 schede di rete puo' attivarle a secondo delle esigenze di
3946 routing, partenza di servizi es file_sharing per un
3947 back-up...): il sistema operativo Debian permette di legare
3948 l'esecuzione di comandi alla attivazione di una device di
3949 rete (<tt class="docutils literal"><span class=
3950 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
3951 "docutils literal"><span class="pre">post-up</span></tt>,
3952 utile per devices che richiedono un certo tempo per
3953 inizializzarsi: come un tunnel o una connessione punto a
3954 punto), prima della sua attivazione (<tt class=
3955 "docutils literal"><span class="pre">pre-up</span></tt>).
3956 Allo stesso modo sono disponibili eventi analoghi per
3957 accompagnare la disattivazione dei device di rete: si veda
3958 la pagina man di <tt class="docutils literal"><span class=
3959 "pre">interfaces</span></tt>.</p>
3961 <p>Nel nostro caso avremo per una possibile scheda
3962 <tt class="docutils literal"><span class=
3963 "pre">eth0</span></tt>:</p>
3965 <p><tt class="docutils literal"><span class=
3966 "pre">/etc/network/interfaces</span></tt></p>
3967 <pre class="literal-block">
3968 iface eth1 inet static
3969 up /sbin/iptables-restore /root/firewall/basic_fw
3970 # Seguno i soliti parametri della scheda di rete
3971 address 10.10.208.21
3974 <div class="section" id="iptables-save">
3975 <h3><a class="toc-backref" href=
3976 "#id89">8.9.1 Iptables-save</a></h3>
3978 <p>Per salvare le regole di iptables attualmente presenti
3979 nel kernel si usi il comando:</p>
3980 <pre class="literal-block">
3981 # iptables-save >> /root/firewall/basic_fw
3984 <p>Il contenuto del file dovrebbe essere
3985 <em>comprensibile</em>: sostanzialmente sono regole di
3986 iptables, senza il comando iptables ripetuto, suddivisi
3987 per le varie tabelle. Potete comunque correggere
3988 eventuali parametri con un edito di testo.</p>
3990 <p>Se non avete un'idea migliore potreste voler tenere
3991 gli script dei firewall in una cartella <tt class=
3992 "docutils literal"><span class=
3993 "pre">~/firewall</span></tt> nella home directory
3994 dell'utente <tt class="docutils literal"><span class=
3995 "pre">root</span></tt>.</p>
3998 <div class="section" id="iptables-restore">
3999 <h3><a class="toc-backref" href=
4000 "#id90">8.9.2 Iptables-restore</a></h3>
4002 <p>Per ripristinare un set di regole prcedentemente
4003 salvate con <tt class="docutils literal"><span class=
4004 "pre">iptables-save</span></tt> si utilizzi <tt class=
4005 "docutils literal"><span class=
4006 "pre">iptables-restore</span></tt>. Se questo deve essere
4007 fatto in modalita' <em>non interattiva</em>, ad esempio
4008 deve essere eseguito dal demone che si occupa di
4009 inizializzare le schede di rete, oppure un <em>cron</em>
4010 o altro, e' buona norma richiamare i percorsi completi
4011 sia dei comandi che dei file:</p>
4012 <pre class="literal-block">
4013 /sbin/iptables-restore /root/firewall/basic_fw
4019 <div class="section" id="note">
4020 <h1><a class="toc-backref" href=
4021 "#id91">9 NOTE</a></h1>
4024 <li>controllare apache</li>
4027 <p>sintassi: in <tt class="docutils literal"><span class=
4028 "pre">monospace</span></tt> :</p>
4031 <li>nomi di files</li>