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="#altre-opzioni"
964 id="id132" name="id132">11.7 Altre
971 <p>Generato il 2010-02-03 con: <a class="reference external"
973 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
975 <div class="section" id="configurazione-sistema">
976 <h1><a class="toc-backref" href=
977 "#id9">1 Configurazione sistema</a></h1>
979 <div class="section" id="solo-per-uso-interno">
980 <h2><a class="toc-backref" href=
981 "#id10">1.1 Solo per uso interno</a></h2>
983 <p>Impostazioni di base per la configurazione del sistema
984 operativo e della rete nel laboratorio 208 facente parte
985 della rete piffa.net .</p>
987 <p>Sono qui riportati i parametri della rete locale per
988 comodita' degli studenti, gli altri lettori possono
989 considerarli come riferimento per comprendere i valori
990 espressi nei vari file di configurazione. Ad esempio:
991 quando leggerete <tt class=
992 "docutils literal">10.10.208.248:3128</tt> saprete che si
993 tratta del nostro <em>proxy http</em> in ascolto sulla
994 porta <cite>3128</cite>, stara' quindi a voi sostituire i
995 dati con gli equivalenti <em>IP</em> della vostra rete.</p>
998 <div class="section" id="rete">
999 <h2><a class="toc-backref" href=
1000 "#id11">1.2 Rete</a></h2>
1002 <p>Parametri della rete attualmente in uso:</p>
1004 <table border="1" class="docutils">
1010 <tbody valign="top">
1012 <td colspan="2">Parametri della rete</td>
1018 <td>10.10.208.0/24</td>
1024 <td>255.255.255.0</td>
1030 <td>10.10.208.255</td>
1036 <td>10.10.208.248</td>
1042 <td>10.10.208.248</td>
1047 <p>Dal server locale degli studeti,
1048 <strong>Bender</strong>, corrispondente all'IP <tt class=
1049 "docutils literal">10.10.208.248</tt>, vengono erogati i
1050 servizi DHCP, DNS, gateway (con NAT), proxy http e mirror
1051 della distribuzione Debian ( <a class="reference external"
1053 "http://debian.piffa.net">http://debian.piffa.net</a>).
1054 Altri servizi in esecuzione sul server:</p>
1057 <li>Rsync server e altri software di aggiornamento /
1058 installazione di massa</li>
1060 <li>Server imap / pop3 / webmail / smtp</li>
1062 <li>Server ssh per i test degli studenti</li>
1064 <li>File server Samba, NFS e controller di qualsiasi
1065 altro FS distribuito</li>
1067 <li>Print server per la gestione delle stampanti</li>
1071 <li>Mirror locale delle *.iso dei sistemi operativi e dei
1072 vari software usati durante le lezioni</li>
1074 <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1075 framework vengono attivati a seconda dei corsi
1079 <p>Durante il corso delle lezioni e' opportuno che le
1080 macchine degli studenti si appoggino al server Bender
1081 (ottetto finale <tt class="docutils literal">248</tt>), nel
1082 caso questo non fosse raggiungibile (ad esempio per
1083 permettere impostazioni di DHCP / routing diverse) sara'
1084 comunque disponibile il <tt class=
1085 "docutils literal">10.10.208.254</tt> come gateway | DNS
1086 per la rete <tt class=
1087 "docutils literal">10.10.208.10</tt>.</p>
1089 <p><strong>Non e' piu' possibile</strong> raggiungere
1090 Bender tramite l'IP pubblico <tt class=
1091 "docutils literal">212.22.136.248</tt> o <em>qualsiasi
1092 altro ip</em> della classe <tt class="docutils literal">C
1093 212.22.136.0/24</tt> precedentemente disponibile.</p>
1095 <p>Il computer del docente con il server VNC e' sempre
1096 configurato con l'ottetto finale: <tt class=
1097 "docutils literal">177</tt> della rete utilizzata durante
1098 le lezioni (quindi generalmente la VNC sara' disponibile
1099 sul <tt class="docutils literal">10.10.208.177:1</tt>.</p>
1101 <p>Gli studenti sono pregati di non impedire l'accesso SSH
1102 alla propria macchina dal computer del docente, e non
1103 modificare la password dell'utente <tt class=
1104 "docutils literal">root</tt> del sistema operativo
1105 <em>pre-istallato</em> (ad es: <em>Diurno</em>).</p>
1107 <div class="section" id="interfaces">
1108 <h3><a class="toc-backref" href=
1109 "#id12">1.2.1 interfaces</a></h3>
1111 <p>Segue un esempio del file di configurazione della
1112 scheda di rete con configurazione statica:</p>
1114 <p>/etc/network/interfaces:</p>
1115 <pre class="literal-block">
1116 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1118 # The loopback interface
1119 iface lo inet loopback
1121 # La prima scheda di rete (se si chiama eth0)
1122 iface etho inet static
1124 # iface etho inet dhcp
1125 address 10.10.208.101
1126 netmask 255.255.255.0
1128 broadcast 10.10.208.255
1129 gateway 10.10.208.254
1131 # Quali interfaccie devono partire automaticamente:
1135 <p>Controllare il nome della propria scheda di rete: a
1136 volte <em>udev</em> rinomina la prima scheda a <tt class=
1137 "docutils literal">eth1</tt>, oppure potreste avere piu'
1138 di una scheda di rete (anche un'interfaccia
1139 <em>firewire</em> puo' essere automaticamente abilitata
1140 come scheda di rete).</p>
1142 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1143 , eth0:1 , ...) ricordarsi che queste dipendono dalla
1144 scheda fisica a cui sono associate: abbattere con
1145 <tt class="docutils literal">ifconfig down eth0</tt> la
1146 scheda principale fara' cadere anche queste. Tornando ad
1147 attivare la scada principale con <tt class=
1148 "docutils literal">ifconfig eth0 up</tt> la virtuale
1149 tornera' attiva: nel caso voleste disabilitarla dovrete
1150 quindi sempre abbattere manualmente la scheda virtuale
1151 <em>prima</em> della scheda reale.</p>
1153 <p>I DNS vanno indicati nel file <tt class=
1154 "docutils literal">/etc/resolv.conf</tt> , la cui
1155 sintassi e' spiegata al punto 4.6 . Come DNS si
1156 <em>deve</em> usare il server Bender, alcuni parametri
1157 dei software di installazione, risoluzione dei mirror,
1158 vengono opportunamente modificatia da questo DNS.</p>
1162 <div class="section" id="bash-completion">
1163 <h2><a class="toc-backref" href=
1164 "#id13">1.3 Bash completion</a></h2>
1166 <p>Il completamento automatico della shell (che si attiva
1167 premendo il tasto tab una o due volte mentre si sta
1168 scrivendo un termine) permette di comporre automaticamente
1169 i nomi dei comandi e i percorsi dei file, sopratutto la
1170 composizione automatica dei percorsi dei file e' di grande
1173 <p>Bash_completion permette di integrare il completamento
1174 automatico con i nomi dei pacchetti e oggetti dei comandi:
1175 ad es. volendo digitare <tt class=
1176 "docutils literal"><span class="pre">apt-get</span>
1177 inst[TAB] xtigh[TAB]</tt> ora verra' completato
1178 automaticamente sia la parola <tt class=
1179 "docutils literal">install</tt> che il nome del pacchetto
1180 <tt class="docutils literal">xtightvncviewer</tt>.</p>
1182 <p>Abilitare /etc/bash_completion nel file <tt class=
1183 "docutils literal">/etc/bash.bashrc</tt> oppure includerlo
1184 nel proprio <tt class="docutils literal"><span class=
1185 "pre">~/.bashrc</span></tt> (che sarebbe il file
1186 <em>nascosto</em>, quindi con un punto all'inizio del nome
1187 del file, di configurazione della shell bash per ogni
1188 utente, presente nella propria <em>home
1189 directory</em>):</p>
1190 <pre class="literal-block">
1191 echo ". /etc/bash_completion" >> ~/.bashrc
1194 <p>Esempio di ~/.bahsrc</p>
1195 <pre class="literal-block">
1196 # ~/.bashrc: executed by bash(1) for non-login shells.
1198 export PS1='\h:\w\$ '
1201 # De-commentare le seguenti righe per abilitare la colorazione dei
1203 export LS_OPTIONS='--color=auto'
1205 alias ls='ls $LS_OPTIONS'
1206 alias ll='ls $LS_OPTIONS -l'
1207 alias l='ls $LS_OPTIONS -lA'
1209 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1214 # questo abilita bash completion
1215 . /etc/bash_completion
1218 <p>Il file <tt class=
1219 "docutils literal">/etc/bash_completion</tt> deve essere
1220 presente nel sistema, in caso contrario installare il
1221 pacchetto: <tt class="docutils literal"><span class=
1222 "pre">bash-completion</span></tt>. Generalmente l'utente
1223 <tt class="docutils literal">root</tt> ha un file
1224 <tt class="docutils literal">.bashrc</tt> preimpostato
1225 analogo a quello citato sopra, a differenza dei normali
1226 utenti di sistema.</p>
1231 <li><a class="reference external" href=
1232 "http://www.debian-administration.org/articles/316">An
1233 introduction to bash completion</a></li>
1235 <li><a class="reference external" href=
1236 "http://www.caliban.org/bash/">Working more productively
1237 with bash 2.x/3.x</a></li>
1239 <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1240 "reference external" href=
1241 "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1245 <div class="section" id="vim">
1246 <h2><a class="toc-backref" href=
1247 "#id14">1.4 Vim</a></h2>
1249 <p>Vim e' l'editor di testo preferito dai sistemisti,
1250 quindi sara' conveniente impostare fin da subito alcune
1251 impostazioni per renderlo piu' comodo.</p>
1253 <p>Assicurarsi che sia installata nel sistema la versione
1254 completa dell'editor installando il pacchetto <tt class=
1255 "docutils literal">vim</tt>:</p>
1256 <pre class="literal-block">
1257 # apt-get install vim
1260 <p>Modificare poi il file di configurazione generale
1261 <tt class="docutils literal">/etc/vim/vimrc</tt></p>
1262 <pre class="literal-block">
1263 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1264 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1265 " you can find below. If you wish to change any of those settings, you should
1266 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1267 " everytime an upgrade of the vim packages is performed. It is recommended to
1268 " make changes after sourcing debian.vim since it alters the value of the
1269 " 'compatible' option.
1271 " This line should not be removed as it ensures that various options are
1272 " properly set to work with the Vim-related packages available in Debian.
1275 " Uncomment the next line to make Vim more Vi-compatible
1276 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1277 " options, so any other options should be set AFTER setting 'compatible'.
1280 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1281 " line enables syntax highlighting by default.
1284 " If using a dark background within the editing area and syntax highlighting
1285 " turn on this option as well.
1288 " Uncomment the following to have Vim jump to the last position when
1292 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1293 \| exe "normal! g'\"" | endif
1296 " Uncomment the following to have Vim load indentation rules and plugins
1297 " according to the detected filetype.
1298 " This is not recommanded if you often copy and paste into vim,
1299 " as it messes all the indentation.
1301 filetype plugin indent on
1304 " This goes for comments folding: use co to expnad and zc to compress,
1305 " zi to toggle on/off
1307 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1309 " The following are commented out as they cause vim to behave a lot
1310 " differently from regular Vi. They are highly recommended though.
1311 set showcmd " Show (partial) command in status line.
1312 "set showmatch " Show matching brackets.
1313 # Ignorecase is quite userfull
1314 set ignorecase " Do case insensitive matching
1315 "set smartcase " Do smart case matching
1316 "set incsearch " Incremental search
1317 set autowrite " Automatically save before commands like :next and :make
1318 "set hidden " Hide buffers when they are abandoned
1319 "set mouse=a " Enable mouse usage (all modes) in terminals
1321 " Source a global configuration file if available
1322 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1323 if filereadable("/etc/vim/vimrc.local")
1324 source /etc/vim/vimrc.local
1328 <p>I principianti faranno bene ad esercitarsi con
1329 <tt class="docutils literal">vimtutor it</tt>.</p>
1331 <p>Altri link per VIM:</p>
1334 <li>Vim Introduction and Tutorial: <a class=
1335 "reference external" href=
1336 "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1337 http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1339 <li><a class="reference external" href=
1340 "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1342 <li><a class="reference external" href=
1343 "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1347 <div class="section" id="vnc">
1348 <h2><a class="toc-backref" href=
1349 "#id15">1.5 VNC</a></h2>
1351 <p>I Virtual Network Computing (o VNC) sono software di
1352 controllo remoto e servono per amministrare un computer a
1353 distanzai. Nel nostro caso la VNC sara' utilizzata per
1354 visualizzare la sessione di lavoro di un altro computer sul
1355 proprio a scopo didattico.</p>
1357 <p>Per collegarvi al server del docente usate lo script
1358 <tt class="docutils literal">guarda.sh</tt> che dovrebbe
1359 gia essere disponibili sui sistemi preconfigurati, oppure
1360 potete invocare direttamente il collegamento con:</p>
1361 <pre class="literal-block">
1362 xtightvncviewer -viewonly 10.10.208.177:1
1365 <p>Se il comando non fosse disponibile installate il
1366 pacchetto <tt class=
1367 "docutils literal">xtightvncviewer</tt>. Potete anche
1368 scaricare lo script <tt class=
1369 "docutils literal">guarda.sh</tt> e renderlo eseguibile, ed
1370 eventualmente creare una voce nel menu di KDE per
1374 <pre class="literal-block">
1377 wget http://bender/guarda.sh
1382 <p>Per eseguire lo script digitare semplicemente <tt class=
1383 "docutils literal">guarda.sh</tt>, oppure creare un link /
1384 collegamento sul Desktop allo script <tt class=
1385 "docutils literal">/usr/local/bin/guarda.sh</tt>.</p>
1387 <p>Le impostazioni del server VNC sono:</p>
1389 <table border="1" class="docutils">
1395 <thead valign="bottom">
1397 <th class="head">Parametro</th>
1399 <th class="head">Valore</th>
1403 <tbody valign="top">
1407 <td>10.10.208.177:1</td>
1411 <td>Server grafico</td>
1424 <p>Si noti che non e' possibile lanciare un applicativo sul
1425 server grafico di un utente da una shell in cui si sta
1426 lavorando come altro utente, anche se root. E' quindi
1427 necessario essere l'utente di sistema che si e' loggato
1428 inizialmente nella sessione grafica per poter lanciare lo
1429 script guarda.sh da una shell.</p>
1431 <p>Controllare con <tt class="docutils literal">whoami</tt>
1432 di essere l'utente normale (es <tt class=
1433 "docutils literal">utente | studente | proprio nome</tt> ),
1434 in caso si sia assunta una altra <tt class=
1435 "docutils literal">id</tt> si apra un altra shell o si esca
1436 da quella attuale con <tt class=
1437 "docutils literal">exit</tt> .</p>
1440 <div class="section" id="lista-dei-pacchetti-di-base">
1441 <h2><a class="toc-backref" href=
1442 "#id16">1.6 Lista dei pacchetti di
1445 <p>I pacchetti installati generalmente <a class=
1446 "footnote-reference" href="#id2" id="id1" name=
1447 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1448 <pre class="literal-block">
1449 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1452 <table class="docutils footnote" frame="void" id="id2"
1459 <tbody valign="top">
1461 <td class="label"><a class="fn-backref" href=
1464 <td><tt class="docutils literal"><span class=
1465 "pre">kde-core</span></tt> e' piu' leggero del
1466 pacchetto <tt class="docutils literal">kde</tt>.
1467 Esiste un equivalente <tt class=
1468 "docutils literal"><span class=
1469 "pre">gnome-core</span></tt> per chi preferisce
1470 Gnome, nel caso si potrebbe installare il log-in
1471 manager <cite>gdm</cite> al posto di
1472 <cite>kdm</cite>.</td>
1478 <div class="section" id="apt-configurazione">
1479 <h2><a class="toc-backref" href=
1480 "#id17">1.7 Apt configurazione</a></h2>
1482 <p>Vediamo i due file principali di apt:</p>
1486 "docutils literal">/etc/apt/sources.list</tt></li>
1489 "docutils literal">/etc/apt/apt.conf</tt></li>
1492 <div class="section" id="sources-list">
1493 <h3><a class="toc-backref" href=
1494 "#id18">1.7.1 sources.list</a></h3>
1496 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1497 preleva i pacchetti da installare tramite <em>dpkg</em>,
1498 vengono quindi precisati i metodi (ad es. http / ftp /
1499 cdrom / file), la release che si vuole tracciare (es
1500 <tt class="docutils literal">stable, testing,
1501 unstable</tt> oppure i corrispondenti release name es:
1502 <tt class="docutils literal">Lenny, Squeeze, Sid</tt>), i
1503 rami di interesse (es: <tt class=
1504 "docutils literal">main</tt> che e' l'archivio
1505 principale, <tt class="docutils literal"><span class=
1506 "pre">non-free</span></tt> per il software non libero,
1507 <tt class="docutils literal">contrib</tt> per i pacchetti
1508 non realizzati dai manutentori ufficiali).</p>
1510 <p>Gli archivi sono generalmente:</p>
1513 <li><tt class="docutils literal">deb</tt> per pacchetti
1514 Debian binari, pronti per l'installazione.</li>
1516 <li><tt class="docutils literal"><span class=
1517 "pre">deb-src</span></tt> per i pacchetti sorgenti
1518 (quindi da compilare, come il kernel) degli stessi
1519 pacchetti binari. In genere se non compilate spesso
1520 potete evitare di tracciare i sorgenti per risparmiare
1525 "docutils literal">/etc/apt/sources.list</tt></p>
1526 <pre class="literal-block">
1527 # esempio di accesso a un CDROM:
1528 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1530 # ftp.it.debian.org viene rediretto su un mirror interno
1531 # quando vi trovate nella rete interna piffa.net
1532 deb http://ftp.it.debian.org/debian/ lenny main
1533 # Sono disponibili anche i rami non-free contrib
1534 # deb http://ftp.it.debian.org/debian/ lenny non-free contrib
1535 # Sono disponibili anche le release unstable e testing
1536 # deb http://ftp.it.debian.org/debian/ testing main non-free contrib
1537 # deb http://ftp.it.debian.org/debian/ sid main non-free contrib
1539 # Sorgenti dei pacchetti:
1540 # deb-src http://ftp.bononia.it/debian/ lenny main
1542 # Mirror da kernel.org europa da usare a casa:
1543 deb http://mirrors.eu.kernel.org/debian/ lenny main
1545 # Security dal sito principale
1546 deb http://security.debian.org/ lenny/updates main
1547 # deb-src http://security.debian.org/ lenny/updates main
1549 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1550 # non legati a dinamiche di sicurezza
1551 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1552 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1554 # Esempio di accesso a un file system locale contenente i pacchetti:
1555 # Potete scaricarei in aula con debmirror da debian.piffa.net
1556 # un mirror locale da usare poi a casa anche senza internet
1557 # deb file:/mnt/mirror sid main non-free contrib
1561 <div class="section" id="etc-apt-apt-conf">
1562 <h3><a class="toc-backref" href=
1563 "#id19">1.7.2 /etc/apt/apt.conf</a></h3>
1565 <p>Questo file contiene le opzioni di apt, come ad
1566 esempio il proxy:</p>
1567 <pre class="literal-block">
1568 Acquire::http::Proxy "http://10.10.208.248:3128";
1571 <p>Si tenga conto che se si imposta un proxy per apt sul
1572 proprio portatile e tornati a casa propria si vuole
1573 scaricare nuovi pacchetti si dovra' disabilitare il proxy
1574 commentando la riga con ";" (''punto-e-virgola''). Su un
1575 portatile vi conviene tracciare il mirror <tt class=
1576 "docutils literal">ftp.it.debian.org</tt> senza impostare
1577 il proxy: in aula verra' rediretto al mirror locale e a
1578 casa vi appoggerete al mirror ufficiale.</p>
1580 <p>E' consigliabile impostare il proxy per apt anche in
1581 presenza di un proxy-http <em>trasparente</em>.</p>
1586 <div class="section" id="squid">
1587 <h1><a class="toc-backref" href=
1588 "#id20">2 Squid</a></h1>
1590 <p>Squid e' un proxy cache http (ma anche FTP e https)
1591 robusto e strutturato, puo' essere usato sia in situazioni
1592 relativamente semplici che in scenari piu' complessi grazie
1593 alla possibilita' di gestirne in modo granulare le risorse.
1594 Si partira' dalle configurazioni piu' semplici per la
1595 semplice <em>condivisione della navigazione</em> internet
1596 all'interno di una rete locale, per poi poter negoziare la
1597 gestione degli accessi, il filtraggio dei contenuti (Squid e'
1598 una applicazione che si muove nel 4' livello del modello
1599 TCP/IP a differenza di un <em>ipfilter</em> limitato al 2'),
1600 nel bilanciamento del carico tra piu' server proxy.</p>
1602 <dl class="docutils">
1603 <dt>Inoltre Squid svolge la funzione di
1604 <em>anonymizer</em>:</dt>
1606 <dd>Nasconde i client http alla rete internet: e' solo il
1607 server proxy ad accedere ai server web frequentati dai
1608 client: questi non sono percepiti ed esposti all'esterno
1609 della rete locale ma si relazionano solo con il server
1610 proxy. Dal punto di vista della sicurezza della rete locale
1611 questo e' preferibile ad un approccio alla navigazione
1612 basato su <em>NAT</em>.</dd>
1615 <p>Cosa a volte sottovalutata, Squid permette la navigazione
1616 web a una rete basata su <em>indirizzi IP privati</em> (es
1617 una 192.168.0.0/24). E se la rete privata deve <em>solo
1618 navigare</em> in internet, non serve introdurre nella rete un
1619 <em>NAT</em> (si veda la sezione sui firewall) per
1620 condividere la connessione: basta il solo Squid. Per altro
1621 non servira' neanche un servizio DNS accessibile dai clients
1622 dato che <em>sara' il solo Squid a risolvere i nomi di
1623 dominio</em> per i suoi client http.</p>
1625 <p>Squid ascolta di default sulla porta 3128, per impostare
1626 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1627 "docutils literal">/etc/apt/apt.conf</tt></p>
1628 <pre class="literal-block">
1629 Acquire::http::Proxy "10.10.208.254:3128";
1632 <p>Per installare Squid si usino i pacchetti:</p>
1633 <pre class="literal-block">
1637 <div class="section" id="configurazione-squid-conf">
1638 <h2><a class="toc-backref" href=
1639 "#id21">2.1 Configurazione:
1642 <p>Segue un estratto delle direttive principali viste in
1643 aula presenti nel file di configurazione <tt class=
1644 "docutils literal">/etc/squid3/squid.conf</tt> .</p>
1646 <div class="section" id="cache-dir">
1647 <h3><a class="toc-backref" href=
1648 "#id22">2.1.1 Cache_dir</a></h3>
1650 <p>Cache dir serve per impostare dimensione e percorso
1651 della cache creata sul supporto di storaggio. Essendo la
1652 dimensione di default della cache pari a <tt class=
1653 "docutils literal">~100 MB</tt> e' altamente
1654 consigliabili aumentare questo parametro se si vuole
1655 poter utilizzare la funzione di <em>cache</em> http del
1658 <p>La dimensione ovviamente dipendera' dallo spazio
1659 disponibile, dimensioni tipiche e massime degli oggetti
1660 che si vuole tenere in cache (un solo file <em>.iso e'
1661 circa ``700 MB``, il pacchetto *Openoffice.org</em> circa
1662 <tt class="docutils literal">150 MB</tt>, un pacchetto
1663 debian circa <tt class="docutils literal">20 MB</tt>),
1664 numero dei client.</p>
1666 <p>Si presti poi attenzione alla natura dei dati che
1667 saranno salvati nella cache: sono tutti dati facilmente
1668 sostituibili (gli originali sono <em>on-line</em>) la cui
1669 perdita non arreca danni permanenti. Questo rende la
1670 cache di Squid un possibile candidato ad un <em>RAID
1671 stirpe</em> (livello 0) a ad un file system che prediliga
1672 le performance a scapito della consistenza, con vantaggi
1673 sia per le prestazioni (e la velocita' di navigazione e'
1674 uno dei motivi per cui si installa Squid) che per
1675 l'utilizzo estensivo dello spazio di storaggio.</p>
1677 <p>Questo fino al momento in cui per voi non sia piu'
1678 importante <em>garantire la disponibilita' del
1679 servizio</em>, ad esempio con un RAID <em>mirror</em> o 5
1680 (se il RAID stripe dovesse rompersi gli utenti non
1681 potrebbero piu' navigare, cosa che per natura dello
1682 stripe e' maggiormente probabile rispetto ad un
1683 <em>mirror</em> o a un filesytem <em>normale</em>).</p>
1685 <p>Altra considerazione: i dati del proxy vengono slavati
1686 sul filesytem del server dietro richiesta di utenti
1687 esterni talvolta sconosciuti. Come per i servizi di file
1688 sharing o per la posta elettronica non c'e' motivo che il
1689 filesystem su cui sono ospitati questi dati abbia i
1690 privilegi di eseguibilita' o suid (in genere si puo'
1691 anche usare <em>noatime</em> per renderlo piu' veloce,
1692 che si usi o meno il journal dipende dalle preferenze:
1693 affidabilita' oppure prestazioni):</p>
1696 <pre class="literal-block">
1698 # Filesystem per Squid http cache
1699 /dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
1702 <p>Ora possiamo impostare la cache nel file di
1703 configurazione <tt class=
1704 "docutils literal">/etc/squid3/squid.conf</tt>:</p>
1705 <pre class="literal-block">
1706 #TAG: cache_dir (riga 1628)
1709 # cache_dir Type Directory-Name Fs-specific-data [options]
1711 # You can specify multiple cache_dir lines to spread the
1712 # cache among different disk partitions.
1715 # cache_dir ufs /var/spool/squid3 100 16 256
1716 cache_dir aufs /var/spool/squid3 300 24 256
1717 # | | | | secondo livello di directory
1718 # | | | directory primo livello
1719 # | | dimensione in MB
1720 # | path della cache
1724 <p>Se si modifica la struttura del filesytem della cache
1725 di Squid, ad esempio variando il numero delle directory,
1726 puo' essere opportuno rigenerare la struttura della cache
1727 di squid. Tipicamente e' consigliabile cancellare (se si
1728 ha <em>ridotto</em> il numero delle directory) la vecchia
1729 cache e poi generare una nuova struttura. Se si vuole
1730 <em>star nel sicuro</em> ogni volta che si modifica
1731 l'impostazione delle directory <em>si svuoti la vecchia
1732 cache e se ne generi una nuova</em></p>
1733 <pre class="literal-block">
1734 # /etc/init.d/squid3 stop
1735 # rm -r /var/spool/squid3/??
1737 # /etc/init.d/squid3 start
1741 <div class="section" id="tag-maximum-object-size">
1742 <h3><a class="toc-backref" href=
1743 "#id23">2.1.2 TAG:
1744 maximum_object_size</a></h3>
1746 <p>Questa direttiva imposta la dimensione massima degli
1747 oggetti che vengono salvati sul supporto di storaggio,
1748 oggetti di dimensioni superiori saranno comunque
1749 scaricati ma non tenuti in cache.</p>
1751 <p>TAG: maximum_object_size (1760):</p>
1752 <pre class="literal-block">
1753 # TAG: maximum_object_size (1760)
1754 # Objects larger than this size will NOT be saved on disk. The
1755 # value is specified in kilobytes, and the default is 4MB. If
1756 # you wish to get a high BYTES hit ratio, you should probably
1757 # increase this (one 32 MB object hit counts for 3200 10KB
1758 # hits). If you wish to increase speed more than your want to
1759 # save bandwidth you should leave this low.
1761 # NOTE: if using the LFUDA replacement policy you should increase
1762 # this value to maximize the byte hit rate improvement of LFUDA!
1763 # See replacement_policy below for a discussion of this policy.
1766 # maximum_object_size 4096 KB
1767 maximum_object_size 150 MB
1771 <div class="section" id="tag-cache-mem">
1772 <h3><a class="toc-backref" href=
1773 "#id24">2.1.3 TAG: cache_mem</a></h3>
1775 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1776 utilizzata per la cache di Squid. Questo dipendera' dalla
1777 RAM disponibile sul sistema, e da quanta di questa volete
1778 mettere a disposizione di Squid (altri servizi importanti
1779 girano sulla stessa macchina? ). Questo parametro
1780 influisce sulle prestazioni e sul degrado dei supporti di
1781 storaggio (sopratutto se magnetici).</p>
1783 <p>Se si stesse pensando di usare dell'hardware
1784 <em>embedded</em> a basse prestazioni / consumo per
1785 realizzare un server gateway / NAT / Squid si tenga
1786 presente che Squid e' relativamente esoso di risorse
1787 rispetto agli altri servizi: avra' bisogno di <tt class=
1788 "docutils literal">~25MB</tt> (MegaByte) di RAM e
1789 <em>~150MHZ di CPU ARM</em> per servire decorosamente una
1790 decina di client http su una rete ethernet 10/100. In
1791 questo caso non fate scendere <tt class=
1792 "docutils literal">cache_mem</tt> sotto i <tt class=
1793 "docutils literal">2/4 MB</tt> pena un accesso continuo
1794 al supporto di storaggio.</p>
1796 <p>Se invece si disponesse di una macchina dedicata a
1797 Squid con gigabytes di RAM non si esiti a dedicarne buona
1798 parte a <em>cache_mem</em>.</p>
1800 <p>TAG: cache_mem (1566):</p>
1801 <pre class="literal-block">
1802 # 'cache_mem' specifies the ideal amount of memory to be used
1804 # * In-Transit objects
1806 # * Negative-Cached objects
1813 <div class="section" id="tag-minimum-object-size">
1814 <h3><a class="toc-backref" href=
1815 "#id25">2.1.4 TAG:
1816 minimum_object_size</a></h3>
1818 <p>Questo parametro imposta la dimensione minima degli
1819 oggetti salvati nella cache. Settato a <tt class=
1820 "docutils literal">0</tt> o a valori molto piccoli puo'
1821 influire negativamente sulla frammentazione del filesytem
1822 e consumare un numero elevato di <em>inode</em> (cosa non
1823 piu' importante con ext4 o altri filesytem).</p>
1825 <p>In scenari con connessioni molto veloci ( >~10Mb),
1826 pochi client (una decina) e server poco performanti nella
1827 velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1828 il limte sia piuttosto il <em>seek-time</em> ) tenere in
1829 cache i file piu' piccoli aumenta la latenza della
1832 <p>TAG: minimum_object_size:</p>
1833 <pre class="literal-block">
1834 # TAG: minimum_object_size (bytes)
1835 # Objects smaller than this size will NOT be saved on disk. The
1836 # value is specified in kilobytes, and the default is 0 KB, which
1837 # means there is no minimum.
1840 # minimum_object_size 0 KB
1841 minimum_object_size 0 KB
1846 <div class="section" id=
1847 "negoziazione-degli-accesi-al-servizio">
1848 <h2><a class="toc-backref" href=
1849 "#id26">2.2 Negoziazione degli accesi al
1852 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1853 <em>open relay</em> , si deve quindi limitare la rete che
1854 puo' accedere al servizio.</p>
1856 <dl class="docutils">
1857 <dt>Open Relay:</dt>
1859 <dd>Un servizio a cui possono accedere tutti
1860 indiscriminatamente. La cosa puo' andare bene per servizi
1861 come i server web, che aspirano per loro natura al
1862 maggior numero possibile di utenti, ma non a servizi come
1863 i proxy http oppure ai server di posta elettronica
1864 (adibiti ai soli utenti della rete locale).</dd>
1867 <p>Generalmente non volete che il vostro proxy http venga
1868 usato da persone sconosciute ed esterne alla vostra rete,
1869 le quali sostanzialmente <em>navigherebbero sotto
1870 l'identita' del vostro proxy</em> (probabilmente per
1871 visionare materiali che non vorrebbero fossero ricondotti
1872 direttamente a loro) generando traffico e consumando banda
1873 della vostra connessione a internet. Tenere Squid in
1874 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1875 modo per essere inseriti in una <em>black list</em>.</p>
1877 <p>Per poter limitare gli accessi a Squid dal punto di
1878 vista dell'applicazione (quarto livello TCP/IP) si
1879 identifichera' inizialmente l'entita' <em>rete locale</em>
1880 (es: <tt class="docutils literal">localnet</tt>) con una
1881 ACL di tipo <em>src</em> (indirizzi IP sorgenti) indicando
1882 la <em>classe / range di IP</em> della nostra rete.</p>
1885 Dopodiche l'accesso (<tt class=
1886 "docutils literal">http_access</tt>) si concedera'
1887 (<em>allow</em>) a questa entita' (es: <tt class=
1888 "docutils literal">localnet</tt>) negando chiunque altro.
1891 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1892 esprimere i range di IP: <a class="reference external"
1893 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1894 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1896 <p>E' poi sempre possibile tenere il proxy in ascolto su un
1897 solo indirizzo IP, nel caso si disponga di piu' devicei di
1898 rete, oppure settare un firewall per limitare il traffico
1899 dai primi livelli del TCP/IP.</p>
1901 <div class="section" id="acl-e-http-access">
1902 <h3><a class="toc-backref" href=
1903 "#id27">2.2.1 ACL e http access</a></h3>
1905 <p>Si proceda a creare una <tt class=
1906 "docutils literal">ACL</tt> di tipo <tt class=
1907 "docutils literal">src</tt> per identificare la nostra
1908 rete locale, poi si abiliti l'accesso a questa con la
1909 direttiva <tt class="docutils literal">http_access</tt>.
1910 Tutto quanto non e' espressamente autorizzato viene poi
1911 negato da un <tt class="docutils literal">http_access
1912 deny all</tt> finale.</p>
1913 <pre class="literal-block">
1915 # Defining an Access List
1917 # Every access list definition must begin with an aclname and acltype,
1918 # followed by either type-specific arguments or a quoted filename that
1919 # they are read from.
1921 # ***** ACL TYPES AVAILABLE *****
1923 # acl aclname src ip-address/netmask ... # clients IP address
1926 # Example rule allowing access from your local networks.
1927 # Adapt to list your (internal) IP networks from where browsing
1929 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1930 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1931 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1933 acl localnet src 10.10.208.0/24
1937 # Allowing or Denying access based on defined access lists
1939 # Access to the HTTP port:
1940 # http_access allow|deny [!]aclname ...
1942 # NOTE on default values:
1944 # If there are no "access" lines present, the default is to deny
1948 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1950 # Example rule allowing access from your local networks.
1951 # Adapt localnet in the ACL section to list your (internal) IP networks
1952 # from where browsing should be allowed
1953 #http_access allow localnet
1954 http_access allow localnet
1959 <div class="section" id="testare-squid">
1960 <h2><a class="toc-backref" href=
1961 "#id28">2.3 Testare Squid</a></h2>
1963 <p>Configurato squid e' fondamentale testarne il corretto
1964 funzionamento per assicurarsi di non aver creato un
1965 <em>open-relay</em>. Per fare dei test significativi serve
1966 utilizzare degli host remoti: ci si connetta via ssh a
1967 questi per poi utilizzare <tt class=
1968 "docutils literal">wget</tt> da riga di comando.</p>
1970 <div class="section" id="client-wgetrc">
1971 <h3><a class="toc-backref" href=
1972 "#id29">2.3.1 Client: ~/.wgetrc</a></h3>
1974 <p>Nel file <tt class="docutils literal">.wgetrc</tt> (si
1975 noti il punto iniziale: e' un file nascosto) si puo'
1976 impostare il proxy per wget. Si utilizzi l'indirizzo IP
1977 del server che si vuole testare, e si seguano i log
1979 "docutils literal">/var/log/squid3/access.log</tt> sul
1982 <p>Da notare che la prova va' fatta su una macchina della
1983 rete che si vuole testare, non da <em>localhost</em>. Per
1984 altro se si utilizzasse <em>direttamente</em> <tt class=
1985 "docutils literal">localhost</tt> non si testerebbe la
1986 <em>ACL</em> predisposta, dato che si si rientrerebbe
1987 nella ACL (pre-configurata di default) <tt class=
1988 "docutils literal">localhost</tt>.</p>
1990 <dl class="docutils">
1993 <dd>http_proxy=10.10.208.178:3128</dd>
1996 <p>Si proceda a scaricare dal client scelto con un
1998 <pre class="literal-block">
1999 wget http://www.google.it
2003 <div class="section" id="server-access-log">
2004 <h3><a class="toc-backref" href=
2005 "#id30">2.3.2 Server:
2008 <p>Si puo' controllare il corretto funzionamento del
2009 server seguendo i log di accesso a Squid:</p>
2010 <pre class="literal-block">
2011 # tail -f /var/log/squid3/access.log
2014 <p>In oltre e' possibile configurare diversi
2015 <em>analizzatori di log</em> come <tt class=
2016 "docutils literal">Webalizer</tt> per studiare i log di
2022 <div class="section" id="tiny-proxy">
2023 <h1><a class="toc-backref" href=
2024 "#id31">3 Tiny proxy</a></h1>
2026 <p>Se avete l'esigenza di un proxy server per la condivisione
2027 della connessione ad internet ma non avete la necessita' o le
2028 risorse di un <em>caching</em> proxy come Squid potete
2029 considerare <strong>tinyproxy</strong>, questo e' molto piu'
2030 leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2031 accedere continuamente ad un file system per lo storaggio
2032 della cache) e risulta piu' semplice nella
2035 <p>TinyProxy puo' essere utilizzato come sostituto di
2036 emergenza in una rete in cui Squid e' momentaneamente non
2039 <p>File di configurazione: <tt class=
2040 "docutils literal">/etc/tinyproxy/tinyproxy.conf</tt></p>
2041 <pre class="literal-block">
2042 # Porta su cui ascoltare
2044 # IP su cui ascoltare
2045 Listen 10.10.208.160
2046 # Negoziazione accessi
2047 Allow 10.10.208.0/24
2051 <div class="section" id="apache">
2052 <h1><a class="toc-backref" href=
2053 "#id32">4 Apache</a></h1>
2055 <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2056 patchy NCSA web server</em> ), e' il server web modulare piu'
2057 diffuso e strutturato disponibile con licenza libera, in
2058 grado di operare da sistemi operativi UNIX/Linux e
2061 <p>Un server web e' un processo, e per estensione il computer
2062 su cui e' in esecuzione, che si occupa di fornire, su
2063 richiesta del browser, una pagina web (spesso scritta in
2064 HTML). Le informazioni inviate dal server web viaggiano in
2065 rete trasportate dal protocollo HTTP. L'insieme di server web
2066 da' vita al World Wide Web, uno dei servizi piu' utilizzati
2069 <div class="section" id="pacchetti-da-installare">
2070 <h2><a class="toc-backref" href=
2071 "#id33">4.1 Pacchetti da
2072 installare::</a></h2>
2078 <p>Con la release 2.0 di Apache viene automaticamente resa
2079 disponibile anche la versione SSL (Secure Socket Layer,
2080 connessioni criptate ) del web server senza che ci sia la
2081 necessita' di installare altri pacchetti.</p>
2084 <div class="section" id="configurazione-di-apache">
2085 <h2><a class="toc-backref" href=
2086 "#id34">4.2 Configurazione di
2089 <p>I file di configurazione di apache si trovano nella
2090 cartella: <tt class="docutils literal">/etc/apache2</tt> e
2091 sono strutturati come descritto nel file <tt class=
2092 "docutils literal">/usr/share/doc/apache2/README.Debian.gz</tt>
2093 . Sostanzialmente lo schema e' il seguente:</p>
2095 <dl class="docutils">
2096 <dt>apache2.conf</dt>
2099 <p class="first">File di configurazione principale del
2102 <p class="last">httpd.conf e' il vecchio file di
2103 configurazione di Apache1, presente per motivi di
2104 retrocompatibilita' e' generalmente vuoto.</p>
2109 <dd>In questo file vengono specificate le porte sulle
2110 quali resta in ascolto il server web. Si noti che
2111 utilizzando dei virtual hosts generalmente viene
2112 specificata per questi la porta su cui ascoltare nel file
2113 di configurazione del virtual host, ad es: <tt class=
2114 "docutils literal"><VirtualHost *:80></tt></dd>
2116 <dt>sites-available</dt>
2118 <dd>In questa cartella vengono raccolti i file di
2119 configurazione dei virtual host disponibili.</dd>
2121 <dt>sites-enabled</dt>
2123 <dd>In questa cartella sono contenuti dei link simbolici
2124 ai files in ../sites-available : se il link e' presente
2125 in questa cartella il virtual host e' abilitato.</dd>
2127 <dt>mods-available</dt>
2129 <dd>Stesso metodo per i moduli: in questa cartella ci
2130 sono i moduli veri e propri che verranno poi abilitati
2131 grazie all'esistenza di link simbolici nella cartella
2134 <dt>mods-enabled</dt>
2136 <dd>Moduli abilitati, effettivamente caricati.</dd>
2140 <div class="section" id="apache-conf">
2141 <h2><a class="toc-backref" href=
2142 "#id35">4.3 apache.conf</a></h2>
2144 <p>File di configurazione del servizio Apache, contiene le
2145 impostazioni generiche (ad esempio utilizzo della RAM e
2146 risorse di sistema) dell'intero servizio. Nella
2147 configurazione di default per Debian non viene definito un
2148 vero e proprio sito di default ma solo dei virtual
2151 <p>Guardiamo alcune direttive interessanti:</p>
2153 <dl class="docutils">
2156 <dd>Numero di secondi da aspettare prima di chiudere la
2157 connessione con il client. Questo parametro serve a
2158 liberare le risorse di sistema nel caso che un client,
2159 magari a causa di una connessione particolarmente lenta o
2160 instabili, tenga attivo indefinitamente un processo di
2165 <dd>L'estensione keep-alive (http 1.0) congiuntamente
2166 alle connessioni persistenti (http 1.1) permettono al
2167 server di rispondere a piu' richieste dei client mediante
2168 la stessa connessione. Il protocollo http per sua natura
2169 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2170 richiesta (per pagine web si pensi ad esempio alle
2171 immagini) dal client necessita di una connessione
2172 autonoma. Keep-alive permette di ottimizzare la
2173 connessione anche fino al 50% a seconda delle situazioni
2176 <dt>Server-Pool Size Regulation</dt>
2178 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2179 Tutti spiegati nel manuale di apache) servono per
2180 attribuire le risorse di sistema disponibili al server
2181 Apache. Tenere questi parametri bassi serve a limitare il
2182 rischio di Denial of Service per il server, nel caso
2183 offra altri servizi. I settagli di default sono come
2184 sempre abbastanza conservativi, se si conta di usare il
2185 proprio Apache per servire un sito web con molti
2186 visitatori sara' necessario aumentare sensibilmente le
2187 impostazioni di base.</dd>
2189 <dt>AccessFileName</dt>
2191 <dd>Il nome del file che viene onorato per modificare le
2192 impostazioni per una singola directory, legato alla
2193 direttiva AllowOverride .</dd>
2197 <div class="section" id="installazione-di-php">
2198 <h2><a class="toc-backref" href=
2199 "#id36">4.4 Installazione di PHP</a></h2>
2201 <p>Pacchetti da installare: <tt class=
2202 "docutils literal">php5 <span class=
2203 "pre">php-pear</span></tt></p>
2205 <div class="section" id="test-del-modulo-php">
2206 <h3><a class="toc-backref" href=
2207 "#id37">4.4.1 Test del modulo
2210 <p>Creare nella cartella <tt class=
2211 "docutils literal">/var/www</tt> (o altra cartella
2212 visibile) un file con estensione *.php (es <tt class=
2213 "docutils literal">/var/www/info.php</tt> contenete
2214 codice php eseguibile dall'interprete, ad es:</p>
2215 <pre class="literal-block">
2216 <?php phpinfo() ; ?>
2219 <p>Questa funzione di php generera' la tipica pagina con
2220 le impostazioni attuali per PHP. Richiamando la pagina
2221 (es: <tt class="docutils literal"><span class=
2222 "pre">http://localhost/info.php</span></tt> ) verra'
2223 generata dall'interprete PHP la pagina HTML e resa
2224 disponibile tramite Apache ai client HTTP, a prova del
2225 corretto funzionamento del modulo di PHP e della sua
2226 integrazione con il server web Apache. In caso contrario
2227 se il client http proporra' di scaricare la pagina invece
2228 che visualizzarla nel browser: non funziona l'interprete
2229 di php o sono mal configurati i MIME-type. prima di tutto
2230 assicurarsi di aver fatto ripartire Apache.</p>
2233 <div class="section" id=
2234 "installazione-del-supporto-per-mysql-a-php">
2235 <h3><a class="toc-backref" href=
2236 "#id38">4.4.2 Installazione del supporto
2237 per Mysql a PHP</a></h3>
2239 <p>Installare i pacchetti:</p>
2240 <pre class="literal-block">
2241 php5-mysql phpmyadmin
2244 <p>Controllare tramite la pagina php.info che sia
2245 abilitato il supporto per Mysql (ripartito Apache,
2246 ricaricare la pagina e cercare con CTRL+f <tt class=
2247 "docutils literal">mysql</tt>).</p>
2250 <div class="section" id="phpmyadmin">
2251 <h3><a class="toc-backref" href=
2252 "#id39">4.4.3 phpmyadmin</a></h3>
2254 <p>L'interfaccia web Phpmyadmin non richiede
2255 necessariamente la presenza di un database Mysql locale,
2256 puo' infatti essere utilizzata per gestire database
2257 remoti (il suo file di configurazione: <tt class=
2258 "docutils literal">/etc/phpmyadmin/config.inc.php</tt> ).
2259 Nel caso si voglia installare localmente Mysql si
2260 utilizzi il pacchetto <tt class=
2261 "docutils literal"><span class=
2262 "pre">mysql-server</span></tt> .</p>
2264 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2265 <tt class="docutils literal"><span class=
2266 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2267 non fosse controllare che sia incluso il file <tt class=
2268 "docutils literal">/etc/phpmyadmin/apache.conf</tt> in
2269 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2273 <div class="section" id=
2274 "installazione-del-supporto-per-postgresql-a-php">
2275 <h3><a class="toc-backref" href=
2276 "#id40">4.4.4 Installazione del supporto
2277 per Postgresql a PHP</a></h3>
2279 <p>Installare i pacchetti:</p>
2280 <pre class="literal-block">
2281 php5-pgsql phppgadmin
2284 <p>Controllare tramite la pagina php.info che sia
2285 abilitato il supporto per PostgreSQL (ripartito Apache,
2286 ricaricare la pagina e cercare con CTRL+f <tt class=
2287 "docutils literal">pgsql</tt>).</p>
2290 <div class="section" id="phppgadmin">
2291 <h3><a class="toc-backref" href=
2292 "#id41">4.4.5 phppgadmin</a></h3>
2294 <p>L'interfaccia web Phppgadmin per il database server
2295 PostgreSQL non richiede necessariamente la presenza di un
2296 database locale, puo' infatti essere utilizzata per
2297 gestire database remoti (il suo file di configurazione:
2299 "docutils literal">/etc/phppgadmin/config.inc.php</tt> ).
2300 Nel caso si voglia installare localmente Mysql si
2301 utilizzi il pacchetto <tt class=
2302 "docutils literal">postgresql</tt> .</p>
2304 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2305 <tt class="docutils literal"><span class=
2306 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2307 non fosse controllare che sia incluso il file <tt class=
2308 "docutils literal">/etc/phppgadmin/apache.conf</tt> in
2309 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2314 <div class="section" id="virtual-hosts">
2315 <h2><a class="toc-backref" href=
2316 "#id42">4.5 Virtual hosts</a></h2>
2320 <li><a class="reference external" href=
2321 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2323 <li><a class="reference external" href=
2324 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2325 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2329 <p>I virtual host permettono di avere piu' siti internet
2330 disponibili tramite lo stesso server web, eventualmente
2331 mappati su un solo indirizzo IP. Sono generalmente di due
2336 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2337 possibilita' di avere piu' indirizzi IP dedicati per i
2338 diversi siti che si vuole servire. ES: <tt class=
2339 "docutils literal"><VirtualHost
2340 192.168.0.2:80></tt> . Soluzione dispendiosa, si
2341 tende ad usarla solo se servono certificati di
2342 sicurezza (SSL ) dedicati per ogni sito.</li>
2344 <li>Basati su <em>nomi di dominio</em> che puntano allo
2345 stesso IP. Soluzione piu' economica e diffusa che si
2346 basa sulle funzionalita' di http 1.1 .</li>
2350 <p>Prenderemo in esame la gestione di virtual hosts basati
2351 su nomi di dominio.</p>
2353 <div class="section" id="gestione-dns">
2354 <h3><a class="toc-backref" href=
2355 "#id43">4.5.1 Gestione DNS</a></h3>
2357 <p>Prima di tutto per poter impostare i virtual hosts
2358 dovete avere un server DNS che risolva i vostri nomi di
2359 dominio sull'indirizzo IP del server. Questo si puo'
2360 ottenere in vari modi, ad es:</p>
2363 <dl class="docutils">
2364 <dt><tt class="docutils literal">/etc/hosts</tt></dt>
2366 <dd>Per prove sul proprio sistema potete impostare i
2367 nomi dei vostri virtual server nel file /etc/hosts
2370 <dt><em>Dnsmasq</em> (DNS server)</dt>
2372 <dd>Utilizzabile al livello della rete locale per
2373 fare dei test, utilizzando direttive come: <tt class=
2374 "docutils literal"><span class=
2375 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2377 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2379 <dd>Utilizzare un servizio come ad es: <a class=
2380 "reference external" href=
2381 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2382 per mappare nomi di dominio sul proprio indirizzo IP,
2383 comodo ad esempio se si dispone di un indirizzo IP
2384 pubblico (anche se dinamico) per la propria
2385 connessione ad internet.</dd>
2387 <dt><em>Bind</em> (DNS server)</dt>
2389 <dd>Impostare i campi A nelle proprie zone gestite
2390 dal server DNS Bind. Ad es: <tt class=
2391 "docutils literal">papo
2392 A
2393 212.22.136.248</tt></dd>
2398 <div class="section" id="eseguire-una-query-dns-con-dig">
2399 <h3><a class="toc-backref" href=
2400 "#id44">4.5.2 Eseguire una query DNS con
2401 <tt class="docutils literal">dig</tt>::</a></h3>
2403 <p>Per testare la corretta risoluzione dei vostri nomi di
2404 dominio sui relaivi indirizzi IP si usi dig (o altre
2405 utlity, vedere la sezione relativa i DNS). Dig e'
2406 contenuto nel pacchetto <tt class=
2407 "docutils literal">dnsutils</tt>.</p>
2410 <p># dig 177.piffa.net</p>
2412 <p>; <<>> DiG 9.5.1-P1 <<>>
2413 177.piffa.net ;; global options: printcmd ;; Got
2414 answer: ;; ->>HEADER<<- opcode: QUERY,
2415 status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2416 QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2418 <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2420 <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2423 <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2426 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2428 "docutils literal">177.piffa.net.
2429 0
2430 IN
2431 A 10.10.208.177</tt>
2432 . Il nome di dominio 177.piffa.net viene risolto sull'ip
2433 10.10.208.177 , nel nostro Apache (che risponde all'ip
2434 10.10.208.177 ) dovra' essere disponibile un virtual host
2435 che corrisponde al nome <tt class=
2436 "docutils literal">177.piffa.net</tt> (<tt class=
2437 "docutils literal">ServerName</tt>) .</p>
2439 <p>Il server DNS utilizzato dal sistema e' evidenziato
2440 dalla stringa: <tt class="docutils literal">;; SERVER:
2441 10.10.28.248#53(10.10.28.248)</tt> che dovrebbe
2442 corrispondere a quanto impostato nel vostro <tt class=
2443 "docutils literal">/etc/resolv.conf</tt>. Se il vostro
2444 browser web utilizza un proxy http sara questo a
2445 risolvere i nomi di dominio, tipicamente potete
2446 disabilitare l'uso del proxy per determinati domini nella
2447 sezione di configurazione del browser.</p>
2450 <div class="section" id="id3">
2451 <h3><a class="toc-backref" href=
2452 "#id45">4.5.3 Virtual hosts</a></h3>
2454 <p>Esempio di Virtual host:</p>
2455 <pre class="literal-block">
2456 <VirtualHost *:80 >
2457 ServerName 177.piffa.net
2458 DocumentRoot /var/www/177.piffa.net/
2459 ServerAdmin webmaster@177.piffa.net
2460 </VirtualHost>
2463 <ol class="arabic simple">
2464 <li><tt class="docutils literal"><VirtualHost
2465 <span class="pre">\*:80</span> ></tt> La prima riga
2466 indica l'inizio della stanza relativa al nostro virtual
2467 host, che ascoltera' su qualunque indirizzo IP (nel
2468 caso il server abbia piu' indirizzi dai quali e'
2469 raggiungibile) sulla porta <tt class=
2470 "docutils literal">80</tt>.</li>
2472 <li><tt class="docutils literal">Server/name</tt>
2473 precisa quale sara' il nome di dominio a cui verra'
2474 associato questo sito rispetto ad altri eventualmente
2475 presenti sullo stesso server web.</li>
2477 <li><tt class="docutils literal">DocumentRoot</tt> : il
2478 path della directory che contiene le pagine del
2481 <li><tt class="docutils literal">ServerAdmin</tt>:
2482 l'indirizzo del webmaster, in modo da poterlo
2483 contattare in caso di problemi col sito.</li>
2486 "docutils literal"></VirtualHost></tt>:
2487 <em>tag</em> di chiusura della stanza di definizione
2488 del virtual host.</li>
2491 <p>Quelle che abbiamo appena visto sono le direttive
2492 essenziali per definire un sito virtuale, potrebbe essere
2493 utile aggiungere altre:</p>
2497 <dl class="first docutils">
2498 <dt><tt class="docutils literal">ErrorLog
2499 /var/log/apache2/177.piffa.net/error.log</tt></dt>
2502 <p class="first last">Log degli errori separato
2503 dai restanti siti web ospitati dal server.</p>
2509 <dl class="first docutils">
2510 <dt><tt class="docutils literal">LogLevel
2514 <p class="first last">Livello di importanza degli
2515 eventi loggati: warning <em>attenzione</em> .</p>
2521 <dl class="first docutils">
2522 <dt><tt class="docutils literal">CustomLog
2523 /var/log/apache2/177.piffa.net/access.log
2527 <p class="first last">Log di accesso separati
2528 dagli altri siti, utile anche qua per statistiche
2529 di accesso per il solo sito virtuale.</p>
2535 <p>Potrebbe essere utile modificare le impostazioni di
2536 una intera directory, ad esempio per abilitare
2537 l'<tt class="docutils literal">AuthConfig</tt>:</p>
2538 <pre class="literal-block">
2539 <Directory "/var/www/miosito.net/privata">
2540 AllowOverride AuthConfig
2541 Options ExecCGI Indexes MultiViews FollowSymLinks
2547 <p><tt class="docutils literal">AllowOverride
2548 AuthConfig</tt> ora vale per l'intera directory, come le
2553 <div class="section" id="negoziazione-accessi">
2554 <h2><a class="toc-backref" href=
2555 "#id46">4.6 Negoziazione accessi</a></h2>
2557 <p>Tipicamente quando si installa un server web il proprio
2558 desiderio e' di dare accesso ai materiali disponibili al
2559 maggior numero di visitatori possibile. Talvolta pero' puo'
2560 essere utile poter limitare questi accessi, ad esempio per
2561 escludere un <em>bot</em> indesiderato che scansiona
2562 ininterrottamente le nostre pagine o per creare una
2563 <em>Area Riservata</em> i cui materiali non devono essere
2564 disponibile a tutti.</p>
2566 <div class="section" id="limiti-su-base-ip">
2567 <h3><a class="toc-backref" href=
2568 "#id47">4.6.1 Limiti su base IP</a></h3>
2570 <p>La forma piu' semplice di restrizione degli accessi e'
2571 su base degli indirizzi IP dei client: tipicamente i siti
2572 web sono settati per dare accesso a chiunque:</p>
2573 <pre class="literal-block">
2574 <VirtualHost *:80 >
2576 <Directory "/var/www/177.piffa.net">
2580 </VirtualHost>
2583 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2585 <pre class="literal-block">
2586 <VirtualHost *:80 >
2588 <Directory "/var/www/177.piffa.net">
2591 Deny from 192.168.0.1
2593 </VirtualHost>
2596 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2597 materiali dell'intero sito virtuale, oppure potremmo
2598 lavorare su una sola directory:</p>
2599 <pre class="literal-block">
2600 <Directory "/var/www/miosito.net/limitata">
2602 Allow from 192.168.0.0./24
2607 <p>In questo modo solo la classe IP <tt class=
2608 "docutils literal">192.168.0.0/24</tt> potra' accedere
2609 alla directory <tt class=
2610 "docutils literal">/limitata</tt> Si tenga pero' conto
2611 che e' relativamente facile per un malintenzionato
2612 cambiare il proprio indirizzo IP, oppure collegarsi da un
2613 altra zona. Meno facile e' accedere ad una classe privata
2614 trovandosi all'esterno di questa, ma ci sono comunque
2615 soluzioni piu' eleganti.</p>
2618 <li>Mod_access: <a class="reference external" href=
2619 "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2621 <li>mod_authz_hosti(Available in Apache 2.1 and later):
2622 <a class="reference external" href=
2623 "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2624 http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2629 <div class="section" id="user-authentication">
2630 <h2><a class="toc-backref" href=
2631 "#id48">4.7 User Authentication</a></h2>
2633 <p>Si puo' negoziare gli accessi ad un area del sito
2634 tramite autenticazione basata su <em>nome utente /
2635 password</em>. Questo puo' venire utile per creare una area
2636 download <em>intranet</em>, alla quale possano accedere
2637 solo gli utenti previsti a prescindere dagli indirizzi IP
2638 dei loro client.</p>
2640 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2641 possibile implementare questo paradigma, per quanto
2642 esistano soluzioni piu' granulari e sofisticate, che
2643 richiedono pero' l'implementazione di interpreti di
2644 linguaggi di programmazione, criptazione delle passwords,
2645 gestione degli utenti ed eventualmente delle sessioni. Mod
2646 auth non richiede l'installazione di niente di tutto
2649 <p>link: <a class="reference external" href=
2650 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2652 <div class="section" id="definire-la-cartella">
2653 <h3><a class="toc-backref" href=
2654 "#id49">4.7.1 Definire la
2657 <p>Decidere quale sara' il <em>path</em> della cartella
2658 da sottoporre ad autenticazione:</p>
2661 <tt class="docutils literal">mkdir
2662 /var/www/177.piffa.net/privata</tt>
2666 <div class="section" id=
2667 "creazione-del-database-delle-passwords">
2668 <h3><a class="toc-backref" href=
2669 "#id50">4.7.2 Creazione del database
2670 delle passwords</a></h3>
2672 <p>Un modo semplice per gestire una database di
2673 <em>user-id / passwords</em> e' utilizzare l'utility
2674 <tt class="docutils literal">htpasswd</tt> di Apache.
2675 Questa crea un file in cui un <em>crypt</em> delle
2676 password viene associato agli utenti.</p>
2678 <p>Si dovra' decidere dove tenere questo file, la cosa
2679 importante e' che non sia visibile nel sito web: non deve
2680 essere scaricabile dai visitatori. Deve essere cioe'
2681 all'esterno della <em>DocumentRoot</em>: un buon posto
2682 potrebbe essere la /home dell'utente.</p>
2684 <p>Creiamo (con il <em>flag</em> <tt class=
2685 "docutils literal"><span class="pre">-c</span></tt>) il
2687 "docutils literal">/home/utente/passwords</tt> con
2688 l'utente <tt class="docutils literal">luca</tt>:</p>
2689 <pre class="literal-block">
2690 htpasswd -c /home/utente/passwords luca
2693 <p><tt class="docutils literal">htpasswd</tt> ci
2694 chiedera' la password da associare all'utente <tt class=
2695 "docutils literal">luca</tt>. Per successive modifiche
2696 della password o aggiunta di nuovi utenti non sara'
2697 necessario usare il flag <tt class=
2698 "docutils literal"><span class="pre">-c</span></tt>.</p>
2701 <div class="section" id="id4">
2702 <h3><a class="toc-backref" href=
2703 "#id51">4.7.3 Configurazione di
2706 <p>Ora possiamo passare alla configurazione vera e
2707 propria di Apache, ma con una novita': andremo a inserire
2708 la voce in un <tt class="docutils literal">.htaccess</tt>
2709 invece che modificare (tramite una direttiva <tt class=
2710 "docutils literal"><Directory></tt> ) il file di
2711 impostazione del virtual-host.</p>
2713 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2714 puo' modificare l'impostazione del virtual host nel file
2715 <tt class="docutils literal"><span class=
2716 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2717 ma spesso il motivo per cui creiamo i virtual hosts e'
2718 ospitare i siti di altri utenti, che possono solo
2719 pubblicare (generalmente tramite <em>FTP</em>) i loro
2720 documenti nella loro <em>DocumentRoot</em>, senza poter
2721 quindi modificare in alcun modo la configurazione del
2724 <p>Dando agli utenti la possibilita' di modificare
2725 (<em>AllowOverride</em>) autonomamente alcuni parametri
2726 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2727 funzionamento del loro spazio web ci togliera'
2728 l'incombenza di dover intervenire continuamente sui vari
2731 <p>Abilitiamo l'AllowOverride nel file di configurazione
2732 del virtual host per la sola directory <tt class=
2733 "docutils literal">privata</tt>:</p>
2734 <pre class="literal-block">
2735 <VirtualHost *:80 >
2736 ServerName 177.piffa.net
2737 DocumentRoot /var/www/177.piffa.net/
2738 ServerAdmin webmaster@177.piffa.net
2739 <Directory "/var/www/177.piffa.net/privata">
2740 AllowOverride AuthConfig
2742 </VirtualHost>
2745 <p>Per rendere il cambiamento effettivo sara' necessario
2746 fare un restart / reload di Apache.</p>
2748 <p>Ora sara' possibile, anche per l'utente di sistema,
2749 creare un file <tt class=
2750 "docutils literal">.htaccess</tt> che sara' onorato da
2753 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2754 <pre class="literal-block">
2755 # Messaggio visualizzato al prompt per l'autenticazione
2756 AuthName "Area privata soggetta ad autentizazione"
2757 # tipo di autenticazione da usarsi
2759 # File precedentemente generato con htpasswd
2760 AuthUserFile /home/utente/passwords
2762 # Negoziazione degli accessi
2763 # valid users permette l'accesso agli utenti specificati
2764 # nel file generato da htpasswd
2768 <p>Si noti che non e' necessario fare ripartire Apache
2769 per onorare i cambiamenti (un utente non avrebbe la
2770 possibilita' di farlo!).</p>
2772 <dl class="docutils">
2773 <dt>Oltre a <tt class="docutils literal"><span class=
2774 "pre">valid-users</span></tt> si potrebbe scegliere di
2775 usare la formula <tt class=
2776 "docutils literal">users</tt> che permette di elencare
2777 esplicitamente gli utenti::</dt>
2779 <dd>require user pippo pluto</dd>
2782 <p>L'utente <em>paperino</em> che fosse comunque presente
2783 nel file generato da htpasswd non potrebbe accedere alla
2786 <dl class="docutils">
2787 <dt>Nel caso ci fossero molti utenti conviene gestirli
2788 tramite <em>gruppi</em>::</dt>
2790 <dd>require group staff studenti</dd>
2793 <p>I gruppi vengono definiti in un file in modo simile a
2794 <tt class="docutils literal">/etc/groups</tt> per gli
2795 utenti di sistema:</p>
2796 <pre class="literal-block">
2798 studenti: lucap federico luca
2801 <p>da richiamare tramite la direttiva <tt class=
2802 "docutils literal">AuthGroupFile</tt>.</p>
2806 <div class="section" id="cavets">
2807 <h2><a class="toc-backref" href=
2808 "#id52">4.8 Cavets</a></h2>
2810 <p>Problemi di cache:</p>
2814 <li>Proxy: nei settaggi del browser specificare di non
2815 utilizzare un server proxy http per il sito web locale
2816 (o per gli altri che si stanno monitorando). Se si ha
2817 il controllo del proxy server: stopparlo, ricaricare la
2818 pagina (operazione che fallira'), far ripartire il
2819 proxy, ricaricare la pagina.</li>
2821 <li>Provare con un altro browser, o cercare di svuotare
2822 la cache chiudere/riaprire l'applicativo. Provare a
2823 fermare Apache, ricaricare la pagina (operazione che
2824 fallira'), far ripartire Apache, ricaricare la
2831 <div class="section" id="domain-name-system">
2832 <h1><a class="toc-backref" href=
2833 "#id53">5 Domain Name System</a></h1>
2835 <p>Domain Name System (spesso indicato con DNS) e' un
2836 servizio utilizzato per la risoluzione di nomi di host in
2837 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2838 un sistema <strong>gerarchico</strong> (quindi una struttura
2839 ad albero, simile ai <em>file system</em>)
2840 <strong>distribuito</strong> (ogni server DNS facente parte
2841 del sistema puo' mantenere solo una parte delle informazioni,
2842 ad esempio per la sua sola <em>zona</em>), costituito dai
2845 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2846 rete internet come per qualunque rete locale. Ad esempio
2847 durante la navigazione web un client vorrebbe vedere
2848 l'<em>URL</em> <tt class="docutils literal"><span class=
2849 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2850 connettere via <em>http</em> al server web deve prima
2851 ottenere l'indirizzo IP del <em>server http</em>
2852 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2853 fornisce un IP sbagliato l'utente non potra' raggiungere il
2854 servizio: di fatto e' come se il serve http fosse spento.</p>
2856 <p>Stessa cosa vale per gli altri servizi, come la posta
2857 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2860 <p>Potrebbe verificarsi uno scenario simile a questo: i
2861 vostri server per i siti web funzionano correttamente come i
2862 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2863 e POP3, e tutto il resto. Ma se poi un errore nella
2864 configurazione del DNS non rende raggiungibile l'intero
2865 <em>sito</em>: per l'utente finale e' come se nulla
2868 <p>Infatti quando si parla di un intervento della Polizia
2869 Postale per l'<em>oscuramento</em> di un sito dal punto di
2870 vista pratico questo si traduce generalmente nella rimozione
2871 o mistificazione del record DNS relativo a quel dominio (la
2872 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2873 principali provider internet che forniscono connettivita'
2874 agli utenti italiani, oltre che poter agire direttamente sul
2875 NIC italiano per i domini della TLD <em>.it</em>)</p>
2877 <p>L'operazione di convertire un nome in un indirizzo e'
2878 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2879 detto risoluzione inversa.</p>
2882 Un <em>Registar</em> e' un operatore che ha la facolta'
2883 (accreditamento da parte dell ICANN) di registrare i domini
2884 di secondo livello per gli utenti finali, dietro compenso
2885 di una modica cifra (una decina di euro) che vale come
2886 contributo su base annuale per il mantenimento
2887 dell'infrastruttura.
2890 <div class="section" id="risoluzione-inversa">
2891 <h2><a class="toc-backref" href=
2892 "#id54">5.1 Risoluzione Inversa</a></h2>
2894 <p>Per la risoluzione inversa sono invece i provider di
2895 connettivita' a gestire i DNS: se volete impostare il
2896 <em>PTR</em> associato al vostro indirizzo IP dovete
2897 contattare il vostro provider (tipo <em>telecom</em> per
2898 una connessione ADSL) e <em>non il Registar del vostro
2901 <p>Ad esempio all'IP <tt class=
2902 "docutils literal">212.22.136.248</tt> era associato un PTR
2903 <tt class="docutils literal">bender.piffa.net</tt>,
2904 corrispondente al record <tt class=
2905 "docutils literal">212</tt> facente parte della zona
2906 <tt class="docutils literal"><span class=
2907 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2908 provider Tiscali/Nextra proprietario della classe C
2909 <tt class="docutils literal">212.22.136.0</tt>. Se avete un
2910 solo IP conviene lasciare al fornitore la gestire del PTR,
2911 ma se avete a disposizione un'itera classe potete chiedere
2912 sempre al vostro provider che vi <em>deleghi</em> la
2913 gestione della zona tramite i vostri DNS.</p>
2915 <p>Per alcuni servizi, ad esempio la spedizione della posta
2916 elettronica, e' richiedeiesto che venga impostata
2917 correttamente l'associazione tra il PTR dell'indirizzo IP
2918 usato dal server di postai e il record A RR al quale questo
2919 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2924 <li><a class="reference external" href=
2925 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2926 2.1 Inconsistent, Missing, or Bad Data</li>
2928 <li><a class="reference external" href=
2929 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2933 <div class="section" id="nomi-di-dominio">
2934 <h2><a class="toc-backref" href=
2935 "#id55">5.2 Nomi di dominio</a></h2>
2937 <p>Un nome a dominio e' costituito da una serie di stringhe
2938 separate da punti, ad esempio bender.piffa.net. I nomi di
2939 dominio si leggono da destra verso sinistra: <em>TLD</em> o
2940 dominio di primo livello <tt class=
2941 "docutils literal">net</tt>, secondo livello <tt class=
2942 "docutils literal">piffa</tt>, terzo livello <tt class=
2943 "docutils literal">bender</tt>. Il dominio di primo livello
2944 (o TLD, Top Level Domain, pronunciato <em>tilde</em> in
2945 Italia), per esempio .net o .it sono limitati e decisi
2946 direttamente dall'ente assegnatario ICANN ( Internet
2947 Corporation for Assigned Names and Numbers).</p>
2949 <p>L'utente finale potra' chiedere l'assegnazione (pagando
2950 un contributo al Register preferito per il mantenimento
2951 delle spese dell'infrastruttura) di un dominio di
2952 <em>secondo</em> livello (es <tt class=
2953 "docutils literal">piffa</tt>) di una delle varie TLD
2954 disponibili (noi italiani diciamo <em>tildi</em>), sempre
2955 che non sia gia' stato assegnato a qualcun altro.</p>
2957 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
2958 potra' in stanziare domini di terzo livello (es <tt class=
2959 "docutils literal">bender</tt>) e anche oltre (es
2960 www.andrea.bender.piffa.net). Tali records saranno
2961 mantenuti dall'utente, sotto la sua responsbilita': se il
2962 proprio server DNS non fosse raggiungibile o risultasse mal
2963 configurato gli utenti non potrebbero risolvere /
2964 raggiungere i siti di loro interesse.</p>
2966 <p>Tipicamente si ha almeno un server DNS secondario per
2967 garantire la sussistenza del servizio in caso di guasto del
2968 DNS principale. I secondari <em>replicano</em> i dati
2969 presenti nei DNS principali.</p>
2972 <div class="section" id="tipologie-di-record">
2973 <h2><a class="toc-backref" href=
2974 "#id56">5.3 Tipologie di record</a></h2>
2976 <p>Ad un nome DNS possono corrispondere diversi tipi di
2977 informazioni. Per questo motivo, esistono diversi tipi di
2978 record DNS. Ogni voce del database DNS deve essere
2979 caratterizzata da un tipo. I principali tipi sono:</p>
2982 <li>Record A - Indica la corrispondenza tra un nome ed
2983 uno (o piu') indirizzi IP (per la precisione indirizzi
2984 IPv4, ovvero la versione attualmente in uso).</li>
2986 <li>Record MX - (Mail eXchange) indica a quali server
2987 debba essere inviata la posta elettronica per un certo
2990 <li>Record CNAME - Sono usati per creare un alias, ovvero
2991 per fare in modo che lo stesso calcolatore sia noto con
2992 piu' nomi. Uno degli utilizzi di questo tipo di record
2993 consiste nell'attribuire ad un host che offre piu'
2994 servizi un nome per ciascun servizio. In questo modo, i
2995 servizi possono poi essere spostati su altri host senza
2996 dover riconfigurare i client, ma modificando solo il
2999 <li>Record PTR - Il DNS viene utilizzato anche per
3000 realizzare la risoluzione inversa, ovvero per far
3001 corrispondere ad un indirizzo IP il corrispondente nome a
3002 dominio. Per questo si usano i record di tipo "PTR" (e
3003 una apposita zona dello spazio dei nomi
3006 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3008 <li>Record SRV - Identificano il server per un
3009 determinato servizio all'interno di un dominio. Possono
3010 essere considerati una generalizzazione dei record
3013 <li>Record TXT - Associano campi di testo arbitrari ad un
3014 dominio. Questi campi possono contenere una descrizione
3015 informativa oppure essere utilizzati per realizzare
3019 <p>Vi sono anche tipi di record "di servizio", necessari al
3020 funzionamento del database distribuito: * Record NS -
3021 Utilizzato per indicare quali siano i server DNS
3022 autoritativi per un certo dominio, ovvero per delegarne la
3023 gestione. * Record SOA - (Start of Authority) usato per la
3024 gestione delle zone DNS.</p>
3027 <div class="section" id="utilizzo">
3028 <h2><a class="toc-backref" href=
3029 "#id57">5.4 Utilizzo</a></h2>
3031 <p>I computer vengono identificati in rete grazie agli
3032 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3033 utenti come riferimento per i vari server. Ad esempio
3034 sarebbe scomodo riferirsi al motore di ricerca Goggle con
3035 uno dei suoi IP: <tt class=
3036 "docutils literal">74.125.43.104</tt>, e' preferibile usare
3037 il nome di dominio <em>www.google.com</em>:</p>
3038 <pre class="literal-block">
3039 ping -c 1 www.google.com
3040 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3044 <div class="section" id="risoluzione-dei-nomi-di-dominio">
3045 <h2><a class="toc-backref" href=
3046 "#id58">5.5 Risoluzione dei nomi di
3049 <p>Ci sono vari strumenti per interrogare i server DNS e
3050 ottenere l'indirizzo IP associato al nome di dominio che ci
3052 <pre class="literal-block">
3053 $ host www.piffa.net
3054 www.piffa.net is an alias for piffa.net.
3055 piffa.net has address 65.98.21.97
3056 piffa.net mail is handled by 10 65.98.21.97
3059 $ nslookup www.piffa.net
3060 Server: 192.168.0.10
3061 Address: 192.168.0.10#53
3063 Non-authoritative answer:
3064 www.piffa.net canonical name = piffa.net.
3066 Address: 65.98.21.97
3071 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
3072 ;; global options: +cmd
3074 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
3075 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3077 ;; QUESTION SECTION:
3078 ;www.piffa.net. IN A
3081 www.piffa.net. 3489 IN CNAME piffa.net.
3082 piffa.net. 3489 IN A 65.98.21.97
3084 ;; AUTHORITY SECTION:
3085 piffa.net. 86289 IN NS ns2.mydomain.com.
3086 piffa.net. 86289 IN NS ns1.mydomain.com.
3087 piffa.net. 86289 IN NS ns4.mydomain.com.
3088 piffa.net. 86289 IN NS ns3.mydomain.com.
3090 ;; ADDITIONAL SECTION:
3091 ns1.mydomain.com. 96208 IN A 64.94.117.193
3092 ns2.mydomain.com. 96208 IN A 64.94.31.67
3093 ns3.mydomain.com. 96208 IN A 66.150.161.137
3094 ns4.mydomain.com. 96208 IN A 63.251.83.74
3096 ;; Query time: 1 msec
3097 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3098 ;; WHEN: Sun May 10 21:23:11 2009
3099 ;; MSG SIZE rcvd: 209
3102 <p>Lo strumento piu' esaustivo e' <tt class=
3103 "docutils literal">dig</tt>, installabile con il pacchetto
3104 <tt class="docutils literal">dnsutils</tt> .</p>
3107 <div class="section" id="dig">
3108 <h2><a class="toc-backref" href=
3109 "#id59">5.6 Dig</a></h2>
3111 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3112 "docutils literal">dig</tt> per l'interrogazione dei DNS
3114 <pre class="literal-block">
3117 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
3118 ;; global options: +cmd
3120 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
3121 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3123 ;; QUESTION SECTION:
3124 ;www.google.it. IN A
3127 www.google.it. 250683 IN CNAME www.google.com.
3128 www.google.com. 334819 IN CNAME www.l.google.com.
3129 www.l.google.com. 186 IN A 74.125.43.103
3130 www.l.google.com. 186 IN A 74.125.43.104
3131 www.l.google.com. 186 IN A 74.125.43.147
3132 www.l.google.com. 186 IN A 74.125.43.99
3134 ;; AUTHORITY SECTION:
3135 l.google.com. 80856 IN NS f.l.google.com.
3136 l.google.com. 80856 IN NS d.l.google.com.
3137 l.google.com. 80856 IN NS b.l.google.com.
3138 l.google.com. 80856 IN NS c.l.google.com.
3139 l.google.com. 80856 IN NS a.l.google.com.
3140 l.google.com. 80856 IN NS e.l.google.com.
3141 l.google.com. 80856 IN NS g.l.google.com.
3143 ;; Query time: 1 msec
3144 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3145 ;; WHEN: Sun May 10 21:34:47 2009
3146 ;; MSG SIZE rcvd: 255
3149 <dl class="docutils">
3152 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3153 <em>root server</em> utilizzati. I root server sono i
3154 server che mantengono le informazioni sui domini di primo
3155 livello (TLD) e sono quindi il punto di partenza per
3156 scorrere nella directory dei DNS per recuperare le
3157 informazioni (tipicamente un campo <tt class=
3158 "docutils literal">A</tt> per un indirizzo IP) che ci
3159 servono per raggiungere un certo servizio.</dd>
3167 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3168 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3169 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3170 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3171 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3172 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3173 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3174 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3175 J.ROOT-SERVERS.NET. . 192032 IN NS
3176 D.ROOT-SERVERS.NET.</p>
3181 <dl class="docutils">
3182 <dt>dig @nome_dns</dt>
3184 <dd>Permette di fare una query ad un server dns
3185 particolare. Es: <tt class="docutils literal">dig
3186 @151.99.25.1 www.google.it</tt></dd>
3188 <dt>dig MX www.google.it</dt>
3190 <dd>Chiede un campo in particolare, in questo caso il
3193 <dt>dig ANY www.google.it</dt>
3195 <dd>Chiede tutti i campi, non solo i campi
3198 <dt>dig -x 74.125.43.104</dt>
3200 <dd>Effettua una richiesta inversa: dall'IP al PTR
3205 <div class="section" id="resolv-conf">
3206 <h2><a class="toc-backref" href=
3207 "#id60">5.7 resolv.conf</a></h2>
3209 <p>Il file <tt class=
3210 "docutils literal">/etc/resolv.conf</tt> contiene le
3211 impostazioni sul dns usato dal sistema, in genere anche
3212 altre applicazioni che devono effettuare query DNS leggono
3213 resolv.conf per conoscere l'ubicazione del DNS.</p>
3215 <p>/etc/resolv.conf:</p>
3219 <li><tt class="docutils literal">nameserver</tt>:
3220 indica il nameserver da utilizzare, indicato con
3221 l'indirizzo IP.</li>
3223 <li><tt class="docutils literal">domain</tt>: indica il
3224 nome di dominio della rete attuale, vedi voce
3227 <li><tt class="docutils literal">search</tt>: nome di
3228 dominio usato dalla rete sul quale cercare gli hosts.
3229 Ad esempio se impostato su <tt class=
3230 "docutils literal">piffa.net</tt> pingando l' host
3231 <tt class="docutils literal">bender</tt> viene
3232 automaticamente fatto un tentativo di ricerca per
3234 "docutils literal">bender.piffa.net</tt>.</li>
3238 <p>Predisponendo l'infrastruttura di rete della vostra LAN
3239 e' consigliabile impostare sempre almeno un DNS cache sul
3240 vostro server locale per i vari client. In questo modo in
3241 caso di malfunzionamento del DNS o necessita' di
3242 intervenire / sostituire i DNS non sara' piu' necessario
3243 dover reimpostare ogni singolo client della LAN: bastera'
3244 intervenire sul server DNS cache, ad esempio per utilizzare
3245 un nuovo forwarder, o modificare al volo un record DNS. La
3246 modifica, anche detta <em>mascheramento</em>, di un record
3247 come il <em>server smtp</em> o un <em>MX</em> potrebbe
3248 tirarvi rapidamente fuori dai guai nel caso di un problema
3249 improvviso con la posta elettronica o qualunque altro
3250 servizio che possiate reindirizzare col DNS.</p>
3252 <p>Utilizzare un server DHCP e una DNS cache come
3253 <tt class="docutils literal">Dnsmasq</tt> possono
3254 permettervi di risolvere al volo molte delle problematiche
3255 relative alla configurazione della vostra LAN: ad esempio
3256 dover intervenire manualmente su decine di client per
3257 modificare le impostazioni di SMTP | gateway | DNS |
3260 <p>Si veda anche la pagina man di resolv.conf.</p>
3262 <div class="warning">
3263 <p class="first admonition-title">Avvertenza</p>
3265 <p class="last">Attenzione: se si usa un client DHCP, ppp
3266 (ADSL compresa) o simile questo file potrebbe' essere
3267 riscritto automaticamente in base a quanto ottenuto dal
3268 DHCP. Si veda la documentazione del pacchetto <tt class=
3269 "docutils literal">resolvconf</tt>.</p>
3273 <div class="section" id="etc-hosts">
3274 <h2><a class="toc-backref" href=
3275 "#id61">5.8 /etc/hosts</a></h2>
3277 <p>Tabella statica per l'associazione tra IP e nomi di
3279 <pre class="literal-block">
3284 127.0.0.1 localhost.localdomain localhost 10.10.208.162
3285 daniela daniela.piffa.net 10.10.208.254 mirror
3286 mirror.piffa.net 91.191.138.15 thepiratebay.org
3287 192.168.0.11 chrome chrome.mydomain.com
3290 <p>Il contenuto del file e' un associazione tra un
3291 <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3292 es: <tt class="docutils literal">mirror</tt> o veri e propi
3293 nomi di dominio <tt class=
3294 "docutils literal">mirror.piffa.net</tt>. Si puo inserire
3295 un nome semplice come <em>casa</em> per riferirsi ad un
3296 host che si ha necessita' di contattare spesso, oppure
3297 mappare un nome di dominio completo su un indirizzo IP.</p>
3299 <p>Il problema e' la gestione di questo file su molti
3300 hosts: quando gli host cambiano IP si devono aggiornare
3301 manualmente i records, operazione in se' non
3302 particolarmente gravosa ma che andra' fatta per ogni client
3303 della vostra LAN. Un metodo semplice per distribuire questo
3304 file e' utilizzare <tt class=
3305 "docutils literal">Dnsmasq</tt>: questo infatti legge e
3306 onora il file <tt class="docutils literal">hosts</tt> che
3307 avete prodotto e lo rende disponibile ai clients tramite le
3310 <p>Dnsmasq lavora come un server DNS, i vostri client lo
3311 interrogheranno per tradurre nomi di host e domini in
3312 indirizzi IP, risolvendo il problema della
3313 <em>distribuzione</em> del file <tt class=
3314 "docutils literal">hosts</tt> tra molteplici clients.
3315 Infatti il servizio DNS indica appunto una <em>directory
3316 distribuita</em> per la risoluzione dei nomi di dominio,
3317 risolvendo i problemi dell'aggiornamento e diffusione dei
3318 continui cambiamenti di questa.</p>
3320 <p>Modificare la risoluzione di un nome di dominio
3321 esistente (ad esempio riconducendola a un IP interno) e' un
3322 modo drastico e funzionale per <em>annullarlo</em>
3323 rendendolo non disponibile alla propria rete locale. Ad
3324 esempio aggiungere al file <tt class=
3325 "docutils literal">/etc/hosts</tt>:</p>
3326 <pre class="literal-block">
3327 127.0.0.1 www.facebook.com
3330 <p>Impedira' agli utenti della LAN di raggiungere
3331 <em>facebook</em>, ora reindirizzato a <tt class=
3332 "docutils literal">localhost</tt>.</p>
3334 <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3335 server HTTP pubblico usato per i downloads (ad esempio un
3336 mirror della propia distribuzione come <tt class=
3337 "docutils literal">ftp.it.debian.org</tt>) a un equivalente
3338 mirror creato all'interno della rete locale, riducendo il
3339 traffico verso l'esterno e aumentando notevolmente la
3340 velocita' di scaricamento.</p>
3343 <div class="section" id="hostname">
3344 <h2><a class="toc-backref" href=
3345 "#id62">5.9 Hostname</a></h2>
3347 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3348 (e modificabile) con il comando <tt class=
3349 "docutils literal">hostname</tt>. Quando utilizzate a una
3350 shell su un host in genere l'hostname compare nel prompt
3353 <p>Per visualizzare il nome dell'host su cui si sta
3354 operando si digiti semplicemnte <tt class=
3355 "docutils literal">hostname</tt>, lo stesso comando con un
3356 oggetto modifica temporaneamente il nome dell'host. Per
3357 modificare in modo permanente il nome del computer si
3358 modifichi il contenuto del file <tt class=
3359 "docutils literal">/etc/hostname</tt>.</p>
3361 <p>Si faccia attenzione a non aver un hostname puramente
3362 numerico: ad es. <tt class="docutils literal">161</tt>. E'
3363 opportuno che il nome sia comunque un alfanumerico:
3364 <tt class="docutils literal"><span class=
3365 "pre">host-161</span></tt> o simile.</p>
3367 <div class="section" id="fqdn">
3368 <h3><a class="toc-backref" href=
3369 "#id63">5.9.1 FQDN</a></h3>
3371 <p>Per semplicita' gli host sono generalemente
3372 raggiungibili dall'esterno mappando il loro IP su un nome
3373 di dominio FQDN: fully qualified domain name, composto
3374 generalmente da <em>hostname</em>.``domain-name``, ad es.
3375 <em>bender</em>.``piffa.net``.</p>
3377 <p>Alcuni servizi internet fanno affidamento sul PTR
3378 dell'IP del server per cercare una conferma che il
3379 <em>servizio</em> sia veramente chi afferma di essere (ad
3382 <p>Non e' automatico che un servizio, ad esempio un
3383 server di posta, si qualifichi leggendo il contenuto del
3384 file <tt class="docutils literal">hostname</tt>
3385 aggiungendo come suffisso il dominio della rete di cui fa
3386 parte l' host: a volte questo parametro puo' essere
3387 specificato nel file di configurazione del servizio:</p>
3388 <pre class="literal-block">
3389 * Squid (HTTP proxy): ``visible_hostname``
3391 * Postfix (SMTP server): ``myhostname``
3394 <p>I motivi sono diversi, senza entrare nel dettaglio dei
3395 vari protocolli si pensi comunque che un host ha sempre
3396 un solo nome, ma puo' avere un numero variabile di
3397 <em>device di rete</em> sia fisici che virtuali con
3398 relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3404 <div class="section" id="dnsmasq">
3405 <h1><a class="toc-backref" href=
3406 "#id64">6 DNSmasq</a></h1>
3408 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3409 forwarder, server DHCP, e' caratterizzato dalla facilita' di
3410 configurazione, limitato uso di risorse, adattabilita' a
3411 connessioni <em>dinamiche</em> come ADSL o altre punto a
3412 punto (anche via cellulari) per condividere rapidamente la
3413 rete (cosa molto utile se ci dovesse trovare a ridare
3414 connettetivita' a una rete momentaneamente sprovvista), dalla
3415 possibilita' di modificare rapidamente i record DNS serviti
3416 alla rete anche grazie alla distribuzione del file <tt class=
3417 "docutils literal">/etc/hosts</tt> locale. Puo' essere anche
3418 utilizzato come <cite>server per il boot da rete
3419 <http://www.debian-administration.org/articles/478>_</cite>
3422 <p>Dnsmasq e' un interessante alternativa all'uso del server
3423 DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3424 autoritativo) accompagnato dal server DHCPd. I vantaggi
3428 <li>Leggerezza: puo' essere fatto girare su una macchina
3429 relativamente debole in caso di bisogno.</li>
3431 <li>Rapidita' di configurazione (in particolare per servire
3432 dei record A / MX alla rete, modificando al volo i valori
3433 originali ospitati sul server DNS pubblico).</li>
3435 <li>Ben integrato con connessioni PPP : e' ingrado di
3436 rilevare i cambiamenti dei dns suggeriti e impostarli come
3437 forwarders (utile se dovete rendere disponibile rapidamente
3438 una connessione a internet a una rete in difficolta').</li>
3441 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3442 particolare quando si deve intervenire in una rete
3443 pre-esistente in cui il server principale e' in crisi: si
3444 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3445 <em>mascherare</em> i servizi al momento non disponibili.
3446 Molto utile per scopi didattici, sopratutto per testare
3447 server SMTP impostando al volo i campi MX per nomi di dominio
3450 <div class="section" id="configurazione">
3451 <h2><a class="toc-backref" href=
3452 "#id65">6.1 Configurazione</a></h2>
3454 <p>Vediamo alcune direttive di basi del file di
3455 configurazione <tt class=
3456 "docutils literal">/etc/dnsmasq.conf</tt> utili per la
3457 configurazione sia del DNS cache che per il DHCP
3460 <dl class="docutils">
3461 <dt>domain-needed</dt>
3463 <dd>Non inoltrare query ai server DNS esterni per nomi
3464 semplici (es andrea, portatile, pippo) che verranno
3465 risolti solo in locale o causeranno direttamente una
3466 risposta <em>not found</em> .</dd>
3470 <dd>Simile alla voce precedente ma per i reverse
3475 <dd>Nome di dominio della rete da passare ai client.</dd>
3477 <dt>expand_hosts</dt>
3479 <dd>Aggiunge il <tt class="docutils literal">nome
3480 host</tt> ( <tt class=
3481 "docutils literal">/etc/hostname</tt>) dei client al nome
3482 di dominio per qualificarli in rete, senza bisogno di
3483 dover comporre a un elenco statico di record nel file
3484 <tt class="docutils literal">/etc/hosts</tt> o nello
3485 stesso file di configurazione di dnsmasq. Es: se un
3486 vostro client si chiama <tt class=
3487 "docutils literal">chrome</tt> e il vostro dominio
3488 <tt class="docutils literal">piffa.net</tt> dnsmasq
3489 rendera' disponibile il campo <em>A</em> per il dominio
3490 <tt class="docutils literal">chrome.piffa.net</tt>
3491 diretto all'ip che verra' assegnato al client.</dd>
3495 <div class="section" id="dhcp">
3496 <h2><a class="toc-backref" href=
3497 "#id66">6.2 DHCP</a></h2>
3499 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3500 al file di configurazione il <em>range</em> degli IP che si
3501 vuole assegnare ai client con il <em>lease time</em> (tempo
3502 di rilascio: quanto a lungo saranno validi gli IP
3503 assegnati) espresso in ore.</p>
3505 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3506 presente <strong>un solo server DHCP</strong>, o per meglio
3507 dire qualunque server DHCP ascolta sul broadcast <tt class=
3508 "docutils literal">255.255.255.255</tt> e potrebbe
3509 rispondere a un pacchetto di richiesta DHCP. Quindi non
3510 fate partire inavvertitamente un server DHCP in una rete
3511 gia' servita e <strong>non vi azzardate ad andare in giro
3512 con un portatile con un server DHCP attivo</strong> nelle
3513 reti altrui. Questo vale anche per i laboratori di
3514 informatica dei corsi di reti: non fate partire il vostro
3515 server DHCP se siete collegati alla rete interna!</p>
3517 <p>/etc/dnsmasq.conf (riga 118):</p>
3518 <pre class="literal-block">
3519 dhcp-range=192.168.0.20,192.168.0.50,24h
3523 <div class="section" id="dns-cache">
3524 <h2><a class="toc-backref" href=
3525 "#id67">6.3 DNS cache</a></h2>
3527 <p>Dnsmasq lavora di default come cache dns: inserire al
3528 file <tt class="docutils literal">/etc/resolv.conf</tt> il
3529 nameserver localhost in cima alla lista dei
3530 <em>nameserver</em> disponibili.</p>
3533 nameserver 127.0.0.1
3536 <p>Questo pero' potrebbe essere problematico se un altro
3537 servizio, ad esempio il DHCP client, riscrive il contenuto
3539 "docutils literal">/etc/resolv.conf</tt>. Per superare il
3540 problema si aggiunga (riga 20) al file di configurazione
3542 "docutils literal">/etc/dhcp3/dhclient.conf</tt></p>
3543 <pre class="literal-block">
3544 prepend domain-name-servers 127.0.0.1;
3547 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3548 (per la connessione ADSL) a intervenire sul file <tt class=
3549 "docutils literal">//etc/resolv.conf</tt>, si modifichi
3550 quindi <tt class="docutils literal"><span class=
3551 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3552 <tt class="docutils literal">usepeerdns</tt>. Se la vostra
3553 connessione ad internet e' ADSL raramente dovreste aver
3554 bisogno di cambiare i DNS una volta impostati (a meno che
3555 non usiate un portatile!).</p>
3559 <div class="section" id="bind-dns-autoritativo">
3560 <h1><a class="toc-backref" href=
3561 "#id68">7 Bind : DNS Autoritativo</a></h1>
3563 <p>Le soluzioni viste possono bastare per la rete locale o
3564 per fare delle prove, ma prima o poi verra' il momento in cui
3565 si e' chiamati a gestire dei domini su internet: lo standard
3566 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3569 <p>Installare i pacchetti:</p>
3570 <pre class="literal-block">
3574 <div class="section" id="id5">
3575 <h2><a class="toc-backref" href=
3576 "#id69">7.1 DNS cache</a></h2>
3578 <p>Bind appena installato funzionera' come DNS cache: si
3579 faccia un test con un <tt class="docutils literal">dig
3580 @localhost</tt> . Bind a differenza di Dnsmasq e' autonomo:
3581 non ha bisogno di forwardare (inoltrare) le query a un DNS
3582 esterno: queste verranno risolte direttamente da Bind
3583 partendo dai <em>DNS root servers</em>.</p>
3585 <p>E' comunque possibile impostare dei DNS forwarders,
3586 tipicamente i DNS server forniti dal proprio provider, per
3587 velocizzare le query:</p>
3589 <p>/etc/bind/named.conf.options (riga 13):</p>
3590 <pre class="literal-block">
3596 <p>Nel caso si voglia usare Bind solo come server DNS cache
3597 per la propria LAN senza ospitare delle zone DNS pubbliche
3598 sara' il caso di limitare gli accessi al server alla sola
3601 <p>/etc/bind/named.conf.options (riga 19):</p>
3602 <pre class="literal-block">
3603 // Se il proprio server ha IP 10.10.208.254
3604 // sulla rete LAN privata:
3605 listen-on { 10.10.208.254; }
3608 <p>E non si lasci il server in ascolto su uno degli
3609 eventuali indirizzi IP pubblici.</p>
3611 <p>Se questo non fosse possibile si puo' sempre lavorare su
3612 una <em>acl</em>:</p>
3614 <p>/etc/bind/named.conf</p>
3615 <pre class="literal-block">
3617 10.10.208.0/24 ; 127.0.0.0/8 ;
3621 <p>Per poi aggiungere all'interno della stanza options la
3622 direttiva che abilita' l'entita' <tt class=
3623 "docutils literal">localnet</tt>:</p>
3625 <p>/etc/bind/named.conf.options</p>
3626 <pre class="literal-block">
3627 allow-query {"localnet" ;} ;
3631 <div class="section" id="ospitare-una-zona">
3632 <h2><a class="toc-backref" href=
3633 "#id70">7.2 Ospitare una zona</a></h2>
3635 <p>Se avete acquistato un nome di dominio e vi serve un
3636 software DNS per gestirlo Bind e' la scelta piu' diffusa.
3637 Ora vedremo come configurare una <em>zona</em> (come
3638 piffa.net) in modo che Bind sia autoritativoper questa,
3639 rispondendo alle query DNS di tutta la rete internet.</p>
3641 <div class="section" id="named-conf-local">
3642 <h3><a class="toc-backref" href=
3643 "#id71">7.2.1 named.conf.local</a></h3>
3645 <p>Prima di tutti impostiamo il server bind per gestire
3646 la zona, per non fare confusione e' opportuno inserire le
3647 propie zone DNS nel file <tt class=
3648 "docutils literal">named.conf.local</tt> e non in
3649 <tt class="docutils literal">named.conf</tt>.</p>
3651 <p>named.conf.local:</p>
3652 <pre class="literal-block">
3654 // Do any local configuration here
3657 // Consider adding the 1918 zones here, if they are not used in your
3659 //include "/etc/bind/zones.rfc1918";
3663 file "/etc/bind/pz/piffa.net";
3667 <dl class="docutils">
3668 <dt>type master</dt>
3670 <dd>Il nostro server DNS sara' il principale, al quale
3671 poi potremo affiancare dei DNS secondari nel caso
3672 questo non sia disponibile.</dd>
3674 <dt>file "/etc/bind/pz/piffa.net"</dt>
3676 <dd>Dove verranno inserite le informazioni vere e
3677 propie di questa zona.</dd>
3681 <div class="section" id="configurazione-della-zona">
3682 <h3><a class="toc-backref" href=
3683 "#id72">7.2.2 Configurazione della
3686 <p>Ora dovremo preparare il file contenente i record DNS
3687 della zona <em>piffa.net</em>, come abbiamo indicato
3688 prima questi saranno contenuti nel file <tt class=
3689 "docutils literal">/etc/bind/pz/piffa.net</tt> . Tenere
3690 le zone dentro una sottocartella e' buona abitudine,
3691 usare <tt class="docutils literal">pz</tt> per queste e'
3692 una vecchia abitudine.</p>
3695 <pre class="literal-block">
3696 ; Zona per il dominio di secondo livello piffa.net
3699 @ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
3701 8H ; refresh (8 hours)
3702 2H ; retry (2 hours)
3703 4W ; expire (4 weeks)
3704 1D ; minimum (1 day)
3711 TXT "Piffanet main site"
3717 test.piffa.net. A 94.23.63.105
3718 *.piffa.net. A 94.23.63.105 ; *catch all domain
3723 <p>All'interno di questo file si possono inserire dei
3724 commenti con il carattere <tt class=
3725 "docutils literal">;</tt> (punto-e-virgola), si faccia
3726 attenzione alla rigida sintassi: apertura e chiusura
3727 delle parentesi tonde nella parte <tt class=
3728 "docutils literal">IN SOA</tt>, uso del <tt class=
3729 "docutils literal">punto</tt> finale per precisare un
3730 nome di dominio specifico (<em>FQDN</em>: Fully-qualified
3731 Domain Name) come <tt class=
3732 "docutils literal">test.piffa.net.</tt> a differenza
3733 degli altri domini di terzo livello come <tt class=
3734 "docutils literal">pop,imap,smtp</tt> .</p>
3736 <p>La zona inizia con una direttiva <tt class=
3737 "docutils literal">$TTL 3D</tt> (RFC 2308) che indica la
3738 durata (in questo caso tre giorni) che ogni record
3739 dovrebbe avrebbe nella cache degli altri serber DNS.
3740 Questo valore dovrebbe essere superiore a un giorno, se
3741 non modificate spesso i valori dei vostri record DNS e'
3742 consigliabile settarlo a 2/3 settimane in modo da
3743 limitare la frequenza delle query al propio server.
3744 Questo parametro puo' essere modificato per singoli
3746 <pre class="literal-block">
3747 $TTL 3D ; 3 giorni: default se non specificato altrimenti
3748 rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
3749 lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
3750 normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
3753 <p>Segue poi il nome della zona, indicato con la
3754 <tt class="docutils literal">@</tt> per richiamare la
3755 zona originale precisata nel file <tt class=
3756 "docutils literal">named.conf.options</tt> . Segue il
3757 campo <tt class="docutils literal">SOA</tt>.</p>
3759 <div class="section" id="soa-start-of-authority-record">
3760 <h4><a class="toc-backref" href=
3761 "#id73">7.2.2.1 SOA: Start of
3762 Authority Record</a></h4>
3764 <p>Il record SOA puo' comparire solo una volta in una
3765 zona, contiene informazioni relative all'autorita' del
3768 <dl class="docutils">
3769 <dt>ns1.piffa.net. name-server</dt>
3771 <dd>primary master DNS di questo dominio.</dd>
3773 <dt>hostmaster.piffa.net. email-addr</dt>
3775 <dd>email-addr: indirizzo email della persona
3776 responsabile di questa zona, il primo punto viene
3777 tradotto in una <em>chiocciola</em> <tt class=
3778 "docutils literal">@</tt> dato che questo carattere
3779 ha un'altro utilizzo all'interno di questo file. Il
3780 referente della zona <strong>deve</strong> essere un
3781 email valido e controllato, come consuetudine si usa
3783 "docutils literal">hostmaster@dominio.tilde</tt>
3786 <dt>200905245 serial number</dt>
3788 <dd>Questo valore serve per indicare quando e' stato
3789 modificato questo file di configurazione, secondo il
3790 formato <tt class="docutils literal">yyyymmddss</tt>:
3791 <tt class="docutils literal">yyyy</tt> = anno, ''mm''
3792 = mese, ''dd'' = giorno, ''ss'' = seriale. Il seriale
3793 che deve essere sempre specificato anche per una
3794 cifra, va incrementato di una unita' nel caso vengano
3795 fatte piu' modifiche <em>nello stesso
3800 <dd>Indica ai DNS secondari quanto tempo attendere
3801 per cercare di aggiornare i loro dati con il DNS
3806 <dd>Intervallo di tempo per il DNS slave (secondario)
3807 da aspettare prima di cercare di ricontattare il
3808 <em>master</em> in caso di problemi col
3809 <em>refresh</em>.</dd>
3813 <dd>Indica quando i dati dei dns secondarinon sono
3814 piu' autoritativi in caso di impossibilita' degli
3815 <em>slaves</em> di ri-aggiornarsi con il
3816 <em>master</em>. Consigliato un valore di 2/4
3821 <dd>Questo valore indicava il TTL fino alla versione
3822 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3823 durata del <em>negative caching</em>, quanto i
3824 resolvers (ad esempio un server dns cache) puo'
3825 mantenere un record <em>negativo</em> (che non indica
3826 la corrispondenza tra un nome di dominio e un ip, ma
3827 la non esistenza del record). Nell'uso per il
3828 negative caching viene fissato un valore massimo di 3
3829 ore dalla RFC 2308.</dd>
3833 <div class="section" id="altri-campi">
3834 <h4><a class="toc-backref" href=
3835 "#id74">7.2.2.2 Altri campi:</a></h4>
3837 <p>All'interno della zona possono essere utilizati vari
3838 tipi di records (RR):</p>
3840 <dl class="docutils">
3843 <dd>Informazioni testuali associate ad un record</dd>
3847 <dd>Name Server della zona. Non deve essere un
3852 <dd>Indirizzo ipv4 da associare al record</dd>
3856 <dd>Indirizzo ipv6 da associare al record</dd>
3860 <dd>Canonical Name: un alias per un host: ad esempio
3861 per il dominio piffa.net possiamo settare degli alias
3862 come <tt class="docutils literal">www.piffa.net,
3863 http.piffa.net, virtual.piffa.net, ftp.piffa.net,
3864 imap.piffa.net</tt>. Comodo quando diversi alias sono
3865 sempre riferiti allo stesso ip.</dd>
3869 <dd>Mail Exchanger: server di posta che si occupera'
3870 della posta elettronica per questo dominio.E'
3871 opportuno avere almeno un server di posta di back-up,
3872 per indicare la priorita' di un MX rispettoad un
3873 altro si usa un valore di 2 cifre: il valore piu'
3874 basso indica priorita' piu' bassa. Es: <tt class=
3875 "docutils literal">MX 10
3876 smtp.piffa.net.</tt> per il server SMTP principale e
3878 "docutils literal">MX
3879 40 smtp2.piffa.net</tt> per il secondario. Non deve
3880 essere un cname.</dd>
3884 <dd>Reverse look-up, usato per la mappatura inversa
3885 di un indirizzo ip a una stringa identificativa
3886 dell'host. Si noti che per poter modificare questi
3887 record si deve avere <em>in gestione</em> la <em>zona
3888 IP</em>, se cosi' non fosse si dovra' chiedere al
3889 propio provider la modifica di questo record per il
3890 propio ip. Links: <a class="reference external" href=
3891 "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
3897 <div class="section" id="dns-slave">
3898 <h2><a class="toc-backref" href=
3899 "#id75">7.3 DNS slave</a></h2>
3901 <p>Data l'importanza del servizio DNS e' necessario avere
3902 ridondanza per i server DNS che ospitano i vostri dati: in
3903 caso di indisponibilita' del server <em>master</em> (nel
3904 caso fosse il solo a tenere i dati questo comporterebbe la
3905 <em>scomparsa</em> di tutti i servizi / host da esso
3906 seviti!) il client potrebbe contattare uno degli
3909 <p>Gli slave recuperano i dati dei recordos RR direttamente
3910 dal master e non sara' quindi necessario dover mantenere
3911 manualmente il file di configurazione della zona sugli
3912 slaves, ogni volta che aggiorneremo il master questi dati
3913 si propaghera' agli slaves automaticamente.</p>
3915 <p>Per attivare uno <em>slave</em> per la nostra zona di
3916 esempio <tt class="docutils literal">piffa.net</tt> si
3917 inserisca nel file <tt class=
3918 "docutils literal">named.conf.local</tt> dello slave
3920 <pre class="literal-block">
3923 file "/etc/bind/pz/piffa.net";
3924 masters { 192.168.0.1; };
3928 <p>Facendo ripartire Bind il file <tt class=
3929 "docutils literal">/etc/bind/pz/piffa.net</tt> viene creato
3930 automaticamente.</p>
3932 <p>Segue un estratto di <tt class=
3933 "docutils literal">/var/log/syslog</tt> al <tt class=
3934 "docutils literal">restart</tt> di <tt class=
3935 "docutils literal">bind9</tt> sullo slave:</p>
3936 <pre class="literal-block">
3937 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
3938 ... slave named[2256]: running
3939 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
3940 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
3941 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
3944 <div class="warning">
3945 <p class="first admonition-title">Avvertenza</p>
3947 <p class="last">Bind9 (versione 9.3 presente in Debian
3948 Lenny) richiede una esplicita autorizzazione alla
3949 notifica per lo stesso server slave, che in fase di avvio
3950 interroghera' (inviando un notify) se' stesso per
3951 valutare se i dati relativi alla zona di cui e' slave
3952 sono aggiornati. Si aggiunga quindi al file <tt class=
3953 "docutils literal">/etc/bind/named.conf.options</tt>
3954 dello slave: <tt class="docutils literal"><span class=
3955 "pre">allow-notify</span> { 192.168.0.1; };</tt>
3956 all'interno della stanza <tt class=
3957 "docutils literal">options</tt>, in cui l'inidirizzo IP
3958 inserito e' quello dello stesso slave server.</p>
3962 <div class="section" id="aggiornamento-dinamico-nsupdate">
3963 <h2><a class="toc-backref" href=
3964 "#id76">7.4 Aggiornamento dinamico:
3967 <p>Dalla versione 8 di Bind e' dsponibile l'utility
3968 <tt class="docutils literal">nsupdate</tt> (disponibile nel
3969 pacchetto <tt class="docutils literal">dnsutils</tt>) per
3970 aggiornare automaticamente i record di una zona secondo il
3971 paradigma client / server ( RFC2136 ) . Posto che abbiate a
3972 disposizione un server DNS Bind on-line su un indirizzo IP
3973 fisso e un zona da gestire (che potrebbe essere anche solo
3974 la delega di un dominio di terzo livello come
3975 <em>casa.miodominio.net</em>) sara' possibile aggiornare
3976 automaticamente i record che tirano a degli indirizzi IP
3977 <em>pubblici ma dnamici</em>, come quelli spesso messi a
3978 disposizione dei provider per le connessioni ad internet
3979 residenziali, in modo da poter rendere sempre raggiungibile
3980 la vostra workstation a casa anche dopo un aggiornamento
3981 dell'ip dinamico associato alla connessione.</p>
3983 <p>L'auenticazione del client nsupdate che avra' la
3984 possibilita' di aggiornare il server DNS master avviene
3985 tramite <em>Transaction signatures</em> (TSIG, RFC2845)
3986 usando un algoritmo di criptazione dati asimmetrico
3987 <em>HMAC-MD5</em> : generata una coppia di chiavi sul
3988 client / nsupdate con l'utility si dovra' trasferire la
3989 chiave pubblica sul server <em>master</em>, che verra'
3990 configurato per onorare gli aggiornamenti (eliminazione e
3991 inserimento di record RR) autenticati dalla chiave
3994 <div class="section" id="configurazione-client-nsupdate">
3995 <h3><a class="toc-backref" href=
3996 "#id77">7.4.1 Configurazione client
3999 <p>Sul client, sul quale non deve essere necessariamente
4000 installato un server DNS Bind ma la sola utility
4001 <tt class="docutils literal">nsupdate</tt>, generiamo la
4002 coppia di chiavi con l'utility <tt class=
4003 "docutils literal"><span class=
4004 "pre">dnssec-keygen</span></tt> installabile tramite il
4005 pacchetto <tt class=
4006 "docutils literal">bind9utils</tt>:</p>
4007 <pre class="literal-block">
4008 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4011 <p>Otterremo le due chiavi <tt class=
4012 "docutils literal"><span class=
4013 "pre">Khome.piffa.net.+157+04331.key</span>
4015 "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4016 chiave pubblica dovra' essere resa noto al server master
4017 che ricevera' l'update dei records.</p>
4020 <div class="section" id=
4021 "configurazione-server-riconoscimento-chiave">
4022 <h3><a class="toc-backref" href=
4023 "#id78">7.4.2 Configurazione server:
4024 riconoscimento chiave</a></h3>
4026 <dl class="docutils">
4027 <dt>Per rendere nota al server la chiave pubblica
4028 generata sul client si aggiunga quindi al file
4029 <tt class="docutils literal">/etc/bind/named.conf</tt>
4033 <dl class="first last docutils">
4034 <dt>key home.piffa.net. {</dt>
4036 <dd>algorithm HMAC-MD5; secret
4037 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4038 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4044 <p class="first admonition-title">Nota</p>
4046 <p class="last">La parte <tt class=
4047 "docutils literal">secret</tt>, che potete leggere
4048 direttamente nel file *.key della chiave genearta, e'
4049 scritto <em>tutto sulla stessa riga</em> senza ritorni
4054 <div class="section" id="server-gestione-dell-intera-zona">
4055 <h3><a class="toc-backref" href=
4056 "#id79">7.4.3 Server: gestione
4057 dell'intera zona</a></h3>
4059 <p>Sul server modifichiamo il file di configurazione
4060 <tt class="docutils literal">named.conf.local</tt> della
4061 zona della quale vogliamo concedere l'aggiornamento al
4063 <pre class="literal-block">
4066 file "/etc/bind/pz/piffa.net" ;
4073 <dl class="docutils">
4074 <dt>Sara' necessario assicurarsi che il demone di Bind
4075 sia in grado di modificare il file <tt class=
4076 "docutils literal">/etc/bind/pz/piffa.net</tt>: dato
4077 che questo file ora sara' gestito da lui si proceda a
4078 cedergli la propieta' del file::</dt>
4080 <dd>chown bind /etc/bind/pz/piffa.net</dd>
4083 <p>Altro problema che si potrebbe porre: gli orologi di
4084 sistema dei due host devono essere sincronizzati per
4085 poter valutare l'opportunita' di un aggiornamento: si
4086 consigla di installare su entrambi l'utility <tt class=
4087 "docutils literal">ntpdate</tt> e di eseguirla facendo
4088 riferimento ai time server di Debian:</p>
4089 <pre class="literal-block">
4090 apt-get install ntpdate
4094 <p>Ora possiamo provare dal client a effettuare
4095 l'iserimento di un record per testarne il
4097 <pre class="literal-block">
4098 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4099 > server ns1.piffa.net
4100 > update add home.piffa.net. 86400 A 192.168.0.2
4102 Outgoing update query:
4103 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
4104 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4106 home.piffa.net. 86400 IN A 192.168.0.1
4112 <p>Per comprendere meglio l'uso dell'utility <tt class=
4113 "docutils literal">nsupdate</tt> si consiglia la lettura
4114 della relativa pagina man. Nella prima riga viene
4115 invocato il comando <tt class=
4116 "docutils literal">nsupdate</tt> impostando col flag
4117 <tt class="docutils literal"><span class=
4118 "pre">-k</span></tt> la chiave privata generata
4119 precedentemente, con <tt class=
4120 "docutils literal">server</tt> si imposta quale server NS
4121 autoritario della zona (che abbiamo precedentemente
4122 configurato per ricevere gli aggiornamenti) vogliamo
4123 contattare. Alla riga sucessiva <tt class=
4124 "docutils literal">update</tt> viene aggiunto un record
4125 <tt class="docutils literal">A</tt> per la il dominio
4126 <tt class="docutils literal">home.piffa.net</tt>
4127 indirizzato all'IP <tt class=
4128 "docutils literal">192.168.0.2</tt>, poi <tt class=
4129 "docutils literal">show</tt> mostra quanto ci si prepara
4130 a comunicare al server con il finale <tt class=
4131 "docutils literal">send</tt> .</p>
4133 <p>Si noti che in questo modo <em>l'intera zona</em>
4134 piffa.net e suscettibile di essere modificata dal client,
4135 che potra' eliminare e inserire qualunque record. E'
4136 possibile gestire in modo piu' granulare la zona, ad
4137 esempio concedendo al client i privilegi per gestire solo
4138 una parte della zona o i tipo di record da gestire.</p>
4141 <div class="section" id=
4142 "automatizzare-l-aggiornamento-dinamico">
4143 <h3><a class="toc-backref" href=
4144 "#id80">7.4.4 Automatizzare
4145 l'aggiornamento dinamico</a></h3>
4147 <p>Nsupdate risulta comodo per tenere aggiornati i record
4148 DNS degli host connessi ad internet con indirizzi IP
4149 dinamici (pubblici) assegnati dal provider. Il client
4150 deve essere in grado di contattare autonomamente il
4151 server DNS per comunicare un cambiamento del suo ip.
4152 Vediamo innanzi tutto un primo script per nsupdate:</p>
4153 <pre class="literal-block">
4155 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4156 # prima di leggere l'IP ottenuto
4158 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4160 nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
4161 server 192.168.0.254
4162 zone home.piffa.net.
4163 update delete home.piffa.net. A
4164 update delete home.piffa.net. MX
4165 update add home.piffa.net. 432000 A $IPADDR
4166 update add home.piffa.net. 432000 MX 10 home.piffa.net.
4172 <p>Questo script legge il valore del device di rete
4173 <tt class="docutils literal">ppp0</tt> creato dal
4174 <cite>pppoe</cite> di una connessione ADSL per ottenere
4175 l'indirizzo IP ottenuto dal provider (prima di farlo
4176 aspetta 15 secondi per dare il tempo al <tt class=
4177 "docutils literal">pppoe</tt> di negoziare la
4178 connessione).Vengono poi eliminati gli esistenti valori
4179 <tt class="docutils literal">A</tt> e <tt class=
4180 "docutils literal">MX</tt> per <tt class=
4181 "docutils literal">home.piffa.net</tt> (si noti il punto
4182 finale dopo <em>net</em>) e inseriti quelli attuali.</p>
4184 <p>Resta da decidere quando richiamare questo script:
4185 l'evento che causa l'assegnazione del nuovo IP in questo
4186 caso e una nuova connessione <tt class=
4187 "docutils literal">pppoe</tt>, quindi sarebbe
4188 consigliabile inserire lo script nelle routine comprese
4189 in <tt class="docutils literal"><span class=
4190 "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4191 documentazione di ppp), nel caso questo non desse i
4192 risultati sperati (per problemi di connessione) come via
4193 estrema si consideri di mettere lo script nella routine
4194 del demone <tt class="docutils literal">cron</tt> in modo
4195 che venga eseguito periodicamente (ad esempio ogni
4200 <div class="section" id="link-suggeriti">
4201 <h2><a class="toc-backref" href=
4202 "#id81">7.5 Link suggeriti:</a></h2>
4205 <li>DNS for Rocket Scientists <a class=
4206 "reference external" href=
4207 "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4209 <li>DNS HOWTO <a class="reference external" href=
4210 "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4215 <div class="section" id="samba">
4216 <h1><a class="toc-backref" href=
4217 "#id82">8 Samba</a></h1>
4219 <p>Samba e' un progetto libero che fornisce servizi di
4220 condivisione di file e stampanti a client SMB/CIFS.</p>
4222 <p>Samba e' liberamente disponibile, al contrario di altre
4223 implementazioni SMB/CIFS, e permette di ottenere
4224 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4226 <p>Samba e' un software che puo' girare su piattaforme che
4227 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4228 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4229 il protocollo TCP/IP utilizzando i servizi offerti sul server
4230 ospite. Quando correttamente configurato, permette di
4231 interagire con client o server Microsoft Windows come se
4232 fosse un file e print server Microsoft agendo da Primary
4233 Domain Controller (PDC) o come Backup Domain Controller, puo'
4234 inoltre prendere parte ad un dominio Active Directory.</p>
4236 <div class="section" id="pacchetti">
4237 <h2><a class="toc-backref" href=
4238 "#id83">8.1 Pacchetti</a></h2>
4240 <p>Pacchetti da installare per utilizzare Samba in
4241 modalita' client <a class="footnote-reference" href="#id7"
4242 id="id6" name="id6">[2]</a></p>
4243 <pre class="literal-block">
4247 <p>Pacchetti da installare per utilizzare Samba in
4248 modalita' server:</p>
4249 <pre class="literal-block">
4250 samba smbfs smbclient
4253 <table class="docutils footnote" frame="void" id="id7"
4260 <tbody valign="top">
4262 <td class="label"><a class="fn-backref" href=
4265 <td>Anche se nato per i sistemi Windows, Samba puo'
4266 essere usato anche per montare cartelle sotto
4267 GNU/Linux come alternativa a NFS. Per la condivisione
4268 di stampanti sarebbe invece opportuno intervenire
4269 direttamente su <tt class=
4270 "docutils literal">CUPS</tt>.</td>
4275 <p>Durante la prima installazione viene chiesto il nome del
4276 gruppo di appartenenza, il default per Windows e'
4277 <tt class="docutils literal">WORKGROUP</tt>. In aula usiamo
4278 invece <tt class="docutils literal">208</tt> .</p>
4280 <p>Per riconfigurare Samba si usi il comando:</p>
4281 <pre class="literal-block">
4282 dpkg-reconfigure samba-common
4286 <div class="section" id="passwords-e-autenticazione">
4287 <h2><a class="toc-backref" href=
4288 "#id84">8.2 Passwords e
4289 autenticazione</a></h2>
4291 <p>Per poter configurare Samba in modo che usi un sistema
4292 di negoziazione degli accessi alle cartelle condivise
4293 basato su accoppiate <em>nome utente / password</em>
4294 bisogna distinguere tra 3 livelli di password (e
4295 generalmente volete usare <em>sempre la stessa
4296 password</em> per ognuno di questi) e delle differenze tra
4297 le modalita' di <em>autenticazione</em> (e quindi anche di
4298 criptaggio delle passwords) usate da sistemi GNU/Linux e
4301 <dl class="docutils">
4302 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4304 <dd>E' la password dell'<em>utente di sistema</em> che
4305 viene usata sul sistema operativo su cui gira il software
4306 Samba. E' importante tenere conto anche delle
4307 <em>user-id</em> e <em>group-id</em> degli utenti che
4308 dovranno fisicamente scrivere sui file system. Se un
4309 utente non puo' scrivere in una certa posizione del file
4310 system (ad esempio nella cartella <tt class=
4311 "docutils literal">/mnt/condivisione</tt> che sara' stata
4312 necessariamente creata inizialmente dall'utente
4313 <tt class="docutils literal">root</tt>) per mancanza dei
4314 privilegi di scrittura allora neanche Samba potra' farlo
4315 nel momento in mette a disposizione la risorsa
4316 all'utente. Se si montano file-system dedicati per le
4317 condivisioni controllare i permessi e proprieta' dei
4318 <em>punti di mount*</em>. Queste passwords sono salvate
4319 nel solito file /etc/shadow (richiamato da
4322 <dt>2 Password per l'applicativo Samba</dt>
4324 <dd>Samba deve essere compatibile con Windows e quindi
4325 utilizzare un sistema di criptazione delle password
4326 diverso da /etc/shadow . Le password per Samba possono
4327 essere gestite ad esempio col comando <tt class=
4328 "docutils literal">smbpasswd</tt> e vengono generalmente
4329 salvate all'interno di <tt class=
4330 "docutils literal">/var/lib/samba/passdb.tdb</tt> .</dd>
4332 <dt>3 Password per Windows.</dt>
4334 <dd>Gli utenti Windows effettuano il log-in alla partenza
4335 della sessione di Windows. Se si avra' l'accortezza di
4336 usare sempre la <em>stessa password</em> data
4337 precedentemente anche a Windows (o viceversa impostare la
4338 password per GNU/Linux / Samba uguale a quella di
4339 Windows) l'utente potra' accedere automaticamente alle
4340 condivisioni a lui disponibili.</dd>
4344 <div class="section" id="creazione-utenti">
4345 <h2><a class="toc-backref" href=
4346 "#id85">8.3 Creazione Utenti</a></h2>
4348 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4349 attenzione a <em>non dargli una shell di sistema</em>. Gli
4350 utenti Windows che accedono al server solo per le
4351 condivisioni non hanno bisogno di poter eseguire comandi
4354 <p>Creazione di un utente denominato sambo:</p>
4355 <pre class="literal-block">
4356 adduser --shell /bin/false sambo
4359 <p>Nel file <tt class="docutils literal">/etc/passwd</tt>
4360 avremo qualcosa come:</p>
4361 <pre class="literal-block">
4362 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4365 <p>Aggiunta dell'utente al database delle password per
4366 Samba e generazione della sua password:</p>
4367 <pre class="literal-block">
4371 <p>Se successivamente si vorra' modificare la password di
4372 un utente gia' esistente si usi:</p>
4373 <pre class="literal-block">
4377 <p>La password sotto Windows verra' modificata sul sistema
4381 <div class="section" id="creare-la-condivisione">
4382 <h2><a class="toc-backref" href=
4383 "#id86">8.4 Creare la
4384 condivisione</a></h2>
4386 <p>La condivisione altro non e' che una cartella sul server
4387 che viene resa disponibile ai client negoziando l'accesso
4388 in base a una autenticazione basata su <em>user-name /
4389 password</em>. E' per altro possibile permettere l'accesso
4390 a una risorsa a chiunque indiscriminatamente (a tutti i
4391 <tt class="docutils literal">guest</tt>) ma la cosa e'
4392 sconsigliabile dal punto di vista della sicurezza. Si
4393 decida se la cartella condivisa debba risiedere nella
4394 <em>home</em> di un utente (nel caso quest'ultimo ne sia
4395 l'unico fruitore) o in una cartella in /mnt/ (nel caso piu'
4396 utenti accedano a questa). Nel secondo caso si potranno
4397 gestire gli accessi sotto GNU/Linux tramite i gruppi.</p>
4399 <p>Creazione della risorsa sambo_share nella home
4400 dell'utente sambo:</p>
4401 <pre class="literal-block">
4402 # mkdir /home/sambo/sambo_share
4403 # chown sambo:sambo /home/sambo/sambo_share/
4406 <div class="section" id=
4407 "sicurezza-permessi-di-esecuzione-sul-server">
4408 <h3><a class="toc-backref" href=
4409 "#id87">8.4.1 Sicurezza: permessi di
4410 esecuzione sul server</a></h3>
4412 <p>Bisognerebbe notare sul server i permessi di
4413 esecuzione del file-system che ospita la cartella da
4414 condividere. Se i file che saranno contenuti nella
4415 condivisione saranno da usarsi sotto Windows non c'e'
4416 motivo che questi siano eseguibili sotto GNU/Linux. Si
4417 potrebbe avere quindi, ipotizzando una condivisione in
4418 <tt class="docutils literal">/mnt/share</tt> che risieda
4419 su di un file system dedicato:</p>
4421 <p><tt class="docutils literal">/etc/fstab</tt></p>
4424 /dev/hda10 /mnt/share ext3 rw,
4425 <strong>nosuid,noexec</strong> 0 3
4428 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4429 possibilita' di eseguire programmi con credenziali
4434 <div class="section" id=
4435 "configurazione-dell-applicativo-samba-vero-e-proprio">
4436 <h2><a class="toc-backref" href=
4437 "#id88">8.5 Configurazione
4438 dell'applicativo Samba vero e proprio.</a></h2>
4440 <p>Avendo preparato gli utenti (ancora una volta: non si
4441 dia una shell completa a un utente che serve solo per Samba
4442 o la posta elettronica) e la cartella sul file system si
4443 puo' procedere a configurare la condivisione su Samba.</p>
4445 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4446 vim si usi 235gg ):</p>
4447 <pre class="literal-block">
4449 # Percorso della cartella condivisa
4450 path = /home/sambo/sambo_share
4451 # Se gli utenti possono scrivere / modificare file
4453 # Negoziazione degli accessi su base utenti / passwords
4456 # #######################################
4457 # Altri parametri opzionali di interesse
4458 # Se posso vedere la condivisione da esplora risorse
4459 # anche se non ho i privilegi per accedervi.
4461 # Commento indicativo della risorsa
4462 comment = Condivisione per Sambo
4465 <p>Dopo aver salvato il file si puo' fare un primo
4466 controllo tramite l'utility <tt class=
4467 "docutils literal">testparm</tt> , che controlla la
4468 sintassi del file di configurazione di Samba. Se questo non
4469 rileva problemi si puo' procedere a un <tt class=
4470 "docutils literal"># /etc/init.d/samba restart</tt> .</p>
4472 <div class="section" id="creazione-di-un-gruppo">
4473 <h3><a class="toc-backref" href=
4474 "#id89">8.5.1 Creazione di un
4477 <p>Se si deve condividere una risorsa con un numero
4478 consistente di utenti e' consigliabile lavorare in
4479 termini termini di gruppi piuttosto che elencare la lista
4480 degli utenti in <tt class="docutils literal">valid
4483 <p>Dopo aver creato il gruppo del quale volete facciano
4484 parte i vostri utenti (<tt class=
4485 "docutils literal">addgroup nome_gruppo</tt>), inserite i
4486 vostri utenti nel gruppo (<tt class=
4487 "docutils literal">adduser nome_utente nome_gruppo</tt>)
4488 e modificate la direttiva <tt class=
4489 "docutils literal">valid users</tt> in <tt class=
4490 "docutils literal">smb.conf</tt> per riferirsi ad un
4491 gruppo piuttosto che a degli utenti. Per riferirsi a un
4492 gruppo si usi il carattere <tt class="docutils literal">@
4493 chicciola</tt> col <tt class=
4494 "docutils literal">nome_del_gruppo</tt>:</p>
4495 <pre class="literal-block">
4496 # Negoziazione degli accessi su base gruppo
4497 valid users = @nome_gruppo
4502 <div class="section" id="testare-il-servizio">
4503 <h2><a class="toc-backref" href=
4504 "#id90">8.6 Testare il Servizio</a></h2>
4506 <p>Come testare il servizio</p>
4509 <pre class="literal-block">
4510 smbclient -U sambo -L localhost
4513 <p>Questo comando permette di esplorare la risorsa
4514 qualificandosi come utente, in questo modo potete testare
4515 il corretto funzionamento dell'autenticazione. Si provi
4516 inizialmente a sbagliare la password deliberatamente, poi a
4517 inserirla correttamente: dovrebbero essere visibili le
4518 risorse disponibili al solo utente sambo: la suo /home e la
4519 cartella samba_share:</p>
4520 <pre class="literal-block">
4521 Sharename Type Comment
4522 --------- ---- -------
4523 sambo_share Disk Condivisione per Sambo
4524 print$ Disk Printer Drivers
4525 IPC$ IPC IPC Service (base server)
4526 sambo Disk Home Directories
4529 <p>In particolare l'ultima voce relativa alla home
4530 directory dell'utente dovrebbe essere visibile solo agli
4531 utenti autenticati.</p>
4533 <p>In alternativa e' possibile montare realmente la
4534 condivisone anche su GNU/Linux tramite un client per samba
4535 e testarne il corretto funzionamento:</p>
4536 <pre class="literal-block">
4537 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4542 <div class="section" id="server-di-posta-postfix">
4543 <h1><a class="toc-backref" href=
4544 "#id91">9 Server di posta: Postfix</a></h1>
4546 <p>Il server di posta che prenderemo in considerazione e'
4547 Postfix, a seguire un estratto di un file di configurazione
4548 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4549 nelle <tt class="docutils literal">/home</tt> degli utenti
4550 per la consegna della posta:</p>
4553 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4554 <pre class="literal-block">
4555 # ...segue dalla riga ~30
4556 myhostname = 162.piffa.net
4557 alias_maps = hash:/etc/aliases
4558 alias_database = hash:/etc/aliases
4559 myorigin = 162.piffa.net
4560 mydestination = 162.piffa.net, localhost
4561 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4562 # dovrete usare un realy host per l'invio della posta
4563 relayhost = smtp.piffa.net
4565 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4566 # Se dovete inviare la posta per i client della vostra LAN privata:
4567 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4568 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4571 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4572 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4573 # si disabiliti procmail
4574 #mailbox_command = procmail -a "$EXTENSION"
4576 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4577 # all'interno della home dell'utente:
4578 home_mailbox = Maildir/
4579 mailbox_size_limit = 0
4580 recipient_delimiter = +
4581 inet_interfaces = all
4584 <dl class="docutils">
4585 <dt>E' disponibile un file di configurazione di esempio ben
4586 piu' articolato e commentato::</dt>
4588 <dd>/usr/share/postfix/main.cf.dist .</dd>
4591 <div class="section" id="test-del-server-smtp">
4592 <h2><a class="toc-backref" href=
4593 "#id92">9.1 Test del server smtp</a></h2>
4595 <p>Per testare il corretto funzionamento del server di
4596 posta si puo' procedere in vari modi.</p>
4599 <li>Spedire una mail a una casella locale / remota e
4600 controllare i log (syslog)</li>
4602 <li>Collegarsi via <em>telnet</em> al server di posta:
4603 <a class="reference external" href=
4604 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4606 <li>usare una utility come SWAKS</li>
4609 <div class="section" id="swaks">
4610 <h3><a class="toc-backref" href=
4611 "#id93">9.1.1 Swaks</a></h3>
4613 <dl class="docutils">
4614 <dt>Per gli utenti meno esperti e' consigliabile
4615 utilizzare <em>SWAKS</em>: si installi l'omonimo
4616 pacchetto e si esegua un test con::</dt>
4618 <dd>swaks --to <a class="reference external" href=
4619 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4620 --from <a class="reference external" href=
4621 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4624 <p>Ecco un esempio di una sessione corretta:</p>
4625 <pre class="literal-block">
4626 swaks --to andrea@piffa.net from andrea@mydomain.com
4627 === Trying smtp.piffa.net:25...
4628 === Connected to smtp.piffa.net.
4629 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4630 -> EHLO alice.mydomain.com
4631 <- 250-zoo.piffa.net
4632 <- 250-PIPELINING
4633 <- 250-SIZE 10240000
4637 <- 250-ENHANCEDSTATUSCODES
4640 -> MAIL FROM:<root@alice.mydomain.com>
4642 -> RCPT TO:<andrea@piffa.net>
4645 <- 354 End data with <CR><LF>.<CR><LF>
4646 -> Date: Thu, 28 May 2009 13:11:19 +0200
4647 -> To: andrea@piffa.net
4648 -> From: root@alice.mydomain.com
4649 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
4650 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4652 -> This is a test mailing
4655 <- 250 2.0.0 Ok: queued as 41FB261AFC
4658 === Connection closed with remote host.
4663 <div class="section" id="imap-e-pop">
4664 <h2><a class="toc-backref" href=
4665 "#id94">9.2 Imap e pop</a></h2>
4667 <p>Postfix e' un server SMTP, di conseguenza se volete che
4668 i vostri utenti possano <em>scaricare</em> in locale la
4669 posta generalmente volete mettere a loro disposizione un
4670 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4672 <dl class="docutils">
4673 <dt>Pacchetti da installare</dt>
4675 <dd>courier-imap courier-pop</dd>
4678 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4679 funziona con le Mailbox in <tt class=
4680 "docutils literal">/var/mail/</tt> .</p>
4683 <div class="section" id="client-a-riga-di-comando">
4684 <h2><a class="toc-backref" href=
4685 "#id95">9.3 Client a riga di
4688 <p>Per testare il corretto funzionamento del server di
4689 posta e' utile avere a disposizione delle utility per
4690 inviare e leggere la posta: ovviamente da riga di
4693 <div class="section" id="mailx">
4694 <h3><a class="toc-backref" href=
4695 "#id96">9.3.1 mailx</a></h3>
4697 <dl class="docutils">
4698 <dt>Uno dei client piu' semplici, sopratutto per
4699 inviare un messaggioi. e' sufficiente usare una formula
4702 <dd>mail <a class="reference external" href=
4703 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4706 <p>Se il comando <tt class="docutils literal">mail</tt>
4707 non fosse disponibile si installi il pacchetto <tt class=
4708 "docutils literal">mailx</tt>.</p>
4710 <p>Al primo prompt si digitera' l'oggetto, il testo del
4711 messaggio (per terminare l'inserimento lasciare una riga
4712 vuota, digitare un <tt class="docutils literal">punto +
4713 Invio</tt> su una riga vuota), la Carbon Copy (se
4717 <pre class="literal-block">
4718 mail andrea@localhost
4719 Subject: Oggetto della mail
4721 per terminare il messaggio
4722 lasciare una riga vuota
4723 e un punto (poi Invio).
4729 <p>Per altrre opzioni si veda la pagina man.</p>
4732 <div class="section" id="mutt">
4733 <h3><a class="toc-backref" href=
4734 "#id97">9.3.2 Mutt</a></h3>
4736 <p>Mutt e' uno dei gestori di posta preferiti da chi
4737 preferisce utilizzare l'interfaccia testuale per la
4738 gestione della posta.</p>
4740 <p>Mutt ha un file di configurazione <tt class=
4741 "docutils literal">.muttrc</tt> nella <em>home</em>
4742 dell'utente, alcuni settaggi possono essere utili:</p>
4744 <dl class="docutils">
4745 <dt>set folder="~/Maildir"</dt>
4747 <dd>Per utilizzare <tt class=
4748 "docutils literal">/home/nome_utente/Maildir come
4749 mailbox</tt>, invece del default <tt class=
4750 "docutils literal">/var/mail/nome_utente</tt>.</dd>
4752 <dt>set editor="vim"</dt>
4754 <dd>Utilizzare <tt class="docutils literal">vim</tt>
4755 come editor per comporre i messaggi.</dd>
4758 <p>Spesso e' utile poter <em>levvere al volo</em> la
4759 Mailbox / Maildir di un utente sul server di posta, per
4760 controllare se i messaggi vengono recapitati
4762 <pre class="literal-block">
4763 mutt -f /var/mail/utente
4764 mutt -f /home/utente/Maildir
4767 <p>In modo analogo si puo' consultare al volo la propia
4768 mailbox su un server remoto tramite IMAP/POP:</p>
4769 <pre class="literal-block">
4770 mutt -f imap://nome_utente@piffa.net
4774 <div class="section" id="web-client">
4775 <h3><a class="toc-backref" href=
4776 "#id98">9.3.3 Web client</a></h3>
4778 <p>Per mettere a disposizione degli utenti un client web
4779 per gestire la propria posta si installi il pacchetto:
4780 <tt class="docutils literal">squirrelmail</tt> . Ci sono
4781 tanti altri client web disponibili: questo e'
4782 particolarmente semplice. Naturalmente dovrete aver
4783 installato: <tt class="docutils literal">php5
4786 <p>L'interfaccia dovrebbe essere disponibile all'url:
4787 <tt class="docutils literal"><span class=
4788 "pre">http://localhost/squirrelmail</span></tt> . Se
4789 cosi' non fosse assicuratevi che Apache abbia incluso il
4790 file di configurazione di squirrelmail:</p>
4791 <pre class="literal-block">
4792 cd /etc/apache2/conf.d/
4793 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
4798 <div class="section" id="graylisting">
4799 <h2><a class="toc-backref" href=
4800 "#id99">9.4 Graylisting</a></h2>
4802 <p>Il <em>graylisting</em> e' un sistema relativamente poco
4803 invasivo, con un limitato consumo di risorse per limitare
4804 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
4805 suggerisce il nome e' una via di mezzo tra una <em>white
4806 list</em> (una lista di mittenti privilegiata, sempre
4807 benvenuti) e una <em>black list</em> (mittenti
4808 <em>bannati</em>, banditi dal poter inviare nuovi
4811 <p>Il funzionamento e' relativamente semplice: ogni
4812 mittente sconosciuto viene immediatamente rifiutato con un
4813 errore <em>non grave</em> come un <em>server non
4814 disponibile, provare piu' tardi</em>. Questo inconveniente
4815 non dovrebbe mettere in difficolta' un server di posta /
4816 mittente legittimo, che dopo un periodo di attesa tentera'
4817 nuovamente di inviare il messaggio ottenendo finalmente il
4818 risultato atteso. Diversamente un <em>bot</em> per l'invio
4819 di SPAM o un applicazione improvvisata (tipicamente di
4820 derivazione virale) che stesse inviando il messaggio
4821 <em>probabilmente</em> non insisterebbe, rinunciano ad
4822 inviare il messaggio preferendo destinazioni meno
4825 <div class="section" id="abilitazione-in-postfix">
4826 <h3><a class="toc-backref" href=
4827 "#id100">9.4.1 Abilitazione in
4830 <p>Installare il pacchetto: <tt class=
4831 "docutils literal">postgrey</tt> e aggiungere il file di
4832 configurazione di Postfix <tt class=
4833 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4834 <pre class="literal-block">
4835 smtpd_recipient_restrictions =
4837 reject_unauth_destination,
4838 check_policy_service inet:127.0.0.1:60000
4842 <div class="section" id="test">
4843 <h3><a class="toc-backref" href=
4844 "#id101">9.4.2 Test</a></h3>
4846 <p>Inviando un messaggio il client dovrebbe ricevere un
4847 iniziale messaggio di rifiuto del messaggio:</p>
4848 <pre class="literal-block">
4849 swaks --to andrea@piffa.net from andrea@mydonain.com
4850 === Trying smtp.piffa.net:25...
4851 === Connected to smtp.piffa.net
4854 -> RCPT TO:<andrea@piffa.net>
4855 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
4856 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
4859 === Connection closed with remote host.
4862 <p>A lato server si dovrebbe rilevare su <tt class=
4863 "docutils literal">/var/log/syslog</tt> qualcosa di
4865 <pre class="literal-block">
4866 connect from alice.mydomain.com[65.98.21.97]
4867 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
4868 client_name=alice.mydomain.com,
4869 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
4870 May 28 14:53:34 r24266 postfix/smtpd[22538]:
4871 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
4872 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
4873 see http://postgrey.schweikert.ch/help/piffa.net.html;
4874 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
4875 proto=ESMTP helo=<alice.mydomain.com>
4876 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
4880 <div class="section" id="statistiche">
4881 <h3><a class="toc-backref" href=
4882 "#id102">9.4.3 Statistiche</a></h3>
4884 <p>E' sempre utile poter tracciare qualche statistica
4885 sulle percentuali di messaggi ricevuti, da chi, messaggi
4886 rifiutati (e per quale motivo). Statistiche che attingono
4887 dai soliti log del server di posta <tt class=
4888 "docutils literal">/var/log/syslog</tt> di default oltre
4889 che i dedicati <tt class=
4890 "docutils literal">/var/log/mail</tt> .</p>
4892 <p>Una utility semplice per analizzare l'attivita' del
4893 propio server smtp potrebbe essere <tt class=
4894 "docutils literal">pflogsumm</tt> , installato il
4895 pacchetto la si puo' invocare con:</p>
4896 <pre class="literal-block">
4897 pflogsumm.pl /var/log/mail.log
4900 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
4901 "docutils literal">/var/log/mail.log.0</tt></p>
4906 <div class="section" id="firewall">
4907 <h1><a class="toc-backref" href=
4908 "#id103">10 Firewall</a></h1>
4910 <p>In Informatica, nell'ambito delle reti di computer, un
4911 firewall (termine inglese dal significato originario di
4912 parete refrattaria, muro tagliafuoco, muro ignifugo; in
4913 italiano anche parafuoco o parafiamma) e' un componente
4914 passivo di difesa perimetrale che puo anche svolgere funzioni
4915 di collegamento tra due o piu' tronconi di rete. Usualmente
4916 la rete viene divisa in due sotto reti: una, detta esterna,
4917 comprende l'intera Internet mentre l'altra interna, detta LAN
4918 (Local Area Network), comprende una sezione piu' o meno
4919 grande di un insieme di computer locali. In alcuni casi e'
4920 possibile che si crei l'esigenza di creare una terza sotto
4921 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
4922 sistemi che devono essere isolati dalla rete interna ma
4923 devono comunque essere protetti dal firewall.</p>
4925 <p>Una prima definizione chiusa di firewall e' la
4928 <p>Apparato di rete hardware o software che filtra tutti i
4929 pacchetti entranti ed uscenti, da e verso una rete o un
4930 computer, applicando regole che contribuiscono alla sicurezza
4933 <p>In realta' un firewall puo' essere realizzato con un
4934 normale computer (con almeno due schede di rete e software
4935 apposito), puo' essere una funzione inclusa in un router o
4936 puo' essere un apparato specializzato. Esistono inoltre i
4937 cosiddetti "firewall personali", che sono programmi
4938 installati sui normali calcolatori, che filtrano solamente i
4939 pacchetti che entrano ed escono da quel calcolatore; in tal
4940 caso viene utilizzata una sola scheda di rete.</p>
4942 <p>La funzionalita' principale in sostanza e' quella di
4943 creare un filtro sulle connessioni entranti ed uscenti, in
4944 questo modo il dispositivo innalza il livello di sicurezza
4945 della rete e permette sia agli utenti interni che a quelli
4946 esterni di operare nel massimo della sicurezza. Il firewall
4947 agisce sui pacchetti in transito da e per la zona interna
4948 potendo eseguire su di essi operazioni di: controllo modifica
4951 <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
4952 IP per leggere le informazioni presenti sul suo header, e in
4953 alcuni casi anche di effettuare verifiche sul contenuto del
4956 <div class="section" id="links">
4957 <h2><a class="toc-backref" href=
4958 "#id104">10.1 Links</a></h2>
4961 <li><a class="reference external" href=
4962 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
4964 <li><a class="reference external" href=
4965 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
4966 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
4970 <div class="section" id="ipfilter">
4971 <h2><a class="toc-backref" href=
4972 "#id105">10.2 Ipfilter</a></h2>
4974 <p>Link: <a class="reference external" href=
4975 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
4976 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
4978 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
4979 po' del 3) e su cosa <em>non</em> lavora (livello 4).
4980 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
4981 etc) e del livello 1 (MAC source address). Iptables
4982 comunque permette di fare il <em>connection-tracking</em>,
4983 mediante il quale possiamo implementare il Network Address
4986 <p>Netfilter non ricostruisce il flusso di dati tra
4987 pacchetti, non puo' quindi rilevare la presenza di virus o
4988 simili che si trasmettono su pacchetti separati:
4989 ricomporre, analizzare e tornare a scomporre i frammenti
4990 richiederebbe troppa RAM e risorse di sistema, con il
4991 conseguente rischio di saturare il firewall fino
4992 all'abbandono dei nuovi pacchetti in transito. Ci sono
4993 altri software piu' adatti a questi compiti, ad esempio un
4994 proxy HTTP come Squid che e' appunto una applicazione di
4995 quarto livello, progettata e strutturata per analizzare e
4996 modificare i flussi di dati (il <em>contenuto</em> dei
4997 pacchetti, non le sole <em>intestazioni</em>) facendo
4998 abbondate uso delle risorse RAM e di calcolo del sistema.
4999 Non a caso su macchine embedded dalle prestazioni molto
5000 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5001 massimo le risorse di sistema per gestire il traffico di
5002 una rete 10/100, mentre il lavoro tipico svolto da
5003 netfilter e' quasi irrilevante.</p>
5006 <div class="section" id="progettazione-di-un-firewall">
5007 <h2><a class="toc-backref" href=
5008 "#id106">10.3 Progettazione di un
5011 <p>Per implementare un firewall bisogna decidere un aio di
5012 cose: la collocazione e l'approccio (inclusivo o esclusivo)
5013 al filtraggio, il tipo di hardware.</p>
5015 <div class="section" id="collocazione">
5016 <h3><a class="toc-backref" href=
5017 "#id107">10.3.1 Collocazione</a></h3>
5019 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5020 della rete, decidere se diversi reparti di una azienda si
5021 possano vedere tra loro e in che misura.</p>
5023 <p>Collocazione:</p>
5026 <ol class="arabic simple">
5029 <li>tra router e servers / LAN</li>
5031 <li>Unico server / router / firewall e connessi
5032 rischi. considerare l'acquisto di un router hardware
5037 <dl class="docutils">
5038 <dt>Layeed security:</dt>
5040 <dd>Implementare piu' device / software sui diversi
5041 livelli: <a class="reference external" href=
5042 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5043 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5047 <div class="section" id="policy-di-default">
5048 <h3><a class="toc-backref" href=
5049 "#id108">10.3.2 Policy di
5052 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5056 <div class="section" id="hardware">
5057 <h3><a class="toc-backref" href=
5058 "#id109">10.3.3 Hardware</a></h3>
5060 <p>Sostanzialmente potremmo distinguere due tipologie di
5063 <dl class="docutils">
5064 <dt>Network appliance dedicata::</dt>
5066 <dd>Un dispositivo hardware dedicato alla funzione di
5067 Firewall, ad es un Cisco / Fortigate. Si noti che molti
5068 firewall economici altro non sono che Linux box molto
5071 <dt>Server / Personal computer:</dt>
5073 <dd>Un server sul quale viene fatto girare Netfilter ad
5074 uso del server stesso e della rete connessa.</dd>
5077 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5078 flessibilita', strumenti di gestione, sicurezza,
5083 <div class="section" id=
5084 "percorso-dei-pacchetti-tra-tabelle-e-catene">
5085 <h2><a class="toc-backref" href=
5086 "#id110">10.4 Percorso dei pacchetti tra
5087 tabelle e catene</a></h2>
5089 <p>link: <a class="reference external" href=
5090 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
5091 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
5094 <div class="section" id="concetti-di-base">
5095 <h2><a class="toc-backref" href=
5096 "#id111">10.5 Concetti di base</a></h2>
5098 <div class="section" id="tabelle-catene-regole">
5099 <h3><a class="toc-backref" href=
5100 "#id112">10.5.1 Tabelle, catene,
5103 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5106 <li>filter - Regola il firewalling: quali pacchetti
5107 accettare, quali bloccare</li>
5109 <li>nat - Regola le attivita' di natting</li>
5111 <li>mangle - Interviene sulla alterazione dei
5115 <p>Ogni tabella ha delle catene (chains) predefinite
5116 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5117 aggiunte catene custom. Ogni catena e' composta da un
5118 elenco di regole (rules) che identificano pacchetti di
5119 rete secondo criteri diversi (es: -p tcp --dport 80 -d
5120 10.0.0.45) Ogni regola termina con una indicazione
5121 (target) su cosa fare dei pacchetti identificati dalla
5122 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5125 <div class="section" id="match">
5126 <h3><a class="toc-backref" href=
5127 "#id113">10.5.2 Match</a></h3>
5129 <p>I Match di una regola (rule) servono a testare un
5130 pacchetto per valutare se corrisponda a certe
5131 caratteristiche. I match di possono servire a controllare
5132 se un pacchetto e' destinato a una porta particolare o
5133 utilizza un protocollo particolare.</p>
5135 <p>Alcuni esempi:</p>
5137 <dl class="docutils">
5138 <dt>-p [!] proto</dt>
5140 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5141 udp, gre, ah...)</dd>
5143 <dt>-s [!] address[/mask]</dt>
5145 <dd>Indirizzo IP sorgente (o network con maschera di
5148 <dt>-d [!] address[/mask]</dt>
5150 <dd>Indirizzo IP destinazione (o network)</dd>
5152 <dt>-i [!] interface[+]</dt>
5154 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5156 <dt>-o [!] interface[+]</dt>
5158 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5161 <table class="docutils option-list" frame="void" rules=
5163 <col class="option">
5164 <col class="description">
5166 <tbody valign="top">
5168 <td class="option-group"><kbd><span class=
5169 "option">-f</span></kbd></td>
5171 <td>Frammento di pacchetto</td>
5177 <div class="section" id="targets">
5178 <h3><a class="toc-backref" href=
5179 "#id114">10.5.3 Targets</a></h3>
5181 <p>Se un pacchetto soddisfa le condizioni del Match
5182 <em>salta</em> (jump) su uno dei target possibili, in
5183 caso contrario continua il suo percorso tra regole catene
5186 <p>Target principali:</p>
5188 <dl class="docutils">
5189 <dt><em>-j ACCEPT</em></dt>
5191 <dd>Il pacchetto matchato viene accettato e procede
5192 verso la sua destinazione. Si usa per definire il
5193 traffico permesso.</dd>
5195 <dt><em>-j DROP</em></dt>
5197 <dd>Il pacchetto viene rifiutato e scartato, senza
5198 alcuna notifica al mittente. Si usa, in alternativa a
5199 REJECT, per bloccare traffico.</dd>
5201 <dt><em>-j REJECT</em></dt>
5203 <dd>Il pacchetto viene rifiutato. Al mittente viene
5204 mandato un pacchetto (configurabile) di notifica tipo
5205 ICMP port-unreachable (--reject-with
5206 icmp-port-unreachable)</dd>
5209 <table class="docutils option-list" frame="void" rules=
5211 <col class="option">
5212 <col class="description">
5214 <tbody valign="top">
5216 <td class="option-group"><kbd><span class=
5217 "option">-t <var>LOG</var></span></kbd></td>
5219 <td>Il pacchetto viene loggato via syslog e procede
5220 l'attraversamento della catena. Opzioni:
5221 (--log-level, --log-prefix, --log-tcp-sequence,
5222 --log-tcp-options, --log-ip-options)</td>
5226 <td class="option-group"><kbd><span class=
5227 "option">-j <var>DNAT</var></span></kbd></td>
5229 <td>Viene modificato l'IP di destinazione del
5230 pacchetto. Target disponibile solo in nat /
5231 PREROUTING e nat / OUTPUT. L'opzione
5232 --to-destination IP:porta definisce il nuovo IP di
5233 destinazione. Si usa tipicamente su network
5234 firewall che nattano server di una DMZ</td>
5238 <td class="option-group"><kbd><span class=
5239 "option">-j <var>SNAT</var></span></kbd></td>
5241 <td>Viene modificato l'IP sorgente. Solo in nat /
5242 POSTROUTING. Prevede l'opzione --to-source
5243 IP:porta. Si usa per permettere l'accesso a
5244 Internet da una rete locale con IP privati.</td>
5248 <td class="option-group"><kbd><span class=
5249 "option">-j <var>MASQUERADE</var></span></kbd></td>
5251 <td>Simile a SNAT, si applica quando i pacchetti
5252 escono da interfacce con IP dinamico (dialup, adsl,
5253 dhcp...). Si usa solo in nat / POSTROUTING e
5254 prevede l'opzione --to-ports porte.</td>
5258 <td class="option-group"><kbd><span class=
5259 "option">-j <var>REDIRECT</var></span></kbd></td>
5261 <td>Redirige il pacchetto ad una porta locale.
5262 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5263 previsto per fare un transparent proxy (con proxy
5264 server in esecuzione sulla macchina con
5269 <td class="option-group"><kbd><span class=
5270 "option">-j <var>RETURN</var></span></kbd></td>
5272 <td>Interrompe l'attraversamento della catena. Se
5273 questa e' una secondaria, il pacchetto torna ad
5274 attraversare la catena madre da punto in cui aveva
5275 fatto il salto nella secondaria. Se il RETURN e' in
5276 una delle catene di default, il pacchetto
5277 interrompe l'attraversamento e segue la policy di
5282 <td class="option-group"><kbd><span class=
5283 "option">-j <var>TOS</var></span></kbd></td>
5285 <td>Usabile solo nella tabella mangle, permette di
5286 cambiare il TOS (Type Of Service) di un pacchetto
5287 con l'opzione --set-tos. Per un elenco dei
5288 parametri disponibili: iptables -j TOS -h</td>
5292 <td class="option-group"><kbd><span class=
5293 "option">-j <var>MIRROR</var></span></kbd></td>
5295 <td>Curioso e sperimentale, questo target invia un
5296 pacchetto speculare al mittente. In pratica e' come
5297 se facesse da specchio per tutti i pacchetti
5298 ricevuti. Da usare con cautela, per evitare
5299 attacchi DOS indiretti.</td>
5306 <div class="section" id="tabella-filter">
5307 <h2><a class="toc-backref" href=
5308 "#id115">10.6 Tabella Filter</a></h2>
5310 <p>E' quella implicita e predefinita (-t filter) Riguarda
5311 le attivita' di filtraggio del traffico. Ha 3 catene di
5312 default: INPUT - Riguarda tutti i pacchetti destinati al
5313 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5314 i pacchetti che sono originati dal sistema e destinati ad
5315 uscire. FORWARD - Riguarda i pacchetti che attraversano il
5316 sistema, con IP sorgente e destinazione esterni.</p>
5318 <p>Esempio per permettere accesso alla porta 80 locale:
5319 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5320 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5323 <p>Esempio per permettere ad un pacchetto con IP sorgente
5324 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5325 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5329 <div class="section" id=
5330 "flush-automatico-per-macchine-remote">
5331 <h2><a class="toc-backref" href=
5332 "#id116">10.7 Flush automatico per
5333 macchine remote</a></h2>
5335 <p>Se state provando una configurazione del firewall per
5336 una macchina remota e' buona norma per evitare brutte
5337 figure attivare uno script che faccia il <em>flush</em>
5338 delle regole dopo qualche minuto. Potreste infatti
5339 inavvertitamente impostare una regola che vi impedisca di
5340 raggiungere la macchina remota, cosi' da non poter neanche
5341 eliminare quella regola e ripristinare la situazione
5344 <p><em>Veramente</em>, prima di lavorare sul firewall di
5345 una macchina remota impostate almeno un <tt class=
5346 "docutils literal">at now +5 min</tt> o con un'oretta di
5347 margine per fare il <em>flush</em> delle regole (su tutte
5349 <pre class="literal-block">
5351 at> /sbin/iptables -F
5356 <div class="section" id="gestione-regole-rules">
5357 <h2><a class="toc-backref" href=
5358 "#id117">10.8 Gestione regole
5361 <p>Il comando iptables viene usato per ogni attivita' di
5362 gestione e configurazione.</p>
5364 <p>Inserimento regole:</p>
5366 <dl class="docutils">
5367 <dt>iptables -A CATENA ...</dt>
5369 <dd>Aggiunge una regola alla fine della catena
5372 <dt>iptables -I CATENA [#] ...</dt>
5374 <dd>Inserisce alla riga # (default 1) una regola nella
5375 catena indicata</dd>
5377 <dt>iptables -N CATENA</dt>
5379 <dd>Crea una nuova catena custom</dd>
5381 <dt>iptables -P CATENA TARGET</dt>
5383 <dd>Imposta il target di default per la catena
5387 <p>Rimozione regole e azzeramenti:</p>
5389 <dl class="docutils">
5390 <dt>iptables -F [catena]</dt>
5392 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5394 <dt>iptables -X [catena]</dt>
5396 <dd>Ripulisce tutte le catene custom (o quella
5399 <dt>iptables -Z [catena]</dt>
5401 <dd>Azzera i contatori sulle catene</dd>
5403 <dt>iptables -D catena #</dt>
5405 <dd>Cancella la regola numero # dalla catena
5409 <p>Interrogazione:</p>
5411 <dl class="docutils">
5412 <dt>iptables -L</dt>
5414 <dd>Elenca le regole esistenti</dd>
5416 <dt>iptables -L -n -v</dt>
5418 <dd>Elenca, senza risolvere gli host, in modo verboso le
5419 regole esistenti</dd>
5423 <div class="section" id="salvataggio-regole">
5424 <h2><a class="toc-backref" href=
5425 "#id118">10.9 Salvataggio regole</a></h2>
5427 <p>Il comando <tt class="docutils literal">iptables</tt>
5428 serve per interagire con il framework <tt class=
5429 "docutils literal">Netfilter</tt> che gestisce il firewall
5430 di Linux al livello del kernel. Questo comporta, in modo
5431 analogo a quando avviene col comando <tt class=
5432 "docutils literal">ifconfig</tt>, che i cambiamenti
5433 impostati siano in <em>tempo reale, RAM</em>, non
5434 persistenti nel sistema: al boot successivo del sistema
5435 tutto tornera' alle impostazioni di base (in questo caso
5436 <em>nulle</em>, con policy di default settate su <tt class=
5437 "docutils literal">ACCEPT</tt> per tutto).</p>
5439 <p>Le varie invocazioni di iptables potrebbero essere
5440 richiamate da degli scripts dedicati, ma fortunatamente e'
5441 stata predisposta una apposita utility per gestire questi
5442 scripts in modo da avere a disposizione un <em>formato
5443 standard</em> per il salvataggio e il ripristino delle
5444 regole del firewall.</p>
5446 <p>Altro problema: decidere quando attivare / disattivare
5447 queste regole. Utilizzare i <em>runlevels</em> non e' una
5448 soluzione adeguata: le regole del firewall sono legate
5449 all'attivita' delle schede di rete (e un host con diverse
5450 schede di rete puo' attivarle a secondo delle esigenze di
5451 routing, partenza di servizi es file_sharing per un
5452 back-up...): il sistema operativo Debian permette di legare
5453 l'esecuzione di comandi alla attivazione di una device di
5454 rete (<tt class="docutils literal">up</tt>), dopo la sua
5455 attivazione (<tt class="docutils literal"><span class=
5456 "pre">post-up</span></tt>, utile per devices che richiedono
5457 un certo tempo per inizializzarsi: come un tunnel o una
5458 connessione punto a punto), prima della sua attivazione
5459 (<tt class="docutils literal"><span class=
5460 "pre">pre-up</span></tt>). Allo stesso modo sono
5461 disponibili eventi analoghi per accompagnare la
5462 disattivazione dei device di rete: si veda la pagina man di
5463 <tt class="docutils literal">interfaces</tt>.</p>
5465 <p>Nel nostro caso avremo per una possibile scheda
5466 <tt class="docutils literal">eth0</tt>:</p>
5469 "docutils literal">/etc/network/interfaces</tt></p>
5470 <pre class="literal-block">
5471 iface eth1 inet static
5472 up /sbin/iptables-restore /root/firewall/basic_fw
5473 # Seguono i soliti parametri della scheda di rete
5474 address 10.10.208.21
5477 <div class="section" id="iptables-save">
5478 <h3><a class="toc-backref" href=
5479 "#id119">10.9.1 Iptables-save</a></h3>
5481 <p>Per salvare le regole di iptables attualmente presenti
5482 nel kernel si usi il comando:</p>
5483 <pre class="literal-block">
5484 # iptables-save >> /root/firewall/basic_fw
5487 <p>Il contenuto del file dovrebbe essere
5488 <em>comprensibile</em>: sostanzialmente sono regole di
5489 iptables, senza il comando iptables ripetuto, suddivisi
5490 per le varie tabelle. Potete comunque correggere
5491 eventuali parametri con un edito di testo.</p>
5493 <p>Se non avete un'idea migliore potreste voler tenere
5494 gli script dei firewall in una cartella <tt class=
5495 "docutils literal">~/firewall</tt> nella home directory
5496 dell'utente <tt class="docutils literal">root</tt>.</p>
5499 <div class="section" id="iptables-restore">
5500 <h3><a class="toc-backref" href=
5501 "#id120">10.9.2 Iptables-restore</a></h3>
5503 <p>Per ripristinare un set di regole precedentemente
5504 salvate con <tt class="docutils literal"><span class=
5505 "pre">iptables-save</span></tt> si utilizzi <tt class=
5506 "docutils literal"><span class=
5507 "pre">iptables-restore</span></tt>. Se questo deve essere
5508 fatto in modalita' <em>non interattiva</em>, ad esempio
5509 deve essere eseguito dal demone che si occupa di
5510 inizializzare le schede di rete, oppure un <em>cron</em>
5511 o altro, e' buona norma richiamare i percorsi completi
5512 sia dei comandi che dei file:</p>
5513 <pre class="literal-block">
5514 /sbin/iptables-restore /root/firewall/basic_fw
5519 <div class="section" id="esempi">
5520 <h2><a class="toc-backref" href=
5521 "#id121">10.10 Esempi</a></h2>
5523 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5524 e' un computer con un paio di schede di rete fisiche una
5525 delle quali collegata alla rete internet l'altra a una rete
5526 privata per la LAN interna.</p>
5529 <ol class="arabic simple">
5530 <li><tt class="docutils literal">eth0</tt> scheda di
5531 rete principale sulla rete privata interna
5534 <li><tt class="docutils literal">eth1</tt> scheda di
5535 rete secondaria per la connessione ad internet</li>
5537 <li><tt class="docutils literal">ppp0</tt>
5538 punto-a-punto per una connessione ad internet</li>
5542 <div class="section" id="bloccare-i-ping-dall-esterno">
5543 <h3><a class="toc-backref" href=
5544 "#id122">10.10.1 Bloccare i ping
5545 dall'esterno</a></h3>
5547 <p>Spesso gli script che attaccano
5548 <em>automaticamente</em> le varie reti provano a fare un
5549 ping per verificare quali IP sono on-line: bloccare il
5550 traffico <tt class="docutils literal">ICMP</tt> in
5551 ingresso puo' aiutare ad evitare parte di questi
5553 <pre class="literal-block">
5554 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5558 <div class="section" id="masquerading-snat">
5559 <h3><a class="toc-backref" href=
5560 "#id123">10.10.2 Masquerading
5563 <dl class="docutils">
5564 <dt>Per attivare la network address translation (in
5565 questo caso un SNAT) per la rete locale privata
5566 sull'indirizzo ip del <em>modem</em>::</dt>
5568 <dd>iptables -A POSTROUTING -s
5569 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5572 <p>Il <em>Masquerading</em> a differenza dello
5573 <em>SNAT</em> puro (<tt class=
5574 "docutils literal"><span class="pre">-j</span> SNAT
5575 <span class="pre">--to-source</span> proprio_ip_pubblico
5576 ) legge l'indirizzo ip del device ``ppp0</tt>. In questo
5577 modo se l'IP cambia automaticamente si aggiorna anche il
5578 source natting. Se avete un indirizzo IP statico
5579 assegnato al vostro gateway potete invece usare lo SNAT
5582 <dl class="docutils">
5583 <dt>Altri esempi::</dt>
5586 <p class="first">## Change source addresses to
5587 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5588 SNAT --to 1.2.3.4</p>
5590 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5591 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5592 SNAT --to 1.2.3.4-1.2.3.6</p>
5594 <p class="last">## Change source addresses to
5595 1.2.3.4, ports 1-1023 # iptables -t nat -A
5596 POSTROUTING -p tcp -o eth0 -j SNAT --to
5602 <div class="section" id="brute-force">
5603 <h3><a class="toc-backref" href=
5604 "#id124">10.10.3 Brute force</a></h3>
5606 <p>Per limitare attacchi di tipo brute force su SSH:</p>
5607 <pre class="literal-block">
5608 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
5610 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5616 <div class="section" id="ftp-server">
5617 <h1><a class="toc-backref" href=
5618 "#id125">11 FTP Server</a></h1>
5620 <p>Il File Transfer Protocol (FTP) (protocollo di
5621 trasferimento file), è un Protocollo per la trasmissione di
5622 dati tra host basato su TCP, in genere usato dagli autori di
5623 pagine web per <em>pubblicare</em> queste nei propio spazi
5624 web. Storicamente veniva anche usato, mediate l'utilizzo di
5625 utenze anonime, come punto di scambio per materiali di vari
5626 utenti tra loro sconosciuti (una directory dei materiali
5627 scaricabili e una dedicata agli <em>uploads</em> degli
5628 utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
5629 mantiene la cosuetudine di renedere disponibile i materiali
5630 dei <em>mirrors</em> anche tramite FTP, probabilmente per
5631 garantire l'accesso ai client piu' datati che non possono
5632 utilizzare tecnologie piu' recenti.</p>
5634 <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
5635 per quanto riguarda il traffico ad esso associato che per il
5636 passaggio delle passwords degli utenti, facilmente sniffabili
5637 da chiunque abbia accesso alla rete. Naturalmente vsftp per
5638 quanto votato alla sicurezza non modifica queste
5639 caratteristiche del protocollo FTP (ma consente di usare
5640 OpenSSL per la autenticazione degli utenti).</p>
5642 <p>Se propio si deve mettere a disposizione un server FTP ai
5643 propi utenti si considerino le seguenti alternative:</p>
5646 <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
5648 <li>Spingere gli utenti ad usare SSL per autenticarsi al
5651 <li>Nel caso di webdesigners si consideri la possibilita'
5652 di offrire alternative come GIT, Subversion, Rsync o
5656 <p>Nel caso non si possa evitare il server FTP:</p>
5659 <li>Non dare agli utenti FTP una shell di sistema (
5660 Concedere come shell <tt class="docutils literal">ftp</tt>
5661 al posto di <tt class="docutils literal">bash</tt> in
5662 <tt class="docutils literal">/etc/passwd</tt>)</li>
5664 <li>Rendere il filesytem su cui scrive il demone FTP
5665 <tt class="docutils literal">noexec</tt> e <tt class=
5666 "docutils literal">nosuid</tt> (vedi dopo)</li>
5668 <li>Utilizzare un demone FTP come Vsftp: un server FTP con
5669 una forte inclinazione alla sicurezza: <em>Very Secure FTP
5673 <p>Per maggiori informazioni sulle scelte di design legate
5674 alla sicurezza del demone si veda: <a class=
5675 "reference external" href=
5676 "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
5678 <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
5681 <li>Virtual IP configurations</li>
5683 <li>Virtual users</li>
5685 <li>Standalone or inetd operation</li>
5687 <li>Powerful per-user configurability</li>
5689 <li>Bandwidth throttling</li>
5691 <li>Per-source-IP configurability</li>
5693 <li>Per-source-IP limits</li>
5697 <li>Encryption support through SSL integration</li>
5700 <div class="section" id="id8">
5701 <h2><a class="toc-backref" href=
5702 "#id126">11.1 Pacchetti</a></h2>
5704 <p>Per installare il demone vero e propio si usi il
5705 pacchetto <tt class="docutils literal">vsftpd</tt> , mentre
5706 per aver un client da cui fare qualche test sono
5710 <li><tt class="docutils literal">ftp</tt> (pacchetto da
5711 installare) e' il solito client a riga di comando</li>
5713 <li><tt class="docutils literal">gftp</tt> e' un client
5714 grafico simile al classico <em>WSftp</em></li>
5716 <li>Normalmente i file mananager com Konqueror possono
5717 lavarorare come client FTP</li>
5721 <div class="section" id="sessioni-ftp">
5722 <h2><a class="toc-backref" href=
5723 "#id127">11.2 Sessioni ftp</a></h2>
5725 <p>Vediamo alcuni dei comandi di base per gestire una
5726 sessione ftp a riga di comando:</p>
5728 <dl class="docutils">
5729 <dt>ftp nome_host</dt>
5731 <dd>stabilire la connessione all'host, poi verra' chiesta
5732 la password dell'utente. Se avete sbagliato utente: user
5737 <dd>Lista dei comandi disponibili.</dd>
5739 <dt>help [nome_comando]</dt>
5741 <dd>Cosa fa quel comando.</dd>
5745 <dd>Per caricare un file.</dd>
5749 <dd>Per scaricare un file.</dd>
5753 <dd>Lista dei file disponibili.</dd>
5757 <dd>Spostarsi in un altra directory.</dd>
5761 <dd>Cambio directory in LOCALE.</dd>
5765 <dd>Per lavorare su file multipli.</dd>
5770 <dl class="first last docutils">
5771 <dt>Per uscire dalla modalita' interattiva</dt>
5774 <dl class="first last docutils">
5775 <dt>(non vi chiede conferma di ogni singola
5778 <dd>su ogni singolo file...).</dd>
5786 <dd>Entra in modalita' trasferimento binario.</dd>
5790 <dd>Entra in modalita' trasferimento ascii.</dd>
5794 <dd>Per chiudere la sessione.</dd>
5798 <div class="section" id="configurazione-iniziale">
5799 <h2><a class="toc-backref" href=
5800 "#id128">11.3 Configurazione
5803 <p>Il demone di vsftpd e' immediatamente disponibile ma
5804 solo in modalita' anonima (si pensi a uno scenario in cui
5805 si vuole rendere disponibili dei files tramite FTP) e in
5806 <em>sola lettura</em>. Per accedere al servizio si usi
5807 quini come utente <tt class=
5808 "docutils literal">anonymous</tt> (la passwords in genere
5809 e' come consuetudine il propio indirizzo email), la cui
5810 <em>home</em> directory sara' <tt class=
5811 "docutils literal">/home/ftp/</tt>:</p>
5812 <pre class="literal-block">
5813 zoo:~# ftp localhost
5814 Connected to localhost.localdomain.
5816 Name (localhost:root): anonymous
5817 331 Please specify the password.
5819 230 Login successful.
5820 Remote system type is UNIX.
5821 Using binary mode to transfer files.
5823 200 PORT command successful. Consider using PASV.
5824 150 Here comes the directory listing.
5825 -rw-r--r-- 1 0 0 0 Feb 03 17:17 anoni
5826 226 Directory send OK.
5830 <div class="section" id="abilitare-gli-utenti-locali">
5831 <h2><a class="toc-backref" href=
5832 "#id129">11.4 Abilitare gli utenti
5835 <p>Per poter modificare le impostazioni iniziali, ad
5836 esempio per permettere l'accesso agli utenti del server, si
5837 modifichera' il file <tt class=
5838 "docutils literal">/etc/vsftpd.conf</tt>, a seguire le
5839 impostazioni fondamentali ed altre interessanti per rendere
5840 il server accessibile da utenti di sistema (autenticati
5841 tramite la loro password, quindi con PAM) per il tipico
5842 utilizzo di web designers che debbano pubblicare le loro
5843 pagine web (e non si siano fatti convincere a usare
5845 <pre class="literal-block">
5846 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
5848 # Disabilitiamo l'utente anonimo
5850 # Uncomment this to allow local users to log in.
5852 # Accesso garantito agli utenti di sistema
5854 # Uncomment this to enable any form of FTP write command.
5856 # Permettiamo agli utenti di caricare documenti nella loro home
5858 # You may fully customise the login banner string:
5859 ftpd_banner=Benvenuti al servizio ftp del sito example.com
5862 <p>Per abilitare i cambiamenti si proceda a riavviare il
5863 server: <tt class="docutils literal">/etc/init.d/vsftpd
5864 restart</tt> e si monitorizzi il file di log <tt class=
5865 "docutils literal">tail <span class="pre">-f</span>
5866 /var/log/vsftpd.log</tt> per controllarne il funzionamento
5867 (e anche <tt class="docutils literal">/var/log/syslog</tt>
5868 nel caso non si riuscisse a far partire correttamente il
5871 <p>NOTE: Se non riuscite ad ottenere un <em>directory
5872 listing</em> (<tt class="docutils literal">ls</tt>)
5873 ottenendo un errore <tt class="docutils literal">500
5874 Illegal PORT command? FTP error</tt> abilitare la modalita'
5875 passiva col comando ftp <tt class=
5876 "docutils literal">passive</tt>.</p>
5879 <div class="section" id="jail-chroot">
5880 <h2><a class="toc-backref" href=
5881 "#id130">11.5 Jail chroot</a></h2>
5883 <p>Si puo' impedire all'utente di spostarsi arbitrariamente
5884 per il file system del servere visualizzare il contenuto
5885 delle directory, ad esempio la cartella <tt class=
5886 "docutils literal">/etc</tt>, confinandolo in una jail
5887 chroot limitata alla sua home directory:</p>
5888 <pre class="literal-block">
5889 # You may restrict local users to their home directories. See the FAQ for
5890 # the possible risks in this before using chroot_local_user or
5891 # chroot_list_enable below.
5892 chroot_local_user=YES
5895 <p>Generalmente un utente di sistema con il solo accesso
5896 FTP non dovrebbe avere la possibilita' di poter navigare
5897 liberamente per il file system del server, esponendo file
5898 di configurazione e quant'altro l'utente potrebbe trarre
5899 utili informazioni sul quali software siano installati e di
5901 <pre class="literal-block">
5902 Remote system type is UNIX.
5903 Using binary mode to transfer files.
5907 550 Failed to change directory.
5911 <div class="section" id="permessi-sul-filesystem">
5912 <h2><a class="toc-backref" href=
5913 "#id131">11.6 Permessi sul
5916 <p>Come accennato precedentemente e' opportuno che i
5917 filesystems sui quali un utente puo' scrivere o modificare
5918 il contenuto non abbiano i privilegi di eseguibilita' e
5919 suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
5920 "docutils literal">/home/</tt> directory quindi avremo in
5921 <tt class="docutils literal">/etc/fstab</tt>:</p>
5922 <pre class="literal-block">
5923 /dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
5927 <div class="section" id="altre-opzioni">
5928 <h2><a class="toc-backref" href=
5929 "#id132">11.7 Altre opzioni</a></h2>
5931 <dl class="docutils">
5932 <dt>xferlog_enable=YES</dt>
5934 <dd>Verra' tenuto un file di log <tt class=
5935 "docutils literal">/var/log/vsftpd.log</tt> degli upload
5936 e download sul server.</dd>
5938 <dt>hide_ids=YES</dt>
5940 <dd>Nasconde le userid e groupid mascherandole con
5941 <tt class="docutils literal">ftp</tt> .</dd>
5943 <dt>anon_root=/home/ftp</dt>
5945 <dd>Home directory dell'utente anonimo.</dd>
5947 <dt>write_enable=YES</dt>
5949 <dd>Permette agli utenti di eseguire i comandi che
5950 possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
5951 MKD, RMD, APPE e SITE .</dd>
5953 <dt>idle_session_timeout=600</dt>
5955 <dd>Permette agli utenti di restare connessi piu' a
5956 lungo, utile per i webdesigners che passano intere
5957 giornate connessi al server.</dd>