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.6: 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-di-rete-in-ambiete-gnu-linx">
258 Appunti sulla installazione e configurazione dei servizi di
259 rete in ambiete Gnu/Linx</h2>
262 <table class="docutils field-list" frame="void" rules="none">
263 <col class="field-name">
264 <col class="field-body">
268 <th class="field-name">Author:</th>
270 <td class="field-body">Andrea Manni</td>
274 <th class="field-name">Copyright:</th>
276 <td class="field-body">GFDL</td>
280 <th class="field-name">Version:</th>
282 <td class="field-body">0.92</td>
288 <p>Questa guida tratta la configurazione di base dei principali
289 servizi di rete utilizzati con sistemi operativi <em>Unix</em>
290 e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
291 per amministratori di rete in ambiente <em>GNU/Linux</em>. In
292 particolare questa guida e' stata scritta usando come
293 riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
294 esempi presentati dovrebbero quindi essere direttamente
295 utilizzabili anche su distribuzioni derivate da Debian come
296 Ubuntu, per sistemi operativi diversi si presti attenzione ai
297 percorsi dei file citati.</p>
299 <div class="contents topic" id="indice-degli-argomenti">
300 <p class="topic-title first">Indice degli argomenti</p>
302 <ul class="auto-toc simple">
304 <a class="reference internal" href=
305 "#configurazione-sistema" id="id9" name=
306 "id9">1 Configurazione sistema</a>
308 <ul class="auto-toc">
309 <li><a class="reference internal" href=
310 "#solo-per-uso-interno" id="id10" name=
311 "id10">1.1 Solo per uso
315 <a class="reference internal" href="#rete" id="id11"
316 name="id11">1.2 Rete</a>
318 <ul class="auto-toc">
319 <li><a class="reference internal" href=
320 "#interfaces" id="id12" name=
321 "id12">1.2.1 interfaces</a></li>
325 <li><a class="reference internal" href=
326 "#bash-completion" id="id13" name=
327 "id13">1.3 Bash completion</a></li>
329 <li><a class="reference internal" href="#vim" id="id14"
330 name="id14">1.4 Vim</a></li>
332 <li><a class="reference internal" href="#vnc" id="id15"
333 name="id15">1.5 VNC</a></li>
335 <li><a class="reference internal" href=
336 "#lista-dei-pacchetti-di-base" id="id16" name=
337 "id16">1.6 Lista dei pacchetti di
341 <a class="reference internal" href=
342 "#apt-configurazione" id="id17" name=
343 "id17">1.7 Apt configurazione</a>
345 <ul class="auto-toc">
346 <li><a class="reference internal" href=
347 "#sources-list" id="id18" name=
348 "id18">1.7.1 sources.list</a></li>
350 <li><a class="reference internal" href=
351 "#etc-apt-apt-conf" id="id19" name=
352 "id19">1.7.2 /etc/apt/apt.conf</a></li>
359 <a class="reference internal" href="#squid" id="id20"
360 name="id20">2 Squid</a>
362 <ul class="auto-toc">
364 <a class="reference internal" href=
365 "#configurazione-squid-conf" id="id21" name=
366 "id21">2.1 Configurazione:
369 <ul class="auto-toc">
370 <li><a class="reference internal" href="#cache-dir"
372 "id22">2.1.1 Cache_dir</a></li>
374 <li><a class="reference internal" href=
375 "#tag-maximum-object-size" id="id23" name=
376 "id23">2.1.2 TAG:
377 maximum_object_size</a></li>
379 <li><a class="reference internal" href=
380 "#tag-cache-mem" id="id24" name=
381 "id24">2.1.3 TAG:
384 <li><a class="reference internal" href=
385 "#tag-minimum-object-size" id="id25" name=
386 "id25">2.1.4 TAG:
387 minimum_object_size</a></li>
392 <a class="reference internal" href=
393 "#negoziazione-degli-accesi-al-servizio" id="id26"
394 name="id26">2.2 Negoziazione degli
395 accesi al servizio</a>
397 <ul class="auto-toc">
398 <li><a class="reference internal" href=
399 "#acl-e-http-access" id="id27" name=
400 "id27">2.2.1 ACL e http
406 <a class="reference internal" href="#testare-squid"
407 id="id28" name="id28">2.3 Testare
410 <ul class="auto-toc">
411 <li><a class="reference internal" href=
412 "#client-wgetrc" id="id29" name=
413 "id29">2.3.1 Client:
416 <li><a class="reference internal" href=
417 "#server-access-log" id="id30" name=
418 "id30">2.3.2 Server:
425 <li><a class="reference internal" href="#tiny-proxy" id=
426 "id31" name="id31">3 Tiny proxy</a></li>
429 <a class="reference internal" href="#apache" id="id32"
430 name="id32">4 Apache</a>
432 <ul class="auto-toc">
433 <li><a class="reference internal" href=
434 "#pacchetti-da-installare" id="id33" name=
435 "id33">4.1 Pacchetti da
436 installare::</a></li>
438 <li><a class="reference internal" href=
439 "#configurazione-di-apache" id="id34" name=
440 "id34">4.2 Configurazione di
443 <li><a class="reference internal" href="#apache-conf"
445 "id35">4.3 apache.conf</a></li>
448 <a class="reference internal" href=
449 "#installazione-di-php" id="id36" name=
450 "id36">4.4 Installazione di PHP</a>
452 <ul class="auto-toc">
453 <li><a class="reference internal" href=
454 "#test-del-modulo-php" id="id37" name=
455 "id37">4.4.1 Test del modulo
458 <li><a class="reference internal" href=
459 "#installazione-del-supporto-per-mysql-a-php" id=
461 "id38">4.4.2 Installazione del
462 supporto per Mysql a PHP</a></li>
464 <li><a class="reference internal" href=
465 "#phpmyadmin" id="id39" name=
466 "id39">4.4.3 phpmyadmin</a></li>
468 <li><a class="reference internal" href=
469 "#installazione-del-supporto-per-postgresql-a-php"
471 "id40">4.4.4 Installazione del
472 supporto per Postgresql a PHP</a></li>
474 <li><a class="reference internal" href=
475 "#phppgadmin" id="id41" name=
476 "id41">4.4.5 phppgadmin</a></li>
481 <a class="reference internal" href="#virtual-hosts"
482 id="id42" name="id42">4.5 Virtual
485 <ul class="auto-toc">
486 <li><a class="reference internal" href=
487 "#gestione-dns" id="id43" name=
488 "id43">4.5.1 Gestione DNS</a></li>
490 <li><a class="reference internal" href=
491 "#eseguire-una-query-dns-con-dig" id="id44" name=
492 "id44">4.5.2 Eseguire una query
494 "docutils literal">dig</tt>::</a></li>
496 <li><a class="reference internal" href="#id3" id=
497 "id45" name="id45">4.5.3 Virtual
503 <a class="reference internal" href=
504 "#negoziazione-accessi" id="id46" name=
505 "id46">4.6 Negoziazione accessi</a>
507 <ul class="auto-toc">
508 <li><a class="reference internal" href=
509 "#limiti-su-base-ip" id="id47" name=
510 "id47">4.6.1 Limiti su base
516 <a class="reference internal" href=
517 "#user-authentication" id="id48" name=
518 "id48">4.7 User Authentication</a>
520 <ul class="auto-toc">
521 <li><a class="reference internal" href=
522 "#definire-la-cartella" id="id49" name=
523 "id49">4.7.1 Definire la
526 <li><a class="reference internal" href=
527 "#creazione-del-database-delle-passwords" id="id50"
528 name="id50">4.7.2 Creazione del
529 database delle passwords</a></li>
531 <li><a class="reference internal" href="#id4" id=
533 "id51">4.7.3 Configurazione di
538 <li><a class="reference internal" href="#cavets" id=
539 "id52" name="id52">4.8 Cavets</a></li>
544 <a class="reference internal" href="#domain-name-system"
545 id="id53" name="id53">5 Domain Name
548 <ul class="auto-toc">
549 <li><a class="reference internal" href=
550 "#risoluzione-inversa" id="id54" name=
551 "id54">5.1 Risoluzione
554 <li><a class="reference internal" href=
555 "#nomi-di-dominio" id="id55" name=
556 "id55">5.2 Nomi di dominio</a></li>
558 <li><a class="reference internal" href=
559 "#tipologie-di-record" id="id56" name=
560 "id56">5.3 Tipologie di
563 <li><a class="reference internal" href="#utilizzo" id=
565 "id57">5.4 Utilizzo</a></li>
567 <li><a class="reference internal" href=
568 "#risoluzione-dei-nomi-di-dominio" id="id58" name=
569 "id58">5.5 Risoluzione dei nomi di
572 <li><a class="reference internal" href="#dig" id="id59"
573 name="id59">5.6 Dig</a></li>
575 <li><a class="reference internal" href="#resolv-conf"
577 "id60">5.7 resolv.conf</a></li>
579 <li><a class="reference internal" href="#etc-hosts" id=
581 "id61">5.8 /etc/hosts</a></li>
584 <a class="reference internal" href="#hostname" id=
585 "id62" name="id62">5.9 Hostname</a>
587 <ul class="auto-toc">
588 <li><a class="reference internal" href="#fqdn" id=
590 "id63">5.9.1 FQDN</a></li>
597 <a class="reference internal" href="#dnsmasq" id="id64"
598 name="id64">6 DNSmasq</a>
600 <ul class="auto-toc">
601 <li><a class="reference internal" href=
602 "#configurazione" id="id65" name=
603 "id65">6.1 Configurazione</a></li>
605 <li><a class="reference internal" href="#dhcp" id=
606 "id66" name="id66">6.2 DHCP</a></li>
608 <li><a class="reference internal" href="#dns-cache" id=
609 "id67" name="id67">6.3 DNS
615 <a class="reference internal" href=
616 "#bind-dns-autoritativo" id="id68" name=
617 "id68">7 Bind : DNS Autoritativo</a>
619 <ul class="auto-toc">
620 <li><a class="reference internal" href="#id5" id="id69"
621 name="id69">7.1 DNS cache</a></li>
624 <a class="reference internal" href=
625 "#ospitare-una-zona" id="id70" name=
626 "id70">7.2 Ospitare una zona</a>
628 <ul class="auto-toc">
629 <li><a class="reference internal" href=
630 "#named-conf-local" id="id71" name=
631 "id71">7.2.1 named.conf.local</a></li>
634 <a class="reference internal" href=
635 "#configurazione-della-zona" id="id72" name=
636 "id72">7.2.2 Configurazione
639 <ul class="auto-toc">
640 <li><a class="reference internal" href=
641 "#soa-start-of-authority-record" id="id73"
642 name="id73">7.2.2.1 SOA: Start
643 of Authority Record</a></li>
645 <li><a class="reference internal" href=
646 "#altri-campi" id="id74" name=
647 "id74">7.2.2.2 Altri
654 <li><a class="reference internal" href="#dns-slave" id=
655 "id75" name="id75">7.3 DNS
659 <a class="reference internal" href=
660 "#aggiornamento-dinamico-nsupdate" id="id76" name=
661 "id76">7.4 Aggiornamento dinamico:
664 <ul class="auto-toc">
665 <li><a class="reference internal" href=
666 "#configurazione-client-nsupdate" id="id77" name=
667 "id77">7.4.1 Configurazione client
670 <li><a class="reference internal" href=
671 "#configurazione-server-riconoscimento-chiave" id=
673 "id78">7.4.2 Configurazione
674 server: riconoscimento chiave</a></li>
676 <li><a class="reference internal" href=
677 "#server-gestione-dell-intera-zona" id="id79" name=
678 "id79">7.4.3 Server: gestione
679 dell'intera zona</a></li>
681 <li><a class="reference internal" href=
682 "#automatizzare-l-aggiornamento-dinamico" id="id80"
683 name="id80">7.4.4 Automatizzare
684 l'aggiornamento dinamico</a></li>
688 <li><a class="reference internal" href=
689 "#link-suggeriti" id="id81" name=
690 "id81">7.5 Link suggeriti:</a></li>
695 <a class="reference internal" href="#samba" id="id82"
696 name="id82">8 Samba</a>
698 <ul class="auto-toc">
699 <li><a class="reference internal" href="#pacchetti" id=
701 "id83">8.1 Pacchetti</a></li>
703 <li><a class="reference internal" href=
704 "#passwords-e-autenticazione" id="id84" name=
705 "id84">8.2 Passwords e
706 autenticazione</a></li>
708 <li><a class="reference internal" href=
709 "#creazione-utenti" id="id85" name=
710 "id85">8.3 Creazione Utenti</a></li>
713 <a class="reference internal" href=
714 "#creare-la-condivisione" id="id86" name=
715 "id86">8.4 Creare la
718 <ul class="auto-toc">
719 <li><a class="reference internal" href=
720 "#sicurezza-permessi-di-esecuzione-sul-server" id=
722 "id87">8.4.1 Sicurezza: permessi
723 di esecuzione sul server</a></li>
728 <a class="reference internal" href=
729 "#configurazione-dell-applicativo-samba-vero-e-proprio"
731 "id88">8.5 Configurazione
732 dell'applicativo Samba vero e proprio.</a>
734 <ul class="auto-toc">
735 <li><a class="reference internal" href=
736 "#creazione-di-un-gruppo" id="id89" name=
737 "id89">8.5.1 Creazione di un
742 <li><a class="reference internal" href=
743 "#testare-il-servizio" id="id90" name=
744 "id90">8.6 Testare il
750 <a class="reference internal" href=
751 "#server-di-posta-postfix" id="id91" name=
752 "id91">9 Server di posta: Postfix</a>
754 <ul class="auto-toc">
756 <a class="reference internal" href=
757 "#test-del-server-smtp" id="id92" name=
758 "id92">9.1 Test del server smtp</a>
760 <ul class="auto-toc">
761 <li><a class="reference internal" href="#swaks" id=
763 "id93">9.1.1 Swaks</a></li>
767 <li><a class="reference internal" href="#imap-e-pop"
768 id="id94" name="id94">9.2 Imap e
772 <a class="reference internal" href=
773 "#client-a-riga-di-comando" id="id95" name=
774 "id95">9.3 Client a riga di
777 <ul class="auto-toc">
778 <li><a class="reference internal" href="#mailx" id=
780 "id96">9.3.1 mailx</a></li>
782 <li><a class="reference internal" href="#mutt" id=
784 "id97">9.3.2 Mutt</a></li>
786 <li><a class="reference internal" href=
787 "#web-client" id="id98" name=
788 "id98">9.3.3 Web client</a></li>
793 <a class="reference internal" href="#graylisting" id=
795 "id99">9.4 Graylisting</a>
797 <ul class="auto-toc">
798 <li><a class="reference internal" href=
799 "#abilitazione-in-postfix" id="id100" name=
800 "id100">9.4.1 Abilitazione in
803 <li><a class="reference internal" href="#test" id=
805 "id101">9.4.2 Test</a></li>
807 <li><a class="reference internal" href=
808 "#statistiche" id="id102" name=
809 "id102">9.4.3 Statistiche</a></li>
816 <a class="reference internal" href="#firewall" id="id103"
817 name="id103">10 Firewall</a>
819 <ul class="auto-toc">
820 <li><a class="reference internal" href="#links" id=
822 "id104">10.1 Links</a></li>
824 <li><a class="reference internal" href="#ipfilter" id=
826 "id105">10.2 Ipfilter</a></li>
829 <a class="reference internal" href=
830 "#progettazione-di-un-firewall" id="id106" name=
831 "id106">10.3 Progettazione di un
834 <ul class="auto-toc">
835 <li><a class="reference internal" href=
836 "#collocazione" id="id107" name=
837 "id107">10.3.1 Collocazione</a></li>
839 <li><a class="reference internal" href=
840 "#policy-di-default" id="id108" name=
841 "id108">10.3.2 Policy di
844 <li><a class="reference internal" href="#hardware"
846 "id109">10.3.3 Hardware</a></li>
850 <li><a class="reference internal" href=
851 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
852 "id110" name="id110">10.4 Percorso dei
853 pacchetti tra tabelle e catene</a></li>
856 <a class="reference internal" href=
857 "#concetti-di-base" id="id111" name=
858 "id111">10.5 Concetti di base</a>
860 <ul class="auto-toc">
861 <li><a class="reference internal" href=
862 "#tabelle-catene-regole" id="id112" name=
863 "id112">10.5.1 Tabelle, catene,
866 <li><a class="reference internal" href="#match" id=
868 "id113">10.5.2 Match</a></li>
870 <li><a class="reference internal" href="#targets"
872 "id114">10.5.3 Targets</a></li>
876 <li><a class="reference internal" href=
877 "#tabella-filter" id="id115" name=
878 "id115">10.6 Tabella Filter</a></li>
880 <li><a class="reference internal" href=
881 "#flush-automatico-per-macchine-remote" id="id116"
882 name="id116">10.7 Flush automatico per
883 macchine remote</a></li>
885 <li><a class="reference internal" href=
886 "#gestione-regole-rules" id="id117" name=
887 "id117">10.8 Gestione regole
891 <a class="reference internal" href=
892 "#salvataggio-regole" id="id118" name=
893 "id118">10.9 Salvataggio regole</a>
895 <ul class="auto-toc">
896 <li><a class="reference internal" href=
897 "#iptables-save" id="id119" name=
898 "id119">10.9.1 Iptables-save</a></li>
900 <li><a class="reference internal" href=
901 "#iptables-restore" id="id120" name=
902 "id120">10.9.2 Iptables-restore</a></li>
907 <a class="reference internal" href="#esempi" id=
909 "id121">10.10 Esempi</a>
911 <ul class="auto-toc">
912 <li><a class="reference internal" href=
913 "#bloccare-i-ping-dall-esterno" id="id122" name=
914 "id122">10.10.1 Bloccare i ping
915 dall'esterno</a></li>
917 <li><a class="reference internal" href=
918 "#masquerading-snat" id="id123" name=
919 "id123">10.10.2 Masquerading
922 <li><a class="reference internal" href=
923 "#brute-force" id="id124" name=
924 "id124">10.10.3 Brute
932 <a class="reference internal" href="#ftp-server" id=
933 "id125" name="id125">11 FTP Server</a>
935 <ul class="auto-toc">
936 <li><a class="reference internal" href="#id8" id=
938 "id126">11.1 Pacchetti</a></li>
940 <li><a class="reference internal" href="#sessioni-ftp"
941 id="id127" name="id127">11.2 Sessioni
944 <li><a class="reference internal" href=
945 "#configurazione-iniziale" id="id128" name=
946 "id128">11.3 Configurazione
949 <li><a class="reference internal" href=
950 "#abilitare-gli-utenti-locali" id="id129" name=
951 "id129">11.4 Abilitare gli utenti
954 <li><a class="reference internal" href="#jail-chroot"
955 id="id130" name="id130">11.5 Jail
958 <li><a class="reference internal" href=
959 "#permessi-sul-filesystem" id="id131" name=
960 "id131">11.6 Permessi sul
963 <li><a class="reference internal" href=
964 "#shell-dell-utente" id="id132" name=
965 "id132">11.7 Shell
968 <li><a class="reference internal" href="#altre-opzioni"
969 id="id133" name="id133">11.8 Altre
976 <p>Generato il 2010-02-04 con: <a class="reference external"
978 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
980 <div class="section" id="configurazione-sistema">
981 <h1><a class="toc-backref" href=
982 "#id9">1 Configurazione sistema</a></h1>
984 <div class="section" id="solo-per-uso-interno">
985 <h2><a class="toc-backref" href=
986 "#id10">1.1 Solo per uso interno</a></h2>
988 <p>Impostazioni di base per la configurazione del sistema
989 operativo e della rete nel laboratorio 208 facente parte
990 della rete piffa.net .</p>
992 <p>Sono qui riportati i parametri della rete locale per
993 comodita' degli studenti, gli altri lettori possono
994 considerarli come riferimento per comprendere i valori
995 espressi nei vari file di configurazione. Ad esempio:
996 quando leggerete <tt class=
997 "docutils literal">10.10.208.248:3128</tt> saprete che si
998 tratta del nostro <em>proxy http</em> in ascolto sulla
999 porta <cite>3128</cite>, stara' quindi a voi sostituire i
1000 dati con gli equivalenti <em>IP</em> della vostra rete.</p>
1003 <div class="section" id="rete">
1004 <h2><a class="toc-backref" href=
1005 "#id11">1.2 Rete</a></h2>
1007 <p>Parametri della rete attualmente in uso:</p>
1009 <table border="1" class="docutils">
1015 <tbody valign="top">
1017 <td colspan="2">Parametri della rete</td>
1023 <td>10.10.208.0/24</td>
1029 <td>255.255.255.0</td>
1035 <td>10.10.208.255</td>
1041 <td>10.10.208.248</td>
1047 <td>10.10.208.248</td>
1052 <p>Dal server locale degli studeti,
1053 <strong>Bender</strong>, corrispondente all'IP <tt class=
1054 "docutils literal">10.10.208.248</tt>, vengono erogati i
1055 servizi DHCP, DNS, gateway (con NAT), proxy http e mirror
1056 della distribuzione Debian ( <a class="reference external"
1058 "http://debian.piffa.net">http://debian.piffa.net</a>).
1059 Altri servizi in esecuzione sul server:</p>
1062 <li>Rsync server e altri software di aggiornamento /
1063 installazione di massa</li>
1065 <li>Server imap / pop3 / webmail / smtp</li>
1067 <li>Server ssh per i test degli studenti</li>
1069 <li>File server Samba, NFS e controller di qualsiasi
1070 altro FS distribuito</li>
1072 <li>Print server per la gestione delle stampanti</li>
1076 <li>Mirror locale delle *.iso dei sistemi operativi e dei
1077 vari software usati durante le lezioni</li>
1079 <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1080 framework vengono attivati a seconda dei corsi
1084 <p>Durante il corso delle lezioni e' opportuno che le
1085 macchine degli studenti si appoggino al server Bender
1086 (ottetto finale <tt class="docutils literal">248</tt>), nel
1087 caso questo non fosse raggiungibile (ad esempio per
1088 permettere impostazioni di DHCP / routing diverse) sara'
1089 comunque disponibile il <tt class=
1090 "docutils literal">10.10.208.254</tt> come gateway | DNS
1091 per la rete <tt class=
1092 "docutils literal">10.10.208.10</tt>.</p>
1094 <p><strong>Non e' piu' possibile</strong> raggiungere
1095 Bender tramite l'IP pubblico <tt class=
1096 "docutils literal">212.22.136.248</tt> o <em>qualsiasi
1097 altro ip</em> della classe <tt class="docutils literal">C
1098 212.22.136.0/24</tt> precedentemente disponibile.</p>
1100 <p>Il computer del docente con il server VNC e' sempre
1101 configurato con l'ottetto finale: <tt class=
1102 "docutils literal">177</tt> della rete utilizzata durante
1103 le lezioni (quindi generalmente la VNC sara' disponibile
1104 sul <tt class="docutils literal">10.10.208.177:1</tt>.</p>
1106 <p>Gli studenti sono pregati di non impedire l'accesso SSH
1107 alla propria macchina dal computer del docente, e non
1108 modificare la password dell'utente <tt class=
1109 "docutils literal">root</tt> del sistema operativo
1110 <em>pre-istallato</em> (ad es: <em>Diurno</em>).</p>
1112 <div class="section" id="interfaces">
1113 <h3><a class="toc-backref" href=
1114 "#id12">1.2.1 interfaces</a></h3>
1116 <p>Segue un esempio del file di configurazione della
1117 scheda di rete con configurazione statica:</p>
1119 <p>/etc/network/interfaces:</p>
1120 <pre class="literal-block">
1121 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1123 # The loopback interface
1124 iface lo inet loopback
1126 # La prima scheda di rete (se si chiama eth0)
1127 iface etho inet static
1129 # iface etho inet dhcp
1130 address 10.10.208.101
1131 netmask 255.255.255.0
1133 broadcast 10.10.208.255
1134 gateway 10.10.208.254
1136 # Quali interfaccie devono partire automaticamente:
1140 <p>Controllare il nome della propria scheda di rete: a
1141 volte <em>udev</em> rinomina la prima scheda a <tt class=
1142 "docutils literal">eth1</tt>, oppure potreste avere piu'
1143 di una scheda di rete (anche un'interfaccia
1144 <em>firewire</em> puo' essere automaticamente abilitata
1145 come scheda di rete).</p>
1147 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1148 , eth0:1 , ...) ricordarsi che queste dipendono dalla
1149 scheda fisica a cui sono associate: abbattere con
1150 <tt class="docutils literal">ifconfig down eth0</tt> la
1151 scheda principale fara' cadere anche queste. Tornando ad
1152 attivare la scada principale con <tt class=
1153 "docutils literal">ifconfig eth0 up</tt> la virtuale
1154 tornera' attiva: nel caso voleste disabilitarla dovrete
1155 quindi sempre abbattere manualmente la scheda virtuale
1156 <em>prima</em> della scheda reale.</p>
1158 <p>I DNS vanno indicati nel file <tt class=
1159 "docutils literal">/etc/resolv.conf</tt> , la cui
1160 sintassi e' spiegata al punto 4.6 . Come DNS si
1161 <em>deve</em> usare il server Bender, alcuni parametri
1162 dei software di installazione, risoluzione dei mirror,
1163 vengono opportunamente modificatia da questo DNS.</p>
1167 <div class="section" id="bash-completion">
1168 <h2><a class="toc-backref" href=
1169 "#id13">1.3 Bash completion</a></h2>
1171 <p>Il completamento automatico della shell (che si attiva
1172 premendo il tasto tab una o due volte mentre si sta
1173 scrivendo un termine) permette di comporre automaticamente
1174 i nomi dei comandi e i percorsi dei file, sopratutto la
1175 composizione automatica dei percorsi dei file e' di grande
1178 <p>Bash_completion permette di integrare il completamento
1179 automatico con i nomi dei pacchetti e oggetti dei comandi:
1180 ad es. volendo digitare <tt class=
1181 "docutils literal"><span class="pre">apt-get</span>
1182 inst[TAB] xtigh[TAB]</tt> ora verra' completato
1183 automaticamente sia la parola <tt class=
1184 "docutils literal">install</tt> che il nome del pacchetto
1185 <tt class="docutils literal">xtightvncviewer</tt>.</p>
1187 <p>Abilitare /etc/bash_completion nel file <tt class=
1188 "docutils literal">/etc/bash.bashrc</tt> oppure includerlo
1189 nel proprio <tt class="docutils literal"><span class=
1190 "pre">~/.bashrc</span></tt> (che sarebbe il file
1191 <em>nascosto</em>, quindi con un punto all'inizio del nome
1192 del file, di configurazione della shell bash per ogni
1193 utente, presente nella propria <em>home
1194 directory</em>):</p>
1195 <pre class="literal-block">
1196 echo ". /etc/bash_completion" >> ~/.bashrc
1199 <p>Esempio di ~/.bahsrc</p>
1200 <pre class="literal-block">
1201 # ~/.bashrc: executed by bash(1) for non-login shells.
1203 export PS1='\h:\w\$ '
1206 # De-commentare le seguenti righe per abilitare la colorazione dei
1208 export LS_OPTIONS='--color=auto'
1210 alias ls='ls $LS_OPTIONS'
1211 alias ll='ls $LS_OPTIONS -l'
1212 alias l='ls $LS_OPTIONS -lA'
1214 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1219 # questo abilita bash completion
1220 . /etc/bash_completion
1223 <p>Il file <tt class=
1224 "docutils literal">/etc/bash_completion</tt> deve essere
1225 presente nel sistema, in caso contrario installare il
1226 pacchetto: <tt class="docutils literal"><span class=
1227 "pre">bash-completion</span></tt>. Generalmente l'utente
1228 <tt class="docutils literal">root</tt> ha un file
1229 <tt class="docutils literal">.bashrc</tt> preimpostato
1230 analogo a quello citato sopra, a differenza dei normali
1231 utenti di sistema.</p>
1236 <li><a class="reference external" href=
1237 "http://www.debian-administration.org/articles/316">An
1238 introduction to bash completion</a></li>
1240 <li><a class="reference external" href=
1241 "http://www.caliban.org/bash/">Working more productively
1242 with bash 2.x/3.x</a></li>
1244 <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1245 "reference external" href=
1246 "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1250 <div class="section" id="vim">
1251 <h2><a class="toc-backref" href=
1252 "#id14">1.4 Vim</a></h2>
1254 <p>Vim e' l'editor di testo preferito dai sistemisti,
1255 quindi sara' conveniente impostare fin da subito alcune
1256 impostazioni per renderlo piu' comodo.</p>
1258 <p>Assicurarsi che sia installata nel sistema la versione
1259 completa dell'editor installando il pacchetto <tt class=
1260 "docutils literal">vim</tt>:</p>
1261 <pre class="literal-block">
1262 # apt-get install vim
1265 <p>Modificare poi il file di configurazione generale
1266 <tt class="docutils literal">/etc/vim/vimrc</tt></p>
1267 <pre class="literal-block">
1268 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1269 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1270 " you can find below. If you wish to change any of those settings, you should
1271 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1272 " everytime an upgrade of the vim packages is performed. It is recommended to
1273 " make changes after sourcing debian.vim since it alters the value of the
1274 " 'compatible' option.
1276 " This line should not be removed as it ensures that various options are
1277 " properly set to work with the Vim-related packages available in Debian.
1280 " Uncomment the next line to make Vim more Vi-compatible
1281 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1282 " options, so any other options should be set AFTER setting 'compatible'.
1285 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1286 " line enables syntax highlighting by default.
1289 " If using a dark background within the editing area and syntax highlighting
1290 " turn on this option as well.
1293 " Uncomment the following to have Vim jump to the last position when
1297 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1298 \| exe "normal! g'\"" | endif
1301 " Uncomment the following to have Vim load indentation rules and plugins
1302 " according to the detected filetype.
1303 " This is not recommanded if you often copy and paste into vim,
1304 " as it messes all the indentation.
1306 filetype plugin indent on
1309 " This goes for comments folding: use co to expnad and zc to compress,
1310 " zi to toggle on/off
1312 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1314 " The following are commented out as they cause vim to behave a lot
1315 " differently from regular Vi. They are highly recommended though.
1316 set showcmd " Show (partial) command in status line.
1317 "set showmatch " Show matching brackets.
1318 # Ignorecase is quite userfull
1319 set ignorecase " Do case insensitive matching
1320 "set smartcase " Do smart case matching
1321 "set incsearch " Incremental search
1322 set autowrite " Automatically save before commands like :next and :make
1323 "set hidden " Hide buffers when they are abandoned
1324 "set mouse=a " Enable mouse usage (all modes) in terminals
1326 " Source a global configuration file if available
1327 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1328 if filereadable("/etc/vim/vimrc.local")
1329 source /etc/vim/vimrc.local
1333 <p>I principianti faranno bene ad esercitarsi con
1334 <tt class="docutils literal">vimtutor it</tt>.</p>
1336 <p>Altri link per VIM:</p>
1339 <li>Vim Introduction and Tutorial: <a class=
1340 "reference external" href=
1341 "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1342 http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1344 <li><a class="reference external" href=
1345 "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1347 <li><a class="reference external" href=
1348 "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1352 <div class="section" id="vnc">
1353 <h2><a class="toc-backref" href=
1354 "#id15">1.5 VNC</a></h2>
1356 <p>I Virtual Network Computing (o VNC) sono software di
1357 controllo remoto e servono per amministrare un computer a
1358 distanzai. Nel nostro caso la VNC sara' utilizzata per
1359 visualizzare la sessione di lavoro di un altro computer sul
1360 proprio a scopo didattico.</p>
1362 <p>Per collegarvi al server del docente usate lo script
1363 <tt class="docutils literal">guarda.sh</tt> che dovrebbe
1364 gia essere disponibili sui sistemi preconfigurati, oppure
1365 potete invocare direttamente il collegamento con:</p>
1366 <pre class="literal-block">
1367 xtightvncviewer -viewonly 10.10.208.177:1
1370 <p>Se il comando non fosse disponibile installate il
1371 pacchetto <tt class=
1372 "docutils literal">xtightvncviewer</tt>. Potete anche
1373 scaricare lo script <tt class=
1374 "docutils literal">guarda.sh</tt> e renderlo eseguibile, ed
1375 eventualmente creare una voce nel menu di KDE per
1379 <pre class="literal-block">
1382 wget http://bender/guarda.sh
1387 <p>Per eseguire lo script digitare semplicemente <tt class=
1388 "docutils literal">guarda.sh</tt>, oppure creare un link /
1389 collegamento sul Desktop allo script <tt class=
1390 "docutils literal">/usr/local/bin/guarda.sh</tt>.</p>
1392 <p>Le impostazioni del server VNC sono:</p>
1394 <table border="1" class="docutils">
1400 <thead valign="bottom">
1402 <th class="head">Parametro</th>
1404 <th class="head">Valore</th>
1408 <tbody valign="top">
1412 <td>10.10.208.177:1</td>
1416 <td>Server grafico</td>
1429 <p>Si noti che non e' possibile lanciare un applicativo sul
1430 server grafico di un utente da una shell in cui si sta
1431 lavorando come altro utente, anche se root. E' quindi
1432 necessario essere l'utente di sistema che si e' loggato
1433 inizialmente nella sessione grafica per poter lanciare lo
1434 script guarda.sh da una shell.</p>
1436 <p>Controllare con <tt class="docutils literal">whoami</tt>
1437 di essere l'utente normale (es <tt class=
1438 "docutils literal">utente | studente | proprio nome</tt> ),
1439 in caso si sia assunta una altra <tt class=
1440 "docutils literal">id</tt> si apra un altra shell o si esca
1441 da quella attuale con <tt class=
1442 "docutils literal">exit</tt> .</p>
1445 <div class="section" id="lista-dei-pacchetti-di-base">
1446 <h2><a class="toc-backref" href=
1447 "#id16">1.6 Lista dei pacchetti di
1450 <p>I pacchetti installati generalmente <a class=
1451 "footnote-reference" href="#id2" id="id1" name=
1452 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1453 <pre class="literal-block">
1454 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1457 <table class="docutils footnote" frame="void" id="id2"
1464 <tbody valign="top">
1466 <td class="label"><a class="fn-backref" href=
1469 <td><tt class="docutils literal"><span class=
1470 "pre">kde-core</span></tt> e' piu' leggero del
1471 pacchetto <tt class="docutils literal">kde</tt>.
1472 Esiste un equivalente <tt class=
1473 "docutils literal"><span class=
1474 "pre">gnome-core</span></tt> per chi preferisce
1475 Gnome, nel caso si potrebbe installare il log-in
1476 manager <cite>gdm</cite> al posto di
1477 <cite>kdm</cite>.</td>
1483 <div class="section" id="apt-configurazione">
1484 <h2><a class="toc-backref" href=
1485 "#id17">1.7 Apt configurazione</a></h2>
1487 <p>Vediamo i due file principali di apt:</p>
1491 "docutils literal">/etc/apt/sources.list</tt></li>
1494 "docutils literal">/etc/apt/apt.conf</tt></li>
1497 <div class="section" id="sources-list">
1498 <h3><a class="toc-backref" href=
1499 "#id18">1.7.1 sources.list</a></h3>
1501 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1502 preleva i pacchetti da installare tramite <em>dpkg</em>,
1503 vengono quindi precisati i metodi (ad es. http / ftp /
1504 cdrom / file), la release che si vuole tracciare (es
1505 <tt class="docutils literal">stable, testing,
1506 unstable</tt> oppure i corrispondenti release name es:
1507 <tt class="docutils literal">Lenny, Squeeze, Sid</tt>), i
1508 rami di interesse (es: <tt class=
1509 "docutils literal">main</tt> che e' l'archivio
1510 principale, <tt class="docutils literal"><span class=
1511 "pre">non-free</span></tt> per il software non libero,
1512 <tt class="docutils literal">contrib</tt> per i pacchetti
1513 non realizzati dai manutentori ufficiali).</p>
1515 <p>Gli archivi sono generalmente:</p>
1518 <li><tt class="docutils literal">deb</tt> per pacchetti
1519 Debian binari, pronti per l'installazione.</li>
1521 <li><tt class="docutils literal"><span class=
1522 "pre">deb-src</span></tt> per i pacchetti sorgenti
1523 (quindi da compilare, come il kernel) degli stessi
1524 pacchetti binari. In genere se non compilate spesso
1525 potete evitare di tracciare i sorgenti per risparmiare
1530 "docutils literal">/etc/apt/sources.list</tt></p>
1531 <pre class="literal-block">
1532 # esempio di accesso a un CDROM:
1533 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1535 # ftp.it.debian.org viene rediretto su un mirror interno
1536 # quando vi trovate nella rete interna piffa.net
1537 deb http://ftp.it.debian.org/debian/ lenny main
1538 # Sono disponibili anche i rami non-free contrib
1539 # deb http://ftp.it.debian.org/debian/ lenny non-free contrib
1540 # Sono disponibili anche le release unstable e testing
1541 # deb http://ftp.it.debian.org/debian/ testing main non-free contrib
1542 # deb http://ftp.it.debian.org/debian/ sid main non-free contrib
1544 # Sorgenti dei pacchetti:
1545 # deb-src http://ftp.bononia.it/debian/ lenny main
1547 # Mirror da kernel.org europa da usare a casa:
1548 deb http://mirrors.eu.kernel.org/debian/ lenny main
1550 # Security dal sito principale
1551 deb http://security.debian.org/ lenny/updates main
1552 # deb-src http://security.debian.org/ lenny/updates main
1554 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1555 # non legati a dinamiche di sicurezza
1556 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1557 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1559 # Esempio di accesso a un file system locale contenente i pacchetti:
1560 # Potete scaricarei in aula con debmirror da debian.piffa.net
1561 # un mirror locale da usare poi a casa anche senza internet
1562 # deb file:/mnt/mirror sid main non-free contrib
1566 <div class="section" id="etc-apt-apt-conf">
1567 <h3><a class="toc-backref" href=
1568 "#id19">1.7.2 /etc/apt/apt.conf</a></h3>
1570 <p>Questo file contiene le opzioni di apt, come ad
1571 esempio il proxy:</p>
1572 <pre class="literal-block">
1573 Acquire::http::Proxy "http://10.10.208.248:3128";
1576 <p>Si tenga conto che se si imposta un proxy per apt sul
1577 proprio portatile e tornati a casa propria si vuole
1578 scaricare nuovi pacchetti si dovra' disabilitare il proxy
1579 commentando la riga con ";" (''punto-e-virgola''). Su un
1580 portatile vi conviene tracciare il mirror <tt class=
1581 "docutils literal">ftp.it.debian.org</tt> senza impostare
1582 il proxy: in aula verra' rediretto al mirror locale e a
1583 casa vi appoggerete al mirror ufficiale.</p>
1585 <p>E' consigliabile impostare il proxy per apt anche in
1586 presenza di un proxy-http <em>trasparente</em>.</p>
1591 <div class="section" id="squid">
1592 <h1><a class="toc-backref" href=
1593 "#id20">2 Squid</a></h1>
1595 <p>Squid e' un proxy cache http (ma anche FTP e https)
1596 robusto e strutturato, puo' essere usato sia in situazioni
1597 relativamente semplici che in scenari piu' complessi grazie
1598 alla possibilita' di gestirne in modo granulare le risorse.
1599 Si partira' dalle configurazioni piu' semplici per la
1600 semplice <em>condivisione della navigazione</em> internet
1601 all'interno di una rete locale, per poi poter negoziare la
1602 gestione degli accessi, il filtraggio dei contenuti (Squid e'
1603 una applicazione che si muove nel 4' livello del modello
1604 TCP/IP a differenza di un <em>ipfilter</em> limitato al 2'),
1605 nel bilanciamento del carico tra piu' server proxy.</p>
1607 <dl class="docutils">
1608 <dt>Inoltre Squid svolge la funzione di
1609 <em>anonymizer</em>:</dt>
1611 <dd>Nasconde i client http alla rete internet: e' solo il
1612 server proxy ad accedere ai server web frequentati dai
1613 client: questi non sono percepiti ed esposti all'esterno
1614 della rete locale ma si relazionano solo con il server
1615 proxy. Dal punto di vista della sicurezza della rete locale
1616 questo e' preferibile ad un approccio alla navigazione
1617 basato su <em>NAT</em>.</dd>
1620 <p>Cosa a volte sottovalutata, Squid permette la navigazione
1621 web a una rete basata su <em>indirizzi IP privati</em> (es
1622 una 192.168.0.0/24). E se la rete privata deve <em>solo
1623 navigare</em> in internet, non serve introdurre nella rete un
1624 <em>NAT</em> (si veda la sezione sui firewall) per
1625 condividere la connessione: basta il solo Squid. Per altro
1626 non servira' neanche un servizio DNS accessibile dai clients
1627 dato che <em>sara' il solo Squid a risolvere i nomi di
1628 dominio</em> per i suoi client http.</p>
1630 <p>Squid ascolta di default sulla porta 3128, per impostare
1631 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1632 "docutils literal">/etc/apt/apt.conf</tt></p>
1633 <pre class="literal-block">
1634 Acquire::http::Proxy "10.10.208.254:3128";
1637 <p>Per installare Squid si usino i pacchetti:</p>
1638 <pre class="literal-block">
1642 <div class="section" id="configurazione-squid-conf">
1643 <h2><a class="toc-backref" href=
1644 "#id21">2.1 Configurazione:
1647 <p>Segue un estratto delle direttive principali viste in
1648 aula presenti nel file di configurazione <tt class=
1649 "docutils literal">/etc/squid3/squid.conf</tt> .</p>
1651 <div class="section" id="cache-dir">
1652 <h3><a class="toc-backref" href=
1653 "#id22">2.1.1 Cache_dir</a></h3>
1655 <p>Cache dir serve per impostare dimensione e percorso
1656 della cache creata sul supporto di storaggio. Essendo la
1657 dimensione di default della cache pari a <tt class=
1658 "docutils literal">~100 MB</tt> e' altamente
1659 consigliabili aumentare questo parametro se si vuole
1660 poter utilizzare la funzione di <em>cache</em> http del
1663 <p>La dimensione ovviamente dipendera' dallo spazio
1664 disponibile, dimensioni tipiche e massime degli oggetti
1665 che si vuole tenere in cache (un solo file <em>.iso e'
1666 circa ``700 MB``, il pacchetto *Openoffice.org</em> circa
1667 <tt class="docutils literal">150 MB</tt>, un pacchetto
1668 debian circa <tt class="docutils literal">20 MB</tt>),
1669 numero dei client.</p>
1671 <p>Si presti poi attenzione alla natura dei dati che
1672 saranno salvati nella cache: sono tutti dati facilmente
1673 sostituibili (gli originali sono <em>on-line</em>) la cui
1674 perdita non arreca danni permanenti. Questo rende la
1675 cache di Squid un possibile candidato ad un <em>RAID
1676 stirpe</em> (livello 0) a ad un file system che prediliga
1677 le performance a scapito della consistenza, con vantaggi
1678 sia per le prestazioni (e la velocita' di navigazione e'
1679 uno dei motivi per cui si installa Squid) che per
1680 l'utilizzo estensivo dello spazio di storaggio.</p>
1682 <p>Questo fino al momento in cui per voi non sia piu'
1683 importante <em>garantire la disponibilita' del
1684 servizio</em>, ad esempio con un RAID <em>mirror</em> o 5
1685 (se il RAID stripe dovesse rompersi gli utenti non
1686 potrebbero piu' navigare, cosa che per natura dello
1687 stripe e' maggiormente probabile rispetto ad un
1688 <em>mirror</em> o a un filesytem <em>normale</em>).</p>
1690 <p>Altra considerazione: i dati del proxy vengono slavati
1691 sul filesytem del server dietro richiesta di utenti
1692 esterni talvolta sconosciuti. Come per i servizi di file
1693 sharing o per la posta elettronica non c'e' motivo che il
1694 filesystem su cui sono ospitati questi dati abbia i
1695 privilegi di eseguibilita' o suid (in genere si puo'
1696 anche usare <em>noatime</em> per renderlo piu' veloce,
1697 che si usi o meno il journal dipende dalle preferenze:
1698 affidabilita' oppure prestazioni):</p>
1701 <pre class="literal-block">
1703 # Filesystem per Squid http cache
1704 /dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
1707 <p>Ora possiamo impostare la cache nel file di
1708 configurazione <tt class=
1709 "docutils literal">/etc/squid3/squid.conf</tt>:</p>
1710 <pre class="literal-block">
1711 #TAG: cache_dir (riga 1628)
1714 # cache_dir Type Directory-Name Fs-specific-data [options]
1716 # You can specify multiple cache_dir lines to spread the
1717 # cache among different disk partitions.
1720 # cache_dir ufs /var/spool/squid3 100 16 256
1721 cache_dir aufs /var/spool/squid3 300 24 256
1722 # | | | | secondo livello di directory
1723 # | | | directory primo livello
1724 # | | dimensione in MB
1725 # | path della cache
1729 <p>Se si modifica la struttura del filesytem della cache
1730 di Squid, ad esempio variando il numero delle directory,
1731 puo' essere opportuno rigenerare la struttura della cache
1732 di squid. Tipicamente e' consigliabile cancellare (se si
1733 ha <em>ridotto</em> il numero delle directory) la vecchia
1734 cache e poi generare una nuova struttura. Se si vuole
1735 <em>star nel sicuro</em> ogni volta che si modifica
1736 l'impostazione delle directory <em>si svuoti la vecchia
1737 cache e se ne generi una nuova</em></p>
1738 <pre class="literal-block">
1739 # /etc/init.d/squid3 stop
1740 # rm -r /var/spool/squid3/??
1742 # /etc/init.d/squid3 start
1746 <div class="section" id="tag-maximum-object-size">
1747 <h3><a class="toc-backref" href=
1748 "#id23">2.1.2 TAG:
1749 maximum_object_size</a></h3>
1751 <p>Questa direttiva imposta la dimensione massima degli
1752 oggetti che vengono salvati sul supporto di storaggio,
1753 oggetti di dimensioni superiori saranno comunque
1754 scaricati ma non tenuti in cache.</p>
1756 <p>TAG: maximum_object_size (1760):</p>
1757 <pre class="literal-block">
1758 # TAG: maximum_object_size (1760)
1759 # Objects larger than this size will NOT be saved on disk. The
1760 # value is specified in kilobytes, and the default is 4MB. If
1761 # you wish to get a high BYTES hit ratio, you should probably
1762 # increase this (one 32 MB object hit counts for 3200 10KB
1763 # hits). If you wish to increase speed more than your want to
1764 # save bandwidth you should leave this low.
1766 # NOTE: if using the LFUDA replacement policy you should increase
1767 # this value to maximize the byte hit rate improvement of LFUDA!
1768 # See replacement_policy below for a discussion of this policy.
1771 # maximum_object_size 4096 KB
1772 maximum_object_size 150 MB
1776 <div class="section" id="tag-cache-mem">
1777 <h3><a class="toc-backref" href=
1778 "#id24">2.1.3 TAG: cache_mem</a></h3>
1780 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1781 utilizzata per la cache di Squid. Questo dipendera' dalla
1782 RAM disponibile sul sistema, e da quanta di questa volete
1783 mettere a disposizione di Squid (altri servizi importanti
1784 girano sulla stessa macchina? ). Questo parametro
1785 influisce sulle prestazioni e sul degrado dei supporti di
1786 storaggio (sopratutto se magnetici).</p>
1788 <p>Se si stesse pensando di usare dell'hardware
1789 <em>embedded</em> a basse prestazioni / consumo per
1790 realizzare un server gateway / NAT / Squid si tenga
1791 presente che Squid e' relativamente esoso di risorse
1792 rispetto agli altri servizi: avra' bisogno di <tt class=
1793 "docutils literal">~25MB</tt> (MegaByte) di RAM e
1794 <em>~150MHZ di CPU ARM</em> per servire decorosamente una
1795 decina di client http su una rete ethernet 10/100. In
1796 questo caso non fate scendere <tt class=
1797 "docutils literal">cache_mem</tt> sotto i <tt class=
1798 "docutils literal">2/4 MB</tt> pena un accesso continuo
1799 al supporto di storaggio.</p>
1801 <p>Se invece si disponesse di una macchina dedicata a
1802 Squid con gigabytes di RAM non si esiti a dedicarne buona
1803 parte a <em>cache_mem</em>.</p>
1805 <p>TAG: cache_mem (1566):</p>
1806 <pre class="literal-block">
1807 # 'cache_mem' specifies the ideal amount of memory to be used
1809 # * In-Transit objects
1811 # * Negative-Cached objects
1818 <div class="section" id="tag-minimum-object-size">
1819 <h3><a class="toc-backref" href=
1820 "#id25">2.1.4 TAG:
1821 minimum_object_size</a></h3>
1823 <p>Questo parametro imposta la dimensione minima degli
1824 oggetti salvati nella cache. Settato a <tt class=
1825 "docutils literal">0</tt> o a valori molto piccoli puo'
1826 influire negativamente sulla frammentazione del filesytem
1827 e consumare un numero elevato di <em>inode</em> (cosa non
1828 piu' importante con ext4 o altri filesytem).</p>
1830 <p>In scenari con connessioni molto veloci ( >~10Mb),
1831 pochi client (una decina) e server poco performanti nella
1832 velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1833 il limte sia piuttosto il <em>seek-time</em> ) tenere in
1834 cache i file piu' piccoli aumenta la latenza della
1837 <p>TAG: minimum_object_size:</p>
1838 <pre class="literal-block">
1839 # TAG: minimum_object_size (bytes)
1840 # Objects smaller than this size will NOT be saved on disk. The
1841 # value is specified in kilobytes, and the default is 0 KB, which
1842 # means there is no minimum.
1845 # minimum_object_size 0 KB
1846 minimum_object_size 0 KB
1851 <div class="section" id=
1852 "negoziazione-degli-accesi-al-servizio">
1853 <h2><a class="toc-backref" href=
1854 "#id26">2.2 Negoziazione degli accesi al
1857 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1858 <em>open relay</em> , si deve quindi limitare la rete che
1859 puo' accedere al servizio.</p>
1861 <dl class="docutils">
1862 <dt>Open Relay:</dt>
1864 <dd>Un servizio a cui possono accedere tutti
1865 indiscriminatamente. La cosa puo' andare bene per servizi
1866 come i server web, che aspirano per loro natura al
1867 maggior numero possibile di utenti, ma non a servizi come
1868 i proxy http oppure ai server di posta elettronica
1869 (adibiti ai soli utenti della rete locale).</dd>
1872 <p>Generalmente non volete che il vostro proxy http venga
1873 usato da persone sconosciute ed esterne alla vostra rete,
1874 le quali sostanzialmente <em>navigherebbero sotto
1875 l'identita' del vostro proxy</em> (probabilmente per
1876 visionare materiali che non vorrebbero fossero ricondotti
1877 direttamente a loro) generando traffico e consumando banda
1878 della vostra connessione a internet. Tenere Squid in
1879 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1880 modo per essere inseriti in una <em>black list</em>.</p>
1882 <p>Per poter limitare gli accessi a Squid dal punto di
1883 vista dell'applicazione (quarto livello TCP/IP) si
1884 identifichera' inizialmente l'entita' <em>rete locale</em>
1885 (es: <tt class="docutils literal">localnet</tt>) con una
1886 ACL di tipo <em>src</em> (indirizzi IP sorgenti) indicando
1887 la <em>classe / range di IP</em> della nostra rete.</p>
1890 Dopodiche l'accesso (<tt class=
1891 "docutils literal">http_access</tt>) si concedera'
1892 (<em>allow</em>) a questa entita' (es: <tt class=
1893 "docutils literal">localnet</tt>) negando chiunque altro.
1896 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1897 esprimere i range di IP: <a class="reference external"
1898 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1899 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1901 <p>E' poi sempre possibile tenere il proxy in ascolto su un
1902 solo indirizzo IP, nel caso si disponga di piu' devicei di
1903 rete, oppure settare un firewall per limitare il traffico
1904 dai primi livelli del TCP/IP.</p>
1906 <div class="section" id="acl-e-http-access">
1907 <h3><a class="toc-backref" href=
1908 "#id27">2.2.1 ACL e http access</a></h3>
1910 <p>Si proceda a creare una <tt class=
1911 "docutils literal">ACL</tt> di tipo <tt class=
1912 "docutils literal">src</tt> per identificare la nostra
1913 rete locale, poi si abiliti l'accesso a questa con la
1914 direttiva <tt class="docutils literal">http_access</tt>.
1915 Tutto quanto non e' espressamente autorizzato viene poi
1916 negato da un <tt class="docutils literal">http_access
1917 deny all</tt> finale.</p>
1918 <pre class="literal-block">
1920 # Defining an Access List
1922 # Every access list definition must begin with an aclname and acltype,
1923 # followed by either type-specific arguments or a quoted filename that
1924 # they are read from.
1926 # ***** ACL TYPES AVAILABLE *****
1928 # acl aclname src ip-address/netmask ... # clients IP address
1931 # Example rule allowing access from your local networks.
1932 # Adapt to list your (internal) IP networks from where browsing
1934 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1935 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1936 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1938 acl localnet src 10.10.208.0/24
1942 # Allowing or Denying access based on defined access lists
1944 # Access to the HTTP port:
1945 # http_access allow|deny [!]aclname ...
1947 # NOTE on default values:
1949 # If there are no "access" lines present, the default is to deny
1953 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1955 # Example rule allowing access from your local networks.
1956 # Adapt localnet in the ACL section to list your (internal) IP networks
1957 # from where browsing should be allowed
1958 #http_access allow localnet
1959 http_access allow localnet
1964 <div class="section" id="testare-squid">
1965 <h2><a class="toc-backref" href=
1966 "#id28">2.3 Testare Squid</a></h2>
1968 <p>Configurato squid e' fondamentale testarne il corretto
1969 funzionamento per assicurarsi di non aver creato un
1970 <em>open-relay</em>. Per fare dei test significativi serve
1971 utilizzare degli host remoti: ci si connetta via ssh a
1972 questi per poi utilizzare <tt class=
1973 "docutils literal">wget</tt> da riga di comando.</p>
1975 <div class="section" id="client-wgetrc">
1976 <h3><a class="toc-backref" href=
1977 "#id29">2.3.1 Client: ~/.wgetrc</a></h3>
1979 <p>Nel file <tt class="docutils literal">.wgetrc</tt> (si
1980 noti il punto iniziale: e' un file nascosto) si puo'
1981 impostare il proxy per wget. Si utilizzi l'indirizzo IP
1982 del server che si vuole testare, e si seguano i log
1984 "docutils literal">/var/log/squid3/access.log</tt> sul
1987 <p>Da notare che la prova va' fatta su una macchina della
1988 rete che si vuole testare, non da <em>localhost</em>. Per
1989 altro se si utilizzasse <em>direttamente</em> <tt class=
1990 "docutils literal">localhost</tt> non si testerebbe la
1991 <em>ACL</em> predisposta, dato che si si rientrerebbe
1992 nella ACL (pre-configurata di default) <tt class=
1993 "docutils literal">localhost</tt>.</p>
1995 <dl class="docutils">
1998 <dd>http_proxy=10.10.208.178:3128</dd>
2001 <p>Si proceda a scaricare dal client scelto con un
2003 <pre class="literal-block">
2004 wget http://www.google.it
2008 <div class="section" id="server-access-log">
2009 <h3><a class="toc-backref" href=
2010 "#id30">2.3.2 Server:
2013 <p>Si puo' controllare il corretto funzionamento del
2014 server seguendo i log di accesso a Squid:</p>
2015 <pre class="literal-block">
2016 # tail -f /var/log/squid3/access.log
2019 <p>In oltre e' possibile configurare diversi
2020 <em>analizzatori di log</em> come <tt class=
2021 "docutils literal">Webalizer</tt> per studiare i log di
2027 <div class="section" id="tiny-proxy">
2028 <h1><a class="toc-backref" href=
2029 "#id31">3 Tiny proxy</a></h1>
2031 <p>Se avete l'esigenza di un proxy server per la condivisione
2032 della connessione ad internet ma non avete la necessita' o le
2033 risorse di un <em>caching</em> proxy come Squid potete
2034 considerare <strong>tinyproxy</strong>, questo e' molto piu'
2035 leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2036 accedere continuamente ad un file system per lo storaggio
2037 della cache) e risulta piu' semplice nella
2040 <p>TinyProxy puo' essere utilizzato come sostituto di
2041 emergenza in una rete in cui Squid e' momentaneamente non
2044 <p>File di configurazione: <tt class=
2045 "docutils literal">/etc/tinyproxy/tinyproxy.conf</tt></p>
2046 <pre class="literal-block">
2047 # Porta su cui ascoltare
2049 # IP su cui ascoltare
2050 Listen 10.10.208.160
2051 # Negoziazione accessi
2052 Allow 10.10.208.0/24
2056 <div class="section" id="apache">
2057 <h1><a class="toc-backref" href=
2058 "#id32">4 Apache</a></h1>
2060 <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2061 patchy NCSA web server</em> ), e' il server web modulare piu'
2062 diffuso e strutturato disponibile con licenza libera, in
2063 grado di operare da sistemi operativi UNIX/Linux e
2066 <p>Un server web e' un processo, e per estensione il computer
2067 su cui e' in esecuzione, che si occupa di fornire, su
2068 richiesta del browser, una pagina web (spesso scritta in
2069 HTML). Le informazioni inviate dal server web viaggiano in
2070 rete trasportate dal protocollo HTTP. L'insieme di server web
2071 da' vita al World Wide Web, uno dei servizi piu' utilizzati
2074 <div class="section" id="pacchetti-da-installare">
2075 <h2><a class="toc-backref" href=
2076 "#id33">4.1 Pacchetti da
2077 installare::</a></h2>
2083 <p>Con la release 2.0 di Apache viene automaticamente resa
2084 disponibile anche la versione SSL (Secure Socket Layer,
2085 connessioni criptate ) del web server senza che ci sia la
2086 necessita' di installare altri pacchetti.</p>
2089 <div class="section" id="configurazione-di-apache">
2090 <h2><a class="toc-backref" href=
2091 "#id34">4.2 Configurazione di
2094 <p>I file di configurazione di apache si trovano nella
2095 cartella: <tt class="docutils literal">/etc/apache2</tt> e
2096 sono strutturati come descritto nel file <tt class=
2097 "docutils literal">/usr/share/doc/apache2/README.Debian.gz</tt>
2098 . Sostanzialmente lo schema e' il seguente:</p>
2100 <dl class="docutils">
2101 <dt>apache2.conf</dt>
2104 <p class="first">File di configurazione principale del
2107 <p class="last">httpd.conf e' il vecchio file di
2108 configurazione di Apache1, presente per motivi di
2109 retrocompatibilita' e' generalmente vuoto.</p>
2114 <dd>In questo file vengono specificate le porte sulle
2115 quali resta in ascolto il server web. Si noti che
2116 utilizzando dei virtual hosts generalmente viene
2117 specificata per questi la porta su cui ascoltare nel file
2118 di configurazione del virtual host, ad es: <tt class=
2119 "docutils literal"><VirtualHost *:80></tt></dd>
2121 <dt>sites-available</dt>
2123 <dd>In questa cartella vengono raccolti i file di
2124 configurazione dei virtual host disponibili.</dd>
2126 <dt>sites-enabled</dt>
2128 <dd>In questa cartella sono contenuti dei link simbolici
2129 ai files in ../sites-available : se il link e' presente
2130 in questa cartella il virtual host e' abilitato.</dd>
2132 <dt>mods-available</dt>
2134 <dd>Stesso metodo per i moduli: in questa cartella ci
2135 sono i moduli veri e propri che verranno poi abilitati
2136 grazie all'esistenza di link simbolici nella cartella
2139 <dt>mods-enabled</dt>
2141 <dd>Moduli abilitati, effettivamente caricati.</dd>
2145 <div class="section" id="apache-conf">
2146 <h2><a class="toc-backref" href=
2147 "#id35">4.3 apache.conf</a></h2>
2149 <p>File di configurazione del servizio Apache, contiene le
2150 impostazioni generiche (ad esempio utilizzo della RAM e
2151 risorse di sistema) dell'intero servizio. Nella
2152 configurazione di default per Debian non viene definito un
2153 vero e proprio sito di default ma solo dei virtual
2156 <p>Guardiamo alcune direttive interessanti:</p>
2158 <dl class="docutils">
2161 <dd>Numero di secondi da aspettare prima di chiudere la
2162 connessione con il client. Questo parametro serve a
2163 liberare le risorse di sistema nel caso che un client,
2164 magari a causa di una connessione particolarmente lenta o
2165 instabili, tenga attivo indefinitamente un processo di
2170 <dd>L'estensione keep-alive (http 1.0) congiuntamente
2171 alle connessioni persistenti (http 1.1) permettono al
2172 server di rispondere a piu' richieste dei client mediante
2173 la stessa connessione. Il protocollo http per sua natura
2174 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2175 richiesta (per pagine web si pensi ad esempio alle
2176 immagini) dal client necessita di una connessione
2177 autonoma. Keep-alive permette di ottimizzare la
2178 connessione anche fino al 50% a seconda delle situazioni
2181 <dt>Server-Pool Size Regulation</dt>
2183 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2184 Tutti spiegati nel manuale di apache) servono per
2185 attribuire le risorse di sistema disponibili al server
2186 Apache. Tenere questi parametri bassi serve a limitare il
2187 rischio di Denial of Service per il server, nel caso
2188 offra altri servizi. I settagli di default sono come
2189 sempre abbastanza conservativi, se si conta di usare il
2190 proprio Apache per servire un sito web con molti
2191 visitatori sara' necessario aumentare sensibilmente le
2192 impostazioni di base.</dd>
2194 <dt>AccessFileName</dt>
2196 <dd>Il nome del file che viene onorato per modificare le
2197 impostazioni per una singola directory, legato alla
2198 direttiva AllowOverride .</dd>
2202 <div class="section" id="installazione-di-php">
2203 <h2><a class="toc-backref" href=
2204 "#id36">4.4 Installazione di PHP</a></h2>
2206 <p>Pacchetti da installare: <tt class=
2207 "docutils literal">php5 <span class=
2208 "pre">php-pear</span></tt></p>
2210 <div class="section" id="test-del-modulo-php">
2211 <h3><a class="toc-backref" href=
2212 "#id37">4.4.1 Test del modulo
2215 <p>Creare nella cartella <tt class=
2216 "docutils literal">/var/www</tt> (o altra cartella
2217 visibile) un file con estensione *.php (es <tt class=
2218 "docutils literal">/var/www/info.php</tt> contenete
2219 codice php eseguibile dall'interprete, ad es:</p>
2220 <pre class="literal-block">
2221 <?php phpinfo() ; ?>
2224 <p>Questa funzione di php generera' la tipica pagina con
2225 le impostazioni attuali per PHP. Richiamando la pagina
2226 (es: <tt class="docutils literal"><span class=
2227 "pre">http://localhost/info.php</span></tt> ) verra'
2228 generata dall'interprete PHP la pagina HTML e resa
2229 disponibile tramite Apache ai client HTTP, a prova del
2230 corretto funzionamento del modulo di PHP e della sua
2231 integrazione con il server web Apache. In caso contrario
2232 se il client http proporra' di scaricare la pagina invece
2233 che visualizzarla nel browser: non funziona l'interprete
2234 di php o sono mal configurati i MIME-type. prima di tutto
2235 assicurarsi di aver fatto ripartire Apache.</p>
2238 <div class="section" id=
2239 "installazione-del-supporto-per-mysql-a-php">
2240 <h3><a class="toc-backref" href=
2241 "#id38">4.4.2 Installazione del supporto
2242 per Mysql a PHP</a></h3>
2244 <p>Installare i pacchetti:</p>
2245 <pre class="literal-block">
2246 php5-mysql phpmyadmin
2249 <p>Controllare tramite la pagina php.info che sia
2250 abilitato il supporto per Mysql (ripartito Apache,
2251 ricaricare la pagina e cercare con CTRL+f <tt class=
2252 "docutils literal">mysql</tt>).</p>
2255 <div class="section" id="phpmyadmin">
2256 <h3><a class="toc-backref" href=
2257 "#id39">4.4.3 phpmyadmin</a></h3>
2259 <p>L'interfaccia web Phpmyadmin non richiede
2260 necessariamente la presenza di un database Mysql locale,
2261 puo' infatti essere utilizzata per gestire database
2262 remoti (il suo file di configurazione: <tt class=
2263 "docutils literal">/etc/phpmyadmin/config.inc.php</tt> ).
2264 Nel caso si voglia installare localmente Mysql si
2265 utilizzi il pacchetto <tt class=
2266 "docutils literal"><span class=
2267 "pre">mysql-server</span></tt> .</p>
2269 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2270 <tt class="docutils literal"><span class=
2271 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2272 non fosse controllare che sia incluso il file <tt class=
2273 "docutils literal">/etc/phpmyadmin/apache.conf</tt> in
2274 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2278 <div class="section" id=
2279 "installazione-del-supporto-per-postgresql-a-php">
2280 <h3><a class="toc-backref" href=
2281 "#id40">4.4.4 Installazione del supporto
2282 per Postgresql a PHP</a></h3>
2284 <p>Installare i pacchetti:</p>
2285 <pre class="literal-block">
2286 php5-pgsql phppgadmin
2289 <p>Controllare tramite la pagina php.info che sia
2290 abilitato il supporto per PostgreSQL (ripartito Apache,
2291 ricaricare la pagina e cercare con CTRL+f <tt class=
2292 "docutils literal">pgsql</tt>).</p>
2295 <div class="section" id="phppgadmin">
2296 <h3><a class="toc-backref" href=
2297 "#id41">4.4.5 phppgadmin</a></h3>
2299 <p>L'interfaccia web Phppgadmin per il database server
2300 PostgreSQL non richiede necessariamente la presenza di un
2301 database locale, puo' infatti essere utilizzata per
2302 gestire database remoti (il suo file di configurazione:
2304 "docutils literal">/etc/phppgadmin/config.inc.php</tt> ).
2305 Nel caso si voglia installare localmente Mysql si
2306 utilizzi il pacchetto <tt class=
2307 "docutils literal">postgresql</tt> .</p>
2309 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2310 <tt class="docutils literal"><span class=
2311 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2312 non fosse controllare che sia incluso il file <tt class=
2313 "docutils literal">/etc/phppgadmin/apache.conf</tt> in
2314 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2319 <div class="section" id="virtual-hosts">
2320 <h2><a class="toc-backref" href=
2321 "#id42">4.5 Virtual hosts</a></h2>
2325 <li><a class="reference external" href=
2326 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2328 <li><a class="reference external" href=
2329 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2330 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2334 <p>I virtual host permettono di avere piu' siti internet
2335 disponibili tramite lo stesso server web, eventualmente
2336 mappati su un solo indirizzo IP. Sono generalmente di due
2341 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2342 possibilita' di avere piu' indirizzi IP dedicati per i
2343 diversi siti che si vuole servire. ES: <tt class=
2344 "docutils literal"><VirtualHost
2345 192.168.0.2:80></tt> . Soluzione dispendiosa, si
2346 tende ad usarla solo se servono certificati di
2347 sicurezza (SSL ) dedicati per ogni sito.</li>
2349 <li>Basati su <em>nomi di dominio</em> che puntano allo
2350 stesso IP. Soluzione piu' economica e diffusa che si
2351 basa sulle funzionalita' di http 1.1 .</li>
2355 <p>Prenderemo in esame la gestione di virtual hosts basati
2356 su nomi di dominio.</p>
2358 <div class="section" id="gestione-dns">
2359 <h3><a class="toc-backref" href=
2360 "#id43">4.5.1 Gestione DNS</a></h3>
2362 <p>Prima di tutto per poter impostare i virtual hosts
2363 dovete avere un server DNS che risolva i vostri nomi di
2364 dominio sull'indirizzo IP del server. Questo si puo'
2365 ottenere in vari modi, ad es:</p>
2368 <dl class="docutils">
2369 <dt><tt class="docutils literal">/etc/hosts</tt></dt>
2371 <dd>Per prove sul proprio sistema potete impostare i
2372 nomi dei vostri virtual server nel file /etc/hosts
2375 <dt><em>Dnsmasq</em> (DNS server)</dt>
2377 <dd>Utilizzabile al livello della rete locale per
2378 fare dei test, utilizzando direttive come: <tt class=
2379 "docutils literal"><span class=
2380 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2382 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2384 <dd>Utilizzare un servizio come ad es: <a class=
2385 "reference external" href=
2386 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2387 per mappare nomi di dominio sul proprio indirizzo IP,
2388 comodo ad esempio se si dispone di un indirizzo IP
2389 pubblico (anche se dinamico) per la propria
2390 connessione ad internet.</dd>
2392 <dt><em>Bind</em> (DNS server)</dt>
2394 <dd>Impostare i campi A nelle proprie zone gestite
2395 dal server DNS Bind. Ad es: <tt class=
2396 "docutils literal">papo
2397 A
2398 212.22.136.248</tt></dd>
2403 <div class="section" id="eseguire-una-query-dns-con-dig">
2404 <h3><a class="toc-backref" href=
2405 "#id44">4.5.2 Eseguire una query DNS con
2406 <tt class="docutils literal">dig</tt>::</a></h3>
2408 <p>Per testare la corretta risoluzione dei vostri nomi di
2409 dominio sui relaivi indirizzi IP si usi dig (o altre
2410 utlity, vedere la sezione relativa i DNS). Dig e'
2411 contenuto nel pacchetto <tt class=
2412 "docutils literal">dnsutils</tt>.</p>
2415 <p># dig 177.piffa.net</p>
2417 <p>; <<>> DiG 9.5.1-P1 <<>>
2418 177.piffa.net ;; global options: printcmd ;; Got
2419 answer: ;; ->>HEADER<<- opcode: QUERY,
2420 status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2421 QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2423 <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2425 <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2428 <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2431 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2433 "docutils literal">177.piffa.net.
2434 0
2435 IN
2436 A 10.10.208.177</tt>
2437 . Il nome di dominio 177.piffa.net viene risolto sull'ip
2438 10.10.208.177 , nel nostro Apache (che risponde all'ip
2439 10.10.208.177 ) dovra' essere disponibile un virtual host
2440 che corrisponde al nome <tt class=
2441 "docutils literal">177.piffa.net</tt> (<tt class=
2442 "docutils literal">ServerName</tt>) .</p>
2444 <p>Il server DNS utilizzato dal sistema e' evidenziato
2445 dalla stringa: <tt class="docutils literal">;; SERVER:
2446 10.10.28.248#53(10.10.28.248)</tt> che dovrebbe
2447 corrispondere a quanto impostato nel vostro <tt class=
2448 "docutils literal">/etc/resolv.conf</tt>. Se il vostro
2449 browser web utilizza un proxy http sara questo a
2450 risolvere i nomi di dominio, tipicamente potete
2451 disabilitare l'uso del proxy per determinati domini nella
2452 sezione di configurazione del browser.</p>
2455 <div class="section" id="id3">
2456 <h3><a class="toc-backref" href=
2457 "#id45">4.5.3 Virtual hosts</a></h3>
2459 <p>Esempio di Virtual host:</p>
2460 <pre class="literal-block">
2461 <VirtualHost *:80 >
2462 ServerName 177.piffa.net
2463 DocumentRoot /var/www/177.piffa.net/
2464 ServerAdmin webmaster@177.piffa.net
2465 </VirtualHost>
2468 <ol class="arabic simple">
2469 <li><tt class="docutils literal"><VirtualHost
2470 <span class="pre">\*:80</span> ></tt> La prima riga
2471 indica l'inizio della stanza relativa al nostro virtual
2472 host, che ascoltera' su qualunque indirizzo IP (nel
2473 caso il server abbia piu' indirizzi dai quali e'
2474 raggiungibile) sulla porta <tt class=
2475 "docutils literal">80</tt>.</li>
2477 <li><tt class="docutils literal">Server/name</tt>
2478 precisa quale sara' il nome di dominio a cui verra'
2479 associato questo sito rispetto ad altri eventualmente
2480 presenti sullo stesso server web.</li>
2482 <li><tt class="docutils literal">DocumentRoot</tt> : il
2483 path della directory che contiene le pagine del
2486 <li><tt class="docutils literal">ServerAdmin</tt>:
2487 l'indirizzo del webmaster, in modo da poterlo
2488 contattare in caso di problemi col sito.</li>
2491 "docutils literal"></VirtualHost></tt>:
2492 <em>tag</em> di chiusura della stanza di definizione
2493 del virtual host.</li>
2496 <p>Quelle che abbiamo appena visto sono le direttive
2497 essenziali per definire un sito virtuale, potrebbe essere
2498 utile aggiungere altre:</p>
2502 <dl class="first docutils">
2503 <dt><tt class="docutils literal">ErrorLog
2504 /var/log/apache2/177.piffa.net/error.log</tt></dt>
2507 <p class="first last">Log degli errori separato
2508 dai restanti siti web ospitati dal server.</p>
2514 <dl class="first docutils">
2515 <dt><tt class="docutils literal">LogLevel
2519 <p class="first last">Livello di importanza degli
2520 eventi loggati: warning <em>attenzione</em> .</p>
2526 <dl class="first docutils">
2527 <dt><tt class="docutils literal">CustomLog
2528 /var/log/apache2/177.piffa.net/access.log
2532 <p class="first last">Log di accesso separati
2533 dagli altri siti, utile anche qua per statistiche
2534 di accesso per il solo sito virtuale.</p>
2540 <p>Potrebbe essere utile modificare le impostazioni di
2541 una intera directory, ad esempio per abilitare
2542 l'<tt class="docutils literal">AuthConfig</tt>:</p>
2543 <pre class="literal-block">
2544 <Directory "/var/www/miosito.net/privata">
2545 AllowOverride AuthConfig
2546 Options ExecCGI Indexes MultiViews FollowSymLinks
2552 <p><tt class="docutils literal">AllowOverride
2553 AuthConfig</tt> ora vale per l'intera directory, come le
2558 <div class="section" id="negoziazione-accessi">
2559 <h2><a class="toc-backref" href=
2560 "#id46">4.6 Negoziazione accessi</a></h2>
2562 <p>Tipicamente quando si installa un server web il proprio
2563 desiderio e' di dare accesso ai materiali disponibili al
2564 maggior numero di visitatori possibile. Talvolta pero' puo'
2565 essere utile poter limitare questi accessi, ad esempio per
2566 escludere un <em>bot</em> indesiderato che scansiona
2567 ininterrottamente le nostre pagine o per creare una
2568 <em>Area Riservata</em> i cui materiali non devono essere
2569 disponibile a tutti.</p>
2571 <div class="section" id="limiti-su-base-ip">
2572 <h3><a class="toc-backref" href=
2573 "#id47">4.6.1 Limiti su base IP</a></h3>
2575 <p>La forma piu' semplice di restrizione degli accessi e'
2576 su base degli indirizzi IP dei client: tipicamente i siti
2577 web sono settati per dare accesso a chiunque:</p>
2578 <pre class="literal-block">
2579 <VirtualHost *:80 >
2581 <Directory "/var/www/177.piffa.net">
2585 </VirtualHost>
2588 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2590 <pre class="literal-block">
2591 <VirtualHost *:80 >
2593 <Directory "/var/www/177.piffa.net">
2596 Deny from 192.168.0.1
2598 </VirtualHost>
2601 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2602 materiali dell'intero sito virtuale, oppure potremmo
2603 lavorare su una sola directory:</p>
2604 <pre class="literal-block">
2605 <Directory "/var/www/miosito.net/limitata">
2607 Allow from 192.168.0.0./24
2612 <p>In questo modo solo la classe IP <tt class=
2613 "docutils literal">192.168.0.0/24</tt> potra' accedere
2614 alla directory <tt class=
2615 "docutils literal">/limitata</tt> Si tenga pero' conto
2616 che e' relativamente facile per un malintenzionato
2617 cambiare il proprio indirizzo IP, oppure collegarsi da un
2618 altra zona. Meno facile e' accedere ad una classe privata
2619 trovandosi all'esterno di questa, ma ci sono comunque
2620 soluzioni piu' eleganti.</p>
2623 <li>Mod_access: <a class="reference external" href=
2624 "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2626 <li>mod_authz_hosti(Available in Apache 2.1 and later):
2627 <a class="reference external" href=
2628 "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2629 http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2634 <div class="section" id="user-authentication">
2635 <h2><a class="toc-backref" href=
2636 "#id48">4.7 User Authentication</a></h2>
2638 <p>Si puo' negoziare gli accessi ad un area del sito
2639 tramite autenticazione basata su <em>nome utente /
2640 password</em>. Questo puo' venire utile per creare una area
2641 download <em>intranet</em>, alla quale possano accedere
2642 solo gli utenti previsti a prescindere dagli indirizzi IP
2643 dei loro client.</p>
2645 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2646 possibile implementare questo paradigma, per quanto
2647 esistano soluzioni piu' granulari e sofisticate, che
2648 richiedono pero' l'implementazione di interpreti di
2649 linguaggi di programmazione, criptazione delle passwords,
2650 gestione degli utenti ed eventualmente delle sessioni. Mod
2651 auth non richiede l'installazione di niente di tutto
2654 <p>link: <a class="reference external" href=
2655 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2657 <div class="section" id="definire-la-cartella">
2658 <h3><a class="toc-backref" href=
2659 "#id49">4.7.1 Definire la
2662 <p>Decidere quale sara' il <em>path</em> della cartella
2663 da sottoporre ad autenticazione:</p>
2666 <tt class="docutils literal">mkdir
2667 /var/www/177.piffa.net/privata</tt>
2671 <div class="section" id=
2672 "creazione-del-database-delle-passwords">
2673 <h3><a class="toc-backref" href=
2674 "#id50">4.7.2 Creazione del database
2675 delle passwords</a></h3>
2677 <p>Un modo semplice per gestire una database di
2678 <em>user-id / passwords</em> e' utilizzare l'utility
2679 <tt class="docutils literal">htpasswd</tt> di Apache.
2680 Questa crea un file in cui un <em>crypt</em> delle
2681 password viene associato agli utenti.</p>
2683 <p>Si dovra' decidere dove tenere questo file, la cosa
2684 importante e' che non sia visibile nel sito web: non deve
2685 essere scaricabile dai visitatori. Deve essere cioe'
2686 all'esterno della <em>DocumentRoot</em>: un buon posto
2687 potrebbe essere la /home dell'utente.</p>
2689 <p>Creiamo (con il <em>flag</em> <tt class=
2690 "docutils literal"><span class="pre">-c</span></tt>) il
2692 "docutils literal">/home/utente/passwords</tt> con
2693 l'utente <tt class="docutils literal">luca</tt>:</p>
2694 <pre class="literal-block">
2695 htpasswd -c /home/utente/passwords luca
2698 <p><tt class="docutils literal">htpasswd</tt> ci
2699 chiedera' la password da associare all'utente <tt class=
2700 "docutils literal">luca</tt>. Per successive modifiche
2701 della password o aggiunta di nuovi utenti non sara'
2702 necessario usare il flag <tt class=
2703 "docutils literal"><span class="pre">-c</span></tt>.</p>
2706 <div class="section" id="id4">
2707 <h3><a class="toc-backref" href=
2708 "#id51">4.7.3 Configurazione di
2711 <p>Ora possiamo passare alla configurazione vera e
2712 propria di Apache, ma con una novita': andremo a inserire
2713 la voce in un <tt class="docutils literal">.htaccess</tt>
2714 invece che modificare (tramite una direttiva <tt class=
2715 "docutils literal"><Directory></tt> ) il file di
2716 impostazione del virtual-host.</p>
2718 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2719 puo' modificare l'impostazione del virtual host nel file
2720 <tt class="docutils literal"><span class=
2721 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2722 ma spesso il motivo per cui creiamo i virtual hosts e'
2723 ospitare i siti di altri utenti, che possono solo
2724 pubblicare (generalmente tramite <em>FTP</em>) i loro
2725 documenti nella loro <em>DocumentRoot</em>, senza poter
2726 quindi modificare in alcun modo la configurazione del
2729 <p>Dando agli utenti la possibilita' di modificare
2730 (<em>AllowOverride</em>) autonomamente alcuni parametri
2731 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2732 funzionamento del loro spazio web ci togliera'
2733 l'incombenza di dover intervenire continuamente sui vari
2736 <p>Abilitiamo l'AllowOverride nel file di configurazione
2737 del virtual host per la sola directory <tt class=
2738 "docutils literal">privata</tt>:</p>
2739 <pre class="literal-block">
2740 <VirtualHost *:80 >
2741 ServerName 177.piffa.net
2742 DocumentRoot /var/www/177.piffa.net/
2743 ServerAdmin webmaster@177.piffa.net
2744 <Directory "/var/www/177.piffa.net/privata">
2745 AllowOverride AuthConfig
2747 </VirtualHost>
2750 <p>Per rendere il cambiamento effettivo sara' necessario
2751 fare un restart / reload di Apache.</p>
2753 <p>Ora sara' possibile, anche per l'utente di sistema,
2754 creare un file <tt class=
2755 "docutils literal">.htaccess</tt> che sara' onorato da
2758 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2759 <pre class="literal-block">
2760 # Messaggio visualizzato al prompt per l'autenticazione
2761 AuthName "Area privata soggetta ad autentizazione"
2762 # tipo di autenticazione da usarsi
2764 # File precedentemente generato con htpasswd
2765 AuthUserFile /home/utente/passwords
2767 # Negoziazione degli accessi
2768 # valid users permette l'accesso agli utenti specificati
2769 # nel file generato da htpasswd
2773 <p>Si noti che non e' necessario fare ripartire Apache
2774 per onorare i cambiamenti (un utente non avrebbe la
2775 possibilita' di farlo!).</p>
2777 <dl class="docutils">
2778 <dt>Oltre a <tt class="docutils literal"><span class=
2779 "pre">valid-users</span></tt> si potrebbe scegliere di
2780 usare la formula <tt class=
2781 "docutils literal">users</tt> che permette di elencare
2782 esplicitamente gli utenti::</dt>
2784 <dd>require user pippo pluto</dd>
2787 <p>L'utente <em>paperino</em> che fosse comunque presente
2788 nel file generato da htpasswd non potrebbe accedere alla
2791 <dl class="docutils">
2792 <dt>Nel caso ci fossero molti utenti conviene gestirli
2793 tramite <em>gruppi</em>::</dt>
2795 <dd>require group staff studenti</dd>
2798 <p>I gruppi vengono definiti in un file in modo simile a
2799 <tt class="docutils literal">/etc/groups</tt> per gli
2800 utenti di sistema:</p>
2801 <pre class="literal-block">
2803 studenti: lucap federico luca
2806 <p>da richiamare tramite la direttiva <tt class=
2807 "docutils literal">AuthGroupFile</tt>.</p>
2811 <div class="section" id="cavets">
2812 <h2><a class="toc-backref" href=
2813 "#id52">4.8 Cavets</a></h2>
2815 <p>Problemi di cache:</p>
2819 <li>Proxy: nei settaggi del browser specificare di non
2820 utilizzare un server proxy http per il sito web locale
2821 (o per gli altri che si stanno monitorando). Se si ha
2822 il controllo del proxy server: stopparlo, ricaricare la
2823 pagina (operazione che fallira'), far ripartire il
2824 proxy, ricaricare la pagina.</li>
2826 <li>Provare con un altro browser, o cercare di svuotare
2827 la cache chiudere/riaprire l'applicativo. Provare a
2828 fermare Apache, ricaricare la pagina (operazione che
2829 fallira'), far ripartire Apache, ricaricare la
2836 <div class="section" id="domain-name-system">
2837 <h1><a class="toc-backref" href=
2838 "#id53">5 Domain Name System</a></h1>
2840 <p>Domain Name System (spesso indicato con DNS) e' un
2841 servizio utilizzato per la risoluzione di nomi di host in
2842 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2843 un sistema <strong>gerarchico</strong> (quindi una struttura
2844 ad albero, simile ai <em>file system</em>)
2845 <strong>distribuito</strong> (ogni server DNS facente parte
2846 del sistema puo' mantenere solo una parte delle informazioni,
2847 ad esempio per la sua sola <em>zona</em>), costituito dai
2850 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2851 rete internet come per qualunque rete locale. Ad esempio
2852 durante la navigazione web un client vorrebbe vedere
2853 l'<em>URL</em> <tt class="docutils literal"><span class=
2854 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2855 connettere via <em>http</em> al server web deve prima
2856 ottenere l'indirizzo IP del <em>server http</em>
2857 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2858 fornisce un IP sbagliato l'utente non potra' raggiungere il
2859 servizio: di fatto e' come se il serve http fosse spento.</p>
2861 <p>Stessa cosa vale per gli altri servizi, come la posta
2862 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2865 <p>Potrebbe verificarsi uno scenario simile a questo: i
2866 vostri server per i siti web funzionano correttamente come i
2867 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2868 e POP3, e tutto il resto. Ma se poi un errore nella
2869 configurazione del DNS non rende raggiungibile l'intero
2870 <em>sito</em>: per l'utente finale e' come se nulla
2873 <p>Infatti quando si parla di un intervento della Polizia
2874 Postale per l'<em>oscuramento</em> di un sito dal punto di
2875 vista pratico questo si traduce generalmente nella rimozione
2876 o mistificazione del record DNS relativo a quel dominio (la
2877 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2878 principali provider internet che forniscono connettivita'
2879 agli utenti italiani, oltre che poter agire direttamente sul
2880 NIC italiano per i domini della TLD <em>.it</em>)</p>
2882 <p>L'operazione di convertire un nome in un indirizzo e'
2883 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2884 detto risoluzione inversa.</p>
2887 Un <em>Registar</em> e' un operatore che ha la facolta'
2888 (accreditamento da parte dell ICANN) di registrare i domini
2889 di secondo livello per gli utenti finali, dietro compenso
2890 di una modica cifra (una decina di euro) che vale come
2891 contributo su base annuale per il mantenimento
2892 dell'infrastruttura.
2895 <div class="section" id="risoluzione-inversa">
2896 <h2><a class="toc-backref" href=
2897 "#id54">5.1 Risoluzione Inversa</a></h2>
2899 <p>Per la risoluzione inversa sono invece i provider di
2900 connettivita' a gestire i DNS: se volete impostare il
2901 <em>PTR</em> associato al vostro indirizzo IP dovete
2902 contattare il vostro provider (tipo <em>telecom</em> per
2903 una connessione ADSL) e <em>non il Registar del vostro
2906 <p>Ad esempio all'IP <tt class=
2907 "docutils literal">212.22.136.248</tt> era associato un PTR
2908 <tt class="docutils literal">bender.piffa.net</tt>,
2909 corrispondente al record <tt class=
2910 "docutils literal">212</tt> facente parte della zona
2911 <tt class="docutils literal"><span class=
2912 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2913 provider Tiscali/Nextra proprietario della classe C
2914 <tt class="docutils literal">212.22.136.0</tt>. Se avete un
2915 solo IP conviene lasciare al fornitore la gestire del PTR,
2916 ma se avete a disposizione un'itera classe potete chiedere
2917 sempre al vostro provider che vi <em>deleghi</em> la
2918 gestione della zona tramite i vostri DNS.</p>
2920 <p>Per alcuni servizi, ad esempio la spedizione della posta
2921 elettronica, e' richiedeiesto che venga impostata
2922 correttamente l'associazione tra il PTR dell'indirizzo IP
2923 usato dal server di postai e il record A RR al quale questo
2924 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2929 <li><a class="reference external" href=
2930 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2931 2.1 Inconsistent, Missing, or Bad Data</li>
2933 <li><a class="reference external" href=
2934 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2938 <div class="section" id="nomi-di-dominio">
2939 <h2><a class="toc-backref" href=
2940 "#id55">5.2 Nomi di dominio</a></h2>
2942 <p>Un nome a dominio e' costituito da una serie di stringhe
2943 separate da punti, ad esempio bender.piffa.net. I nomi di
2944 dominio si leggono da destra verso sinistra: <em>TLD</em> o
2945 dominio di primo livello <tt class=
2946 "docutils literal">net</tt>, secondo livello <tt class=
2947 "docutils literal">piffa</tt>, terzo livello <tt class=
2948 "docutils literal">bender</tt>. Il dominio di primo livello
2949 (o TLD, Top Level Domain, pronunciato <em>tilde</em> in
2950 Italia), per esempio .net o .it sono limitati e decisi
2951 direttamente dall'ente assegnatario ICANN ( Internet
2952 Corporation for Assigned Names and Numbers).</p>
2954 <p>L'utente finale potra' chiedere l'assegnazione (pagando
2955 un contributo al Register preferito per il mantenimento
2956 delle spese dell'infrastruttura) di un dominio di
2957 <em>secondo</em> livello (es <tt class=
2958 "docutils literal">piffa</tt>) di una delle varie TLD
2959 disponibili (noi italiani diciamo <em>tildi</em>), sempre
2960 che non sia gia' stato assegnato a qualcun altro.</p>
2962 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
2963 potra' in stanziare domini di terzo livello (es <tt class=
2964 "docutils literal">bender</tt>) e anche oltre (es
2965 www.andrea.bender.piffa.net). Tali records saranno
2966 mantenuti dall'utente, sotto la sua responsbilita': se il
2967 proprio server DNS non fosse raggiungibile o risultasse mal
2968 configurato gli utenti non potrebbero risolvere /
2969 raggiungere i siti di loro interesse.</p>
2971 <p>Tipicamente si ha almeno un server DNS secondario per
2972 garantire la sussistenza del servizio in caso di guasto del
2973 DNS principale. I secondari <em>replicano</em> i dati
2974 presenti nei DNS principali.</p>
2977 <div class="section" id="tipologie-di-record">
2978 <h2><a class="toc-backref" href=
2979 "#id56">5.3 Tipologie di record</a></h2>
2981 <p>Ad un nome DNS possono corrispondere diversi tipi di
2982 informazioni. Per questo motivo, esistono diversi tipi di
2983 record DNS. Ogni voce del database DNS deve essere
2984 caratterizzata da un tipo. I principali tipi sono:</p>
2987 <li>Record A - Indica la corrispondenza tra un nome ed
2988 uno (o piu') indirizzi IP (per la precisione indirizzi
2989 IPv4, ovvero la versione attualmente in uso).</li>
2991 <li>Record MX - (Mail eXchange) indica a quali server
2992 debba essere inviata la posta elettronica per un certo
2995 <li>Record CNAME - Sono usati per creare un alias, ovvero
2996 per fare in modo che lo stesso calcolatore sia noto con
2997 piu' nomi. Uno degli utilizzi di questo tipo di record
2998 consiste nell'attribuire ad un host che offre piu'
2999 servizi un nome per ciascun servizio. In questo modo, i
3000 servizi possono poi essere spostati su altri host senza
3001 dover riconfigurare i client, ma modificando solo il
3004 <li>Record PTR - Il DNS viene utilizzato anche per
3005 realizzare la risoluzione inversa, ovvero per far
3006 corrispondere ad un indirizzo IP il corrispondente nome a
3007 dominio. Per questo si usano i record di tipo "PTR" (e
3008 una apposita zona dello spazio dei nomi
3011 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3013 <li>Record SRV - Identificano il server per un
3014 determinato servizio all'interno di un dominio. Possono
3015 essere considerati una generalizzazione dei record
3018 <li>Record TXT - Associano campi di testo arbitrari ad un
3019 dominio. Questi campi possono contenere una descrizione
3020 informativa oppure essere utilizzati per realizzare
3024 <p>Vi sono anche tipi di record "di servizio", necessari al
3025 funzionamento del database distribuito: * Record NS -
3026 Utilizzato per indicare quali siano i server DNS
3027 autoritativi per un certo dominio, ovvero per delegarne la
3028 gestione. * Record SOA - (Start of Authority) usato per la
3029 gestione delle zone DNS.</p>
3032 <div class="section" id="utilizzo">
3033 <h2><a class="toc-backref" href=
3034 "#id57">5.4 Utilizzo</a></h2>
3036 <p>I computer vengono identificati in rete grazie agli
3037 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3038 utenti come riferimento per i vari server. Ad esempio
3039 sarebbe scomodo riferirsi al motore di ricerca Goggle con
3040 uno dei suoi IP: <tt class=
3041 "docutils literal">74.125.43.104</tt>, e' preferibile usare
3042 il nome di dominio <em>www.google.com</em>:</p>
3043 <pre class="literal-block">
3044 ping -c 1 www.google.com
3045 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3049 <div class="section" id="risoluzione-dei-nomi-di-dominio">
3050 <h2><a class="toc-backref" href=
3051 "#id58">5.5 Risoluzione dei nomi di
3054 <p>Ci sono vari strumenti per interrogare i server DNS e
3055 ottenere l'indirizzo IP associato al nome di dominio che ci
3057 <pre class="literal-block">
3058 $ host www.piffa.net
3059 www.piffa.net is an alias for piffa.net.
3060 piffa.net has address 65.98.21.97
3061 piffa.net mail is handled by 10 65.98.21.97
3064 $ nslookup www.piffa.net
3065 Server: 192.168.0.10
3066 Address: 192.168.0.10#53
3068 Non-authoritative answer:
3069 www.piffa.net canonical name = piffa.net.
3071 Address: 65.98.21.97
3076 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
3077 ;; global options: +cmd
3079 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
3080 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3082 ;; QUESTION SECTION:
3083 ;www.piffa.net. IN A
3086 www.piffa.net. 3489 IN CNAME piffa.net.
3087 piffa.net. 3489 IN A 65.98.21.97
3089 ;; AUTHORITY SECTION:
3090 piffa.net. 86289 IN NS ns2.mydomain.com.
3091 piffa.net. 86289 IN NS ns1.mydomain.com.
3092 piffa.net. 86289 IN NS ns4.mydomain.com.
3093 piffa.net. 86289 IN NS ns3.mydomain.com.
3095 ;; ADDITIONAL SECTION:
3096 ns1.mydomain.com. 96208 IN A 64.94.117.193
3097 ns2.mydomain.com. 96208 IN A 64.94.31.67
3098 ns3.mydomain.com. 96208 IN A 66.150.161.137
3099 ns4.mydomain.com. 96208 IN A 63.251.83.74
3101 ;; Query time: 1 msec
3102 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3103 ;; WHEN: Sun May 10 21:23:11 2009
3104 ;; MSG SIZE rcvd: 209
3107 <p>Lo strumento piu' esaustivo e' <tt class=
3108 "docutils literal">dig</tt>, installabile con il pacchetto
3109 <tt class="docutils literal">dnsutils</tt> .</p>
3112 <div class="section" id="dig">
3113 <h2><a class="toc-backref" href=
3114 "#id59">5.6 Dig</a></h2>
3116 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3117 "docutils literal">dig</tt> per l'interrogazione dei DNS
3119 <pre class="literal-block">
3122 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
3123 ;; global options: +cmd
3125 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
3126 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3128 ;; QUESTION SECTION:
3129 ;www.google.it. IN A
3132 www.google.it. 250683 IN CNAME www.google.com.
3133 www.google.com. 334819 IN CNAME www.l.google.com.
3134 www.l.google.com. 186 IN A 74.125.43.103
3135 www.l.google.com. 186 IN A 74.125.43.104
3136 www.l.google.com. 186 IN A 74.125.43.147
3137 www.l.google.com. 186 IN A 74.125.43.99
3139 ;; AUTHORITY SECTION:
3140 l.google.com. 80856 IN NS f.l.google.com.
3141 l.google.com. 80856 IN NS d.l.google.com.
3142 l.google.com. 80856 IN NS b.l.google.com.
3143 l.google.com. 80856 IN NS c.l.google.com.
3144 l.google.com. 80856 IN NS a.l.google.com.
3145 l.google.com. 80856 IN NS e.l.google.com.
3146 l.google.com. 80856 IN NS g.l.google.com.
3148 ;; Query time: 1 msec
3149 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3150 ;; WHEN: Sun May 10 21:34:47 2009
3151 ;; MSG SIZE rcvd: 255
3154 <dl class="docutils">
3157 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3158 <em>root server</em> utilizzati. I root server sono i
3159 server che mantengono le informazioni sui domini di primo
3160 livello (TLD) e sono quindi il punto di partenza per
3161 scorrere nella directory dei DNS per recuperare le
3162 informazioni (tipicamente un campo <tt class=
3163 "docutils literal">A</tt> per un indirizzo IP) che ci
3164 servono per raggiungere un certo servizio.</dd>
3172 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3173 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3174 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3175 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3176 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3177 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3178 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3179 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3180 J.ROOT-SERVERS.NET. . 192032 IN NS
3181 D.ROOT-SERVERS.NET.</p>
3186 <dl class="docutils">
3187 <dt>dig @nome_dns</dt>
3189 <dd>Permette di fare una query ad un server dns
3190 particolare. Es: <tt class="docutils literal">dig
3191 @151.99.25.1 www.google.it</tt></dd>
3193 <dt>dig MX www.google.it</dt>
3195 <dd>Chiede un campo in particolare, in questo caso il
3198 <dt>dig ANY www.google.it</dt>
3200 <dd>Chiede tutti i campi, non solo i campi
3203 <dt>dig -x 74.125.43.104</dt>
3205 <dd>Effettua una richiesta inversa: dall'IP al PTR
3210 <div class="section" id="resolv-conf">
3211 <h2><a class="toc-backref" href=
3212 "#id60">5.7 resolv.conf</a></h2>
3214 <p>Il file <tt class=
3215 "docutils literal">/etc/resolv.conf</tt> contiene le
3216 impostazioni sul dns usato dal sistema, in genere anche
3217 altre applicazioni che devono effettuare query DNS leggono
3218 resolv.conf per conoscere l'ubicazione del DNS.</p>
3220 <p>/etc/resolv.conf:</p>
3224 <li><tt class="docutils literal">nameserver</tt>:
3225 indica il nameserver da utilizzare, indicato con
3226 l'indirizzo IP.</li>
3228 <li><tt class="docutils literal">domain</tt>: indica il
3229 nome di dominio della rete attuale, vedi voce
3232 <li><tt class="docutils literal">search</tt>: nome di
3233 dominio usato dalla rete sul quale cercare gli hosts.
3234 Ad esempio se impostato su <tt class=
3235 "docutils literal">piffa.net</tt> pingando l' host
3236 <tt class="docutils literal">bender</tt> viene
3237 automaticamente fatto un tentativo di ricerca per
3239 "docutils literal">bender.piffa.net</tt>.</li>
3243 <p>Predisponendo l'infrastruttura di rete della vostra LAN
3244 e' consigliabile impostare sempre almeno un DNS cache sul
3245 vostro server locale per i vari client. In questo modo in
3246 caso di malfunzionamento del DNS o necessita' di
3247 intervenire / sostituire i DNS non sara' piu' necessario
3248 dover reimpostare ogni singolo client della LAN: bastera'
3249 intervenire sul server DNS cache, ad esempio per utilizzare
3250 un nuovo forwarder, o modificare al volo un record DNS. La
3251 modifica, anche detta <em>mascheramento</em>, di un record
3252 come il <em>server smtp</em> o un <em>MX</em> potrebbe
3253 tirarvi rapidamente fuori dai guai nel caso di un problema
3254 improvviso con la posta elettronica o qualunque altro
3255 servizio che possiate reindirizzare col DNS.</p>
3257 <p>Utilizzare un server DHCP e una DNS cache come
3258 <tt class="docutils literal">Dnsmasq</tt> possono
3259 permettervi di risolvere al volo molte delle problematiche
3260 relative alla configurazione della vostra LAN: ad esempio
3261 dover intervenire manualmente su decine di client per
3262 modificare le impostazioni di SMTP | gateway | DNS |
3265 <p>Si veda anche la pagina man di resolv.conf.</p>
3267 <div class="warning">
3268 <p class="first admonition-title">Avvertenza</p>
3270 <p class="last">Attenzione: se si usa un client DHCP, ppp
3271 (ADSL compresa) o simile questo file potrebbe' essere
3272 riscritto automaticamente in base a quanto ottenuto dal
3273 DHCP. Si veda la documentazione del pacchetto <tt class=
3274 "docutils literal">resolvconf</tt>.</p>
3278 <div class="section" id="etc-hosts">
3279 <h2><a class="toc-backref" href=
3280 "#id61">5.8 /etc/hosts</a></h2>
3282 <p>Tabella statica per l'associazione tra IP e nomi di
3284 <pre class="literal-block">
3289 127.0.0.1 localhost.localdomain localhost 10.10.208.162
3290 daniela daniela.piffa.net 10.10.208.254 mirror
3291 mirror.piffa.net 91.191.138.15 thepiratebay.org
3292 192.168.0.11 chrome chrome.mydomain.com
3295 <p>Il contenuto del file e' un associazione tra un
3296 <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3297 es: <tt class="docutils literal">mirror</tt> o veri e propi
3298 nomi di dominio <tt class=
3299 "docutils literal">mirror.piffa.net</tt>. Si puo inserire
3300 un nome semplice come <em>casa</em> per riferirsi ad un
3301 host che si ha necessita' di contattare spesso, oppure
3302 mappare un nome di dominio completo su un indirizzo IP.</p>
3304 <p>Il problema e' la gestione di questo file su molti
3305 hosts: quando gli host cambiano IP si devono aggiornare
3306 manualmente i records, operazione in se' non
3307 particolarmente gravosa ma che andra' fatta per ogni client
3308 della vostra LAN. Un metodo semplice per distribuire questo
3309 file e' utilizzare <tt class=
3310 "docutils literal">Dnsmasq</tt>: questo infatti legge e
3311 onora il file <tt class="docutils literal">hosts</tt> che
3312 avete prodotto e lo rende disponibile ai clients tramite le
3315 <p>Dnsmasq lavora come un server DNS, i vostri client lo
3316 interrogheranno per tradurre nomi di host e domini in
3317 indirizzi IP, risolvendo il problema della
3318 <em>distribuzione</em> del file <tt class=
3319 "docutils literal">hosts</tt> tra molteplici clients.
3320 Infatti il servizio DNS indica appunto una <em>directory
3321 distribuita</em> per la risoluzione dei nomi di dominio,
3322 risolvendo i problemi dell'aggiornamento e diffusione dei
3323 continui cambiamenti di questa.</p>
3325 <p>Modificare la risoluzione di un nome di dominio
3326 esistente (ad esempio riconducendola a un IP interno) e' un
3327 modo drastico e funzionale per <em>annullarlo</em>
3328 rendendolo non disponibile alla propria rete locale. Ad
3329 esempio aggiungere al file <tt class=
3330 "docutils literal">/etc/hosts</tt>:</p>
3331 <pre class="literal-block">
3332 127.0.0.1 www.facebook.com
3335 <p>Impedira' agli utenti della LAN di raggiungere
3336 <em>facebook</em>, ora reindirizzato a <tt class=
3337 "docutils literal">localhost</tt>.</p>
3339 <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3340 server HTTP pubblico usato per i downloads (ad esempio un
3341 mirror della propia distribuzione come <tt class=
3342 "docutils literal">ftp.it.debian.org</tt>) a un equivalente
3343 mirror creato all'interno della rete locale, riducendo il
3344 traffico verso l'esterno e aumentando notevolmente la
3345 velocita' di scaricamento.</p>
3348 <div class="section" id="hostname">
3349 <h2><a class="toc-backref" href=
3350 "#id62">5.9 Hostname</a></h2>
3352 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3353 (e modificabile) con il comando <tt class=
3354 "docutils literal">hostname</tt>. Quando utilizzate a una
3355 shell su un host in genere l'hostname compare nel prompt
3358 <p>Per visualizzare il nome dell'host su cui si sta
3359 operando si digiti semplicemnte <tt class=
3360 "docutils literal">hostname</tt>, lo stesso comando con un
3361 oggetto modifica temporaneamente il nome dell'host. Per
3362 modificare in modo permanente il nome del computer si
3363 modifichi il contenuto del file <tt class=
3364 "docutils literal">/etc/hostname</tt>.</p>
3366 <p>Si faccia attenzione a non aver un hostname puramente
3367 numerico: ad es. <tt class="docutils literal">161</tt>. E'
3368 opportuno che il nome sia comunque un alfanumerico:
3369 <tt class="docutils literal"><span class=
3370 "pre">host-161</span></tt> o simile.</p>
3372 <div class="section" id="fqdn">
3373 <h3><a class="toc-backref" href=
3374 "#id63">5.9.1 FQDN</a></h3>
3376 <p>Per semplicita' gli host sono generalemente
3377 raggiungibili dall'esterno mappando il loro IP su un nome
3378 di dominio FQDN: fully qualified domain name, composto
3379 generalmente da <em>hostname</em>.``domain-name``, ad es.
3380 <em>bender</em>.``piffa.net``.</p>
3382 <p>Alcuni servizi internet fanno affidamento sul PTR
3383 dell'IP del server per cercare una conferma che il
3384 <em>servizio</em> sia veramente chi afferma di essere (ad
3387 <p>Non e' automatico che un servizio, ad esempio un
3388 server di posta, si qualifichi leggendo il contenuto del
3389 file <tt class="docutils literal">hostname</tt>
3390 aggiungendo come suffisso il dominio della rete di cui fa
3391 parte l' host: a volte questo parametro puo' essere
3392 specificato nel file di configurazione del servizio:</p>
3393 <pre class="literal-block">
3394 * Squid (HTTP proxy): ``visible_hostname``
3396 * Postfix (SMTP server): ``myhostname``
3399 <p>I motivi sono diversi, senza entrare nel dettaglio dei
3400 vari protocolli si pensi comunque che un host ha sempre
3401 un solo nome, ma puo' avere un numero variabile di
3402 <em>device di rete</em> sia fisici che virtuali con
3403 relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3409 <div class="section" id="dnsmasq">
3410 <h1><a class="toc-backref" href=
3411 "#id64">6 DNSmasq</a></h1>
3413 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3414 forwarder, server DHCP, e' caratterizzato dalla facilita' di
3415 configurazione, limitato uso di risorse, adattabilita' a
3416 connessioni <em>dinamiche</em> come ADSL o altre punto a
3417 punto (anche via cellulari) per condividere rapidamente la
3418 rete (cosa molto utile se ci dovesse trovare a ridare
3419 connettetivita' a una rete momentaneamente sprovvista), dalla
3420 possibilita' di modificare rapidamente i record DNS serviti
3421 alla rete anche grazie alla distribuzione del file <tt class=
3422 "docutils literal">/etc/hosts</tt> locale. Puo' essere anche
3423 utilizzato come <cite>server per il boot da rete
3424 <http://www.debian-administration.org/articles/478>_</cite>
3427 <p>Dnsmasq e' un interessante alternativa all'uso del server
3428 DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3429 autoritativo) accompagnato dal server DHCPd. I vantaggi
3433 <li>Leggerezza: puo' essere fatto girare su una macchina
3434 relativamente debole in caso di bisogno.</li>
3436 <li>Rapidita' di configurazione (in particolare per servire
3437 dei record A / MX alla rete, modificando al volo i valori
3438 originali ospitati sul server DNS pubblico).</li>
3440 <li>Ben integrato con connessioni PPP : e' ingrado di
3441 rilevare i cambiamenti dei dns suggeriti e impostarli come
3442 forwarders (utile se dovete rendere disponibile rapidamente
3443 una connessione a internet a una rete in difficolta').</li>
3446 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3447 particolare quando si deve intervenire in una rete
3448 pre-esistente in cui il server principale e' in crisi: si
3449 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3450 <em>mascherare</em> i servizi al momento non disponibili.
3451 Molto utile per scopi didattici, sopratutto per testare
3452 server SMTP impostando al volo i campi MX per nomi di dominio
3455 <div class="section" id="configurazione">
3456 <h2><a class="toc-backref" href=
3457 "#id65">6.1 Configurazione</a></h2>
3459 <p>Vediamo alcune direttive di basi del file di
3460 configurazione <tt class=
3461 "docutils literal">/etc/dnsmasq.conf</tt> utili per la
3462 configurazione sia del DNS cache che per il DHCP
3465 <dl class="docutils">
3466 <dt>domain-needed</dt>
3468 <dd>Non inoltrare query ai server DNS esterni per nomi
3469 semplici (es andrea, portatile, pippo) che verranno
3470 risolti solo in locale o causeranno direttamente una
3471 risposta <em>not found</em> .</dd>
3475 <dd>Simile alla voce precedente ma per i reverse
3480 <dd>Nome di dominio della rete da passare ai client.</dd>
3482 <dt>expand_hosts</dt>
3484 <dd>Aggiunge il <tt class="docutils literal">nome
3485 host</tt> ( <tt class=
3486 "docutils literal">/etc/hostname</tt>) dei client al nome
3487 di dominio per qualificarli in rete, senza bisogno di
3488 dover comporre a un elenco statico di record nel file
3489 <tt class="docutils literal">/etc/hosts</tt> o nello
3490 stesso file di configurazione di dnsmasq. Es: se un
3491 vostro client si chiama <tt class=
3492 "docutils literal">chrome</tt> e il vostro dominio
3493 <tt class="docutils literal">piffa.net</tt> dnsmasq
3494 rendera' disponibile il campo <em>A</em> per il dominio
3495 <tt class="docutils literal">chrome.piffa.net</tt>
3496 diretto all'ip che verra' assegnato al client.</dd>
3500 <div class="section" id="dhcp">
3501 <h2><a class="toc-backref" href=
3502 "#id66">6.2 DHCP</a></h2>
3504 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3505 al file di configurazione il <em>range</em> degli IP che si
3506 vuole assegnare ai client con il <em>lease time</em> (tempo
3507 di rilascio: quanto a lungo saranno validi gli IP
3508 assegnati) espresso in ore.</p>
3510 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3511 presente <strong>un solo server DHCP</strong>, o per meglio
3512 dire qualunque server DHCP ascolta sul broadcast <tt class=
3513 "docutils literal">255.255.255.255</tt> e potrebbe
3514 rispondere a un pacchetto di richiesta DHCP. Quindi non
3515 fate partire inavvertitamente un server DHCP in una rete
3516 gia' servita e <strong>non vi azzardate ad andare in giro
3517 con un portatile con un server DHCP attivo</strong> nelle
3518 reti altrui. Questo vale anche per i laboratori di
3519 informatica dei corsi di reti: non fate partire il vostro
3520 server DHCP se siete collegati alla rete interna!</p>
3522 <p>/etc/dnsmasq.conf (riga 118):</p>
3523 <pre class="literal-block">
3524 dhcp-range=192.168.0.20,192.168.0.50,24h
3528 <div class="section" id="dns-cache">
3529 <h2><a class="toc-backref" href=
3530 "#id67">6.3 DNS cache</a></h2>
3532 <p>Dnsmasq lavora di default come cache dns: inserire al
3533 file <tt class="docutils literal">/etc/resolv.conf</tt> il
3534 nameserver localhost in cima alla lista dei
3535 <em>nameserver</em> disponibili.</p>
3538 nameserver 127.0.0.1
3541 <p>Questo pero' potrebbe essere problematico se un altro
3542 servizio, ad esempio il DHCP client, riscrive il contenuto
3544 "docutils literal">/etc/resolv.conf</tt>. Per superare il
3545 problema si aggiunga (riga 20) al file di configurazione
3547 "docutils literal">/etc/dhcp3/dhclient.conf</tt></p>
3548 <pre class="literal-block">
3549 prepend domain-name-servers 127.0.0.1;
3552 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3553 (per la connessione ADSL) a intervenire sul file <tt class=
3554 "docutils literal">//etc/resolv.conf</tt>, si modifichi
3555 quindi <tt class="docutils literal"><span class=
3556 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3557 <tt class="docutils literal">usepeerdns</tt>. Se la vostra
3558 connessione ad internet e' ADSL raramente dovreste aver
3559 bisogno di cambiare i DNS una volta impostati (a meno che
3560 non usiate un portatile!).</p>
3564 <div class="section" id="bind-dns-autoritativo">
3565 <h1><a class="toc-backref" href=
3566 "#id68">7 Bind : DNS Autoritativo</a></h1>
3568 <p>Le soluzioni viste possono bastare per la rete locale o
3569 per fare delle prove, ma prima o poi verra' il momento in cui
3570 si e' chiamati a gestire dei domini su internet: lo standard
3571 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3574 <p>Installare i pacchetti:</p>
3575 <pre class="literal-block">
3579 <div class="section" id="id5">
3580 <h2><a class="toc-backref" href=
3581 "#id69">7.1 DNS cache</a></h2>
3583 <p>Bind appena installato funzionera' come DNS cache: si
3584 faccia un test con un <tt class="docutils literal">dig
3585 @localhost</tt> . Bind a differenza di Dnsmasq e' autonomo:
3586 non ha bisogno di forwardare (inoltrare) le query a un DNS
3587 esterno: queste verranno risolte direttamente da Bind
3588 partendo dai <em>DNS root servers</em>.</p>
3590 <p>E' comunque possibile impostare dei DNS forwarders,
3591 tipicamente i DNS server forniti dal proprio provider, per
3592 velocizzare le query:</p>
3594 <p>/etc/bind/named.conf.options (riga 13):</p>
3595 <pre class="literal-block">
3601 <p>Nel caso si voglia usare Bind solo come server DNS cache
3602 per la propria LAN senza ospitare delle zone DNS pubbliche
3603 sara' il caso di limitare gli accessi al server alla sola
3606 <p>/etc/bind/named.conf.options (riga 19):</p>
3607 <pre class="literal-block">
3608 // Se il proprio server ha IP 10.10.208.254
3609 // sulla rete LAN privata:
3610 listen-on { 10.10.208.254; }
3613 <p>E non si lasci il server in ascolto su uno degli
3614 eventuali indirizzi IP pubblici.</p>
3616 <p>Se questo non fosse possibile si puo' sempre lavorare su
3617 una <em>acl</em>:</p>
3619 <p>/etc/bind/named.conf</p>
3620 <pre class="literal-block">
3622 10.10.208.0/24 ; 127.0.0.0/8 ;
3626 <p>Per poi aggiungere all'interno della stanza options la
3627 direttiva che abilita' l'entita' <tt class=
3628 "docutils literal">localnet</tt>:</p>
3630 <p>/etc/bind/named.conf.options</p>
3631 <pre class="literal-block">
3632 allow-query {"localnet" ;} ;
3636 <div class="section" id="ospitare-una-zona">
3637 <h2><a class="toc-backref" href=
3638 "#id70">7.2 Ospitare una zona</a></h2>
3640 <p>Se avete acquistato un nome di dominio e vi serve un
3641 software DNS per gestirlo Bind e' la scelta piu' diffusa.
3642 Ora vedremo come configurare una <em>zona</em> (come
3643 piffa.net) in modo che Bind sia autoritativoper questa,
3644 rispondendo alle query DNS di tutta la rete internet.</p>
3646 <div class="section" id="named-conf-local">
3647 <h3><a class="toc-backref" href=
3648 "#id71">7.2.1 named.conf.local</a></h3>
3650 <p>Prima di tutti impostiamo il server bind per gestire
3651 la zona, per non fare confusione e' opportuno inserire le
3652 propie zone DNS nel file <tt class=
3653 "docutils literal">named.conf.local</tt> e non in
3654 <tt class="docutils literal">named.conf</tt>.</p>
3656 <p>named.conf.local:</p>
3657 <pre class="literal-block">
3659 // Do any local configuration here
3662 // Consider adding the 1918 zones here, if they are not used in your
3664 //include "/etc/bind/zones.rfc1918";
3668 file "/etc/bind/pz/piffa.net";
3672 <dl class="docutils">
3673 <dt>type master</dt>
3675 <dd>Il nostro server DNS sara' il principale, al quale
3676 poi potremo affiancare dei DNS secondari nel caso
3677 questo non sia disponibile.</dd>
3679 <dt>file "/etc/bind/pz/piffa.net"</dt>
3681 <dd>Dove verranno inserite le informazioni vere e
3682 propie di questa zona.</dd>
3686 <div class="section" id="configurazione-della-zona">
3687 <h3><a class="toc-backref" href=
3688 "#id72">7.2.2 Configurazione della
3691 <p>Ora dovremo preparare il file contenente i record DNS
3692 della zona <em>piffa.net</em>, come abbiamo indicato
3693 prima questi saranno contenuti nel file <tt class=
3694 "docutils literal">/etc/bind/pz/piffa.net</tt> . Tenere
3695 le zone dentro una sottocartella e' buona abitudine,
3696 usare <tt class="docutils literal">pz</tt> per queste e'
3697 una vecchia abitudine.</p>
3700 <pre class="literal-block">
3701 ; Zona per il dominio di secondo livello piffa.net
3704 @ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
3706 8H ; refresh (8 hours)
3707 2H ; retry (2 hours)
3708 4W ; expire (4 weeks)
3709 1D ; minimum (1 day)
3716 TXT "Piffanet main site"
3722 test.piffa.net. A 94.23.63.105
3723 *.piffa.net. A 94.23.63.105 ; *catch all domain
3728 <p>All'interno di questo file si possono inserire dei
3729 commenti con il carattere <tt class=
3730 "docutils literal">;</tt> (punto-e-virgola), si faccia
3731 attenzione alla rigida sintassi: apertura e chiusura
3732 delle parentesi tonde nella parte <tt class=
3733 "docutils literal">IN SOA</tt>, uso del <tt class=
3734 "docutils literal">punto</tt> finale per precisare un
3735 nome di dominio specifico (<em>FQDN</em>: Fully-qualified
3736 Domain Name) come <tt class=
3737 "docutils literal">test.piffa.net.</tt> a differenza
3738 degli altri domini di terzo livello come <tt class=
3739 "docutils literal">pop,imap,smtp</tt> .</p>
3741 <p>La zona inizia con una direttiva <tt class=
3742 "docutils literal">$TTL 3D</tt> (RFC 2308) che indica la
3743 durata (in questo caso tre giorni) che ogni record
3744 dovrebbe avrebbe nella cache degli altri serber DNS.
3745 Questo valore dovrebbe essere superiore a un giorno, se
3746 non modificate spesso i valori dei vostri record DNS e'
3747 consigliabile settarlo a 2/3 settimane in modo da
3748 limitare la frequenza delle query al propio server.
3749 Questo parametro puo' essere modificato per singoli
3751 <pre class="literal-block">
3752 $TTL 3D ; 3 giorni: default se non specificato altrimenti
3753 rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
3754 lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
3755 normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
3758 <p>Segue poi il nome della zona, indicato con la
3759 <tt class="docutils literal">@</tt> per richiamare la
3760 zona originale precisata nel file <tt class=
3761 "docutils literal">named.conf.options</tt> . Segue il
3762 campo <tt class="docutils literal">SOA</tt>.</p>
3764 <div class="section" id="soa-start-of-authority-record">
3765 <h4><a class="toc-backref" href=
3766 "#id73">7.2.2.1 SOA: Start of
3767 Authority Record</a></h4>
3769 <p>Il record SOA puo' comparire solo una volta in una
3770 zona, contiene informazioni relative all'autorita' del
3773 <dl class="docutils">
3774 <dt>ns1.piffa.net. name-server</dt>
3776 <dd>primary master DNS di questo dominio.</dd>
3778 <dt>hostmaster.piffa.net. email-addr</dt>
3780 <dd>email-addr: indirizzo email della persona
3781 responsabile di questa zona, il primo punto viene
3782 tradotto in una <em>chiocciola</em> <tt class=
3783 "docutils literal">@</tt> dato che questo carattere
3784 ha un'altro utilizzo all'interno di questo file. Il
3785 referente della zona <strong>deve</strong> essere un
3786 email valido e controllato, come consuetudine si usa
3788 "docutils literal">hostmaster@dominio.tilde</tt>
3791 <dt>200905245 serial number</dt>
3793 <dd>Questo valore serve per indicare quando e' stato
3794 modificato questo file di configurazione, secondo il
3795 formato <tt class="docutils literal">yyyymmddss</tt>:
3796 <tt class="docutils literal">yyyy</tt> = anno, ''mm''
3797 = mese, ''dd'' = giorno, ''ss'' = seriale. Il seriale
3798 che deve essere sempre specificato anche per una
3799 cifra, va incrementato di una unita' nel caso vengano
3800 fatte piu' modifiche <em>nello stesso
3805 <dd>Indica ai DNS secondari quanto tempo attendere
3806 per cercare di aggiornare i loro dati con il DNS
3811 <dd>Intervallo di tempo per il DNS slave (secondario)
3812 da aspettare prima di cercare di ricontattare il
3813 <em>master</em> in caso di problemi col
3814 <em>refresh</em>.</dd>
3818 <dd>Indica quando i dati dei dns secondarinon sono
3819 piu' autoritativi in caso di impossibilita' degli
3820 <em>slaves</em> di ri-aggiornarsi con il
3821 <em>master</em>. Consigliato un valore di 2/4
3826 <dd>Questo valore indicava il TTL fino alla versione
3827 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3828 durata del <em>negative caching</em>, quanto i
3829 resolvers (ad esempio un server dns cache) puo'
3830 mantenere un record <em>negativo</em> (che non indica
3831 la corrispondenza tra un nome di dominio e un ip, ma
3832 la non esistenza del record). Nell'uso per il
3833 negative caching viene fissato un valore massimo di 3
3834 ore dalla RFC 2308.</dd>
3838 <div class="section" id="altri-campi">
3839 <h4><a class="toc-backref" href=
3840 "#id74">7.2.2.2 Altri campi:</a></h4>
3842 <p>All'interno della zona possono essere utilizati vari
3843 tipi di records (RR):</p>
3845 <dl class="docutils">
3848 <dd>Informazioni testuali associate ad un record</dd>
3852 <dd>Name Server della zona. Non deve essere un
3857 <dd>Indirizzo ipv4 da associare al record</dd>
3861 <dd>Indirizzo ipv6 da associare al record</dd>
3865 <dd>Canonical Name: un alias per un host: ad esempio
3866 per il dominio piffa.net possiamo settare degli alias
3867 come <tt class="docutils literal">www.piffa.net,
3868 http.piffa.net, virtual.piffa.net, ftp.piffa.net,
3869 imap.piffa.net</tt>. Comodo quando diversi alias sono
3870 sempre riferiti allo stesso ip.</dd>
3874 <dd>Mail Exchanger: server di posta che si occupera'
3875 della posta elettronica per questo dominio.E'
3876 opportuno avere almeno un server di posta di back-up,
3877 per indicare la priorita' di un MX rispettoad un
3878 altro si usa un valore di 2 cifre: il valore piu'
3879 basso indica priorita' piu' bassa. Es: <tt class=
3880 "docutils literal">MX 10
3881 smtp.piffa.net.</tt> per il server SMTP principale e
3883 "docutils literal">MX
3884 40 smtp2.piffa.net</tt> per il secondario. Non deve
3885 essere un cname.</dd>
3889 <dd>Reverse look-up, usato per la mappatura inversa
3890 di un indirizzo ip a una stringa identificativa
3891 dell'host. Si noti che per poter modificare questi
3892 record si deve avere <em>in gestione</em> la <em>zona
3893 IP</em>, se cosi' non fosse si dovra' chiedere al
3894 propio provider la modifica di questo record per il
3895 propio ip. Links: <a class="reference external" href=
3896 "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
3902 <div class="section" id="dns-slave">
3903 <h2><a class="toc-backref" href=
3904 "#id75">7.3 DNS slave</a></h2>
3906 <p>Data l'importanza del servizio DNS e' necessario avere
3907 ridondanza per i server DNS che ospitano i vostri dati: in
3908 caso di indisponibilita' del server <em>master</em> (nel
3909 caso fosse il solo a tenere i dati questo comporterebbe la
3910 <em>scomparsa</em> di tutti i servizi / host da esso
3911 seviti!) il client potrebbe contattare uno degli
3914 <p>Gli slave recuperano i dati dei recordos RR direttamente
3915 dal master e non sara' quindi necessario dover mantenere
3916 manualmente il file di configurazione della zona sugli
3917 slaves, ogni volta che aggiorneremo il master questi dati
3918 si propaghera' agli slaves automaticamente.</p>
3920 <p>Per attivare uno <em>slave</em> per la nostra zona di
3921 esempio <tt class="docutils literal">piffa.net</tt> si
3922 inserisca nel file <tt class=
3923 "docutils literal">named.conf.local</tt> dello slave
3925 <pre class="literal-block">
3928 file "/etc/bind/pz/piffa.net";
3929 masters { 192.168.0.1; };
3933 <p>Facendo ripartire Bind il file <tt class=
3934 "docutils literal">/etc/bind/pz/piffa.net</tt> viene creato
3935 automaticamente.</p>
3937 <p>Segue un estratto di <tt class=
3938 "docutils literal">/var/log/syslog</tt> al <tt class=
3939 "docutils literal">restart</tt> di <tt class=
3940 "docutils literal">bind9</tt> sullo slave:</p>
3941 <pre class="literal-block">
3942 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
3943 ... slave named[2256]: running
3944 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
3945 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
3946 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
3949 <div class="warning">
3950 <p class="first admonition-title">Avvertenza</p>
3952 <p class="last">Bind9 (versione 9.3 presente in Debian
3953 Lenny) richiede una esplicita autorizzazione alla
3954 notifica per lo stesso server slave, che in fase di avvio
3955 interroghera' (inviando un notify) se' stesso per
3956 valutare se i dati relativi alla zona di cui e' slave
3957 sono aggiornati. Si aggiunga quindi al file <tt class=
3958 "docutils literal">/etc/bind/named.conf.options</tt>
3959 dello slave: <tt class="docutils literal"><span class=
3960 "pre">allow-notify</span> { 192.168.0.1; };</tt>
3961 all'interno della stanza <tt class=
3962 "docutils literal">options</tt>, in cui l'inidirizzo IP
3963 inserito e' quello dello stesso slave server.</p>
3967 <div class="section" id="aggiornamento-dinamico-nsupdate">
3968 <h2><a class="toc-backref" href=
3969 "#id76">7.4 Aggiornamento dinamico:
3972 <p>Dalla versione 8 di Bind e' dsponibile l'utility
3973 <tt class="docutils literal">nsupdate</tt> (disponibile nel
3974 pacchetto <tt class="docutils literal">dnsutils</tt>) per
3975 aggiornare automaticamente i record di una zona secondo il
3976 paradigma client / server ( RFC2136 ) . Posto che abbiate a
3977 disposizione un server DNS Bind on-line su un indirizzo IP
3978 fisso e un zona da gestire (che potrebbe essere anche solo
3979 la delega di un dominio di terzo livello come
3980 <em>casa.miodominio.net</em>) sara' possibile aggiornare
3981 automaticamente i record che tirano a degli indirizzi IP
3982 <em>pubblici ma dnamici</em>, come quelli spesso messi a
3983 disposizione dei provider per le connessioni ad internet
3984 residenziali, in modo da poter rendere sempre raggiungibile
3985 la vostra workstation a casa anche dopo un aggiornamento
3986 dell'ip dinamico associato alla connessione.</p>
3988 <p>L'auenticazione del client nsupdate che avra' la
3989 possibilita' di aggiornare il server DNS master avviene
3990 tramite <em>Transaction signatures</em> (TSIG, RFC2845)
3991 usando un algoritmo di criptazione dati asimmetrico
3992 <em>HMAC-MD5</em> : generata una coppia di chiavi sul
3993 client / nsupdate con l'utility si dovra' trasferire la
3994 chiave pubblica sul server <em>master</em>, che verra'
3995 configurato per onorare gli aggiornamenti (eliminazione e
3996 inserimento di record RR) autenticati dalla chiave
3999 <div class="section" id="configurazione-client-nsupdate">
4000 <h3><a class="toc-backref" href=
4001 "#id77">7.4.1 Configurazione client
4004 <p>Sul client, sul quale non deve essere necessariamente
4005 installato un server DNS Bind ma la sola utility
4006 <tt class="docutils literal">nsupdate</tt>, generiamo la
4007 coppia di chiavi con l'utility <tt class=
4008 "docutils literal"><span class=
4009 "pre">dnssec-keygen</span></tt> installabile tramite il
4010 pacchetto <tt class=
4011 "docutils literal">bind9utils</tt>:</p>
4012 <pre class="literal-block">
4013 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4016 <p>Otterremo le due chiavi <tt class=
4017 "docutils literal"><span class=
4018 "pre">Khome.piffa.net.+157+04331.key</span>
4020 "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4021 chiave pubblica dovra' essere resa noto al server master
4022 che ricevera' l'update dei records.</p>
4025 <div class="section" id=
4026 "configurazione-server-riconoscimento-chiave">
4027 <h3><a class="toc-backref" href=
4028 "#id78">7.4.2 Configurazione server:
4029 riconoscimento chiave</a></h3>
4031 <dl class="docutils">
4032 <dt>Per rendere nota al server la chiave pubblica
4033 generata sul client si aggiunga quindi al file
4034 <tt class="docutils literal">/etc/bind/named.conf</tt>
4038 <dl class="first last docutils">
4039 <dt>key home.piffa.net. {</dt>
4041 <dd>algorithm HMAC-MD5; secret
4042 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4043 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4049 <p class="first admonition-title">Nota</p>
4051 <p class="last">La parte <tt class=
4052 "docutils literal">secret</tt>, che potete leggere
4053 direttamente nel file *.key della chiave genearta, e'
4054 scritto <em>tutto sulla stessa riga</em> senza ritorni
4059 <div class="section" id="server-gestione-dell-intera-zona">
4060 <h3><a class="toc-backref" href=
4061 "#id79">7.4.3 Server: gestione
4062 dell'intera zona</a></h3>
4064 <p>Sul server modifichiamo il file di configurazione
4065 <tt class="docutils literal">named.conf.local</tt> della
4066 zona della quale vogliamo concedere l'aggiornamento al
4068 <pre class="literal-block">
4071 file "/etc/bind/pz/piffa.net" ;
4078 <dl class="docutils">
4079 <dt>Sara' necessario assicurarsi che il demone di Bind
4080 sia in grado di modificare il file <tt class=
4081 "docutils literal">/etc/bind/pz/piffa.net</tt>: dato
4082 che questo file ora sara' gestito da lui si proceda a
4083 cedergli la propieta' del file::</dt>
4085 <dd>chown bind /etc/bind/pz/piffa.net</dd>
4088 <p>Altro problema che si potrebbe porre: gli orologi di
4089 sistema dei due host devono essere sincronizzati per
4090 poter valutare l'opportunita' di un aggiornamento: si
4091 consigla di installare su entrambi l'utility <tt class=
4092 "docutils literal">ntpdate</tt> e di eseguirla facendo
4093 riferimento ai time server di Debian:</p>
4094 <pre class="literal-block">
4095 apt-get install ntpdate
4099 <p>Ora possiamo provare dal client a effettuare
4100 l'iserimento di un record per testarne il
4102 <pre class="literal-block">
4103 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4104 > server ns1.piffa.net
4105 > update add home.piffa.net. 86400 A 192.168.0.2
4107 Outgoing update query:
4108 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
4109 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4111 home.piffa.net. 86400 IN A 192.168.0.1
4117 <p>Per comprendere meglio l'uso dell'utility <tt class=
4118 "docutils literal">nsupdate</tt> si consiglia la lettura
4119 della relativa pagina man. Nella prima riga viene
4120 invocato il comando <tt class=
4121 "docutils literal">nsupdate</tt> impostando col flag
4122 <tt class="docutils literal"><span class=
4123 "pre">-k</span></tt> la chiave privata generata
4124 precedentemente, con <tt class=
4125 "docutils literal">server</tt> si imposta quale server NS
4126 autoritario della zona (che abbiamo precedentemente
4127 configurato per ricevere gli aggiornamenti) vogliamo
4128 contattare. Alla riga sucessiva <tt class=
4129 "docutils literal">update</tt> viene aggiunto un record
4130 <tt class="docutils literal">A</tt> per la il dominio
4131 <tt class="docutils literal">home.piffa.net</tt>
4132 indirizzato all'IP <tt class=
4133 "docutils literal">192.168.0.2</tt>, poi <tt class=
4134 "docutils literal">show</tt> mostra quanto ci si prepara
4135 a comunicare al server con il finale <tt class=
4136 "docutils literal">send</tt> .</p>
4138 <p>Si noti che in questo modo <em>l'intera zona</em>
4139 piffa.net e suscettibile di essere modificata dal client,
4140 che potra' eliminare e inserire qualunque record. E'
4141 possibile gestire in modo piu' granulare la zona, ad
4142 esempio concedendo al client i privilegi per gestire solo
4143 una parte della zona o i tipo di record da gestire.</p>
4146 <div class="section" id=
4147 "automatizzare-l-aggiornamento-dinamico">
4148 <h3><a class="toc-backref" href=
4149 "#id80">7.4.4 Automatizzare
4150 l'aggiornamento dinamico</a></h3>
4152 <p>Nsupdate risulta comodo per tenere aggiornati i record
4153 DNS degli host connessi ad internet con indirizzi IP
4154 dinamici (pubblici) assegnati dal provider. Il client
4155 deve essere in grado di contattare autonomamente il
4156 server DNS per comunicare un cambiamento del suo ip.
4157 Vediamo innanzi tutto un primo script per nsupdate:</p>
4158 <pre class="literal-block">
4160 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4161 # prima di leggere l'IP ottenuto
4163 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4165 nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
4166 server 192.168.0.254
4167 zone home.piffa.net.
4168 update delete home.piffa.net. A
4169 update delete home.piffa.net. MX
4170 update add home.piffa.net. 432000 A $IPADDR
4171 update add home.piffa.net. 432000 MX 10 home.piffa.net.
4177 <p>Questo script legge il valore del device di rete
4178 <tt class="docutils literal">ppp0</tt> creato dal
4179 <cite>pppoe</cite> di una connessione ADSL per ottenere
4180 l'indirizzo IP ottenuto dal provider (prima di farlo
4181 aspetta 15 secondi per dare il tempo al <tt class=
4182 "docutils literal">pppoe</tt> di negoziare la
4183 connessione).Vengono poi eliminati gli esistenti valori
4184 <tt class="docutils literal">A</tt> e <tt class=
4185 "docutils literal">MX</tt> per <tt class=
4186 "docutils literal">home.piffa.net</tt> (si noti il punto
4187 finale dopo <em>net</em>) e inseriti quelli attuali.</p>
4189 <p>Resta da decidere quando richiamare questo script:
4190 l'evento che causa l'assegnazione del nuovo IP in questo
4191 caso e una nuova connessione <tt class=
4192 "docutils literal">pppoe</tt>, quindi sarebbe
4193 consigliabile inserire lo script nelle routine comprese
4194 in <tt class="docutils literal"><span class=
4195 "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4196 documentazione di ppp), nel caso questo non desse i
4197 risultati sperati (per problemi di connessione) come via
4198 estrema si consideri di mettere lo script nella routine
4199 del demone <tt class="docutils literal">cron</tt> in modo
4200 che venga eseguito periodicamente (ad esempio ogni
4205 <div class="section" id="link-suggeriti">
4206 <h2><a class="toc-backref" href=
4207 "#id81">7.5 Link suggeriti:</a></h2>
4210 <li>DNS for Rocket Scientists <a class=
4211 "reference external" href=
4212 "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4214 <li>DNS HOWTO <a class="reference external" href=
4215 "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4220 <div class="section" id="samba">
4221 <h1><a class="toc-backref" href=
4222 "#id82">8 Samba</a></h1>
4224 <p>Samba e' un progetto libero che fornisce servizi di
4225 condivisione di file e stampanti a client SMB/CIFS.</p>
4227 <p>Samba e' liberamente disponibile, al contrario di altre
4228 implementazioni SMB/CIFS, e permette di ottenere
4229 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4231 <p>Samba e' un software che puo' girare su piattaforme che
4232 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4233 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4234 il protocollo TCP/IP utilizzando i servizi offerti sul server
4235 ospite. Quando correttamente configurato, permette di
4236 interagire con client o server Microsoft Windows come se
4237 fosse un file e print server Microsoft agendo da Primary
4238 Domain Controller (PDC) o come Backup Domain Controller, puo'
4239 inoltre prendere parte ad un dominio Active Directory.</p>
4241 <div class="section" id="pacchetti">
4242 <h2><a class="toc-backref" href=
4243 "#id83">8.1 Pacchetti</a></h2>
4245 <p>Pacchetti da installare per utilizzare Samba in
4246 modalita' client <a class="footnote-reference" href="#id7"
4247 id="id6" name="id6">[2]</a></p>
4248 <pre class="literal-block">
4252 <p>Pacchetti da installare per utilizzare Samba in
4253 modalita' server:</p>
4254 <pre class="literal-block">
4255 samba smbfs smbclient
4258 <table class="docutils footnote" frame="void" id="id7"
4265 <tbody valign="top">
4267 <td class="label"><a class="fn-backref" href=
4270 <td>Anche se nato per i sistemi Windows, Samba puo'
4271 essere usato anche per montare cartelle sotto
4272 GNU/Linux come alternativa a NFS. Per la condivisione
4273 di stampanti sarebbe invece opportuno intervenire
4274 direttamente su <tt class=
4275 "docutils literal">CUPS</tt>.</td>
4280 <p>Durante la prima installazione viene chiesto il nome del
4281 gruppo di appartenenza, il default per Windows e'
4282 <tt class="docutils literal">WORKGROUP</tt>. In aula usiamo
4283 invece <tt class="docutils literal">208</tt> .</p>
4285 <p>Per riconfigurare Samba si usi il comando:</p>
4286 <pre class="literal-block">
4287 dpkg-reconfigure samba-common
4291 <div class="section" id="passwords-e-autenticazione">
4292 <h2><a class="toc-backref" href=
4293 "#id84">8.2 Passwords e
4294 autenticazione</a></h2>
4296 <p>Per poter configurare Samba in modo che usi un sistema
4297 di negoziazione degli accessi alle cartelle condivise
4298 basato su accoppiate <em>nome utente / password</em>
4299 bisogna distinguere tra 3 livelli di password (e
4300 generalmente volete usare <em>sempre la stessa
4301 password</em> per ognuno di questi) e delle differenze tra
4302 le modalita' di <em>autenticazione</em> (e quindi anche di
4303 criptaggio delle passwords) usate da sistemi GNU/Linux e
4306 <dl class="docutils">
4307 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4309 <dd>E' la password dell'<em>utente di sistema</em> che
4310 viene usata sul sistema operativo su cui gira il software
4311 Samba. E' importante tenere conto anche delle
4312 <em>user-id</em> e <em>group-id</em> degli utenti che
4313 dovranno fisicamente scrivere sui file system. Se un
4314 utente non puo' scrivere in una certa posizione del file
4315 system (ad esempio nella cartella <tt class=
4316 "docutils literal">/mnt/condivisione</tt> che sara' stata
4317 necessariamente creata inizialmente dall'utente
4318 <tt class="docutils literal">root</tt>) per mancanza dei
4319 privilegi di scrittura allora neanche Samba potra' farlo
4320 nel momento in mette a disposizione la risorsa
4321 all'utente. Se si montano file-system dedicati per le
4322 condivisioni controllare i permessi e proprieta' dei
4323 <em>punti di mount*</em>. Queste passwords sono salvate
4324 nel solito file /etc/shadow (richiamato da
4327 <dt>2 Password per l'applicativo Samba</dt>
4329 <dd>Samba deve essere compatibile con Windows e quindi
4330 utilizzare un sistema di criptazione delle password
4331 diverso da /etc/shadow . Le password per Samba possono
4332 essere gestite ad esempio col comando <tt class=
4333 "docutils literal">smbpasswd</tt> e vengono generalmente
4334 salvate all'interno di <tt class=
4335 "docutils literal">/var/lib/samba/passdb.tdb</tt> .</dd>
4337 <dt>3 Password per Windows.</dt>
4339 <dd>Gli utenti Windows effettuano il log-in alla partenza
4340 della sessione di Windows. Se si avra' l'accortezza di
4341 usare sempre la <em>stessa password</em> data
4342 precedentemente anche a Windows (o viceversa impostare la
4343 password per GNU/Linux / Samba uguale a quella di
4344 Windows) l'utente potra' accedere automaticamente alle
4345 condivisioni a lui disponibili.</dd>
4349 <div class="section" id="creazione-utenti">
4350 <h2><a class="toc-backref" href=
4351 "#id85">8.3 Creazione Utenti</a></h2>
4353 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4354 attenzione a <em>non dargli una shell di sistema</em>. Gli
4355 utenti Windows che accedono al server solo per le
4356 condivisioni non hanno bisogno di poter eseguire comandi
4359 <p>Creazione di un utente denominato sambo:</p>
4360 <pre class="literal-block">
4361 adduser --shell /bin/false sambo
4364 <p>Nel file <tt class="docutils literal">/etc/passwd</tt>
4365 avremo qualcosa come:</p>
4366 <pre class="literal-block">
4367 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4370 <p>Aggiunta dell'utente al database delle password per
4371 Samba e generazione della sua password:</p>
4372 <pre class="literal-block">
4376 <p>Se successivamente si vorra' modificare la password di
4377 un utente gia' esistente si usi:</p>
4378 <pre class="literal-block">
4382 <p>La password sotto Windows verra' modificata sul sistema
4386 <div class="section" id="creare-la-condivisione">
4387 <h2><a class="toc-backref" href=
4388 "#id86">8.4 Creare la
4389 condivisione</a></h2>
4391 <p>La condivisione altro non e' che una cartella sul server
4392 che viene resa disponibile ai client negoziando l'accesso
4393 in base a una autenticazione basata su <em>user-name /
4394 password</em>. E' per altro possibile permettere l'accesso
4395 a una risorsa a chiunque indiscriminatamente (a tutti i
4396 <tt class="docutils literal">guest</tt>) ma la cosa e'
4397 sconsigliabile dal punto di vista della sicurezza. Si
4398 decida se la cartella condivisa debba risiedere nella
4399 <em>home</em> di un utente (nel caso quest'ultimo ne sia
4400 l'unico fruitore) o in una cartella in /mnt/ (nel caso piu'
4401 utenti accedano a questa). Nel secondo caso si potranno
4402 gestire gli accessi sotto GNU/Linux tramite i gruppi.</p>
4404 <p>Creazione della risorsa sambo_share nella home
4405 dell'utente sambo:</p>
4406 <pre class="literal-block">
4407 # mkdir /home/sambo/sambo_share
4408 # chown sambo:sambo /home/sambo/sambo_share/
4411 <div class="section" id=
4412 "sicurezza-permessi-di-esecuzione-sul-server">
4413 <h3><a class="toc-backref" href=
4414 "#id87">8.4.1 Sicurezza: permessi di
4415 esecuzione sul server</a></h3>
4417 <p>Bisognerebbe notare sul server i permessi di
4418 esecuzione del file-system che ospita la cartella da
4419 condividere. Se i file che saranno contenuti nella
4420 condivisione saranno da usarsi sotto Windows non c'e'
4421 motivo che questi siano eseguibili sotto GNU/Linux. Si
4422 potrebbe avere quindi, ipotizzando una condivisione in
4423 <tt class="docutils literal">/mnt/share</tt> che risieda
4424 su di un file system dedicato:</p>
4426 <p><tt class="docutils literal">/etc/fstab</tt></p>
4429 /dev/hda10 /mnt/share ext3 rw,
4430 <strong>nosuid,noexec</strong> 0 3
4433 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4434 possibilita' di eseguire programmi con credenziali
4439 <div class="section" id=
4440 "configurazione-dell-applicativo-samba-vero-e-proprio">
4441 <h2><a class="toc-backref" href=
4442 "#id88">8.5 Configurazione
4443 dell'applicativo Samba vero e proprio.</a></h2>
4445 <p>Avendo preparato gli utenti (ancora una volta: non si
4446 dia una shell completa a un utente che serve solo per Samba
4447 o la posta elettronica) e la cartella sul file system si
4448 puo' procedere a configurare la condivisione su Samba.</p>
4450 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4451 vim si usi 235gg ):</p>
4452 <pre class="literal-block">
4454 # Percorso della cartella condivisa
4455 path = /home/sambo/sambo_share
4456 # Se gli utenti possono scrivere / modificare file
4458 # Negoziazione degli accessi su base utenti / passwords
4461 # #######################################
4462 # Altri parametri opzionali di interesse
4463 # Se posso vedere la condivisione da esplora risorse
4464 # anche se non ho i privilegi per accedervi.
4466 # Commento indicativo della risorsa
4467 comment = Condivisione per Sambo
4470 <p>Dopo aver salvato il file si puo' fare un primo
4471 controllo tramite l'utility <tt class=
4472 "docutils literal">testparm</tt> , che controlla la
4473 sintassi del file di configurazione di Samba. Se questo non
4474 rileva problemi si puo' procedere a un <tt class=
4475 "docutils literal"># /etc/init.d/samba restart</tt> .</p>
4477 <div class="section" id="creazione-di-un-gruppo">
4478 <h3><a class="toc-backref" href=
4479 "#id89">8.5.1 Creazione di un
4482 <p>Se si deve condividere una risorsa con un numero
4483 consistente di utenti e' consigliabile lavorare in
4484 termini termini di gruppi piuttosto che elencare la lista
4485 degli utenti in <tt class="docutils literal">valid
4488 <p>Dopo aver creato il gruppo del quale volete facciano
4489 parte i vostri utenti (<tt class=
4490 "docutils literal">addgroup nome_gruppo</tt>), inserite i
4491 vostri utenti nel gruppo (<tt class=
4492 "docutils literal">adduser nome_utente nome_gruppo</tt>)
4493 e modificate la direttiva <tt class=
4494 "docutils literal">valid users</tt> in <tt class=
4495 "docutils literal">smb.conf</tt> per riferirsi ad un
4496 gruppo piuttosto che a degli utenti. Per riferirsi a un
4497 gruppo si usi il carattere <tt class="docutils literal">@
4498 chicciola</tt> col <tt class=
4499 "docutils literal">nome_del_gruppo</tt>:</p>
4500 <pre class="literal-block">
4501 # Negoziazione degli accessi su base gruppo
4502 valid users = @nome_gruppo
4507 <div class="section" id="testare-il-servizio">
4508 <h2><a class="toc-backref" href=
4509 "#id90">8.6 Testare il Servizio</a></h2>
4511 <p>Come testare il servizio</p>
4514 <pre class="literal-block">
4515 smbclient -U sambo -L localhost
4518 <p>Questo comando permette di esplorare la risorsa
4519 qualificandosi come utente, in questo modo potete testare
4520 il corretto funzionamento dell'autenticazione. Si provi
4521 inizialmente a sbagliare la password deliberatamente, poi a
4522 inserirla correttamente: dovrebbero essere visibili le
4523 risorse disponibili al solo utente sambo: la suo /home e la
4524 cartella samba_share:</p>
4525 <pre class="literal-block">
4526 Sharename Type Comment
4527 --------- ---- -------
4528 sambo_share Disk Condivisione per Sambo
4529 print$ Disk Printer Drivers
4530 IPC$ IPC IPC Service (base server)
4531 sambo Disk Home Directories
4534 <p>In particolare l'ultima voce relativa alla home
4535 directory dell'utente dovrebbe essere visibile solo agli
4536 utenti autenticati.</p>
4538 <p>In alternativa e' possibile montare realmente la
4539 condivisone anche su GNU/Linux tramite un client per samba
4540 e testarne il corretto funzionamento:</p>
4541 <pre class="literal-block">
4542 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4547 <div class="section" id="server-di-posta-postfix">
4548 <h1><a class="toc-backref" href=
4549 "#id91">9 Server di posta: Postfix</a></h1>
4551 <p>Il server di posta che prenderemo in considerazione e'
4552 Postfix, a seguire un estratto di un file di configurazione
4553 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4554 nelle <tt class="docutils literal">/home</tt> degli utenti
4555 per la consegna della posta:</p>
4558 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4559 <pre class="literal-block">
4560 # ...segue dalla riga ~30
4561 myhostname = 162.piffa.net
4562 alias_maps = hash:/etc/aliases
4563 alias_database = hash:/etc/aliases
4564 myorigin = 162.piffa.net
4565 mydestination = 162.piffa.net, localhost
4566 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4567 # dovrete usare un realy host per l'invio della posta
4568 relayhost = smtp.piffa.net
4570 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4571 # Se dovete inviare la posta per i client della vostra LAN privata:
4572 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4573 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4576 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4577 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4578 # si disabiliti procmail
4579 #mailbox_command = procmail -a "$EXTENSION"
4581 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4582 # all'interno della home dell'utente:
4583 home_mailbox = Maildir/
4584 mailbox_size_limit = 0
4585 recipient_delimiter = +
4586 inet_interfaces = all
4589 <dl class="docutils">
4590 <dt>E' disponibile un file di configurazione di esempio ben
4591 piu' articolato e commentato::</dt>
4593 <dd>/usr/share/postfix/main.cf.dist .</dd>
4596 <div class="section" id="test-del-server-smtp">
4597 <h2><a class="toc-backref" href=
4598 "#id92">9.1 Test del server smtp</a></h2>
4600 <p>Per testare il corretto funzionamento del server di
4601 posta si puo' procedere in vari modi.</p>
4604 <li>Spedire una mail a una casella locale / remota e
4605 controllare i log (syslog)</li>
4607 <li>Collegarsi via <em>telnet</em> al server di posta:
4608 <a class="reference external" href=
4609 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4611 <li>usare una utility come SWAKS</li>
4614 <div class="section" id="swaks">
4615 <h3><a class="toc-backref" href=
4616 "#id93">9.1.1 Swaks</a></h3>
4618 <dl class="docutils">
4619 <dt>Per gli utenti meno esperti e' consigliabile
4620 utilizzare <em>SWAKS</em>: si installi l'omonimo
4621 pacchetto e si esegua un test con::</dt>
4623 <dd>swaks --to <a class="reference external" href=
4624 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4625 --from <a class="reference external" href=
4626 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4629 <p>Ecco un esempio di una sessione corretta:</p>
4630 <pre class="literal-block">
4631 swaks --to andrea@piffa.net from andrea@mydomain.com
4632 === Trying smtp.piffa.net:25...
4633 === Connected to smtp.piffa.net.
4634 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4635 -> EHLO alice.mydomain.com
4636 <- 250-zoo.piffa.net
4637 <- 250-PIPELINING
4638 <- 250-SIZE 10240000
4642 <- 250-ENHANCEDSTATUSCODES
4645 -> MAIL FROM:<root@alice.mydomain.com>
4647 -> RCPT TO:<andrea@piffa.net>
4650 <- 354 End data with <CR><LF>.<CR><LF>
4651 -> Date: Thu, 28 May 2009 13:11:19 +0200
4652 -> To: andrea@piffa.net
4653 -> From: root@alice.mydomain.com
4654 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
4655 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4657 -> This is a test mailing
4660 <- 250 2.0.0 Ok: queued as 41FB261AFC
4663 === Connection closed with remote host.
4668 <div class="section" id="imap-e-pop">
4669 <h2><a class="toc-backref" href=
4670 "#id94">9.2 Imap e pop</a></h2>
4672 <p>Postfix e' un server SMTP, di conseguenza se volete che
4673 i vostri utenti possano <em>scaricare</em> in locale la
4674 posta generalmente volete mettere a loro disposizione un
4675 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4677 <dl class="docutils">
4678 <dt>Pacchetti da installare</dt>
4680 <dd>courier-imap courier-pop</dd>
4683 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4684 funziona con le Mailbox in <tt class=
4685 "docutils literal">/var/mail/</tt> .</p>
4688 <div class="section" id="client-a-riga-di-comando">
4689 <h2><a class="toc-backref" href=
4690 "#id95">9.3 Client a riga di
4693 <p>Per testare il corretto funzionamento del server di
4694 posta e' utile avere a disposizione delle utility per
4695 inviare e leggere la posta: ovviamente da riga di
4698 <div class="section" id="mailx">
4699 <h3><a class="toc-backref" href=
4700 "#id96">9.3.1 mailx</a></h3>
4702 <dl class="docutils">
4703 <dt>Uno dei client piu' semplici, sopratutto per
4704 inviare un messaggioi. e' sufficiente usare una formula
4707 <dd>mail <a class="reference external" href=
4708 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4711 <p>Se il comando <tt class="docutils literal">mail</tt>
4712 non fosse disponibile si installi il pacchetto <tt class=
4713 "docutils literal">mailx</tt>.</p>
4715 <p>Al primo prompt si digitera' l'oggetto, il testo del
4716 messaggio (per terminare l'inserimento lasciare una riga
4717 vuota, digitare un <tt class="docutils literal">punto +
4718 Invio</tt> su una riga vuota), la Carbon Copy (se
4722 <pre class="literal-block">
4723 mail andrea@localhost
4724 Subject: Oggetto della mail
4726 per terminare il messaggio
4727 lasciare una riga vuota
4728 e un punto (poi Invio).
4734 <p>Per altrre opzioni si veda la pagina man.</p>
4737 <div class="section" id="mutt">
4738 <h3><a class="toc-backref" href=
4739 "#id97">9.3.2 Mutt</a></h3>
4741 <p>Mutt e' uno dei gestori di posta preferiti da chi
4742 preferisce utilizzare l'interfaccia testuale per la
4743 gestione della posta.</p>
4745 <p>Mutt ha un file di configurazione <tt class=
4746 "docutils literal">.muttrc</tt> nella <em>home</em>
4747 dell'utente, alcuni settaggi possono essere utili:</p>
4749 <dl class="docutils">
4750 <dt>set folder="~/Maildir"</dt>
4752 <dd>Per utilizzare <tt class=
4753 "docutils literal">/home/nome_utente/Maildir come
4754 mailbox</tt>, invece del default <tt class=
4755 "docutils literal">/var/mail/nome_utente</tt>.</dd>
4757 <dt>set editor="vim"</dt>
4759 <dd>Utilizzare <tt class="docutils literal">vim</tt>
4760 come editor per comporre i messaggi.</dd>
4763 <p>Spesso e' utile poter <em>levvere al volo</em> la
4764 Mailbox / Maildir di un utente sul server di posta, per
4765 controllare se i messaggi vengono recapitati
4767 <pre class="literal-block">
4768 mutt -f /var/mail/utente
4769 mutt -f /home/utente/Maildir
4772 <p>In modo analogo si puo' consultare al volo la propia
4773 mailbox su un server remoto tramite IMAP/POP:</p>
4774 <pre class="literal-block">
4775 mutt -f imap://nome_utente@piffa.net
4779 <div class="section" id="web-client">
4780 <h3><a class="toc-backref" href=
4781 "#id98">9.3.3 Web client</a></h3>
4783 <p>Per mettere a disposizione degli utenti un client web
4784 per gestire la propria posta si installi il pacchetto:
4785 <tt class="docutils literal">squirrelmail</tt> . Ci sono
4786 tanti altri client web disponibili: questo e'
4787 particolarmente semplice. Naturalmente dovrete aver
4788 installato: <tt class="docutils literal">php5
4791 <p>L'interfaccia dovrebbe essere disponibile all'url:
4792 <tt class="docutils literal"><span class=
4793 "pre">http://localhost/squirrelmail</span></tt> . Se
4794 cosi' non fosse assicuratevi che Apache abbia incluso il
4795 file di configurazione di squirrelmail:</p>
4796 <pre class="literal-block">
4797 cd /etc/apache2/conf.d/
4798 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
4803 <div class="section" id="graylisting">
4804 <h2><a class="toc-backref" href=
4805 "#id99">9.4 Graylisting</a></h2>
4807 <p>Il <em>graylisting</em> e' un sistema relativamente poco
4808 invasivo, con un limitato consumo di risorse per limitare
4809 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
4810 suggerisce il nome e' una via di mezzo tra una <em>white
4811 list</em> (una lista di mittenti privilegiata, sempre
4812 benvenuti) e una <em>black list</em> (mittenti
4813 <em>bannati</em>, banditi dal poter inviare nuovi
4816 <p>Il funzionamento e' relativamente semplice: ogni
4817 mittente sconosciuto viene immediatamente rifiutato con un
4818 errore <em>non grave</em> come un <em>server non
4819 disponibile, provare piu' tardi</em>. Questo inconveniente
4820 non dovrebbe mettere in difficolta' un server di posta /
4821 mittente legittimo, che dopo un periodo di attesa tentera'
4822 nuovamente di inviare il messaggio ottenendo finalmente il
4823 risultato atteso. Diversamente un <em>bot</em> per l'invio
4824 di SPAM o un applicazione improvvisata (tipicamente di
4825 derivazione virale) che stesse inviando il messaggio
4826 <em>probabilmente</em> non insisterebbe, rinunciano ad
4827 inviare il messaggio preferendo destinazioni meno
4830 <div class="section" id="abilitazione-in-postfix">
4831 <h3><a class="toc-backref" href=
4832 "#id100">9.4.1 Abilitazione in
4835 <p>Installare il pacchetto: <tt class=
4836 "docutils literal">postgrey</tt> e aggiungere il file di
4837 configurazione di Postfix <tt class=
4838 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4839 <pre class="literal-block">
4840 smtpd_recipient_restrictions =
4842 reject_unauth_destination,
4843 check_policy_service inet:127.0.0.1:60000
4847 <div class="section" id="test">
4848 <h3><a class="toc-backref" href=
4849 "#id101">9.4.2 Test</a></h3>
4851 <p>Inviando un messaggio il client dovrebbe ricevere un
4852 iniziale messaggio di rifiuto del messaggio:</p>
4853 <pre class="literal-block">
4854 swaks --to andrea@piffa.net from andrea@mydonain.com
4855 === Trying smtp.piffa.net:25...
4856 === Connected to smtp.piffa.net
4859 -> RCPT TO:<andrea@piffa.net>
4860 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
4861 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
4864 === Connection closed with remote host.
4867 <p>A lato server si dovrebbe rilevare su <tt class=
4868 "docutils literal">/var/log/syslog</tt> qualcosa di
4870 <pre class="literal-block">
4871 connect from alice.mydomain.com[65.98.21.97]
4872 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
4873 client_name=alice.mydomain.com,
4874 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
4875 May 28 14:53:34 r24266 postfix/smtpd[22538]:
4876 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
4877 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
4878 see http://postgrey.schweikert.ch/help/piffa.net.html;
4879 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
4880 proto=ESMTP helo=<alice.mydomain.com>
4881 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
4885 <div class="section" id="statistiche">
4886 <h3><a class="toc-backref" href=
4887 "#id102">9.4.3 Statistiche</a></h3>
4889 <p>E' sempre utile poter tracciare qualche statistica
4890 sulle percentuali di messaggi ricevuti, da chi, messaggi
4891 rifiutati (e per quale motivo). Statistiche che attingono
4892 dai soliti log del server di posta <tt class=
4893 "docutils literal">/var/log/syslog</tt> di default oltre
4894 che i dedicati <tt class=
4895 "docutils literal">/var/log/mail</tt> .</p>
4897 <p>Una utility semplice per analizzare l'attivita' del
4898 propio server smtp potrebbe essere <tt class=
4899 "docutils literal">pflogsumm</tt> , installato il
4900 pacchetto la si puo' invocare con:</p>
4901 <pre class="literal-block">
4902 pflogsumm.pl /var/log/mail.log
4905 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
4906 "docutils literal">/var/log/mail.log.0</tt></p>
4911 <div class="section" id="firewall">
4912 <h1><a class="toc-backref" href=
4913 "#id103">10 Firewall</a></h1>
4915 <p>In Informatica, nell'ambito delle reti di computer, un
4916 firewall (termine inglese dal significato originario di
4917 parete refrattaria, muro tagliafuoco, muro ignifugo; in
4918 italiano anche parafuoco o parafiamma) e' un componente
4919 passivo di difesa perimetrale che puo anche svolgere funzioni
4920 di collegamento tra due o piu' tronconi di rete. Usualmente
4921 la rete viene divisa in due sotto reti: una, detta esterna,
4922 comprende l'intera Internet mentre l'altra interna, detta LAN
4923 (Local Area Network), comprende una sezione piu' o meno
4924 grande di un insieme di computer locali. In alcuni casi e'
4925 possibile che si crei l'esigenza di creare una terza sotto
4926 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
4927 sistemi che devono essere isolati dalla rete interna ma
4928 devono comunque essere protetti dal firewall.</p>
4930 <p>Una prima definizione chiusa di firewall e' la
4933 <p>Apparato di rete hardware o software che filtra tutti i
4934 pacchetti entranti ed uscenti, da e verso una rete o un
4935 computer, applicando regole che contribuiscono alla sicurezza
4938 <p>In realta' un firewall puo' essere realizzato con un
4939 normale computer (con almeno due schede di rete e software
4940 apposito), puo' essere una funzione inclusa in un router o
4941 puo' essere un apparato specializzato. Esistono inoltre i
4942 cosiddetti "firewall personali", che sono programmi
4943 installati sui normali calcolatori, che filtrano solamente i
4944 pacchetti che entrano ed escono da quel calcolatore; in tal
4945 caso viene utilizzata una sola scheda di rete.</p>
4947 <p>La funzionalita' principale in sostanza e' quella di
4948 creare un filtro sulle connessioni entranti ed uscenti, in
4949 questo modo il dispositivo innalza il livello di sicurezza
4950 della rete e permette sia agli utenti interni che a quelli
4951 esterni di operare nel massimo della sicurezza. Il firewall
4952 agisce sui pacchetti in transito da e per la zona interna
4953 potendo eseguire su di essi operazioni di: controllo modifica
4956 <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
4957 IP per leggere le informazioni presenti sul suo header, e in
4958 alcuni casi anche di effettuare verifiche sul contenuto del
4961 <div class="section" id="links">
4962 <h2><a class="toc-backref" href=
4963 "#id104">10.1 Links</a></h2>
4966 <li><a class="reference external" href=
4967 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
4969 <li><a class="reference external" href=
4970 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
4971 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
4975 <div class="section" id="ipfilter">
4976 <h2><a class="toc-backref" href=
4977 "#id105">10.2 Ipfilter</a></h2>
4979 <p>Link: <a class="reference external" href=
4980 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
4981 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
4983 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
4984 po' del 3) e su cosa <em>non</em> lavora (livello 4).
4985 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
4986 etc) e del livello 1 (MAC source address). Iptables
4987 comunque permette di fare il <em>connection-tracking</em>,
4988 mediante il quale possiamo implementare il Network Address
4991 <p>Netfilter non ricostruisce il flusso di dati tra
4992 pacchetti, non puo' quindi rilevare la presenza di virus o
4993 simili che si trasmettono su pacchetti separati:
4994 ricomporre, analizzare e tornare a scomporre i frammenti
4995 richiederebbe troppa RAM e risorse di sistema, con il
4996 conseguente rischio di saturare il firewall fino
4997 all'abbandono dei nuovi pacchetti in transito. Ci sono
4998 altri software piu' adatti a questi compiti, ad esempio un
4999 proxy HTTP come Squid che e' appunto una applicazione di
5000 quarto livello, progettata e strutturata per analizzare e
5001 modificare i flussi di dati (il <em>contenuto</em> dei
5002 pacchetti, non le sole <em>intestazioni</em>) facendo
5003 abbondate uso delle risorse RAM e di calcolo del sistema.
5004 Non a caso su macchine embedded dalle prestazioni molto
5005 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5006 massimo le risorse di sistema per gestire il traffico di
5007 una rete 10/100, mentre il lavoro tipico svolto da
5008 netfilter e' quasi irrilevante.</p>
5011 <div class="section" id="progettazione-di-un-firewall">
5012 <h2><a class="toc-backref" href=
5013 "#id106">10.3 Progettazione di un
5016 <p>Per implementare un firewall bisogna decidere un aio di
5017 cose: la collocazione e l'approccio (inclusivo o esclusivo)
5018 al filtraggio, il tipo di hardware.</p>
5020 <div class="section" id="collocazione">
5021 <h3><a class="toc-backref" href=
5022 "#id107">10.3.1 Collocazione</a></h3>
5024 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5025 della rete, decidere se diversi reparti di una azienda si
5026 possano vedere tra loro e in che misura.</p>
5028 <p>Collocazione:</p>
5031 <ol class="arabic simple">
5034 <li>tra router e servers / LAN</li>
5036 <li>Unico server / router / firewall e connessi
5037 rischi. considerare l'acquisto di un router hardware
5042 <dl class="docutils">
5043 <dt>Layeed security:</dt>
5045 <dd>Implementare piu' device / software sui diversi
5046 livelli: <a class="reference external" href=
5047 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5048 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5052 <div class="section" id="policy-di-default">
5053 <h3><a class="toc-backref" href=
5054 "#id108">10.3.2 Policy di
5057 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5061 <div class="section" id="hardware">
5062 <h3><a class="toc-backref" href=
5063 "#id109">10.3.3 Hardware</a></h3>
5065 <p>Sostanzialmente potremmo distinguere due tipologie di
5068 <dl class="docutils">
5069 <dt>Network appliance dedicata::</dt>
5071 <dd>Un dispositivo hardware dedicato alla funzione di
5072 Firewall, ad es un Cisco / Fortigate. Si noti che molti
5073 firewall economici altro non sono che Linux box molto
5076 <dt>Server / Personal computer:</dt>
5078 <dd>Un server sul quale viene fatto girare Netfilter ad
5079 uso del server stesso e della rete connessa.</dd>
5082 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5083 flessibilita', strumenti di gestione, sicurezza,
5088 <div class="section" id=
5089 "percorso-dei-pacchetti-tra-tabelle-e-catene">
5090 <h2><a class="toc-backref" href=
5091 "#id110">10.4 Percorso dei pacchetti tra
5092 tabelle e catene</a></h2>
5094 <p>link: <a class="reference external" href=
5095 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
5096 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
5099 <div class="section" id="concetti-di-base">
5100 <h2><a class="toc-backref" href=
5101 "#id111">10.5 Concetti di base</a></h2>
5103 <div class="section" id="tabelle-catene-regole">
5104 <h3><a class="toc-backref" href=
5105 "#id112">10.5.1 Tabelle, catene,
5108 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5111 <li>filter - Regola il firewalling: quali pacchetti
5112 accettare, quali bloccare</li>
5114 <li>nat - Regola le attivita' di natting</li>
5116 <li>mangle - Interviene sulla alterazione dei
5120 <p>Ogni tabella ha delle catene (chains) predefinite
5121 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5122 aggiunte catene custom. Ogni catena e' composta da un
5123 elenco di regole (rules) che identificano pacchetti di
5124 rete secondo criteri diversi (es: -p tcp --dport 80 -d
5125 10.0.0.45) Ogni regola termina con una indicazione
5126 (target) su cosa fare dei pacchetti identificati dalla
5127 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5130 <div class="section" id="match">
5131 <h3><a class="toc-backref" href=
5132 "#id113">10.5.2 Match</a></h3>
5134 <p>I Match di una regola (rule) servono a testare un
5135 pacchetto per valutare se corrisponda a certe
5136 caratteristiche. I match di possono servire a controllare
5137 se un pacchetto e' destinato a una porta particolare o
5138 utilizza un protocollo particolare.</p>
5140 <p>Alcuni esempi:</p>
5142 <dl class="docutils">
5143 <dt>-p [!] proto</dt>
5145 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5146 udp, gre, ah...)</dd>
5148 <dt>-s [!] address[/mask]</dt>
5150 <dd>Indirizzo IP sorgente (o network con maschera di
5153 <dt>-d [!] address[/mask]</dt>
5155 <dd>Indirizzo IP destinazione (o network)</dd>
5157 <dt>-i [!] interface[+]</dt>
5159 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5161 <dt>-o [!] interface[+]</dt>
5163 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5166 <table class="docutils option-list" frame="void" rules=
5168 <col class="option">
5169 <col class="description">
5171 <tbody valign="top">
5173 <td class="option-group"><kbd><span class=
5174 "option">-f</span></kbd></td>
5176 <td>Frammento di pacchetto</td>
5182 <div class="section" id="targets">
5183 <h3><a class="toc-backref" href=
5184 "#id114">10.5.3 Targets</a></h3>
5186 <p>Se un pacchetto soddisfa le condizioni del Match
5187 <em>salta</em> (jump) su uno dei target possibili, in
5188 caso contrario continua il suo percorso tra regole catene
5191 <p>Target principali:</p>
5193 <dl class="docutils">
5194 <dt><em>-j ACCEPT</em></dt>
5196 <dd>Il pacchetto matchato viene accettato e procede
5197 verso la sua destinazione. Si usa per definire il
5198 traffico permesso.</dd>
5200 <dt><em>-j DROP</em></dt>
5202 <dd>Il pacchetto viene rifiutato e scartato, senza
5203 alcuna notifica al mittente. Si usa, in alternativa a
5204 REJECT, per bloccare traffico.</dd>
5206 <dt><em>-j REJECT</em></dt>
5208 <dd>Il pacchetto viene rifiutato. Al mittente viene
5209 mandato un pacchetto (configurabile) di notifica tipo
5210 ICMP port-unreachable (--reject-with
5211 icmp-port-unreachable)</dd>
5214 <table class="docutils option-list" frame="void" rules=
5216 <col class="option">
5217 <col class="description">
5219 <tbody valign="top">
5221 <td class="option-group"><kbd><span class=
5222 "option">-t <var>LOG</var></span></kbd></td>
5224 <td>Il pacchetto viene loggato via syslog e procede
5225 l'attraversamento della catena. Opzioni:
5226 (--log-level, --log-prefix, --log-tcp-sequence,
5227 --log-tcp-options, --log-ip-options)</td>
5231 <td class="option-group"><kbd><span class=
5232 "option">-j <var>DNAT</var></span></kbd></td>
5234 <td>Viene modificato l'IP di destinazione del
5235 pacchetto. Target disponibile solo in nat /
5236 PREROUTING e nat / OUTPUT. L'opzione
5237 --to-destination IP:porta definisce il nuovo IP di
5238 destinazione. Si usa tipicamente su network
5239 firewall che nattano server di una DMZ</td>
5243 <td class="option-group"><kbd><span class=
5244 "option">-j <var>SNAT</var></span></kbd></td>
5246 <td>Viene modificato l'IP sorgente. Solo in nat /
5247 POSTROUTING. Prevede l'opzione --to-source
5248 IP:porta. Si usa per permettere l'accesso a
5249 Internet da una rete locale con IP privati.</td>
5253 <td class="option-group"><kbd><span class=
5254 "option">-j <var>MASQUERADE</var></span></kbd></td>
5256 <td>Simile a SNAT, si applica quando i pacchetti
5257 escono da interfacce con IP dinamico (dialup, adsl,
5258 dhcp...). Si usa solo in nat / POSTROUTING e
5259 prevede l'opzione --to-ports porte.</td>
5263 <td class="option-group"><kbd><span class=
5264 "option">-j <var>REDIRECT</var></span></kbd></td>
5266 <td>Redirige il pacchetto ad una porta locale.
5267 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5268 previsto per fare un transparent proxy (con proxy
5269 server in esecuzione sulla macchina con
5274 <td class="option-group"><kbd><span class=
5275 "option">-j <var>RETURN</var></span></kbd></td>
5277 <td>Interrompe l'attraversamento della catena. Se
5278 questa e' una secondaria, il pacchetto torna ad
5279 attraversare la catena madre da punto in cui aveva
5280 fatto il salto nella secondaria. Se il RETURN e' in
5281 una delle catene di default, il pacchetto
5282 interrompe l'attraversamento e segue la policy di
5287 <td class="option-group"><kbd><span class=
5288 "option">-j <var>TOS</var></span></kbd></td>
5290 <td>Usabile solo nella tabella mangle, permette di
5291 cambiare il TOS (Type Of Service) di un pacchetto
5292 con l'opzione --set-tos. Per un elenco dei
5293 parametri disponibili: iptables -j TOS -h</td>
5297 <td class="option-group"><kbd><span class=
5298 "option">-j <var>MIRROR</var></span></kbd></td>
5300 <td>Curioso e sperimentale, questo target invia un
5301 pacchetto speculare al mittente. In pratica e' come
5302 se facesse da specchio per tutti i pacchetti
5303 ricevuti. Da usare con cautela, per evitare
5304 attacchi DOS indiretti.</td>
5311 <div class="section" id="tabella-filter">
5312 <h2><a class="toc-backref" href=
5313 "#id115">10.6 Tabella Filter</a></h2>
5315 <p>E' quella implicita e predefinita (-t filter) Riguarda
5316 le attivita' di filtraggio del traffico. Ha 3 catene di
5317 default: INPUT - Riguarda tutti i pacchetti destinati al
5318 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5319 i pacchetti che sono originati dal sistema e destinati ad
5320 uscire. FORWARD - Riguarda i pacchetti che attraversano il
5321 sistema, con IP sorgente e destinazione esterni.</p>
5323 <p>Esempio per permettere accesso alla porta 80 locale:
5324 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5325 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5328 <p>Esempio per permettere ad un pacchetto con IP sorgente
5329 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5330 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5334 <div class="section" id=
5335 "flush-automatico-per-macchine-remote">
5336 <h2><a class="toc-backref" href=
5337 "#id116">10.7 Flush automatico per
5338 macchine remote</a></h2>
5340 <p>Se state provando una configurazione del firewall per
5341 una macchina remota e' buona norma per evitare brutte
5342 figure attivare uno script che faccia il <em>flush</em>
5343 delle regole dopo qualche minuto. Potreste infatti
5344 inavvertitamente impostare una regola che vi impedisca di
5345 raggiungere la macchina remota, cosi' da non poter neanche
5346 eliminare quella regola e ripristinare la situazione
5349 <p><em>Veramente</em>, prima di lavorare sul firewall di
5350 una macchina remota impostate almeno un <tt class=
5351 "docutils literal">at now +5 min</tt> o con un'oretta di
5352 margine per fare il <em>flush</em> delle regole (su tutte
5354 <pre class="literal-block">
5356 at> /sbin/iptables -F
5361 <div class="section" id="gestione-regole-rules">
5362 <h2><a class="toc-backref" href=
5363 "#id117">10.8 Gestione regole
5366 <p>Il comando iptables viene usato per ogni attivita' di
5367 gestione e configurazione.</p>
5369 <p>Inserimento regole:</p>
5371 <dl class="docutils">
5372 <dt>iptables -A CATENA ...</dt>
5374 <dd>Aggiunge una regola alla fine della catena
5377 <dt>iptables -I CATENA [#] ...</dt>
5379 <dd>Inserisce alla riga # (default 1) una regola nella
5380 catena indicata</dd>
5382 <dt>iptables -N CATENA</dt>
5384 <dd>Crea una nuova catena custom</dd>
5386 <dt>iptables -P CATENA TARGET</dt>
5388 <dd>Imposta il target di default per la catena
5392 <p>Rimozione regole e azzeramenti:</p>
5394 <dl class="docutils">
5395 <dt>iptables -F [catena]</dt>
5397 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5399 <dt>iptables -X [catena]</dt>
5401 <dd>Ripulisce tutte le catene custom (o quella
5404 <dt>iptables -Z [catena]</dt>
5406 <dd>Azzera i contatori sulle catene</dd>
5408 <dt>iptables -D catena #</dt>
5410 <dd>Cancella la regola numero # dalla catena
5414 <p>Interrogazione:</p>
5416 <dl class="docutils">
5417 <dt>iptables -L</dt>
5419 <dd>Elenca le regole esistenti</dd>
5421 <dt>iptables -L -n -v</dt>
5423 <dd>Elenca, senza risolvere gli host, in modo verboso le
5424 regole esistenti</dd>
5428 <div class="section" id="salvataggio-regole">
5429 <h2><a class="toc-backref" href=
5430 "#id118">10.9 Salvataggio regole</a></h2>
5432 <p>Il comando <tt class="docutils literal">iptables</tt>
5433 serve per interagire con il framework <tt class=
5434 "docutils literal">Netfilter</tt> che gestisce il firewall
5435 di Linux al livello del kernel. Questo comporta, in modo
5436 analogo a quando avviene col comando <tt class=
5437 "docutils literal">ifconfig</tt>, che i cambiamenti
5438 impostati siano in <em>tempo reale, RAM</em>, non
5439 persistenti nel sistema: al boot successivo del sistema
5440 tutto tornera' alle impostazioni di base (in questo caso
5441 <em>nulle</em>, con policy di default settate su <tt class=
5442 "docutils literal">ACCEPT</tt> per tutto).</p>
5444 <p>Le varie invocazioni di iptables potrebbero essere
5445 richiamate da degli scripts dedicati, ma fortunatamente e'
5446 stata predisposta una apposita utility per gestire questi
5447 scripts in modo da avere a disposizione un <em>formato
5448 standard</em> per il salvataggio e il ripristino delle
5449 regole del firewall.</p>
5451 <p>Altro problema: decidere quando attivare / disattivare
5452 queste regole. Utilizzare i <em>runlevels</em> non e' una
5453 soluzione adeguata: le regole del firewall sono legate
5454 all'attivita' delle schede di rete (e un host con diverse
5455 schede di rete puo' attivarle a secondo delle esigenze di
5456 routing, partenza di servizi es file_sharing per un
5457 back-up...): il sistema operativo Debian permette di legare
5458 l'esecuzione di comandi alla attivazione di una device di
5459 rete (<tt class="docutils literal">up</tt>), dopo la sua
5460 attivazione (<tt class="docutils literal"><span class=
5461 "pre">post-up</span></tt>, utile per devices che richiedono
5462 un certo tempo per inizializzarsi: come un tunnel o una
5463 connessione punto a punto), prima della sua attivazione
5464 (<tt class="docutils literal"><span class=
5465 "pre">pre-up</span></tt>). Allo stesso modo sono
5466 disponibili eventi analoghi per accompagnare la
5467 disattivazione dei device di rete: si veda la pagina man di
5468 <tt class="docutils literal">interfaces</tt>.</p>
5470 <p>Nel nostro caso avremo per una possibile scheda
5471 <tt class="docutils literal">eth0</tt>:</p>
5474 "docutils literal">/etc/network/interfaces</tt></p>
5475 <pre class="literal-block">
5476 iface eth1 inet static
5477 up /sbin/iptables-restore /root/firewall/basic_fw
5478 # Seguono i soliti parametri della scheda di rete
5479 address 10.10.208.21
5482 <div class="section" id="iptables-save">
5483 <h3><a class="toc-backref" href=
5484 "#id119">10.9.1 Iptables-save</a></h3>
5486 <p>Per salvare le regole di iptables attualmente presenti
5487 nel kernel si usi il comando:</p>
5488 <pre class="literal-block">
5489 # iptables-save >> /root/firewall/basic_fw
5492 <p>Il contenuto del file dovrebbe essere
5493 <em>comprensibile</em>: sostanzialmente sono regole di
5494 iptables, senza il comando iptables ripetuto, suddivisi
5495 per le varie tabelle. Potete comunque correggere
5496 eventuali parametri con un edito di testo.</p>
5498 <p>Se non avete un'idea migliore potreste voler tenere
5499 gli script dei firewall in una cartella <tt class=
5500 "docutils literal">~/firewall</tt> nella home directory
5501 dell'utente <tt class="docutils literal">root</tt>.</p>
5504 <div class="section" id="iptables-restore">
5505 <h3><a class="toc-backref" href=
5506 "#id120">10.9.2 Iptables-restore</a></h3>
5508 <p>Per ripristinare un set di regole precedentemente
5509 salvate con <tt class="docutils literal"><span class=
5510 "pre">iptables-save</span></tt> si utilizzi <tt class=
5511 "docutils literal"><span class=
5512 "pre">iptables-restore</span></tt>. Se questo deve essere
5513 fatto in modalita' <em>non interattiva</em>, ad esempio
5514 deve essere eseguito dal demone che si occupa di
5515 inizializzare le schede di rete, oppure un <em>cron</em>
5516 o altro, e' buona norma richiamare i percorsi completi
5517 sia dei comandi che dei file:</p>
5518 <pre class="literal-block">
5519 /sbin/iptables-restore /root/firewall/basic_fw
5524 <div class="section" id="esempi">
5525 <h2><a class="toc-backref" href=
5526 "#id121">10.10 Esempi</a></h2>
5528 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5529 e' un computer con un paio di schede di rete fisiche una
5530 delle quali collegata alla rete internet l'altra a una rete
5531 privata per la LAN interna.</p>
5534 <ol class="arabic simple">
5535 <li><tt class="docutils literal">eth0</tt> scheda di
5536 rete principale sulla rete privata interna
5539 <li><tt class="docutils literal">eth1</tt> scheda di
5540 rete secondaria per la connessione ad internet</li>
5542 <li><tt class="docutils literal">ppp0</tt>
5543 punto-a-punto per una connessione ad internet</li>
5547 <div class="section" id="bloccare-i-ping-dall-esterno">
5548 <h3><a class="toc-backref" href=
5549 "#id122">10.10.1 Bloccare i ping
5550 dall'esterno</a></h3>
5552 <p>Spesso gli script che attaccano
5553 <em>automaticamente</em> le varie reti provano a fare un
5554 ping per verificare quali IP sono on-line: bloccare il
5555 traffico <tt class="docutils literal">ICMP</tt> in
5556 ingresso puo' aiutare ad evitare parte di questi
5558 <pre class="literal-block">
5559 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5563 <div class="section" id="masquerading-snat">
5564 <h3><a class="toc-backref" href=
5565 "#id123">10.10.2 Masquerading
5568 <dl class="docutils">
5569 <dt>Per attivare la network address translation (in
5570 questo caso un SNAT) per la rete locale privata
5571 sull'indirizzo ip del <em>modem</em>::</dt>
5573 <dd>iptables -A POSTROUTING -s
5574 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5577 <p>Il <em>Masquerading</em> a differenza dello
5578 <em>SNAT</em> puro (<tt class=
5579 "docutils literal"><span class="pre">-j</span> SNAT
5580 <span class="pre">--to-source</span> proprio_ip_pubblico
5581 ) legge l'indirizzo ip del device ``ppp0</tt>. In questo
5582 modo se l'IP cambia automaticamente si aggiorna anche il
5583 source natting. Se avete un indirizzo IP statico
5584 assegnato al vostro gateway potete invece usare lo SNAT
5587 <dl class="docutils">
5588 <dt>Altri esempi::</dt>
5591 <p class="first">## Change source addresses to
5592 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5593 SNAT --to 1.2.3.4</p>
5595 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5596 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5597 SNAT --to 1.2.3.4-1.2.3.6</p>
5599 <p class="last">## Change source addresses to
5600 1.2.3.4, ports 1-1023 # iptables -t nat -A
5601 POSTROUTING -p tcp -o eth0 -j SNAT --to
5607 <div class="section" id="brute-force">
5608 <h3><a class="toc-backref" href=
5609 "#id124">10.10.3 Brute force</a></h3>
5611 <p>Per limitare attacchi di tipo brute force su SSH:</p>
5612 <pre class="literal-block">
5613 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
5615 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5621 <div class="section" id="ftp-server">
5622 <h1><a class="toc-backref" href=
5623 "#id125">11 FTP Server</a></h1>
5625 <p>Il File Transfer Protocol (FTP) (protocollo di
5626 trasferimento file), è un Protocollo per la trasmissione di
5627 dati tra host basato su TCP, in genere usato dagli autori di
5628 pagine web per <em>pubblicare</em> queste nei propio spazi
5629 web. Storicamente veniva anche usato, mediate l'utilizzo di
5630 utenze anonime, come punto di scambio per materiali di vari
5631 utenti tra loro sconosciuti (una directory dei materiali
5632 scaricabili e una dedicata agli <em>uploads</em> degli
5633 utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
5634 mantiene la cosuetudine di renedere disponibile i materiali
5635 dei <em>mirrors</em> anche tramite FTP, probabilmente per
5636 garantire l'accesso ai client piu' datati che non possono
5637 utilizzare tecnologie piu' recenti.</p>
5639 <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
5640 per quanto riguarda il traffico ad esso associato che per il
5641 passaggio delle passwords degli utenti, facilmente sniffabili
5642 da chiunque abbia accesso alla rete. Naturalmente vsftp per
5643 quanto votato alla sicurezza non modifica queste
5644 caratteristiche del protocollo FTP (ma consente di usare
5645 OpenSSL per la autenticazione degli utenti).</p>
5647 <p>Se propio si deve mettere a disposizione un server FTP ai
5648 propi utenti si considerino le seguenti alternative:</p>
5651 <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
5653 <li>Spingere gli utenti ad usare SSL per autenticarsi al
5656 <li>Nel caso di webdesigners si consideri la possibilita'
5657 di offrire alternative come GIT, Subversion, Rsync o
5661 <p>Nel caso non si possa evitare il server FTP:</p>
5664 <li>Non dare agli utenti FTP una shell di sistema (
5665 Concedere come shell <tt class="docutils literal">ftp</tt>
5666 al posto di <tt class="docutils literal">bash</tt> in
5667 <tt class="docutils literal">/etc/passwd</tt>)</li>
5669 <li>Rendere il filesytem su cui scrive il demone FTP
5670 <tt class="docutils literal">noexec</tt> e <tt class=
5671 "docutils literal">nosuid</tt> (vedi dopo)</li>
5673 <li>Utilizzare un demone FTP come Vsftp: un server FTP con
5674 una forte inclinazione alla sicurezza: <em>Very Secure FTP
5678 <p>Per maggiori informazioni sulle scelte di design legate
5679 alla sicurezza del demone si veda: <a class=
5680 "reference external" href=
5681 "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
5683 <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
5686 <li>Virtual IP configurations</li>
5688 <li>Virtual users</li>
5690 <li>Standalone or inetd operation</li>
5692 <li>Powerful per-user configurability</li>
5694 <li>Bandwidth throttling</li>
5696 <li>Per-source-IP configurability</li>
5698 <li>Per-source-IP limits</li>
5702 <li>Encryption support through SSL integration</li>
5705 <div class="section" id="id8">
5706 <h2><a class="toc-backref" href=
5707 "#id126">11.1 Pacchetti</a></h2>
5709 <p>Per installare il demone vero e propio si usi il
5710 pacchetto <tt class="docutils literal">vsftpd</tt> , mentre
5711 per aver un client da cui fare qualche test sono
5715 <li><tt class="docutils literal">ftp</tt> (pacchetto da
5716 installare) e' il solito client a riga di comando</li>
5718 <li><tt class="docutils literal">gftp</tt> e' un client
5719 grafico simile al classico <em>WSftp</em></li>
5721 <li>Normalmente i file mananager com Konqueror possono
5722 lavarorare come client FTP</li>
5726 <div class="section" id="sessioni-ftp">
5727 <h2><a class="toc-backref" href=
5728 "#id127">11.2 Sessioni ftp</a></h2>
5730 <p>Vediamo alcuni dei comandi di base per gestire una
5731 sessione ftp a riga di comando:</p>
5733 <dl class="docutils">
5734 <dt>ftp nome_host</dt>
5736 <dd>stabilire la connessione all'host, poi verra' chiesta
5737 la password dell'utente. Se avete sbagliato utente: user
5742 <dd>Lista dei comandi disponibili.</dd>
5744 <dt>help [nome_comando]</dt>
5746 <dd>Cosa fa quel comando.</dd>
5750 <dd>Per caricare un file.</dd>
5754 <dd>Per scaricare un file.</dd>
5758 <dd>Lista dei file disponibili.</dd>
5762 <dd>Spostarsi in un altra directory.</dd>
5766 <dd>Cambio directory in LOCALE.</dd>
5770 <dd>Per lavorare su file multipli.</dd>
5775 <dl class="first last docutils">
5776 <dt>Per uscire dalla modalita' interattiva</dt>
5779 <dl class="first last docutils">
5780 <dt>(non vi chiede conferma di ogni singola
5783 <dd>su ogni singolo file...).</dd>
5791 <dd>Entra in modalita' trasferimento binario.</dd>
5795 <dd>Entra in modalita' trasferimento ascii.</dd>
5799 <dd>Per chiudere la sessione.</dd>
5803 <div class="section" id="configurazione-iniziale">
5804 <h2><a class="toc-backref" href=
5805 "#id128">11.3 Configurazione
5808 <p>Il demone di vsftpd e' immediatamente disponibile ma
5809 solo in modalita' anonima (si pensi a uno scenario in cui
5810 si vuole rendere disponibili dei files tramite FTP) e in
5811 <em>sola lettura</em>. Per accedere al servizio si usi
5812 quini come utente <tt class=
5813 "docutils literal">anonymous</tt> (la passwords in genere
5814 e' come consuetudine il propio indirizzo email), la cui
5815 <em>home</em> directory sara' <tt class=
5816 "docutils literal">/home/ftp/</tt> (<tt class=
5817 "docutils literal">/srv/ftp</tt> in Squeeze):</p>
5818 <pre class="literal-block">
5819 zoo:~# ftp localhost
5820 Connected to localhost.localdomain.
5822 Name (localhost:root): anonymous
5823 331 Please specify the password.
5825 230 Login successful.
5826 Remote system type is UNIX.
5827 Using binary mode to transfer files.
5829 200 PORT command successful. Consider using PASV.
5830 150 Here comes the directory listing.
5831 -rw-r--r-- 1 0 0 0 Feb 03 17:17 anoni
5832 226 Directory send OK.
5836 <div class="section" id="abilitare-gli-utenti-locali">
5837 <h2><a class="toc-backref" href=
5838 "#id129">11.4 Abilitare gli utenti
5841 <p>Per poter modificare le impostazioni iniziali, ad
5842 esempio per permettere l'accesso agli utenti del server, si
5843 modifichera' il file <tt class=
5844 "docutils literal">/etc/vsftpd.conf</tt>, a seguire le
5845 impostazioni fondamentali ed altre interessanti per rendere
5846 il server accessibile da utenti di sistema (autenticati
5847 tramite la loro password, quindi con PAM) per il tipico
5848 utilizzo di web designers che debbano pubblicare le loro
5849 pagine web (e non si siano fatti convincere a usare
5851 <pre class="literal-block">
5852 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
5854 # Disabilitiamo l'utente anonimo
5856 # Uncomment this to allow local users to log in.
5858 # Accesso garantito agli utenti di sistema
5860 # Uncomment this to enable any form of FTP write command.
5862 # Permettiamo agli utenti di caricare documenti nella loro home
5864 # You may fully customise the login banner string:
5865 ftpd_banner=Benvenuti al servizio ftp del sito example.com
5868 <p>Per abilitare i cambiamenti si proceda a riavviare il
5869 server: <tt class="docutils literal">/etc/init.d/vsftpd
5870 restart</tt> e si monitorizzi il file di log <tt class=
5871 "docutils literal">tail <span class="pre">-f</span>
5872 /var/log/vsftpd.log</tt> per controllarne il funzionamento
5873 (e anche <tt class="docutils literal">/var/log/syslog</tt>
5874 nel caso non si riuscisse a far partire correttamente il
5877 <p>NOTE: Se non riuscite ad ottenere un <em>directory
5878 listing</em> (<tt class="docutils literal">ls</tt>)
5879 ottenendo un errore <tt class="docutils literal">500
5880 Illegal PORT command? FTP error</tt> abilitare la modalita'
5881 passiva col comando ftp <tt class=
5882 "docutils literal">passive</tt>.</p>
5885 <div class="section" id="jail-chroot">
5886 <h2><a class="toc-backref" href=
5887 "#id130">11.5 Jail chroot</a></h2>
5889 <p>Si puo' impedire all'utente di spostarsi arbitrariamente
5890 per il file system del servere visualizzare il contenuto
5891 delle directory, ad esempio la cartella <tt class=
5892 "docutils literal">/etc</tt>, confinandolo in una jail
5893 chroot limitata alla sua home directory:</p>
5894 <pre class="literal-block">
5895 # You may restrict local users to their home directories. See the FAQ for
5896 # the possible risks in this before using chroot_local_user or
5897 # chroot_list_enable below.
5898 chroot_local_user=YES
5901 <p>Generalmente un utente di sistema con il solo accesso
5902 FTP non dovrebbe avere la possibilita' di poter navigare
5903 liberamente per il file system del server, esponendo file
5904 di configurazione e quant'altro l'utente potrebbe trarre
5905 utili informazioni sul quali software siano installati e di
5907 <pre class="literal-block">
5908 Remote system type is UNIX.
5909 Using binary mode to transfer files.
5913 550 Failed to change directory.
5917 <div class="section" id="permessi-sul-filesystem">
5918 <h2><a class="toc-backref" href=
5919 "#id131">11.6 Permessi sul
5922 <p>Come accennato precedentemente e' opportuno che i
5923 filesystems sui quali un utente puo' scrivere o modificare
5924 il contenuto non abbiano i privilegi di eseguibilita' e
5925 suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
5926 "docutils literal">/home/</tt> directory quindi avremo in
5927 <tt class="docutils literal">/etc/fstab</tt>:</p>
5928 <pre class="literal-block">
5929 /dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
5933 <div class="section" id="shell-dell-utente">
5934 <h2><a class="toc-backref" href=
5935 "#id132">11.7 Shell dell'utente</a></h2>
5937 <p>Come gia' detto piu' volte le passwords degli utenti
5938 viaaggiano in rete in chiaro, ponendo un grave problema di
5939 sicurezza. Sara' quindi opportuno disbilitare la shell di
5940 questi utenti, tramite il flag <tt class=
5941 "docutils literal"><span class="pre">--shell</span>
5942 /bin/false</tt> in fase di creazione degli utenti:</p>
5943 <pre class="literal-block">
5944 # adduser --shell /bin/false nome_utente
5947 <p>Oppure correggiendo manualmente il file <tt class=
5948 "docutils literal">/etc/passwd</tt> per modificare
5949 l'inpostazione della shell dell'utente:</p>
5950 <pre class="literal-block">
5951 nome_utente:x:1001:1001::/var/spool/postfix:/bin/bash
5952 # la riga sopra deve essere trasformata in
5953 nome_utente:x:1001:1001::/var/spool/postfix:/bin/false
5956 <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
5957 <tt class="docutils literal">/bin/false</tt> all'elenco
5958 delle shell valide.</p>
5960 <p><tt class="docutils literal">/etc/shells</tt></p>
5961 <pre class="literal-block">
5967 <div class="section" id="altre-opzioni">
5968 <h2><a class="toc-backref" href=
5969 "#id133">11.8 Altre opzioni</a></h2>
5971 <dl class="docutils">
5972 <dt>xferlog_enable=YES</dt>
5974 <dd>Verra' tenuto un file di log <tt class=
5975 "docutils literal">/var/log/vsftpd.log</tt> degli upload
5976 e download sul server.</dd>
5978 <dt>hide_ids=YES</dt>
5980 <dd>Nasconde le userid e groupid mascherandole con
5981 <tt class="docutils literal">ftp</tt> .</dd>
5983 <dt>anon_root=/home/ftp</dt>
5985 <dd>Home directory dell'utente anonimo.</dd>
5987 <dt>write_enable=YES</dt>
5989 <dd>Permette agli utenti di eseguire i comandi che
5990 possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
5991 MKD, RMD, APPE e SITE .</dd>
5993 <dt>idle_session_timeout=600</dt>
5995 <dd>Permette agli utenti di restare connessi piu' a
5996 lungo, utile per i webdesigners che passano intere
5997 giornate connessi al server.</dd>