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 6 November 2007), 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.8</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="id7" name=
289 "id7">1 Configurazione sistema</a>
291 <ul class="auto-toc">
292 <li><a class="reference internal" href=
293 "#solo-per-uso-interno" id="id8" name=
294 "id8">1.1 Solo per uso
298 <a class="reference internal" href="#rete" id="id9"
299 name="id9">1.2 Rete</a>
301 <ul class="auto-toc">
302 <li><a class="reference internal" href=
303 "#interfaces" id="id10" name=
304 "id10">1.2.1 interfaces</a></li>
308 <li><a class="reference internal" href=
309 "#bash-completion" id="id11" name=
310 "id11">1.3 Bash completion</a></li>
312 <li><a class="reference internal" href="#vim" id="id12"
313 name="id12">1.4 Vim</a></li>
315 <li><a class="reference internal" href="#vnc" id="id13"
316 name="id13">1.5 VNC</a></li>
318 <li><a class="reference internal" href=
319 "#lista-dei-pacchetti-di-base" id="id14" name=
320 "id14">1.6 Lista dei pacchetti di
324 <a class="reference internal" href=
325 "#apt-configurazione" id="id15" name=
326 "id15">1.7 Apt configurazione</a>
328 <ul class="auto-toc">
329 <li><a class="reference internal" href=
330 "#sources-list" id="id16" name=
331 "id16">1.7.1 sources.list</a></li>
333 <li><a class="reference internal" href=
334 "#etc-apt-apt-conf" id="id17" name=
335 "id17">1.7.2 /etc/apt/apt.conf</a></li>
342 <a class="reference internal" href="#squid" id="id18"
343 name="id18">2 Squid</a>
345 <ul class="auto-toc">
347 <a class="reference internal" href=
348 "#configurazione-squid-conf" id="id19" name=
349 "id19">2.1 Configurazione:
352 <ul class="auto-toc">
353 <li><a class="reference internal" href="#cache-dir"
355 "id20">2.1.1 Cache_dir</a></li>
357 <li><a class="reference internal" href=
358 "#tag-maximum-object-size" id="id21" name=
359 "id21">2.1.2 TAG:
360 maximum_object_size</a></li>
362 <li><a class="reference internal" href=
363 "#tag-cache-mem" id="id22" name=
364 "id22">2.1.3 TAG:
367 <li><a class="reference internal" href=
368 "#tag-minimum-object-size" id="id23" name=
369 "id23">2.1.4 TAG:
370 minimum_object_size</a></li>
375 <a class="reference internal" href=
376 "#negoziazione-degli-accesi-al-servizio" id="id24"
377 name="id24">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="id25" name=
383 "id25">2.2.1 ACL e http
389 <a class="reference internal" href="#testare-squid"
390 id="id26" name="id26">2.3 Testare
393 <ul class="auto-toc">
394 <li><a class="reference internal" href=
395 "#client-wgetrc" id="id27" name=
396 "id27">2.3.1 Client:
399 <li><a class="reference internal" href=
400 "#server-access-log" id="id28" name=
401 "id28">2.3.2 Server:
409 <a class="reference internal" href="#apache" id="id29"
410 name="id29">3 Apache</a>
412 <ul class="auto-toc">
413 <li><a class="reference internal" href=
414 "#pacchetti-da-installare" id="id30" name=
415 "id30">3.1 Pacchetti da
416 installare::</a></li>
418 <li><a class="reference internal" href=
419 "#configurazione-di-apache" id="id31" name=
420 "id31">3.2 Configurazione di
423 <li><a class="reference internal" href="#apache-conf"
425 "id32">3.3 apache.conf</a></li>
428 <a class="reference internal" href=
429 "#installazione-di-php" id="id33" name=
430 "id33">3.4 Installazione di PHP</a>
432 <ul class="auto-toc">
433 <li><a class="reference internal" href=
434 "#test-del-modulo-php" id="id34" name=
435 "id34">3.4.1 Test del modulo
438 <li><a class="reference internal" href=
439 "#installazione-del-supporto-per-mysql" id="id35"
440 name="id35">3.4.2 Installazione
441 del supporto per Mysql</a></li>
443 <li><a class="reference internal" href=
444 "#phpmyadmin" id="id36" name=
445 "id36">3.4.3 phpmyadmin</a></li>
447 <li><a class="reference internal" href=
448 "#installazione-del-supporto-per-postgresql" id=
450 "id37">3.4.4 Installazione del
451 supporto per Postgresql</a></li>
453 <li><a class="reference internal" href=
454 "#phppgadmin" id="id38" name=
455 "id38">3.4.5 phppgadmin</a></li>
460 <a class="reference internal" href="#virtual-hosts"
461 id="id39" name="id39">3.5 Virtual
464 <ul class="auto-toc">
465 <li><a class="reference internal" href=
466 "#gestione-dns" id="id40" name=
467 "id40">3.5.1 Gestione DNS</a></li>
469 <li><a class="reference internal" href=
470 "#virtual-host" id="id41" name=
471 "id41">3.5.2 Virtual host</a></li>
476 <a class="reference internal" href=
477 "#negoziazione-accessi" id="id42" name=
478 "id42">3.6 Negoziazione accessi</a>
480 <ul class="auto-toc">
481 <li><a class="reference internal" href=
482 "#limiti-su-base-ip" id="id43" name=
483 "id43">3.6.1 Limiti su base
489 <a class="reference internal" href=
490 "#user-authentication" id="id44" name=
491 "id44">3.7 User Authentication</a>
493 <ul class="auto-toc">
494 <li><a class="reference internal" href=
495 "#definire-la-cartella" id="id45" name=
496 "id45">3.7.1 Definire la
499 <li><a class="reference internal" href=
500 "#creazione-del-database-delle-passwords" id="id46"
501 name="id46">3.7.2 Creazione del
502 database delle passwords</a></li>
504 <li><a class="reference internal" href="#id3" id=
506 "id47">3.7.3 Configurazione di
511 <li><a class="reference internal" href="#cavets" id=
512 "id48" name="id48">3.8 Cavets</a></li>
517 <a class="reference internal" href="#domain-name-system"
518 id="id49" name="id49">4 Domain Name
521 <ul class="auto-toc">
522 <li><a class="reference internal" href=
523 "#risoluzione-inversa" id="id50" name=
524 "id50">4.1 Risoluzione
527 <li><a class="reference internal" href=
528 "#nomi-di-dominio" id="id51" name=
529 "id51">4.2 Nomi di dominio</a></li>
531 <li><a class="reference internal" href=
532 "#tipologie-di-record" id="id52" name=
533 "id52">4.3 Tipologie di
536 <li><a class="reference internal" href="#utilizzo" id=
538 "id53">4.4 Utilizzo</a></li>
540 <li><a class="reference internal" href=
541 "#risoluzione-dei-nomi-di-dominio" id="id54" name=
542 "id54">4.5 Risoluzione dei nomi di
545 <li><a class="reference internal" href="#dig" id="id55"
546 name="id55">4.6 Dig</a></li>
548 <li><a class="reference internal" href="#resolv-conf"
550 "id56">4.7 resolv.conf</a></li>
552 <li><a class="reference internal" href="#etc-hosts" id=
554 "id57">4.8 /etc/hosts</a></li>
556 <li><a class="reference internal" href="#hostname" id=
558 "id58">4.9 Hostname</a></li>
563 <a class="reference internal" href="#dnsmasq" id="id59"
564 name="id59">5 DNSmasq</a>
566 <ul class="auto-toc">
567 <li><a class="reference internal" href=
568 "#configurazione" id="id60" name=
569 "id60">5.1 Configurazione</a></li>
571 <li><a class="reference internal" href="#dhcp" id=
572 "id61" name="id61">5.2 DHCP</a></li>
574 <li><a class="reference internal" href="#dns-cache" id=
575 "id62" name="id62">5.3 DNS
581 <a class="reference internal" href=
582 "#bind-dns-autoritativo" id="id63" name=
583 "id63">6 Bind : DNS Autoritativo</a>
585 <ul class="auto-toc">
586 <li><a class="reference internal" href="#id4" id="id64"
587 name="id64">6.1 DNS cache</a></li>
592 <a class="reference internal" href="#samba" id="id65"
593 name="id65">7 Samba</a>
595 <ul class="auto-toc">
596 <li><a class="reference internal" href="#pacchetti" id=
598 "id66">7.1 Pacchetti</a></li>
600 <li><a class="reference internal" href=
601 "#passwords-e-autenticazione" id="id67" name=
602 "id67">7.2 Passwords e
603 autenticazione</a></li>
605 <li><a class="reference internal" href=
606 "#creazione-utenti" id="id68" name=
607 "id68">7.3 Creazione Utenti</a></li>
610 <a class="reference internal" href=
611 "#creare-la-condivisione" id="id69" name=
612 "id69">7.4 Creare la
615 <ul class="auto-toc">
616 <li><a class="reference internal" href=
617 "#sicurezza-permessi-di-esecuzione-sul-server" id=
619 "id70">7.4.1 Sicurezza: permessi
620 di esecuzione sul server</a></li>
624 <li><a class="reference internal" href=
625 "#configurazione-dell-applicativo-samba-vero-e-proprio"
627 "id71">7.5 Configurazione
628 dell'applicativo Samba vero e proprio.</a></li>
630 <li><a class="reference internal" href=
631 "#testare-il-servizio" id="id72" name=
632 "id72">7.6 Testare il
638 <a class="reference internal" href=
639 "#server-di-posta-postfix" id="id73" name=
640 "id73">8 Server di posta: Postfix</a>
642 <ul class="auto-toc">
644 <a class="reference internal" href="#imap-e-pop" id=
645 "id74" name="id74">8.1 Imap e
648 <ul class="auto-toc">
649 <li><a class="reference internal" href=
650 "#web-client" id="id75" name=
651 "id75">8.1.1 Web client</a></li>
658 <a class="reference internal" href="#firewall" id="id76"
659 name="id76">9 Firewall</a>
661 <ul class="auto-toc">
662 <li><a class="reference internal" href="#links" id=
663 "id77" name="id77">9.1 Links</a></li>
665 <li><a class="reference internal" href="#ipfilter" id=
667 "id78">9.2 Ipfilter</a></li>
670 <a class="reference internal" href=
671 "#progettazione-di-un-firewall" id="id79" name=
672 "id79">9.3 Progettazione di un
675 <ul class="auto-toc">
676 <li><a class="reference internal" href=
677 "#collocazione" id="id80" name=
678 "id80">9.3.1 Collocazione</a></li>
680 <li><a class="reference internal" href=
681 "#policy-di-default" id="id81" name=
682 "id81">9.3.2 Policy di
685 <li><a class="reference internal" href="#hardware"
687 "id82">9.3.3 Hardware</a></li>
691 <li><a class="reference internal" href=
692 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
693 "id83" name="id83">9.4 Percorso dei
694 pacchetti tra tabelle e catene</a></li>
697 <a class="reference internal" href=
698 "#concetti-di-base" id="id84" name=
699 "id84">9.5 Concetti di base</a>
701 <ul class="auto-toc">
702 <li><a class="reference internal" href=
703 "#tabelle-catene-regole" id="id85" name=
704 "id85">9.5.1 Tabelle, catene,
707 <li><a class="reference internal" href="#match" id=
709 "id86">9.5.2 Match</a></li>
711 <li><a class="reference internal" href="#targets"
713 "id87">9.5.3 Targets</a></li>
717 <li><a class="reference internal" href=
718 "#tabella-filter" id="id88" name=
719 "id88">9.6 Tabella Filter</a></li>
721 <li><a class="reference internal" href=
722 "#flush-automatico-per-macchine-remote" id="id89" name=
723 "id89">9.7 Flush automatico per
724 macchine remote</a></li>
726 <li><a class="reference internal" href=
727 "#gestione-regole-rules" id="id90" name=
728 "id90">9.8 Gestione regole
732 <a class="reference internal" href=
733 "#salvataggio-regole" id="id91" name=
734 "id91">9.9 Salvataggio regole</a>
736 <ul class="auto-toc">
737 <li><a class="reference internal" href=
738 "#iptables-save" id="id92" name=
739 "id92">9.9.1 Iptables-save</a></li>
741 <li><a class="reference internal" href=
742 "#iptables-restore" id="id93" name=
743 "id93">9.9.2 Iptables-restore</a></li>
748 <a class="reference internal" href="#esempi" id=
749 "id94" name="id94">9.10 Esempi</a>
751 <ul class="auto-toc">
752 <li><a class="reference internal" href=
753 "#bloccare-i-ping-dall-esterno" id="id95" name=
754 "id95">9.10.1 Bloccare i ping
755 dall'esterno</a></li>
757 <li><a class="reference internal" href=
758 "#masquerading-snat" id="id96" name=
759 "id96">9.10.2 Masquerading
762 <li><a class="reference internal" href=
763 "#brute-force" id="id97" name=
764 "id97">9.10.3 Brute force</a></li>
770 <li><a class="reference internal" href="#note" id="id98"
771 name="id98">10 NOTE</a></li>
775 <p>Generato con: <a class="reference external" href=
776 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
778 <div class="section" id="configurazione-sistema">
779 <h1><a class="toc-backref" href=
780 "#id7">1 Configurazione sistema</a></h1>
782 <div class="section" id="solo-per-uso-interno">
783 <h2><a class="toc-backref" href=
784 "#id8">1.1 Solo per uso interno</a></h2>
786 <p>Impostazioni di base per la configurazione del sistema
787 operativo e della rete nel laboratorio 208 facente parte
788 della rete piffa.net .</p>
790 <p>Qui riportati per comodita' degli studenti (e del
791 docente che non sara' <strong>mai piu'</strong> costretto a
792 ripeterli continuamente! ). Gli altri lettori potranno
793 tenerli presenti per cercare di comprendere gli esempi nel
794 testo. Ad esempio: quando leggerete <tt class=
795 "docutils literal"><span class=
796 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
797 del nostro <em>proxy http</em>, stara' quindi a voi
798 sostituire i dati con gli equivalenti <em>IP</em> della
802 <div class="section" id="rete">
803 <h2><a class="toc-backref" href=
804 "#id9">1.2 Rete</a></h2>
806 <p>Parametri della rete attualmente in uso:</p>
808 <table border="1" class="docutils">
816 <td colspan="2">Parametri della rete</td>
822 <td>10.10.208.0/24</td>
828 <td>255.255.255.0</td>
834 <td>10.10.208.255</td>
840 <td>10.10.208.254</td>
846 <td>10.10.208.254</td>
852 <td>10.10.208.254:3128</td>
857 <p>Sul portatile di Andrea, corrispondente all'IP 254, gira
858 un DHCP, proxy http e mirror di Debian ( <a class=
859 "reference external" href=
860 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
861 Andrea non e' in aula (o ancora peggio non c'e' il suo
862 portatile Net) gli studenti dovranno darsi un indirizzo IP
863 manualmente e disabilitare il proxy (che pero' e
864 trasparente, quindi fate pure come se non ci fosse ;) . Ad
865 oggi il <em>lab208</em> e' servito dal server Bender (254 o
866 248) che ha ripreso le sue vecchie funzioni.</p>
868 <div class="section" id="interfaces">
869 <h3><a class="toc-backref" href=
870 "#id10">1.2.1 interfaces</a></h3>
872 <p>Segue un esempio del file di configurazione della
873 scheda di rete con configurazione statica:</p>
875 <p>/etc/network/interfaces:</p>
876 <pre class="literal-block">
877 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
879 # The loopback interface
880 iface lo inet loopback
882 # La prima scheda di rete (se si chiama eth0)
883 # (network, broadcast and gateway sono optional)
884 iface etho inet static
886 # iface etho inet dhcp
887 address 10.10.208.101
888 netmask 255.255.255.0
890 broadcast 10.10.208.255
891 gateway 10.10.208.254
893 # Quali interfacci devono partire automaticamente:
897 <p>Controllare il nome della propria scheda di rete: a
898 volte <em>udev</em> rinomina la prima scheda a <tt class=
899 "docutils literal"><span class="pre">eth1</span></tt>,
900 oppure potreste avere piu' di una scheda di rete (anche
901 un'interfaccia <em>firewire</em> puo' essere
902 automaticamente abilitata come scheda di rete).</p>
904 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
905 , eth0:1 , ...) ricordarsi che queste dipendono dalla
906 scheda fisica a cui sono associate: abbattere con
907 <tt class="docutils literal"><span class=
908 "pre">ifconfig</span> <span class="pre">down</span>
909 <span class="pre">eth0</span></tt> la scheda principale
910 fara' cadere anche queste. Tornando ad attivare la scada
911 principale con <tt class="docutils literal"><span class=
912 "pre">ifconfig</span> <span class="pre">eth0</span>
913 <span class="pre">up</span></tt> la virtuale tornera'
914 attiva: nel caso voleste disabilitarla dovrete quindi
915 sempre abbattere manualmente la scheda virtuale
916 <em>prima</em> della scheda reale.</p>
918 <p>I DNS vanno indicati nel file <tt class=
919 "docutils literal"><span class=
920 "pre">/etc/resolv.conf</span></tt> , la cui sintassi e'
921 spiegata al punto 4.6 .</p>
925 <div class="section" id="bash-completion">
926 <h2><a class="toc-backref" href=
927 "#id11">1.3 Bash completion</a></h2>
929 <p>Il completamento automatico della shell (che si attiva
930 premendo il tasto tab una o due volte mentre si sta
931 scrivendo un termine) permette di comporre automaticamente
932 i nomi dei comandi e i percorsi dei file, sopratutto la
933 composizione automatica dei percorsi dei file e' di grande
936 <p>Bash_completion permette di integrare il completamento
937 automatico con i nomi dei pacchetti e oggetti dei comandi:
938 ad es. volendo digitare <tt class=
939 "docutils literal"><span class="pre">apt-get</span>
940 <span class="pre">inst[TAB]</span> <span class=
941 "pre">xtigh[TAB]</span></tt> ora verra' completato
942 automaticamente sia la parola <tt class=
943 "docutils literal"><span class="pre">install</span></tt>
944 che il nome del pacchetto <tt class=
945 "docutils literal"><span class=
946 "pre">xtightvncviewer</span></tt>.</p>
948 <p>Abilitare /etc/bash_completion nel file <tt class=
949 "docutils literal"><span class=
950 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
951 proprio <tt class="docutils literal"><span class=
952 "pre">~/.bashrc</span></tt> (che sarebbe il file
953 <em>nascosto</em>, quindi con un punto all'inizio del nome
954 del file, di configurazione della shell bash per ogni
955 utente, presente nella propria <em>home
957 <pre class="literal-block">
958 echo ". /etc/bash_completion" >> ~/.bashrc
961 <p>Esempio di ~/.bahsrc</p>
962 <pre class="literal-block">
963 # ~/.bashrc: executed by bash(1) for non-login shells.
965 export PS1='\h:\w\$ '
968 # De-commentare le seguenti righe per abilitare la colorazione dei
970 export LS_OPTIONS='--color=auto'
972 alias ls='ls $LS_OPTIONS'
973 alias ll='ls $LS_OPTIONS -l'
974 alias l='ls $LS_OPTIONS -lA'
976 # Some more alias to avoid making mistakes:
981 # questo abilita bash completion
982 . /etc/bash_completion
985 <p>Il file <tt class="docutils literal"><span class=
986 "pre">/etc/bash_completion</span></tt> deve essere presente
987 nel sistema, in caso contrario installare il pacchetto:
988 <tt class="docutils literal"><span class=
989 "pre">bash-completion</span></tt>. Generalmente l'utente
990 <tt class="docutils literal"><span class=
991 "pre">root</span></tt> ha un file <tt class=
992 "docutils literal"><span class="pre">.bashrc</span></tt>
993 preimpostato analogo a quello citato sopra, a differenza
994 dei normali utenti di sistema.</p>
999 <li><a class="reference external" href=
1000 "http://www.debian-administration.org/articles/316">An
1001 introduction to bash completion</a></li>
1003 <li><a class="reference external" href=
1004 "http://www.caliban.org/bash/">Working more productively
1005 with bash 2.x/3.x</a></li>
1009 <div class="section" id="vim">
1010 <h2><a class="toc-backref" href=
1011 "#id12">1.4 Vim</a></h2>
1013 <p>Vim e' l'editor di testo preferito dai sistemisti,
1014 quindi sara' conveniente impostare fin da subito alcune
1015 impostazioni per renderlo piu' comodo.</p>
1017 <p>Assicurarsi che sia installata nel sistema la versione
1018 completa dell'editor <tt class=
1019 "docutils literal"><span class="pre">vim</span></tt>
1020 installando il pacchetto <tt class=
1021 "docutils literal"><span class="pre">vim</span></tt>:</p>
1022 <pre class="literal-block">
1023 # apt-get install vim
1025 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
1027 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1028 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1029 " you can find below. If you wish to change any of those settings, you should
1030 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1031 " everytime an upgrade of the vim packages is performed. It is recommended to
1032 " make changes after sourcing debian.vim since it alters the value of the
1033 " 'compatible' option.
1035 " This line should not be removed as it ensures that various options are
1036 " properly set to work with the Vim-related packages available in Debian.
1039 " Uncomment the next line to make Vim more Vi-compatible
1040 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1041 " options, so any other options should be set AFTER setting 'compatible'.
1044 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1045 " line enables syntax highlighting by default.
1048 " If using a dark background within the editing area and syntax highlighting
1049 " turn on this option as well
1052 " Uncomment the following to have Vim jump to the last position when
1056 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1057 \| exe "normal! g'\"" | endif
1060 " Uncomment the following to have Vim load indentation rules and plugins
1061 " according to the detected filetype.
1063 filetype plugin indent on
1066 " The following are commented out as they cause vim to behave a lot
1067 " differently from regular Vi. They are highly recommended though.
1068 set showcmd " Show (partial) command in status line.
1069 "set showmatch " Show matching brackets.
1070 set ignorecase " Do case insensitive matching
1071 "set smartcase " Do smart case matching
1072 "set incsearch " Incremental search
1073 set autowrite " Automatically save before commands like :next and :make
1074 "set hidden " Hide buffers when they are abandoned
1075 "set mouse=a " Enable mouse usage (all modes) in terminals
1077 " Source a global configuration file if available
1078 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1079 if filereadable("/etc/vim/vimrc.local")
1080 source /etc/vim/vimrc.local
1084 <p>I principianti faranno bene ad esercitarsi con
1085 <tt class="docutils literal"><span class=
1086 "pre">vimtutor</span> <span class="pre">it</span></tt>.</p>
1089 <div class="section" id="vnc">
1090 <h2><a class="toc-backref" href=
1091 "#id13">1.5 VNC</a></h2>
1093 <p>I Virtual Network Computing (o VNC) sono software di
1094 controllo remoto e servono per amministrare il proprio
1095 computer a distanza o visualizzare la sessione di lavoro di
1096 un altro computer sul proprio a scopo didattico.</p>
1098 <p>Scaricare il pacchetto <tt class=
1099 "docutils literal"><span class=
1100 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1101 "docutils literal"><span class="pre">guarda.sh</span></tt>
1102 in una posizione (collocazione nel <em>path</em> degli
1103 utenti, es <tt class="docutils literal"><span class=
1104 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1105 visualizzare l'attuale path ) comoda per gli utenti ( in
1106 genere <tt class="docutils literal"><span class=
1107 "pre">/bin</span></tt> ), rendere eseguibile lo script.</p>
1110 <pre class="literal-block">
1113 wget http://debian.piffa.net/guarda.sh
1118 <p>Si noti che non e' possibile lanciare un applicativo sul
1119 server grafico di un utente da una shell in cui si sta
1120 lavorando come altro utente, anche se root. E' quindi
1121 necessario essere l'utente di sistema che si e' loggato
1122 inizialmente nella sessione grafica per poter lanciare lo
1123 script guarda.sh da una shell.</p>
1125 <p>Controllare con <tt class=
1126 "docutils literal"><span class="pre">whoami</span></tt> di
1127 essere l'utente normale (es <tt class=
1128 "docutils literal"><span class="pre">utente</span>
1129 <span class="pre">|</span> <span class=
1130 "pre">studente</span> <span class="pre">|</span>
1131 <span class="pre">proprio</span> <span class=
1132 "pre">nome</span></tt> ), in caso si sia assunta una altra
1133 <tt class="docutils literal"><span class=
1134 "pre">id</span></tt> si apra un altra shell o si esca da
1135 quella attuale con <tt class=
1136 "docutils literal"><span class="pre">exit</span></tt> .</p>
1139 <div class="section" id="lista-dei-pacchetti-di-base">
1140 <h2><a class="toc-backref" href=
1141 "#id14">1.6 Lista dei pacchetti di
1144 <p>I pacchetti installati generalmente <a class=
1145 "footnote-reference" href="#id2" id="id1" name=
1146 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1147 <pre class="literal-block">
1148 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1151 <table class="docutils footnote" frame="void" id="id2"
1158 <tbody valign="top">
1160 <td class="label"><a class="fn-backref" href=
1163 <td><tt class="docutils literal"><span class=
1164 "pre">kde-core</span></tt> e' piu' leggero del
1165 pacchetto <tt class="docutils literal"><span class=
1166 "pre">kde</span></tt>. Esiste un equivalente
1167 <tt class="docutils literal"><span class=
1168 "pre">gnome-core</span> <span class=
1169 "pre">gnome</span></tt> per chi preferisce gnome, nel
1170 caso si potrebbe installare il log-in manager
1171 <tt class="docutils literal"><span class=
1172 "pre">gdm</span></tt> al posto di <tt class=
1173 "docutils literal"><span class=
1174 "pre">kdm</span></tt>.</td>
1180 <div class="section" id="apt-configurazione">
1181 <h2><a class="toc-backref" href=
1182 "#id15">1.7 Apt configurazione</a></h2>
1184 <p>Vediamo i due file principali di apt:</p>
1187 <li><tt class="docutils literal"><span class=
1188 "pre">/etc/apt/sources.list</span></tt></li>
1190 <li><tt class="docutils literal"><span class=
1191 "pre">/etc/apt/apt.conf</span></tt></li>
1194 <div class="section" id="sources-list">
1195 <h3><a class="toc-backref" href=
1196 "#id16">1.7.1 sources.list</a></h3>
1198 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1199 preleva i pacchetti da installare tramite <em>dpkg</em>,
1200 vengono quindi precisati i metodi (ad es. http / ftp /
1201 cdrom / file), la release che si vuole tracciare (es
1202 <tt class="docutils literal"><span class=
1203 "pre">stable,</span> <span class="pre">testing,</span>
1204 <span class="pre">unstable</span></tt> oppure i
1205 corrispondenti release name es: <tt class=
1206 "docutils literal"><span class="pre">Lenny,</span>
1207 <span class="pre">Squeeze,</span> <span class=
1208 "pre">Sid</span></tt>), i rami di interesse (es:
1209 <tt class="docutils literal"><span class=
1210 "pre">main</span></tt> che e' l'archivio principale,
1211 <tt class="docutils literal"><span class=
1212 "pre">non-free</span></tt> per il software non libero,
1213 <tt class="docutils literal"><span class=
1214 "pre">contrib</span></tt> per i pacchetti non realizzati
1215 dai manutentori ufficiali).</p>
1217 <p>Gli archivi sono generalmente:</p>
1220 <li><tt class="docutils literal"><span class=
1221 "pre">deb</span></tt> per pacchetti Debian binari</li>
1223 <li><tt class="docutils literal"><span class=
1224 "pre">deb-src</span></tt> per i pacchetti sorgenti
1225 (quindi da compilare, come il kernel) degli stessi
1226 pacchetti binari. In genere se non compilate spesso
1227 potete evitare di tracciare i sorgenti per risparmiare
1231 <p><tt class="docutils literal"><span class=
1232 "pre">/etc/apt/sources.list</span></tt></p>
1233 <pre class="literal-block">
1234 # esempio di accesso a un CDROM:
1235 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1237 # Archivio principale debian via http su piffa.net,
1238 # non funziona al di fuori dell'aula dei corsi
1239 deb http://debian.piffa.net/debian/ Lenny main
1240 # Sono disponibili anche i rami non-free contrib
1241 # deb http://debian.piffa.net/debian/ lenny non-free contrib
1243 # Mirror da kernel.org da usare a casa:
1244 deb http://mirrors.eu.kernel.org/debian/ lenny main
1246 # Security dal sito principale
1247 deb http://security.debian.org/ lenny/updates main
1248 deb-src http://security.debian.org/ lenny/updates main
1250 # Debian volatile per le cose soggette a cambiamenti non legati
1251 # a dinamiche di sicurezza
1252 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1253 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1255 # Esempio di accesso a un file system locale contenente i pacchetti:
1256 # deb file:/mnt/mirror Sid main non-free contrib
1260 <div class="section" id="etc-apt-apt-conf">
1261 <h3><a class="toc-backref" href=
1262 "#id17">1.7.2 /etc/apt/apt.conf</a></h3>
1264 <p>Questo file contiene le opzioni di apt, come ad
1265 esempio il proxy:</p>
1266 <pre class="literal-block">
1267 Acquire::http::Proxy "http://10.10.208.254:3128";
1270 <p>Si tenga conto che se si imposta un proxy per apt sul
1271 proprio portatile e tornati a casa propria si vuole
1272 scaricare nuovi pacchetti si dovra' disabilitare il
1278 <div class="section" id="squid">
1279 <h1><a class="toc-backref" href=
1280 "#id18">2 Squid</a></h1>
1282 <p>Squid e' un proxy cache http (ma anche FTP e https)
1283 robusto e strutturato, puo' essere usato sia in reti
1284 relativamente piccole grazie alla semplicita' di
1285 configurazione che in scenari piu' complessi grazie alla
1286 possibilita' di gestirne in modo granulare le risorse. Si
1287 partira' dalle configurazioni piu' semplici per la semplice
1288 <em>condivisione della navigazione</em> internet, per poi
1289 poter configurare la gestione degli accessi, il filtraggio
1290 dei contenuti (Squid e' una applicazione che si muove nel 4'
1291 livello del modello TCP/IP a differenza di un
1292 <em>ipfilter</em> limitato al 2') nel l bilanciamento del
1293 carico tra piu' hosts.</p>
1295 <dl class="docutils">
1296 <dt>Inoltre Squid svolge la funzione di
1297 <em>anonymizer</em>:</dt>
1299 <dd>nasconde i client http alla rete internet: risulta solo
1300 il server proxy nei log dei server web frequentati dagli
1301 utenti di Squid.</dd>
1304 <p>Cosa a volte sottovalutata, Squid permette la navigazione
1305 web a una rete basata su <em>indirizzi IP privati</em> (es
1306 una 192.168.0.0/24). E se la rete privata deve <em>solo
1307 navigare</em> in internet, non serve un <em>NAT</em> od
1308 altro, basta il solo Squid. Per altro non servira' neanche un
1309 servizio DNS dato che <em>sara' il solo Squid a risolvere i
1310 nomi di dominio</em> per i suoi client http.</p>
1312 <p>Squid ascolta di default sulla porta 3128, per impostare
1313 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1314 "docutils literal"><span class=
1315 "pre">/etc/apt/apt.conf</span></tt></p>
1316 <pre class="literal-block">
1317 Acquire::http::Proxy "10.10.208.254:3128";
1320 <p>Per installare Squid si usino i pacchetti:</p>
1321 <pre class="literal-block">
1325 <div class="section" id="configurazione-squid-conf">
1326 <h2><a class="toc-backref" href=
1327 "#id19">2.1 Configurazione:
1330 <p>Segue un estratto delle direttive principali viste in
1331 aula presenti nel file di configurazione <tt class=
1332 "docutils literal"><span class=
1333 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1335 <div class="section" id="cache-dir">
1336 <h3><a class="toc-backref" href=
1337 "#id20">2.1.1 Cache_dir</a></h3>
1339 <p>Cache dir serve per impostare dimensione e percorso
1340 della cache creata sul supporto di storaggio. Essendo la
1341 dimensione di default della cache pari a <tt class=
1342 "docutils literal"><span class="pre">~100</span>
1343 <span class="pre">MB</span></tt> e' altamente
1344 consigliabili aumentare questo parametro se si vuole
1345 poter utilizzare la funzione di <em>cache</em> http del
1348 <p>La dimensione ovviamente dipendera' dallo spazio
1349 disponibile, dimensioni tipiche e massime degli oggetti
1350 che si vuole tenere in cache (un solo file <em>.iso e'
1351 circa ``700 MB``, il pacchetto *Openoffice.org</em> circa
1352 <tt class="docutils literal"><span class="pre">150</span>
1353 <span class="pre">MB</span></tt>, un pacchetto debian
1354 circa <tt class="docutils literal"><span class=
1355 "pre">20</span> <span class="pre">MB</span></tt>), numero
1358 <p>Si presti poi attenzione alla natura dei dati che
1359 saranno salvati nella cache: sono tutti dati facilmente
1360 sostituibili (gli originali sono <em>on-line</em>) la cui
1361 perdita non arreca danni permanenti. Questo rende la
1362 cache di Squid un possibile candidato ad un <em>RAID
1363 stirpe</em> (livello 0), con vantaggi sia per le
1364 prestazioni (e la velocita' di navigazione e' uno dei
1365 motivi per cui si installa Squid) che per l'utilizzo
1366 estensivo dello spazio di storaggio. Questo fino al
1367 momento in cui per voi non sia piu' importante
1368 <em>garantire la disponibilita' del servizio</em> (se il
1369 RAID stripe dovesse rompersi gli utenti non potrebbero
1370 piu' navigare, cosa che per natura dello stripe e'
1371 maggiormente probabile rispetto ad un <em>mirror</em> o a
1372 un filesytem <em>normale</em>) con un RAID mirror o
1375 <p>Altra considerazione: i dati del proxy vengono slavati
1376 sul filesytem del server dietro richiesta di utenti
1377 esterni talvolta sconosciuti. Come per i servizi di file
1378 sharing o per la posta elettronica non c'e' motivo che il
1379 filesystem su cui sono ospitati questi dati abbia i
1380 privilegi di eseguibilita' o suid (in genere si puo'
1381 anche usare <em>noatime</em> per renderlo piu' veloce,
1382 che si usi o meno il journal dipende dalle preferenze:
1383 affidabilita' oppure prestazioni):</p>
1386 <pre class="literal-block">
1388 # Filesystem per Squid http cache
1389 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1392 <p>Ora possiamo impostare la cache direttamente nel file
1393 <tt class="docutils literal"><span class=
1394 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1395 <pre class="literal-block">
1396 #TAG: cache_dir (riga 1628)
1399 # cache_dir Type Directory-Name Fs-specific-data [options]
1401 # You can specify multiple cache_dir lines to spread the
1402 # cache among different disk partitions.
1405 # cache_dir ufs /var/spool/squid3 100 16 256
1406 cache_dir aufs /var/spool/squid3 300 24 256
1410 # directory primo livello
1411 # secondo livello di directory
1414 <p>Se si modifica la struttura del filesytem della cache
1415 di Squid, ad esempio variando il numero delle directory,
1416 puo' essere opportuno rigenerare la struttura della cache
1417 di squid (per lo meno se si <em>aumenta</em> il numero
1418 delle directory di primo o secondo livello). Tipicamente
1419 e' consigliabile cancellare (se si ha <em>ridotto</em> il
1420 numero delle directory) la vecchia cache e poi generare
1421 una nuova struttura. Se si vuole <em>star nel sicuro</em>
1422 ogni volta che si modifica l'impostazione delle directory
1423 <em>si svuoti la vecchia cache e se ne generi una
1425 <pre class="literal-block">
1426 # /etc/init.d/squid3 stop
1427 # rm -r /var/spool/squid3/??
1429 # /etc/init.d/squid3 start
1433 <div class="section" id="tag-maximum-object-size">
1434 <h3><a class="toc-backref" href=
1435 "#id21">2.1.2 TAG:
1436 maximum_object_size</a></h3>
1438 <p>Questa direttiva imposta la dimensione massima degli
1439 oggetti che vengono salvati sul supporto di storaggio,
1440 oggetti di dimensioni superiori saranno comunque
1441 scaricati ma non tenuti in cache.</p>
1443 <p>TAG: maximum_object_size (1760):</p>
1444 <pre class="literal-block">
1445 # TAG: maximum_object_size (1760)
1446 # Objects larger than this size will NOT be saved on disk. The
1447 # value is specified in kilobytes, and the default is 4MB. If
1448 # you wish to get a high BYTES hit ratio, you should probably
1449 # increase this (one 32 MB object hit counts for 3200 10KB
1450 # hits). If you wish to increase speed more than your want to
1451 # save bandwidth you should leave this low.
1453 # NOTE: if using the LFUDA replacement policy you should increase
1454 # this value to maximize the byte hit rate improvement of LFUDA!
1455 # See replacement_policy below for a discussion of this policy.
1458 # maximum_object_size 4096 KB
1459 maximum_object_size 150 MB
1463 <div class="section" id="tag-cache-mem">
1464 <h3><a class="toc-backref" href=
1465 "#id22">2.1.3 TAG: cache_mem</a></h3>
1467 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1468 utilizzata per la cache di Squid. Questo dipendera' dalla
1469 RAM disponibile sul sistema, e da quanta di questa volete
1470 mettere a disposizione di Squid (altri servizi importanti
1471 girano sulla stessa macchina?). Questo parametro
1472 influisce sulle prestazioni e sul degrado dei supporti di
1473 storaggio (sopratutto se magnetici).</p>
1475 <p>Se si stesse pensando di usare dell'hardware
1476 <em>embedded</em> a basse prestazioni / consumo per
1477 realizzare un server gateway / NAT / Squid si tenga
1478 presente che Squid e' relativamente esoso di risorse:
1479 avra' bisogno di una macchina con <tt class=
1480 "docutils literal"><span class="pre">~25MB</span></tt>
1481 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1482 servire decorosamente una decina di client http su una
1483 rete ethernet 10/100. In questo caso non fate scendere
1484 <tt class="docutils literal"><span class=
1485 "pre">cache_mem</span></tt> sotto i <tt class=
1486 "docutils literal"><span class="pre">2/4</span>
1487 <span class="pre">MB</span></tt> pena un accesso continuo
1488 al supporto di storaggio.</p>
1490 <p>Se invece si disponesse di una macchina dedicata a
1491 Squid con gigabytes di RAM non si esiti a dedicarne buona
1492 parte a <em>cache_mem</em>.</p>
1494 <p>TAG: cache_mem (1566):</p>
1495 <pre class="literal-block">
1496 # 'cache_mem' specifies the ideal amount of memory to be used
1498 # * In-Transit objects
1500 # * Negative-Cached objects
1507 <div class="section" id="tag-minimum-object-size">
1508 <h3><a class="toc-backref" href=
1509 "#id23">2.1.4 TAG:
1510 minimum_object_size</a></h3>
1512 <p>Questo parametro imposta la dimensione minima degli
1513 oggetti salvati nella cache. Settato a <tt class=
1514 "docutils literal"><span class="pre">0</span></tt> o a
1515 valori molto piccoli puo' influire negativamente sulla
1516 deframmentazione del filesytem e consumare un numero
1517 elevato di <em>inode</em> (cosa non piu' importante con
1518 ext4 o altri filesytem).</p>
1520 <p>TAG: minimum_object_size:</p>
1521 <pre class="literal-block">
1522 # TAG: minimum_object_size (bytes)
1523 # Objects smaller than this size will NOT be saved on disk. The
1524 # value is specified in kilobytes, and the default is 0 KB, which
1525 # means there is no minimum.
1528 # minimum_object_size 0 KB
1529 minimum_object_size 0 KB
1534 <div class="section" id=
1535 "negoziazione-degli-accesi-al-servizio">
1536 <h2><a class="toc-backref" href=
1537 "#id24">2.2 Negoziazione degli accesi al
1540 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1541 <em>open relay</em> , si deve quindi limitare la rete che
1542 puo' accedere al servizio.</p>
1544 <dl class="docutils">
1545 <dt>Open Relay:</dt>
1547 <dd>Un servizio a cui possono accedere tutti
1548 indiscriminatamente. La cosa puo' andare bene per servizi
1549 come i server web, che aspirano per loro natura al
1550 maggior numero possibile di utenti, ma non a servizi come
1551 i proxy http oppure ai server di posta elettronica (che
1552 permetterebbero l'invio di SPAM).</dd>
1555 <p>Generalmente non volete che il vostro proxy http venga
1556 usato da persone sconosciute le quali sostanzialmente
1557 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1558 (probabilmente per visionare materiali che non vorrebbero
1559 fossero ricondotti direttamente a loro, per motivi che sta
1560 a voi prendere in considerazione) consumando traffico e
1561 banda della vostra connessione a internet. Tenere Squid in
1562 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1563 modo per essere inseriti in una <em>black list</em>.</p>
1565 <p>Per poter limitare gli accessi a Squid dal punto di
1566 vista dell'applicazione (quarto livello TCP/IP) si
1567 identifichera' inizialmente l'entita' <em>rete locale</em>
1568 (es: <tt class="docutils literal"><span class=
1569 "pre">localnet</span></tt>) con una ACL di tipo
1570 <em>src</em> (indirizzi IP sorgenti) indicando la
1571 <em>classe / range di IP</em> della nostra rete.</p>
1574 Dopodiche l'accesso (<tt class=
1575 "docutils literal"><span class=
1576 "pre">http_access</span></tt>) si concedera'
1577 (<em>allow</em>) a questa entita' (es: <tt class=
1578 "docutils literal"><span class=
1579 "pre">localnet</span></tt>) negando chiunque altro.
1582 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1583 esprimere i range di IP: <a class="reference external"
1584 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1585 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1587 <div class="section" id="acl-e-http-access">
1588 <h3><a class="toc-backref" href=
1589 "#id25">2.2.1 ACL e http access</a></h3>
1591 <p>Si proceda a creare una <tt class=
1592 "docutils literal"><span class="pre">ACL</span></tt> di
1593 tipo <tt class="docutils literal"><span class=
1594 "pre">src</span></tt> per identificare la nostra rete
1595 locale, poi si abiliti l'accesso a questa con la
1596 direttiva <tt class="docutils literal"><span class=
1597 "pre">http_access</span></tt>. Tutto quanto non e'
1598 espressamente autorizzato viene poi negato da un
1599 <tt class="docutils literal"><span class=
1600 "pre">http_access</span> <span class="pre">deny</span>
1601 <span class="pre">all</span></tt> finale.</p>
1602 <pre class="literal-block">
1604 # Defining an Access List
1606 # Every access list definition must begin with an aclname and acltype,
1607 # followed by either type-specific arguments or a quoted filename that
1608 # they are read from.
1610 # ***** ACL TYPES AVAILABLE *****
1612 # acl aclname src ip-address/netmask ... # clients IP address
1615 # Example rule allowing access from your local networks.
1616 # Adapt to list your (internal) IP networks from where browsing
1618 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1619 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1620 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1622 acl localnet src 10.10.208.0/24
1626 # Allowing or Denying access based on defined access lists
1628 # Access to the HTTP port:
1629 # http_access allow|deny [!]aclname ...
1631 # NOTE on default values:
1633 # If there are no "access" lines present, the default is to deny
1637 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1639 # Example rule allowing access from your local networks.
1640 # Adapt localnet in the ACL section to list your (internal) IP networks
1641 # from where browsing should be allowed
1642 #http_access allow localnet
1643 http_access allow localnet
1648 <div class="section" id="testare-squid">
1649 <h2><a class="toc-backref" href=
1650 "#id26">2.3 Testare Squid</a></h2>
1652 <p>Configurato squid e' fondamentale testarne il corretto
1653 funzionamento per assicurarsi di non aver creato un
1654 <em>open-relay</em>. Per fare dei test significativi serve
1655 utilizzare degli host remoti: ci si connetta via ssh a
1656 questi per poi utilizzare <tt class=
1657 "docutils literal"><span class="pre">wget</span></tt> da
1658 riga di comando.</p>
1660 <div class="section" id="client-wgetrc">
1661 <h3><a class="toc-backref" href=
1662 "#id27">2.3.1 Client: ~/.wgetrc</a></h3>
1664 <p>Nel file <tt class="docutils literal"><span class=
1665 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1666 un file nascosto) si puo' impostare il proxy per wget. Si
1667 utilizzi l'indirizzo IP del server che si vuole testare,
1668 e si seguano i log <tt class=
1669 "docutils literal"><span class=
1670 "pre">/var/log/squid3/access.log</span></tt> sul
1673 <p>Da notare che la prova va' fatta su una macchina della
1674 rete che si vuole testare, non da <em>localhost</em>. Per
1675 altro se si utilizzasse <em>direttamente</em> <tt class=
1676 "docutils literal"><span class=
1677 "pre">localhost</span></tt> non si testerebbe la
1678 <em>ACL</em> predisposta, dato che si si rientrerebbe
1679 nella ACL (pre-configurata di default) <tt class=
1680 "docutils literal"><span class=
1681 "pre">localhost</span></tt>.</p>
1683 <dl class="docutils">
1686 <dd>http_proxy=10.10.208.178:3128</dd>
1689 <p>Si proceda a scaricare dal client scelto con un
1691 <pre class="literal-block">
1692 wget http://www.google.it
1696 <div class="section" id="server-access-log">
1697 <h3><a class="toc-backref" href=
1698 "#id28">2.3.2 Server:
1701 <p>Si puo' controllare il corretto funzionamento del
1702 server seguendo i log di accesso a Squid:</p>
1703 <pre class="literal-block">
1704 # tail -f /var/log/squid3/access.log
1707 <p>In oltre e' possibile configurare diversi
1708 <em>analizzatori di log</em> come <tt class=
1709 "docutils literal"><span class=
1710 "pre">Webalizer</span></tt> per studiare i log di
1716 <div class="section" id="apache">
1717 <h1><a class="toc-backref" href=
1718 "#id29">3 Apache</a></h1>
1720 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1721 dato alla piattaforma server Web modulare piu' diffusa (ma
1722 anche al gruppo di lavoro open source che ha creato,
1723 sviluppato e aggiornato il software server), in grado di
1724 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1726 <p>Un server web e' un processo, e per estensione il computer
1727 su cui e' in esecuzione, che si occupa di fornire, su
1728 richiesta del browser, una pagina web (spesso scritta in
1729 HTML). Le informazioni inviate dal server web viaggiano in
1730 rete trasportate dal protocollo HTTP. L'insieme di server web
1731 dà vita al World Wide Web, uno dei servizi piu'
1732 utilizzati di Internet.</p>
1734 <div class="section" id="pacchetti-da-installare">
1735 <h2><a class="toc-backref" href=
1736 "#id30">3.1 Pacchetti da
1737 installare::</a></h2>
1743 <p>Con la release 2.0 di Apache viene automaticamente resa
1744 disponibile anche la versione SSL (Secure Socket Layer,
1745 connessioni criptate ) del web server.</p>
1748 <div class="section" id="configurazione-di-apache">
1749 <h2><a class="toc-backref" href=
1750 "#id31">3.2 Configurazione di
1753 <p>I file di configurazione di apache si trovano nella
1754 cartella: <tt class="docutils literal"><span class=
1755 "pre">/etc/apache2</span></tt> e sono strutturati come
1756 descritto nel file <tt class=
1757 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1758 . Sostanzialmente lo schema e' il seguente:</p>
1760 <dl class="docutils">
1761 <dt>apache2.conf</dt>
1764 <p class="first">File di configurazione principale del
1767 <p class="last">httpd.conf e' il vecchio file di
1768 configurazione di Apache1, presente per motivi di
1769 retrocompatibilita' e' generalmente vuoto.</p>
1774 <dd>In questo file vengono specificate le porte sulle
1775 quali resta in ascolto il server web. Si noti che
1776 utilizzando dei virtual hosts generalmente viene
1777 specificata per questi la porta su cui ascoltare nel file
1778 di configurazione del virtual host, ad es: <tt class=
1779 "docutils literal"><span class=
1780 "pre"><VirtualHost</span> <span class=
1781 "pre">*:80></span></tt></dd>
1783 <dt>sites-available</dt>
1785 <dd>In questa cartella vengono raccolti i file di
1786 configurazione dei virtual host disponibili.</dd>
1788 <dt>sites-enabled</dt>
1790 <dd>In questa cartella sono contenuti dei link simbolici
1791 ai files in ../sites-available : se il link e' presente
1792 in questa cartella il virtual host e' abilitato.</dd>
1794 <dt>mods-available</dt>
1796 <dd>Stesso metodo per i moduli: in questa cartella ci
1797 sono i moduli veri e propri che verranno poi abilitati
1798 grazie all'esistenza di link simbolici nella cartella
1801 <dt>mods-enabled</dt>
1803 <dd>Moduli abilitati, effettivamente caricati.</dd>
1807 <div class="section" id="apache-conf">
1808 <h2><a class="toc-backref" href=
1809 "#id32">3.3 apache.conf</a></h2>
1811 <p>File di configurazione del servizio Apache, contiene le
1812 impostazioni generiche (ad esempio utilizzo della RAM e
1813 risorse di sistema) dell'intero servizio. Nella
1814 configurazione di default per Debian non viene definito un
1815 vero e proprio sito di default ma solo dei virtual
1818 <p>Guardiamo alcune direttive interessanti:</p>
1820 <dl class="docutils">
1823 <dd>Numero di secondi da aspettare prima di chiudere la
1824 connessione con il client. Questo parametro serve a
1825 liberare le risorse di sistema nel caso che un client,
1826 magari a causa di una connessione particolarmente lenta o
1827 instabili, tenga attivo indefinitamente un processo di
1832 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1833 alle connessioni persistenti (http 1.1) permettono al
1834 server di rispondere a piu' richieste dei client mediante
1835 la stessa connessione. Il protocollo http per sua natura
1836 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
1837 richiesta (per pagine web si pensi ad esempio alle
1838 immagini) dal client necessita di una connessione
1839 autonoma. Keep-alive permette di ottimizzare la
1840 connessione anche fino al 50% a seconda delle situazioni
1843 <dt>Server-Pool Size Regulation</dt>
1845 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1846 Tutti spiegati nel manuale di apache) servono per
1847 attribuire le risorse di sistema disponibili al server
1848 Apache. Tenere questi parametri bassi serve a limitare il
1849 rischio di Denial of Service per il server, nel caso
1850 offra altri servizi. I settagli di default sono come
1851 sempre abbastanza conservativi, se si conta di usare il
1852 proprio Apache per servire un sito web con molti
1853 visitatori sara' necessario aumentare sensibilmente le
1854 impostazioni di base.</dd>
1856 <dt>AccessFileName</dt>
1858 <dd>Il nome del file che viene onorato per modificare le
1859 impostazioni per una singola directory, legato alla
1860 direttiva AllowOverride .</dd>
1864 <div class="section" id="installazione-di-php">
1865 <h2><a class="toc-backref" href=
1866 "#id33">3.4 Installazione di PHP</a></h2>
1868 <p>Pacchetti da installare: <tt class=
1869 "docutils literal"><span class="pre">php5</span>
1870 <span class="pre">php-pear</span></tt></p>
1872 <div class="section" id="test-del-modulo-php">
1873 <h3><a class="toc-backref" href=
1874 "#id34">3.4.1 Test del modulo
1877 <p>Creare nella cartella <tt class=
1878 "docutils literal"><span class="pre">/var/www</span></tt>
1879 (o altra cartella visibile) un file con estensione *.php
1880 (es <tt class="docutils literal"><span class=
1881 "pre">/var/www/info.php</span></tt> contenete codice php
1882 eseguibile dall'interprete, ad es:</p>
1883 <pre class="literal-block">
1884 <?php phpinfo() ; ?>
1887 <p>Questa funzione di php generera' la tipica pagina con
1888 le impostazioni attuali per PHP. Richiamando la pagina
1889 (es: <tt class="docutils literal"><span class=
1890 "pre">http://localhost/info.php</span></tt> ) verra'
1891 generata dall'interprete PHP la pagina HTML e resa
1892 disponibile tramite Apache ai client HTTP, a prova del
1893 corretto funzionamento del modulo di PHP e della sua
1894 integrazione con il server web Apache. In caso contrario
1895 se il client http proporra' di scaricare la pagina invece
1896 che visualizzarla nel browser: non funziona l'interprete
1897 di php o sono mal configurati i MIME-type. prima di tutto
1898 assicurarsi di aver fatto ripartire Apache.</p>
1901 <div class="section" id=
1902 "installazione-del-supporto-per-mysql">
1903 <h3><a class="toc-backref" href=
1904 "#id35">3.4.2 Installazione del supporto
1907 <p>Installare i pacchetti:</p>
1908 <pre class="literal-block">
1909 php5-mysql phpmyadmin
1912 <p>Controllare tramite la pagina php.info che sia
1913 abilitato il supporto per Mysql (ripartito Apache,
1914 ricaricare la pagina e cercare con CTRL+f <tt class=
1915 "docutils literal"><span class=
1916 "pre">mysql</span></tt>).</p>
1919 <div class="section" id="phpmyadmin">
1920 <h3><a class="toc-backref" href=
1921 "#id36">3.4.3 phpmyadmin</a></h3>
1923 <p>L'interfaccia web Phpmyadmin non richiede
1924 necessariamente la presenza di un database Mysql locale,
1925 puo' infatti essere utilizzata per gestire database
1926 remoti (il suo file di configurazione: <tt class=
1927 "docutils literal"><span class=
1928 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1929 caso si voglia installare localmente Mysql si utilizzi il
1930 pacchetto <tt class="docutils literal"><span class=
1931 "pre">mysql-server</span></tt> .</p>
1933 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1934 <tt class="docutils literal"><span class=
1935 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1936 non fosse controllare che sia incluso il file <tt class=
1937 "docutils literal"><span class=
1938 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1939 <tt class="docutils literal"><span class=
1940 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1943 <div class="section" id=
1944 "installazione-del-supporto-per-postgresql">
1945 <h3><a class="toc-backref" href=
1946 "#id37">3.4.4 Installazione del supporto
1947 per Postgresql</a></h3>
1949 <p>Installare i pacchetti:</p>
1950 <pre class="literal-block">
1951 php5-pgsql phppgadmin
1954 <p>Controllare tramite la pagina php.info che sia
1955 abilitato il supporto per PostgreSQL (ripartito Apache,
1956 ricaricare la pagina e cercare con CTRL+f <tt class=
1957 "docutils literal"><span class=
1958 "pre">pgsql</span></tt>).</p>
1961 <div class="section" id="phppgadmin">
1962 <h3><a class="toc-backref" href=
1963 "#id38">3.4.5 phppgadmin</a></h3>
1965 <p>L'interfaccia web Phppgadmin per il database server
1966 PostgreSQL non richiede necessariamente la presenza di un
1967 database locale, puo' infatti essere utilizzata per
1968 gestire database remoti (il suo file di configurazione:
1969 <tt class="docutils literal"><span class=
1970 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
1971 caso si voglia installare localmente Mysql si utilizzi il
1972 pacchetto <tt class="docutils literal"><span class=
1973 "pre">postgresql</span></tt> .</p>
1975 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1976 <tt class="docutils literal"><span class=
1977 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
1978 non fosse controllare che sia incluso il file <tt class=
1979 "docutils literal"><span class=
1980 "pre">/etc/phppgadmin/apache.conf</span></tt> in
1981 <tt class="docutils literal"><span class=
1982 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1986 <div class="section" id="virtual-hosts">
1987 <h2><a class="toc-backref" href=
1988 "#id39">3.5 Virtual hosts</a></h2>
1992 <li><a class="reference external" href=
1993 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
1995 <li><a class="reference external" href=
1996 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
1997 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2001 <p>I virtual host permettono di avere piu' siti internet
2002 disponibili tramite lo stesso server web, eventualmente
2003 mappati su un solo indirizzo IP. Sono generalmente di due
2008 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2009 possibilita' di avere piu' indirizzi IP dedicati per i
2010 diversi siti che si vuole servire. ES: <tt class=
2011 "docutils literal"><span class=
2012 "pre"><VirtualHost</span> <span class=
2013 "pre">192.168.0.2:80></span></tt> . Soluzione
2014 dispendiosa, si tende ad usarla solo se servono
2015 certificati di sicurezza (SSL ) dedicati per ogni
2018 <li>Basati su <em>nomi di dominio</em> che puntano allo
2019 stesso IP. Soluzione piu' economica e diffusa che si
2020 basa sulle funzionalita' di http 1.1 .</li>
2024 <p>Prenderemo in esame la gestione di virtual hosts basati
2025 su nomi di dominio.</p>
2027 <div class="section" id="gestione-dns">
2028 <h3><a class="toc-backref" href=
2029 "#id40">3.5.1 Gestione DNS</a></h3>
2031 <p>Prima di tutto per poter impostare i virtual hosts
2032 dovete avere un server DNS che risolva i vostri nomi di
2033 dominio sull'indirizzo IP del server. Questo si puo'
2034 ottenere in vari modi, ad es:</p>
2037 <dl class="docutils">
2038 <dt><em>Bind</em> (DNS server)</dt>
2040 <dd>Impostare i campi A nelle proprie zone gestite
2041 dal server DNS Bind. Ad es: <tt class=
2042 "docutils literal"><span class=
2043 "pre">papo</span>
2045 "pre">A</span>
2046 <span class="pre">212.22.136.248</span></tt></dd>
2048 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2050 <dd>Utilizzare un servizio come ad es: <a class=
2051 "reference external" href=
2052 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2053 per mappare nomi di dominio sul proprio indirizzo IP,
2054 comodo ad esempio se si dispone di un indirizzo IP
2055 pubblico (anche se dinamico) per la propria
2056 connessione ad internet.</dd>
2058 <dt><em>Dnsmasq</em> (DNS server)</dt>
2060 <dd>Utilizzabile al livello della rete locale per
2061 fare dei test, utilizzando direttive come: <tt class=
2062 "docutils literal"><span class=
2063 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2065 <dt><tt class="docutils literal"><span class=
2066 "pre">/etc/hosts</span></tt></dt>
2068 <dd>Per prove sul proprio sistema potete impostare i
2069 nomi dei vostri virtual server nel file /etc/hosts
2074 <p>Query DNS con <tt class=
2075 "docutils literal"><span class="pre">dig</span></tt>:</p>
2076 <pre class="literal-block">
2079 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2080 ;; global options: printcmd
2082 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2083 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2085 ;; QUESTION SECTION:
2086 ;177.piffa.net. IN A
2089 177.piffa.net. 0 IN A 10.10.208.177
2092 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2093 <tt class="docutils literal"><span class=
2094 "pre">177.piffa.net.</span>
2096 "pre">0</span>
2097 <span class="pre">IN</span>
2099 "pre">A</span>
2100 <span class="pre">10.10.208.177</span></tt> . Il nome di
2101 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2102 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2103 dovra' essere disponibile un virtual host che corrisponde
2104 al nome <tt class="docutils literal"><span class=
2105 "pre">177.piffa.net</span></tt> (<tt class=
2106 "docutils literal"><span class=
2107 "pre">ServerName</span></tt>) .</p>
2110 <div class="section" id="virtual-host">
2111 <h3><a class="toc-backref" href=
2112 "#id41">3.5.2 Virtual host</a></h3>
2114 <p>Esempio di Virtual host:</p>
2115 <pre class="literal-block">
2116 <VirtualHost *:80 >
2117 ServerName 177.piffa.net
2118 DocumentRoot /var/www/177.piffa.net/
2119 ServerAdmin webmaster@177.piffa.net
2120 </VirtualHost>
2123 <ol class="arabic simple">
2124 <li><tt class="docutils literal"><span class=
2125 "pre"><VirtualHost</span> <span class=
2126 "pre">\*:80</span> <span class="pre">></span></tt>
2127 La prima riga indica l'inizio della stanza relativa al
2128 nostro virtual host, che ascoltera' su qualunque
2129 indirizzo IP (nel caso il server abbia piu' indirizzi
2130 dai quali e' raggiungibile) sulla porta <tt class=
2131 "docutils literal"><span class=
2132 "pre">80</span></tt>.</li>
2134 <li><tt class="docutils literal"><span class=
2135 "pre">Server/name</span></tt> precisa quale sara' il
2136 nome di dominio a cui verra' associato questo sito
2137 rispetto ad altri eventualmente presenti sullo stesso
2140 <li><tt class="docutils literal"><span class=
2141 "pre">DocumentRoot</span></tt> : il path della
2142 directory che contiene le pagine del sito.</li>
2144 <li><tt class="docutils literal"><span class=
2145 "pre">ServerAdmin</span></tt>: l'indirizzo del
2146 webmaster, in modo da poterlo contattare in caso di
2147 problemi col sito.</li>
2149 <li><tt class="docutils literal"><span class=
2150 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2151 chiusura della stanza di definizione del virtual
2155 <p>Quelle che abbiamo appena visto sono le direttive
2156 essenziali per definire un sito virtuale, potrebbe essere
2157 utile aggiungere altre:</p>
2161 <dl class="first docutils">
2162 <dt><tt class="docutils literal"><span class=
2163 "pre">ErrorLog</span> <span class=
2164 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2167 <p class="first last">Log degli errori separato
2168 dai restanti siti web ospitati dal server.</p>
2174 <dl class="first docutils">
2175 <dt><tt class="docutils literal"><span class=
2176 "pre">LogLevel</span> <span class=
2177 "pre">warn</span></tt></dt>
2180 <p class="first last">Livello di importanza degli
2181 eventi loggati= warning <em>attenzione</em> .</p>
2187 <dl class="first docutils">
2188 <dt><tt class="docutils literal"><span class=
2189 "pre">CustomLog</span> <span class=
2190 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2191 <span class="pre">combined</span></tt></dt>
2194 <p class="first last">Log di accesso separati
2195 dagli altri siti, utile anche qua per statistiche
2196 di accesso per il solo sito virtuale.</p>
2202 <p>Potrebbe essere utile modificare le impostazioni di
2203 una intera directory, ad esempio per abilitare
2204 l'<tt class="docutils literal"><span class=
2205 "pre">AuthConfig</span></tt>:</p>
2206 <pre class="literal-block">
2207 <Directory "/var/www/miosito.net/privata">
2208 AllowOverride AuthConfig
2209 Options ExecCGI Indexes MultiViews FollowSymLinks
2215 <p><tt class="docutils literal"><span class=
2216 "pre">AllowOverride</span> <span class=
2217 "pre">AuthConfig</span></tt> ora vale per l'intera
2218 directory, come le altre opzioni.</p>
2222 <div class="section" id="negoziazione-accessi">
2223 <h2><a class="toc-backref" href=
2224 "#id42">3.6 Negoziazione accessi</a></h2>
2226 <p>Tipicamente quando si installa un server web il proprio
2227 desiderio e' di dare accesso ai materiali disponibili al
2228 maggior numero di visitatori possibile. Talvolta pero' puo'
2229 essere utile poter limitare questi accessi, ad esempio per
2230 escludere un <em>bot</em> indesiderato che scansiona
2231 ininterrottamente le nostre pagine o per creare una
2232 <em>Area Riservata</em> i cui materiali non devono essere
2233 disponibile a tutti.</p>
2235 <div class="section" id="limiti-su-base-ip">
2236 <h3><a class="toc-backref" href=
2237 "#id43">3.6.1 Limiti su base IP</a></h3>
2239 <p>La forma piu' semplice di restrizione degli accessi e'
2240 su base degli indirizzi IP dei client: tipicamente i siti
2241 web sono settati per dare accesso a chiunque:</p>
2242 <pre class="literal-block">
2243 <VirtualHost *:80 >
2245 <Directory "/var/www/177.piffa.net">
2249 </VirtualHost>
2252 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2254 <pre class="literal-block">
2255 <VirtualHost *:80 >
2257 <Directory "/var/www/177.piffa.net">
2260 Deny from 192.168.0.1
2262 </VirtualHost>
2265 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2266 materiali dell'intero sito virtuale, oppure potremmo
2267 lavorare su una sola directory:</p>
2268 <pre class="literal-block">
2269 <Directory "/var/www/miosito.net/limitata">
2271 Allow from 192.168.0.0./24
2276 <p>In questo modo solo la classe IP <tt class=
2277 "docutils literal"><span class=
2278 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2279 directory <tt class="docutils literal"><span class=
2280 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2281 relativamente facile per un malintenzionato cambiare il
2282 proprio indirizzo IP, oppure collegarsi da un altra zona.
2283 Meno facile e' accedere ad una classe privata trovandosi
2284 all'esterno di questa, ma ci sono comunque soluzioni piu'
2289 <div class="section" id="user-authentication">
2290 <h2><a class="toc-backref" href=
2291 "#id44">3.7 User Authentication</a></h2>
2293 <p>Si puo' negoziare gli accessi ad un area del sito
2294 tramite autenticazione basata su <em>nome utente /
2295 password</em>. Questo puo' venire utile per creare una area
2296 download <em>intranet</em>, alla quale possano accedere
2297 solo gli utenti previsti a prescindere dagli indirizzi IP
2298 dei loro client.</p>
2300 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2301 possibile implementare questo paradigma, per quanto
2302 esistano soluzioni piu' granulari e sofisticate, che
2303 richiedono pero' l'implementazione di interpreti di
2304 linguaggi di programmazione, criptazione delle passwords,
2305 gestione degli utenti ed eventualmente delle sessioni. Mod
2306 auth non richiede l'installazione di niente di tutto
2309 <p>link: <a class="reference external" href=
2310 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2312 <div class="section" id="definire-la-cartella">
2313 <h3><a class="toc-backref" href=
2314 "#id45">3.7.1 Definire la
2317 <p>Decidere quale sara' il <em>path</em> della cartella
2318 da sottoporre ad autenticazione:</p>
2321 <tt class="docutils literal"><span class=
2322 "pre">mkdir</span> <span class=
2323 "pre">/var/www/177.piffa.net/privata</span></tt>
2327 <div class="section" id=
2328 "creazione-del-database-delle-passwords">
2329 <h3><a class="toc-backref" href=
2330 "#id46">3.7.2 Creazione del database
2331 delle passwords</a></h3>
2333 <p>Un modo semplice per gestire una database di
2334 <em>user-id / passwords</em> e' utilizzare l'utility
2335 <tt class="docutils literal"><span class=
2336 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2337 in cui un <em>crypt</em> delle password viene associato
2340 <p>Si dovra' decidere dove tenere questo file, la cosa
2341 importante e' che non sia visibile nel sito web: non deve
2342 essere scaricabile dai visitatori. Deve essere cioe'
2343 all'esterno della <em>DocumentRoot</em>: un buon posto
2344 potrebbe essere la /home dell'utente.</p>
2346 <p>Creiamo (con il <em>flag</em> <tt class=
2347 "docutils literal"><span class="pre">-c</span></tt>) il
2348 file <tt class="docutils literal"><span class=
2349 "pre">/home/utente/passwords</span></tt> con l'utente
2350 <tt class="docutils literal"><span class=
2351 "pre">luca</span></tt>:</p>
2352 <pre class="literal-block">
2353 htpasswd -c /home/utente/passwords luca
2356 <p><tt class="docutils literal"><span class=
2357 "pre">htpasswd</span></tt> ci chiedera' la password da
2358 associare all'utente <tt class=
2359 "docutils literal"><span class="pre">luca</span></tt>.
2360 Per successive modifiche della password o aggiunta di
2361 nuovi utenti non sara' necessario usare il flag
2362 <tt class="docutils literal"><span class=
2363 "pre">-c</span></tt>.</p>
2366 <div class="section" id="id3">
2367 <h3><a class="toc-backref" href=
2368 "#id47">3.7.3 Configurazione di
2371 <p>Ora possiamo passare alla configurazione vera e
2372 propria di Apache, ma con una novita': andremo a inserire
2373 la voce in un <tt class="docutils literal"><span class=
2374 "pre">.htaccess</span></tt> invece che modificare
2375 (tramite una direttiva <tt class=
2376 "docutils literal"><span class=
2377 "pre"><Directory></span></tt> ) il file di
2378 impostazione del virtual-host.</p>
2380 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2381 puo' modificare l'impostazione del virtual host nel file
2382 <tt class="docutils literal"><span class=
2383 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2384 ma spesso il motivo per cui creiamo i virtual hosts e'
2385 ospitare i siti di altri utenti, che possono solo
2386 pubblicare (generalmente tramite <em>FTP</em>) i loro
2387 documenti nella loro <em>DocumentRoot</em>, senza poter
2388 quindi modificare in alcun modo la configurazione del
2391 <p>Dando agli utenti la possibilita' di modificare
2392 (<em>AllowOverride</em>) autonomamente alcuni parametri
2393 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2394 funzionamento del loro spazio web ci togliera'
2395 l'incombenza di dover intervenire continuamente sui vari
2398 <p>Abilitiamo l'AllowOverride nel file di configurazione
2399 del virtual host per la sola directory <tt class=
2400 "docutils literal"><span class=
2401 "pre">privata</span></tt>:</p>
2402 <pre class="literal-block">
2403 <VirtualHost *:80 >
2404 ServerName 177.piffa.net
2405 DocumentRoot /var/www/177.piffa.net/
2406 ServerAdmin webmaster@177.piffa.net
2407 <Directory "/var/www/177.piffa.net/privata">
2408 AllowOverride AuthConfig
2410 </VirtualHost>
2413 <p>Per rendere il cambiamento effettivo sara' necessario
2414 fare un restart / reload di Apache.</p>
2416 <p>Ora sara' possibile, anche per l'utente di sistema,
2417 creare un file <tt class="docutils literal"><span class=
2418 "pre">.htaccess</span></tt> che sara' onorato da
2421 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2422 <pre class="literal-block">
2423 # Messaggio visualizzato al prompt per l'autenticazione
2424 AuthName "Area privata soggetta ad autentizazione"
2425 # tipo di autenticazione da usarsi
2427 # File precedentemente generato con htpasswd
2428 AuthUserFile /home/utente/passwords
2430 # Negoziazione degli accessi
2431 # valid users permette l'accesso agli utenti specificati
2432 # nel file generato da htpasswd
2436 <p>Si noti che non e' necessario fare ripartire Apache
2437 per onorare i cambiamenti (un utente non avrebbe la
2438 possibilita' di farlo!).</p>
2440 <dl class="docutils">
2441 <dt>Oltre a <tt class="docutils literal"><span class=
2442 "pre">valid-users</span></tt> si potrebbe scegliere di
2443 usare la formula <tt class=
2444 "docutils literal"><span class="pre">users</span></tt>
2445 che permette di elencare esplicitamente gli
2448 <dd>require user pippo pluto</dd>
2451 <p>L'utente <em>paperino</em> che fosse comunque presente
2452 nel file generato da htpasswd non potrebbe accedere alla
2455 <dl class="docutils">
2456 <dt>Nel caso ci fossero molti utenti conviene gestirli
2457 tramite <em>gruppi</em>::</dt>
2459 <dd>require group staff studenti</dd>
2462 <p>I gruppi vengono definiti in un file in modo simile a
2463 <tt class="docutils literal"><span class=
2464 "pre">/etc/groups</span></tt> per gli utenti di
2466 <pre class="literal-block">
2468 studenti: lucap federico luca
2471 <p>da richiamare tramite la direttiva <tt class=
2472 "docutils literal"><span class=
2473 "pre">AuthGroupFile</span></tt>.</p>
2477 <div class="section" id="cavets">
2478 <h2><a class="toc-backref" href=
2479 "#id48">3.8 Cavets</a></h2>
2481 <p>Problemi di cache:</p>
2485 <li>Proxy: nei settaggi del browser specificare di non
2486 utilizzare un server proxy http per il sito web locale
2487 (o per gli altri che si stanno monitorando). Se si ha
2488 il controllo del proxy server: stopparlo, ricaricare la
2489 pagina (operazione che fallira'), far ripartire il
2490 proxy, ricaricare la pagina.</li>
2492 <li>Provare con un altro browser, o cercare di svuotare
2493 la cache chiudere/riaprire l'applicativo. Provare a
2494 fermare Apache, ricaricare la pagina (operazione che
2495 fallira'), far ripartire Apache, ricaricare la
2502 <div class="section" id="domain-name-system">
2503 <h1><a class="toc-backref" href=
2504 "#id49">4 Domain Name System</a></h1>
2506 <p>Domain Name System (spesso indicato con DNS) e' un
2507 servizio utilizzato per la risoluzione di nomi di host in
2508 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2509 un sistema <strong>gerarchico</strong> (quindi una struttura
2510 ad albero, simile ai <em>file system</em>)
2511 <strong>distribuito</strong> (ogni server DNS facente parte
2512 del sistema puo' mantenere solo una parte delle informazioni,
2513 ad esempio per la sua sola <em>zona</em>), costituito dai
2516 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2517 rete internet come per qualunque rete locale. Ad esempio
2518 durante la navigazione web un client vorrebbe vedere
2519 l'<em>URL</em> <tt class="docutils literal"><span class=
2520 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2521 connettere via <em>http</em> al server web deve prima
2522 ottenere l'indirizzo IP del <em>server http</em>
2523 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2524 fornisce un IP sbagliato l'utente non potra' raggiungere il
2525 servizio: di fatto e' come se il serve http fosse spento.</p>
2527 <p>Stessa cosa vale per gli altri servizi, come la posta
2528 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2531 <p>Potrebbe verificarsi uno scenario simile a questo: i
2532 vostri server per i siti web funzionano correttamente come i
2533 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2534 e POP3, e tutto il resto. Ma se poi un errore nella
2535 configurazione del DNS non rende raggiungibile l'intero
2536 <em>sito</em>: per l'utente finale e' come se nulla
2539 <p>Infatti quando si parla di un intervento della Polizia
2540 Postale per l'<em>oscuramento</em> di un sito dal punto di
2541 vista pratico questo si traduce generalmente nella rimozione
2542 o mistificazione del record DNS relativo a quel dominio (la
2543 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2544 principali provider internet che forniscono connettivita'
2545 agli utenti italiani, oltre che poter agire direttamente sul
2546 NIC italiano per i domini della TLD <em>.it</em>)</p>
2548 <p>L'operazione di convertire un nome in un indirizzo e'
2549 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2550 detto risoluzione inversa.</p>
2553 Un <em>Registar</em> e' un operatore che ha la facolta'
2554 (accreditamento da parte dell ICANN) di registrare i domini
2555 di secondo livello per gli utenti finali, dietro compenso
2556 di una modica cifra (una decina di euro) che vale come
2557 contributo su base annuale per il mantenimento
2558 dell'infrastruttura.
2561 <div class="section" id="risoluzione-inversa">
2562 <h2><a class="toc-backref" href=
2563 "#id50">4.1 Risoluzione Inversa</a></h2>
2565 <p>Per la risoluzione inversa sono invece i provider di
2566 connettivita' a gestire i DNS: se volete impostare il
2567 <em>PTR</em> associato al vostro indirizzo IP dovete
2568 contattare il vostro provider (tipo <em>telecom</em> per
2569 una connessione ADSL) e <em>non il Registar del vostro
2572 <p>Ad esempio all'IP <tt class=
2573 "docutils literal"><span class=
2574 "pre">212.22.136.248</span></tt> era associato un PTR
2575 <tt class="docutils literal"><span class=
2576 "pre">bender.piffa.net</span></tt>, corrispondente al
2577 record <tt class="docutils literal"><span class=
2578 "pre">212</span></tt> facente parte della zona <tt class=
2579 "docutils literal"><span class=
2580 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2581 provider Tiscali/Nextra proprietario della classe C
2582 <tt class="docutils literal"><span class=
2583 "pre">212.22.136.0</span></tt>. Se avete un solo IP
2584 conviene lasciare al fornitore la gestire del PTR, ma se
2585 avete a disposizione un'itera classe potete chiedere sempre
2586 al vostro provider che vi <em>deleghi</em> la gestione
2587 della zona tramite i vostri DNS.</p>
2589 <p>Per alcuni servizi, ad esempio la spedizione della posta
2590 elettronica, e' richiedeiesto che venga impostata
2591 correttamente l'associazione tra il PTR dell'indirizzo IP
2592 usato dal server di postai e il record A RR al quale questo
2593 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2598 <li><a class="reference external" href=
2599 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2600 2.1 Inconsistent, Missing, or Bad Data</li>
2602 <li><a class="reference external" href=
2603 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2607 <div class="section" id="nomi-di-dominio">
2608 <h2><a class="toc-backref" href=
2609 "#id51">4.2 Nomi di dominio</a></h2>
2611 <p>Un nome a dominio e' costituito da una serie di stringhe
2612 separate da punti, ad esempio bender.piffa.net. I nomi di
2613 dominio si leggono da destra verso sinistra: <em>TLD</em> o
2614 dominio di primo livello <tt class=
2615 "docutils literal"><span class="pre">net</span></tt>,
2616 secondo livello <tt class="docutils literal"><span class=
2617 "pre">piffa</span></tt>, terzo livello <tt class=
2618 "docutils literal"><span class="pre">bender</span></tt>. Il
2619 dominio di primo livello (o TLD, Top Level Domain,
2620 pronunciato <em>tilde</em> in Italia), per esempio .net o
2621 .it sono limitati e decisi direttamente dall'ente
2622 assegnatario ICANN ( Internet Corporation for Assigned
2623 Names and Numbers).</p>
2625 <p>L'utente finale potra' chiedere l'assegnazione (pagando
2626 un contributo al Register preferito per il mantenimento
2627 delle spese dell'infrastruttura) di un dominio di
2628 <em>secondo</em> livello (es <tt class=
2629 "docutils literal"><span class="pre">piffa</span></tt>) di
2630 una delle varie TLD disponibili (noi italiani diciamo
2631 <em>tildi</em>), sempre che non sia gia' stato assegnato a
2634 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
2635 potra' in stanziare domini di terzo livello (es <tt class=
2636 "docutils literal"><span class="pre">bender</span></tt>) e
2637 anche oltre (es www.andrea.bender.piffa.net). Tali records
2638 saranno mantenuti dall'utente, sotto la sua responsbilita':
2639 se il proprio server DNS non fosse raggiungibile o
2640 risultasse mal configurato gli utenti non potrebbero
2641 risolvere / raggiungere i siti di loro interesse.</p>
2643 <p>Tipicamente si ha almeno un server DNS secondario per
2644 garantire la sussistenza del servizio in caso di guasto del
2645 DNS principale. I secondari <em>replicano</em> i dati
2646 presenti nei DNS principali.</p>
2649 <div class="section" id="tipologie-di-record">
2650 <h2><a class="toc-backref" href=
2651 "#id52">4.3 Tipologie di record</a></h2>
2653 <p>Ad un nome DNS possono corrispondere diversi tipi di
2654 informazioni. Per questo motivo, esistono diversi tipi di
2655 record DNS. Ogni voce del database DNS deve essere
2656 caratterizzata da un tipo. I principali tipi sono:</p>
2659 <li>Record A - Indica la corrispondenza tra un nome ed
2660 uno (o piu') indirizzi IP (per la precisione indirizzi
2661 IPv4, ovvero la versione attualmente in uso).</li>
2663 <li>Record MX - (Mail eXchange) indica a quali server
2664 debba essere inviata la posta elettronica per un certo
2667 <li>Record CNAME - Sono usati per creare un alias, ovvero
2668 per fare in modo che lo stesso calcolatore sia noto con
2669 piu' nomi. Uno degli utilizzi di questo tipo di record
2670 consiste nell'attribuire ad un host che offre piu'
2671 servizi un nome per ciascun servizio. In questo modo, i
2672 servizi possono poi essere spostati su altri host senza
2673 dover riconfigurare i client, ma modificando solo il
2676 <li>Record PTR - Il DNS viene utilizzato anche per
2677 realizzare la risoluzione inversa, ovvero per far
2678 corrispondere ad un indirizzo IP il corrispondente nome a
2679 dominio. Per questo si usano i record di tipo "PTR" (e
2680 una apposita zona dello spazio dei nomi
2683 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2685 <li>Record SRV - Identificano il server per un
2686 determinato servizio all'interno di un dominio. Possono
2687 essere considerati una generalizzazione dei record
2690 <li>Record TXT - Associano campi di testo arbitrari ad un
2691 dominio. Questi campi possono contenere una descrizione
2692 informativa oppure essere utilizzati per realizzare
2696 <p>Vi sono anche tipi di record "di servizio", necessari al
2697 funzionamento del database distribuito: * Record NS -
2698 Utilizzato per indicare quali siano i server DNS
2699 autoritativi per un certo dominio, ovvero per delegarne la
2700 gestione. * Record SOA - (Start of Authority) usato per la
2701 gestione delle zone DNS.</p>
2704 <div class="section" id="utilizzo">
2705 <h2><a class="toc-backref" href=
2706 "#id53">4.4 Utilizzo</a></h2>
2708 <p>I computer vengono identificati in rete grazie agli
2709 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2710 utenti come riferimento per i vari server. Ad esempio
2711 sarebbe scomodo riferirsi al motore di ricerca Goggle con
2712 uno dei suoi IP: <tt class="docutils literal"><span class=
2713 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2714 nome di dominio <em>www.google.com</em>:</p>
2715 <pre class="literal-block">
2716 ping -c 1 www.google.com
2717 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2721 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2722 <h2><a class="toc-backref" href=
2723 "#id54">4.5 Risoluzione dei nomi di
2726 <p>Ci sono vari strumenti per interrogare i server DNS e
2727 ottenere l'indirizzo IP associato al nome di dominio che ci
2729 <pre class="literal-block">
2730 $ host www.piffa.net
2731 www.piffa.net is an alias for piffa.net.
2732 piffa.net has address 65.98.21.97
2733 piffa.net mail is handled by 10 65.98.21.97
2736 $ nslookup www.piffa.net
2737 Server: 192.168.0.10
2738 Address: 192.168.0.10#53
2740 Non-authoritative answer:
2741 www.piffa.net canonical name = piffa.net.
2743 Address: 65.98.21.97
2748 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2749 ;; global options: +cmd
2751 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2752 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2754 ;; QUESTION SECTION:
2755 ;www.piffa.net. IN A
2758 www.piffa.net. 3489 IN CNAME piffa.net.
2759 piffa.net. 3489 IN A 65.98.21.97
2761 ;; AUTHORITY SECTION:
2762 piffa.net. 86289 IN NS ns2.mydomain.com.
2763 piffa.net. 86289 IN NS ns1.mydomain.com.
2764 piffa.net. 86289 IN NS ns4.mydomain.com.
2765 piffa.net. 86289 IN NS ns3.mydomain.com.
2767 ;; ADDITIONAL SECTION:
2768 ns1.mydomain.com. 96208 IN A 64.94.117.193
2769 ns2.mydomain.com. 96208 IN A 64.94.31.67
2770 ns3.mydomain.com. 96208 IN A 66.150.161.137
2771 ns4.mydomain.com. 96208 IN A 63.251.83.74
2773 ;; Query time: 1 msec
2774 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2775 ;; WHEN: Sun May 10 21:23:11 2009
2776 ;; MSG SIZE rcvd: 209
2779 <p>Lo strumento piu' esaustivo e' <tt class=
2780 "docutils literal"><span class="pre">dig</span></tt>,
2781 installabile con il pacchetto <tt class=
2782 "docutils literal"><span class="pre">dnsutils</span></tt>
2786 <div class="section" id="dig">
2787 <h2><a class="toc-backref" href=
2788 "#id55">4.6 Dig</a></h2>
2790 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2791 "docutils literal"><span class="pre">dig</span></tt> per
2792 l'interrogazione dei DNS Server:</p>
2793 <pre class="literal-block">
2796 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2797 ;; global options: +cmd
2799 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2800 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2802 ;; QUESTION SECTION:
2803 ;www.google.it. IN A
2806 www.google.it. 250683 IN CNAME www.google.com.
2807 www.google.com. 334819 IN CNAME www.l.google.com.
2808 www.l.google.com. 186 IN A 74.125.43.103
2809 www.l.google.com. 186 IN A 74.125.43.104
2810 www.l.google.com. 186 IN A 74.125.43.147
2811 www.l.google.com. 186 IN A 74.125.43.99
2813 ;; AUTHORITY SECTION:
2814 l.google.com. 80856 IN NS f.l.google.com.
2815 l.google.com. 80856 IN NS d.l.google.com.
2816 l.google.com. 80856 IN NS b.l.google.com.
2817 l.google.com. 80856 IN NS c.l.google.com.
2818 l.google.com. 80856 IN NS a.l.google.com.
2819 l.google.com. 80856 IN NS e.l.google.com.
2820 l.google.com. 80856 IN NS g.l.google.com.
2822 ;; Query time: 1 msec
2823 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2824 ;; WHEN: Sun May 10 21:34:47 2009
2825 ;; MSG SIZE rcvd: 255
2828 <dl class="docutils">
2831 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
2832 <em>root server</em> utilizzati. I root server sono i
2833 server che mantengono le informazioni sui domini di primo
2834 livello (TLD) e sono quindi il punto di partenza per
2835 scorrere nella directory dei DNS per recuperare le
2836 informazioni (tipicamente un campo <tt class=
2837 "docutils literal"><span class="pre">A</span></tt> per un
2838 indirizzo IP) che ci servono per raggiungere un certo
2847 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2848 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2849 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2850 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2851 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2852 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2853 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2854 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2855 J.ROOT-SERVERS.NET. . 192032 IN NS
2856 D.ROOT-SERVERS.NET.</p>
2861 <dl class="docutils">
2862 <dt>dig @nome_dns</dt>
2864 <dd>Permette di fare una query ad un server dns
2865 particolare. Es: <tt class=
2866 "docutils literal"><span class="pre">dig</span>
2867 <span class="pre">@151.99.25.1</span> <span class=
2868 "pre">www.google.it</span></tt></dd>
2870 <dt>dig MX www.google.it</dt>
2872 <dd>Chiede un campo in particolare, in questo caso il
2875 <dt>dig ANY www.google.it</dt>
2877 <dd>Chiede tutti i campi, non solo i campi
2880 <dt>dig -x 74.125.43.104</dt>
2882 <dd>Effettua una richiesta inversa: dall'IP al PTR
2887 <div class="section" id="resolv-conf">
2888 <h2><a class="toc-backref" href=
2889 "#id56">4.7 resolv.conf</a></h2>
2891 <p>Il file <tt class="docutils literal"><span class=
2892 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2893 sul dns usato dal sistema, in genere anche altre
2894 applicazioni che devono effettuare query DNS leggono
2895 resolv.conf per conoscere l'ubicazione del DNS.</p>
2897 <p>/etc/resolv.conf:</p>
2901 <li><tt class="docutils literal"><span class=
2902 "pre">nameserver</span></tt>: indica il nameserver da
2903 utilizzare, indicato con l'indirizzo IP.</li>
2905 <li><tt class="docutils literal"><span class=
2906 "pre">domain</span></tt>: indica il nome di dominio
2907 della rete attuale, vedi voce successiva.</li>
2909 <li><tt class="docutils literal"><span class=
2910 "pre">search</span></tt>: nome di dominio usato dalla
2911 rete sul quale cercare gli hosts. Ad esempio se
2912 impostato su <tt class="docutils literal"><span class=
2913 "pre">piffa.net</span></tt> pingando l' host <tt class=
2914 "docutils literal"><span class="pre">bender</span></tt>
2915 viene automaticamente fatto un tentativo di ricerca per
2916 <tt class="docutils literal"><span class=
2917 "pre">bender.piffa.net</span></tt>.</li>
2921 <p>Si veda anche la pagina man di resolv.conf.</p>
2923 <p>Attenzione: se si usa un client DHCP o simile questo
2924 file potra' essere riscritto automaticamente in base a
2925 quanto ottenuto dal DHCP. Si veda la documentazione del
2926 pacchetto <tt class="docutils literal"><span class=
2927 "pre">resolvconf</span></tt>.</p>
2930 <div class="section" id="etc-hosts">
2931 <h2><a class="toc-backref" href=
2932 "#id57">4.8 /etc/hosts</a></h2>
2934 <p>Tabella statica per l'associazione tra IP e nomi di
2936 <pre class="literal-block">
2941 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2942 daniela daniela.piffa.net 10.10.208.254 mirror
2943 mirror.piffa.net 91.191.138.15 thepiratebay.org
2944 192.168.0.11 chrome chrome.mydomain.com
2947 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2948 stringhe di testo (anche piu' di una es: <tt class=
2949 "docutils literal"><span class="pre">mirror</span></tt> e
2950 <tt class="docutils literal"><span class=
2951 "pre">mirror.piffa.net</span></tt>), un record per
2954 <p>Il problema e' la gestione di questo file: quando gli
2955 host cambiano IP si devono aggiornare i records, e poi c'e'
2956 il problema di distribuire questo file tra i vari hosts
2957 della propria LAN. Un metodo semplice per distribuire
2958 questo file e' utilizzare <tt class=
2959 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
2960 questo infatti legge e onora il file <tt class=
2961 "docutils literal"><span class="pre">hosts</span></tt>
2962 locale e lo <em>distribuisce</em> ai clients.</p>
2964 <p>Modificare (riconducendola a un IP interno, cosi'
2965 annullandola) la risoluzione di un nome di dominio e' un
2966 modo drastico e funzionale per <em>annullarlo</em>
2967 rendendolo indisponibile alla propria rete locale, ad
2968 esempio aggiungere al file <tt class=
2969 "docutils literal"><span class=
2970 "pre">/etc/hosts</span></tt>:</p>
2971 <pre class="literal-block">
2972 127.0.0.1 www.facebook.com
2975 <p>Impedira' agli utenti della LAN di raggiungere
2976 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
2979 <div class="section" id="hostname">
2980 <h2><a class="toc-backref" href=
2981 "#id58">4.9 Hostname</a></h2>
2983 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
2984 (e modificabile) con il comando <tt class=
2985 "docutils literal"><span class=
2986 "pre">hostname</span></tt>.</p>
2988 <p>Per modificare in modo permanente il nome del computer
2989 si modifichi il contenuto del file <tt class=
2990 "docutils literal"><span class=
2991 "pre">/etc/hostname</span></tt>.</p>
2993 <p>Tipicamente si vuole mantenere una correlazione tra il
2994 nome dell' host, o meglio la stringa con cui il server si
2995 qualifica all'esterno, e il <em>PTR</em> dell'IP. Nel caso
2996 di <em>servizi virtuali</em> ci sara' un <em>nome
2997 server</em> principale associato al <em>PTR</em> condiviso.
2998 Non e' automatico che un servizio, ad esempio un server di
2999 posta, si qualifichi leggendo il contenuto di questo file e
3000 magari aggiungendo come suffisso il dominio di cui fa parte
3001 l' host: a volte questo parametro puo' essere specificato
3002 nel file di configurazione del servizio:</p>
3003 <pre class="literal-block">
3004 * Squid: ``visible_hostname``
3006 * Postfix: ``myhostname``
3009 <p>Si faccia attenzione a non aver un hostname puramente
3010 numerico: ad es. <tt class="docutils literal"><span class=
3011 "pre">161</span></tt>. E' opportuno che il nome sia
3012 comunque un alfanumerico: <tt class=
3013 "docutils literal"><span class="pre">host-161</span></tt> o
3018 <div class="section" id="dnsmasq">
3019 <h1><a class="toc-backref" href=
3020 "#id59">5 DNSmasq</a></h1>
3022 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3023 forwarder e un server DHCP caratterizzato dalla facilita' di
3024 configurazione, leggerezza e dalla possibilita' di modificare
3025 rapidamente i record DNS serviti alla rete. Puo' essere anche
3026 utilizzato come <cite>server per il boot da rete
3027 <http://www.debian-administration.org/articles/478>_</cite>
3030 <p>Dnsmasq e' un interessante alternativa all'uso del server
3031 DNS Bind in modalita' cache-only (non autoritativo)
3032 accompagnato dal server DHCPd. I vantaggi sono:</p>
3035 <li>Leggerezza: puo' essere fatto girare su una macchina
3036 relativamente debole in caso di bisogno.</li>
3038 <li>Rapidita' di configurazione (in particolare per servire
3039 dei record A / MX alla rete, modificando al volo i valori
3040 originali ospitati sul server DNS pubblico).</li>
3042 <li>Ben integrato con connessioni PPP : e' ingrado di
3043 rilevare i cambiamenti dei dns suggeriti e impostarli come
3044 forwarders (utile se dovete rendere disponibile rapidamente
3045 una connessione a internet a una rete in difficolta').</li>
3048 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3049 particolare quando si deve intervenire in una rete
3050 pre-esistente in cui il server principale e' in crisi: si
3051 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3052 <em>mascherare</em> i servizi al momento non disponibili.
3053 Molto utile per scopi didattici, sopratutto per testare
3054 server SMTP impostando al volo i campi MX per nomi di dominio
3057 <div class="section" id="configurazione">
3058 <h2><a class="toc-backref" href=
3059 "#id60">5.1 Configurazione</a></h2>
3061 <p>Vediamo alcune direttive di basi del file di
3062 configurazione <tt class="docutils literal"><span class=
3063 "pre">/etc/dnsmasq.conf</span></tt> utili per la
3064 configurazione sia del DNS cache che per il DHCP
3067 <dl class="docutils">
3068 <dt>domain-needed</dt>
3070 <dd>Non inoltrare query ai server DNS esterni per nomi
3071 semplici (es andrea, portatile, pippo) che verranno
3072 risolti solo in locale o causeranno direttamente una
3073 risposta <em>not found</em> .</dd>
3077 <dd>Simile alla voce precedente ma per i reverse
3082 <dd>Nome di dominio della rete da passare ai client.</dd>
3084 <dt>expand_hosts</dt>
3086 <dd>Aggiunge il <tt class="docutils literal"><span class=
3087 "pre">nome</span> <span class="pre">host</span></tt> (
3088 <tt class="docutils literal"><span class=
3089 "pre">/etc/hostname</span></tt>) dei client al nome di
3090 dominio per qualificarli in rete, senza bisogno di dover
3091 comporre a un elenco statico di record nel file
3092 <tt class="docutils literal"><span class=
3093 "pre">/etc/hosts</span></tt> o nello stesso file di
3094 configurazione di dnsmasq. Es: se un vostro client si
3095 chiama <tt class="docutils literal"><span class=
3096 "pre">chrome</span></tt> e il vostro dominio <tt class=
3097 "docutils literal"><span class=
3098 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
3099 il campo <em>A</em> per il dominio <tt class=
3100 "docutils literal"><span class=
3101 "pre">chrome.piffa.net</span></tt> diretto all'ip che
3102 verra' assegnato al client.</dd>
3106 <div class="section" id="dhcp">
3107 <h2><a class="toc-backref" href=
3108 "#id61">5.2 DHCP</a></h2>
3110 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3111 al file di configurazione il <em>range</em> degli IP che si
3112 vuole assegnare ai client con il <em>lease time</em> (tempo
3113 di rilascio: quanto a lungo saranno validi gli IP
3114 assegnati) espresso in ore.</p>
3116 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3117 presente <strong>un solo server DHCP</strong>, o per meglio
3118 dire qualunque server DHCP ascolta sul broadcast <tt class=
3119 "docutils literal"><span class=
3120 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
3121 un pacchetto di richiesta DHCP. Quindi non fate partire
3122 inavvertitamente un server DHCP in una rete gia' servita e
3123 <strong>non vi azzardate ad andare in giro con un portatile
3124 con un server DHCP attivo</strong> nelle reti altrui.
3125 Questo vale anche per i laboratori di informatica dei corsi
3126 di reti: non fate partire il vostro server DHCP se siete
3127 collegati alla rete interna!</p>
3129 <p>/etc/dnsmasq.conf (riga 118):</p>
3130 <pre class="literal-block">
3131 dhcp-range=192.168.0.20,192.168.0.50,24h
3135 <div class="section" id="dns-cache">
3136 <h2><a class="toc-backref" href=
3137 "#id62">5.3 DNS cache</a></h2>
3139 <p>Aggiungere al file <tt class=
3140 "docutils literal"><span class=
3141 "pre">/etc/resolv.conf</span></tt> il nameserver localhost
3142 in cima alla lista dei <em>nameserver</em> disponibili.
3143 Dnsmasq usera' la propria cache e in caso non abbia
3144 disponibile il <em>record DNS</em> richiesto fara' partire
3145 una query al primo DNS:</p>
3146 <pre class="literal-block">
3147 nameserver 127.0.0.1
3150 <p>Questo pero' potrebbe essere problematico se un altro
3151 servizio, ad esempio il DHCP client, riscrive il contenuto
3152 del file <tt class="docutils literal"><span class=
3153 "pre">/etc/resolv.conf</span></tt>. Per superare il
3154 problema si aggiunga (riga 20) al file di configurazione
3155 <tt class="docutils literal"><span class=
3156 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
3157 <pre class="literal-block">
3158 prepend domain-name-servers 127.0.0.1;
3161 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3162 (per la connessione ADSL) a intervenire sul file <tt class=
3163 "docutils literal"><span class=
3164 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
3165 <tt class="docutils literal"><span class=
3166 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3167 <tt class="docutils literal"><span class=
3168 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
3169 internet e' ADSL raramente dovreste aver bisogno di
3170 cambiare i DNS una volta impostati (a meno che non usiate
3175 <div class="section" id="bind-dns-autoritativo">
3176 <h1><a class="toc-backref" href=
3177 "#id63">6 Bind : DNS Autoritativo</a></h1>
3179 <p>Le soluzioni viste possono bastare per la rete locale o
3180 per fare delle prove, ma prima o poi verra' il momento in cui
3181 si e' chiamati a gestire dei domini su internet: lo standard
3182 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3185 <p>Installare i pacchetti:</p>
3186 <pre class="literal-block">
3190 <div class="section" id="id4">
3191 <h2><a class="toc-backref" href=
3192 "#id64">6.1 DNS cache</a></h2>
3194 <p>Bind appena installato funzionera' come DNS cache: si
3195 faccia un test con un <tt class=
3196 "docutils literal"><span class="pre">dig</span>
3197 <span class="pre">@localhost</span></tt> . Bind a
3198 differenza di Dnsmasq e' autonomo: non ha bisogno di
3199 forwardare (inoltrare) le query a un DNS esterno: queste
3200 verranno risolte direttamente da Bind partendo dai <em>DNS
3201 root servers</em>.</p>
3203 <p>E' comunque possibile impostare dei DNS forwarders,
3204 tipicamente i DNS server forniti dal proprio provider, per
3205 velocizzare le query:</p>
3207 <p>/etc/bind/named.conf.options (riga 13):</p>
3208 <pre class="literal-block">
3214 <p>Nel caso si voglia usare Bind solo come server DNS cache
3215 per la propria LAN senza ospitare delle zone DNS pubbliche
3216 sara' il caso di limitare gli accessi al server alla sola
3219 <p>/etc/bind/named.conf.options (riga 19):</p>
3220 <pre class="literal-block">
3221 // Se il proprio server ha IP 10.10.208.254
3222 // sulla rete LAN privata:
3223 listen-on { 10.10.208.254; }
3226 <p>E non si lasci il server in ascolto su uno degli
3227 eventuali indirizzi IP pubblici.</p>
3229 <p>Se questo non fosse possibile si puo' sempre lavorare su
3230 una <em>acl</em>:</p>
3232 <p>/etc/bind/named.conf</p>
3233 <pre class="literal-block">
3235 10.10.208.0/24 ; 127.0.0.0/8 ;
3239 <p>Per poi aggiungere all'interno della stanza options la
3240 direttiva che abilita' l'entita' <tt class=
3241 "docutils literal"><span class=
3242 "pre">localnet</span></tt>:</p>
3244 <p>/etc/bind/named.conf.options</p>
3245 <pre class="literal-block">
3246 allow-query {"localnet" ;} ;
3251 <div class="section" id="samba">
3252 <h1><a class="toc-backref" href=
3253 "#id65">7 Samba</a></h1>
3255 <p>Samba e' un progetto libero che fornisce servizi di
3256 condivisione di file e stampanti a client SMB/CIFS.</p>
3258 <p>Samba e' liberamente disponibile, al contrario di altre
3259 implementazioni SMB/CIFS, e permette di ottenere
3260 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
3262 <p>Samba e' un software che puo' girare su piattaforme che
3263 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
3264 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
3265 il protocollo TCP/IP utilizzando i servizi offerti sul server
3266 ospite. Quando correttamente configurato, permette di
3267 interagire con client o server Microsoft Windows come se
3268 fosse un file e print server Microsoft agendo da Primary
3269 Domain Controller (PDC) o come Backup Domain Controller, puo'
3270 inoltre prendere parte ad un dominio Active Directory.</p>
3272 <div class="section" id="pacchetti">
3273 <h2><a class="toc-backref" href=
3274 "#id66">7.1 Pacchetti</a></h2>
3276 <p>Pacchetti da installare per utilizzare Samba in
3277 modalita' client <a class="footnote-reference" href="#id6"
3278 id="id5" name="id5">[2]</a></p>
3279 <pre class="literal-block">
3283 <p>Pacchetti da installare per utilizzare Samba in
3284 modalita' server:</p>
3285 <pre class="literal-block">
3286 samba smbfs smbclient
3289 <table class="docutils footnote" frame="void" id="id6"
3296 <tbody valign="top">
3298 <td class="label"><a class="fn-backref" href=
3301 <td>Anche se nato per i sistemi Windows, Samba puo'
3302 essere usato anche per montare cartelle sotto
3303 GNU/Linux come alternativa a NFS. Per la condivisione
3304 di stampanti sarebbe invece opportuno intervenire
3305 direttamente su <tt class=
3306 "docutils literal"><span class=
3307 "pre">CUPS</span></tt>.</td>
3312 <p>Durante la prima installazione viene chiesto il nome del
3313 gruppo di appartenenza, il default per Windows e'
3314 <tt class="docutils literal"><span class=
3315 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3316 <tt class="docutils literal"><span class=
3317 "pre">208</span></tt> .</p>
3319 <p>Per riconfigurare Samba si usi il comando:</p>
3320 <pre class="literal-block">
3321 dpkg-reconfigure samba-common
3325 <div class="section" id="passwords-e-autenticazione">
3326 <h2><a class="toc-backref" href=
3327 "#id67">7.2 Passwords e
3328 autenticazione</a></h2>
3330 <p>Per poter configurare Samba in modo che usi un sistema
3331 di negoziazione degli accessi alle cartelle condivise
3332 basato su accoppiate <em>nome utente / password</em>
3333 bisogna distinguere tra 3 livelli di password (e
3334 generalmente volete usare <em>sempre la stessa
3335 password</em> per ognuno di questi) e delle differenze tra
3336 le modalita' di <em>autenticazione</em> (e quindi anche di
3337 criptaggio delle passwords) usate da sistemi GNU/Linux e
3340 <dl class="docutils">
3341 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3343 <dd>E' la password dell'<em>utente di sistema</em> che
3344 viene usata sul sistema operativo su cui gira il software
3345 Samba. E' importante tenere conto anche delle
3346 <em>user-id</em> e <em>group-id</em> degli utenti che
3347 dovranno fisicamente scrivere sui file system. Se un
3348 utente non puo' scrivere in una certa posizione del file
3349 system (ad esempio nella cartella <tt class=
3350 "docutils literal"><span class=
3351 "pre">/mnt/condivisione</span></tt> che sara' stata
3352 necessariamente creata inizialmente dall'utente
3353 <tt class="docutils literal"><span class=
3354 "pre">root</span></tt>) per mancanza dei privilegi di
3355 scrittura allora neanche Samba potra' farlo nel momento
3356 in mette a disposizione la risorsa all'utente. Se si
3357 montano file-system dedicati per le condivisioni
3358 controllare i permessi e proprieta' dei <em>punti di
3359 mount*</em>. Queste passwords sono salvate nel solito
3360 file /etc/shadow (richiamato da /etc/passwd).</dd>
3362 <dt>2 Password per l'applicativo Samba</dt>
3364 <dd>Samba deve essere compatibile con Windows e quindi
3365 utilizzare un sistema di criptazione delle password
3366 diverso da /etc/shadow . Le password per Samba possono
3367 essere gestite ad esempio col comando <tt class=
3368 "docutils literal"><span class=
3369 "pre">smbpasswd</span></tt> e vengono generalmente
3370 salvate all'interno di <tt class=
3371 "docutils literal"><span class=
3372 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3374 <dt>3 Password per Windows.</dt>
3376 <dd>Gli utenti Windows effettuano il log-in alla partenza
3377 della sessione di Windows. Se si avra' l'accortezza di
3378 usare sempre la <em>stessa password</em> data
3379 precedentemente anche a Windows (o viceversa impostare la
3380 password per GNU/Linux / Samba uguale a quella di
3381 Windows) l'utente potra' accedere automaticamente alle
3382 condivisioni a lui disponibili.</dd>
3386 <div class="section" id="creazione-utenti">
3387 <h2><a class="toc-backref" href=
3388 "#id68">7.3 Creazione Utenti</a></h2>
3390 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3391 attenzione a <em>non dargli una shell di sistema</em>. Gli
3392 utenti Windows che accedono al server solo per le
3393 condivisioni non hanno bisogno di poter eseguire comandi
3396 <p>Creazione di un utente denominato sambo:</p>
3397 <pre class="literal-block">
3398 adduser --shell /bin/false sambo
3401 <p>Nel file <tt class="docutils literal"><span class=
3402 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3403 <pre class="literal-block">
3404 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3407 <p>Aggiunta dell'utente al database delle password per
3408 Samba e generazione della sua password:</p>
3409 <pre class="literal-block">
3413 <p>Se successivamente si vorra' modificare la password di
3414 un utente gia' esistente si usi:</p>
3415 <pre class="literal-block">
3419 <p>La password sotto Windows verra' modificata sul sistema
3423 <div class="section" id="creare-la-condivisione">
3424 <h2><a class="toc-backref" href=
3425 "#id69">7.4 Creare la
3426 condivisione</a></h2>
3428 <p>La condivisione altro non e' che una cartella sul server
3429 che viene resa disponibile ai client negoziando l'accesso
3430 in base a una autenticazione basata su <em>user-name /
3431 password</em>. E' per altro possibile permettere l'accesso
3432 a una risorsa a chiunque indiscriminatamente (a tutti i
3433 <tt class="docutils literal"><span class=
3434 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3435 punto di vista della sicurezza. Si decida se la cartella
3436 condivisa debba risiedere nella <em>home</em> di un utente
3437 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3438 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3439 Nel secondo caso si potranno gestire gli accessi sotto
3440 GNU/Linux tramite i gruppi.</p>
3442 <p>Creazione della risorsa sambo_share nella home
3443 dell'utente sambo:</p>
3444 <pre class="literal-block">
3445 # mkdir /home/sambo/sambo_share
3446 # chown sambo:sambo /home/sambo/sambo_share/
3449 <div class="section" id=
3450 "sicurezza-permessi-di-esecuzione-sul-server">
3451 <h3><a class="toc-backref" href=
3452 "#id70">7.4.1 Sicurezza: permessi di
3453 esecuzione sul server</a></h3>
3455 <p>Bisognerebbe notare sul server i permessi di
3456 esecuzione del file-system che ospita la cartella da
3457 condividere. Se i file che saranno contenuti nella
3458 condivisione saranno da usarsi sotto Windows non c'e'
3459 motivo che questi siano eseguibili sotto GNU/Linux. Si
3460 potrebbe avere quindi, ipotizzando una condivisione in
3461 <tt class="docutils literal"><span class=
3462 "pre">/mnt/share</span></tt> che risieda su di un file
3463 system dedicato:</p>
3465 <p><tt class="docutils literal"><span class=
3466 "pre">/etc/fstab</span></tt></p>
3469 /dev/hda10 /mnt/share ext3 rw,
3470 <strong>nosuid,noexec</strong> 0 3
3473 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3474 possibilita' di eseguire programmi con credenziali
3479 <div class="section" id=
3480 "configurazione-dell-applicativo-samba-vero-e-proprio">
3481 <h2><a class="toc-backref" href=
3482 "#id71">7.5 Configurazione
3483 dell'applicativo Samba vero e proprio.</a></h2>
3485 <p>Avendo preparato gli utenti (ancora una volta: non si
3486 dia una shell completa a un utente che serve solo per Samba
3487 o la posta elettronica) e la cartella sul file system si
3488 puo' procedere a configurare la condivisione su Samba.</p>
3490 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3491 vim si usi 235gg ):</p>
3492 <pre class="literal-block">
3494 # Percorso della cartella condivisa
3495 path = /home/sambo/sambo_share
3496 # Se gli utenti possono scrivere / modificare file
3498 # Negoziazione degli accessi su base utenti / passwords
3501 # #######################################
3502 # Altri parametri opzionali di interesse
3503 # Se posso vedere la condivisione da esplora risorse
3504 # anche se non ho i privilegi per accedervi.
3506 # Commento indicativo della risorsa
3507 comment = Condivisione per Sambo
3510 <p>Dopo aver salvato il file si puo' fare un primo
3511 controllo tramite l'utility <tt class=
3512 "docutils literal"><span class="pre">testparm</span></tt> ,
3513 che controlla la sintassi del file di configurazione di
3514 Samba. Se questo non rileva problemi si puo' procedere a un
3515 <tt class="docutils literal"><span class="pre">#</span>
3516 <span class="pre">/etc/init.d/samba</span> <span class=
3517 "pre">restart</span></tt> .</p>
3520 <div class="section" id="testare-il-servizio">
3521 <h2><a class="toc-backref" href=
3522 "#id72">7.6 Testare il Servizio</a></h2>
3524 <p>Come testare il servizio</p>
3527 <pre class="literal-block">
3528 smbclient -U sambo -L localhost
3531 <p>Questo comando permette di esplorare la risorsa
3532 qualificandosi come utente, in questo modo potete testare
3533 il corretto funzionamento dell'autenticazione. Si provi
3534 inizialmente a sbagliare la password deliberatamente, poi a
3535 inserirla correttamente: dovrebbero essere visibili le
3536 risorse disponibili al solo utente sambo: la suo /home e la
3537 cartella samba_share:</p>
3538 <pre class="literal-block">
3539 Sharename Type Comment
3540 --------- ---- -------
3541 sambo_share Disk Condivisione per Sambo
3542 print$ Disk Printer Drivers
3543 IPC$ IPC IPC Service (base server)
3544 sambo Disk Home Directories
3547 <p>In particolare l'ultima voce relativa alla home
3548 directory dell'utente dovrebbe essere visibile solo agli
3549 utenti autenticati.</p>
3551 <p>In alternativa e' possibile montare realmente la
3552 condivisone anche su GNU/Linux tramite un client per samba
3553 e testarne il corretto funzionamento:</p>
3554 <pre class="literal-block">
3555 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3560 <div class="section" id="server-di-posta-postfix">
3561 <h1><a class="toc-backref" href=
3562 "#id73">8 Server di posta: Postfix</a></h1>
3564 <p>Il server di posta che prenderemo in considerazione e'
3565 Postfix, a seguire un estratto di un file do configurazione
3566 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
3567 nelle <tt class="docutils literal"><span class=
3568 "pre">/home</span></tt> degli utenti per la consegna della
3571 <p><tt class="docutils literal"><span class=
3572 "pre">/etc/postfix/main.cf</span></tt>:</p>
3573 <pre class="literal-block">
3574 # ...segue dalla riga ~30
3575 myhostname = 162.piffa.net
3576 alias_maps = hash:/etc/aliases
3577 alias_database = hash:/etc/aliases
3578 myorigin = 162.piffa.net
3579 mydestination = 162.piffa.net, localhost
3580 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3581 # dovrete usare un realy host per l'invio della posta
3582 relayhost = smtp.piffa.net
3583 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3585 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3586 # in una Maildir invece che la Mailbox in /var/mail/utente
3587 # si disabiliti procmail
3588 #mailbox_command = procmail -a "$EXTENSION"
3590 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3591 # nella home dell'utente:
3592 home_mailbox = Maildir/
3593 mailbox_size_limit = 0
3594 recipient_delimiter = +
3595 inet_interfaces = all
3598 <div class="section" id="imap-e-pop">
3599 <h2><a class="toc-backref" href=
3600 "#id74">8.1 Imap e pop</a></h2>
3602 <p>Postfix e' un server SMTP, di conseguenza se volete che
3603 i vostri utenti possano <em>scaricare</em> in locale la
3604 posta generalmente volete mettere a loro disposizione un
3605 server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
3608 <dl class="docutils">
3609 <dt>Pacchetti da installare</dt>
3611 <dd>courier-imap courier-pop</dd>
3614 <p>i noti che IMAP necessita delle Maildir, non funziona
3615 con le Mailbox in <tt class="docutils literal"><span class=
3616 "pre">/var/mail/</span></tt> .</p>
3618 <div class="section" id="web-client">
3619 <h3><a class="toc-backref" href=
3620 "#id75">8.1.1 Web client</a></h3>
3622 <p>Per mettere a disposizione degli utenti un client web
3623 per gestire la propria posta si installi il pacchetto:
3624 <tt class="docutils literal"><span class=
3625 "pre">squirrelmail</span></tt> . Ci sono tanti altri
3626 client web disponibili: questo e' particolarmente
3627 semplice. Naturalmente dovrete aver installato:
3628 <tt class="docutils literal"><span class=
3629 "pre">php5</span> <span class="pre">apache2</span></tt>
3632 <p>L'interfaccia dovrebbe essere disponibile all'url:
3633 <tt class="docutils literal"><span class=
3634 "pre">http://localhost/squirrelmail</span></tt> . Se
3635 cosi' non fosse assicuratevi che Apache abbia incluso il
3636 file di configurazione di squirrelmail:</p>
3637 <pre class="literal-block">
3638 cd /etc/apache2/conf.d/
3639 ln -s /etc/squirrelmail/apache.conf ./
3645 <div class="section" id="firewall">
3646 <h1><a class="toc-backref" href=
3647 "#id76">9 Firewall</a></h1>
3649 <p>In Informatica, nell'ambito delle reti di computer, un
3650 firewall (termine inglese dal significato originario di
3651 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3652 italiano anche parafuoco o parafiamma) e' un componente
3653 passivo di difesa perimetrale che puo'ò anche svolgere
3654 funzioni di collegamento tra due o piu' tronconi di rete.
3655 Usualmente la rete viene divisa in due sotto reti: una, detta
3656 esterna, comprende l'intera Internet mentre l'altra interna,
3657 detta LAN (Local Area Network), comprende una sezione piu' o
3658 meno grande di un insieme di computer locali. In alcuni casi
3659 e' possibile che si crei l'esigenza di creare una terza sotto
3660 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
3661 sistemi che devono essere isolati dalla rete interna ma
3662 devono comunque essere protetti dal firewall.</p>
3664 <p>Una prima definizione chiusa di firewall è la
3667 <p>Apparato di rete hardware o software che filtra tutti i
3668 pacchetti entranti ed uscenti, da e verso una rete o un
3669 computer, applicando regole che contribuiscono alla sicurezza
3672 <p>In realta'à un firewall puo'ò essere realizzato con
3673 un normale computer (con almeno due schede di rete e software
3674 apposito), puo'ò essere una funzione inclusa in un router o
3675 puo'ò essere un apparato specializzato. Esistono inoltre i
3676 cosiddetti "firewall personali", che sono programmi
3677 installati sui normali calcolatori, che filtrano solamente i
3678 pacchetti che entrano ed escono da quel calcolatore; in tal
3679 caso viene utilizzata una sola scheda di rete.</p>
3681 <p>La funzionalita'à principale in sostanza è quella
3682 di creare un filtro sulle connessioni entranti ed uscenti, in
3683 questo modo il dispositivo innalza il livello di sicurezza
3684 della rete e permette sia agli utenti interni che a quelli
3685 esterni di operare nel massimo della sicurezza. Il firewall
3686 agisce sui pacchetti in transito da e per la zona interna
3687 potendo eseguire su di essi operazioni di: controllo modifica
3690 <p>Questo grazie alla sua capacita'Ã di "aprire" il
3691 pacchetto IP per leggere le informazioni presenti sul suo
3692 header, e in alcuni casi anche di effettuare verifiche sul
3693 contenuto del pacchetto.</p>
3695 <div class="section" id="links">
3696 <h2><a class="toc-backref" href=
3697 "#id77">9.1 Links</a></h2>
3700 <li><a class="reference external" href=
3701 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
3703 <li><a class="reference external" href=
3704 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
3705 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
3709 <div class="section" id="ipfilter">
3710 <h2><a class="toc-backref" href=
3711 "#id78">9.2 Ipfilter</a></h2>
3713 <p>Link: <a class="reference external" href=
3714 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
3715 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
3717 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
3718 po' del 3) e su cosa <em>non</em> lavora (livello 4).
3719 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
3720 etc) e del livello 1 (MAC source address). Iptables
3721 comunque permette di fare il <em>connection-tracking</em>,
3722 mediante il quale possiamo implementare il Network Address
3725 <p>Netfilter non ricostruisce il flusso di dati tra
3726 pacchetti, non puo' quindi rilevare la presenza di virus o
3727 simili che si trasmettono su pacchetti separati:
3728 ricomporre, analizzare e tornare a scomporre i frammenti
3729 richiederebbe troppa RAM e risorse di sistema, con il
3730 conseguente rischio di saturare il firewall fino
3731 all'abbandono dei nuovi pacchetti in transito. Ci sono
3732 altri software piu' adatti a questi compiti, ad esempio un
3733 proxy HTTP come Squid che e' appunto una applicazione di
3734 quarto livello, progettata e strutturata per analizzare e
3735 modificare i flussi di dati (il <em>contenuto</em> dei
3736 pacchetti, non le sole <em>intestazioni</em>) facendo
3737 abbondate uso delle risorse RAM e di calcolo del sistema.
3738 Non a caso su macchine embedded dalle prestazioni molto
3739 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
3740 massimo le risorse di sistema per gestire il traffico di
3741 una rete 10/100, mentre il lavoro tipico svolto da
3742 netfilter e' quasi irrilevante.</p>
3745 <div class="section" id="progettazione-di-un-firewall">
3746 <h2><a class="toc-backref" href=
3747 "#id79">9.3 Progettazione di un
3750 <p>Per implementare un firewall bisogna decidere un aio di
3751 cose: la collocazione e l'approccio (inclusivo o esclusivo)
3752 al filtraggio, il tipo di hardware.</p>
3754 <div class="section" id="collocazione">
3755 <h3><a class="toc-backref" href=
3756 "#id80">9.3.1 Collocazione</a></h3>
3758 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
3759 della rete, decidere se diversi reparti di una azienda si
3760 possano vedere tra loro e in che misura.</p>
3762 <p>Collocazione:</p>
3765 <ol class="arabic simple">
3768 <li>tra router e servers / LAN</li>
3770 <li>Unico server / router / firewall e connessi
3771 rischi. considerare l'acquisto di un router hardware
3776 <dl class="docutils">
3777 <dt>Layeed security:</dt>
3779 <dd>Implementare piu' device / software sui diversi
3780 livelli: <a class="reference external" href=
3781 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
3782 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
3786 <div class="section" id="policy-di-default">
3787 <h3><a class="toc-backref" href=
3788 "#id81">9.3.2 Policy di default</a></h3>
3790 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
3794 <div class="section" id="hardware">
3795 <h3><a class="toc-backref" href=
3796 "#id82">9.3.3 Hardware</a></h3>
3798 <p>Sostanzialmente potremmo distinguere due tipologie di
3801 <dl class="docutils">
3802 <dt>Network appliance dedicata::</dt>
3804 <dd>Un dispositivo hardware dedicato alla funzione di
3805 Firewall, ad es un Cisco / Fortigate. Si noti che molti
3806 firewall economici altro non sono che Linux box molto
3809 <dt>Server / Personal computer:</dt>
3811 <dd>Un server sul quale viene fatto girare Netfilter ad
3812 uso del server stesso e della rete connessa.</dd>
3815 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
3816 flessibilita', strumenti di gestione, sicurezza,
3821 <div class="section" id=
3822 "percorso-dei-pacchetti-tra-tabelle-e-catene">
3823 <h2><a class="toc-backref" href=
3824 "#id83">9.4 Percorso dei pacchetti tra
3825 tabelle e catene</a></h2>
3827 <p>link: <a class="reference external" href=
3828 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
3829 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
3832 <div class="section" id="concetti-di-base">
3833 <h2><a class="toc-backref" href=
3834 "#id84">9.5 Concetti di base</a></h2>
3836 <div class="section" id="tabelle-catene-regole">
3837 <h3><a class="toc-backref" href=
3838 "#id85">9.5.1 Tabelle, catene,
3841 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
3844 <li>filter - Regola il firewalling: quali pacchetti
3845 accettare, quali bloccare</li>
3847 <li>nat - Regola le attivita'Ã di natting</li>
3849 <li>mangle - Interviene sulla alterazione dei
3853 <p>Ogni tabella ha delle catene (chains) predefinite
3854 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
3855 aggiunte catene custom. Ogni catena è composta da un
3856 elenco di regole (rules) che identificano pacchetti di
3857 rete secondo criteri diversi (es: -p tcp --dport 80 -d
3858 10.0.0.45) Ogni regola termina con una indicazione
3859 (target) su cosa fare dei pacchetti identificati dalla
3860 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
3863 <div class="section" id="match">
3864 <h3><a class="toc-backref" href=
3865 "#id86">9.5.2 Match</a></h3>
3867 <p>I Match di una regola (rule) servono a testare un
3868 pacchetto per valutare se corrisponda a certe
3869 caratteristiche. I match di possono servire a controllare
3870 se un pacchetto e' destinato a una porta particolare o
3871 utilizza un protocollo particolare.</p>
3873 <p>Alcuni esempi:</p>
3875 <dl class="docutils">
3876 <dt>-p [!] proto</dt>
3878 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
3879 udp, gre, ah...)</dd>
3881 <dt>-s [!] address[/mask]</dt>
3883 <dd>Indirizzo IP sorgente (o network con maschera di
3886 <dt>-d [!] address[/mask]</dt>
3888 <dd>Indirizzo IP destinazione (o network)</dd>
3890 <dt>-i [!] interface[+]</dt>
3892 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
3894 <dt>-o [!] interface[+]</dt>
3896 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
3899 <table class="docutils option-list" frame="void" rules=
3901 <col class="option">
3902 <col class="description">
3904 <tbody valign="top">
3906 <td class="option-group"><kbd><span class=
3907 "option">-f</span></kbd></td>
3909 <td>Frammento di pacchetto</td>
3915 <div class="section" id="targets">
3916 <h3><a class="toc-backref" href=
3917 "#id87">9.5.3 Targets</a></h3>
3919 <p>Se un pacchetto soddisfa le condizioni del Match
3920 <em>salta</em> (jump) su uno dei target possibili, in
3921 caso contrario continua il suo percorso tra regole catene
3924 <p>Target principali:</p>
3926 <dl class="docutils">
3927 <dt><em>-j ACCEPT</em></dt>
3929 <dd>Il pacchetto matchato viene accettato e procede
3930 verso la sua destinazione. Si usa per definire il
3931 traffico permesso.</dd>
3933 <dt><em>-j DROP</em></dt>
3935 <dd>Il pacchetto viene rifiutato e scartato, senza
3936 alcuna notifica al mittente. Si usa, in alternativa a
3937 REJECT, per bloccare traffico.</dd>
3939 <dt><em>-j REJECT</em></dt>
3941 <dd>Il pacchetto viene rifiutato. Al mittente viene
3942 mandato un pacchetto (configurabile) di notifica tipo
3943 ICMP port-unreachable (--reject-with
3944 icmp-port-unreachable)</dd>
3947 <table class="docutils option-list" frame="void" rules=
3949 <col class="option">
3950 <col class="description">
3952 <tbody valign="top">
3954 <td class="option-group"><kbd><span class=
3955 "option">-t <var>LOG</var></span></kbd></td>
3957 <td>Il pacchetto viene loggato via syslog e procede
3958 l'attraversamento della catena. Opzioni:
3959 (--log-level, --log-prefix, --log-tcp-sequence,
3960 --log-tcp-options, --log-ip-options)</td>
3964 <td class="option-group"><kbd><span class=
3965 "option">-j <var>DNAT</var></span></kbd></td>
3967 <td>Viene modificato l'IP di destinazione del
3968 pacchetto. Target disponibile solo in nat /
3969 PREROUTING e nat / OUTPUT. L'opzione
3970 --to-destination IP:porta definisce il nuovo IP di
3971 destinazione. Si usa tipicamente su network
3972 firewall che nattano server di una DMZ</td>
3976 <td class="option-group"><kbd><span class=
3977 "option">-j <var>SNAT</var></span></kbd></td>
3979 <td>Viene modificato l'IP sorgente. Solo in nat /
3980 POSTROUTING. Prevede l'opzione --to-source
3981 IP:porta. Si usa per permettere l'accesso a
3982 Internet da una rete locale con IP privati.</td>
3986 <td class="option-group"><kbd><span class=
3987 "option">-j <var>MASQUERADE</var></span></kbd></td>
3989 <td>Simile a SNAT, si applica quando i pacchetti
3990 escono da interfacce con IP dinamico (dialup, adsl,
3991 dhcp...). Si usa solo in nat / POSTROUTING e
3992 prevede l'opzione --to-ports porte.</td>
3996 <td class="option-group"><kbd><span class=
3997 "option">-j <var>REDIRECT</var></span></kbd></td>
3999 <td>Redirige il pacchetto ad una porta locale.
4000 Usabile solo in nat / PREROUTING e nat / OUTPUT è
4001 previsto per fare un transparent proxy (con proxy
4002 server in esecuzione sulla macchina con
4007 <td class="option-group"><kbd><span class=
4008 "option">-j <var>RETURN</var></span></kbd></td>
4010 <td>Interrompe l'attraversamento della catena. Se
4011 questa è una secondaria, il pacchetto torna ad
4012 attraversare la catena madre da punto in cui aveva
4013 fatto il salto nella secondaria. Se il RETURN è in
4014 una delle catene di default, il pacchetto
4015 interrompe l'attraversamento e segue la policy di
4020 <td class="option-group"><kbd><span class=
4021 "option">-j <var>TOS</var></span></kbd></td>
4023 <td>Usabile solo nella tabella mangle, permette di
4024 cambiare il TOS (Type Of Service) di un pacchetto
4025 con l'opzione --set-tos. Per un elenco dei
4026 parametri disponibili: iptables -j TOS -h</td>
4030 <td class="option-group"><kbd><span class=
4031 "option">-j <var>MIRROR</var></span></kbd></td>
4033 <td>Curioso e sperimentale, questo target invia un
4034 pacchetto speculare al mittente. In pratica è come
4035 se facesse da specchio per tutti i pacchetti
4036 ricevuti. Da usare con cautela, per evitare
4037 attacchi DOS indiretti.</td>
4044 <div class="section" id="tabella-filter">
4045 <h2><a class="toc-backref" href=
4046 "#id88">9.6 Tabella Filter</a></h2>
4048 <p>E' quella implicita e predefinita (-t filter) Riguarda
4049 le attività di filtraggio del traffico. Ha 3 catene
4050 di default: INPUT - Riguarda tutti i pacchetti destinati al
4051 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
4052 i pacchetti che sono originati dal sistema e destinati ad
4053 uscire. FORWARD - Riguarda i pacchetti che attraversano il
4054 sistema, con IP sorgente e destinazione esterni.</p>
4056 <p>Esempio per permettere accesso alla porta 80 locale:
4057 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
4058 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
4061 <p>Esempio per permettere ad un pacchetto con IP sorgente
4062 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
4063 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
4067 <div class="section" id=
4068 "flush-automatico-per-macchine-remote">
4069 <h2><a class="toc-backref" href=
4070 "#id89">9.7 Flush automatico per macchine
4073 <p>Se state provando una configurazione del firewall per
4074 una macchina remota e' buona norma per evitare brutte
4075 figure attivare uno script che faccia il <em>flush</em>
4076 delle regole dopo qualche minuto. Potreste infatti
4077 inavvertitamente impostare una regola che vi impedisca di
4078 raggiungere la macchina remota, cosi' da non poter neanche
4079 eliminare quella regola e ripristinare la situazione
4082 <p><em>Veramente</em>, prima di lavorare sul firewall di
4083 una macchina remota impostate almeno un <tt class=
4084 "docutils literal"><span class="pre">at</span> <span class=
4085 "pre">now</span> <span class="pre">+5</span> <span class=
4086 "pre">min</span></tt> o con un'oretta di margine per fare
4087 il <em>flush</em> delle regole (su tutte le tabelle):</p>
4088 <pre class="literal-block">
4090 at> /sbin/iptables -F
4095 <div class="section" id="gestione-regole-rules">
4096 <h2><a class="toc-backref" href=
4097 "#id90">9.8 Gestione regole
4100 <p>Il comando iptables viene usato per ogni
4101 attivita'Ã di gestione e configurazione.</p>
4103 <p>Inserimento regole:</p>
4105 <dl class="docutils">
4106 <dt>iptables -A CATENA ...</dt>
4108 <dd>Aggiunge una regola alla fine della catena
4111 <dt>iptables -I CATENA [#] ...</dt>
4113 <dd>Inserisce alla riga # (default 1) una regola nella
4114 catena indicata</dd>
4116 <dt>iptables -N CATENA</dt>
4118 <dd>Crea una nuova catena custom</dd>
4120 <dt>iptables -P CATENA TARGET</dt>
4122 <dd>Imposta il target di default per la catena
4126 <p>Rimozione regole e azzeramenti:</p>
4128 <dl class="docutils">
4129 <dt>iptables -F [catena]</dt>
4131 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
4133 <dt>iptables -X [catena]</dt>
4135 <dd>Ripulisce tutte le catene custom (o quella
4138 <dt>iptables -Z [catena]</dt>
4140 <dd>Azzera i contatori sulle catene</dd>
4142 <dt>iptables -D catena #</dt>
4144 <dd>Cancella la regola numero # dalla catena
4148 <p>Interrogazione:</p>
4150 <dl class="docutils">
4151 <dt>iptables -L</dt>
4153 <dd>Elenca le regole esistenti</dd>
4155 <dt>iptables -L -n -v</dt>
4157 <dd>Elenca, senza risolvere gli host, in modo verboso le
4158 regole esistenti</dd>
4162 <div class="section" id="salvataggio-regole">
4163 <h2><a class="toc-backref" href=
4164 "#id91">9.9 Salvataggio regole</a></h2>
4166 <p>Il comando <tt class="docutils literal"><span class=
4167 "pre">iptables</span></tt> serve per interagire con il
4168 framework <tt class="docutils literal"><span class=
4169 "pre">Netfilter</span></tt> che gestisce il firewall di
4170 Linux al livello del kernel. Questo comporta, in modo
4171 analogo a quando avviene col comando <tt class=
4172 "docutils literal"><span class="pre">ifconfig</span></tt>,
4173 che i cambiamenti impostati siano in <em>tempo reale,
4174 RAM</em>, non persistenti nel sistema: al boot successivo
4175 del sistema tutto tornera' alle impostazioni di base (in
4176 questo caso <em>nulle</em>, con policy di default settate
4177 su <tt class="docutils literal"><span class=
4178 "pre">ACCEPT</span></tt> per tutto).</p>
4180 <p>Le varie invocazioni di iptables potrebbero essere
4181 richiamate da degli scripts dedicati, ma fortunatamente e'
4182 stata predisposta una apposita utility per gestire questi
4183 scripts in modo da avere a disposizione un <em>formato
4184 standard</em> per il salvataggio e il ripristino delle
4185 regole del firewall.</p>
4187 <p>Altro problema: decidere quando attivare / disattivare
4188 queste regole. Utilizzare i <em>runlevels</em> non e' una
4189 soluzione adeguata: le regole del firewall sono legate
4190 all'attivita' delle schede di rete (e un host con diverse
4191 schede di rete puo' attivarle a secondo delle esigenze di
4192 routing, partenza di servizi es file_sharing per un
4193 back-up...): il sistema operativo Debian permette di legare
4194 l'esecuzione di comandi alla attivazione di una device di
4195 rete (<tt class="docutils literal"><span class=
4196 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
4197 "docutils literal"><span class="pre">post-up</span></tt>,
4198 utile per devices che richiedono un certo tempo per
4199 inizializzarsi: come un tunnel o una connessione punto a
4200 punto), prima della sua attivazione (<tt class=
4201 "docutils literal"><span class="pre">pre-up</span></tt>).
4202 Allo stesso modo sono disponibili eventi analoghi per
4203 accompagnare la disattivazione dei device di rete: si veda
4204 la pagina man di <tt class="docutils literal"><span class=
4205 "pre">interfaces</span></tt>.</p>
4207 <p>Nel nostro caso avremo per una possibile scheda
4208 <tt class="docutils literal"><span class=
4209 "pre">eth0</span></tt>:</p>
4211 <p><tt class="docutils literal"><span class=
4212 "pre">/etc/network/interfaces</span></tt></p>
4213 <pre class="literal-block">
4214 iface eth1 inet static
4215 up /sbin/iptables-restore /root/firewall/basic_fw
4216 # Seguono i soliti parametri della scheda di rete
4217 address 10.10.208.21
4220 <div class="section" id="iptables-save">
4221 <h3><a class="toc-backref" href=
4222 "#id92">9.9.1 Iptables-save</a></h3>
4224 <p>Per salvare le regole di iptables attualmente presenti
4225 nel kernel si usi il comando:</p>
4226 <pre class="literal-block">
4227 # iptables-save >> /root/firewall/basic_fw
4230 <p>Il contenuto del file dovrebbe essere
4231 <em>comprensibile</em>: sostanzialmente sono regole di
4232 iptables, senza il comando iptables ripetuto, suddivisi
4233 per le varie tabelle. Potete comunque correggere
4234 eventuali parametri con un edito di testo.</p>
4236 <p>Se non avete un'idea migliore potreste voler tenere
4237 gli script dei firewall in una cartella <tt class=
4238 "docutils literal"><span class=
4239 "pre">~/firewall</span></tt> nella home directory
4240 dell'utente <tt class="docutils literal"><span class=
4241 "pre">root</span></tt>.</p>
4244 <div class="section" id="iptables-restore">
4245 <h3><a class="toc-backref" href=
4246 "#id93">9.9.2 Iptables-restore</a></h3>
4248 <p>Per ripristinare un set di regole precedentemente
4249 salvate con <tt class="docutils literal"><span class=
4250 "pre">iptables-save</span></tt> si utilizzi <tt class=
4251 "docutils literal"><span class=
4252 "pre">iptables-restore</span></tt>. Se questo deve essere
4253 fatto in modalita' <em>non interattiva</em>, ad esempio
4254 deve essere eseguito dal demone che si occupa di
4255 inizializzare le schede di rete, oppure un <em>cron</em>
4256 o altro, e' buona norma richiamare i percorsi completi
4257 sia dei comandi che dei file:</p>
4258 <pre class="literal-block">
4259 /sbin/iptables-restore /root/firewall/basic_fw
4264 <div class="section" id="esempi">
4265 <h2><a class="toc-backref" href=
4266 "#id94">9.10 Esempi</a></h2>
4268 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
4269 e' un computer con un paio di schede di rete fisiche una
4270 delle quali collegata alla rete internet l'altra a una rete
4271 privata per la LAN interna.</p>
4274 <ol class="arabic simple">
4275 <li><tt class="docutils literal"><span class=
4276 "pre">eth0</span></tt> scheda di rete principale sulla
4277 rete privata interna 192.168.0.0/24</li>
4279 <li><tt class="docutils literal"><span class=
4280 "pre">eth1</span></tt> scheda di rete secondaria per la
4281 connessione ad internet</li>
4283 <li><tt class="docutils literal"><span class=
4284 "pre">ppp0</span></tt> punto-a-punto per una
4285 connessione ad internet</li>
4289 <div class="section" id="bloccare-i-ping-dall-esterno">
4290 <h3><a class="toc-backref" href=
4291 "#id95">9.10.1 Bloccare i ping
4292 dall'esterno</a></h3>
4294 <p>Spesso gli script che attaccano
4295 <em>automaticamente</em> le varie reti provano a fare un
4296 ping per verificare quali IP sono on-line: bloccare il
4297 traffico <tt class="docutils literal"><span class=
4298 "pre">ICMP</span></tt> in ingresso puo' aiutare ad
4299 evitare parte di questi attacchi:</p>
4300 <pre class="literal-block">
4301 iptables -A INPUT -i ppp0 -p ICMP -j DROP
4305 <div class="section" id="masquerading-snat">
4306 <h3><a class="toc-backref" href=
4307 "#id96">9.10.2 Masquerading
4310 <dl class="docutils">
4311 <dt>Per attivare la network address translation (in
4312 questo caso un SNAT) per la rete locale privata
4313 sull'indirizzo ip del <em>modem</em>::</dt>
4315 <dd>iptables -A POSTROUTING -s
4316 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
4319 <p>Il <em>Masquerading</em> a differenza dello
4320 <em>SNAT</em> puro (<tt class=
4321 "docutils literal"><span class="pre">-j</span>
4322 <span class="pre">SNAT</span> <span class=
4323 "pre">--to-source</span> <span class=
4324 "pre">proprio_ip_pubblico</span> <span class=
4325 "pre">)</span> <span class="pre">legge</span>
4326 <span class="pre">l'indirizzo</span> <span class=
4327 "pre">ip</span> <span class="pre">del</span> <span class=
4328 "pre">device</span> <span class="pre">``ppp0</span></tt>.
4329 In questo modo se l'IP cambia automaticamente si aggiorna
4330 anche il source natting. Se avete un indirizzo IP statico
4331 assegnato al vostro gateway potete invece usare lo SNAT
4335 <div class="section" id="brute-force">
4336 <h3><a class="toc-backref" href=
4337 "#id97">9.10.3 Brute force</a></h3>
4339 <dl class="docutils">
4340 <dt>Per limitare attacchi di tipo brute force su
4344 <p class="first">iptables -A INPUT -i ppp0 -p tcp -m
4345 tcp --dport 22 -m state --state NEW -m recent
4346 --update --seconds 3000 --hitcount 4 --name DEFAULT
4347 --rsource -j DROP</p>
4349 <p class="last">iptables -A INPUT -i ppp0 -p tcp -m
4350 tcp --dport 22 -m state --state NEW -m recent --set
4351 --name DEFAULT --rsource</p>
4358 <div class="section" id="note">
4359 <h1><a class="toc-backref" href=
4360 "#id98">10 NOTE</a></h1>
4363 <li>controllare apache</li>
4366 <p>sintassi: in <tt class="docutils literal"><span class=
4367 "pre">monospace</span></tt> :</p>
4370 <li>nomi di files</li>