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 25 March 2009), 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;
33 background-color: #eeffcc;
36 border: 1px solid #ac9;
52 background-color: transparent;
56 text-decoration: none;
61 text-decoration: none;
62 background-color: transparent;
75 margin: 0.5em 0 1em 0;
83 background-color: transparent;
88 background-color: transparent;
92 text-decoration: none;
116 h1, h2, h3, h4, h5, h6 {
118 background-color: transparent;
125 margin-bottom: 0.5em;
126 border-bottom: 2px solid #aaa;
131 margin-bottom: 0.5em;
132 border-bottom: 1px solid #aaa;
137 margin-bottom: 0.5em;
143 margin-bottom: 0.5em;
149 margin-bottom: 0.5em;
155 margin-bottom: 0.5em;
163 margin-bottom: 1.5em;
166 div.admonition, div.note, div.tip, div.caution, div.important {
169 border-top: 1px solid #aaa;
170 border-left: 1px solid #aaa;
171 border-bottom: 2px solid #555;
172 border-right: 2px solid #555;
176 background: transparent url('../images/important.png') 10px 2px no-repeat;
180 background: transparent url('../images/caution.png') 10px 2px no-repeat;
184 background: transparent url('../images/note.png') 10px 2px no-repeat;
188 background: transparent url('../images/tip.png') 10px 2px no-repeat;
191 div.admonition-example {
192 background: transparent url('../images/tip.png') 10px 2px no-repeat;
195 div.admonition-critical-example {
196 background: transparent url('../images/important.png') 10px 2px no-repeat;
201 border-bottom: 1px solid #aaa;
207 border: 1px solid gray;
208 border-collapse: collapse;
213 table.docutils caption {
217 table.docutils td, table.docutils th {
218 padding: 0.25em 0.5em;
222 background-color: #dddddd;
230 border-top: 1px solid #aaa;
231 border-left: 1px solid #aaa;
232 border-bottom: 2px solid #555;
233 border-right: 2px solid #555;
239 border-bottom: 1px solid #aaa;
253 <div class="document" id="servizi-di-rete-passo-a-passo">
254 <h1 class="title">Servizi di rete passo a passo</h1>
256 <h2 class="subtitle" id=
257 "appunti-sulla-installazione-e-configurazione-dei-servizi">
258 Appunti sulla installazione e configurazione dei servizi</h2>
261 <table class="docutils field-list" frame="void" rules="none">
262 <col class="field-name">
263 <col class="field-body">
267 <th class="field-name">Author:</th>
269 <td class="field-body">Andrea Manni</td>
273 <th class="field-name">Copyright:</th>
275 <td class="field-body">GFDL</td>
279 <th class="field-name">Version:</th>
281 <td class="field-body">0.9</td>
287 <p>Questa guida tratta la configurazione di base dei principali
288 servizi di rete utilizzati con sistemi operativi <em>Unix</em>
289 e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
290 per amministratori di rete in ambiente <em>GNU/Linux</em>. In
291 particolare questa guida e' stata scritta usando come
292 riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
293 esempi presentati dovrebbero quindi essere direttamente
294 utilizzabili anche su distribuzioni derivate da Debian come
295 Ubuntu, per sistemi operativi diversi si presti attenzione ai
296 percorsi dei file citati.</p>
298 <div class="contents topic" id="indice-degli-argomenti">
299 <p class="topic-title first">Indice degli argomenti</p>
301 <ul class="auto-toc simple">
303 <a class="reference internal" href=
304 "#configurazione-sistema" id="id8" name=
305 "id8">1 Configurazione sistema</a>
307 <ul class="auto-toc">
308 <li><a class="reference internal" href=
309 "#solo-per-uso-interno" id="id9" name=
310 "id9">1.1 Solo per uso
314 <a class="reference internal" href="#rete" id="id10"
315 name="id10">1.2 Rete</a>
317 <ul class="auto-toc">
318 <li><a class="reference internal" href=
319 "#interfaces" id="id11" name=
320 "id11">1.2.1 interfaces</a></li>
324 <li><a class="reference internal" href=
325 "#bash-completion" id="id12" name=
326 "id12">1.3 Bash completion</a></li>
328 <li><a class="reference internal" href="#vim" id="id13"
329 name="id13">1.4 Vim</a></li>
331 <li><a class="reference internal" href="#vnc" id="id14"
332 name="id14">1.5 VNC</a></li>
334 <li><a class="reference internal" href=
335 "#lista-dei-pacchetti-di-base" id="id15" name=
336 "id15">1.6 Lista dei pacchetti di
340 <a class="reference internal" href=
341 "#apt-configurazione" id="id16" name=
342 "id16">1.7 Apt configurazione</a>
344 <ul class="auto-toc">
345 <li><a class="reference internal" href=
346 "#sources-list" id="id17" name=
347 "id17">1.7.1 sources.list</a></li>
349 <li><a class="reference internal" href=
350 "#etc-apt-apt-conf" id="id18" name=
351 "id18">1.7.2 /etc/apt/apt.conf</a></li>
358 <a class="reference internal" href="#squid" id="id19"
359 name="id19">2 Squid</a>
361 <ul class="auto-toc">
363 <a class="reference internal" href=
364 "#configurazione-squid-conf" id="id20" name=
365 "id20">2.1 Configurazione:
368 <ul class="auto-toc">
369 <li><a class="reference internal" href="#cache-dir"
371 "id21">2.1.1 Cache_dir</a></li>
373 <li><a class="reference internal" href=
374 "#tag-maximum-object-size" id="id22" name=
375 "id22">2.1.2 TAG:
376 maximum_object_size</a></li>
378 <li><a class="reference internal" href=
379 "#tag-cache-mem" id="id23" name=
380 "id23">2.1.3 TAG:
383 <li><a class="reference internal" href=
384 "#tag-minimum-object-size" id="id24" name=
385 "id24">2.1.4 TAG:
386 minimum_object_size</a></li>
391 <a class="reference internal" href=
392 "#negoziazione-degli-accesi-al-servizio" id="id25"
393 name="id25">2.2 Negoziazione degli
394 accesi al servizio</a>
396 <ul class="auto-toc">
397 <li><a class="reference internal" href=
398 "#acl-e-http-access" id="id26" name=
399 "id26">2.2.1 ACL e http
405 <a class="reference internal" href="#testare-squid"
406 id="id27" name="id27">2.3 Testare
409 <ul class="auto-toc">
410 <li><a class="reference internal" href=
411 "#client-wgetrc" id="id28" name=
412 "id28">2.3.1 Client:
415 <li><a class="reference internal" href=
416 "#server-access-log" id="id29" name=
417 "id29">2.3.2 Server:
424 <li><a class="reference internal" href="#tiny-proxy" id=
425 "id30" name="id30">3 Tiny proxy</a></li>
428 <a class="reference internal" href="#apache" id="id31"
429 name="id31">4 Apache</a>
431 <ul class="auto-toc">
432 <li><a class="reference internal" href=
433 "#pacchetti-da-installare" id="id32" name=
434 "id32">4.1 Pacchetti da
435 installare::</a></li>
437 <li><a class="reference internal" href=
438 "#configurazione-di-apache" id="id33" name=
439 "id33">4.2 Configurazione di
442 <li><a class="reference internal" href="#apache-conf"
444 "id34">4.3 apache.conf</a></li>
447 <a class="reference internal" href=
448 "#installazione-di-php" id="id35" name=
449 "id35">4.4 Installazione di PHP</a>
451 <ul class="auto-toc">
452 <li><a class="reference internal" href=
453 "#test-del-modulo-php" id="id36" name=
454 "id36">4.4.1 Test del modulo
457 <li><a class="reference internal" href=
458 "#installazione-del-supporto-per-mysql-a-php" id=
460 "id37">4.4.2 Installazione del
461 supporto per Mysql a PHP</a></li>
463 <li><a class="reference internal" href=
464 "#phpmyadmin" id="id38" name=
465 "id38">4.4.3 phpmyadmin</a></li>
467 <li><a class="reference internal" href=
468 "#installazione-del-supporto-per-postgresql-a-php"
470 "id39">4.4.4 Installazione del
471 supporto per Postgresql a PHP</a></li>
473 <li><a class="reference internal" href=
474 "#phppgadmin" id="id40" name=
475 "id40">4.4.5 phppgadmin</a></li>
480 <a class="reference internal" href="#virtual-hosts"
481 id="id41" name="id41">4.5 Virtual
484 <ul class="auto-toc">
485 <li><a class="reference internal" href=
486 "#gestione-dns" id="id42" name=
487 "id42">4.5.1 Gestione DNS</a></li>
489 <li><a class="reference internal" href=
490 "#eseguire-una-query-dns-con-dig" id="id43" name=
491 "id43">4.5.2 Eseguire una query
492 DNS con <tt class="docutils literal"><span class=
493 "pre">dig</span></tt>::</a></li>
495 <li><a class="reference internal" href="#id3" id=
496 "id44" name="id44">4.5.3 Virtual
502 <a class="reference internal" href=
503 "#negoziazione-accessi" id="id45" name=
504 "id45">4.6 Negoziazione accessi</a>
506 <ul class="auto-toc">
507 <li><a class="reference internal" href=
508 "#limiti-su-base-ip" id="id46" name=
509 "id46">4.6.1 Limiti su base
515 <a class="reference internal" href=
516 "#user-authentication" id="id47" name=
517 "id47">4.7 User Authentication</a>
519 <ul class="auto-toc">
520 <li><a class="reference internal" href=
521 "#definire-la-cartella" id="id48" name=
522 "id48">4.7.1 Definire la
525 <li><a class="reference internal" href=
526 "#creazione-del-database-delle-passwords" id="id49"
527 name="id49">4.7.2 Creazione del
528 database delle passwords</a></li>
530 <li><a class="reference internal" href="#id4" id=
532 "id50">4.7.3 Configurazione di
537 <li><a class="reference internal" href="#cavets" id=
538 "id51" name="id51">4.8 Cavets</a></li>
543 <a class="reference internal" href="#domain-name-system"
544 id="id52" name="id52">5 Domain Name
547 <ul class="auto-toc">
548 <li><a class="reference internal" href=
549 "#risoluzione-inversa" id="id53" name=
550 "id53">5.1 Risoluzione
553 <li><a class="reference internal" href=
554 "#nomi-di-dominio" id="id54" name=
555 "id54">5.2 Nomi di dominio</a></li>
557 <li><a class="reference internal" href=
558 "#tipologie-di-record" id="id55" name=
559 "id55">5.3 Tipologie di
562 <li><a class="reference internal" href="#utilizzo" id=
564 "id56">5.4 Utilizzo</a></li>
566 <li><a class="reference internal" href=
567 "#risoluzione-dei-nomi-di-dominio" id="id57" name=
568 "id57">5.5 Risoluzione dei nomi di
571 <li><a class="reference internal" href="#dig" id="id58"
572 name="id58">5.6 Dig</a></li>
574 <li><a class="reference internal" href="#resolv-conf"
576 "id59">5.7 resolv.conf</a></li>
578 <li><a class="reference internal" href="#etc-hosts" id=
580 "id60">5.8 /etc/hosts</a></li>
583 <a class="reference internal" href="#hostname" id=
584 "id61" name="id61">5.9 Hostname</a>
586 <ul class="auto-toc">
587 <li><a class="reference internal" href="#fqdn" id=
589 "id62">5.9.1 FQDN</a></li>
596 <a class="reference internal" href="#dnsmasq" id="id63"
597 name="id63">6 DNSmasq</a>
599 <ul class="auto-toc">
600 <li><a class="reference internal" href=
601 "#configurazione" id="id64" name=
602 "id64">6.1 Configurazione</a></li>
604 <li><a class="reference internal" href="#dhcp" id=
605 "id65" name="id65">6.2 DHCP</a></li>
607 <li><a class="reference internal" href="#dns-cache" id=
608 "id66" name="id66">6.3 DNS
614 <a class="reference internal" href=
615 "#bind-dns-autoritativo" id="id67" name=
616 "id67">7 Bind : DNS Autoritativo</a>
618 <ul class="auto-toc">
619 <li><a class="reference internal" href="#id5" id="id68"
620 name="id68">7.1 DNS cache</a></li>
623 <a class="reference internal" href=
624 "#ospitare-una-zona" id="id69" name=
625 "id69">7.2 Ospitare una zona</a>
627 <ul class="auto-toc">
628 <li><a class="reference internal" href=
629 "#named-conf-local" id="id70" name=
630 "id70">7.2.1 named.conf.local</a></li>
633 <a class="reference internal" href=
634 "#configurazione-della-zona" id="id71" name=
635 "id71">7.2.2 Configurazione
638 <ul class="auto-toc">
639 <li><a class="reference internal" href=
640 "#soa-start-of-authority-record" id="id72"
641 name="id72">7.2.2.1 SOA: Start
642 of Authority Record</a></li>
644 <li><a class="reference internal" href=
645 "#altri-campi" id="id73" name=
646 "id73">7.2.2.2 Altri
653 <li><a class="reference internal" href="#dns-slave" id=
654 "id74" name="id74">7.3 DNS
658 <a class="reference internal" href=
659 "#aggiornamento-dinamico-nsupdate" id="id75" name=
660 "id75">7.4 Aggiornamento dinamico:
663 <ul class="auto-toc">
664 <li><a class="reference internal" href=
665 "#configurazione-client-nsupdate" id="id76" name=
666 "id76">7.4.1 Configurazione client
669 <li><a class="reference internal" href=
670 "#configurazione-server-riconoscimento-chiave" id=
672 "id77">7.4.2 Configurazione
673 server: riconoscimento chiave</a></li>
675 <li><a class="reference internal" href=
676 "#server-gestione-dell-intera-zona" id="id78" name=
677 "id78">7.4.3 Server: gestione
678 dell'intera zona</a></li>
680 <li><a class="reference internal" href=
681 "#automatizzare-l-aggiornamento-dinamico" id="id79"
682 name="id79">7.4.4 Automatizzare
683 l'aggiornamento dinamico</a></li>
687 <li><a class="reference internal" href=
688 "#link-suggeriti" id="id80" name=
689 "id80">7.5 Link suggeriti:</a></li>
694 <a class="reference internal" href="#samba" id="id81"
695 name="id81">8 Samba</a>
697 <ul class="auto-toc">
698 <li><a class="reference internal" href="#pacchetti" id=
700 "id82">8.1 Pacchetti</a></li>
702 <li><a class="reference internal" href=
703 "#passwords-e-autenticazione" id="id83" name=
704 "id83">8.2 Passwords e
705 autenticazione</a></li>
707 <li><a class="reference internal" href=
708 "#creazione-utenti" id="id84" name=
709 "id84">8.3 Creazione Utenti</a></li>
712 <a class="reference internal" href=
713 "#creare-la-condivisione" id="id85" name=
714 "id85">8.4 Creare la
717 <ul class="auto-toc">
718 <li><a class="reference internal" href=
719 "#sicurezza-permessi-di-esecuzione-sul-server" id=
721 "id86">8.4.1 Sicurezza: permessi
722 di esecuzione sul server</a></li>
727 <a class="reference internal" href=
728 "#configurazione-dell-applicativo-samba-vero-e-proprio"
730 "id87">8.5 Configurazione
731 dell'applicativo Samba vero e proprio.</a>
733 <ul class="auto-toc">
734 <li><a class="reference internal" href=
735 "#creazione-di-un-gruppo" id="id88" name=
736 "id88">8.5.1 Creazione di un
741 <li><a class="reference internal" href=
742 "#testare-il-servizio" id="id89" name=
743 "id89">8.6 Testare il
749 <a class="reference internal" href=
750 "#server-di-posta-postfix" id="id90" name=
751 "id90">9 Server di posta: Postfix</a>
753 <ul class="auto-toc">
755 <a class="reference internal" href=
756 "#test-del-server-smtp" id="id91" name=
757 "id91">9.1 Test del server smtp</a>
759 <ul class="auto-toc">
760 <li><a class="reference internal" href="#swaks" id=
762 "id92">9.1.1 Swaks</a></li>
766 <li><a class="reference internal" href="#imap-e-pop"
767 id="id93" name="id93">9.2 Imap e
771 <a class="reference internal" href=
772 "#client-a-riga-di-comando" id="id94" name=
773 "id94">9.3 Client a riga di
776 <ul class="auto-toc">
777 <li><a class="reference internal" href="#mailx" id=
779 "id95">9.3.1 mailx</a></li>
781 <li><a class="reference internal" href="#mutt" id=
783 "id96">9.3.2 Mutt</a></li>
785 <li><a class="reference internal" href=
786 "#web-client" id="id97" name=
787 "id97">9.3.3 Web client</a></li>
792 <a class="reference internal" href="#graylisting" id=
794 "id98">9.4 Graylisting</a>
796 <ul class="auto-toc">
797 <li><a class="reference internal" href=
798 "#abilitazione-in-postfix" id="id99" name=
799 "id99">9.4.1 Abilitazione in
802 <li><a class="reference internal" href="#test" id=
804 "id100">9.4.2 Test</a></li>
806 <li><a class="reference internal" href=
807 "#statistiche" id="id101" name=
808 "id101">9.4.3 Statistiche</a></li>
815 <a class="reference internal" href="#firewall" id="id102"
816 name="id102">10 Firewall</a>
818 <ul class="auto-toc">
819 <li><a class="reference internal" href="#links" id=
821 "id103">10.1 Links</a></li>
823 <li><a class="reference internal" href="#ipfilter" id=
825 "id104">10.2 Ipfilter</a></li>
828 <a class="reference internal" href=
829 "#progettazione-di-un-firewall" id="id105" name=
830 "id105">10.3 Progettazione di un
833 <ul class="auto-toc">
834 <li><a class="reference internal" href=
835 "#collocazione" id="id106" name=
836 "id106">10.3.1 Collocazione</a></li>
838 <li><a class="reference internal" href=
839 "#policy-di-default" id="id107" name=
840 "id107">10.3.2 Policy di
843 <li><a class="reference internal" href="#hardware"
845 "id108">10.3.3 Hardware</a></li>
849 <li><a class="reference internal" href=
850 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
851 "id109" name="id109">10.4 Percorso dei
852 pacchetti tra tabelle e catene</a></li>
855 <a class="reference internal" href=
856 "#concetti-di-base" id="id110" name=
857 "id110">10.5 Concetti di base</a>
859 <ul class="auto-toc">
860 <li><a class="reference internal" href=
861 "#tabelle-catene-regole" id="id111" name=
862 "id111">10.5.1 Tabelle, catene,
865 <li><a class="reference internal" href="#match" id=
867 "id112">10.5.2 Match</a></li>
869 <li><a class="reference internal" href="#targets"
871 "id113">10.5.3 Targets</a></li>
875 <li><a class="reference internal" href=
876 "#tabella-filter" id="id114" name=
877 "id114">10.6 Tabella Filter</a></li>
879 <li><a class="reference internal" href=
880 "#flush-automatico-per-macchine-remote" id="id115"
881 name="id115">10.7 Flush automatico per
882 macchine remote</a></li>
884 <li><a class="reference internal" href=
885 "#gestione-regole-rules" id="id116" name=
886 "id116">10.8 Gestione regole
890 <a class="reference internal" href=
891 "#salvataggio-regole" id="id117" name=
892 "id117">10.9 Salvataggio regole</a>
894 <ul class="auto-toc">
895 <li><a class="reference internal" href=
896 "#iptables-save" id="id118" name=
897 "id118">10.9.1 Iptables-save</a></li>
899 <li><a class="reference internal" href=
900 "#iptables-restore" id="id119" name=
901 "id119">10.9.2 Iptables-restore</a></li>
906 <a class="reference internal" href="#esempi" id=
908 "id120">10.10 Esempi</a>
910 <ul class="auto-toc">
911 <li><a class="reference internal" href=
912 "#bloccare-i-ping-dall-esterno" id="id121" name=
913 "id121">10.10.1 Bloccare i ping
914 dall'esterno</a></li>
916 <li><a class="reference internal" href=
917 "#masquerading-snat" id="id122" name=
918 "id122">10.10.2 Masquerading
921 <li><a class="reference internal" href=
922 "#brute-force" id="id123" name=
923 "id123">10.10.3 Brute
930 <li><a class="reference internal" href="#note" id="id124"
931 name="id124">11 NOTE</a></li>
935 <p>Generato il 2010-01-04 con: <a class="reference external"
937 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
939 <div class="section" id="configurazione-sistema">
940 <h1><a class="toc-backref" href=
941 "#id8">1 Configurazione sistema</a></h1>
943 <div class="section" id="solo-per-uso-interno">
944 <h2><a class="toc-backref" href=
945 "#id9">1.1 Solo per uso interno</a></h2>
947 <p>Impostazioni di base per la configurazione del sistema
948 operativo e della rete nel laboratorio 208 facente parte
949 della rete piffa.net .</p>
951 <p>Sono qui riportati i parametri della rete locale per
952 comodita' degli studenti, gli altri lettori possono
953 considerarli come riferimento per comprendere i valori
954 espressi nei vari file di configurazione. Ad esempio:
955 quando leggerete <tt class="docutils literal"><span class=
956 "pre">10.10.208.248:3128</span></tt> saprete che si tratta
957 del nostro <em>proxy http</em> in ascolto sulla porta
958 <cite>3128</cite>, stara' quindi a voi sostituire i dati
959 con gli equivalenti <em>IP</em> della vostra rete.</p>
962 <div class="section" id="rete">
963 <h2><a class="toc-backref" href=
964 "#id10">1.2 Rete</a></h2>
966 <p>Parametri della rete attualmente in uso:</p>
968 <table border="1" class="docutils">
976 <td colspan="2">Parametri della rete</td>
982 <td>10.10.208.0/24</td>
988 <td>255.255.255.0</td>
994 <td>10.10.208.255</td>
1000 <td>10.10.208.248</td>
1006 <td>10.10.208.248</td>
1011 <p>Dal server locale degli studeti,
1012 <strong>Bender</strong>, corrispondente all'IP <tt class=
1013 "docutils literal"><span class=
1014 "pre">10.10.208.248</span></tt>, vengono erogati i servizi
1015 DHCP, DNS, gateway (con NAT), proxy http e mirror della
1016 distribuzione Debian ( <a class="reference external" href=
1017 "http://debian.piffa.net">http://debian.piffa.net</a>).
1018 Altri servizi in esecuzione sul server:</p>
1021 <li>Rsync server e altri software di aggiornamento /
1022 installazione di massa</li>
1024 <li>Server imap / pop3 / webmail / smtp</li>
1026 <li>Server ssh per i test degli studenti</li>
1028 <li>File server Samba, NFS e controller di qualsiasi
1029 altro FS distribuito</li>
1031 <li>Print server per la gestione delle stampanti</li>
1035 <li>Mirror locale delle *.iso dei sistemi operativi e dei
1036 vari software usati durante le lezioni</li>
1038 <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1039 framework vengono attivati a seconda dei corsi
1043 <p>Durante il corso delle lezioni e' opportuno che le
1044 macchine degli studenti si appoggino al server Bender
1045 (ottetto finale <tt class="docutils literal"><span class=
1046 "pre">248</span></tt>), nel caso questo non fosse
1047 raggiungibile (ad esempio per permettere impostazioni di
1048 DHCP / routing diverse) sara' comunque disponibile il
1049 <tt class="docutils literal"><span class=
1050 "pre">10.10.208.254</span></tt> come gateway | DNS per la
1051 rete <tt class="docutils literal"><span class=
1052 "pre">10.10.208.10</span></tt>.</p>
1054 <p><strong>Non e' piu' possibile</strong> raggiungere
1055 Bender tramite l'IP pubblico <tt class=
1056 "docutils literal"><span class=
1057 "pre">212.22.136.248</span></tt> o <em>qualsiasi altro
1058 ip</em> della classe <tt class=
1059 "docutils literal"><span class="pre">C</span> <span class=
1060 "pre">212.22.136.0/24</span></tt> precedentemente
1063 <p>Il computer del docente con il server VNC e' sempre
1064 configurato con l'ottetto finale: <tt class=
1065 "docutils literal"><span class="pre">177</span></tt> della
1066 rete utilizzata durante le lezioni (quindi generalmente la
1067 VNC sara' disponibile sul <tt class=
1068 "docutils literal"><span class=
1069 "pre">10.10.208.177:1</span></tt>.</p>
1071 <p>Gli studenti sono pregati di non impedire l'accesso SSH
1072 alla propria macchina dal computer del docente, e non
1073 modificare la password dell'utente <tt class=
1074 "docutils literal"><span class="pre">root</span></tt> del
1075 sistema operativo <em>pre-istallato</em> (ad es:
1076 <em>Diurno</em>).</p>
1078 <div class="section" id="interfaces">
1079 <h3><a class="toc-backref" href=
1080 "#id11">1.2.1 interfaces</a></h3>
1082 <p>Segue un esempio del file di configurazione della
1083 scheda di rete con configurazione statica:</p>
1085 <p>/etc/network/interfaces:</p>
1086 <pre class="literal-block">
1087 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1089 # The loopback interface
1090 iface lo inet loopback
1092 # La prima scheda di rete (se si chiama eth0)
1093 iface etho inet static
1095 # iface etho inet dhcp
1096 address 10.10.208.101
1097 netmask 255.255.255.0
1099 broadcast 10.10.208.255
1100 gateway 10.10.208.254
1102 # Quali interfaccie devono partire automaticamente:
1106 <p>Controllare il nome della propria scheda di rete: a
1107 volte <em>udev</em> rinomina la prima scheda a <tt class=
1108 "docutils literal"><span class="pre">eth1</span></tt>,
1109 oppure potreste avere piu' di una scheda di rete (anche
1110 un'interfaccia <em>firewire</em> puo' essere
1111 automaticamente abilitata come scheda di rete).</p>
1113 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1114 , eth0:1 , ...) ricordarsi che queste dipendono dalla
1115 scheda fisica a cui sono associate: abbattere con
1116 <tt class="docutils literal"><span class=
1117 "pre">ifconfig</span> <span class="pre">down</span>
1118 <span class="pre">eth0</span></tt> la scheda principale
1119 fara' cadere anche queste. Tornando ad attivare la scada
1120 principale con <tt class="docutils literal"><span class=
1121 "pre">ifconfig</span> <span class="pre">eth0</span>
1122 <span class="pre">up</span></tt> la virtuale tornera'
1123 attiva: nel caso voleste disabilitarla dovrete quindi
1124 sempre abbattere manualmente la scheda virtuale
1125 <em>prima</em> della scheda reale.</p>
1127 <p>I DNS vanno indicati nel file <tt class=
1128 "docutils literal"><span class=
1129 "pre">/etc/resolv.conf</span></tt> , la cui sintassi e'
1130 spiegata al punto 4.6 . Come DNS si <em>deve</em> usare
1131 il server Bender, alcuni parametri dei software di
1132 installazione, risoluzione dei mirror, vengono
1133 opportunamente modificatia da questo DNS.</p>
1137 <div class="section" id="bash-completion">
1138 <h2><a class="toc-backref" href=
1139 "#id12">1.3 Bash completion</a></h2>
1141 <p>Il completamento automatico della shell (che si attiva
1142 premendo il tasto tab una o due volte mentre si sta
1143 scrivendo un termine) permette di comporre automaticamente
1144 i nomi dei comandi e i percorsi dei file, sopratutto la
1145 composizione automatica dei percorsi dei file e' di grande
1148 <p>Bash_completion permette di integrare il completamento
1149 automatico con i nomi dei pacchetti e oggetti dei comandi:
1150 ad es. volendo digitare <tt class=
1151 "docutils literal"><span class="pre">apt-get</span>
1152 <span class="pre">inst[TAB]</span> <span class=
1153 "pre">xtigh[TAB]</span></tt> ora verra' completato
1154 automaticamente sia la parola <tt class=
1155 "docutils literal"><span class="pre">install</span></tt>
1156 che il nome del pacchetto <tt class=
1157 "docutils literal"><span class=
1158 "pre">xtightvncviewer</span></tt>.</p>
1160 <p>Abilitare /etc/bash_completion nel file <tt class=
1161 "docutils literal"><span class=
1162 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
1163 proprio <tt class="docutils literal"><span class=
1164 "pre">~/.bashrc</span></tt> (che sarebbe il file
1165 <em>nascosto</em>, quindi con un punto all'inizio del nome
1166 del file, di configurazione della shell bash per ogni
1167 utente, presente nella propria <em>home
1168 directory</em>):</p>
1169 <pre class="literal-block">
1170 echo ". /etc/bash_completion" >> ~/.bashrc
1173 <p>Esempio di ~/.bahsrc</p>
1174 <pre class="literal-block">
1175 # ~/.bashrc: executed by bash(1) for non-login shells.
1177 export PS1='\h:\w\$ '
1180 # De-commentare le seguenti righe per abilitare la colorazione dei
1182 export LS_OPTIONS='--color=auto'
1184 alias ls='ls $LS_OPTIONS'
1185 alias ll='ls $LS_OPTIONS -l'
1186 alias l='ls $LS_OPTIONS -lA'
1188 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1193 # questo abilita bash completion
1194 . /etc/bash_completion
1197 <p>Il file <tt class="docutils literal"><span class=
1198 "pre">/etc/bash_completion</span></tt> deve essere presente
1199 nel sistema, in caso contrario installare il pacchetto:
1200 <tt class="docutils literal"><span class=
1201 "pre">bash-completion</span></tt>. Generalmente l'utente
1202 <tt class="docutils literal"><span class=
1203 "pre">root</span></tt> ha un file <tt class=
1204 "docutils literal"><span class="pre">.bashrc</span></tt>
1205 preimpostato analogo a quello citato sopra, a differenza
1206 dei normali utenti di sistema.</p>
1211 <li><a class="reference external" href=
1212 "http://www.debian-administration.org/articles/316">An
1213 introduction to bash completion</a></li>
1215 <li><a class="reference external" href=
1216 "http://www.caliban.org/bash/">Working more productively
1217 with bash 2.x/3.x</a></li>
1219 <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1220 "reference external" href=
1221 "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1225 <div class="section" id="vim">
1226 <h2><a class="toc-backref" href=
1227 "#id13">1.4 Vim</a></h2>
1229 <p>Vim e' l'editor di testo preferito dai sistemisti,
1230 quindi sara' conveniente impostare fin da subito alcune
1231 impostazioni per renderlo piu' comodo.</p>
1233 <p>Assicurarsi che sia installata nel sistema la versione
1234 completa dell'editor installando il pacchetto <tt class=
1235 "docutils literal"><span class="pre">vim</span></tt>:</p>
1236 <pre class="literal-block">
1237 # apt-get install vim
1240 <p>Modificare poi il file di configurazione generale
1241 <tt class="docutils literal"><span class=
1242 "pre">/etc/vim/vimrc</span></tt></p>
1243 <pre class="literal-block">
1244 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1245 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1246 " you can find below. If you wish to change any of those settings, you should
1247 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1248 " everytime an upgrade of the vim packages is performed. It is recommended to
1249 " make changes after sourcing debian.vim since it alters the value of the
1250 " 'compatible' option.
1252 " This line should not be removed as it ensures that various options are
1253 " properly set to work with the Vim-related packages available in Debian.
1256 " Uncomment the next line to make Vim more Vi-compatible
1257 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1258 " options, so any other options should be set AFTER setting 'compatible'.
1261 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1262 " line enables syntax highlighting by default.
1265 " If using a dark background within the editing area and syntax highlighting
1266 " turn on this option as well.
1269 " Uncomment the following to have Vim jump to the last position when
1273 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1274 \| exe "normal! g'\"" | endif
1277 " Uncomment the following to have Vim load indentation rules and plugins
1278 " according to the detected filetype.
1279 " This is not recommanded if you often copy and paste into vim,
1280 " as it messes all the indentation.
1282 filetype plugin indent on
1285 " This goes for comments folding: use co to expnad and zc to compress,
1286 " zi to toggle on/off
1288 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1290 " The following are commented out as they cause vim to behave a lot
1291 " differently from regular Vi. They are highly recommended though.
1292 set showcmd " Show (partial) command in status line.
1293 "set showmatch " Show matching brackets.
1294 # Ignorecase is quite userfull
1295 set ignorecase " Do case insensitive matching
1296 "set smartcase " Do smart case matching
1297 "set incsearch " Incremental search
1298 set autowrite " Automatically save before commands like :next and :make
1299 "set hidden " Hide buffers when they are abandoned
1300 "set mouse=a " Enable mouse usage (all modes) in terminals
1302 " Source a global configuration file if available
1303 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1304 if filereadable("/etc/vim/vimrc.local")
1305 source /etc/vim/vimrc.local
1309 <p>I principianti faranno bene ad esercitarsi con
1310 <tt class="docutils literal"><span class=
1311 "pre">vimtutor</span> <span class="pre">it</span></tt>.</p>
1313 <p>Altri link per VIM:</p>
1316 <li>Vim Introduction and Tutorial: <a class=
1317 "reference external" href=
1318 "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1319 http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1321 <li><a class="reference external" href=
1322 "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1324 <li><a class="reference external" href=
1325 "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1329 <div class="section" id="vnc">
1330 <h2><a class="toc-backref" href=
1331 "#id14">1.5 VNC</a></h2>
1333 <p>I Virtual Network Computing (o VNC) sono software di
1334 controllo remoto e servono per amministrare un computer a
1335 distanzai. Nel nostro caso la VNC sara' utilizzata per
1336 visualizzare la sessione di lavoro di un altro computer sul
1337 proprio a scopo didattico.</p>
1339 <p>Per collegarvi al server del docente usate lo script
1340 <tt class="docutils literal"><span class=
1341 "pre">guarda.sh</span></tt> che dovrebbe gia essere
1342 disponibili sui sistemi preconfigurati, oppure potete
1343 invocare direttamente il collegamento con:</p>
1344 <pre class="literal-block">
1345 xtightvncviewer -viewonly 10.10.208.177:1
1348 <p>Se il comando non fosse disponibile installate il
1349 pacchetto <tt class="docutils literal"><span class=
1350 "pre">xtightvncviewer</span></tt>. Potete anche scaricare
1351 lo script <tt class="docutils literal"><span class=
1352 "pre">guarda.sh</span></tt> e renderlo eseguibile, ed
1353 eventualmente creare una voce nel menu di KDE per
1357 <pre class="literal-block">
1360 wget http://bender/guarda.sh
1365 <p>Per eseguire lo script digitare semplicemente <tt class=
1366 "docutils literal"><span class="pre">guarda.sh</span></tt>,
1367 oppure creare un link / collegamento sul Desktop allo
1368 script <tt class="docutils literal"><span class=
1369 "pre">/usr/local/bin/guarda.sh</span></tt>.</p>
1371 <p>Le impostazioni del server VNC sono:</p>
1373 <table border="1" class="docutils">
1379 <thead valign="bottom">
1381 <th class="head">Parametro</th>
1383 <th class="head">Valore</th>
1387 <tbody valign="top">
1391 <td>10.10.208.177:1</td>
1395 <td>Server grafico</td>
1408 <p>Si noti che non e' possibile lanciare un applicativo sul
1409 server grafico di un utente da una shell in cui si sta
1410 lavorando come altro utente, anche se root. E' quindi
1411 necessario essere l'utente di sistema che si e' loggato
1412 inizialmente nella sessione grafica per poter lanciare lo
1413 script guarda.sh da una shell.</p>
1415 <p>Controllare con <tt class=
1416 "docutils literal"><span class="pre">whoami</span></tt> di
1417 essere l'utente normale (es <tt class=
1418 "docutils literal"><span class="pre">utente</span>
1419 <span class="pre">|</span> <span class=
1420 "pre">studente</span> <span class="pre">|</span>
1421 <span class="pre">proprio</span> <span class=
1422 "pre">nome</span></tt> ), in caso si sia assunta una altra
1423 <tt class="docutils literal"><span class=
1424 "pre">id</span></tt> si apra un altra shell o si esca da
1425 quella attuale con <tt class=
1426 "docutils literal"><span class="pre">exit</span></tt> .</p>
1429 <div class="section" id="lista-dei-pacchetti-di-base">
1430 <h2><a class="toc-backref" href=
1431 "#id15">1.6 Lista dei pacchetti di
1434 <p>I pacchetti installati generalmente <a class=
1435 "footnote-reference" href="#id2" id="id1" name=
1436 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1437 <pre class="literal-block">
1438 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1441 <table class="docutils footnote" frame="void" id="id2"
1448 <tbody valign="top">
1450 <td class="label"><a class="fn-backref" href=
1453 <td><tt class="docutils literal"><span class=
1454 "pre">kde-core</span></tt> e' piu' leggero del
1455 pacchetto <tt class="docutils literal"><span class=
1456 "pre">kde</span></tt>. Esiste un equivalente
1457 <tt class="docutils literal"><span class=
1458 "pre">gnome-core</span></tt> per chi preferisce
1459 Gnome, nel caso si potrebbe installare il log-in
1460 manager <cite>gdm</cite> al posto di
1461 <cite>kdm</cite>.</td>
1467 <div class="section" id="apt-configurazione">
1468 <h2><a class="toc-backref" href=
1469 "#id16">1.7 Apt configurazione</a></h2>
1471 <p>Vediamo i due file principali di apt:</p>
1474 <li><tt class="docutils literal"><span class=
1475 "pre">/etc/apt/sources.list</span></tt></li>
1477 <li><tt class="docutils literal"><span class=
1478 "pre">/etc/apt/apt.conf</span></tt></li>
1481 <div class="section" id="sources-list">
1482 <h3><a class="toc-backref" href=
1483 "#id17">1.7.1 sources.list</a></h3>
1485 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1486 preleva i pacchetti da installare tramite <em>dpkg</em>,
1487 vengono quindi precisati i metodi (ad es. http / ftp /
1488 cdrom / file), la release che si vuole tracciare (es
1489 <tt class="docutils literal"><span class=
1490 "pre">stable,</span> <span class="pre">testing,</span>
1491 <span class="pre">unstable</span></tt> oppure i
1492 corrispondenti release name es: <tt class=
1493 "docutils literal"><span class="pre">Lenny,</span>
1494 <span class="pre">Squeeze,</span> <span class=
1495 "pre">Sid</span></tt>), i rami di interesse (es:
1496 <tt class="docutils literal"><span class=
1497 "pre">main</span></tt> che e' l'archivio principale,
1498 <tt class="docutils literal"><span class=
1499 "pre">non-free</span></tt> per il software non libero,
1500 <tt class="docutils literal"><span class=
1501 "pre">contrib</span></tt> per i pacchetti non realizzati
1502 dai manutentori ufficiali).</p>
1504 <p>Gli archivi sono generalmente:</p>
1507 <li><tt class="docutils literal"><span class=
1508 "pre">deb</span></tt> per pacchetti Debian binari,
1509 pronti per l'installazione.</li>
1511 <li><tt class="docutils literal"><span class=
1512 "pre">deb-src</span></tt> per i pacchetti sorgenti
1513 (quindi da compilare, come il kernel) degli stessi
1514 pacchetti binari. In genere se non compilate spesso
1515 potete evitare di tracciare i sorgenti per risparmiare
1519 <p><tt class="docutils literal"><span class=
1520 "pre">/etc/apt/sources.list</span></tt></p>
1521 <pre class="literal-block">
1522 # esempio di accesso a un CDROM:
1523 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1525 # ftp.it.debian.org viene rediretto su un mirror interno
1526 # quando vi trovate nella rete interna piffa.net
1527 deb http://ftp.it.debian.org/debian/ lenny main
1528 # Sono disponibili anche i rami non-free contrib
1529 # deb http://ftp.it.debian.org/debian/ lenny non-free contrib
1530 # Sono disponibili anche le release unstable e testing
1531 # deb http://ftp.it.debian.org/debian/ testing main non-free contrib
1532 # deb http://ftp.it.debian.org/debian/ sid main non-free contrib
1534 # Sorgenti dei pacchetti:
1535 # deb-src http://ftp.bononia.it/debian/ lenny main
1537 # Mirror da kernel.org europa da usare a casa:
1538 deb http://mirrors.eu.kernel.org/debian/ lenny main
1540 # Security dal sito principale
1541 deb http://security.debian.org/ lenny/updates main
1542 # deb-src http://security.debian.org/ lenny/updates main
1544 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1545 # non legati a dinamiche di sicurezza
1546 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1547 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1549 # Esempio di accesso a un file system locale contenente i pacchetti:
1550 # Potete scaricarei in aula con debmirror da debian.piffa.net
1551 # un mirror locale da usare poi a casa anche senza internet
1552 # deb file:/mnt/mirror sid main non-free contrib
1556 <div class="section" id="etc-apt-apt-conf">
1557 <h3><a class="toc-backref" href=
1558 "#id18">1.7.2 /etc/apt/apt.conf</a></h3>
1560 <p>Questo file contiene le opzioni di apt, come ad
1561 esempio il proxy:</p>
1562 <pre class="literal-block">
1563 Acquire::http::Proxy "http://10.10.208.248:3128";
1566 <p>Si tenga conto che se si imposta un proxy per apt sul
1567 proprio portatile e tornati a casa propria si vuole
1568 scaricare nuovi pacchetti si dovra' disabilitare il proxy
1569 commentando la riga con ";" (''punto-e-virgola''). Su un
1570 portatile vi conviene tracciare il mirror <tt class=
1571 "docutils literal"><span class=
1572 "pre">ftp.it.debian.org</span></tt> senza impostare il
1573 proxy: in aula verra' rediretto al mirror locale e a casa
1574 vi appoggerete al mirror ufficiale.</p>
1576 <p>E' consigliabile impostare il proxy per apt anche in
1577 presenza di un proxy-http <em>trasparente</em>.</p>
1582 <div class="section" id="squid">
1583 <h1><a class="toc-backref" href=
1584 "#id19">2 Squid</a></h1>
1586 <p>Squid e' un proxy cache http (ma anche FTP e https)
1587 robusto e strutturato, puo' essere usato sia in situazioni
1588 relativamente semplici che in scenari piu' complessi grazie
1589 alla possibilita' di gestirne in modo granulare le risorse.
1590 Si partira' dalle configurazioni piu' semplici per la
1591 semplice <em>condivisione della navigazione</em> internet
1592 all'interno di una rete locale, per poi poter negoziare la
1593 gestione degli accessi, il filtraggio dei contenuti (Squid e'
1594 una applicazione che si muove nel 4' livello del modello
1595 TCP/IP a differenza di un <em>ipfilter</em> limitato al 2'),
1596 nel bilanciamento del carico tra piu' server proxy.</p>
1598 <dl class="docutils">
1599 <dt>Inoltre Squid svolge la funzione di
1600 <em>anonymizer</em>:</dt>
1602 <dd>Nasconde i client http alla rete internet: e' solo il
1603 server proxy ad accedere ai server web frequentati dai
1604 client: questi non sono percepiti ed esposti all'esterno
1605 della rete locale ma si relazionano solo con il server
1606 proxy. Dal punto di vista della sicurezza della rete locale
1607 questo e' preferibile ad un approccio alla navigazione
1608 basato su <em>NAT</em>.</dd>
1611 <p>Cosa a volte sottovalutata, Squid permette la navigazione
1612 web a una rete basata su <em>indirizzi IP privati</em> (es
1613 una 192.168.0.0/24). E se la rete privata deve <em>solo
1614 navigare</em> in internet, non serve introdurre nella rete un
1615 <em>NAT</em> (si veda la sezione sui firewall) per
1616 condividere la connessione: basta il solo Squid. Per altro
1617 non servira' neanche un servizio DNS accessibile dai clients
1618 dato che <em>sara' il solo Squid a risolvere i nomi di
1619 dominio</em> per i suoi client http.</p>
1621 <p>Squid ascolta di default sulla porta 3128, per impostare
1622 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1623 "docutils literal"><span class=
1624 "pre">/etc/apt/apt.conf</span></tt></p>
1625 <pre class="literal-block">
1626 Acquire::http::Proxy "10.10.208.254:3128";
1629 <p>Per installare Squid si usino i pacchetti:</p>
1630 <pre class="literal-block">
1634 <div class="section" id="configurazione-squid-conf">
1635 <h2><a class="toc-backref" href=
1636 "#id20">2.1 Configurazione:
1639 <p>Segue un estratto delle direttive principali viste in
1640 aula presenti nel file di configurazione <tt class=
1641 "docutils literal"><span class=
1642 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1644 <div class="section" id="cache-dir">
1645 <h3><a class="toc-backref" href=
1646 "#id21">2.1.1 Cache_dir</a></h3>
1648 <p>Cache dir serve per impostare dimensione e percorso
1649 della cache creata sul supporto di storaggio. Essendo la
1650 dimensione di default della cache pari a <tt class=
1651 "docutils literal"><span class="pre">~100</span>
1652 <span class="pre">MB</span></tt> e' altamente
1653 consigliabili aumentare questo parametro se si vuole
1654 poter utilizzare la funzione di <em>cache</em> http del
1657 <p>La dimensione ovviamente dipendera' dallo spazio
1658 disponibile, dimensioni tipiche e massime degli oggetti
1659 che si vuole tenere in cache (un solo file <em>.iso e'
1660 circa ``700 MB``, il pacchetto *Openoffice.org</em> circa
1661 <tt class="docutils literal"><span class="pre">150</span>
1662 <span class="pre">MB</span></tt>, un pacchetto debian
1663 circa <tt class="docutils literal"><span class=
1664 "pre">20</span> <span class="pre">MB</span></tt>), numero
1667 <p>Si presti poi attenzione alla natura dei dati che
1668 saranno salvati nella cache: sono tutti dati facilmente
1669 sostituibili (gli originali sono <em>on-line</em>) la cui
1670 perdita non arreca danni permanenti. Questo rende la
1671 cache di Squid un possibile candidato ad un <em>RAID
1672 stirpe</em> (livello 0) a ad un file system che prediliga
1673 le performance a scapito della consistenza, con vantaggi
1674 sia per le prestazioni (e la velocita' di navigazione e'
1675 uno dei motivi per cui si installa Squid) che per
1676 l'utilizzo estensivo dello spazio di storaggio.</p>
1678 <p>Questo fino al momento in cui per voi non sia piu'
1679 importante <em>garantire la disponibilita' del
1680 servizio</em>, ad esempio con un RAID <em>mirror</em> o 5
1681 (se il RAID stripe dovesse rompersi gli utenti non
1682 potrebbero piu' navigare, cosa che per natura dello
1683 stripe e' maggiormente probabile rispetto ad un
1684 <em>mirror</em> o a un filesytem <em>normale</em>).</p>
1686 <p>Altra considerazione: i dati del proxy vengono slavati
1687 sul filesytem del server dietro richiesta di utenti
1688 esterni talvolta sconosciuti. Come per i servizi di file
1689 sharing o per la posta elettronica non c'e' motivo che il
1690 filesystem su cui sono ospitati questi dati abbia i
1691 privilegi di eseguibilita' o suid (in genere si puo'
1692 anche usare <em>noatime</em> per renderlo piu' veloce,
1693 che si usi o meno il journal dipende dalle preferenze:
1694 affidabilita' oppure prestazioni):</p>
1697 <pre class="literal-block">
1699 # Filesystem per Squid http cache
1700 /dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
1703 <p>Ora possiamo impostare la cache nel file di
1704 configurazione <tt class="docutils literal"><span class=
1705 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1706 <pre class="literal-block">
1707 #TAG: cache_dir (riga 1628)
1710 # cache_dir Type Directory-Name Fs-specific-data [options]
1712 # You can specify multiple cache_dir lines to spread the
1713 # cache among different disk partitions.
1716 # cache_dir ufs /var/spool/squid3 100 16 256
1717 cache_dir aufs /var/spool/squid3 300 24 256
1718 # | | | | secondo livello di directory
1719 # | | | directory primo livello
1720 # | | dimensione in MB
1721 # | path della cache
1725 <p>Se si modifica la struttura del filesytem della cache
1726 di Squid, ad esempio variando il numero delle directory,
1727 puo' essere opportuno rigenerare la struttura della cache
1728 di squid. Tipicamente e' consigliabile cancellare (se si
1729 ha <em>ridotto</em> il numero delle directory) la vecchia
1730 cache e poi generare una nuova struttura. Se si vuole
1731 <em>star nel sicuro</em> ogni volta che si modifica
1732 l'impostazione delle directory <em>si svuoti la vecchia
1733 cache e se ne generi una nuova</em></p>
1734 <pre class="literal-block">
1735 # /etc/init.d/squid3 stop
1736 # rm -r /var/spool/squid3/??
1738 # /etc/init.d/squid3 start
1742 <div class="section" id="tag-maximum-object-size">
1743 <h3><a class="toc-backref" href=
1744 "#id22">2.1.2 TAG:
1745 maximum_object_size</a></h3>
1747 <p>Questa direttiva imposta la dimensione massima degli
1748 oggetti che vengono salvati sul supporto di storaggio,
1749 oggetti di dimensioni superiori saranno comunque
1750 scaricati ma non tenuti in cache.</p>
1752 <p>TAG: maximum_object_size (1760):</p>
1753 <pre class="literal-block">
1754 # TAG: maximum_object_size (1760)
1755 # Objects larger than this size will NOT be saved on disk. The
1756 # value is specified in kilobytes, and the default is 4MB. If
1757 # you wish to get a high BYTES hit ratio, you should probably
1758 # increase this (one 32 MB object hit counts for 3200 10KB
1759 # hits). If you wish to increase speed more than your want to
1760 # save bandwidth you should leave this low.
1762 # NOTE: if using the LFUDA replacement policy you should increase
1763 # this value to maximize the byte hit rate improvement of LFUDA!
1764 # See replacement_policy below for a discussion of this policy.
1767 # maximum_object_size 4096 KB
1768 maximum_object_size 150 MB
1772 <div class="section" id="tag-cache-mem">
1773 <h3><a class="toc-backref" href=
1774 "#id23">2.1.3 TAG: cache_mem</a></h3>
1776 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1777 utilizzata per la cache di Squid. Questo dipendera' dalla
1778 RAM disponibile sul sistema, e da quanta di questa volete
1779 mettere a disposizione di Squid (altri servizi importanti
1780 girano sulla stessa macchina? ). Questo parametro
1781 influisce sulle prestazioni e sul degrado dei supporti di
1782 storaggio (sopratutto se magnetici).</p>
1784 <p>Se si stesse pensando di usare dell'hardware
1785 <em>embedded</em> a basse prestazioni / consumo per
1786 realizzare un server gateway / NAT / Squid si tenga
1787 presente che Squid e' relativamente esoso di risorse
1788 rispetto agli altri servizi: avra' bisogno di <tt class=
1789 "docutils literal"><span class="pre">~25MB</span></tt>
1790 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1791 servire decorosamente una decina di client http su una
1792 rete ethernet 10/100. In questo caso non fate scendere
1793 <tt class="docutils literal"><span class=
1794 "pre">cache_mem</span></tt> sotto i <tt class=
1795 "docutils literal"><span class="pre">2/4</span>
1796 <span class="pre">MB</span></tt> pena un accesso continuo
1797 al supporto di storaggio.</p>
1799 <p>Se invece si disponesse di una macchina dedicata a
1800 Squid con gigabytes di RAM non si esiti a dedicarne buona
1801 parte a <em>cache_mem</em>.</p>
1803 <p>TAG: cache_mem (1566):</p>
1804 <pre class="literal-block">
1805 # 'cache_mem' specifies the ideal amount of memory to be used
1807 # * In-Transit objects
1809 # * Negative-Cached objects
1816 <div class="section" id="tag-minimum-object-size">
1817 <h3><a class="toc-backref" href=
1818 "#id24">2.1.4 TAG:
1819 minimum_object_size</a></h3>
1821 <p>Questo parametro imposta la dimensione minima degli
1822 oggetti salvati nella cache. Settato a <tt class=
1823 "docutils literal"><span class="pre">0</span></tt> o a
1824 valori molto piccoli puo' influire negativamente sulla
1825 frammentazione del filesytem e consumare un numero
1826 elevato di <em>inode</em> (cosa non piu' importante con
1827 ext4 o altri filesytem).</p>
1829 <p>In scenari con connessioni molto veloci ( >~10Mb),
1830 pochi client (una decina) e server poco performanti nella
1831 velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1832 il limte sia piuttosto il <em>seek-time</em> ) tenere in
1833 cache i file piu' piccoli aumenta la latenza della
1836 <p>TAG: minimum_object_size:</p>
1837 <pre class="literal-block">
1838 # TAG: minimum_object_size (bytes)
1839 # Objects smaller than this size will NOT be saved on disk. The
1840 # value is specified in kilobytes, and the default is 0 KB, which
1841 # means there is no minimum.
1844 # minimum_object_size 0 KB
1845 minimum_object_size 0 KB
1850 <div class="section" id=
1851 "negoziazione-degli-accesi-al-servizio">
1852 <h2><a class="toc-backref" href=
1853 "#id25">2.2 Negoziazione degli accesi al
1856 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1857 <em>open relay</em> , si deve quindi limitare la rete che
1858 puo' accedere al servizio.</p>
1860 <dl class="docutils">
1861 <dt>Open Relay:</dt>
1863 <dd>Un servizio a cui possono accedere tutti
1864 indiscriminatamente. La cosa puo' andare bene per servizi
1865 come i server web, che aspirano per loro natura al
1866 maggior numero possibile di utenti, ma non a servizi come
1867 i proxy http oppure ai server di posta elettronica
1868 (adibiti ai soli utenti della rete locale).</dd>
1871 <p>Generalmente non volete che il vostro proxy http venga
1872 usato da persone sconosciute ed esterne alla vostra rete,
1873 le quali sostanzialmente <em>navigherebbero sotto
1874 l'identita' del vostro proxy</em> (probabilmente per
1875 visionare materiali che non vorrebbero fossero ricondotti
1876 direttamente a loro) generando traffico e consumando banda
1877 della vostra connessione a internet. Tenere Squid in
1878 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1879 modo per essere inseriti in una <em>black list</em>.</p>
1881 <p>Per poter limitare gli accessi a Squid dal punto di
1882 vista dell'applicazione (quarto livello TCP/IP) si
1883 identifichera' inizialmente l'entita' <em>rete locale</em>
1884 (es: <tt class="docutils literal"><span class=
1885 "pre">localnet</span></tt>) con una ACL di tipo
1886 <em>src</em> (indirizzi IP sorgenti) indicando la
1887 <em>classe / range di IP</em> della nostra rete.</p>
1890 Dopodiche l'accesso (<tt class=
1891 "docutils literal"><span class=
1892 "pre">http_access</span></tt>) si concedera'
1893 (<em>allow</em>) a questa entita' (es: <tt class=
1894 "docutils literal"><span class=
1895 "pre">localnet</span></tt>) negando chiunque altro.
1898 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1899 esprimere i range di IP: <a class="reference external"
1900 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1901 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1903 <p>E' poi sempre possibile tenere il proxy in ascolto su un
1904 solo indirizzo IP, nel caso si disponga di piu' devicei di
1905 rete, oppure settare un firewall per limitare il traffico
1906 dai primi livelli del TCP/IP.</p>
1908 <div class="section" id="acl-e-http-access">
1909 <h3><a class="toc-backref" href=
1910 "#id26">2.2.1 ACL e http access</a></h3>
1912 <p>Si proceda a creare una <tt class=
1913 "docutils literal"><span class="pre">ACL</span></tt> di
1914 tipo <tt class="docutils literal"><span class=
1915 "pre">src</span></tt> per identificare la nostra rete
1916 locale, poi si abiliti l'accesso a questa con la
1917 direttiva <tt class="docutils literal"><span class=
1918 "pre">http_access</span></tt>. Tutto quanto non e'
1919 espressamente autorizzato viene poi negato da un
1920 <tt class="docutils literal"><span class=
1921 "pre">http_access</span> <span class="pre">deny</span>
1922 <span class="pre">all</span></tt> finale.</p>
1923 <pre class="literal-block">
1925 # Defining an Access List
1927 # Every access list definition must begin with an aclname and acltype,
1928 # followed by either type-specific arguments or a quoted filename that
1929 # they are read from.
1931 # ***** ACL TYPES AVAILABLE *****
1933 # acl aclname src ip-address/netmask ... # clients IP address
1936 # Example rule allowing access from your local networks.
1937 # Adapt to list your (internal) IP networks from where browsing
1939 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1940 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1941 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1943 acl localnet src 10.10.208.0/24
1947 # Allowing or Denying access based on defined access lists
1949 # Access to the HTTP port:
1950 # http_access allow|deny [!]aclname ...
1952 # NOTE on default values:
1954 # If there are no "access" lines present, the default is to deny
1958 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1960 # Example rule allowing access from your local networks.
1961 # Adapt localnet in the ACL section to list your (internal) IP networks
1962 # from where browsing should be allowed
1963 #http_access allow localnet
1964 http_access allow localnet
1969 <div class="section" id="testare-squid">
1970 <h2><a class="toc-backref" href=
1971 "#id27">2.3 Testare Squid</a></h2>
1973 <p>Configurato squid e' fondamentale testarne il corretto
1974 funzionamento per assicurarsi di non aver creato un
1975 <em>open-relay</em>. Per fare dei test significativi serve
1976 utilizzare degli host remoti: ci si connetta via ssh a
1977 questi per poi utilizzare <tt class=
1978 "docutils literal"><span class="pre">wget</span></tt> da
1979 riga di comando.</p>
1981 <div class="section" id="client-wgetrc">
1982 <h3><a class="toc-backref" href=
1983 "#id28">2.3.1 Client: ~/.wgetrc</a></h3>
1985 <p>Nel file <tt class="docutils literal"><span class=
1986 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1987 un file nascosto) si puo' impostare il proxy per wget. Si
1988 utilizzi l'indirizzo IP del server che si vuole testare,
1989 e si seguano i log <tt class=
1990 "docutils literal"><span class=
1991 "pre">/var/log/squid3/access.log</span></tt> sul
1994 <p>Da notare che la prova va' fatta su una macchina della
1995 rete che si vuole testare, non da <em>localhost</em>. Per
1996 altro se si utilizzasse <em>direttamente</em> <tt class=
1997 "docutils literal"><span class=
1998 "pre">localhost</span></tt> non si testerebbe la
1999 <em>ACL</em> predisposta, dato che si si rientrerebbe
2000 nella ACL (pre-configurata di default) <tt class=
2001 "docutils literal"><span class=
2002 "pre">localhost</span></tt>.</p>
2004 <dl class="docutils">
2007 <dd>http_proxy=10.10.208.178:3128</dd>
2010 <p>Si proceda a scaricare dal client scelto con un
2012 <pre class="literal-block">
2013 wget http://www.google.it
2017 <div class="section" id="server-access-log">
2018 <h3><a class="toc-backref" href=
2019 "#id29">2.3.2 Server:
2022 <p>Si puo' controllare il corretto funzionamento del
2023 server seguendo i log di accesso a Squid:</p>
2024 <pre class="literal-block">
2025 # tail -f /var/log/squid3/access.log
2028 <p>In oltre e' possibile configurare diversi
2029 <em>analizzatori di log</em> come <tt class=
2030 "docutils literal"><span class=
2031 "pre">Webalizer</span></tt> per studiare i log di
2037 <div class="section" id="tiny-proxy">
2038 <h1><a class="toc-backref" href=
2039 "#id30">3 Tiny proxy</a></h1>
2041 <p>Se avete l'esigenza di un proxy server per la condivisione
2042 della connessione ad internet ma non avete la necessita' o le
2043 risorse di un <em>caching</em> proxy come Squid potete
2044 considerare <strong>tinyproxy</strong>, questo e' molto piu'
2045 leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2046 accedere continuamente ad un file system per lo storaggio
2047 della cache) e risulta piu' semplice nella
2050 <p>TinyProxy puo' essere utilizzato come sostituto di
2051 emergenza in una rete in cui Squid e' momentaneamente non
2054 <p>File di configurazione: <tt class=
2055 "docutils literal"><span class=
2056 "pre">/etc/tinyproxy/tinyproxy.conf</span></tt></p>
2057 <pre class="literal-block">
2058 # Porta su cui ascoltare
2060 # IP su cui ascoltare
2061 Listen 10.10.208.160
2062 # Negoziazione accessi
2063 Allow 10.10.208.0/24
2067 <div class="section" id="apache">
2068 <h1><a class="toc-backref" href=
2069 "#id31">4 Apache</a></h1>
2071 <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2072 patchy NCSA web server</em> ), e' il server web modulare piu'
2073 diffuso e strutturato disponibile con licenza libera, in
2074 grado di operare da sistemi operativi UNIX/Linux e
2077 <p>Un server web e' un processo, e per estensione il computer
2078 su cui e' in esecuzione, che si occupa di fornire, su
2079 richiesta del browser, una pagina web (spesso scritta in
2080 HTML). Le informazioni inviate dal server web viaggiano in
2081 rete trasportate dal protocollo HTTP. L'insieme di server web
2082 da' vita al World Wide Web, uno dei servizi piu' utilizzati
2085 <div class="section" id="pacchetti-da-installare">
2086 <h2><a class="toc-backref" href=
2087 "#id32">4.1 Pacchetti da
2088 installare::</a></h2>
2094 <p>Con la release 2.0 di Apache viene automaticamente resa
2095 disponibile anche la versione SSL (Secure Socket Layer,
2096 connessioni criptate ) del web server senza che ci sia la
2097 necessita' di installare altri pacchetti.</p>
2100 <div class="section" id="configurazione-di-apache">
2101 <h2><a class="toc-backref" href=
2102 "#id33">4.2 Configurazione di
2105 <p>I file di configurazione di apache si trovano nella
2106 cartella: <tt class="docutils literal"><span class=
2107 "pre">/etc/apache2</span></tt> e sono strutturati come
2108 descritto nel file <tt class=
2109 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
2110 . Sostanzialmente lo schema e' il seguente:</p>
2112 <dl class="docutils">
2113 <dt>apache2.conf</dt>
2116 <p class="first">File di configurazione principale del
2119 <p class="last">httpd.conf e' il vecchio file di
2120 configurazione di Apache1, presente per motivi di
2121 retrocompatibilita' e' generalmente vuoto.</p>
2126 <dd>In questo file vengono specificate le porte sulle
2127 quali resta in ascolto il server web. Si noti che
2128 utilizzando dei virtual hosts generalmente viene
2129 specificata per questi la porta su cui ascoltare nel file
2130 di configurazione del virtual host, ad es: <tt class=
2131 "docutils literal"><span class=
2132 "pre"><VirtualHost</span> <span class=
2133 "pre">*:80></span></tt></dd>
2135 <dt>sites-available</dt>
2137 <dd>In questa cartella vengono raccolti i file di
2138 configurazione dei virtual host disponibili.</dd>
2140 <dt>sites-enabled</dt>
2142 <dd>In questa cartella sono contenuti dei link simbolici
2143 ai files in ../sites-available : se il link e' presente
2144 in questa cartella il virtual host e' abilitato.</dd>
2146 <dt>mods-available</dt>
2148 <dd>Stesso metodo per i moduli: in questa cartella ci
2149 sono i moduli veri e propri che verranno poi abilitati
2150 grazie all'esistenza di link simbolici nella cartella
2153 <dt>mods-enabled</dt>
2155 <dd>Moduli abilitati, effettivamente caricati.</dd>
2159 <div class="section" id="apache-conf">
2160 <h2><a class="toc-backref" href=
2161 "#id34">4.3 apache.conf</a></h2>
2163 <p>File di configurazione del servizio Apache, contiene le
2164 impostazioni generiche (ad esempio utilizzo della RAM e
2165 risorse di sistema) dell'intero servizio. Nella
2166 configurazione di default per Debian non viene definito un
2167 vero e proprio sito di default ma solo dei virtual
2170 <p>Guardiamo alcune direttive interessanti:</p>
2172 <dl class="docutils">
2175 <dd>Numero di secondi da aspettare prima di chiudere la
2176 connessione con il client. Questo parametro serve a
2177 liberare le risorse di sistema nel caso che un client,
2178 magari a causa di una connessione particolarmente lenta o
2179 instabili, tenga attivo indefinitamente un processo di
2184 <dd>L'estensione keep-alive (http 1.0) congiuntamente
2185 alle connessioni persistenti (http 1.1) permettono al
2186 server di rispondere a piu' richieste dei client mediante
2187 la stessa connessione. Il protocollo http per sua natura
2188 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2189 richiesta (per pagine web si pensi ad esempio alle
2190 immagini) dal client necessita di una connessione
2191 autonoma. Keep-alive permette di ottimizzare la
2192 connessione anche fino al 50% a seconda delle situazioni
2195 <dt>Server-Pool Size Regulation</dt>
2197 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2198 Tutti spiegati nel manuale di apache) servono per
2199 attribuire le risorse di sistema disponibili al server
2200 Apache. Tenere questi parametri bassi serve a limitare il
2201 rischio di Denial of Service per il server, nel caso
2202 offra altri servizi. I settagli di default sono come
2203 sempre abbastanza conservativi, se si conta di usare il
2204 proprio Apache per servire un sito web con molti
2205 visitatori sara' necessario aumentare sensibilmente le
2206 impostazioni di base.</dd>
2208 <dt>AccessFileName</dt>
2210 <dd>Il nome del file che viene onorato per modificare le
2211 impostazioni per una singola directory, legato alla
2212 direttiva AllowOverride .</dd>
2216 <div class="section" id="installazione-di-php">
2217 <h2><a class="toc-backref" href=
2218 "#id35">4.4 Installazione di PHP</a></h2>
2220 <p>Pacchetti da installare: <tt class=
2221 "docutils literal"><span class="pre">php5</span>
2222 <span class="pre">php-pear</span></tt></p>
2224 <div class="section" id="test-del-modulo-php">
2225 <h3><a class="toc-backref" href=
2226 "#id36">4.4.1 Test del modulo
2229 <p>Creare nella cartella <tt class=
2230 "docutils literal"><span class="pre">/var/www</span></tt>
2231 (o altra cartella visibile) un file con estensione *.php
2232 (es <tt class="docutils literal"><span class=
2233 "pre">/var/www/info.php</span></tt> contenete codice php
2234 eseguibile dall'interprete, ad es:</p>
2235 <pre class="literal-block">
2236 <?php phpinfo() ; ?>
2239 <p>Questa funzione di php generera' la tipica pagina con
2240 le impostazioni attuali per PHP. Richiamando la pagina
2241 (es: <tt class="docutils literal"><span class=
2242 "pre">http://localhost/info.php</span></tt> ) verra'
2243 generata dall'interprete PHP la pagina HTML e resa
2244 disponibile tramite Apache ai client HTTP, a prova del
2245 corretto funzionamento del modulo di PHP e della sua
2246 integrazione con il server web Apache. In caso contrario
2247 se il client http proporra' di scaricare la pagina invece
2248 che visualizzarla nel browser: non funziona l'interprete
2249 di php o sono mal configurati i MIME-type. prima di tutto
2250 assicurarsi di aver fatto ripartire Apache.</p>
2253 <div class="section" id=
2254 "installazione-del-supporto-per-mysql-a-php">
2255 <h3><a class="toc-backref" href=
2256 "#id37">4.4.2 Installazione del supporto
2257 per Mysql a PHP</a></h3>
2259 <p>Installare i pacchetti:</p>
2260 <pre class="literal-block">
2261 php5-mysql phpmyadmin
2264 <p>Controllare tramite la pagina php.info che sia
2265 abilitato il supporto per Mysql (ripartito Apache,
2266 ricaricare la pagina e cercare con CTRL+f <tt class=
2267 "docutils literal"><span class=
2268 "pre">mysql</span></tt>).</p>
2271 <div class="section" id="phpmyadmin">
2272 <h3><a class="toc-backref" href=
2273 "#id38">4.4.3 phpmyadmin</a></h3>
2275 <p>L'interfaccia web Phpmyadmin non richiede
2276 necessariamente la presenza di un database Mysql locale,
2277 puo' infatti essere utilizzata per gestire database
2278 remoti (il suo file di configurazione: <tt class=
2279 "docutils literal"><span class=
2280 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
2281 caso si voglia installare localmente Mysql si utilizzi il
2282 pacchetto <tt class="docutils literal"><span class=
2283 "pre">mysql-server</span></tt> .</p>
2285 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2286 <tt class="docutils literal"><span class=
2287 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2288 non fosse controllare che sia incluso il file <tt class=
2289 "docutils literal"><span class=
2290 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
2291 <tt class="docutils literal"><span class=
2292 "pre">/etc/apache2/conf.d/</span></tt> .</p>
2295 <div class="section" id=
2296 "installazione-del-supporto-per-postgresql-a-php">
2297 <h3><a class="toc-backref" href=
2298 "#id39">4.4.4 Installazione del supporto
2299 per Postgresql a PHP</a></h3>
2301 <p>Installare i pacchetti:</p>
2302 <pre class="literal-block">
2303 php5-pgsql phppgadmin
2306 <p>Controllare tramite la pagina php.info che sia
2307 abilitato il supporto per PostgreSQL (ripartito Apache,
2308 ricaricare la pagina e cercare con CTRL+f <tt class=
2309 "docutils literal"><span class=
2310 "pre">pgsql</span></tt>).</p>
2313 <div class="section" id="phppgadmin">
2314 <h3><a class="toc-backref" href=
2315 "#id40">4.4.5 phppgadmin</a></h3>
2317 <p>L'interfaccia web Phppgadmin per il database server
2318 PostgreSQL non richiede necessariamente la presenza di un
2319 database locale, puo' infatti essere utilizzata per
2320 gestire database remoti (il suo file di configurazione:
2321 <tt class="docutils literal"><span class=
2322 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
2323 caso si voglia installare localmente Mysql si utilizzi il
2324 pacchetto <tt class="docutils literal"><span class=
2325 "pre">postgresql</span></tt> .</p>
2327 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2328 <tt class="docutils literal"><span class=
2329 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2330 non fosse controllare che sia incluso il file <tt class=
2331 "docutils literal"><span class=
2332 "pre">/etc/phppgadmin/apache.conf</span></tt> in
2333 <tt class="docutils literal"><span class=
2334 "pre">/etc/apache2/conf.d/</span></tt> .</p>
2338 <div class="section" id="virtual-hosts">
2339 <h2><a class="toc-backref" href=
2340 "#id41">4.5 Virtual hosts</a></h2>
2344 <li><a class="reference external" href=
2345 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2347 <li><a class="reference external" href=
2348 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2349 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2353 <p>I virtual host permettono di avere piu' siti internet
2354 disponibili tramite lo stesso server web, eventualmente
2355 mappati su un solo indirizzo IP. Sono generalmente di due
2360 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2361 possibilita' di avere piu' indirizzi IP dedicati per i
2362 diversi siti che si vuole servire. ES: <tt class=
2363 "docutils literal"><span class=
2364 "pre"><VirtualHost</span> <span class=
2365 "pre">192.168.0.2:80></span></tt> . Soluzione
2366 dispendiosa, si tende ad usarla solo se servono
2367 certificati di sicurezza (SSL ) dedicati per ogni
2370 <li>Basati su <em>nomi di dominio</em> che puntano allo
2371 stesso IP. Soluzione piu' economica e diffusa che si
2372 basa sulle funzionalita' di http 1.1 .</li>
2376 <p>Prenderemo in esame la gestione di virtual hosts basati
2377 su nomi di dominio.</p>
2379 <div class="section" id="gestione-dns">
2380 <h3><a class="toc-backref" href=
2381 "#id42">4.5.1 Gestione DNS</a></h3>
2383 <p>Prima di tutto per poter impostare i virtual hosts
2384 dovete avere un server DNS che risolva i vostri nomi di
2385 dominio sull'indirizzo IP del server. Questo si puo'
2386 ottenere in vari modi, ad es:</p>
2389 <dl class="docutils">
2390 <dt><tt class="docutils literal"><span class=
2391 "pre">/etc/hosts</span></tt></dt>
2393 <dd>Per prove sul proprio sistema potete impostare i
2394 nomi dei vostri virtual server nel file /etc/hosts
2397 <dt><em>Dnsmasq</em> (DNS server)</dt>
2399 <dd>Utilizzabile al livello della rete locale per
2400 fare dei test, utilizzando direttive come: <tt class=
2401 "docutils literal"><span class=
2402 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2404 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2406 <dd>Utilizzare un servizio come ad es: <a class=
2407 "reference external" href=
2408 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2409 per mappare nomi di dominio sul proprio indirizzo IP,
2410 comodo ad esempio se si dispone di un indirizzo IP
2411 pubblico (anche se dinamico) per la propria
2412 connessione ad internet.</dd>
2414 <dt><em>Bind</em> (DNS server)</dt>
2416 <dd>Impostare i campi A nelle proprie zone gestite
2417 dal server DNS Bind. Ad es: <tt class=
2418 "docutils literal"><span class=
2419 "pre">papo</span>
2421 "pre">A</span>
2422 <span class="pre">212.22.136.248</span></tt></dd>
2427 <div class="section" id="eseguire-una-query-dns-con-dig">
2428 <h3><a class="toc-backref" href=
2429 "#id43">4.5.2 Eseguire una query DNS con
2430 <tt class="docutils literal"><span class=
2431 "pre">dig</span></tt>::</a></h3>
2433 <p>Per testare la corretta risoluzione dei vostri nomi di
2434 dominio sui relaivi indirizzi IP si usi dig (o altre
2435 utlity, vedere la sezione relativa i DNS). Dig e'
2436 contenuto nel pacchetto <tt class=
2437 "docutils literal"><span class=
2438 "pre">dnsutils</span></tt>.</p>
2441 <p># dig 177.piffa.net</p>
2443 <p>; <<>> DiG 9.5.1-P1 <<>>
2444 177.piffa.net ;; global options: printcmd ;; Got
2445 answer: ;; ->>HEADER<<- opcode: QUERY,
2446 status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2447 QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2449 <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2451 <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2454 <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2457 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2458 <tt class="docutils literal"><span class=
2459 "pre">177.piffa.net.</span>
2461 "pre">0</span>
2462 <span class="pre">IN</span>
2464 "pre">A</span>
2465 <span class="pre">10.10.208.177</span></tt> . Il nome di
2466 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2467 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2468 dovra' essere disponibile un virtual host che corrisponde
2469 al nome <tt class="docutils literal"><span class=
2470 "pre">177.piffa.net</span></tt> (<tt class=
2471 "docutils literal"><span class=
2472 "pre">ServerName</span></tt>) .</p>
2474 <p>Il server DNS utilizzato dal sistema e' evidenziato
2475 dalla stringa: <tt class="docutils literal"><span class=
2476 "pre">;;</span> <span class="pre">SERVER:</span>
2478 "pre">10.10.28.248#53(10.10.28.248)</span></tt> che
2479 dovrebbe corrispondere a quanto impostato nel vostro
2480 <tt class="docutils literal"><span class=
2481 "pre">/etc/resolv.conf</span></tt>. Se il vostro browser
2482 web utilizza un proxy http sara questo a risolvere i nomi
2483 di dominio, tipicamente potete disabilitare l'uso del
2484 proxy per determinati domini nella sezione di
2485 configurazione del browser.</p>
2488 <div class="section" id="id3">
2489 <h3><a class="toc-backref" href=
2490 "#id44">4.5.3 Virtual hosts</a></h3>
2492 <p>Esempio di Virtual host:</p>
2493 <pre class="literal-block">
2494 <VirtualHost *:80 >
2495 ServerName 177.piffa.net
2496 DocumentRoot /var/www/177.piffa.net/
2497 ServerAdmin webmaster@177.piffa.net
2498 </VirtualHost>
2501 <ol class="arabic simple">
2502 <li><tt class="docutils literal"><span class=
2503 "pre"><VirtualHost</span> <span class=
2504 "pre">\*:80</span> <span class="pre">></span></tt>
2505 La prima riga indica l'inizio della stanza relativa al
2506 nostro virtual host, che ascoltera' su qualunque
2507 indirizzo IP (nel caso il server abbia piu' indirizzi
2508 dai quali e' raggiungibile) sulla porta <tt class=
2509 "docutils literal"><span class=
2510 "pre">80</span></tt>.</li>
2512 <li><tt class="docutils literal"><span class=
2513 "pre">Server/name</span></tt> precisa quale sara' il
2514 nome di dominio a cui verra' associato questo sito
2515 rispetto ad altri eventualmente presenti sullo stesso
2518 <li><tt class="docutils literal"><span class=
2519 "pre">DocumentRoot</span></tt> : il path della
2520 directory che contiene le pagine del sito.</li>
2522 <li><tt class="docutils literal"><span class=
2523 "pre">ServerAdmin</span></tt>: l'indirizzo del
2524 webmaster, in modo da poterlo contattare in caso di
2525 problemi col sito.</li>
2527 <li><tt class="docutils literal"><span class=
2528 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2529 chiusura della stanza di definizione del virtual
2533 <p>Quelle che abbiamo appena visto sono le direttive
2534 essenziali per definire un sito virtuale, potrebbe essere
2535 utile aggiungere altre:</p>
2539 <dl class="first docutils">
2540 <dt><tt class="docutils literal"><span class=
2541 "pre">ErrorLog</span> <span class=
2542 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2545 <p class="first last">Log degli errori separato
2546 dai restanti siti web ospitati dal server.</p>
2552 <dl class="first docutils">
2553 <dt><tt class="docutils literal"><span class=
2554 "pre">LogLevel</span> <span class=
2555 "pre">warn</span></tt></dt>
2558 <p class="first last">Livello di importanza degli
2559 eventi loggati: warning <em>attenzione</em> .</p>
2565 <dl class="first docutils">
2566 <dt><tt class="docutils literal"><span class=
2567 "pre">CustomLog</span> <span class=
2568 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2569 <span class="pre">combined</span></tt></dt>
2572 <p class="first last">Log di accesso separati
2573 dagli altri siti, utile anche qua per statistiche
2574 di accesso per il solo sito virtuale.</p>
2580 <p>Potrebbe essere utile modificare le impostazioni di
2581 una intera directory, ad esempio per abilitare
2582 l'<tt class="docutils literal"><span class=
2583 "pre">AuthConfig</span></tt>:</p>
2584 <pre class="literal-block">
2585 <Directory "/var/www/miosito.net/privata">
2586 AllowOverride AuthConfig
2587 Options ExecCGI Indexes MultiViews FollowSymLinks
2593 <p><tt class="docutils literal"><span class=
2594 "pre">AllowOverride</span> <span class=
2595 "pre">AuthConfig</span></tt> ora vale per l'intera
2596 directory, come le altre opzioni.</p>
2600 <div class="section" id="negoziazione-accessi">
2601 <h2><a class="toc-backref" href=
2602 "#id45">4.6 Negoziazione accessi</a></h2>
2604 <p>Tipicamente quando si installa un server web il proprio
2605 desiderio e' di dare accesso ai materiali disponibili al
2606 maggior numero di visitatori possibile. Talvolta pero' puo'
2607 essere utile poter limitare questi accessi, ad esempio per
2608 escludere un <em>bot</em> indesiderato che scansiona
2609 ininterrottamente le nostre pagine o per creare una
2610 <em>Area Riservata</em> i cui materiali non devono essere
2611 disponibile a tutti.</p>
2613 <div class="section" id="limiti-su-base-ip">
2614 <h3><a class="toc-backref" href=
2615 "#id46">4.6.1 Limiti su base IP</a></h3>
2617 <p>La forma piu' semplice di restrizione degli accessi e'
2618 su base degli indirizzi IP dei client: tipicamente i siti
2619 web sono settati per dare accesso a chiunque:</p>
2620 <pre class="literal-block">
2621 <VirtualHost *:80 >
2623 <Directory "/var/www/177.piffa.net">
2627 </VirtualHost>
2630 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2632 <pre class="literal-block">
2633 <VirtualHost *:80 >
2635 <Directory "/var/www/177.piffa.net">
2638 Deny from 192.168.0.1
2640 </VirtualHost>
2643 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2644 materiali dell'intero sito virtuale, oppure potremmo
2645 lavorare su una sola directory:</p>
2646 <pre class="literal-block">
2647 <Directory "/var/www/miosito.net/limitata">
2649 Allow from 192.168.0.0./24
2654 <p>In questo modo solo la classe IP <tt class=
2655 "docutils literal"><span class=
2656 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2657 directory <tt class="docutils literal"><span class=
2658 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2659 relativamente facile per un malintenzionato cambiare il
2660 proprio indirizzo IP, oppure collegarsi da un altra zona.
2661 Meno facile e' accedere ad una classe privata trovandosi
2662 all'esterno di questa, ma ci sono comunque soluzioni piu'
2666 <li>Mod_access: <a class="reference external" href=
2667 "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2669 <li>mod_authz_hosti(Available in Apache 2.1 and later):
2670 <a class="reference external" href=
2671 "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2672 http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2677 <div class="section" id="user-authentication">
2678 <h2><a class="toc-backref" href=
2679 "#id47">4.7 User Authentication</a></h2>
2681 <p>Si puo' negoziare gli accessi ad un area del sito
2682 tramite autenticazione basata su <em>nome utente /
2683 password</em>. Questo puo' venire utile per creare una area
2684 download <em>intranet</em>, alla quale possano accedere
2685 solo gli utenti previsti a prescindere dagli indirizzi IP
2686 dei loro client.</p>
2688 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2689 possibile implementare questo paradigma, per quanto
2690 esistano soluzioni piu' granulari e sofisticate, che
2691 richiedono pero' l'implementazione di interpreti di
2692 linguaggi di programmazione, criptazione delle passwords,
2693 gestione degli utenti ed eventualmente delle sessioni. Mod
2694 auth non richiede l'installazione di niente di tutto
2697 <p>link: <a class="reference external" href=
2698 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2700 <div class="section" id="definire-la-cartella">
2701 <h3><a class="toc-backref" href=
2702 "#id48">4.7.1 Definire la
2705 <p>Decidere quale sara' il <em>path</em> della cartella
2706 da sottoporre ad autenticazione:</p>
2709 <tt class="docutils literal"><span class=
2710 "pre">mkdir</span> <span class=
2711 "pre">/var/www/177.piffa.net/privata</span></tt>
2715 <div class="section" id=
2716 "creazione-del-database-delle-passwords">
2717 <h3><a class="toc-backref" href=
2718 "#id49">4.7.2 Creazione del database
2719 delle passwords</a></h3>
2721 <p>Un modo semplice per gestire una database di
2722 <em>user-id / passwords</em> e' utilizzare l'utility
2723 <tt class="docutils literal"><span class=
2724 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2725 in cui un <em>crypt</em> delle password viene associato
2728 <p>Si dovra' decidere dove tenere questo file, la cosa
2729 importante e' che non sia visibile nel sito web: non deve
2730 essere scaricabile dai visitatori. Deve essere cioe'
2731 all'esterno della <em>DocumentRoot</em>: un buon posto
2732 potrebbe essere la /home dell'utente.</p>
2734 <p>Creiamo (con il <em>flag</em> <tt class=
2735 "docutils literal"><span class="pre">-c</span></tt>) il
2736 file <tt class="docutils literal"><span class=
2737 "pre">/home/utente/passwords</span></tt> con l'utente
2738 <tt class="docutils literal"><span class=
2739 "pre">luca</span></tt>:</p>
2740 <pre class="literal-block">
2741 htpasswd -c /home/utente/passwords luca
2744 <p><tt class="docutils literal"><span class=
2745 "pre">htpasswd</span></tt> ci chiedera' la password da
2746 associare all'utente <tt class=
2747 "docutils literal"><span class="pre">luca</span></tt>.
2748 Per successive modifiche della password o aggiunta di
2749 nuovi utenti non sara' necessario usare il flag
2750 <tt class="docutils literal"><span class=
2751 "pre">-c</span></tt>.</p>
2754 <div class="section" id="id4">
2755 <h3><a class="toc-backref" href=
2756 "#id50">4.7.3 Configurazione di
2759 <p>Ora possiamo passare alla configurazione vera e
2760 propria di Apache, ma con una novita': andremo a inserire
2761 la voce in un <tt class="docutils literal"><span class=
2762 "pre">.htaccess</span></tt> invece che modificare
2763 (tramite una direttiva <tt class=
2764 "docutils literal"><span class=
2765 "pre"><Directory></span></tt> ) il file di
2766 impostazione del virtual-host.</p>
2768 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2769 puo' modificare l'impostazione del virtual host nel file
2770 <tt class="docutils literal"><span class=
2771 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2772 ma spesso il motivo per cui creiamo i virtual hosts e'
2773 ospitare i siti di altri utenti, che possono solo
2774 pubblicare (generalmente tramite <em>FTP</em>) i loro
2775 documenti nella loro <em>DocumentRoot</em>, senza poter
2776 quindi modificare in alcun modo la configurazione del
2779 <p>Dando agli utenti la possibilita' di modificare
2780 (<em>AllowOverride</em>) autonomamente alcuni parametri
2781 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2782 funzionamento del loro spazio web ci togliera'
2783 l'incombenza di dover intervenire continuamente sui vari
2786 <p>Abilitiamo l'AllowOverride nel file di configurazione
2787 del virtual host per la sola directory <tt class=
2788 "docutils literal"><span class=
2789 "pre">privata</span></tt>:</p>
2790 <pre class="literal-block">
2791 <VirtualHost *:80 >
2792 ServerName 177.piffa.net
2793 DocumentRoot /var/www/177.piffa.net/
2794 ServerAdmin webmaster@177.piffa.net
2795 <Directory "/var/www/177.piffa.net/privata">
2796 AllowOverride AuthConfig
2798 </VirtualHost>
2801 <p>Per rendere il cambiamento effettivo sara' necessario
2802 fare un restart / reload di Apache.</p>
2804 <p>Ora sara' possibile, anche per l'utente di sistema,
2805 creare un file <tt class="docutils literal"><span class=
2806 "pre">.htaccess</span></tt> che sara' onorato da
2809 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2810 <pre class="literal-block">
2811 # Messaggio visualizzato al prompt per l'autenticazione
2812 AuthName "Area privata soggetta ad autentizazione"
2813 # tipo di autenticazione da usarsi
2815 # File precedentemente generato con htpasswd
2816 AuthUserFile /home/utente/passwords
2818 # Negoziazione degli accessi
2819 # valid users permette l'accesso agli utenti specificati
2820 # nel file generato da htpasswd
2824 <p>Si noti che non e' necessario fare ripartire Apache
2825 per onorare i cambiamenti (un utente non avrebbe la
2826 possibilita' di farlo!).</p>
2828 <dl class="docutils">
2829 <dt>Oltre a <tt class="docutils literal"><span class=
2830 "pre">valid-users</span></tt> si potrebbe scegliere di
2831 usare la formula <tt class=
2832 "docutils literal"><span class="pre">users</span></tt>
2833 che permette di elencare esplicitamente gli
2836 <dd>require user pippo pluto</dd>
2839 <p>L'utente <em>paperino</em> che fosse comunque presente
2840 nel file generato da htpasswd non potrebbe accedere alla
2843 <dl class="docutils">
2844 <dt>Nel caso ci fossero molti utenti conviene gestirli
2845 tramite <em>gruppi</em>::</dt>
2847 <dd>require group staff studenti</dd>
2850 <p>I gruppi vengono definiti in un file in modo simile a
2851 <tt class="docutils literal"><span class=
2852 "pre">/etc/groups</span></tt> per gli utenti di
2854 <pre class="literal-block">
2856 studenti: lucap federico luca
2859 <p>da richiamare tramite la direttiva <tt class=
2860 "docutils literal"><span class=
2861 "pre">AuthGroupFile</span></tt>.</p>
2865 <div class="section" id="cavets">
2866 <h2><a class="toc-backref" href=
2867 "#id51">4.8 Cavets</a></h2>
2869 <p>Problemi di cache:</p>
2873 <li>Proxy: nei settaggi del browser specificare di non
2874 utilizzare un server proxy http per il sito web locale
2875 (o per gli altri che si stanno monitorando). Se si ha
2876 il controllo del proxy server: stopparlo, ricaricare la
2877 pagina (operazione che fallira'), far ripartire il
2878 proxy, ricaricare la pagina.</li>
2880 <li>Provare con un altro browser, o cercare di svuotare
2881 la cache chiudere/riaprire l'applicativo. Provare a
2882 fermare Apache, ricaricare la pagina (operazione che
2883 fallira'), far ripartire Apache, ricaricare la
2890 <div class="section" id="domain-name-system">
2891 <h1><a class="toc-backref" href=
2892 "#id52">5 Domain Name System</a></h1>
2894 <p>Domain Name System (spesso indicato con DNS) e' un
2895 servizio utilizzato per la risoluzione di nomi di host in
2896 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2897 un sistema <strong>gerarchico</strong> (quindi una struttura
2898 ad albero, simile ai <em>file system</em>)
2899 <strong>distribuito</strong> (ogni server DNS facente parte
2900 del sistema puo' mantenere solo una parte delle informazioni,
2901 ad esempio per la sua sola <em>zona</em>), costituito dai
2904 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2905 rete internet come per qualunque rete locale. Ad esempio
2906 durante la navigazione web un client vorrebbe vedere
2907 l'<em>URL</em> <tt class="docutils literal"><span class=
2908 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2909 connettere via <em>http</em> al server web deve prima
2910 ottenere l'indirizzo IP del <em>server http</em>
2911 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2912 fornisce un IP sbagliato l'utente non potra' raggiungere il
2913 servizio: di fatto e' come se il serve http fosse spento.</p>
2915 <p>Stessa cosa vale per gli altri servizi, come la posta
2916 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2919 <p>Potrebbe verificarsi uno scenario simile a questo: i
2920 vostri server per i siti web funzionano correttamente come i
2921 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2922 e POP3, e tutto il resto. Ma se poi un errore nella
2923 configurazione del DNS non rende raggiungibile l'intero
2924 <em>sito</em>: per l'utente finale e' come se nulla
2927 <p>Infatti quando si parla di un intervento della Polizia
2928 Postale per l'<em>oscuramento</em> di un sito dal punto di
2929 vista pratico questo si traduce generalmente nella rimozione
2930 o mistificazione del record DNS relativo a quel dominio (la
2931 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2932 principali provider internet che forniscono connettivita'
2933 agli utenti italiani, oltre che poter agire direttamente sul
2934 NIC italiano per i domini della TLD <em>.it</em>)</p>
2936 <p>L'operazione di convertire un nome in un indirizzo e'
2937 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2938 detto risoluzione inversa.</p>
2941 Un <em>Registar</em> e' un operatore che ha la facolta'
2942 (accreditamento da parte dell ICANN) di registrare i domini
2943 di secondo livello per gli utenti finali, dietro compenso
2944 di una modica cifra (una decina di euro) che vale come
2945 contributo su base annuale per il mantenimento
2946 dell'infrastruttura.
2949 <div class="section" id="risoluzione-inversa">
2950 <h2><a class="toc-backref" href=
2951 "#id53">5.1 Risoluzione Inversa</a></h2>
2953 <p>Per la risoluzione inversa sono invece i provider di
2954 connettivita' a gestire i DNS: se volete impostare il
2955 <em>PTR</em> associato al vostro indirizzo IP dovete
2956 contattare il vostro provider (tipo <em>telecom</em> per
2957 una connessione ADSL) e <em>non il Registar del vostro
2960 <p>Ad esempio all'IP <tt class=
2961 "docutils literal"><span class=
2962 "pre">212.22.136.248</span></tt> era associato un PTR
2963 <tt class="docutils literal"><span class=
2964 "pre">bender.piffa.net</span></tt>, corrispondente al
2965 record <tt class="docutils literal"><span class=
2966 "pre">212</span></tt> facente parte della zona <tt class=
2967 "docutils literal"><span class=
2968 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2969 provider Tiscali/Nextra proprietario della classe C
2970 <tt class="docutils literal"><span class=
2971 "pre">212.22.136.0</span></tt>. Se avete un solo IP
2972 conviene lasciare al fornitore la gestire del PTR, ma se
2973 avete a disposizione un'itera classe potete chiedere sempre
2974 al vostro provider che vi <em>deleghi</em> la gestione
2975 della zona tramite i vostri DNS.</p>
2977 <p>Per alcuni servizi, ad esempio la spedizione della posta
2978 elettronica, e' richiedeiesto che venga impostata
2979 correttamente l'associazione tra il PTR dell'indirizzo IP
2980 usato dal server di postai e il record A RR al quale questo
2981 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2986 <li><a class="reference external" href=
2987 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2988 2.1 Inconsistent, Missing, or Bad Data</li>
2990 <li><a class="reference external" href=
2991 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2995 <div class="section" id="nomi-di-dominio">
2996 <h2><a class="toc-backref" href=
2997 "#id54">5.2 Nomi di dominio</a></h2>
2999 <p>Un nome a dominio e' costituito da una serie di stringhe
3000 separate da punti, ad esempio bender.piffa.net. I nomi di
3001 dominio si leggono da destra verso sinistra: <em>TLD</em> o
3002 dominio di primo livello <tt class=
3003 "docutils literal"><span class="pre">net</span></tt>,
3004 secondo livello <tt class="docutils literal"><span class=
3005 "pre">piffa</span></tt>, terzo livello <tt class=
3006 "docutils literal"><span class="pre">bender</span></tt>. Il
3007 dominio di primo livello (o TLD, Top Level Domain,
3008 pronunciato <em>tilde</em> in Italia), per esempio .net o
3009 .it sono limitati e decisi direttamente dall'ente
3010 assegnatario ICANN ( Internet Corporation for Assigned
3011 Names and Numbers).</p>
3013 <p>L'utente finale potra' chiedere l'assegnazione (pagando
3014 un contributo al Register preferito per il mantenimento
3015 delle spese dell'infrastruttura) di un dominio di
3016 <em>secondo</em> livello (es <tt class=
3017 "docutils literal"><span class="pre">piffa</span></tt>) di
3018 una delle varie TLD disponibili (noi italiani diciamo
3019 <em>tildi</em>), sempre che non sia gia' stato assegnato a
3022 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
3023 potra' in stanziare domini di terzo livello (es <tt class=
3024 "docutils literal"><span class="pre">bender</span></tt>) e
3025 anche oltre (es www.andrea.bender.piffa.net). Tali records
3026 saranno mantenuti dall'utente, sotto la sua responsbilita':
3027 se il proprio server DNS non fosse raggiungibile o
3028 risultasse mal configurato gli utenti non potrebbero
3029 risolvere / raggiungere i siti di loro interesse.</p>
3031 <p>Tipicamente si ha almeno un server DNS secondario per
3032 garantire la sussistenza del servizio in caso di guasto del
3033 DNS principale. I secondari <em>replicano</em> i dati
3034 presenti nei DNS principali.</p>
3037 <div class="section" id="tipologie-di-record">
3038 <h2><a class="toc-backref" href=
3039 "#id55">5.3 Tipologie di record</a></h2>
3041 <p>Ad un nome DNS possono corrispondere diversi tipi di
3042 informazioni. Per questo motivo, esistono diversi tipi di
3043 record DNS. Ogni voce del database DNS deve essere
3044 caratterizzata da un tipo. I principali tipi sono:</p>
3047 <li>Record A - Indica la corrispondenza tra un nome ed
3048 uno (o piu') indirizzi IP (per la precisione indirizzi
3049 IPv4, ovvero la versione attualmente in uso).</li>
3051 <li>Record MX - (Mail eXchange) indica a quali server
3052 debba essere inviata la posta elettronica per un certo
3055 <li>Record CNAME - Sono usati per creare un alias, ovvero
3056 per fare in modo che lo stesso calcolatore sia noto con
3057 piu' nomi. Uno degli utilizzi di questo tipo di record
3058 consiste nell'attribuire ad un host che offre piu'
3059 servizi un nome per ciascun servizio. In questo modo, i
3060 servizi possono poi essere spostati su altri host senza
3061 dover riconfigurare i client, ma modificando solo il
3064 <li>Record PTR - Il DNS viene utilizzato anche per
3065 realizzare la risoluzione inversa, ovvero per far
3066 corrispondere ad un indirizzo IP il corrispondente nome a
3067 dominio. Per questo si usano i record di tipo "PTR" (e
3068 una apposita zona dello spazio dei nomi
3071 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3073 <li>Record SRV - Identificano il server per un
3074 determinato servizio all'interno di un dominio. Possono
3075 essere considerati una generalizzazione dei record
3078 <li>Record TXT - Associano campi di testo arbitrari ad un
3079 dominio. Questi campi possono contenere una descrizione
3080 informativa oppure essere utilizzati per realizzare
3084 <p>Vi sono anche tipi di record "di servizio", necessari al
3085 funzionamento del database distribuito: * Record NS -
3086 Utilizzato per indicare quali siano i server DNS
3087 autoritativi per un certo dominio, ovvero per delegarne la
3088 gestione. * Record SOA - (Start of Authority) usato per la
3089 gestione delle zone DNS.</p>
3092 <div class="section" id="utilizzo">
3093 <h2><a class="toc-backref" href=
3094 "#id56">5.4 Utilizzo</a></h2>
3096 <p>I computer vengono identificati in rete grazie agli
3097 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3098 utenti come riferimento per i vari server. Ad esempio
3099 sarebbe scomodo riferirsi al motore di ricerca Goggle con
3100 uno dei suoi IP: <tt class="docutils literal"><span class=
3101 "pre">74.125.43.104</span></tt>, e' preferibile usare il
3102 nome di dominio <em>www.google.com</em>:</p>
3103 <pre class="literal-block">
3104 ping -c 1 www.google.com
3105 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3109 <div class="section" id="risoluzione-dei-nomi-di-dominio">
3110 <h2><a class="toc-backref" href=
3111 "#id57">5.5 Risoluzione dei nomi di
3114 <p>Ci sono vari strumenti per interrogare i server DNS e
3115 ottenere l'indirizzo IP associato al nome di dominio che ci
3117 <pre class="literal-block">
3118 $ host www.piffa.net
3119 www.piffa.net is an alias for piffa.net.
3120 piffa.net has address 65.98.21.97
3121 piffa.net mail is handled by 10 65.98.21.97
3124 $ nslookup www.piffa.net
3125 Server: 192.168.0.10
3126 Address: 192.168.0.10#53
3128 Non-authoritative answer:
3129 www.piffa.net canonical name = piffa.net.
3131 Address: 65.98.21.97
3136 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
3137 ;; global options: +cmd
3139 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
3140 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3142 ;; QUESTION SECTION:
3143 ;www.piffa.net. IN A
3146 www.piffa.net. 3489 IN CNAME piffa.net.
3147 piffa.net. 3489 IN A 65.98.21.97
3149 ;; AUTHORITY SECTION:
3150 piffa.net. 86289 IN NS ns2.mydomain.com.
3151 piffa.net. 86289 IN NS ns1.mydomain.com.
3152 piffa.net. 86289 IN NS ns4.mydomain.com.
3153 piffa.net. 86289 IN NS ns3.mydomain.com.
3155 ;; ADDITIONAL SECTION:
3156 ns1.mydomain.com. 96208 IN A 64.94.117.193
3157 ns2.mydomain.com. 96208 IN A 64.94.31.67
3158 ns3.mydomain.com. 96208 IN A 66.150.161.137
3159 ns4.mydomain.com. 96208 IN A 63.251.83.74
3161 ;; Query time: 1 msec
3162 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3163 ;; WHEN: Sun May 10 21:23:11 2009
3164 ;; MSG SIZE rcvd: 209
3167 <p>Lo strumento piu' esaustivo e' <tt class=
3168 "docutils literal"><span class="pre">dig</span></tt>,
3169 installabile con il pacchetto <tt class=
3170 "docutils literal"><span class="pre">dnsutils</span></tt>
3174 <div class="section" id="dig">
3175 <h2><a class="toc-backref" href=
3176 "#id58">5.6 Dig</a></h2>
3178 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3179 "docutils literal"><span class="pre">dig</span></tt> per
3180 l'interrogazione dei DNS Server:</p>
3181 <pre class="literal-block">
3184 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
3185 ;; global options: +cmd
3187 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
3188 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3190 ;; QUESTION SECTION:
3191 ;www.google.it. IN A
3194 www.google.it. 250683 IN CNAME www.google.com.
3195 www.google.com. 334819 IN CNAME www.l.google.com.
3196 www.l.google.com. 186 IN A 74.125.43.103
3197 www.l.google.com. 186 IN A 74.125.43.104
3198 www.l.google.com. 186 IN A 74.125.43.147
3199 www.l.google.com. 186 IN A 74.125.43.99
3201 ;; AUTHORITY SECTION:
3202 l.google.com. 80856 IN NS f.l.google.com.
3203 l.google.com. 80856 IN NS d.l.google.com.
3204 l.google.com. 80856 IN NS b.l.google.com.
3205 l.google.com. 80856 IN NS c.l.google.com.
3206 l.google.com. 80856 IN NS a.l.google.com.
3207 l.google.com. 80856 IN NS e.l.google.com.
3208 l.google.com. 80856 IN NS g.l.google.com.
3210 ;; Query time: 1 msec
3211 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3212 ;; WHEN: Sun May 10 21:34:47 2009
3213 ;; MSG SIZE rcvd: 255
3216 <dl class="docutils">
3219 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3220 <em>root server</em> utilizzati. I root server sono i
3221 server che mantengono le informazioni sui domini di primo
3222 livello (TLD) e sono quindi il punto di partenza per
3223 scorrere nella directory dei DNS per recuperare le
3224 informazioni (tipicamente un campo <tt class=
3225 "docutils literal"><span class="pre">A</span></tt> per un
3226 indirizzo IP) che ci servono per raggiungere un certo
3235 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3236 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3237 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3238 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3239 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3240 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3241 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3242 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3243 J.ROOT-SERVERS.NET. . 192032 IN NS
3244 D.ROOT-SERVERS.NET.</p>
3249 <dl class="docutils">
3250 <dt>dig @nome_dns</dt>
3252 <dd>Permette di fare una query ad un server dns
3253 particolare. Es: <tt class=
3254 "docutils literal"><span class="pre">dig</span>
3255 <span class="pre">@151.99.25.1</span> <span class=
3256 "pre">www.google.it</span></tt></dd>
3258 <dt>dig MX www.google.it</dt>
3260 <dd>Chiede un campo in particolare, in questo caso il
3263 <dt>dig ANY www.google.it</dt>
3265 <dd>Chiede tutti i campi, non solo i campi
3268 <dt>dig -x 74.125.43.104</dt>
3270 <dd>Effettua una richiesta inversa: dall'IP al PTR
3275 <div class="section" id="resolv-conf">
3276 <h2><a class="toc-backref" href=
3277 "#id59">5.7 resolv.conf</a></h2>
3279 <p>Il file <tt class="docutils literal"><span class=
3280 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
3281 sul dns usato dal sistema, in genere anche altre
3282 applicazioni che devono effettuare query DNS leggono
3283 resolv.conf per conoscere l'ubicazione del DNS.</p>
3285 <p>/etc/resolv.conf:</p>
3289 <li><tt class="docutils literal"><span class=
3290 "pre">nameserver</span></tt>: indica il nameserver da
3291 utilizzare, indicato con l'indirizzo IP.</li>
3293 <li><tt class="docutils literal"><span class=
3294 "pre">domain</span></tt>: indica il nome di dominio
3295 della rete attuale, vedi voce successiva.</li>
3297 <li><tt class="docutils literal"><span class=
3298 "pre">search</span></tt>: nome di dominio usato dalla
3299 rete sul quale cercare gli hosts. Ad esempio se
3300 impostato su <tt class="docutils literal"><span class=
3301 "pre">piffa.net</span></tt> pingando l' host <tt class=
3302 "docutils literal"><span class="pre">bender</span></tt>
3303 viene automaticamente fatto un tentativo di ricerca per
3304 <tt class="docutils literal"><span class=
3305 "pre">bender.piffa.net</span></tt>.</li>
3309 <p>Predisponendo l'infrastruttura di rete della vostra LAN
3310 e' consigliabile impostare sempre almeno un DNS cache sul
3311 vostro server locale per i vari client. In questo modo in
3312 caso di malfunzionamento del DNS o necessita' di
3313 intervenire / sostituire i DNS non sara' piu' necessario
3314 dover reimpostare ogni singolo client della LAN: bastera'
3315 intervenire sul server DNS cache, ad esempio per utilizzare
3316 un nuovo forwarder, o modificare al volo un record DNS. La
3317 modifica, anche detta <em>mascheramento</em>, di un record
3318 come il <em>server smtp</em> o un <em>MX</em> potrebbe
3319 tirarvi rapidamente fuori dai guai nel caso di un problema
3320 improvviso con la posta elettronica o qualunque altro
3321 servizio che possiate reindirizzare col DNS.</p>
3323 <p>Utilizzare un server DHCP e una DNS cache come
3324 <tt class="docutils literal"><span class=
3325 "pre">Dnsmasq</span></tt> possono permettervi di risolvere
3326 al volo molte delle problematiche relative alla
3327 configurazione della vostra LAN: ad esempio dover
3328 intervenire manualmente su decine di client per modificare
3329 le impostazioni di SMTP | gateway | DNS | proxy.</p>
3331 <p>Si veda anche la pagina man di resolv.conf.</p>
3333 <div class="warning">
3334 <p class="first admonition-title">Avvertenza</p>
3336 <p class="last">Attenzione: se si usa un client DHCP, ppp
3337 (ADSL compresa) o simile questo file potrebbe' essere
3338 riscritto automaticamente in base a quanto ottenuto dal
3339 DHCP. Si veda la documentazione del pacchetto <tt class=
3340 "docutils literal"><span class=
3341 "pre">resolvconf</span></tt>.</p>
3345 <div class="section" id="etc-hosts">
3346 <h2><a class="toc-backref" href=
3347 "#id60">5.8 /etc/hosts</a></h2>
3349 <p>Tabella statica per l'associazione tra IP e nomi di
3351 <pre class="literal-block">
3356 127.0.0.1 localhost.localdomain localhost 10.10.208.162
3357 daniela daniela.piffa.net 10.10.208.254 mirror
3358 mirror.piffa.net 91.191.138.15 thepiratebay.org
3359 192.168.0.11 chrome chrome.mydomain.com
3362 <p>Il contenuto del file e' un associazione tra un
3363 <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3364 es: <tt class="docutils literal"><span class=
3365 "pre">mirror</span></tt> o veri e propi nomi di dominio
3366 <tt class="docutils literal"><span class=
3367 "pre">mirror.piffa.net</span></tt>. Si puo inserire un nome
3368 semplice come <em>casa</em> per riferirsi ad un host che si
3369 ha necessita' di contattare spesso, oppure mappare un nome
3370 di dominio completo su un indirizzo IP.</p>
3372 <p>Il problema e' la gestione di questo file su molti
3373 hosts: quando gli host cambiano IP si devono aggiornare
3374 manualmente i records, operazione in se' non
3375 particolarmente gravosa ma che andra' fatta per ogni client
3376 della vostra LAN. Un metodo semplice per distribuire questo
3377 file e' utilizzare <tt class=
3378 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
3379 questo infatti legge e onora il file <tt class=
3380 "docutils literal"><span class="pre">hosts</span></tt> che
3381 avete prodotto e lo rende disponibile ai clients tramite le
3384 <p>Dnsmasq lavora come un server DNS, i vostri client lo
3385 interrogheranno per tradurre nomi di host e domini in
3386 indirizzi IP, risolvendo il problema della
3387 <em>distribuzione</em> del file <tt class=
3388 "docutils literal"><span class="pre">hosts</span></tt> tra
3389 molteplici clients. Infatti il servizio DNS indica appunto
3390 una <em>directory distribuita</em> per la risoluzione dei
3391 nomi di dominio, risolvendo i problemi dell'aggiornamento e
3392 diffusione dei continui cambiamenti di questa.</p>
3394 <p>Modificare la risoluzione di un nome di dominio
3395 esistente (ad esempio riconducendola a un IP interno) e' un
3396 modo drastico e funzionale per <em>annullarlo</em>
3397 rendendolo non disponibile alla propria rete locale. Ad
3398 esempio aggiungere al file <tt class=
3399 "docutils literal"><span class=
3400 "pre">/etc/hosts</span></tt>:</p>
3401 <pre class="literal-block">
3402 127.0.0.1 www.facebook.com
3405 <p>Impedira' agli utenti della LAN di raggiungere
3406 <em>facebook</em>, ora reindirizzato a <tt class=
3407 "docutils literal"><span class=
3408 "pre">localhost</span></tt>.</p>
3410 <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3411 server HTTP pubblico usato per i downloads (ad esempio un
3412 mirror della propia distribuzione come <tt class=
3413 "docutils literal"><span class=
3414 "pre">ftp.it.debian.org</span></tt>) a un equivalente
3415 mirror creato all'interno della rete locale, riducendo il
3416 traffico verso l'esterno e aumentando notevolmente la
3417 velocita' di scaricamento.</p>
3420 <div class="section" id="hostname">
3421 <h2><a class="toc-backref" href=
3422 "#id61">5.9 Hostname</a></h2>
3424 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3425 (e modificabile) con il comando <tt class=
3426 "docutils literal"><span class="pre">hostname</span></tt>.
3427 Quando utilizzate a una shell su un host in genere
3428 l'hostname compare nel prompt della shell.</p>
3430 <p>Per visualizzare il nome dell'host su cui si sta
3431 operando si digiti semplicemnte <tt class=
3432 "docutils literal"><span class="pre">hostname</span></tt>,
3433 lo stesso comando con un oggetto modifica temporaneamente
3434 il nome dell'host. Per modificare in modo permanente il
3435 nome del computer si modifichi il contenuto del file
3436 <tt class="docutils literal"><span class=
3437 "pre">/etc/hostname</span></tt>.</p>
3439 <p>Si faccia attenzione a non aver un hostname puramente
3440 numerico: ad es. <tt class="docutils literal"><span class=
3441 "pre">161</span></tt>. E' opportuno che il nome sia
3442 comunque un alfanumerico: <tt class=
3443 "docutils literal"><span class="pre">host-161</span></tt> o
3446 <div class="section" id="fqdn">
3447 <h3><a class="toc-backref" href=
3448 "#id62">5.9.1 FQDN</a></h3>
3450 <p>Per semplicita' gli host sono generalemente
3451 raggiungibili dall'esterno mappando il loro IP su un nome
3452 di dominio FQDN: fully qualified domain name, composto
3453 generalmente da <em>hostname</em>.``domain-name``, ad es.
3454 <em>bender</em>.``piffa.net``.</p>
3456 <p>Alcuni servizi internet fanno affidamento sul PTR
3457 dell'IP del server per cercare una conferma che il
3458 <em>servizio</em> sia veramente chi afferma di essere (ad
3461 <p>Non e' automatico che un servizio, ad esempio un
3462 server di posta, si qualifichi leggendo il contenuto del
3463 file <tt class="docutils literal"><span class=
3464 "pre">hostname</span></tt> aggiungendo come suffisso il
3465 dominio della rete di cui fa parte l' host: a volte
3466 questo parametro puo' essere specificato nel file di
3467 configurazione del servizio:</p>
3468 <pre class="literal-block">
3469 * Squid (HTTP proxy): ``visible_hostname``
3471 * Postfix (SMTP server): ``myhostname``
3474 <p>I motivi sono diversi, senza entrare nel dettaglio dei
3475 vari protocolli si pensi comunque che un host ha sempre
3476 un solo nome, ma puo' avere un numero variabile di
3477 <em>device di rete</em> sia fisici che virtuali con
3478 relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3484 <div class="section" id="dnsmasq">
3485 <h1><a class="toc-backref" href=
3486 "#id63">6 DNSmasq</a></h1>
3488 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3489 forwarder, server DHCP, e' caratterizzato dalla facilita' di
3490 configurazione, limitato uso di risorse, adattabilita' a
3491 connessioni <em>dinamiche</em> come ADSL o altre punto a
3492 punto (anche via cellulari) per condividere rapidamente la
3493 rete (cosa molto utile se ci dovesse trovare a ridare
3494 connettetivita' a una rete momentaneamente sprovvista), dalla
3495 possibilita' di modificare rapidamente i record DNS serviti
3496 alla rete anche grazie alla distribuzione del file <tt class=
3497 "docutils literal"><span class="pre">/etc/hosts</span></tt>
3498 locale. Puo' essere anche utilizzato come <cite>server per il
3500 <http://www.debian-administration.org/articles/478>_</cite>
3503 <p>Dnsmasq e' un interessante alternativa all'uso del server
3504 DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3505 autoritativo) accompagnato dal server DHCPd. I vantaggi
3509 <li>Leggerezza: puo' essere fatto girare su una macchina
3510 relativamente debole in caso di bisogno.</li>
3512 <li>Rapidita' di configurazione (in particolare per servire
3513 dei record A / MX alla rete, modificando al volo i valori
3514 originali ospitati sul server DNS pubblico).</li>
3516 <li>Ben integrato con connessioni PPP : e' ingrado di
3517 rilevare i cambiamenti dei dns suggeriti e impostarli come
3518 forwarders (utile se dovete rendere disponibile rapidamente
3519 una connessione a internet a una rete in difficolta').</li>
3522 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3523 particolare quando si deve intervenire in una rete
3524 pre-esistente in cui il server principale e' in crisi: si
3525 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3526 <em>mascherare</em> i servizi al momento non disponibili.
3527 Molto utile per scopi didattici, sopratutto per testare
3528 server SMTP impostando al volo i campi MX per nomi di dominio
3531 <div class="section" id="configurazione">
3532 <h2><a class="toc-backref" href=
3533 "#id64">6.1 Configurazione</a></h2>
3535 <p>Vediamo alcune direttive di basi del file di
3536 configurazione <tt class="docutils literal"><span class=
3537 "pre">/etc/dnsmasq.conf</span></tt> utili per la
3538 configurazione sia del DNS cache che per il DHCP
3541 <dl class="docutils">
3542 <dt>domain-needed</dt>
3544 <dd>Non inoltrare query ai server DNS esterni per nomi
3545 semplici (es andrea, portatile, pippo) che verranno
3546 risolti solo in locale o causeranno direttamente una
3547 risposta <em>not found</em> .</dd>
3551 <dd>Simile alla voce precedente ma per i reverse
3556 <dd>Nome di dominio della rete da passare ai client.</dd>
3558 <dt>expand_hosts</dt>
3560 <dd>Aggiunge il <tt class="docutils literal"><span class=
3561 "pre">nome</span> <span class="pre">host</span></tt> (
3562 <tt class="docutils literal"><span class=
3563 "pre">/etc/hostname</span></tt>) dei client al nome di
3564 dominio per qualificarli in rete, senza bisogno di dover
3565 comporre a un elenco statico di record nel file
3566 <tt class="docutils literal"><span class=
3567 "pre">/etc/hosts</span></tt> o nello stesso file di
3568 configurazione di dnsmasq. Es: se un vostro client si
3569 chiama <tt class="docutils literal"><span class=
3570 "pre">chrome</span></tt> e il vostro dominio <tt class=
3571 "docutils literal"><span class=
3572 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
3573 il campo <em>A</em> per il dominio <tt class=
3574 "docutils literal"><span class=
3575 "pre">chrome.piffa.net</span></tt> diretto all'ip che
3576 verra' assegnato al client.</dd>
3580 <div class="section" id="dhcp">
3581 <h2><a class="toc-backref" href=
3582 "#id65">6.2 DHCP</a></h2>
3584 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3585 al file di configurazione il <em>range</em> degli IP che si
3586 vuole assegnare ai client con il <em>lease time</em> (tempo
3587 di rilascio: quanto a lungo saranno validi gli IP
3588 assegnati) espresso in ore.</p>
3590 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3591 presente <strong>un solo server DHCP</strong>, o per meglio
3592 dire qualunque server DHCP ascolta sul broadcast <tt class=
3593 "docutils literal"><span class=
3594 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
3595 un pacchetto di richiesta DHCP. Quindi non fate partire
3596 inavvertitamente un server DHCP in una rete gia' servita e
3597 <strong>non vi azzardate ad andare in giro con un portatile
3598 con un server DHCP attivo</strong> nelle reti altrui.
3599 Questo vale anche per i laboratori di informatica dei corsi
3600 di reti: non fate partire il vostro server DHCP se siete
3601 collegati alla rete interna!</p>
3603 <p>/etc/dnsmasq.conf (riga 118):</p>
3604 <pre class="literal-block">
3605 dhcp-range=192.168.0.20,192.168.0.50,24h
3609 <div class="section" id="dns-cache">
3610 <h2><a class="toc-backref" href=
3611 "#id66">6.3 DNS cache</a></h2>
3613 <p>Dnsmasq lavora di default come cache dns: inserire al
3614 file <tt class="docutils literal"><span class=
3615 "pre">/etc/resolv.conf</span></tt> il nameserver localhost
3616 in cima alla lista dei <em>nameserver</em> disponibili.</p>
3619 nameserver 127.0.0.1
3622 <p>Questo pero' potrebbe essere problematico se un altro
3623 servizio, ad esempio il DHCP client, riscrive il contenuto
3624 del file <tt class="docutils literal"><span class=
3625 "pre">/etc/resolv.conf</span></tt>. Per superare il
3626 problema si aggiunga (riga 20) al file di configurazione
3627 <tt class="docutils literal"><span class=
3628 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
3629 <pre class="literal-block">
3630 prepend domain-name-servers 127.0.0.1;
3633 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3634 (per la connessione ADSL) a intervenire sul file <tt class=
3635 "docutils literal"><span class=
3636 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
3637 <tt class="docutils literal"><span class=
3638 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3639 <tt class="docutils literal"><span class=
3640 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
3641 internet e' ADSL raramente dovreste aver bisogno di
3642 cambiare i DNS una volta impostati (a meno che non usiate
3647 <div class="section" id="bind-dns-autoritativo">
3648 <h1><a class="toc-backref" href=
3649 "#id67">7 Bind : DNS Autoritativo</a></h1>
3651 <p>Le soluzioni viste possono bastare per la rete locale o
3652 per fare delle prove, ma prima o poi verra' il momento in cui
3653 si e' chiamati a gestire dei domini su internet: lo standard
3654 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3657 <p>Installare i pacchetti:</p>
3658 <pre class="literal-block">
3662 <div class="section" id="id5">
3663 <h2><a class="toc-backref" href=
3664 "#id68">7.1 DNS cache</a></h2>
3666 <p>Bind appena installato funzionera' come DNS cache: si
3667 faccia un test con un <tt class=
3668 "docutils literal"><span class="pre">dig</span>
3669 <span class="pre">@localhost</span></tt> . Bind a
3670 differenza di Dnsmasq e' autonomo: non ha bisogno di
3671 forwardare (inoltrare) le query a un DNS esterno: queste
3672 verranno risolte direttamente da Bind partendo dai <em>DNS
3673 root servers</em>.</p>
3675 <p>E' comunque possibile impostare dei DNS forwarders,
3676 tipicamente i DNS server forniti dal proprio provider, per
3677 velocizzare le query:</p>
3679 <p>/etc/bind/named.conf.options (riga 13):</p>
3680 <pre class="literal-block">
3686 <p>Nel caso si voglia usare Bind solo come server DNS cache
3687 per la propria LAN senza ospitare delle zone DNS pubbliche
3688 sara' il caso di limitare gli accessi al server alla sola
3691 <p>/etc/bind/named.conf.options (riga 19):</p>
3692 <pre class="literal-block">
3693 // Se il proprio server ha IP 10.10.208.254
3694 // sulla rete LAN privata:
3695 listen-on { 10.10.208.254; }
3698 <p>E non si lasci il server in ascolto su uno degli
3699 eventuali indirizzi IP pubblici.</p>
3701 <p>Se questo non fosse possibile si puo' sempre lavorare su
3702 una <em>acl</em>:</p>
3704 <p>/etc/bind/named.conf</p>
3705 <pre class="literal-block">
3707 10.10.208.0/24 ; 127.0.0.0/8 ;
3711 <p>Per poi aggiungere all'interno della stanza options la
3712 direttiva che abilita' l'entita' <tt class=
3713 "docutils literal"><span class=
3714 "pre">localnet</span></tt>:</p>
3716 <p>/etc/bind/named.conf.options</p>
3717 <pre class="literal-block">
3718 allow-query {"localnet" ;} ;
3722 <div class="section" id="ospitare-una-zona">
3723 <h2><a class="toc-backref" href=
3724 "#id69">7.2 Ospitare una zona</a></h2>
3726 <p>Se avete acquistato un nome di dominio e vi serve un
3727 software DNS per gestirlo Bind e' la scelta piu' diffusa.
3728 Ora vedremo come configurare una <em>zona</em> (come
3729 piffa.net) in modo che Bind sia autoritativoper questa,
3730 rispondendo alle query DNS di tutta la rete internet.</p>
3732 <div class="section" id="named-conf-local">
3733 <h3><a class="toc-backref" href=
3734 "#id70">7.2.1 named.conf.local</a></h3>
3736 <p>Prima di tutti impostiamo il server bind per gestire
3737 la zona, per non fare confusione e' opportuno inserire le
3738 propie zone DNS nel file <tt class=
3739 "docutils literal"><span class=
3740 "pre">named.conf.local</span></tt> e non in <tt class=
3741 "docutils literal"><span class=
3742 "pre">named.conf</span></tt>.</p>
3744 <p>named.conf.local:</p>
3745 <pre class="literal-block">
3747 // Do any local configuration here
3750 // Consider adding the 1918 zones here, if they are not used in your
3752 //include "/etc/bind/zones.rfc1918";
3756 file "/etc/bind/pz/piffa.net";
3760 <dl class="docutils">
3761 <dt>type master</dt>
3763 <dd>Il nostro server DNS sara' il principale, al quale
3764 poi potremo affiancare dei DNS secondari nel caso
3765 questo non sia disponibile.</dd>
3767 <dt>file "/etc/bind/pz/piffa.net"</dt>
3769 <dd>Dove verranno inserite le informazioni vere e
3770 propie di questa zona.</dd>
3774 <div class="section" id="configurazione-della-zona">
3775 <h3><a class="toc-backref" href=
3776 "#id71">7.2.2 Configurazione della
3779 <p>Ora dovremo preparare il file contenente i record DNS
3780 della zona <em>piffa.net</em>, come abbiamo indicato
3781 prima questi saranno contenuti nel file <tt class=
3782 "docutils literal"><span class=
3783 "pre">/etc/bind/pz/piffa.net</span></tt> . Tenere le zone
3784 dentro una sottocartella e' buona abitudine, usare
3785 <tt class="docutils literal"><span class=
3786 "pre">pz</span></tt> per queste e' una vecchia
3790 <pre class="literal-block">
3791 ; Zona per il dominio di secondo livello piffa.net
3794 @ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
3796 8H ; refresh (8 hours)
3797 2H ; retry (2 hours)
3798 4W ; expire (4 weeks)
3799 1D ; minimum (1 day)
3806 TXT "Piffanet main site"
3812 test.piffa.net. A 94.23.63.105
3813 *.piffa.net. A 94.23.63.105 ; *catch all domain
3818 <p>All'interno di questo file si possono inserire dei
3819 commenti con il carattere <tt class=
3820 "docutils literal"><span class="pre">;</span></tt>
3821 (punto-e-virgola), si faccia attenzione alla rigida
3822 sintassi: apertura e chiusura delle parentesi tonde nella
3823 parte <tt class="docutils literal"><span class=
3824 "pre">IN</span> <span class="pre">SOA</span></tt>, uso
3825 del <tt class="docutils literal"><span class=
3826 "pre">punto</span></tt> finale per precisare un nome di
3827 dominio specifico (<em>FQDN</em>: Fully-qualified Domain
3828 Name) come <tt class="docutils literal"><span class=
3829 "pre">test.piffa.net.</span></tt> a differenza degli
3830 altri domini di terzo livello come <tt class=
3831 "docutils literal"><span class=
3832 "pre">pop,imap,smtp</span></tt> .</p>
3834 <p>La zona inizia con una direttiva <tt class=
3835 "docutils literal"><span class="pre">$TTL</span>
3836 <span class="pre">3D</span></tt> (RFC 2308) che indica la
3837 durata (in questo caso tre giorni) che ogni record
3838 dovrebbe avrebbe nella cache degli altri serber DNS.
3839 Questo valore dovrebbe essere superiore a un giorno, se
3840 non modificate spesso i valori dei vostri record DNS e'
3841 consigliabile settarlo a 2/3 settimane in modo da
3842 limitare la frequenza delle query al propio server.
3843 Questo parametro puo' essere modificato per singoli
3845 <pre class="literal-block">
3846 $TTL 3D ; 3 giorni: default se non specificato altrimenti
3847 rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
3848 lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
3849 normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
3852 <p>Segue poi il nome della zona, indicato con la
3853 <tt class="docutils literal"><span class=
3854 "pre">@</span></tt> per richiamare la zona originale
3855 precisata nel file <tt class=
3856 "docutils literal"><span class=
3857 "pre">named.conf.options</span></tt> . Segue il campo
3858 <tt class="docutils literal"><span class=
3859 "pre">SOA</span></tt>.</p>
3861 <div class="section" id="soa-start-of-authority-record">
3862 <h4><a class="toc-backref" href=
3863 "#id72">7.2.2.1 SOA: Start of
3864 Authority Record</a></h4>
3866 <p>Il record SOA puo' comparire solo una volta in una
3867 zona, contiene informazioni relative all'autorita' del
3870 <dl class="docutils">
3871 <dt>ns1.piffa.net. name-server</dt>
3873 <dd>primary master DNS di questo dominio.</dd>
3875 <dt>hostmaster.piffa.net. email-addr</dt>
3877 <dd>email-addr: indirizzo email della persona
3878 responsabile di questa zona, il primo punto viene
3879 tradotto in una <em>chiocciola</em> <tt class=
3880 "docutils literal"><span class="pre">@</span></tt>
3881 dato che questo carattere ha un'altro utilizzo
3882 all'interno di questo file. Il referente della zona
3883 <strong>deve</strong> essere un email valido e
3884 controllato, come consuetudine si usa <tt class=
3885 "docutils literal"><span class=
3886 "pre">hostmaster@dominio.tilde</span></tt> .</dd>
3888 <dt>200905245 serial number</dt>
3890 <dd>Questo valore serve per indicare quando e' stato
3891 modificato questo file di configurazione, secondo il
3892 formato <tt class="docutils literal"><span class=
3893 "pre">yyyymmddss</span></tt>: <tt class=
3894 "docutils literal"><span class="pre">yyyy</span></tt>
3895 = anno, ''mm'' = mese, ''dd'' = giorno, ''ss'' =
3896 seriale. Il seriale che deve essere sempre
3897 specificato anche per una cifra, va incrementato di
3898 una unita' nel caso vengano fatte piu' modifiche
3899 <em>nello stesso giorno</em>.</dd>
3903 <dd>Indica ai DNS secondari quanto tempo attendere
3904 per cercare di aggiornare i loro dati con il DNS
3909 <dd>Intervallo di tempo per il DNS slave (secondario)
3910 da aspettare prima di cercare di ricontattare il
3911 <em>master</em> in caso di problemi col
3912 <em>refresh</em>.</dd>
3916 <dd>Indica quando i dati dei dns secondarinon sono
3917 piu' autoritativi in caso di impossibilita' degli
3918 <em>slaves</em> di ri-aggiornarsi con il
3919 <em>master</em>. Consigliato un valore di 2/4
3924 <dd>Questo valore indicava il TTL fino alla versione
3925 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3926 durata del <em>negative caching</em>, quanto i
3927 resolvers (ad esempio un server dns cache) puo'
3928 mantenere un record <em>negativo</em> (che non indica
3929 la corrispondenza tra un nome di dominio e un ip, ma
3930 la non esistenza del record). Nell'uso per il
3931 negative caching viene fissato un valore massimo di 3
3932 ore dalla RFC 2308.</dd>
3936 <div class="section" id="altri-campi">
3937 <h4><a class="toc-backref" href=
3938 "#id73">7.2.2.2 Altri campi:</a></h4>
3940 <p>All'interno della zona possono essere utilizati vari
3941 tipi di records (RR):</p>
3943 <dl class="docutils">
3946 <dd>Informazioni testuali associate ad un record</dd>
3950 <dd>Name Server della zona. Non deve essere un
3955 <dd>Indirizzo ipv4 da associare al record</dd>
3959 <dd>Indirizzo ipv6 da associare al record</dd>
3963 <dd>Canonical Name: un alias per un host: ad esempio
3964 per il dominio piffa.net possiamo settare degli alias
3965 come <tt class="docutils literal"><span class=
3966 "pre">www.piffa.net,</span> <span class=
3967 "pre">http.piffa.net,</span> <span class=
3968 "pre">virtual.piffa.net,</span> <span class=
3969 "pre">ftp.piffa.net,</span> <span class=
3970 "pre">imap.piffa.net</span></tt>. Comodo quando
3971 diversi alias sono sempre riferiti allo stesso
3976 <dd>Mail Exchanger: server di posta che si occupera'
3977 della posta elettronica per questo dominio.E'
3978 opportuno avere almeno un server di posta di back-up,
3979 per indicare la priorita' di un MX rispettoad un
3980 altro si usa un valore di 2 cifre: il valore piu'
3981 basso indica priorita' piu' bassa. Es: <tt class=
3982 "docutils literal"><span class=
3983 "pre">MX</span> <span class=
3984 "pre">10</span> <span class=
3985 "pre">smtp.piffa.net.</span></tt> per il server SMTP
3986 principale e <tt class=
3987 "docutils literal"><span class="pre">MX</span>
3988 <span class="pre">40</span> <span class=
3989 "pre">smtp2.piffa.net</span></tt> per il secondario.
3990 Non deve essere un cname.</dd>
3994 <dd>Reverse look-up, usato per la mappatura inversa
3995 di un indirizzo ip a una stringa identificativa
3996 dell'host. Si noti che per poter modificare questi
3997 record si deve avere <em>in gestione</em> la <em>zona
3998 IP</em>, se cosi' non fosse si dovra' chiedere al
3999 propio provider la modifica di questo record per il
4000 propio ip. Links: <a class="reference external" href=
4001 "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
4007 <div class="section" id="dns-slave">
4008 <h2><a class="toc-backref" href=
4009 "#id74">7.3 DNS slave</a></h2>
4011 <p>Data l'importanza del servizio DNS e' necessario avere
4012 ridondanza per i server DNS che ospitano i vostri dati: in
4013 caso di indisponibilita' del server <em>master</em> (nel
4014 caso fosse il solo a tenere i dati questo comporterebbe la
4015 <em>scomparsa</em> di tutti i servizi / host da esso
4016 seviti!) il client potrebbe contattare uno degli
4019 <p>Gli slave recuperano i dati dei recordos RR direttamente
4020 dal master e non sara' quindi necessario dover mantenere
4021 manualmente il file di configurazione della zona sugli
4022 slaves, ogni volta che aggiorneremo il master questi dati
4023 si propaghera' agli slaves automaticamente.</p>
4025 <p>Per attivare uno <em>slave</em> per la nostra zona di
4026 esempio <tt class="docutils literal"><span class=
4027 "pre">piffa.net</span></tt> si inserisca nel file
4028 <tt class="docutils literal"><span class=
4029 "pre">named.conf.local</span></tt> dello slave server:</p>
4030 <pre class="literal-block">
4033 file "/etc/bind/pz/piffa.net";
4034 masters { 192.168.0.1; };
4038 <p>Facendo ripartire Bind il file <tt class=
4039 "docutils literal"><span class=
4040 "pre">/etc/bind/pz/piffa.net</span></tt> viene creato
4041 automaticamente.</p>
4043 <p>Segue un estratto di <tt class=
4044 "docutils literal"><span class=
4045 "pre">/var/log/syslog</span></tt> al <tt class=
4046 "docutils literal"><span class="pre">restart</span></tt> di
4047 <tt class="docutils literal"><span class=
4048 "pre">bind9</span></tt> sullo slave:</p>
4049 <pre class="literal-block">
4050 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
4051 ... slave named[2256]: running
4052 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
4053 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
4054 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
4057 <div class="warning">
4058 <p class="first admonition-title">Avvertenza</p>
4060 <p class="last">Bind9 (versione 9.3 presente in Debian
4061 Lenny) richiede una esplicita autorizzazione alla
4062 notifica per lo stesso server slave, che in fase di avvio
4063 interroghera' (inviando un notify) se' stesso per
4064 valutare se i dati relativi alla zona di cui e' slave
4065 sono aggiornati. Si aggiunga quindi al file <tt class=
4066 "docutils literal"><span class=
4067 "pre">/etc/bind/named.conf.options</span></tt> dello
4068 slave: <tt class="docutils literal"><span class=
4069 "pre">allow-notify</span> <span class="pre">{</span>
4070 <span class="pre">192.168.0.1;</span> <span class=
4071 "pre">};</span></tt> all'interno della stanza <tt class=
4072 "docutils literal"><span class="pre">options</span></tt>,
4073 in cui l'inidirizzo IP inserito e' quello dello stesso
4078 <div class="section" id="aggiornamento-dinamico-nsupdate">
4079 <h2><a class="toc-backref" href=
4080 "#id75">7.4 Aggiornamento dinamico:
4083 <p>Dalla versione 8 di Bind e' dsponibile l'utility
4084 <tt class="docutils literal"><span class=
4085 "pre">nsupdate</span></tt> (disponibile nel pacchetto
4086 <tt class="docutils literal"><span class=
4087 "pre">dnsutils</span></tt>) per aggiornare automaticamente
4088 i record di una zona secondo il paradigma client / server (
4089 RFC2136 ) . Posto che abbiate a disposizione un server DNS
4090 Bind on-line su un indirizzo IP fisso e un zona da gestire
4091 (che potrebbe essere anche solo la delega di un dominio di
4092 terzo livello come <em>casa.miodominio.net</em>) sara'
4093 possibile aggiornare automaticamente i record che tirano a
4094 degli indirizzi IP <em>pubblici ma dnamici</em>, come
4095 quelli spesso messi a disposizione dei provider per le
4096 connessioni ad internet residenziali, in modo da poter
4097 rendere sempre raggiungibile la vostra workstation a casa
4098 anche dopo un aggiornamento dell'ip dinamico associato alla
4101 <p>L'auenticazione del client nsupdate che avra' la
4102 possibilita' di aggiornare il server DNS master avviene
4103 tramite <em>Transaction signatures</em> (TSIG, RFC2845)
4104 usando un algoritmo di criptazione dati asimmetrico
4105 <em>HMAC-MD5</em> : generata una coppia di chiavi sul
4106 client / nsupdate con l'utility si dovra' trasferire la
4107 chiave pubblica sul server <em>master</em>, che verra'
4108 configurato per onorare gli aggiornamenti (eliminazione e
4109 inserimento di record RR) autenticati dalla chiave
4112 <div class="section" id="configurazione-client-nsupdate">
4113 <h3><a class="toc-backref" href=
4114 "#id76">7.4.1 Configurazione client
4117 <p>Sul client, sul quale non deve essere necessariamente
4118 installato un server DNS Bind ma la sola utility
4119 <tt class="docutils literal"><span class=
4120 "pre">nsupdate</span></tt>, generiamo la coppia di chiavi
4121 con l'utility <tt class="docutils literal"><span class=
4122 "pre">dnssec-keygen</span></tt> installabile tramite il
4123 pacchetto <tt class="docutils literal"><span class=
4124 "pre">bind9utils</span></tt>:</p>
4125 <pre class="literal-block">
4126 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4129 <p>Otterremo le due chiavi <tt class=
4130 "docutils literal"><span class=
4131 "pre">Khome.piffa.net.+157+04331.key</span>
4133 "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4134 chiave pubblica dovra' essere resa noto al server master
4135 che ricevera' l'update dei records.</p>
4138 <div class="section" id=
4139 "configurazione-server-riconoscimento-chiave">
4140 <h3><a class="toc-backref" href=
4141 "#id77">7.4.2 Configurazione server:
4142 riconoscimento chiave</a></h3>
4144 <dl class="docutils">
4145 <dt>Per rendere nota al server la chiave pubblica
4146 generata sul client si aggiunga quindi al file
4147 <tt class="docutils literal"><span class=
4148 "pre">/etc/bind/named.conf</span></tt> sul
4152 <dl class="first last docutils">
4153 <dt>key home.piffa.net. {</dt>
4155 <dd>algorithm HMAC-MD5; secret
4156 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4157 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4163 <p class="first admonition-title">Nota</p>
4165 <p class="last">La parte <tt class=
4166 "docutils literal"><span class=
4167 "pre">secret</span></tt>, che potete leggere
4168 direttamente nel file *.key della chiave genearta, e'
4169 scritto <em>tutto sulla stessa riga</em> senza ritorni
4174 <div class="section" id="server-gestione-dell-intera-zona">
4175 <h3><a class="toc-backref" href=
4176 "#id78">7.4.3 Server: gestione
4177 dell'intera zona</a></h3>
4179 <p>Sul server modifichiamo il file di configurazione
4180 <tt class="docutils literal"><span class=
4181 "pre">named.conf.local</span></tt> della zona della quale
4182 vogliamo concedere l'aggiornamento al client:</p>
4183 <pre class="literal-block">
4186 file "/etc/bind/pz/piffa.net" ;
4193 <dl class="docutils">
4194 <dt>Sara' necessario assicurarsi che il demone di Bind
4195 sia in grado di modificare il file <tt class=
4196 "docutils literal"><span class=
4197 "pre">/etc/bind/pz/piffa.net</span></tt>: dato che
4198 questo file ora sara' gestito da lui si proceda a
4199 cedergli la propieta' del file::</dt>
4201 <dd>chown bind /etc/bind/pz/piffa.net</dd>
4204 <p>Altro problema che si potrebbe porre: gli orologi di
4205 sistema dei due host devono essere sincronizzati per
4206 poter valutare l'opportunita' di un aggiornamento: si
4207 consigla di installare su entrambi l'utility <tt class=
4208 "docutils literal"><span class="pre">ntpdate</span></tt>
4209 e di eseguirla facendo riferimento ai time server di
4211 <pre class="literal-block">
4212 apt-get install ntpdate
4216 <p>Ora possiamo provare dal client a effettuare
4217 l'iserimento di un record per testarne il
4219 <pre class="literal-block">
4220 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4221 > server ns1.piffa.net
4222 > update add home.piffa.net. 86400 A 192.168.0.2
4224 Outgoing update query:
4225 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
4226 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4228 home.piffa.net. 86400 IN A 192.168.0.1
4234 <p>Per comprendere meglio l'uso dell'utility <tt class=
4235 "docutils literal"><span class="pre">nsupdate</span></tt>
4236 si consiglia la lettura della relativa pagina man. Nella
4237 prima riga viene invocato il comando <tt class=
4238 "docutils literal"><span class="pre">nsupdate</span></tt>
4239 impostando col flag <tt class=
4240 "docutils literal"><span class="pre">-k</span></tt> la
4241 chiave privata generata precedentemente, con <tt class=
4242 "docutils literal"><span class="pre">server</span></tt>
4243 si imposta quale server NS autoritario della zona (che
4244 abbiamo precedentemente configurato per ricevere gli
4245 aggiornamenti) vogliamo contattare. Alla riga sucessiva
4246 <tt class="docutils literal"><span class=
4247 "pre">update</span></tt> viene aggiunto un record
4248 <tt class="docutils literal"><span class=
4249 "pre">A</span></tt> per la il dominio <tt class=
4250 "docutils literal"><span class=
4251 "pre">home.piffa.net</span></tt> indirizzato all'IP
4252 <tt class="docutils literal"><span class=
4253 "pre">192.168.0.2</span></tt>, poi <tt class=
4254 "docutils literal"><span class="pre">show</span></tt>
4255 mostra quanto ci si prepara a comunicare al server con il
4256 finale <tt class="docutils literal"><span class=
4257 "pre">send</span></tt> .</p>
4259 <p>Si noti che in questo modo <em>l'intera zona</em>
4260 piffa.net e suscettibile di essere modificata dal client,
4261 che potra' eliminare e inserire qualunque record. E'
4262 possibile gestire in modo piu' granulare la zona, ad
4263 esempio concedendo al client i privilegi per gestire solo
4264 una parte della zona o i tipo di record da gestire.</p>
4267 <div class="section" id=
4268 "automatizzare-l-aggiornamento-dinamico">
4269 <h3><a class="toc-backref" href=
4270 "#id79">7.4.4 Automatizzare
4271 l'aggiornamento dinamico</a></h3>
4273 <p>Nsupdate risulta comodo per tenere aggiornati i record
4274 DNS degli host connessi ad internet con indirizzi IP
4275 dinamici (pubblici) assegnati dal provider. Il client
4276 deve essere in grado di contattare autonomamente il
4277 server DNS per comunicare un cambiamento del suo ip.
4278 Vediamo innanzi tutto un primo script per nsupdate:</p>
4279 <pre class="literal-block">
4281 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4282 # prima di leggere l'IP ottenuto
4284 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4286 nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
4287 server 192.168.0.254
4288 zone home.piffa.net.
4289 update delete home.piffa.net. A
4290 update delete home.piffa.net. MX
4291 update add home.piffa.net. 432000 A $IPADDR
4292 update add home.piffa.net. 432000 MX 10 home.piffa.net.
4298 <p>Questo script legge il valore del device di rete
4299 <tt class="docutils literal"><span class=
4300 "pre">ppp0</span></tt> creato dal <cite>pppoe</cite> di
4301 una connessione ADSL per ottenere l'indirizzo IP ottenuto
4302 dal provider (prima di farlo aspetta 15 secondi per dare
4303 il tempo al <tt class="docutils literal"><span class=
4304 "pre">pppoe</span></tt> di negoziare la
4305 connessione).Vengono poi eliminati gli esistenti valori
4306 <tt class="docutils literal"><span class=
4307 "pre">A</span></tt> e <tt class=
4308 "docutils literal"><span class="pre">MX</span></tt> per
4309 <tt class="docutils literal"><span class=
4310 "pre">home.piffa.net</span></tt> (si noti il punto finale
4311 dopo <em>net</em>) e inseriti quelli attuali.</p>
4313 <p>Resta da decidere quando richiamare questo script:
4314 l'evento che causa l'assegnazione del nuovo IP in questo
4315 caso e una nuova connessione <tt class=
4316 "docutils literal"><span class="pre">pppoe</span></tt>,
4317 quindi sarebbe consigliabile inserire lo script nelle
4318 routine comprese in <tt class=
4319 "docutils literal"><span class=
4320 "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4321 documentazione di ppp), nel caso questo non desse i
4322 risultati sperati (per problemi di connessione) come via
4323 estrema si consideri di mettere lo script nella routine
4324 del demone <tt class="docutils literal"><span class=
4325 "pre">cron</span></tt> in modo che venga eseguito
4326 periodicamente (ad esempio ogni giorno).</p>
4330 <div class="section" id="link-suggeriti">
4331 <h2><a class="toc-backref" href=
4332 "#id80">7.5 Link suggeriti:</a></h2>
4335 <li>DNS for Rocket Scientists <a class=
4336 "reference external" href=
4337 "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4339 <li>DNS HOWTO <a class="reference external" href=
4340 "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4345 <div class="section" id="samba">
4346 <h1><a class="toc-backref" href=
4347 "#id81">8 Samba</a></h1>
4349 <p>Samba e' un progetto libero che fornisce servizi di
4350 condivisione di file e stampanti a client SMB/CIFS.</p>
4352 <p>Samba e' liberamente disponibile, al contrario di altre
4353 implementazioni SMB/CIFS, e permette di ottenere
4354 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4356 <p>Samba e' un software che puo' girare su piattaforme che
4357 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4358 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4359 il protocollo TCP/IP utilizzando i servizi offerti sul server
4360 ospite. Quando correttamente configurato, permette di
4361 interagire con client o server Microsoft Windows come se
4362 fosse un file e print server Microsoft agendo da Primary
4363 Domain Controller (PDC) o come Backup Domain Controller, puo'
4364 inoltre prendere parte ad un dominio Active Directory.</p>
4366 <div class="section" id="pacchetti">
4367 <h2><a class="toc-backref" href=
4368 "#id82">8.1 Pacchetti</a></h2>
4370 <p>Pacchetti da installare per utilizzare Samba in
4371 modalita' client <a class="footnote-reference" href="#id7"
4372 id="id6" name="id6">[2]</a></p>
4373 <pre class="literal-block">
4377 <p>Pacchetti da installare per utilizzare Samba in
4378 modalita' server:</p>
4379 <pre class="literal-block">
4380 samba smbfs smbclient
4383 <table class="docutils footnote" frame="void" id="id7"
4390 <tbody valign="top">
4392 <td class="label"><a class="fn-backref" href=
4395 <td>Anche se nato per i sistemi Windows, Samba puo'
4396 essere usato anche per montare cartelle sotto
4397 GNU/Linux come alternativa a NFS. Per la condivisione
4398 di stampanti sarebbe invece opportuno intervenire
4399 direttamente su <tt class=
4400 "docutils literal"><span class=
4401 "pre">CUPS</span></tt>.</td>
4406 <p>Durante la prima installazione viene chiesto il nome del
4407 gruppo di appartenenza, il default per Windows e'
4408 <tt class="docutils literal"><span class=
4409 "pre">WORKGROUP</span></tt>. In aula usiamo invece
4410 <tt class="docutils literal"><span class=
4411 "pre">208</span></tt> .</p>
4413 <p>Per riconfigurare Samba si usi il comando:</p>
4414 <pre class="literal-block">
4415 dpkg-reconfigure samba-common
4419 <div class="section" id="passwords-e-autenticazione">
4420 <h2><a class="toc-backref" href=
4421 "#id83">8.2 Passwords e
4422 autenticazione</a></h2>
4424 <p>Per poter configurare Samba in modo che usi un sistema
4425 di negoziazione degli accessi alle cartelle condivise
4426 basato su accoppiate <em>nome utente / password</em>
4427 bisogna distinguere tra 3 livelli di password (e
4428 generalmente volete usare <em>sempre la stessa
4429 password</em> per ognuno di questi) e delle differenze tra
4430 le modalita' di <em>autenticazione</em> (e quindi anche di
4431 criptaggio delle passwords) usate da sistemi GNU/Linux e
4434 <dl class="docutils">
4435 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4437 <dd>E' la password dell'<em>utente di sistema</em> che
4438 viene usata sul sistema operativo su cui gira il software
4439 Samba. E' importante tenere conto anche delle
4440 <em>user-id</em> e <em>group-id</em> degli utenti che
4441 dovranno fisicamente scrivere sui file system. Se un
4442 utente non puo' scrivere in una certa posizione del file
4443 system (ad esempio nella cartella <tt class=
4444 "docutils literal"><span class=
4445 "pre">/mnt/condivisione</span></tt> che sara' stata
4446 necessariamente creata inizialmente dall'utente
4447 <tt class="docutils literal"><span class=
4448 "pre">root</span></tt>) per mancanza dei privilegi di
4449 scrittura allora neanche Samba potra' farlo nel momento
4450 in mette a disposizione la risorsa all'utente. Se si
4451 montano file-system dedicati per le condivisioni
4452 controllare i permessi e proprieta' dei <em>punti di
4453 mount*</em>. Queste passwords sono salvate nel solito
4454 file /etc/shadow (richiamato da /etc/passwd).</dd>
4456 <dt>2 Password per l'applicativo Samba</dt>
4458 <dd>Samba deve essere compatibile con Windows e quindi
4459 utilizzare un sistema di criptazione delle password
4460 diverso da /etc/shadow . Le password per Samba possono
4461 essere gestite ad esempio col comando <tt class=
4462 "docutils literal"><span class=
4463 "pre">smbpasswd</span></tt> e vengono generalmente
4464 salvate all'interno di <tt class=
4465 "docutils literal"><span class=
4466 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
4468 <dt>3 Password per Windows.</dt>
4470 <dd>Gli utenti Windows effettuano il log-in alla partenza
4471 della sessione di Windows. Se si avra' l'accortezza di
4472 usare sempre la <em>stessa password</em> data
4473 precedentemente anche a Windows (o viceversa impostare la
4474 password per GNU/Linux / Samba uguale a quella di
4475 Windows) l'utente potra' accedere automaticamente alle
4476 condivisioni a lui disponibili.</dd>
4480 <div class="section" id="creazione-utenti">
4481 <h2><a class="toc-backref" href=
4482 "#id84">8.3 Creazione Utenti</a></h2>
4484 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4485 attenzione a <em>non dargli una shell di sistema</em>. Gli
4486 utenti Windows che accedono al server solo per le
4487 condivisioni non hanno bisogno di poter eseguire comandi
4490 <p>Creazione di un utente denominato sambo:</p>
4491 <pre class="literal-block">
4492 adduser --shell /bin/false sambo
4495 <p>Nel file <tt class="docutils literal"><span class=
4496 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
4497 <pre class="literal-block">
4498 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4501 <p>Aggiunta dell'utente al database delle password per
4502 Samba e generazione della sua password:</p>
4503 <pre class="literal-block">
4507 <p>Se successivamente si vorra' modificare la password di
4508 un utente gia' esistente si usi:</p>
4509 <pre class="literal-block">
4513 <p>La password sotto Windows verra' modificata sul sistema
4517 <div class="section" id="creare-la-condivisione">
4518 <h2><a class="toc-backref" href=
4519 "#id85">8.4 Creare la
4520 condivisione</a></h2>
4522 <p>La condivisione altro non e' che una cartella sul server
4523 che viene resa disponibile ai client negoziando l'accesso
4524 in base a una autenticazione basata su <em>user-name /
4525 password</em>. E' per altro possibile permettere l'accesso
4526 a una risorsa a chiunque indiscriminatamente (a tutti i
4527 <tt class="docutils literal"><span class=
4528 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
4529 punto di vista della sicurezza. Si decida se la cartella
4530 condivisa debba risiedere nella <em>home</em> di un utente
4531 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
4532 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
4533 Nel secondo caso si potranno gestire gli accessi sotto
4534 GNU/Linux tramite i gruppi.</p>
4536 <p>Creazione della risorsa sambo_share nella home
4537 dell'utente sambo:</p>
4538 <pre class="literal-block">
4539 # mkdir /home/sambo/sambo_share
4540 # chown sambo:sambo /home/sambo/sambo_share/
4543 <div class="section" id=
4544 "sicurezza-permessi-di-esecuzione-sul-server">
4545 <h3><a class="toc-backref" href=
4546 "#id86">8.4.1 Sicurezza: permessi di
4547 esecuzione sul server</a></h3>
4549 <p>Bisognerebbe notare sul server i permessi di
4550 esecuzione del file-system che ospita la cartella da
4551 condividere. Se i file che saranno contenuti nella
4552 condivisione saranno da usarsi sotto Windows non c'e'
4553 motivo che questi siano eseguibili sotto GNU/Linux. Si
4554 potrebbe avere quindi, ipotizzando una condivisione in
4555 <tt class="docutils literal"><span class=
4556 "pre">/mnt/share</span></tt> che risieda su di un file
4557 system dedicato:</p>
4559 <p><tt class="docutils literal"><span class=
4560 "pre">/etc/fstab</span></tt></p>
4563 /dev/hda10 /mnt/share ext3 rw,
4564 <strong>nosuid,noexec</strong> 0 3
4567 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4568 possibilita' di eseguire programmi con credenziali
4573 <div class="section" id=
4574 "configurazione-dell-applicativo-samba-vero-e-proprio">
4575 <h2><a class="toc-backref" href=
4576 "#id87">8.5 Configurazione
4577 dell'applicativo Samba vero e proprio.</a></h2>
4579 <p>Avendo preparato gli utenti (ancora una volta: non si
4580 dia una shell completa a un utente che serve solo per Samba
4581 o la posta elettronica) e la cartella sul file system si
4582 puo' procedere a configurare la condivisione su Samba.</p>
4584 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4585 vim si usi 235gg ):</p>
4586 <pre class="literal-block">
4588 # Percorso della cartella condivisa
4589 path = /home/sambo/sambo_share
4590 # Se gli utenti possono scrivere / modificare file
4592 # Negoziazione degli accessi su base utenti / passwords
4595 # #######################################
4596 # Altri parametri opzionali di interesse
4597 # Se posso vedere la condivisione da esplora risorse
4598 # anche se non ho i privilegi per accedervi.
4600 # Commento indicativo della risorsa
4601 comment = Condivisione per Sambo
4604 <p>Dopo aver salvato il file si puo' fare un primo
4605 controllo tramite l'utility <tt class=
4606 "docutils literal"><span class="pre">testparm</span></tt> ,
4607 che controlla la sintassi del file di configurazione di
4608 Samba. Se questo non rileva problemi si puo' procedere a un
4609 <tt class="docutils literal"><span class="pre">#</span>
4610 <span class="pre">/etc/init.d/samba</span> <span class=
4611 "pre">restart</span></tt> .</p>
4613 <div class="section" id="creazione-di-un-gruppo">
4614 <h3><a class="toc-backref" href=
4615 "#id88">8.5.1 Creazione di un
4618 <p>Se si deve condividere una risorsa con un numero
4619 consistente di utenti e' consigliabile lavorare in
4620 termini termini di gruppi piuttosto che elencare la lista
4621 degli utenti in <tt class="docutils literal"><span class=
4622 "pre">valid</span> <span class=
4623 "pre">users</span></tt>.</p>
4625 <p>Dopo aver creato il gruppo del quale volete facciano
4626 parte i vostri utenti (<tt class=
4627 "docutils literal"><span class="pre">addgroup</span>
4628 <span class="pre">nome_gruppo</span></tt>), inserite i
4629 vostri utenti nel gruppo (<tt class=
4630 "docutils literal"><span class="pre">adduser</span>
4631 <span class="pre">nome_utente</span> <span class=
4632 "pre">nome_gruppo</span></tt>) e modificate la direttiva
4633 <tt class="docutils literal"><span class=
4634 "pre">valid</span> <span class="pre">users</span></tt> in
4635 <tt class="docutils literal"><span class=
4636 "pre">smb.conf</span></tt> per riferirsi ad un gruppo
4637 piuttosto che a degli utenti. Per riferirsi a un gruppo
4638 si usi il carattere <tt class=
4639 "docutils literal"><span class="pre">@</span>
4640 <span class="pre">chicciola</span></tt> col <tt class=
4641 "docutils literal"><span class=
4642 "pre">nome_del_gruppo</span></tt>:</p>
4643 <pre class="literal-block">
4644 # Negoziazione degli accessi su base gruppo
4645 valid users = @nome_gruppo
4650 <div class="section" id="testare-il-servizio">
4651 <h2><a class="toc-backref" href=
4652 "#id89">8.6 Testare il Servizio</a></h2>
4654 <p>Come testare il servizio</p>
4657 <pre class="literal-block">
4658 smbclient -U sambo -L localhost
4661 <p>Questo comando permette di esplorare la risorsa
4662 qualificandosi come utente, in questo modo potete testare
4663 il corretto funzionamento dell'autenticazione. Si provi
4664 inizialmente a sbagliare la password deliberatamente, poi a
4665 inserirla correttamente: dovrebbero essere visibili le
4666 risorse disponibili al solo utente sambo: la suo /home e la
4667 cartella samba_share:</p>
4668 <pre class="literal-block">
4669 Sharename Type Comment
4670 --------- ---- -------
4671 sambo_share Disk Condivisione per Sambo
4672 print$ Disk Printer Drivers
4673 IPC$ IPC IPC Service (base server)
4674 sambo Disk Home Directories
4677 <p>In particolare l'ultima voce relativa alla home
4678 directory dell'utente dovrebbe essere visibile solo agli
4679 utenti autenticati.</p>
4681 <p>In alternativa e' possibile montare realmente la
4682 condivisone anche su GNU/Linux tramite un client per samba
4683 e testarne il corretto funzionamento:</p>
4684 <pre class="literal-block">
4685 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4690 <div class="section" id="server-di-posta-postfix">
4691 <h1><a class="toc-backref" href=
4692 "#id90">9 Server di posta: Postfix</a></h1>
4694 <p>Il server di posta che prenderemo in considerazione e'
4695 Postfix, a seguire un estratto di un file di configurazione
4696 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4697 nelle <tt class="docutils literal"><span class=
4698 "pre">/home</span></tt> degli utenti per la consegna della
4701 <p><tt class="docutils literal"><span class=
4702 "pre">/etc/postfix/main.cf</span></tt>:</p>
4703 <pre class="literal-block">
4704 # ...segue dalla riga ~30
4705 myhostname = 162.piffa.net
4706 alias_maps = hash:/etc/aliases
4707 alias_database = hash:/etc/aliases
4708 myorigin = 162.piffa.net
4709 mydestination = 162.piffa.net, localhost
4710 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4711 # dovrete usare un realy host per l'invio della posta
4712 relayhost = smtp.piffa.net
4714 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4715 # Se dovete inviare la posta per i client della vostra LAN privata:
4716 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4717 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4720 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4721 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4722 # si disabiliti procmail
4723 #mailbox_command = procmail -a "$EXTENSION"
4725 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4726 # all'interno della home dell'utente:
4727 home_mailbox = Maildir/
4728 mailbox_size_limit = 0
4729 recipient_delimiter = +
4730 inet_interfaces = all
4733 <dl class="docutils">
4734 <dt>E' disponibile un file di configurazione di esempio ben
4735 piu' articolato e commentato::</dt>
4737 <dd>/usr/share/postfix/main.cf.dist .</dd>
4740 <div class="section" id="test-del-server-smtp">
4741 <h2><a class="toc-backref" href=
4742 "#id91">9.1 Test del server smtp</a></h2>
4744 <p>Per testare il corretto funzionamento del server di
4745 posta si puo' procedere in vari modi.</p>
4748 <li>Spedire una mail a una casella locale / remota e
4749 controllare i log (syslog)</li>
4751 <li>Collegarsi via <em>telnet</em> al server di posta:
4752 <a class="reference external" href=
4753 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4755 <li>usare una utility come SWAKS</li>
4758 <div class="section" id="swaks">
4759 <h3><a class="toc-backref" href=
4760 "#id92">9.1.1 Swaks</a></h3>
4762 <dl class="docutils">
4763 <dt>Per gli utenti meno esperti e' consigliabile
4764 utilizzare <em>SWAKS</em>: si installi l'omonimo
4765 pacchetto e si esegua un test con::</dt>
4767 <dd>swaks --to <a class="reference external" href=
4768 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4769 --from <a class="reference external" href=
4770 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4773 <p>Ecco un esempio di una sessione corretta:</p>
4774 <pre class="literal-block">
4775 swaks --to andrea@piffa.net from andrea@mydomain.com
4776 === Trying smtp.piffa.net:25...
4777 === Connected to smtp.piffa.net.
4778 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4779 -> EHLO alice.mydomain.com
4780 <- 250-zoo.piffa.net
4781 <- 250-PIPELINING
4782 <- 250-SIZE 10240000
4786 <- 250-ENHANCEDSTATUSCODES
4789 -> MAIL FROM:<root@alice.mydomain.com>
4791 -> RCPT TO:<andrea@piffa.net>
4794 <- 354 End data with <CR><LF>.<CR><LF>
4795 -> Date: Thu, 28 May 2009 13:11:19 +0200
4796 -> To: andrea@piffa.net
4797 -> From: root@alice.mydomain.com
4798 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
4799 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4801 -> This is a test mailing
4804 <- 250 2.0.0 Ok: queued as 41FB261AFC
4807 === Connection closed with remote host.
4812 <div class="section" id="imap-e-pop">
4813 <h2><a class="toc-backref" href=
4814 "#id93">9.2 Imap e pop</a></h2>
4816 <p>Postfix e' un server SMTP, di conseguenza se volete che
4817 i vostri utenti possano <em>scaricare</em> in locale la
4818 posta generalmente volete mettere a loro disposizione un
4819 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4821 <dl class="docutils">
4822 <dt>Pacchetti da installare</dt>
4824 <dd>courier-imap courier-pop</dd>
4827 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4828 funziona con le Mailbox in <tt class=
4829 "docutils literal"><span class="pre">/var/mail/</span></tt>
4833 <div class="section" id="client-a-riga-di-comando">
4834 <h2><a class="toc-backref" href=
4835 "#id94">9.3 Client a riga di
4838 <p>Per testare il corretto funzionamento del server di
4839 posta e' utile avere a disposizione delle utility per
4840 inviare e leggere la posta: ovviamente da riga di
4843 <div class="section" id="mailx">
4844 <h3><a class="toc-backref" href=
4845 "#id95">9.3.1 mailx</a></h3>
4847 <dl class="docutils">
4848 <dt>Uno dei client piu' semplici, sopratutto per
4849 inviare un messaggioi. e' sufficiente usare una formula
4852 <dd>mail <a class="reference external" href=
4853 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4856 <p>Se il comando <tt class=
4857 "docutils literal"><span class="pre">mail</span></tt> non
4858 fosse disponibile si installi il pacchetto <tt class=
4859 "docutils literal"><span class=
4860 "pre">mailx</span></tt>.</p>
4862 <p>Al primo prompt si digitera' l'oggetto, il testo del
4863 messaggio (per terminare l'inserimento lasciare una riga
4864 vuota, digitare un <tt class=
4865 "docutils literal"><span class="pre">punto</span>
4866 <span class="pre">+</span> <span class=
4867 "pre">Invio</span></tt> su una riga vuota), la Carbon
4868 Copy (se necessaria).</p>
4871 <pre class="literal-block">
4872 mail andrea@localhost
4873 Subject: Oggetto della mail
4875 per terminare il messaggio
4876 lasciare una riga vuota
4877 e un punto (poi Invio).
4883 <p>Per altrre opzioni si veda la pagina man.</p>
4886 <div class="section" id="mutt">
4887 <h3><a class="toc-backref" href=
4888 "#id96">9.3.2 Mutt</a></h3>
4890 <p>Mutt e' uno dei gestori di posta preferiti da chi
4891 preferisce utilizzare l'interfaccia testuale per la
4892 gestione della posta.</p>
4894 <p>Mutt ha un file di configurazione <tt class=
4895 "docutils literal"><span class="pre">.muttrc</span></tt>
4896 nella <em>home</em> dell'utente, alcuni settaggi possono
4899 <dl class="docutils">
4900 <dt>set folder="~/Maildir"</dt>
4902 <dd>Per utilizzare <tt class=
4903 "docutils literal"><span class=
4904 "pre">/home/nome_utente/Maildir</span> <span class=
4905 "pre">come</span> <span class=
4906 "pre">mailbox</span></tt>, invece del default
4907 <tt class="docutils literal"><span class=
4908 "pre">/var/mail/nome_utente</span></tt>.</dd>
4910 <dt>set editor="vim"</dt>
4912 <dd>Utilizzare <tt class=
4913 "docutils literal"><span class="pre">vim</span></tt>
4914 come editor per comporre i messaggi.</dd>
4917 <p>Spesso e' utile poter <em>levvere al volo</em> la
4918 Mailbox / Maildir di un utente sul server di posta, per
4919 controllare se i messaggi vengono recapitati
4921 <pre class="literal-block">
4922 mutt -f /var/mail/utente
4923 mutt -f /home/utente/Maildir
4926 <p>In modo analogo si puo' consultare al volo la propia
4927 mailbox su un server remoto tramite IMAP/POP:</p>
4928 <pre class="literal-block">
4929 mutt -f imap://nome_utente@piffa.net
4933 <div class="section" id="web-client">
4934 <h3><a class="toc-backref" href=
4935 "#id97">9.3.3 Web client</a></h3>
4937 <p>Per mettere a disposizione degli utenti un client web
4938 per gestire la propria posta si installi il pacchetto:
4939 <tt class="docutils literal"><span class=
4940 "pre">squirrelmail</span></tt> . Ci sono tanti altri
4941 client web disponibili: questo e' particolarmente
4942 semplice. Naturalmente dovrete aver installato:
4943 <tt class="docutils literal"><span class=
4944 "pre">php5</span> <span class="pre">apache2</span></tt>
4947 <p>L'interfaccia dovrebbe essere disponibile all'url:
4948 <tt class="docutils literal"><span class=
4949 "pre">http://localhost/squirrelmail</span></tt> . Se
4950 cosi' non fosse assicuratevi che Apache abbia incluso il
4951 file di configurazione di squirrelmail:</p>
4952 <pre class="literal-block">
4953 cd /etc/apache2/conf.d/
4954 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
4959 <div class="section" id="graylisting">
4960 <h2><a class="toc-backref" href=
4961 "#id98">9.4 Graylisting</a></h2>
4963 <p>Il <em>graylisting</em> e' un sistema relativamente poco
4964 invasivo, con un limitato consumo di risorse per limitare
4965 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
4966 suggerisce il nome e' una via di mezzo tra una <em>white
4967 list</em> (una lista di mittenti privilegiata, sempre
4968 benvenuti) e una <em>black list</em> (mittenti
4969 <em>bannati</em>, banditi dal poter inviare nuovi
4972 <p>Il funzionamento e' relativamente semplice: ogni
4973 mittente sconosciuto viene immediatamente rifiutato con un
4974 errore <em>non grave</em> come un <em>server non
4975 disponibile, provare piu' tardi</em>. Questo inconveniente
4976 non dovrebbe mettere in difficolta' un server di posta /
4977 mittente legittimo, che dopo un periodo di attesa tentera'
4978 nuovamente di inviare il messaggio ottenendo finalmente il
4979 risultato atteso. Diversamente un <em>bot</em> per l'invio
4980 di SPAM o un applicazione improvvisata (tipicamente di
4981 derivazione virale) che stesse inviando il messaggio
4982 <em>probabilmente</em> non insisterebbe, rinunciano ad
4983 inviare il messaggio preferendo destinazioni meno
4986 <div class="section" id="abilitazione-in-postfix">
4987 <h3><a class="toc-backref" href=
4988 "#id99">9.4.1 Abilitazione in
4991 <p>Installare il pacchetto: <tt class=
4992 "docutils literal"><span class="pre">postgrey</span></tt>
4993 e aggiungere il file di configurazione di Postfix
4994 <tt class="docutils literal"><span class=
4995 "pre">/etc/postfix/main.cf</span></tt>:</p>
4996 <pre class="literal-block">
4997 smtpd_recipient_restrictions =
4999 reject_unauth_destination,
5000 check_policy_service inet:127.0.0.1:60000
5004 <div class="section" id="test">
5005 <h3><a class="toc-backref" href=
5006 "#id100">9.4.2 Test</a></h3>
5008 <p>Inviando un messaggio il client dovrebbe ricevere un
5009 iniziale messaggio di rifiuto del messaggio:</p>
5010 <pre class="literal-block">
5011 swaks --to andrea@piffa.net from andrea@mydonain.com
5012 === Trying smtp.piffa.net:25...
5013 === Connected to smtp.piffa.net
5016 -> RCPT TO:<andrea@piffa.net>
5017 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
5018 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
5021 === Connection closed with remote host.
5024 <p>A lato server si dovrebbe rilevare su <tt class=
5025 "docutils literal"><span class=
5026 "pre">/var/log/syslog</span></tt> qualcosa di simile:</p>
5027 <pre class="literal-block">
5028 connect from alice.mydomain.com[65.98.21.97]
5029 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
5030 client_name=alice.mydomain.com,
5031 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
5032 May 28 14:53:34 r24266 postfix/smtpd[22538]:
5033 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
5034 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
5035 see http://postgrey.schweikert.ch/help/piffa.net.html;
5036 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
5037 proto=ESMTP helo=<alice.mydomain.com>
5038 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
5042 <div class="section" id="statistiche">
5043 <h3><a class="toc-backref" href=
5044 "#id101">9.4.3 Statistiche</a></h3>
5046 <p>E' sempre utile poter tracciare qualche statistica
5047 sulle percentuali di messaggi ricevuti, da chi, messaggi
5048 rifiutati (e per quale motivo). Statistiche che attingono
5049 dai soliti log del server di posta <tt class=
5050 "docutils literal"><span class=
5051 "pre">/var/log/syslog</span></tt> di default oltre che i
5052 dedicati <tt class="docutils literal"><span class=
5053 "pre">/var/log/mail</span></tt> .</p>
5055 <p>Una utility semplice per analizzare l'attivita' del
5056 propio server smtp potrebbe essere <tt class=
5057 "docutils literal"><span class=
5058 "pre">pflogsumm</span></tt> , installato il pacchetto la
5059 si puo' invocare con:</p>
5060 <pre class="literal-block">
5061 pflogsumm.pl /var/log/mail.log
5064 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
5065 "docutils literal"><span class=
5066 "pre">/var/log/mail.log.0</span></tt></p>
5071 <div class="section" id="firewall">
5072 <h1><a class="toc-backref" href=
5073 "#id102">10 Firewall</a></h1>
5075 <p>In Informatica, nell'ambito delle reti di computer, un
5076 firewall (termine inglese dal significato originario di
5077 parete refrattaria, muro tagliafuoco, muro ignifugo; in
5078 italiano anche parafuoco o parafiamma) e' un componente
5079 passivo di difesa perimetrale che puo anche svolgere funzioni
5080 di collegamento tra due o piu' tronconi di rete. Usualmente
5081 la rete viene divisa in due sotto reti: una, detta esterna,
5082 comprende l'intera Internet mentre l'altra interna, detta LAN
5083 (Local Area Network), comprende una sezione piu' o meno
5084 grande di un insieme di computer locali. In alcuni casi e'
5085 possibile che si crei l'esigenza di creare una terza sotto
5086 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
5087 sistemi che devono essere isolati dalla rete interna ma
5088 devono comunque essere protetti dal firewall.</p>
5090 <p>Una prima definizione chiusa di firewall e' la
5093 <p>Apparato di rete hardware o software che filtra tutti i
5094 pacchetti entranti ed uscenti, da e verso una rete o un
5095 computer, applicando regole che contribuiscono alla sicurezza
5098 <p>In realta' un firewall puo' essere realizzato con un
5099 normale computer (con almeno due schede di rete e software
5100 apposito), puo' essere una funzione inclusa in un router o
5101 puo' essere un apparato specializzato. Esistono inoltre i
5102 cosiddetti "firewall personali", che sono programmi
5103 installati sui normali calcolatori, che filtrano solamente i
5104 pacchetti che entrano ed escono da quel calcolatore; in tal
5105 caso viene utilizzata una sola scheda di rete.</p>
5107 <p>La funzionalita' principale in sostanza e' quella di
5108 creare un filtro sulle connessioni entranti ed uscenti, in
5109 questo modo il dispositivo innalza il livello di sicurezza
5110 della rete e permette sia agli utenti interni che a quelli
5111 esterni di operare nel massimo della sicurezza. Il firewall
5112 agisce sui pacchetti in transito da e per la zona interna
5113 potendo eseguire su di essi operazioni di: controllo modifica
5116 <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
5117 IP per leggere le informazioni presenti sul suo header, e in
5118 alcuni casi anche di effettuare verifiche sul contenuto del
5121 <div class="section" id="links">
5122 <h2><a class="toc-backref" href=
5123 "#id103">10.1 Links</a></h2>
5126 <li><a class="reference external" href=
5127 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
5129 <li><a class="reference external" href=
5130 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
5131 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
5135 <div class="section" id="ipfilter">
5136 <h2><a class="toc-backref" href=
5137 "#id104">10.2 Ipfilter</a></h2>
5139 <p>Link: <a class="reference external" href=
5140 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
5141 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
5143 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
5144 po' del 3) e su cosa <em>non</em> lavora (livello 4).
5145 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
5146 etc) e del livello 1 (MAC source address). Iptables
5147 comunque permette di fare il <em>connection-tracking</em>,
5148 mediante il quale possiamo implementare il Network Address
5151 <p>Netfilter non ricostruisce il flusso di dati tra
5152 pacchetti, non puo' quindi rilevare la presenza di virus o
5153 simili che si trasmettono su pacchetti separati:
5154 ricomporre, analizzare e tornare a scomporre i frammenti
5155 richiederebbe troppa RAM e risorse di sistema, con il
5156 conseguente rischio di saturare il firewall fino
5157 all'abbandono dei nuovi pacchetti in transito. Ci sono
5158 altri software piu' adatti a questi compiti, ad esempio un
5159 proxy HTTP come Squid che e' appunto una applicazione di
5160 quarto livello, progettata e strutturata per analizzare e
5161 modificare i flussi di dati (il <em>contenuto</em> dei
5162 pacchetti, non le sole <em>intestazioni</em>) facendo
5163 abbondate uso delle risorse RAM e di calcolo del sistema.
5164 Non a caso su macchine embedded dalle prestazioni molto
5165 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5166 massimo le risorse di sistema per gestire il traffico di
5167 una rete 10/100, mentre il lavoro tipico svolto da
5168 netfilter e' quasi irrilevante.</p>
5171 <div class="section" id="progettazione-di-un-firewall">
5172 <h2><a class="toc-backref" href=
5173 "#id105">10.3 Progettazione di un
5176 <p>Per implementare un firewall bisogna decidere un aio di
5177 cose: la collocazione e l'approccio (inclusivo o esclusivo)
5178 al filtraggio, il tipo di hardware.</p>
5180 <div class="section" id="collocazione">
5181 <h3><a class="toc-backref" href=
5182 "#id106">10.3.1 Collocazione</a></h3>
5184 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5185 della rete, decidere se diversi reparti di una azienda si
5186 possano vedere tra loro e in che misura.</p>
5188 <p>Collocazione:</p>
5191 <ol class="arabic simple">
5194 <li>tra router e servers / LAN</li>
5196 <li>Unico server / router / firewall e connessi
5197 rischi. considerare l'acquisto di un router hardware
5202 <dl class="docutils">
5203 <dt>Layeed security:</dt>
5205 <dd>Implementare piu' device / software sui diversi
5206 livelli: <a class="reference external" href=
5207 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5208 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5212 <div class="section" id="policy-di-default">
5213 <h3><a class="toc-backref" href=
5214 "#id107">10.3.2 Policy di
5217 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5221 <div class="section" id="hardware">
5222 <h3><a class="toc-backref" href=
5223 "#id108">10.3.3 Hardware</a></h3>
5225 <p>Sostanzialmente potremmo distinguere due tipologie di
5228 <dl class="docutils">
5229 <dt>Network appliance dedicata::</dt>
5231 <dd>Un dispositivo hardware dedicato alla funzione di
5232 Firewall, ad es un Cisco / Fortigate. Si noti che molti
5233 firewall economici altro non sono che Linux box molto
5236 <dt>Server / Personal computer:</dt>
5238 <dd>Un server sul quale viene fatto girare Netfilter ad
5239 uso del server stesso e della rete connessa.</dd>
5242 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5243 flessibilita', strumenti di gestione, sicurezza,
5248 <div class="section" id=
5249 "percorso-dei-pacchetti-tra-tabelle-e-catene">
5250 <h2><a class="toc-backref" href=
5251 "#id109">10.4 Percorso dei pacchetti tra
5252 tabelle e catene</a></h2>
5254 <p>link: <a class="reference external" href=
5255 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
5256 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
5259 <div class="section" id="concetti-di-base">
5260 <h2><a class="toc-backref" href=
5261 "#id110">10.5 Concetti di base</a></h2>
5263 <div class="section" id="tabelle-catene-regole">
5264 <h3><a class="toc-backref" href=
5265 "#id111">10.5.1 Tabelle, catene,
5268 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5271 <li>filter - Regola il firewalling: quali pacchetti
5272 accettare, quali bloccare</li>
5274 <li>nat - Regola le attivita' di natting</li>
5276 <li>mangle - Interviene sulla alterazione dei
5280 <p>Ogni tabella ha delle catene (chains) predefinite
5281 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5282 aggiunte catene custom. Ogni catena e' composta da un
5283 elenco di regole (rules) che identificano pacchetti di
5284 rete secondo criteri diversi (es: -p tcp --dport 80 -d
5285 10.0.0.45) Ogni regola termina con una indicazione
5286 (target) su cosa fare dei pacchetti identificati dalla
5287 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5290 <div class="section" id="match">
5291 <h3><a class="toc-backref" href=
5292 "#id112">10.5.2 Match</a></h3>
5294 <p>I Match di una regola (rule) servono a testare un
5295 pacchetto per valutare se corrisponda a certe
5296 caratteristiche. I match di possono servire a controllare
5297 se un pacchetto e' destinato a una porta particolare o
5298 utilizza un protocollo particolare.</p>
5300 <p>Alcuni esempi:</p>
5302 <dl class="docutils">
5303 <dt>-p [!] proto</dt>
5305 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5306 udp, gre, ah...)</dd>
5308 <dt>-s [!] address[/mask]</dt>
5310 <dd>Indirizzo IP sorgente (o network con maschera di
5313 <dt>-d [!] address[/mask]</dt>
5315 <dd>Indirizzo IP destinazione (o network)</dd>
5317 <dt>-i [!] interface[+]</dt>
5319 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5321 <dt>-o [!] interface[+]</dt>
5323 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5326 <table class="docutils option-list" frame="void" rules=
5328 <col class="option">
5329 <col class="description">
5331 <tbody valign="top">
5333 <td class="option-group"><kbd><span class=
5334 "option">-f</span></kbd></td>
5336 <td>Frammento di pacchetto</td>
5342 <div class="section" id="targets">
5343 <h3><a class="toc-backref" href=
5344 "#id113">10.5.3 Targets</a></h3>
5346 <p>Se un pacchetto soddisfa le condizioni del Match
5347 <em>salta</em> (jump) su uno dei target possibili, in
5348 caso contrario continua il suo percorso tra regole catene
5351 <p>Target principali:</p>
5353 <dl class="docutils">
5354 <dt><em>-j ACCEPT</em></dt>
5356 <dd>Il pacchetto matchato viene accettato e procede
5357 verso la sua destinazione. Si usa per definire il
5358 traffico permesso.</dd>
5360 <dt><em>-j DROP</em></dt>
5362 <dd>Il pacchetto viene rifiutato e scartato, senza
5363 alcuna notifica al mittente. Si usa, in alternativa a
5364 REJECT, per bloccare traffico.</dd>
5366 <dt><em>-j REJECT</em></dt>
5368 <dd>Il pacchetto viene rifiutato. Al mittente viene
5369 mandato un pacchetto (configurabile) di notifica tipo
5370 ICMP port-unreachable (--reject-with
5371 icmp-port-unreachable)</dd>
5374 <table class="docutils option-list" frame="void" rules=
5376 <col class="option">
5377 <col class="description">
5379 <tbody valign="top">
5381 <td class="option-group"><kbd><span class=
5382 "option">-t <var>LOG</var></span></kbd></td>
5384 <td>Il pacchetto viene loggato via syslog e procede
5385 l'attraversamento della catena. Opzioni:
5386 (--log-level, --log-prefix, --log-tcp-sequence,
5387 --log-tcp-options, --log-ip-options)</td>
5391 <td class="option-group"><kbd><span class=
5392 "option">-j <var>DNAT</var></span></kbd></td>
5394 <td>Viene modificato l'IP di destinazione del
5395 pacchetto. Target disponibile solo in nat /
5396 PREROUTING e nat / OUTPUT. L'opzione
5397 --to-destination IP:porta definisce il nuovo IP di
5398 destinazione. Si usa tipicamente su network
5399 firewall che nattano server di una DMZ</td>
5403 <td class="option-group"><kbd><span class=
5404 "option">-j <var>SNAT</var></span></kbd></td>
5406 <td>Viene modificato l'IP sorgente. Solo in nat /
5407 POSTROUTING. Prevede l'opzione --to-source
5408 IP:porta. Si usa per permettere l'accesso a
5409 Internet da una rete locale con IP privati.</td>
5413 <td class="option-group"><kbd><span class=
5414 "option">-j <var>MASQUERADE</var></span></kbd></td>
5416 <td>Simile a SNAT, si applica quando i pacchetti
5417 escono da interfacce con IP dinamico (dialup, adsl,
5418 dhcp...). Si usa solo in nat / POSTROUTING e
5419 prevede l'opzione --to-ports porte.</td>
5423 <td class="option-group"><kbd><span class=
5424 "option">-j <var>REDIRECT</var></span></kbd></td>
5426 <td>Redirige il pacchetto ad una porta locale.
5427 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5428 previsto per fare un transparent proxy (con proxy
5429 server in esecuzione sulla macchina con
5434 <td class="option-group"><kbd><span class=
5435 "option">-j <var>RETURN</var></span></kbd></td>
5437 <td>Interrompe l'attraversamento della catena. Se
5438 questa e' una secondaria, il pacchetto torna ad
5439 attraversare la catena madre da punto in cui aveva
5440 fatto il salto nella secondaria. Se il RETURN e' in
5441 una delle catene di default, il pacchetto
5442 interrompe l'attraversamento e segue la policy di
5447 <td class="option-group"><kbd><span class=
5448 "option">-j <var>TOS</var></span></kbd></td>
5450 <td>Usabile solo nella tabella mangle, permette di
5451 cambiare il TOS (Type Of Service) di un pacchetto
5452 con l'opzione --set-tos. Per un elenco dei
5453 parametri disponibili: iptables -j TOS -h</td>
5457 <td class="option-group"><kbd><span class=
5458 "option">-j <var>MIRROR</var></span></kbd></td>
5460 <td>Curioso e sperimentale, questo target invia un
5461 pacchetto speculare al mittente. In pratica e' come
5462 se facesse da specchio per tutti i pacchetti
5463 ricevuti. Da usare con cautela, per evitare
5464 attacchi DOS indiretti.</td>
5471 <div class="section" id="tabella-filter">
5472 <h2><a class="toc-backref" href=
5473 "#id114">10.6 Tabella Filter</a></h2>
5475 <p>E' quella implicita e predefinita (-t filter) Riguarda
5476 le attivita' di filtraggio del traffico. Ha 3 catene di
5477 default: INPUT - Riguarda tutti i pacchetti destinati al
5478 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5479 i pacchetti che sono originati dal sistema e destinati ad
5480 uscire. FORWARD - Riguarda i pacchetti che attraversano il
5481 sistema, con IP sorgente e destinazione esterni.</p>
5483 <p>Esempio per permettere accesso alla porta 80 locale:
5484 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5485 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5488 <p>Esempio per permettere ad un pacchetto con IP sorgente
5489 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5490 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5494 <div class="section" id=
5495 "flush-automatico-per-macchine-remote">
5496 <h2><a class="toc-backref" href=
5497 "#id115">10.7 Flush automatico per
5498 macchine remote</a></h2>
5500 <p>Se state provando una configurazione del firewall per
5501 una macchina remota e' buona norma per evitare brutte
5502 figure attivare uno script che faccia il <em>flush</em>
5503 delle regole dopo qualche minuto. Potreste infatti
5504 inavvertitamente impostare una regola che vi impedisca di
5505 raggiungere la macchina remota, cosi' da non poter neanche
5506 eliminare quella regola e ripristinare la situazione
5509 <p><em>Veramente</em>, prima di lavorare sul firewall di
5510 una macchina remota impostate almeno un <tt class=
5511 "docutils literal"><span class="pre">at</span> <span class=
5512 "pre">now</span> <span class="pre">+5</span> <span class=
5513 "pre">min</span></tt> o con un'oretta di margine per fare
5514 il <em>flush</em> delle regole (su tutte le tabelle):</p>
5515 <pre class="literal-block">
5517 at> /sbin/iptables -F
5522 <div class="section" id="gestione-regole-rules">
5523 <h2><a class="toc-backref" href=
5524 "#id116">10.8 Gestione regole
5527 <p>Il comando iptables viene usato per ogni attivita' di
5528 gestione e configurazione.</p>
5530 <p>Inserimento regole:</p>
5532 <dl class="docutils">
5533 <dt>iptables -A CATENA ...</dt>
5535 <dd>Aggiunge una regola alla fine della catena
5538 <dt>iptables -I CATENA [#] ...</dt>
5540 <dd>Inserisce alla riga # (default 1) una regola nella
5541 catena indicata</dd>
5543 <dt>iptables -N CATENA</dt>
5545 <dd>Crea una nuova catena custom</dd>
5547 <dt>iptables -P CATENA TARGET</dt>
5549 <dd>Imposta il target di default per la catena
5553 <p>Rimozione regole e azzeramenti:</p>
5555 <dl class="docutils">
5556 <dt>iptables -F [catena]</dt>
5558 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5560 <dt>iptables -X [catena]</dt>
5562 <dd>Ripulisce tutte le catene custom (o quella
5565 <dt>iptables -Z [catena]</dt>
5567 <dd>Azzera i contatori sulle catene</dd>
5569 <dt>iptables -D catena #</dt>
5571 <dd>Cancella la regola numero # dalla catena
5575 <p>Interrogazione:</p>
5577 <dl class="docutils">
5578 <dt>iptables -L</dt>
5580 <dd>Elenca le regole esistenti</dd>
5582 <dt>iptables -L -n -v</dt>
5584 <dd>Elenca, senza risolvere gli host, in modo verboso le
5585 regole esistenti</dd>
5589 <div class="section" id="salvataggio-regole">
5590 <h2><a class="toc-backref" href=
5591 "#id117">10.9 Salvataggio regole</a></h2>
5593 <p>Il comando <tt class="docutils literal"><span class=
5594 "pre">iptables</span></tt> serve per interagire con il
5595 framework <tt class="docutils literal"><span class=
5596 "pre">Netfilter</span></tt> che gestisce il firewall di
5597 Linux al livello del kernel. Questo comporta, in modo
5598 analogo a quando avviene col comando <tt class=
5599 "docutils literal"><span class="pre">ifconfig</span></tt>,
5600 che i cambiamenti impostati siano in <em>tempo reale,
5601 RAM</em>, non persistenti nel sistema: al boot successivo
5602 del sistema tutto tornera' alle impostazioni di base (in
5603 questo caso <em>nulle</em>, con policy di default settate
5604 su <tt class="docutils literal"><span class=
5605 "pre">ACCEPT</span></tt> per tutto).</p>
5607 <p>Le varie invocazioni di iptables potrebbero essere
5608 richiamate da degli scripts dedicati, ma fortunatamente e'
5609 stata predisposta una apposita utility per gestire questi
5610 scripts in modo da avere a disposizione un <em>formato
5611 standard</em> per il salvataggio e il ripristino delle
5612 regole del firewall.</p>
5614 <p>Altro problema: decidere quando attivare / disattivare
5615 queste regole. Utilizzare i <em>runlevels</em> non e' una
5616 soluzione adeguata: le regole del firewall sono legate
5617 all'attivita' delle schede di rete (e un host con diverse
5618 schede di rete puo' attivarle a secondo delle esigenze di
5619 routing, partenza di servizi es file_sharing per un
5620 back-up...): il sistema operativo Debian permette di legare
5621 l'esecuzione di comandi alla attivazione di una device di
5622 rete (<tt class="docutils literal"><span class=
5623 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
5624 "docutils literal"><span class="pre">post-up</span></tt>,
5625 utile per devices che richiedono un certo tempo per
5626 inizializzarsi: come un tunnel o una connessione punto a
5627 punto), prima della sua attivazione (<tt class=
5628 "docutils literal"><span class="pre">pre-up</span></tt>).
5629 Allo stesso modo sono disponibili eventi analoghi per
5630 accompagnare la disattivazione dei device di rete: si veda
5631 la pagina man di <tt class="docutils literal"><span class=
5632 "pre">interfaces</span></tt>.</p>
5634 <p>Nel nostro caso avremo per una possibile scheda
5635 <tt class="docutils literal"><span class=
5636 "pre">eth0</span></tt>:</p>
5638 <p><tt class="docutils literal"><span class=
5639 "pre">/etc/network/interfaces</span></tt></p>
5640 <pre class="literal-block">
5641 iface eth1 inet static
5642 up /sbin/iptables-restore /root/firewall/basic_fw
5643 # Seguono i soliti parametri della scheda di rete
5644 address 10.10.208.21
5647 <div class="section" id="iptables-save">
5648 <h3><a class="toc-backref" href=
5649 "#id118">10.9.1 Iptables-save</a></h3>
5651 <p>Per salvare le regole di iptables attualmente presenti
5652 nel kernel si usi il comando:</p>
5653 <pre class="literal-block">
5654 # iptables-save >> /root/firewall/basic_fw
5657 <p>Il contenuto del file dovrebbe essere
5658 <em>comprensibile</em>: sostanzialmente sono regole di
5659 iptables, senza il comando iptables ripetuto, suddivisi
5660 per le varie tabelle. Potete comunque correggere
5661 eventuali parametri con un edito di testo.</p>
5663 <p>Se non avete un'idea migliore potreste voler tenere
5664 gli script dei firewall in una cartella <tt class=
5665 "docutils literal"><span class=
5666 "pre">~/firewall</span></tt> nella home directory
5667 dell'utente <tt class="docutils literal"><span class=
5668 "pre">root</span></tt>.</p>
5671 <div class="section" id="iptables-restore">
5672 <h3><a class="toc-backref" href=
5673 "#id119">10.9.2 Iptables-restore</a></h3>
5675 <p>Per ripristinare un set di regole precedentemente
5676 salvate con <tt class="docutils literal"><span class=
5677 "pre">iptables-save</span></tt> si utilizzi <tt class=
5678 "docutils literal"><span class=
5679 "pre">iptables-restore</span></tt>. Se questo deve essere
5680 fatto in modalita' <em>non interattiva</em>, ad esempio
5681 deve essere eseguito dal demone che si occupa di
5682 inizializzare le schede di rete, oppure un <em>cron</em>
5683 o altro, e' buona norma richiamare i percorsi completi
5684 sia dei comandi che dei file:</p>
5685 <pre class="literal-block">
5686 /sbin/iptables-restore /root/firewall/basic_fw
5691 <div class="section" id="esempi">
5692 <h2><a class="toc-backref" href=
5693 "#id120">10.10 Esempi</a></h2>
5695 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5696 e' un computer con un paio di schede di rete fisiche una
5697 delle quali collegata alla rete internet l'altra a una rete
5698 privata per la LAN interna.</p>
5701 <ol class="arabic simple">
5702 <li><tt class="docutils literal"><span class=
5703 "pre">eth0</span></tt> scheda di rete principale sulla
5704 rete privata interna 192.168.0.0/24</li>
5706 <li><tt class="docutils literal"><span class=
5707 "pre">eth1</span></tt> scheda di rete secondaria per la
5708 connessione ad internet</li>
5710 <li><tt class="docutils literal"><span class=
5711 "pre">ppp0</span></tt> punto-a-punto per una
5712 connessione ad internet</li>
5716 <div class="section" id="bloccare-i-ping-dall-esterno">
5717 <h3><a class="toc-backref" href=
5718 "#id121">10.10.1 Bloccare i ping
5719 dall'esterno</a></h3>
5721 <p>Spesso gli script che attaccano
5722 <em>automaticamente</em> le varie reti provano a fare un
5723 ping per verificare quali IP sono on-line: bloccare il
5724 traffico <tt class="docutils literal"><span class=
5725 "pre">ICMP</span></tt> in ingresso puo' aiutare ad
5726 evitare parte di questi attacchi:</p>
5727 <pre class="literal-block">
5728 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5732 <div class="section" id="masquerading-snat">
5733 <h3><a class="toc-backref" href=
5734 "#id122">10.10.2 Masquerading
5737 <dl class="docutils">
5738 <dt>Per attivare la network address translation (in
5739 questo caso un SNAT) per la rete locale privata
5740 sull'indirizzo ip del <em>modem</em>::</dt>
5742 <dd>iptables -A POSTROUTING -s
5743 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5746 <p>Il <em>Masquerading</em> a differenza dello
5747 <em>SNAT</em> puro (<tt class=
5748 "docutils literal"><span class="pre">-j</span>
5749 <span class="pre">SNAT</span> <span class=
5750 "pre">--to-source</span> <span class=
5751 "pre">proprio_ip_pubblico</span> <span class=
5752 "pre">)</span> <span class="pre">legge</span>
5753 <span class="pre">l'indirizzo</span> <span class=
5754 "pre">ip</span> <span class="pre">del</span> <span class=
5755 "pre">device</span> <span class="pre">``ppp0</span></tt>.
5756 In questo modo se l'IP cambia automaticamente si aggiorna
5757 anche il source natting. Se avete un indirizzo IP statico
5758 assegnato al vostro gateway potete invece usare lo SNAT
5761 <dl class="docutils">
5762 <dt>Altri esempi::</dt>
5765 <p class="first">## Change source addresses to
5766 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5767 SNAT --to 1.2.3.4</p>
5769 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5770 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5771 SNAT --to 1.2.3.4-1.2.3.6</p>
5773 <p class="last">## Change source addresses to
5774 1.2.3.4, ports 1-1023 # iptables -t nat -A
5775 POSTROUTING -p tcp -o eth0 -j SNAT --to
5781 <div class="section" id="brute-force">
5782 <h3><a class="toc-backref" href=
5783 "#id123">10.10.3 Brute force</a></h3>
5785 <p>Per limitare attacchi di tipo brute force su SSH:</p>
5786 <pre class="literal-block">
5787 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 3000 --hitcount 4 --name DEFAULT --rsource -j DROP
5789 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5795 <div class="section" id="note">
5796 <h1><a class="toc-backref" href=
5797 "#id124">11 NOTE</a></h1>
5799 <dl class="docutils">
5803 <ul class="first last simple">
5804 <li>altri esempi commenti su una zona</li>
5806 <li>esempi di una zona PTR?</li>
5808 <li>dns secondari</li>
5815 <p>sintassi: in <tt class="docutils literal"><span class=
5816 "pre">monospace</span></tt> :</p>
5819 <li>nomi di files</li>