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 (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">
18 Modyfied by: Andrea Manni
21 Copyright: This stylesheet has been placed in the public domain - free to edit and use for all uses.
25 font: 100% sans-serif;
34 background-color: #eeffcc;
37 border: 1px solid #ac9;
53 background-color: transparent;
58 text-decoration: none;
63 text-decoration: none;
64 background-color: transparent;
77 margin: 0.5em 0 1em 0;
85 background-color: transparent;
90 background-color: transparent;
94 text-decoration: none;
118 h1, h2, h3, h4, h5, h6 {
120 background-color: transparent;
127 margin-bottom: 0.5em;
128 border-bottom: 2px solid #aaa;
133 margin-bottom: 0.5em;
134 border-bottom: 1px solid #aaa;
139 margin-bottom: 0.5em;
145 margin-bottom: 0.5em;
151 margin-bottom: 0.5em;
157 margin-bottom: 0.5em;
165 margin-bottom: 1.5em;
168 div.admonition, div.note, div.tip, div.caution, div.important {
171 border-top: 1px solid #aaa;
172 border-left: 1px solid #aaa;
173 border-bottom: 2px solid #555;
174 border-right: 2px solid #555;
178 background: transparent url('../images/important.png') 10px 2px no-repeat;
182 background: transparent url('../images/caution.png') 10px 2px no-repeat;
186 background: transparent url('../images/note.png') 10px 2px no-repeat;
190 background: transparent url('../images/tip.png') 10px 2px no-repeat;
193 div.admonition-example {
194 background: transparent url('../images/tip.png') 10px 2px no-repeat;
197 div.admonition-critical-example {
198 background: transparent url('../images/important.png') 10px 2px no-repeat;
203 border-bottom: 1px solid #aaa;
209 border: 1px solid gray;
210 border-collapse: collapse;
215 table.docutils caption {
219 table.docutils td, table.docutils th {
220 padding: 0.25em 0.5em;
224 background-color: #dddddd;
232 border-top: 1px solid #aaa;
233 border-left: 1px solid #aaa;
234 border-bottom: 2px solid #555;
235 border-right: 2px solid #555;
241 border-bottom: 1px solid #aaa;
255 <div class="document" id="servizi-di-rete-passo-a-passo">
256 <h1 class="title">Servizi di rete passo a passo</h1>
258 <h2 class="subtitle" id=
259 "appunti-sulla-installazione-e-configurazione-dei-servizi-di-rete-in-ambiete-gnu-linx">
260 Appunti sulla installazione e configurazione dei servizi di
261 rete in ambiete Gnu/Linx</h2>
264 <table class="docutils field-list" frame="void" rules="none">
265 <col class="field-name">
266 <col class="field-body">
270 <th class="field-name">Author:</th>
272 <td class="field-body">Andrea Manni</td>
276 <th class="field-name">Copyright:</th>
278 <td class="field-body">GFDL</td>
282 <th class="field-name">Version:</th>
284 <td class="field-body">0.95</td>
290 <p>Questa guida tratta la configurazione di base dei principali
291 servizi di rete utilizzati con sistemi operativi <em>Unix</em>
292 e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
293 per amministratori di rete in ambiente <em>GNU/Linux</em>. In
294 particolare questa guida e' stata scritta usando come
295 riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
296 esempi presentati dovrebbero quindi essere direttamente
297 utilizzabili anche su distribuzioni derivate da Debian come
298 Ubuntu, per sistemi operativi diversi si presti attenzione ai
299 percorsi dei file citati.</p>
301 <div class="contents topic" id="indice-degli-argomenti">
302 <p class="topic-title first">Indice degli argomenti</p>
304 <ul class="auto-toc simple">
306 <a class="reference internal" href=
307 "#configurazione-sistema" id="id9" name=
308 "id9">1 Configurazione sistema</a>
310 <ul class="auto-toc">
311 <li><a class="reference internal" href=
312 "#solo-per-uso-interno" id="id10" name=
313 "id10">1.1 Solo per uso
317 <a class="reference internal" href="#rete" id="id11"
318 name="id11">1.2 Rete</a>
320 <ul class="auto-toc">
321 <li><a class="reference internal" href=
322 "#interfaces" id="id12" name=
323 "id12">1.2.1 interfaces</a></li>
327 <li><a class="reference internal" href=
328 "#bash-completion" id="id13" name=
329 "id13">1.3 Bash completion</a></li>
331 <li><a class="reference internal" href="#vim" id="id14"
332 name="id14">1.4 Vim</a></li>
334 <li><a class="reference internal" href="#vnc" id="id15"
335 name="id15">1.5 VNC</a></li>
337 <li><a class="reference internal" href=
338 "#lista-dei-pacchetti-di-base" id="id16" name=
339 "id16">1.6 Lista dei pacchetti di
343 <a class="reference internal" href=
344 "#apt-configurazione" id="id17" name=
345 "id17">1.7 Apt configurazione</a>
347 <ul class="auto-toc">
348 <li><a class="reference internal" href=
349 "#sources-list" id="id18" name=
350 "id18">1.7.1 sources.list</a></li>
352 <li><a class="reference internal" href=
353 "#etc-apt-apt-conf" id="id19" name=
354 "id19">1.7.2 /etc/apt/apt.conf</a></li>
361 <a class="reference internal" href="#squid" id="id20"
362 name="id20">2 Squid</a>
364 <ul class="auto-toc">
366 <a class="reference internal" href=
367 "#configurazione-squid-conf" id="id21" name=
368 "id21">2.1 Configurazione:
371 <ul class="auto-toc">
373 <a class="reference internal" href="#cache-dir"
375 "id22">2.1.1 Cache_dir</a>
377 <ul class="auto-toc">
378 <li><a class="reference internal" href=
379 "#opzioni-del-file-system" id="id23" name=
380 "id23">2.1.1.1 Opzioni del
385 <li><a class="reference internal" href=
386 "#configurazioni-di-cache-dir" id="id24" name=
387 "id24">2.1.2 Configurazioni di
390 <li><a class="reference internal" href=
391 "#tag-maximum-object-size" id="id25" name=
392 "id25">2.1.3 TAG:
393 maximum_object_size</a></li>
395 <li><a class="reference internal" href=
396 "#tag-cache-mem" id="id26" name=
397 "id26">2.1.4 TAG:
400 <li><a class="reference internal" href=
401 "#tag-minimum-object-size" id="id27" name=
402 "id27">2.1.5 TAG:
403 minimum_object_size</a></li>
408 <a class="reference internal" href=
409 "#negoziazione-degli-accesi-al-servizio" id="id28"
410 name="id28">2.2 Negoziazione degli
411 accesi al servizio</a>
413 <ul class="auto-toc">
414 <li><a class="reference internal" href=
415 "#acl-e-http-access" id="id29" name=
416 "id29">2.2.1 ACL e http
422 <a class="reference internal" href="#testare-squid"
423 id="id30" name="id30">2.3 Testare
426 <ul class="auto-toc">
427 <li><a class="reference internal" href=
428 "#client-wgetrc" id="id31" name=
429 "id31">2.3.1 Client:
432 <li><a class="reference internal" href=
433 "#server-access-log" id="id32" name=
434 "id32">2.3.2 Server:
441 <li><a class="reference internal" href="#tiny-proxy" id=
442 "id33" name="id33">3 Tiny proxy</a></li>
445 <a class="reference internal" href="#apache" id="id34"
446 name="id34">4 Apache</a>
448 <ul class="auto-toc">
449 <li><a class="reference internal" href=
450 "#pacchetti-da-installare" id="id35" name=
451 "id35">4.1 Pacchetti da
452 installare::</a></li>
454 <li><a class="reference internal" href=
455 "#configurazione-di-apache" id="id36" name=
456 "id36">4.2 Configurazione di
459 <li><a class="reference internal" href="#apache-conf"
461 "id37">4.3 apache.conf</a></li>
464 <a class="reference internal" href=
465 "#installazione-di-php" id="id38" name=
466 "id38">4.4 Installazione di PHP</a>
468 <ul class="auto-toc">
469 <li><a class="reference internal" href=
470 "#test-del-modulo-php" id="id39" name=
471 "id39">4.4.1 Test del modulo
474 <li><a class="reference internal" href=
475 "#installazione-del-supporto-per-mysql-a-php" id=
477 "id40">4.4.2 Installazione del
478 supporto per Mysql a PHP</a></li>
480 <li><a class="reference internal" href=
481 "#phpmyadmin" id="id41" name=
482 "id41">4.4.3 phpmyadmin</a></li>
484 <li><a class="reference internal" href=
485 "#installazione-del-supporto-per-postgresql-a-php"
487 "id42">4.4.4 Installazione del
488 supporto per Postgresql a PHP</a></li>
490 <li><a class="reference internal" href=
491 "#phppgadmin" id="id43" name=
492 "id43">4.4.5 phppgadmin</a></li>
497 <a class="reference internal" href="#virtual-hosts"
498 id="id44" name="id44">4.5 Virtual
501 <ul class="auto-toc">
502 <li><a class="reference internal" href=
503 "#gestione-dns" id="id45" name=
504 "id45">4.5.1 Gestione DNS</a></li>
506 <li><a class="reference internal" href=
507 "#eseguire-una-query-dns-con-dig" id="id46" name=
508 "id46">4.5.2 Eseguire una query
510 "docutils literal">dig</tt>::</a></li>
512 <li><a class="reference internal" href="#id3" id=
513 "id47" name="id47">4.5.3 Virtual
519 <a class="reference internal" href=
520 "#negoziazione-accessi" id="id48" name=
521 "id48">4.6 Negoziazione accessi</a>
523 <ul class="auto-toc">
524 <li><a class="reference internal" href=
525 "#limiti-su-base-ip" id="id49" name=
526 "id49">4.6.1 Limiti su base
532 <a class="reference internal" href=
533 "#user-authentication" id="id50" name=
534 "id50">4.7 User Authentication</a>
536 <ul class="auto-toc">
537 <li><a class="reference internal" href=
538 "#definire-la-cartella" id="id51" name=
539 "id51">4.7.1 Definire la
542 <li><a class="reference internal" href=
543 "#creazione-del-database-delle-passwords" id="id52"
544 name="id52">4.7.2 Creazione del
545 database delle passwords</a></li>
547 <li><a class="reference internal" href="#id4" id=
549 "id53">4.7.3 Configurazione di
554 <li><a class="reference internal" href="#cavets" id=
555 "id54" name="id54">4.8 Cavets</a></li>
560 <a class="reference internal" href="#domain-name-system"
561 id="id55" name="id55">5 Domain Name
564 <ul class="auto-toc">
565 <li><a class="reference internal" href=
566 "#risoluzione-inversa" id="id56" name=
567 "id56">5.1 Risoluzione
570 <li><a class="reference internal" href=
571 "#nomi-di-dominio" id="id57" name=
572 "id57">5.2 Nomi di dominio</a></li>
574 <li><a class="reference internal" href=
575 "#tipologie-di-record" id="id58" name=
576 "id58">5.3 Tipologie di
579 <li><a class="reference internal" href="#utilizzo" id=
581 "id59">5.4 Utilizzo</a></li>
583 <li><a class="reference internal" href=
584 "#risoluzione-dei-nomi-di-dominio" id="id60" name=
585 "id60">5.5 Risoluzione dei nomi di
588 <li><a class="reference internal" href="#dig" id="id61"
589 name="id61">5.6 Dig</a></li>
591 <li><a class="reference internal" href="#resolv-conf"
593 "id62">5.7 resolv.conf</a></li>
595 <li><a class="reference internal" href="#etc-hosts" id=
597 "id63">5.8 /etc/hosts</a></li>
600 <a class="reference internal" href="#hostname" id=
601 "id64" name="id64">5.9 Hostname</a>
603 <ul class="auto-toc">
604 <li><a class="reference internal" href="#fqdn" id=
606 "id65">5.9.1 FQDN</a></li>
613 <a class="reference internal" href="#dnsmasq" id="id66"
614 name="id66">6 DNSmasq</a>
616 <ul class="auto-toc">
617 <li><a class="reference internal" href=
618 "#configurazione" id="id67" name=
619 "id67">6.1 Configurazione</a></li>
621 <li><a class="reference internal" href="#dhcp" id=
622 "id68" name="id68">6.2 DHCP</a></li>
624 <li><a class="reference internal" href="#dns-cache" id=
625 "id69" name="id69">6.3 DNS
631 <a class="reference internal" href=
632 "#bind-dns-autoritativo" id="id70" name=
633 "id70">7 Bind : DNS Autoritativo</a>
635 <ul class="auto-toc">
636 <li><a class="reference internal" href="#id5" id="id71"
637 name="id71">7.1 DNS cache</a></li>
640 <a class="reference internal" href=
641 "#ospitare-una-zona" id="id72" name=
642 "id72">7.2 Ospitare una zona</a>
644 <ul class="auto-toc">
645 <li><a class="reference internal" href=
646 "#named-conf-local" id="id73" name=
647 "id73">7.2.1 named.conf.local</a></li>
650 <a class="reference internal" href=
651 "#configurazione-della-zona" id="id74" name=
652 "id74">7.2.2 Configurazione
655 <ul class="auto-toc">
656 <li><a class="reference internal" href=
657 "#soa-start-of-authority-record" id="id75"
658 name="id75">7.2.2.1 SOA: Start
659 of Authority Record</a></li>
661 <li><a class="reference internal" href=
662 "#altri-campi" id="id76" name=
663 "id76">7.2.2.2 Altri
670 <li><a class="reference internal" href="#dns-slave" id=
671 "id77" name="id77">7.3 DNS
675 <a class="reference internal" href=
676 "#aggiornamento-dinamico-nsupdate" id="id78" name=
677 "id78">7.4 Aggiornamento dinamico:
680 <ul class="auto-toc">
681 <li><a class="reference internal" href=
682 "#configurazione-client-nsupdate" id="id79" name=
683 "id79">7.4.1 Configurazione client
686 <li><a class="reference internal" href=
687 "#configurazione-server-riconoscimento-chiave" id=
689 "id80">7.4.2 Configurazione
690 server: riconoscimento chiave</a></li>
692 <li><a class="reference internal" href=
693 "#server-gestione-dell-intera-zona" id="id81" name=
694 "id81">7.4.3 Server: gestione
695 dell'intera zona</a></li>
697 <li><a class="reference internal" href=
698 "#automatizzare-l-aggiornamento-dinamico" id="id82"
699 name="id82">7.4.4 Automatizzare
700 l'aggiornamento dinamico</a></li>
704 <li><a class="reference internal" href=
705 "#link-suggeriti" id="id83" name=
706 "id83">7.5 Link suggeriti:</a></li>
711 <a class="reference internal" href="#samba" id="id84"
712 name="id84">8 Samba</a>
714 <ul class="auto-toc">
715 <li><a class="reference internal" href="#pacchetti" id=
717 "id85">8.1 Pacchetti</a></li>
719 <li><a class="reference internal" href=
720 "#passwords-e-autenticazione" id="id86" name=
721 "id86">8.2 Passwords e
722 autenticazione</a></li>
724 <li><a class="reference internal" href=
725 "#creazione-utenti" id="id87" name=
726 "id87">8.3 Creazione Utenti</a></li>
729 <a class="reference internal" href=
730 "#creare-la-condivisione" id="id88" name=
731 "id88">8.4 Creare la
734 <ul class="auto-toc">
735 <li><a class="reference internal" href=
736 "#sicurezza-permessi-di-esecuzione-sul-server" id=
738 "id89">8.4.1 Sicurezza: permessi
739 di esecuzione sul server</a></li>
744 <a class="reference internal" href=
745 "#configurazione-dell-applicativo-samba-vero-e-proprio"
747 "id90">8.5 Configurazione
748 dell'applicativo Samba vero e proprio.</a>
750 <ul class="auto-toc">
751 <li><a class="reference internal" href=
752 "#creazione-di-un-gruppo" id="id91" name=
753 "id91">8.5.1 Creazione di un
758 <li><a class="reference internal" href=
759 "#testare-il-servizio" id="id92" name=
760 "id92">8.6 Testare il
766 <a class="reference internal" href=
767 "#server-di-posta-postfix" id="id93" name=
768 "id93">9 Server di posta: Postfix</a>
770 <ul class="auto-toc">
772 <a class="reference internal" href=
773 "#test-del-server-smtp" id="id94" name=
774 "id94">9.1 Test del server smtp</a>
776 <ul class="auto-toc">
777 <li><a class="reference internal" href="#swaks" id=
779 "id95">9.1.1 Swaks</a></li>
783 <li><a class="reference internal" href="#imap-e-pop"
784 id="id96" name="id96">9.2 Imap e
788 <a class="reference internal" href=
789 "#client-a-riga-di-comando" id="id97" name=
790 "id97">9.3 Client a riga di
793 <ul class="auto-toc">
794 <li><a class="reference internal" href="#mailx" id=
796 "id98">9.3.1 mailx</a></li>
798 <li><a class="reference internal" href="#mutt" id=
800 "id99">9.3.2 Mutt</a></li>
802 <li><a class="reference internal" href=
803 "#web-client" id="id100" name=
804 "id100">9.3.3 Web client</a></li>
809 <a class="reference internal" href="#graylisting" id=
811 "id101">9.4 Graylisting</a>
813 <ul class="auto-toc">
814 <li><a class="reference internal" href=
815 "#abilitazione-in-postfix" id="id102" name=
816 "id102">9.4.1 Abilitazione in
819 <li><a class="reference internal" href="#test" id=
821 "id103">9.4.2 Test</a></li>
823 <li><a class="reference internal" href=
824 "#statistiche" id="id104" name=
825 "id104">9.4.3 Statistiche</a></li>
832 <a class="reference internal" href="#firewall" id="id105"
833 name="id105">10 Firewall</a>
835 <ul class="auto-toc">
836 <li><a class="reference internal" href="#links" id=
838 "id106">10.1 Links</a></li>
840 <li><a class="reference internal" href="#ipfilter" id=
842 "id107">10.2 Ipfilter</a></li>
845 <a class="reference internal" href=
846 "#progettazione-di-un-firewall" id="id108" name=
847 "id108">10.3 Progettazione di un
850 <ul class="auto-toc">
851 <li><a class="reference internal" href=
852 "#collocazione" id="id109" name=
853 "id109">10.3.1 Collocazione</a></li>
855 <li><a class="reference internal" href=
856 "#policy-di-default" id="id110" name=
857 "id110">10.3.2 Policy di
860 <li><a class="reference internal" href="#hardware"
862 "id111">10.3.3 Hardware</a></li>
866 <li><a class="reference internal" href=
867 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
868 "id112" name="id112">10.4 Percorso dei
869 pacchetti tra tabelle e catene</a></li>
872 <a class="reference internal" href=
873 "#concetti-di-base" id="id113" name=
874 "id113">10.5 Concetti di base</a>
876 <ul class="auto-toc">
877 <li><a class="reference internal" href=
878 "#tabelle-catene-regole" id="id114" name=
879 "id114">10.5.1 Tabelle, catene,
882 <li><a class="reference internal" href="#match" id=
884 "id115">10.5.2 Match</a></li>
886 <li><a class="reference internal" href="#targets"
888 "id116">10.5.3 Targets</a></li>
892 <li><a class="reference internal" href=
893 "#tabella-filter" id="id117" name=
894 "id117">10.6 Tabella Filter</a></li>
896 <li><a class="reference internal" href=
897 "#flush-automatico-per-macchine-remote" id="id118"
898 name="id118">10.7 Flush automatico per
899 macchine remote</a></li>
901 <li><a class="reference internal" href=
902 "#gestione-regole-rules" id="id119" name=
903 "id119">10.8 Gestione regole
907 <a class="reference internal" href=
908 "#salvataggio-regole" id="id120" name=
909 "id120">10.9 Salvataggio regole</a>
911 <ul class="auto-toc">
912 <li><a class="reference internal" href=
913 "#iptables-save" id="id121" name=
914 "id121">10.9.1 Iptables-save</a></li>
916 <li><a class="reference internal" href=
917 "#iptables-restore" id="id122" name=
918 "id122">10.9.2 Iptables-restore</a></li>
923 <a class="reference internal" href="#esempi" id=
925 "id123">10.10 Esempi</a>
927 <ul class="auto-toc">
928 <li><a class="reference internal" href=
929 "#bloccare-i-ping-dall-esterno" id="id124" name=
930 "id124">10.10.1 Bloccare i ping
931 dall'esterno</a></li>
933 <li><a class="reference internal" href=
934 "#masquerading-snat" id="id125" name=
935 "id125">10.10.2 Masquerading
938 <li><a class="reference internal" href=
939 "#brute-force" id="id126" name=
940 "id126">10.10.3 Brute
946 <a class="reference internal" href="#proc-filesystem"
947 id="id127" name="id127">10.11 Proc
950 <ul class="auto-toc">
951 <li><a class="reference internal" href=
952 "#ip-forward" id="id128" name=
953 "id128">10.11.1 ip_forward</a></li>
955 <li><a class="reference internal" href=
956 "#ip-default-ttl" id="id129" name=
957 "id129">10.11.2 ip_default_ttl</a></li>
959 <li><a class="reference internal" href=
960 "#ip-local-port-range" id="id130" name=
961 "id130">10.11.3 ip_local_port_range</a></li>
968 <a class="reference internal" href="#ftp-server" id=
969 "id131" name="id131">11 FTP Server</a>
971 <ul class="auto-toc">
972 <li><a class="reference internal" href="#id8" id=
974 "id132">11.1 Pacchetti</a></li>
976 <li><a class="reference internal" href="#sessioni-ftp"
977 id="id133" name="id133">11.2 Sessioni
980 <li><a class="reference internal" href=
981 "#configurazione-iniziale" id="id134" name=
982 "id134">11.3 Configurazione
985 <li><a class="reference internal" href=
986 "#abilitare-gli-utenti-locali" id="id135" name=
987 "id135">11.4 Abilitare gli utenti
990 <li><a class="reference internal" href="#jail-chroot"
991 id="id136" name="id136">11.5 Jail
994 <li><a class="reference internal" href=
995 "#permessi-sul-filesystem" id="id137" name=
996 "id137">11.6 Permessi sul
999 <li><a class="reference internal" href=
1000 "#shell-dell-utente" id="id138" name=
1001 "id138">11.7 Shell
1002 dell'utente</a></li>
1004 <li><a class="reference internal" href="#altre-opzioni"
1005 id="id139" name="id139">11.8 Altre
1012 <p>Generato il 2010-05-19 con: <a class="reference external"
1014 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
1016 <div class="section" id="configurazione-sistema">
1017 <h1><a class="toc-backref" href=
1018 "#id9">1 Configurazione sistema</a></h1>
1020 <div class="section" id="solo-per-uso-interno">
1021 <h2><a class="toc-backref" href=
1022 "#id10">1.1 Solo per uso interno</a></h2>
1024 <p>Impostazioni di base per la configurazione del sistema
1025 operativo e della rete nel laboratorio 208 facente parte
1026 della rete piffa.net .</p>
1028 <p>Sono qui riportati i parametri della rete locale per
1029 comodita' degli studenti, gli altri lettori possono
1030 considerarli come riferimento per comprendere i valori
1031 espressi nei vari file di configurazione. Ad esempio:
1032 quando leggerete <tt class=
1033 "docutils literal">10.10.208.248:3128</tt> saprete che si
1034 tratta del nostro <em>proxy http</em> in ascolto sulla
1035 porta <cite>3128</cite>, stara' quindi a voi sostituire i
1036 dati con gli equivalenti <em>IP</em> della vostra rete.</p>
1039 <div class="section" id="rete">
1040 <h2><a class="toc-backref" href=
1041 "#id11">1.2 Rete</a></h2>
1043 <p>Parametri della rete attualmente in uso:</p>
1045 <table border="1" class="docutils">
1051 <tbody valign="top">
1053 <td colspan="2">Parametri della rete</td>
1059 <td>10.10.208.0/24</td>
1065 <td>255.255.255.0</td>
1071 <td>10.10.208.255</td>
1077 <td>10.10.208.248</td>
1083 <td>10.10.208.248</td>
1088 <p>Dal server locale degli studeti,
1089 <strong>Bender</strong>, corrispondente all'IP <tt class=
1090 "docutils literal">10.10.208.248</tt>, vengono erogati i
1091 servizi DHCP, DNS, gateway (con NAT), proxy http e mirror
1092 della distribuzione Debian ( <a class="reference external"
1094 "http://debian.piffa.net">http://debian.piffa.net</a>).
1095 Altri servizi in esecuzione sul server:</p>
1098 <li>Rsync server e altri software di aggiornamento /
1099 installazione di massa</li>
1101 <li>Server imap / pop3 / webmail / smtp</li>
1103 <li>Server ssh per i test degli studenti</li>
1105 <li>File server Samba, NFS e controller di qualsiasi
1106 altro FS distribuito</li>
1108 <li>Print server per la gestione delle stampanti</li>
1112 <li>Mirror locale delle *.iso dei sistemi operativi e dei
1113 vari software usati durante le lezioni</li>
1115 <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1116 framework vengono attivati a seconda dei corsi
1120 <p>Durante il corso delle lezioni e' opportuno che le
1121 macchine degli studenti si appoggino al server Bender
1122 (ottetto finale <tt class="docutils literal">248</tt>), nel
1123 caso questo non fosse raggiungibile (ad esempio per
1124 permettere impostazioni di DHCP / routing diverse) sara'
1125 comunque disponibile il <tt class=
1126 "docutils literal">10.10.208.254</tt> come gateway | DNS
1127 per la rete <tt class=
1128 "docutils literal">10.10.208.10</tt>.</p>
1130 <p><strong>Non e' piu' possibile</strong> raggiungere
1131 Bender tramite l'IP pubblico <tt class=
1132 "docutils literal">212.22.136.248</tt> o <em>qualsiasi
1133 altro ip</em> della classe <tt class="docutils literal">C
1134 212.22.136.0/24</tt> precedentemente disponibile.</p>
1136 <p>Il computer del docente con il server VNC e' sempre
1137 configurato con l'ottetto finale: <tt class=
1138 "docutils literal">177</tt> della rete utilizzata durante
1139 le lezioni (quindi generalmente la VNC sara' disponibile
1140 sul <tt class="docutils literal">10.10.208.177:1</tt>.</p>
1142 <p>Gli studenti sono pregati di non impedire l'accesso SSH
1143 alla propria macchina dal computer del docente, e non
1144 modificare la password dell'utente <tt class=
1145 "docutils literal">root</tt> del sistema operativo
1146 <em>pre-istallato</em> (ad es: <em>Diurno</em>).</p>
1148 <div class="section" id="interfaces">
1149 <h3><a class="toc-backref" href=
1150 "#id12">1.2.1 interfaces</a></h3>
1152 <p>Segue un esempio del file di configurazione della
1153 scheda di rete con configurazione statica:</p>
1155 <p>/etc/network/interfaces:</p>
1156 <pre class="literal-block">
1157 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1159 # The loopback interface
1160 iface lo inet loopback
1162 # La prima scheda di rete (se si chiama eth0)
1163 iface etho inet static
1165 # iface etho inet dhcp
1166 address 10.10.208.101
1167 netmask 255.255.255.0
1169 broadcast 10.10.208.255
1170 gateway 10.10.208.254
1172 # Quali interfaccie devono partire automaticamente:
1176 <p>Controllare il nome della propria scheda di rete: a
1177 volte <em>udev</em> rinomina la prima scheda a <tt class=
1178 "docutils literal">eth1</tt>, oppure potreste avere piu'
1179 di una scheda di rete (anche un'interfaccia
1180 <em>firewire</em> puo' essere automaticamente abilitata
1181 come scheda di rete).</p>
1183 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1184 , eth0:1 , ...) ricordarsi che queste dipendono dalla
1185 scheda fisica a cui sono associate: abbattere con
1186 <tt class="docutils literal">ifconfig down eth0</tt> la
1187 scheda principale fara' cadere anche queste. Tornando ad
1188 attivare la scada principale con <tt class=
1189 "docutils literal">ifconfig eth0 up</tt> la virtuale
1190 tornera' attiva: nel caso voleste disabilitarla dovrete
1191 quindi sempre abbattere manualmente la scheda virtuale
1192 <em>prima</em> della scheda reale.</p>
1194 <p>I DNS vanno indicati nel file <tt class=
1195 "docutils literal">/etc/resolv.conf</tt> , la cui
1196 sintassi e' spiegata al punto 4.6 . Come DNS si
1197 <em>deve</em> usare il server Bender, alcuni parametri
1198 dei software di installazione, risoluzione dei mirror,
1199 vengono opportunamente modificatia da questo DNS.</p>
1203 <div class="section" id="bash-completion">
1204 <h2><a class="toc-backref" href=
1205 "#id13">1.3 Bash completion</a></h2>
1207 <p>Il completamento automatico della shell (che si attiva
1208 premendo il tasto tab una o due volte mentre si sta
1209 scrivendo un termine) permette di comporre automaticamente
1210 i nomi dei comandi e i percorsi dei file, sopratutto la
1211 composizione automatica dei percorsi dei file e' di grande
1214 <p>Bash_completion permette di integrare il completamento
1215 automatico con i nomi dei pacchetti e oggetti dei comandi:
1216 ad es. volendo digitare <tt class=
1217 "docutils literal"><span class="pre">apt-get</span>
1218 inst[TAB] xtigh[TAB]</tt> ora verra' completato
1219 automaticamente sia la parola <tt class=
1220 "docutils literal">install</tt> che il nome del pacchetto
1221 <tt class="docutils literal">xtightvncviewer</tt>.</p>
1223 <p>Abilitare /etc/bash_completion nel file <tt class=
1224 "docutils literal">/etc/bash.bashrc</tt> oppure includerlo
1225 nel proprio <tt class="docutils literal"><span class=
1226 "pre">~/.bashrc</span></tt> (che sarebbe il file
1227 <em>nascosto</em>, quindi con un punto all'inizio del nome
1228 del file, di configurazione della shell bash per ogni
1229 utente, presente nella propria <em>home
1230 directory</em>):</p>
1231 <pre class="literal-block">
1232 echo ". /etc/bash_completion" >> ~/.bashrc
1235 <p>Esempio di ~/.bahsrc</p>
1236 <pre class="literal-block">
1237 # ~/.bashrc: executed by bash(1) for non-login shells.
1239 export PS1='\h:\w\$ '
1242 # De-commentare le seguenti righe per abilitare la colorazione dei
1244 export LS_OPTIONS='--color=auto'
1246 alias ls='ls $LS_OPTIONS'
1247 alias ll='ls $LS_OPTIONS -l'
1248 alias l='ls $LS_OPTIONS -lA'
1250 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1255 # questo abilita bash completion
1256 . /etc/bash_completion
1259 <p>Il file <tt class=
1260 "docutils literal">/etc/bash_completion</tt> deve essere
1261 presente nel sistema, in caso contrario installare il
1262 pacchetto: <tt class="docutils literal"><span class=
1263 "pre">bash-completion</span></tt>. Generalmente l'utente
1264 <tt class="docutils literal">root</tt> ha un file
1265 <tt class="docutils literal">.bashrc</tt> preimpostato
1266 analogo a quello citato sopra, a differenza dei normali
1267 utenti di sistema.</p>
1272 <li><a class="reference external" href=
1273 "http://www.debian-administration.org/articles/316">An
1274 introduction to bash completion</a></li>
1276 <li><a class="reference external" href=
1277 "http://www.caliban.org/bash/">Working more productively
1278 with bash 2.x/3.x</a></li>
1280 <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1281 "reference external" href=
1282 "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1286 <div class="section" id="vim">
1287 <h2><a class="toc-backref" href=
1288 "#id14">1.4 Vim</a></h2>
1290 <p>Vim e' l'editor di testo preferito dai sistemisti,
1291 quindi sara' conveniente impostare fin da subito alcune
1292 impostazioni per renderlo piu' comodo.</p>
1294 <p>Assicurarsi che sia installata nel sistema la versione
1295 completa dell'editor installando il pacchetto <tt class=
1296 "docutils literal">vim</tt>:</p>
1297 <pre class="literal-block">
1298 # apt-get install vim
1301 <p>Modificare poi il file di configurazione generale
1302 <tt class="docutils literal">/etc/vim/vimrc</tt></p>
1303 <pre class="literal-block">
1304 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1305 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1306 " you can find below. If you wish to change any of those settings, you should
1307 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1308 " everytime an upgrade of the vim packages is performed. It is recommended to
1309 " make changes after sourcing debian.vim since it alters the value of the
1310 " 'compatible' option.
1312 " This line should not be removed as it ensures that various options are
1313 " properly set to work with the Vim-related packages available in Debian.
1316 " Uncomment the next line to make Vim more Vi-compatible
1317 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1318 " options, so any other options should be set AFTER setting 'compatible'.
1321 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1322 " line enables syntax highlighting by default.
1325 " If using a dark background within the editing area and syntax highlighting
1326 " turn on this option as well.
1329 " Uncomment the following to have Vim jump to the last position when
1333 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1334 \| exe "normal! g'\"" | endif
1337 " Uncomment the following to have Vim load indentation rules and plugins
1338 " according to the detected filetype.
1339 " This is not recommanded if you often copy and paste into vim,
1340 " as it messes all the indentation.
1342 filetype plugin indent on
1345 " This goes for comments folding: use co to expnad and zc to compress,
1346 " zi to toggle on/off
1348 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1350 " The following are commented out as they cause vim to behave a lot
1351 " differently from regular Vi. They are highly recommended though.
1352 set showcmd " Show (partial) command in status line.
1353 "set showmatch " Show matching brackets.
1354 # Ignorecase is quite userfull
1355 set ignorecase " Do case insensitive matching
1356 "set smartcase " Do smart case matching
1357 "set incsearch " Incremental search
1358 set autowrite " Automatically save before commands like :next and :make
1359 "set hidden " Hide buffers when they are abandoned
1360 "set mouse=a " Enable mouse usage (all modes) in terminals
1362 " Source a global configuration file if available
1363 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1364 if filereadable("/etc/vim/vimrc.local")
1365 source /etc/vim/vimrc.local
1369 <p>I principianti faranno bene ad esercitarsi con
1370 <tt class="docutils literal">vimtutor it</tt>.</p>
1372 <p>Altri link per VIM:</p>
1375 <li>Vim Introduction and Tutorial: <a class=
1376 "reference external" href=
1377 "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1378 http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1380 <li><a class="reference external" href=
1381 "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1383 <li><a class="reference external" href=
1384 "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1388 <div class="section" id="vnc">
1389 <h2><a class="toc-backref" href=
1390 "#id15">1.5 VNC</a></h2>
1392 <p>I Virtual Network Computing (o VNC) sono software di
1393 controllo remoto e servono per amministrare un computer a
1394 distanzai. Nel nostro caso la VNC sara' utilizzata per
1395 visualizzare la sessione di lavoro di un altro computer sul
1396 proprio a scopo didattico.</p>
1398 <p>Per collegarvi al server del docente usate lo script
1399 <tt class="docutils literal">guarda.sh</tt> che dovrebbe
1400 gia essere disponibili sui sistemi preconfigurati, oppure
1401 potete invocare direttamente il collegamento con:</p>
1402 <pre class="literal-block">
1403 xtightvncviewer -viewonly 10.10.208.177:1
1406 <p>Se il comando non fosse disponibile installate il
1407 pacchetto <tt class=
1408 "docutils literal">xtightvncviewer</tt>. Potete anche
1409 scaricare lo script <tt class=
1410 "docutils literal">guarda.sh</tt> e renderlo eseguibile, ed
1411 eventualmente creare una voce nel menu di KDE per
1415 <pre class="literal-block">
1418 wget http://bender/guarda.sh
1423 <p>Per eseguire lo script digitare semplicemente <tt class=
1424 "docutils literal">guarda.sh</tt>, oppure creare un link /
1425 collegamento sul Desktop allo script <tt class=
1426 "docutils literal">/usr/local/bin/guarda.sh</tt>.</p>
1428 <p>Le impostazioni del server VNC sono:</p>
1430 <table border="1" class="docutils">
1436 <thead valign="bottom">
1438 <th class="head">Parametro</th>
1440 <th class="head">Valore</th>
1444 <tbody valign="top">
1448 <td>10.10.208.177:1</td>
1452 <td>Server grafico</td>
1465 <p>Si noti che non e' possibile lanciare un applicativo sul
1466 server grafico di un utente da una shell in cui si sta
1467 lavorando come altro utente, anche se root. E' quindi
1468 necessario essere l'utente di sistema che si e' loggato
1469 inizialmente nella sessione grafica per poter lanciare lo
1470 script guarda.sh da una shell.</p>
1472 <p>Controllare con <tt class="docutils literal">whoami</tt>
1473 di essere l'utente normale (es <tt class=
1474 "docutils literal">utente | studente | proprio nome</tt> ),
1475 in caso si sia assunta una altra <tt class=
1476 "docutils literal">id</tt> si apra un altra shell o si esca
1477 da quella attuale con <tt class=
1478 "docutils literal">exit</tt> .</p>
1481 <div class="section" id="lista-dei-pacchetti-di-base">
1482 <h2><a class="toc-backref" href=
1483 "#id16">1.6 Lista dei pacchetti di
1486 <p>I pacchetti installati generalmente <a class=
1487 "footnote-reference" href="#id2" id="id1" name=
1488 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1489 <pre class="literal-block">
1490 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1493 <table class="docutils footnote" frame="void" id="id2"
1500 <tbody valign="top">
1502 <td class="label"><a class="fn-backref" href=
1505 <td><tt class="docutils literal"><span class=
1506 "pre">kde-core</span></tt> e' piu' leggero del
1507 pacchetto <tt class="docutils literal">kde</tt>.
1508 Esiste un equivalente <tt class=
1509 "docutils literal"><span class=
1510 "pre">gnome-core</span></tt> per chi preferisce
1511 Gnome, nel caso si potrebbe installare il log-in
1512 manager <cite>gdm</cite> al posto di
1513 <cite>kdm</cite>.</td>
1519 <div class="section" id="apt-configurazione">
1520 <h2><a class="toc-backref" href=
1521 "#id17">1.7 Apt configurazione</a></h2>
1523 <p>Vediamo i due file principali di apt:</p>
1527 "docutils literal">/etc/apt/sources.list</tt></li>
1530 "docutils literal">/etc/apt/apt.conf</tt></li>
1533 <div class="section" id="sources-list">
1534 <h3><a class="toc-backref" href=
1535 "#id18">1.7.1 sources.list</a></h3>
1537 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1538 preleva i pacchetti da installare tramite <em>dpkg</em>,
1539 vengono quindi precisati i metodi (ad es. http / ftp /
1540 cdrom / file), la release che si vuole tracciare (es
1541 <tt class="docutils literal">stable, testing,
1542 unstable</tt> oppure i corrispondenti release name es:
1543 <tt class="docutils literal">Lenny, Squeeze, Sid</tt>), i
1544 rami di interesse (es: <tt class=
1545 "docutils literal">main</tt> che e' l'archivio
1546 principale, <tt class="docutils literal"><span class=
1547 "pre">non-free</span></tt> per il software non libero,
1548 <tt class="docutils literal">contrib</tt> per i pacchetti
1549 non realizzati dai manutentori ufficiali).</p>
1551 <p>Gli archivi sono generalmente:</p>
1554 <li><tt class="docutils literal">deb</tt> per pacchetti
1555 Debian binari, pronti per l'installazione.</li>
1557 <li><tt class="docutils literal"><span class=
1558 "pre">deb-src</span></tt> per i pacchetti sorgenti
1559 (quindi da compilare, come il kernel) degli stessi
1560 pacchetti binari. In genere se non compilate spesso
1561 potete evitare di tracciare i sorgenti per risparmiare
1566 "docutils literal">/etc/apt/sources.list</tt></p>
1567 <pre class="literal-block">
1568 # esempio di accesso a un CDROM:
1569 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1571 # ftp.it.debian.org viene rediretto su un mirror interno
1572 # quando vi trovate nella rete interna piffa.net
1573 deb http://ftp.it.debian.org/debian/ lenny main
1574 # Sono disponibili anche i rami non-free contrib
1575 # deb http://ftp.it.debian.org/debian/ lenny non-free contrib
1576 # Sono disponibili anche le release unstable e testing
1577 # deb http://ftp.it.debian.org/debian/ testing main non-free contrib
1578 # deb http://ftp.it.debian.org/debian/ sid main non-free contrib
1580 # Sorgenti dei pacchetti:
1581 # deb-src http://ftp.bononia.it/debian/ lenny main
1583 # Mirror da kernel.org europa da usare a casa:
1584 deb http://mirrors.eu.kernel.org/debian/ lenny main
1586 # Security dal sito principale
1587 deb http://security.debian.org/ lenny/updates main
1588 # deb-src http://security.debian.org/ lenny/updates main
1590 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1591 # non legati a dinamiche di sicurezza
1592 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1593 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1595 # Esempio di accesso a un file system locale contenente i pacchetti:
1596 # Potete scaricarei in aula con debmirror da debian.piffa.net
1597 # un mirror locale da usare poi a casa anche senza internet
1598 # deb file:/mnt/mirror sid main non-free contrib
1602 <div class="section" id="etc-apt-apt-conf">
1603 <h3><a class="toc-backref" href=
1604 "#id19">1.7.2 /etc/apt/apt.conf</a></h3>
1606 <p>Questo file contiene le opzioni di apt, come ad
1607 esempio il proxy:</p>
1608 <pre class="literal-block">
1609 Acquire::http::Proxy "http://10.10.208.248:3128";
1612 <p>Si tenga conto che se si imposta un proxy per apt sul
1613 proprio portatile e tornati a casa propria si vuole
1614 scaricare nuovi pacchetti si dovra' disabilitare il proxy
1615 commentando la riga con ";" (''punto-e-virgola''). Su un
1616 portatile vi conviene tracciare il mirror <tt class=
1617 "docutils literal">ftp.it.debian.org</tt> senza impostare
1618 il proxy: in aula verra' rediretto al mirror locale e a
1619 casa vi appoggerete al mirror ufficiale.</p>
1621 <p>E' consigliabile impostare il proxy per apt anche in
1622 presenza di un proxy-http <em>trasparente</em>.</p>
1627 <div class="section" id="squid">
1628 <h1><a class="toc-backref" href=
1629 "#id20">2 Squid</a></h1>
1631 <p>Squid e' un proxy cache http (ma puo' anche gestire i
1632 protocolli FTP e https) robusto e strutturato, grazie alla
1633 sua flessibilita' puo' essere utilizzato sia in piccole reti
1634 locali che in scenari piu' complessi. E' molto semplice
1635 configurarlo per la semplice <em>condivisione della
1636 navigazione internet</em> all'interno di una rete locale, per
1637 poi poter sucessivamente implementare la autenticazione degli
1638 utenti, il filtraggio dei contenuti (Squid e' una
1639 applicazione che si muove nel 4' livello del modello TCP/IP a
1640 differenza di un <em>ipfilter</em> limitato al 2'), il
1641 bilanciamento del carico tra piu' server proxy.</p>
1643 <p>Se il server Squid e' in grado di accedere a internet
1644 puor' permette la navigazione web a una rete basata su
1645 indirizzi IP privati (es una 192.168.0.0/24). E se la rete
1646 privata deve solo navigare in internet, non serve introdurre
1647 nella rete un NAT (si veda la sezione sui firewall) per
1648 condividere la connessione: basta il solo Squid. Per altro
1649 non servira' neanche un servizio DNS accessibile dai clients
1650 dato che sara' il solo Squid a risolvere i nomi di dominio
1651 per i suoi client http.</p>
1653 <p>Inoltre Squid svolge la funzione di <em>anonymizer</em>:
1654 nasconde i client http alla rete internet: e' solo il server
1655 proxy ad accedere ai server web frequentati dai client:
1656 questi non sono percepiti ed esposti all'esterno della rete
1657 locale ma si relazionano solo con Squid. Dal punto di vista
1658 della sicurezza della rete locale questo e' preferibile ad un
1659 approccio alla navigazione basato su NAT.</p>
1661 <p>Squid ascolta di default sulla porta <tt class=
1662 "docutils literal">3128</tt>, per quanto in genere la porta
1663 preferita per i servizi di caching http sia la <tt class=
1664 "docutils literal">8080</tt>. Per utilizzarlo subito anche
1665 per apt si aggiunga ad <tt class=
1666 "docutils literal">/etc/apt/apt.conf</tt></p>
1667 <pre class="literal-block">
1668 Acquire::http::Proxy "10.10.208.254:3128";
1671 <p>Per installare Squid si usi il pacchetto:</p>
1672 <pre class="literal-block">
1676 <div class="section" id="configurazione-squid-conf">
1677 <h2><a class="toc-backref" href=
1678 "#id21">2.1 Configurazione:
1681 <p>egue un estratto delle direttive principali viste in
1682 aula presenti nel file di configurazione <tt class=
1683 "docutils literal">/etc/squid3/squid.conf</tt> .</p>
1685 <div class="section" id="cache-dir">
1686 <h3><a class="toc-backref" href=
1687 "#id22">2.1.1 Cache_dir</a></h3>
1689 <p>Cache dir serve per impostare caratteristiche
1690 fondamentali della cache creata sul supporto di storaggio
1691 quali dimensione e percorso nel file-system. Essendo la
1692 dimensione di default della cache pari a ~``100 MB`` e'
1693 altamente consigliabili aumentare questo parametro se si
1694 vuole godere dei vantaggi della funzione di cache per
1697 <p>Per stabilire il dimensionamento della cache si tenga
1698 conto dello spazio disponibile, dimensioni tipiche e
1699 massime degli oggetti che si vuole tenere in cache (un
1700 solo file .iso occupa circa <tt class=
1701 "docutils literal">700 MB</tt>, il pacchetto
1702 Openoffice.org circa 150 MB, un pacchetto Debian circa 20
1703 MB), e in fine del numero dei client.</p>
1705 <p>Si presti poi attenzione alla natura dei dati che
1706 saranno salvati nella cache: sono tutti dati facilmente
1707 sostituibili (gli originali sono on-line) la cui perdita
1708 causerebbe solo la necessita' di ripopolare la cache.
1709 Questo rende la cache di Squid un possibile candidato ad
1710 un RAID stirpe (livello 0) a ad un file system che
1711 prediliga le performance a scapito della consistenza, con
1712 vantaggi sia per le prestazioni (e la velocita' di
1713 navigazione e' uno dei motivi per cui si installa Squid)
1714 che per l'utilizzo estensivo dello spazio di
1717 <p>Questo fino al momento in cui per voi non sia piu'
1718 importante garantire la disponibilita' del servizio: se
1719 il RAID stripe dovesse rompersi gli utenti non potrebbero
1720 piu' navigare, cosa che per natura dello stripe e' piu'
1721 probabile rispetto ad un filesytem normale.</p>
1723 <div class="section" id="opzioni-del-file-system">
1724 <h4><a class="toc-backref" href=
1725 "#id23">2.1.1.1 Opzioni del file
1728 <p>I dati che compongono la cache vengono salvati sul
1729 filesytem del server dietro richiesta dei client http
1730 degli utenti della rete locale. Come per i servizi di
1731 file sharing o per la posta elettronica non c'e' motivo
1732 che il filesystem su cui sono ospitati questi dati
1733 abbiano i privilegi di eseguibilita' o suid (in genere
1734 si possono anche usare opzioni come noatime per rendere
1735 i file-systems piu' veloci, scegliere di utilizzare un
1736 journal dipende dalla dimesione della cache dalle
1737 preferenze: affidabilita' oppure prestazioni):</p>
1740 <pre class="literal-block">
1742 # Filesystem per Squid http cache
1743 /dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
1748 <div class="section" id="configurazioni-di-cache-dir">
1749 <h3><a class="toc-backref" href=
1750 "#id24">2.1.2 Configurazioni di
1753 <p>Ora possiamo impostare la cache nel file di
1754 configurazione <tt class=
1755 "docutils literal">/etc/squid3/squid.conf</tt>:</p>
1756 <pre class="literal-block">
1757 #TAG: cache_dir (riga 1628)
1760 # cache_dir Type Directory-Name Fs-specific-data [options]
1762 # You can specify multiple cache_dir lines to spread the
1763 # cache among different disk partitions.
1766 # cache_dir ufs /var/spool/squid3 100 16 256
1767 cache_dir aufs /var/spool/squid3 300 24 256
1768 # | | | | secondo livello di directory
1769 # | | | directory primo livello
1770 # | | dimensione in MB
1771 # | path della cache
1775 <p>Se si modifica la struttura della cache di Squid, ad
1776 esempio variando il numero delle directory, puo' essere
1777 opportuno cancellare e rigenerare la cache. Tipicamente
1778 e' consigliabile cancellare (se si ha ridotto il numero
1779 delle directory) la vecchia cache e poi generare una
1780 nuova struttura. Se si vuole star nel sicuro ogni volta
1781 che si modifica l'impostazione delle directory si svuoti
1782 la vecchia cache e se ne generi una nuova:</p>
1783 <pre class="literal-block">
1784 # /etc/init.d/squid3 stop
1785 # rm -r /var/spool/squid3/??
1787 # /etc/init.d/squid3 start
1791 <div class="section" id="tag-maximum-object-size">
1792 <h3><a class="toc-backref" href=
1793 "#id25">2.1.3 TAG:
1794 maximum_object_size</a></h3>
1796 <p>Questa direttiva imposta la dimensione massima degli
1797 oggetti che vengono salvati sul supporto di storaggio,
1798 oggetti di dimensioni superiori saranno comunque
1799 scaricati ma non tenuti in cache.</p>
1801 <p>TAG: maximum_object_size (1760):</p>
1802 <pre class="literal-block">
1803 # TAG: maximum_object_size (1760)
1804 # Objects larger than this size will NOT be saved on disk. The
1805 # value is specified in kilobytes, and the default is 4MB. If
1806 # you wish to get a high BYTES hit ratio, you should probably
1807 # increase this (one 32 MB object hit counts for 3200 10KB
1808 # hits). If you wish to increase speed more than your want to
1809 # save bandwidth you should leave this low.
1811 # NOTE: if using the LFUDA replacement policy you should increase
1812 # this value to maximize the byte hit rate improvement of LFUDA!
1813 # See replacement_policy below for a discussion of this policy.
1816 # maximum_object_size 4096 KB
1817 maximum_object_size 150 MB
1821 <div class="section" id="tag-cache-mem">
1822 <h3><a class="toc-backref" href=
1823 "#id26">2.1.4 TAG: cache_mem</a></h3>
1825 <p><strong>Cache_mem</strong> imposta quanta memoria RAM
1826 venga dedicata alla cache di Squid. Si consideri non solo
1827 quanta RAM sia disponibile sul sistema, ma anche quale
1828 sia l'utilizzo tipico di questo: altri servizi
1829 fondamentali necessitano di molta memoria?</p>
1831 <p>Questo parametro per altro influisce sulle prestazioni
1832 e sul degrado dei supporti di storaggio (sopratutto se
1833 magnetici). Ad esempio se si stanno utilizzando dischi
1834 rigidi esterni USB per la cache sara' preferibile cercare
1835 di usare quanta piu' RAM possibile per evitare il
1836 sovraccarico computazionale dovuto alla gestione dello
1837 stack USB, fenomeno evidente sui sistemi embedded come
1840 <p>Se si stesse pensando di usare dell'hardware
1841 <em>embedded</em> a basse prestazioni / consumo per
1842 realizzare un server gateway / NAT / Squid si tenga
1843 presente che Squid e' relativamente esoso di risorse
1844 rispetto agli altri servizi: avra' bisogno di <tt class=
1845 "docutils literal">~25MB</tt> (MegaByte) di RAM e
1846 <em>~150MHZ di CPU ARM</em> per servire decorosamente una
1847 decina di client http su una rete ethernet 10/100. In
1848 questo caso non fate scendere <tt class=
1849 "docutils literal">cache_mem</tt> sotto i <tt class=
1850 "docutils literal">2/4 MB</tt> pena un accesso continuo
1851 al supporto di storaggio.</p>
1853 <p>Se invece si disponesse di una macchina dedicata a
1854 Squid con gigabytes di RAM non si esiti a dedicarne buona
1855 parte a <em>cache_mem</em>.</p>
1857 <p>TAG: cache_mem (1566):</p>
1858 <pre class="literal-block">
1859 # 'cache_mem' specifies the ideal amount of memory to be used
1861 # * In-Transit objects
1863 # * Negative-Cached objects
1870 <div class="section" id="tag-minimum-object-size">
1871 <h3><a class="toc-backref" href=
1872 "#id27">2.1.5 TAG:
1873 minimum_object_size</a></h3>
1875 <p>Questo parametro imposta la dimensione minima degli
1876 oggetti salvati nella cache. Settato a <tt class=
1877 "docutils literal">0</tt> o a valori molto piccoli puo'
1878 influire negativamente sulla frammentazione del filesytem
1879 e consumare un numero elevato di <em>inode</em> (cosa non
1880 piu' importante con ext4 o altri filesytem).</p>
1882 <p>In scenari con connessioni molto veloci ( >~10Mb),
1883 pochi client (una decina) e server poco performanti nella
1884 velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1885 il limte sia piuttosto il <em>seek-time</em> ) tenere in
1886 cache i file piu' piccoli finisce per aumentare la
1887 latenza della navigazione.</p>
1889 <p>TAG: minimum_object_size:</p>
1890 <pre class="literal-block">
1891 # TAG: minimum_object_size (bytes)
1892 # Objects smaller than this size will NOT be saved on disk. The
1893 # value is specified in kilobytes, and the default is 0 KB, which
1894 # means there is no minimum.
1897 # minimum_object_size 0 KB
1898 minimum_object_size 0 KB
1903 <div class="section" id=
1904 "negoziazione-degli-accesi-al-servizio">
1905 <h2><a class="toc-backref" href=
1906 "#id28">2.2 Negoziazione degli accesi al
1909 <p>Squid fa parte di quei servizi suscettibili di diventare
1910 un open relay, sara' quindi necessario prestare attenzione
1911 a delimitare la rete che puo' accedere al servizio.</p>
1913 <dl class="docutils">
1914 <dt>Open Relay:</dt>
1916 <dd>Un servizio a cui possono accedere tutti
1917 indiscriminatamente. La cosa puo' andare bene per servizi
1918 come i server web, che aspirano per loro natura al
1919 maggior numero possibile di utenti, ma non a servizi come
1920 i proxy http oppure ai server di posta elettronica
1921 (adibiti ai soli utenti della rete locale).</dd>
1924 <p>Generalmente non volete che il vostro proxy http venga
1925 usato da persone sconosciute ed esterne alla vostra rete,
1926 le quali sostanzialmente <em>navigherebbero sotto
1927 l'identita' del vostro proxy</em> (probabilmente per
1928 visionare materiali che non vorrebbero fossero ricondotti
1929 direttamente a loro) generando traffico e consumando banda
1930 della vostra connessione a internet. Tenere Squid in
1931 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1932 modo per essere inseriti in una <em>black list</em>.</p>
1934 <p>Per poter limitare gli accessi a Squid dal punto di
1935 vista dell'applicazione (quarto livello TCP/IP) si
1936 identifichera' inizialmente l'entita' <em>rete locale</em>
1937 (es: <tt class="docutils literal">localnet</tt>) con una
1938 ACL di tipo <em>src</em> (indirizzi IP sorgenti) indicando
1939 la <em>classe / range di IP</em> della nostra rete.</p>
1942 Dopodiche l'accesso (<tt class=
1943 "docutils literal">http_access</tt>) si concedera'
1944 (<em>allow</em>) a questa entita' (es: <tt class=
1945 "docutils literal">localnet</tt>) negando chiunque altro.
1948 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1949 esprimere i range di IP: <a class="reference external"
1950 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1951 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1953 <p>E' poi sempre possibile tenere il proxy in ascolto su un
1954 solo indirizzo IP, nel caso si disponga di piu' device di
1955 rete, oppure settare un IP firewall per limitare il
1956 traffico in base al protocollo IP.</p>
1958 <div class="section" id="acl-e-http-access">
1959 <h3><a class="toc-backref" href=
1960 "#id29">2.2.1 ACL e http access</a></h3>
1962 <p>Si proceda a creare una <tt class=
1963 "docutils literal">ACL</tt> di tipo <tt class=
1964 "docutils literal">src</tt> per identificare la nostra
1965 rete locale, poi si abiliti l'accesso a questa con la
1966 direttiva <tt class="docutils literal">http_access</tt>.
1967 Tutto quanto non e' espressamente autorizzato viene poi
1968 negato da un <tt class="docutils literal">http_access
1969 deny all</tt> finale.</p>
1970 <pre class="literal-block">
1972 # Defining an Access List
1974 # Every access list definition must begin with an aclname and acltype,
1975 # followed by either type-specific arguments or a quoted filename that
1976 # they are read from.
1978 # ***** ACL TYPES AVAILABLE *****
1980 # acl aclname src ip-address/netmask ... # clients IP address
1983 # Example rule allowing access from your local networks.
1984 # Adapt to list your (internal) IP networks from where browsing
1986 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1987 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1988 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1990 acl localnet src 10.10.208.0/24
1994 # Allowing or Denying access based on defined access lists
1996 # Access to the HTTP port:
1997 # http_access allow|deny [!]aclname ...
1999 # NOTE on default values:
2001 # If there are no "access" lines present, the default is to deny
2005 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
2007 # Example rule allowing access from your local networks.
2008 # Adapt localnet in the ACL section to list your (internal) IP networks
2009 # from where browsing should be allowed
2010 #http_access allow localnet
2011 http_access allow localnet
2016 <div class="section" id="testare-squid">
2017 <h2><a class="toc-backref" href=
2018 "#id30">2.3 Testare Squid</a></h2>
2020 <p>Dopo aver configurato squid e' fondamentale testarne il
2021 corretto funzionamento per assicurarsi di non aver creato
2022 un <em>open-relay</em>. Per fare dei test significativi
2023 serve utilizzare degli host remoti: ci si connetta via ssh
2024 a questi e si usi <tt class="docutils literal">wget</tt> da
2025 riga di comando.</p>
2027 <div class="section" id="client-wgetrc">
2028 <h3><a class="toc-backref" href=
2029 "#id31">2.3.1 Client: ~/.wgetrc</a></h3>
2031 <p>Nel file <tt class="docutils literal">.wgetrc</tt> (si
2032 noti il punto iniziale: e' un file nascosto) si puo'
2033 impostare il proxy per wget. Si utilizzi l'indirizzo IP
2034 del server che si vuole testare, e si seguano i log
2036 "docutils literal">/var/log/squid3/access.log</tt> sul
2039 <p>Da notare che la prova va' fatta su una macchina della
2040 rete che si vuole testare, non da <em>localhost</em>. Per
2041 altro se si utilizzasse <em>direttamente</em> <tt class=
2042 "docutils literal">localhost</tt> non si testerebbe la
2043 <em>ACL</em> predisposta, dato che si si rientrerebbe
2044 nella ACL (pre-configurata di default) <tt class=
2045 "docutils literal">localhost</tt>.</p>
2047 <dl class="docutils">
2050 <dd>http_proxy=10.10.208.178:3128</dd>
2053 <p>Si proceda a scaricare dal client scelto con un
2055 <pre class="literal-block">
2056 wget http://www.google.it
2060 <div class="section" id="server-access-log">
2061 <h3><a class="toc-backref" href=
2062 "#id32">2.3.2 Server:
2065 <p>Si puo' controllare il corretto funzionamento del
2066 server seguendo i log di accesso a Squid:</p>
2067 <pre class="literal-block">
2068 # tail -f /var/log/squid3/access.log
2071 <p>In oltre e' possibile configurare diversi
2072 <em>analizzatori di log</em> come <tt class=
2073 "docutils literal">Webalizer</tt> per studiare i log di
2079 <div class="section" id="tiny-proxy">
2080 <h1><a class="toc-backref" href=
2081 "#id33">3 Tiny proxy</a></h1>
2083 <p>Se avete l'esigenza di un proxy server per la condivisione
2084 della connessione ad internet ma non avete la necessita' o le
2085 risorse di un <em>caching</em> proxy come Squid potete
2086 considerare <strong>tinyproxy</strong>, questo e' molto piu'
2087 leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2088 accedere continuamente ad un file system per lo storaggio
2089 della cache) e risulta piu' semplice nella
2092 <p>TinyProxy puo' essere utilizzato come sostituto di
2093 emergenza in una rete in cui Squid e' momentaneamente non
2096 <p>File di configurazione: <tt class=
2097 "docutils literal">/etc/tinyproxy/tinyproxy.conf</tt></p>
2098 <pre class="literal-block">
2099 # Porta su cui ascoltare
2101 # IP su cui ascoltare
2102 Listen 10.10.208.160
2103 # Negoziazione accessi
2104 Allow 10.10.208.0/24
2108 <div class="section" id="apache">
2109 <h1><a class="toc-backref" href=
2110 "#id34">4 Apache</a></h1>
2112 <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2113 patchy NCSA web server</em> ), e' il server web modulare piu'
2114 diffuso e strutturato disponibile con licenza libera, in
2115 grado di operare da sistemi operativi UNIX/Linux e
2118 <p>Un server web e' un processo, e per estensione il computer
2119 su cui e' in esecuzione, che si occupa di fornire, su
2120 richiesta del browser, una pagina web (spesso scritta in
2121 HTML). Le informazioni inviate dal server web viaggiano in
2122 rete trasportate dal protocollo HTTP. L'insieme di server web
2123 da' vita al World Wide Web, uno dei servizi piu' utilizzati
2126 <div class="section" id="pacchetti-da-installare">
2127 <h2><a class="toc-backref" href=
2128 "#id35">4.1 Pacchetti da
2129 installare::</a></h2>
2135 <p>Con la release 2.0 di Apache viene automaticamente resa
2136 disponibile anche la versione SSL (Secure Socket Layer,
2137 connessioni criptate ) del web server senza che ci sia la
2138 necessita' di installare altri pacchetti.</p>
2141 <div class="section" id="configurazione-di-apache">
2142 <h2><a class="toc-backref" href=
2143 "#id36">4.2 Configurazione di
2146 <p>I file di configurazione di apache si trovano nella
2147 cartella: <tt class="docutils literal">/etc/apache2</tt> e
2148 sono strutturati come descritto nel file <tt class=
2149 "docutils literal">/usr/share/doc/apache2/README.Debian.gz</tt>
2150 . Sostanzialmente lo schema e' il seguente:</p>
2152 <dl class="docutils">
2153 <dt>apache2.conf</dt>
2156 <p class="first">File di configurazione principale del
2159 <p class="last">httpd.conf e' il vecchio file di
2160 configurazione di Apache1, presente per motivi di
2161 retrocompatibilita' e' generalmente vuoto.</p>
2166 <dd>In questo file vengono specificate le porte sulle
2167 quali resta in ascolto il server web. Si noti che
2168 utilizzando dei virtual hosts generalmente viene
2169 specificata per questi la porta su cui ascoltare nel file
2170 di configurazione del virtual host, ad es: <tt class=
2171 "docutils literal"><VirtualHost *:80></tt></dd>
2173 <dt>sites-available</dt>
2175 <dd>In questa cartella vengono raccolti i file di
2176 configurazione dei virtual host disponibili.</dd>
2178 <dt>sites-enabled</dt>
2180 <dd>In questa cartella sono contenuti dei link simbolici
2181 ai files in ../sites-available : se il link e' presente
2182 in questa cartella il virtual host e' abilitato.</dd>
2184 <dt>mods-available</dt>
2186 <dd>Stesso metodo per i moduli: in questa cartella ci
2187 sono i moduli veri e propri che verranno poi abilitati
2188 grazie all'esistenza di link simbolici nella cartella
2191 <dt>mods-enabled</dt>
2193 <dd>Moduli abilitati, effettivamente caricati.</dd>
2197 <div class="section" id="apache-conf">
2198 <h2><a class="toc-backref" href=
2199 "#id37">4.3 apache.conf</a></h2>
2201 <p>File di configurazione del servizio Apache, contiene le
2202 impostazioni generiche (ad esempio utilizzo della RAM e
2203 risorse di sistema) dell'intero servizio. Nella
2204 configurazione di default per Debian non viene definito un
2205 vero e proprio sito di default ma solo dei virtual
2208 <p>Guardiamo alcune direttive interessanti:</p>
2210 <dl class="docutils">
2213 <dd>Numero di secondi da aspettare prima di chiudere la
2214 connessione con il client. Questo parametro serve a
2215 liberare le risorse di sistema nel caso che un client,
2216 magari a causa di una connessione particolarmente lenta o
2217 instabili, tenga attivo indefinitamente un processo di
2222 <dd>L'estensione keep-alive (http 1.0) congiuntamente
2223 alle connessioni persistenti (http 1.1) permettono al
2224 server di rispondere a piu' richieste dei client mediante
2225 la stessa connessione. Il protocollo http per sua natura
2226 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2227 richiesta (per pagine web si pensi ad esempio alle
2228 immagini) dal client necessita di una connessione
2229 autonoma. Keep-alive permette di ottimizzare la
2230 connessione anche fino al 50% a seconda delle situazioni
2233 <dt>Server-Pool Size Regulation</dt>
2235 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2236 Tutti spiegati nel manuale di apache) servono per
2237 attribuire le risorse di sistema disponibili al server
2238 Apache. Tenere questi parametri bassi serve a limitare il
2239 rischio di Denial of Service per il server, nel caso
2240 offra altri servizi. I settagli di default sono come
2241 sempre abbastanza conservativi, se si conta di usare il
2242 proprio Apache per servire un sito web con molti
2243 visitatori sara' necessario aumentare sensibilmente le
2244 impostazioni di base.</dd>
2246 <dt>AccessFileName</dt>
2248 <dd>Il nome del file che viene onorato per modificare le
2249 impostazioni per una singola directory, legato alla
2250 direttiva AllowOverride .</dd>
2254 <div class="section" id="installazione-di-php">
2255 <h2><a class="toc-backref" href=
2256 "#id38">4.4 Installazione di PHP</a></h2>
2258 <p>Pacchetti da installare: <tt class=
2259 "docutils literal">php5 <span class=
2260 "pre">php-pear</span></tt></p>
2262 <div class="section" id="test-del-modulo-php">
2263 <h3><a class="toc-backref" href=
2264 "#id39">4.4.1 Test del modulo
2267 <p>Creare nella cartella <tt class=
2268 "docutils literal">/var/www</tt> (o altra cartella
2269 visibile) un file con estensione *.php (es <tt class=
2270 "docutils literal">/var/www/info.php</tt> contenete
2271 codice php eseguibile dall'interprete, ad es:</p>
2272 <pre class="literal-block">
2273 <?php phpinfo() ; ?>
2276 <p>Questa funzione di php generera' la tipica pagina con
2277 le impostazioni attuali per PHP. Richiamando la pagina
2278 (es: <tt class="docutils literal"><span class=
2279 "pre">http://localhost/info.php</span></tt> ) verra'
2280 generata dall'interprete PHP la pagina HTML e resa
2281 disponibile tramite Apache ai client HTTP, a prova del
2282 corretto funzionamento del modulo di PHP e della sua
2283 integrazione con il server web Apache. In caso contrario
2284 se il client http proporra' di scaricare la pagina invece
2285 che visualizzarla nel browser: non funziona l'interprete
2286 di php o sono mal configurati i MIME-type. prima di tutto
2287 assicurarsi di aver fatto ripartire Apache.</p>
2290 <div class="section" id=
2291 "installazione-del-supporto-per-mysql-a-php">
2292 <h3><a class="toc-backref" href=
2293 "#id40">4.4.2 Installazione del supporto
2294 per Mysql a PHP</a></h3>
2296 <p>Installare i pacchetti:</p>
2297 <pre class="literal-block">
2298 php5-mysql phpmyadmin
2301 <p>Controllare tramite la pagina php.info che sia
2302 abilitato il supporto per Mysql (ripartito Apache,
2303 ricaricare la pagina e cercare con CTRL+f <tt class=
2304 "docutils literal">mysql</tt>).</p>
2307 <div class="section" id="phpmyadmin">
2308 <h3><a class="toc-backref" href=
2309 "#id41">4.4.3 phpmyadmin</a></h3>
2311 <p>L'interfaccia web Phpmyadmin non richiede
2312 necessariamente la presenza di un database Mysql locale,
2313 puo' infatti essere utilizzata per gestire database
2314 remoti (il suo file di configurazione: <tt class=
2315 "docutils literal">/etc/phpmyadmin/config.inc.php</tt> ).
2316 Nel caso si voglia installare localmente Mysql si
2317 utilizzi il pacchetto <tt class=
2318 "docutils literal"><span class=
2319 "pre">mysql-server</span></tt> .</p>
2321 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2322 <tt class="docutils literal"><span class=
2323 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2324 non fosse controllare che sia incluso il file <tt class=
2325 "docutils literal">/etc/phpmyadmin/apache.conf</tt> in
2326 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2330 <div class="section" id=
2331 "installazione-del-supporto-per-postgresql-a-php">
2332 <h3><a class="toc-backref" href=
2333 "#id42">4.4.4 Installazione del supporto
2334 per Postgresql a PHP</a></h3>
2336 <p>Installare i pacchetti:</p>
2337 <pre class="literal-block">
2338 php5-pgsql phppgadmin
2341 <p>Controllare tramite la pagina php.info che sia
2342 abilitato il supporto per PostgreSQL (ripartito Apache,
2343 ricaricare la pagina e cercare con CTRL+f <tt class=
2344 "docutils literal">pgsql</tt>).</p>
2347 <div class="section" id="phppgadmin">
2348 <h3><a class="toc-backref" href=
2349 "#id43">4.4.5 phppgadmin</a></h3>
2351 <p>L'interfaccia web Phppgadmin per il database server
2352 PostgreSQL non richiede necessariamente la presenza di un
2353 database locale, puo' infatti essere utilizzata per
2354 gestire database remoti (il suo file di configurazione:
2356 "docutils literal">/etc/phppgadmin/config.inc.php</tt> ).
2357 Nel caso si voglia installare localmente Mysql si
2358 utilizzi il pacchetto <tt class=
2359 "docutils literal">postgresql</tt> .</p>
2361 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2362 <tt class="docutils literal"><span class=
2363 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2364 non fosse controllare che sia incluso il file <tt class=
2365 "docutils literal">/etc/phppgadmin/apache.conf</tt> in
2366 <tt class="docutils literal">/etc/apache2/conf.d/</tt>
2371 <div class="section" id="virtual-hosts">
2372 <h2><a class="toc-backref" href=
2373 "#id44">4.5 Virtual hosts</a></h2>
2377 <li><a class="reference external" href=
2378 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2380 <li><a class="reference external" href=
2381 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2382 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2386 <p>I virtual host permettono di avere piu' siti internet
2387 disponibili tramite lo stesso server web, eventualmente
2388 mappati su un solo indirizzo IP. Sono generalmente di due
2393 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2394 possibilita' di avere piu' indirizzi IP dedicati per i
2395 diversi siti che si vuole servire. ES: <tt class=
2396 "docutils literal"><VirtualHost
2397 192.168.0.2:80></tt> . Soluzione dispendiosa, si
2398 tende ad usarla solo se servono certificati di
2399 sicurezza (SSL ) dedicati per ogni sito.</li>
2401 <li>Basati su <em>nomi di dominio</em> che puntano allo
2402 stesso IP. Soluzione piu' economica e diffusa che si
2403 basa sulle funzionalita' di http 1.1 .</li>
2407 <p>Prenderemo in esame la gestione di virtual hosts basati
2408 su nomi di dominio.</p>
2410 <div class="section" id="gestione-dns">
2411 <h3><a class="toc-backref" href=
2412 "#id45">4.5.1 Gestione DNS</a></h3>
2414 <p>Prima di tutto per poter impostare i virtual hosts
2415 dovete avere un server DNS che risolva i vostri nomi di
2416 dominio sull'indirizzo IP del server. Questo si puo'
2417 ottenere in vari modi, ad es:</p>
2420 <dl class="docutils">
2421 <dt><tt class="docutils literal">/etc/hosts</tt></dt>
2423 <dd>Per prove sul proprio sistema potete impostare i
2424 nomi dei vostri virtual server nel file /etc/hosts
2427 <dt><em>Dnsmasq</em> (DNS server)</dt>
2429 <dd>Utilizzabile al livello della rete locale per
2430 fare dei test, utilizzando direttive come: <tt class=
2431 "docutils literal"><span class=
2432 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2434 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2436 <dd>Utilizzare un servizio come ad es: <a class=
2437 "reference external" href=
2438 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2439 per mappare nomi di dominio sul proprio indirizzo IP,
2440 comodo ad esempio se si dispone di un indirizzo IP
2441 pubblico (anche se dinamico) per la propria
2442 connessione ad internet.</dd>
2444 <dt><em>Bind</em> (DNS server)</dt>
2446 <dd>Impostare i campi A nelle proprie zone gestite
2447 dal server DNS Bind. Ad es: <tt class=
2448 "docutils literal">papo
2449 A
2450 212.22.136.248</tt></dd>
2455 <div class="section" id="eseguire-una-query-dns-con-dig">
2456 <h3><a class="toc-backref" href=
2457 "#id46">4.5.2 Eseguire una query DNS con
2458 <tt class="docutils literal">dig</tt>::</a></h3>
2460 <p>Per testare la corretta risoluzione dei vostri nomi di
2461 dominio sui relaivi indirizzi IP si usi dig (o altre
2462 utlity, vedere la sezione relativa i DNS). Dig e'
2463 contenuto nel pacchetto <tt class=
2464 "docutils literal">dnsutils</tt>.</p>
2467 <p># dig 177.piffa.net</p>
2469 <p>; <<>> DiG 9.5.1-P1 <<>>
2470 177.piffa.net ;; global options: printcmd ;; Got
2471 answer: ;; ->>HEADER<<- opcode: QUERY,
2472 status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2473 QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2475 <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2477 <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2480 <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2483 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2485 "docutils literal">177.piffa.net.
2486 0
2487 IN
2488 A 10.10.208.177</tt>
2489 . Il nome di dominio 177.piffa.net viene risolto sull'ip
2490 10.10.208.177 , nel nostro Apache (che risponde all'ip
2491 10.10.208.177 ) dovra' essere disponibile un virtual host
2492 che corrisponde al nome <tt class=
2493 "docutils literal">177.piffa.net</tt> (<tt class=
2494 "docutils literal">ServerName</tt>) .</p>
2496 <p>Il server DNS utilizzato dal sistema e' evidenziato
2497 dalla stringa: <tt class="docutils literal">;; SERVER:
2498 10.10.28.248#53(10.10.28.248)</tt> che dovrebbe
2499 corrispondere a quanto impostato nel vostro <tt class=
2500 "docutils literal">/etc/resolv.conf</tt>. Se il vostro
2501 browser web utilizza un proxy http sara questo a
2502 risolvere i nomi di dominio, tipicamente potete
2503 disabilitare l'uso del proxy per determinati domini nella
2504 sezione di configurazione del browser.</p>
2507 <div class="section" id="id3">
2508 <h3><a class="toc-backref" href=
2509 "#id47">4.5.3 Virtual hosts</a></h3>
2511 <p>Esempio di Virtual host:</p>
2512 <pre class="literal-block">
2513 <VirtualHost *:80 >
2514 ServerName 177.piffa.net
2515 DocumentRoot /var/www/177.piffa.net/
2516 ServerAdmin webmaster@177.piffa.net
2517 </VirtualHost>
2520 <ol class="arabic simple">
2521 <li><tt class="docutils literal"><VirtualHost
2522 <span class="pre">\*:80</span> ></tt> La prima riga
2523 indica l'inizio della stanza relativa al nostro virtual
2524 host, che ascoltera' su qualunque indirizzo IP (nel
2525 caso il server abbia piu' indirizzi dai quali e'
2526 raggiungibile) sulla porta <tt class=
2527 "docutils literal">80</tt>.</li>
2529 <li><tt class="docutils literal">Server/name</tt>
2530 precisa quale sara' il nome di dominio a cui verra'
2531 associato questo sito rispetto ad altri eventualmente
2532 presenti sullo stesso server web.</li>
2534 <li><tt class="docutils literal">DocumentRoot</tt> : il
2535 path della directory che contiene le pagine del
2538 <li><tt class="docutils literal">ServerAdmin</tt>:
2539 l'indirizzo del webmaster, in modo da poterlo
2540 contattare in caso di problemi col sito.</li>
2543 "docutils literal"></VirtualHost></tt>:
2544 <em>tag</em> di chiusura della stanza di definizione
2545 del virtual host.</li>
2548 <p>Quelle che abbiamo appena visto sono le direttive
2549 essenziali per definire un sito virtuale, potrebbe essere
2550 utile aggiungere altre:</p>
2554 <dl class="first docutils">
2555 <dt><tt class="docutils literal">ErrorLog
2556 /var/log/apache2/177.piffa.net/error.log</tt></dt>
2559 <p class="first last">Log degli errori separato
2560 dai restanti siti web ospitati dal server.</p>
2566 <dl class="first docutils">
2567 <dt><tt class="docutils literal">LogLevel
2571 <p class="first last">Livello di importanza degli
2572 eventi loggati: warning <em>attenzione</em> .</p>
2578 <dl class="first docutils">
2579 <dt><tt class="docutils literal">CustomLog
2580 /var/log/apache2/177.piffa.net/access.log
2584 <p class="first last">Log di accesso separati
2585 dagli altri siti, utile anche qua per statistiche
2586 di accesso per il solo sito virtuale.</p>
2592 <p>Potrebbe essere utile modificare le impostazioni di
2593 una intera directory, ad esempio per abilitare
2594 l'<tt class="docutils literal">AuthConfig</tt>:</p>
2595 <pre class="literal-block">
2596 <Directory "/var/www/miosito.net/privata">
2597 AllowOverride AuthConfig
2598 Options ExecCGI Indexes MultiViews FollowSymLinks
2604 <p><tt class="docutils literal">AllowOverride
2605 AuthConfig</tt> ora vale per l'intera directory, come le
2610 <div class="section" id="negoziazione-accessi">
2611 <h2><a class="toc-backref" href=
2612 "#id48">4.6 Negoziazione accessi</a></h2>
2614 <p>Tipicamente quando si installa un server web il proprio
2615 desiderio e' di dare accesso ai materiali disponibili al
2616 maggior numero di visitatori possibile. Talvolta pero' puo'
2617 essere utile poter limitare questi accessi, ad esempio per
2618 escludere un <em>bot</em> indesiderato che scansiona
2619 ininterrottamente le nostre pagine o per creare una
2620 <em>Area Riservata</em> i cui materiali non devono essere
2621 disponibile a tutti.</p>
2623 <div class="section" id="limiti-su-base-ip">
2624 <h3><a class="toc-backref" href=
2625 "#id49">4.6.1 Limiti su base IP</a></h3>
2627 <p>La forma piu' semplice di restrizione degli accessi e'
2628 su base degli indirizzi IP dei client: tipicamente i siti
2629 web sono settati per dare accesso a chiunque:</p>
2630 <pre class="literal-block">
2631 <VirtualHost *:80 >
2633 <Directory "/var/www/177.piffa.net">
2637 </VirtualHost>
2640 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2642 <pre class="literal-block">
2643 <VirtualHost *:80 >
2645 <Directory "/var/www/177.piffa.net">
2648 Deny from 192.168.0.1
2650 </VirtualHost>
2653 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2654 materiali dell'intero sito virtuale, oppure potremmo
2655 lavorare su una sola directory:</p>
2656 <pre class="literal-block">
2657 <Directory "/var/www/miosito.net/limitata">
2659 Allow from 192.168.0.0./24
2664 <p>In questo modo solo la classe IP <tt class=
2665 "docutils literal">192.168.0.0/24</tt> potra' accedere
2666 alla directory <tt class=
2667 "docutils literal">/limitata</tt> Si tenga pero' conto
2668 che e' relativamente facile per un malintenzionato
2669 cambiare il proprio indirizzo IP, oppure collegarsi da un
2670 altra zona. Meno facile e' accedere ad una classe privata
2671 trovandosi all'esterno di questa, ma ci sono comunque
2672 soluzioni piu' eleganti.</p>
2675 <li>Mod_access: <a class="reference external" href=
2676 "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2678 <li>mod_authz_hosti(Available in Apache 2.1 and later):
2679 <a class="reference external" href=
2680 "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2681 http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2686 <div class="section" id="user-authentication">
2687 <h2><a class="toc-backref" href=
2688 "#id50">4.7 User Authentication</a></h2>
2690 <p>Si puo' negoziare gli accessi ad un area del sito
2691 tramite autenticazione basata su <em>nome utente /
2692 password</em>. Questo puo' venire utile per creare una area
2693 download <em>intranet</em>, alla quale possano accedere
2694 solo gli utenti previsti a prescindere dagli indirizzi IP
2695 dei loro client.</p>
2697 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2698 possibile implementare questo paradigma, per quanto
2699 esistano soluzioni piu' granulari e sofisticate, che
2700 richiedono pero' l'implementazione di interpreti di
2701 linguaggi di programmazione, criptazione delle passwords,
2702 gestione degli utenti ed eventualmente delle sessioni. Mod
2703 auth non richiede l'installazione di niente di tutto
2706 <p>link: <a class="reference external" href=
2707 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2709 <div class="section" id="definire-la-cartella">
2710 <h3><a class="toc-backref" href=
2711 "#id51">4.7.1 Definire la
2714 <p>Decidere quale sara' il <em>path</em> della cartella
2715 da sottoporre ad autenticazione:</p>
2718 <tt class="docutils literal">mkdir
2719 /var/www/177.piffa.net/privata</tt>
2723 <div class="section" id=
2724 "creazione-del-database-delle-passwords">
2725 <h3><a class="toc-backref" href=
2726 "#id52">4.7.2 Creazione del database
2727 delle passwords</a></h3>
2729 <p>Un modo semplice per gestire una database di
2730 <em>user-id / passwords</em> e' utilizzare l'utility
2731 <tt class="docutils literal">htpasswd</tt> di Apache.
2732 Questa crea un file in cui un <em>crypt</em> delle
2733 password viene associato agli utenti.</p>
2735 <p>Si dovra' decidere dove tenere questo file, la cosa
2736 importante e' che non sia visibile nel sito web: non deve
2737 essere scaricabile dai visitatori. Deve essere cioe'
2738 all'esterno della <em>DocumentRoot</em>: un buon posto
2739 potrebbe essere la /home dell'utente.</p>
2741 <p>Creiamo (con il <em>flag</em> <tt class=
2742 "docutils literal"><span class="pre">-c</span></tt>) il
2744 "docutils literal">/home/utente/passwords</tt> con
2745 l'utente <tt class="docutils literal">luca</tt>:</p>
2746 <pre class="literal-block">
2747 htpasswd -c /home/utente/passwords luca
2750 <p><tt class="docutils literal">htpasswd</tt> ci
2751 chiedera' la password da associare all'utente <tt class=
2752 "docutils literal">luca</tt>. Per successive modifiche
2753 della password o aggiunta di nuovi utenti non sara'
2754 necessario usare il flag <tt class=
2755 "docutils literal"><span class="pre">-c</span></tt>.</p>
2758 <div class="section" id="id4">
2759 <h3><a class="toc-backref" href=
2760 "#id53">4.7.3 Configurazione di
2763 <p>Ora possiamo passare alla configurazione vera e
2764 propria di Apache, ma con una novita': andremo a inserire
2765 la voce in un <tt class="docutils literal">.htaccess</tt>
2766 invece che modificare (tramite una direttiva <tt class=
2767 "docutils literal"><Directory></tt> ) il file di
2768 impostazione del virtual-host.</p>
2770 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2771 puo' modificare l'impostazione del virtual host nel file
2772 <tt class="docutils literal"><span class=
2773 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2774 ma spesso il motivo per cui creiamo i virtual hosts e'
2775 ospitare i siti di altri utenti, che possono solo
2776 pubblicare (generalmente tramite <em>FTP</em>) i loro
2777 documenti nella loro <em>DocumentRoot</em>, senza poter
2778 quindi modificare in alcun modo la configurazione del
2781 <p>Dando agli utenti la possibilita' di modificare
2782 (<em>AllowOverride</em>) autonomamente alcuni parametri
2783 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2784 funzionamento del loro spazio web ci togliera'
2785 l'incombenza di dover intervenire continuamente sui vari
2788 <p>Abilitiamo l'AllowOverride nel file di configurazione
2789 del virtual host per la sola directory <tt class=
2790 "docutils literal">privata</tt>:</p>
2791 <pre class="literal-block">
2792 <VirtualHost *:80 >
2793 ServerName 177.piffa.net
2794 DocumentRoot /var/www/177.piffa.net/
2795 ServerAdmin webmaster@177.piffa.net
2796 <Directory "/var/www/177.piffa.net/privata">
2797 AllowOverride AuthConfig
2799 </VirtualHost>
2802 <p>Per rendere il cambiamento effettivo sara' necessario
2803 fare un restart / reload di Apache.</p>
2805 <p>Ora sara' possibile, anche per l'utente di sistema,
2806 creare un file <tt class=
2807 "docutils literal">.htaccess</tt> che sara' onorato da
2810 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2811 <pre class="literal-block">
2812 # Messaggio visualizzato al prompt per l'autenticazione
2813 AuthName "Area privata soggetta ad autentizazione"
2814 # tipo di autenticazione da usarsi
2816 # File precedentemente generato con htpasswd
2817 AuthUserFile /home/utente/passwords
2819 # Negoziazione degli accessi
2820 # valid users permette l'accesso agli utenti specificati
2821 # nel file generato da htpasswd
2825 <p>Si noti che non e' necessario fare ripartire Apache
2826 per onorare i cambiamenti (un utente non avrebbe la
2827 possibilita' di farlo!).</p>
2829 <dl class="docutils">
2830 <dt>Oltre a <tt class="docutils literal"><span class=
2831 "pre">valid-users</span></tt> si potrebbe scegliere di
2832 usare la formula <tt class=
2833 "docutils literal">users</tt> che permette di elencare
2834 esplicitamente gli utenti::</dt>
2836 <dd>require user pippo pluto</dd>
2839 <p>L'utente <em>paperino</em> che fosse comunque presente
2840 nel file generato da htpasswd non potrebbe accedere alla
2843 <dl class="docutils">
2844 <dt>Nel caso ci fossero molti utenti conviene gestirli
2845 tramite <em>gruppi</em>::</dt>
2847 <dd>require group staff studenti</dd>
2850 <p>I gruppi vengono definiti in un file in modo simile a
2851 <tt class="docutils literal">/etc/groups</tt> per gli
2852 utenti di sistema:</p>
2853 <pre class="literal-block">
2855 studenti: lucap federico luca
2858 <p>da richiamare tramite la direttiva <tt class=
2859 "docutils literal">AuthGroupFile</tt>.</p>
2863 <div class="section" id="cavets">
2864 <h2><a class="toc-backref" href=
2865 "#id54">4.8 Cavets</a></h2>
2867 <p>Problemi di cache:</p>
2871 <li>Proxy: nei settaggi del browser specificare di non
2872 utilizzare un server proxy http per il sito web locale
2873 (o per gli altri che si stanno monitorando). Se si ha
2874 il controllo del proxy server: stopparlo, ricaricare la
2875 pagina (operazione che fallira'), far ripartire il
2876 proxy, ricaricare la pagina.</li>
2878 <li>Provare con un altro browser, o cercare di svuotare
2879 la cache chiudere/riaprire l'applicativo. Provare a
2880 fermare Apache, ricaricare la pagina (operazione che
2881 fallira'), far ripartire Apache, ricaricare la
2888 <div class="section" id="domain-name-system">
2889 <h1><a class="toc-backref" href=
2890 "#id55">5 Domain Name System</a></h1>
2892 <p>Domain Name System (spesso indicato con DNS) e' un
2893 servizio utilizzato per la risoluzione di nomi di host in
2894 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2895 un sistema <strong>gerarchico</strong> (quindi una struttura
2896 ad albero, simile ai <em>file system</em>)
2897 <strong>distribuito</strong> (ogni server DNS facente parte
2898 del sistema puo' mantenere solo una parte delle informazioni,
2899 ad esempio per la sua sola <em>zona</em>), costituito dai
2902 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2903 rete internet come per qualunque rete locale. Ad esempio
2904 durante la navigazione web un client vorrebbe vedere
2905 l'<em>URL</em> <tt class="docutils literal"><span class=
2906 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2907 connettere via <em>http</em> al server web deve prima
2908 ottenere l'indirizzo IP del <em>server http</em>
2909 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2910 fornisce un IP sbagliato l'utente non potra' raggiungere il
2911 servizio: di fatto e' come se il serve http fosse spento.</p>
2913 <p>Stessa cosa vale per gli altri servizi, come la posta
2914 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2917 <p>Potrebbe verificarsi uno scenario simile a questo: i
2918 vostri server per i siti web funzionano correttamente come i
2919 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2920 e POP3, e tutto il resto. Ma se poi un errore nella
2921 configurazione del DNS non rende raggiungibile l'intero
2922 <em>sito</em>: per l'utente finale e' come se nulla
2925 <p>Infatti quando si parla di un intervento della Polizia
2926 Postale per l'<em>oscuramento</em> di un sito dal punto di
2927 vista pratico questo si traduce generalmente nella rimozione
2928 o mistificazione del record DNS relativo a quel dominio (la
2929 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2930 principali provider internet che forniscono connettivita'
2931 agli utenti italiani, oltre che poter agire direttamente sul
2932 NIC italiano per i domini della TLD <em>.it</em>)</p>
2934 <p>L'operazione di convertire un nome in un indirizzo e'
2935 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2936 detto risoluzione inversa.</p>
2939 Un <em>Registar</em> e' un operatore che ha la facolta'
2940 (accreditamento da parte dell ICANN) di registrare i domini
2941 di secondo livello per gli utenti finali, dietro compenso
2942 di una modica cifra (una decina di euro) che vale come
2943 contributo su base annuale per il mantenimento
2944 dell'infrastruttura.
2947 <div class="section" id="risoluzione-inversa">
2948 <h2><a class="toc-backref" href=
2949 "#id56">5.1 Risoluzione Inversa</a></h2>
2951 <p>Per la risoluzione inversa sono invece i provider di
2952 connettivita' a gestire i DNS: se volete impostare il
2953 <em>PTR</em> associato al vostro indirizzo IP dovete
2954 contattare il vostro provider (tipo <em>telecom</em> per
2955 una connessione ADSL) e <em>non il Registar del vostro
2958 <p>Ad esempio all'IP <tt class=
2959 "docutils literal">212.22.136.248</tt> era associato un PTR
2960 <tt class="docutils literal">bender.piffa.net</tt>,
2961 corrispondente al record <tt class=
2962 "docutils literal">212</tt> facente parte della zona
2963 <tt class="docutils literal"><span class=
2964 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2965 provider Tiscali/Nextra proprietario della classe C
2966 <tt class="docutils literal">212.22.136.0</tt>. Se avete un
2967 solo IP conviene lasciare al fornitore la gestire del PTR,
2968 ma se avete a disposizione un'itera classe potete chiedere
2969 sempre al vostro provider che vi <em>deleghi</em> la
2970 gestione della zona tramite i vostri DNS.</p>
2972 <p>Per alcuni servizi, ad esempio la spedizione della posta
2973 elettronica, e' richiedeiesto che venga impostata
2974 correttamente l'associazione tra il PTR dell'indirizzo IP
2975 usato dal server di postai e il record A RR al quale questo
2976 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2981 <li><a class="reference external" href=
2982 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2983 2.1 Inconsistent, Missing, or Bad Data</li>
2985 <li><a class="reference external" href=
2986 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2990 <div class="section" id="nomi-di-dominio">
2991 <h2><a class="toc-backref" href=
2992 "#id57">5.2 Nomi di dominio</a></h2>
2994 <p>Un nome a dominio e' costituito da una serie di stringhe
2995 separate da punti, ad esempio bender.piffa.net. I nomi di
2996 dominio si leggono da destra verso sinistra: <em>TLD</em> o
2997 dominio di primo livello <tt class=
2998 "docutils literal">net</tt>, secondo livello <tt class=
2999 "docutils literal">piffa</tt>, terzo livello <tt class=
3000 "docutils literal">bender</tt>. Il dominio di primo livello
3001 (o TLD, Top Level Domain, pronunciato <em>tilde</em> in
3002 Italia), per esempio .net o .it sono limitati e decisi
3003 direttamente dall'ente assegnatario ICANN ( Internet
3004 Corporation for Assigned Names and Numbers).</p>
3006 <p>L'utente finale potra' chiedere l'assegnazione (pagando
3007 un contributo al Register preferito per il mantenimento
3008 delle spese dell'infrastruttura) di un dominio di
3009 <em>secondo</em> livello (es <tt class=
3010 "docutils literal">piffa</tt>) di una delle varie TLD
3011 disponibili (noi italiani diciamo <em>tildi</em>), sempre
3012 che non sia gia' stato assegnato a qualcun altro.</p>
3014 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
3015 potra' in stanziare domini di terzo livello (es <tt class=
3016 "docutils literal">bender</tt>) e anche oltre (es
3017 www.andrea.bender.piffa.net). Tali records saranno
3018 mantenuti dall'utente, sotto la sua responsbilita': se il
3019 proprio server DNS non fosse raggiungibile o risultasse mal
3020 configurato gli utenti non potrebbero risolvere /
3021 raggiungere i siti di loro interesse.</p>
3023 <p>Tipicamente si ha almeno un server DNS secondario per
3024 garantire la sussistenza del servizio in caso di guasto del
3025 DNS principale. I secondari <em>replicano</em> i dati
3026 presenti nei DNS principali.</p>
3029 <div class="section" id="tipologie-di-record">
3030 <h2><a class="toc-backref" href=
3031 "#id58">5.3 Tipologie di record</a></h2>
3033 <p>Ad un nome DNS possono corrispondere diversi tipi di
3034 informazioni. Per questo motivo, esistono diversi tipi di
3035 record DNS. Ogni voce del database DNS deve essere
3036 caratterizzata da un tipo. I principali tipi sono:</p>
3039 <li>Record A - Indica la corrispondenza tra un nome ed
3040 uno (o piu') indirizzi IP (per la precisione indirizzi
3041 IPv4, ovvero la versione attualmente in uso).</li>
3043 <li>Record MX - (Mail eXchange) indica a quali server
3044 debba essere inviata la posta elettronica per un certo
3047 <li>Record CNAME - Sono usati per creare un alias, ovvero
3048 per fare in modo che lo stesso calcolatore sia noto con
3049 piu' nomi. Uno degli utilizzi di questo tipo di record
3050 consiste nell'attribuire ad un host che offre piu'
3051 servizi un nome per ciascun servizio. In questo modo, i
3052 servizi possono poi essere spostati su altri host senza
3053 dover riconfigurare i client, ma modificando solo il
3056 <li>Record PTR - Il DNS viene utilizzato anche per
3057 realizzare la risoluzione inversa, ovvero per far
3058 corrispondere ad un indirizzo IP il corrispondente nome a
3059 dominio. Per questo si usano i record di tipo "PTR" (e
3060 una apposita zona dello spazio dei nomi
3063 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3065 <li>Record SRV - Identificano il server per un
3066 determinato servizio all'interno di un dominio. Possono
3067 essere considerati una generalizzazione dei record
3070 <li>Record TXT - Associano campi di testo arbitrari ad un
3071 dominio. Questi campi possono contenere una descrizione
3072 informativa oppure essere utilizzati per realizzare
3076 <p>Vi sono anche tipi di record "di servizio", necessari al
3077 funzionamento del database distribuito: * Record NS -
3078 Utilizzato per indicare quali siano i server DNS
3079 autoritativi per un certo dominio, ovvero per delegarne la
3080 gestione. * Record SOA - (Start of Authority) usato per la
3081 gestione delle zone DNS.</p>
3084 <div class="section" id="utilizzo">
3085 <h2><a class="toc-backref" href=
3086 "#id59">5.4 Utilizzo</a></h2>
3088 <p>I computer vengono identificati in rete grazie agli
3089 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3090 utenti come riferimento per i vari server. Ad esempio
3091 sarebbe scomodo riferirsi al motore di ricerca Goggle con
3092 uno dei suoi IP: <tt class=
3093 "docutils literal">74.125.43.104</tt>, e' preferibile usare
3094 il nome di dominio <em>www.google.com</em>:</p>
3095 <pre class="literal-block">
3096 ping -c 1 www.google.com
3097 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3101 <div class="section" id="risoluzione-dei-nomi-di-dominio">
3102 <h2><a class="toc-backref" href=
3103 "#id60">5.5 Risoluzione dei nomi di
3106 <p>Ci sono vari strumenti per interrogare i server DNS e
3107 ottenere l'indirizzo IP associato al nome di dominio che ci
3109 <pre class="literal-block">
3110 $ host www.piffa.net
3111 www.piffa.net is an alias for piffa.net.
3112 piffa.net has address 65.98.21.97
3113 piffa.net mail is handled by 10 65.98.21.97
3116 $ nslookup www.piffa.net
3117 Server: 192.168.0.10
3118 Address: 192.168.0.10#53
3120 Non-authoritative answer:
3121 www.piffa.net canonical name = piffa.net.
3123 Address: 65.98.21.97
3128 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
3129 ;; global options: +cmd
3131 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
3132 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3134 ;; QUESTION SECTION:
3135 ;www.piffa.net. IN A
3138 www.piffa.net. 3489 IN CNAME piffa.net.
3139 piffa.net. 3489 IN A 65.98.21.97
3141 ;; AUTHORITY SECTION:
3142 piffa.net. 86289 IN NS ns2.mydomain.com.
3143 piffa.net. 86289 IN NS ns1.mydomain.com.
3144 piffa.net. 86289 IN NS ns4.mydomain.com.
3145 piffa.net. 86289 IN NS ns3.mydomain.com.
3147 ;; ADDITIONAL SECTION:
3148 ns1.mydomain.com. 96208 IN A 64.94.117.193
3149 ns2.mydomain.com. 96208 IN A 64.94.31.67
3150 ns3.mydomain.com. 96208 IN A 66.150.161.137
3151 ns4.mydomain.com. 96208 IN A 63.251.83.74
3153 ;; Query time: 1 msec
3154 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3155 ;; WHEN: Sun May 10 21:23:11 2009
3156 ;; MSG SIZE rcvd: 209
3159 <p>Lo strumento piu' esaustivo e' <tt class=
3160 "docutils literal">dig</tt>, installabile con il pacchetto
3161 <tt class="docutils literal">dnsutils</tt> .</p>
3164 <div class="section" id="dig">
3165 <h2><a class="toc-backref" href=
3166 "#id61">5.6 Dig</a></h2>
3168 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3169 "docutils literal">dig</tt> per l'interrogazione dei DNS
3171 <pre class="literal-block">
3174 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
3175 ;; global options: +cmd
3177 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
3178 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3180 ;; QUESTION SECTION:
3181 ;www.google.it. IN A
3184 www.google.it. 250683 IN CNAME www.google.com.
3185 www.google.com. 334819 IN CNAME www.l.google.com.
3186 www.l.google.com. 186 IN A 74.125.43.103
3187 www.l.google.com. 186 IN A 74.125.43.104
3188 www.l.google.com. 186 IN A 74.125.43.147
3189 www.l.google.com. 186 IN A 74.125.43.99
3191 ;; AUTHORITY SECTION:
3192 l.google.com. 80856 IN NS f.l.google.com.
3193 l.google.com. 80856 IN NS d.l.google.com.
3194 l.google.com. 80856 IN NS b.l.google.com.
3195 l.google.com. 80856 IN NS c.l.google.com.
3196 l.google.com. 80856 IN NS a.l.google.com.
3197 l.google.com. 80856 IN NS e.l.google.com.
3198 l.google.com. 80856 IN NS g.l.google.com.
3200 ;; Query time: 1 msec
3201 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3202 ;; WHEN: Sun May 10 21:34:47 2009
3203 ;; MSG SIZE rcvd: 255
3206 <dl class="docutils">
3209 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3210 <em>root server</em> utilizzati. I root server sono i
3211 server che mantengono le informazioni sui domini di primo
3212 livello (TLD) e sono quindi il punto di partenza per
3213 scorrere nella directory dei DNS per recuperare le
3214 informazioni (tipicamente un campo <tt class=
3215 "docutils literal">A</tt> per un indirizzo IP) che ci
3216 servono per raggiungere un certo servizio.</dd>
3224 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3225 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3226 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3227 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3228 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3229 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3230 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3231 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3232 J.ROOT-SERVERS.NET. . 192032 IN NS
3233 D.ROOT-SERVERS.NET.</p>
3238 <dl class="docutils">
3239 <dt>dig @nome_dns</dt>
3241 <dd>Permette di fare una query ad un server dns
3242 particolare. Es: <tt class="docutils literal">dig
3243 @151.99.25.1 www.google.it</tt></dd>
3245 <dt>dig MX www.google.it</dt>
3247 <dd>Chiede un campo in particolare, in questo caso il
3250 <dt>dig ANY www.google.it</dt>
3252 <dd>Chiede tutti i campi, non solo i campi
3255 <dt>dig -x 74.125.43.104</dt>
3257 <dd>Effettua una richiesta inversa: dall'IP al PTR
3262 <div class="section" id="resolv-conf">
3263 <h2><a class="toc-backref" href=
3264 "#id62">5.7 resolv.conf</a></h2>
3266 <p>Il file <tt class=
3267 "docutils literal">/etc/resolv.conf</tt> contiene le
3268 impostazioni sul dns usato dal sistema, in genere anche
3269 altre applicazioni che devono effettuare query DNS leggono
3270 resolv.conf per conoscere l'ubicazione del DNS.</p>
3272 <p>/etc/resolv.conf:</p>
3276 <li><tt class="docutils literal">nameserver</tt>:
3277 indica il nameserver da utilizzare, indicato con
3278 l'indirizzo IP.</li>
3280 <li><tt class="docutils literal">domain</tt>: indica il
3281 nome di dominio della rete attuale, vedi voce
3284 <li><tt class="docutils literal">search</tt>: nome di
3285 dominio usato dalla rete sul quale cercare gli hosts.
3286 Ad esempio se impostato su <tt class=
3287 "docutils literal">piffa.net</tt> pingando l' host
3288 <tt class="docutils literal">bender</tt> viene
3289 automaticamente fatto un tentativo di ricerca per
3291 "docutils literal">bender.piffa.net</tt>.</li>
3295 <p>Predisponendo l'infrastruttura di rete della vostra LAN
3296 e' consigliabile impostare sempre almeno un DNS cache sul
3297 vostro server locale per i vari client. In questo modo in
3298 caso di malfunzionamento del DNS o necessita' di
3299 intervenire / sostituire i DNS non sara' piu' necessario
3300 dover reimpostare ogni singolo client della LAN: bastera'
3301 intervenire sul server DNS cache, ad esempio per utilizzare
3302 un nuovo forwarder, o modificare al volo un record DNS. La
3303 modifica, anche detta <em>mascheramento</em>, di un record
3304 come il <em>server smtp</em> o un <em>MX</em> potrebbe
3305 tirarvi rapidamente fuori dai guai nel caso di un problema
3306 improvviso con la posta elettronica o qualunque altro
3307 servizio che possiate reindirizzare col DNS.</p>
3309 <p>Utilizzare un server DHCP e una DNS cache come
3310 <tt class="docutils literal">Dnsmasq</tt> possono
3311 permettervi di risolvere al volo molte delle problematiche
3312 relative alla configurazione della vostra LAN: ad esempio
3313 dover intervenire manualmente su decine di client per
3314 modificare le impostazioni di SMTP | gateway | DNS |
3317 <p>Si veda anche la pagina man di resolv.conf.</p>
3319 <div class="warning">
3320 <p class="first admonition-title">Avvertenza</p>
3322 <p class="last">Attenzione: se si usa un client DHCP, ppp
3323 (ADSL compresa) o simile questo file potrebbe' essere
3324 riscritto automaticamente in base a quanto ottenuto dal
3325 DHCP. Si veda la documentazione del pacchetto <tt class=
3326 "docutils literal">resolvconf</tt>.</p>
3330 <div class="section" id="etc-hosts">
3331 <h2><a class="toc-backref" href=
3332 "#id63">5.8 /etc/hosts</a></h2>
3334 <p>Tabella statica per l'associazione tra IP e nomi di
3336 <pre class="literal-block">
3341 127.0.0.1 localhost.localdomain localhost 10.10.208.162
3342 daniela daniela.piffa.net 10.10.208.254 mirror
3343 mirror.piffa.net 91.191.138.15 thepiratebay.org
3344 192.168.0.11 chrome chrome.mydomain.com
3347 <p>Il contenuto del file e' un associazione tra un
3348 <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3349 es: <tt class="docutils literal">mirror</tt> o veri e propi
3350 nomi di dominio <tt class=
3351 "docutils literal">mirror.piffa.net</tt>. Si puo inserire
3352 un nome semplice come <em>casa</em> per riferirsi ad un
3353 host che si ha necessita' di contattare spesso, oppure
3354 mappare un nome di dominio completo su un indirizzo IP.</p>
3356 <p>Il problema e' la gestione di questo file su molti
3357 hosts: quando gli host cambiano IP si devono aggiornare
3358 manualmente i records, operazione in se' non
3359 particolarmente gravosa ma che andra' fatta per ogni client
3360 della vostra LAN. Un metodo semplice per distribuire questo
3361 file e' utilizzare <tt class=
3362 "docutils literal">Dnsmasq</tt>: questo infatti legge e
3363 onora il file <tt class="docutils literal">hosts</tt> che
3364 avete prodotto e lo rende disponibile ai clients tramite le
3367 <p>Dnsmasq lavora come un server DNS, i vostri client lo
3368 interrogheranno per tradurre nomi di host e domini in
3369 indirizzi IP, risolvendo il problema della
3370 <em>distribuzione</em> del file <tt class=
3371 "docutils literal">hosts</tt> tra molteplici clients.
3372 Infatti il servizio DNS indica appunto una <em>directory
3373 distribuita</em> per la risoluzione dei nomi di dominio,
3374 risolvendo i problemi dell'aggiornamento e diffusione dei
3375 continui cambiamenti di questa.</p>
3377 <p>Modificare la risoluzione di un nome di dominio
3378 esistente (ad esempio riconducendola a un IP interno) e' un
3379 modo drastico e funzionale per <em>annullarlo</em>
3380 rendendolo non disponibile alla propria rete locale. Ad
3381 esempio aggiungere al file <tt class=
3382 "docutils literal">/etc/hosts</tt>:</p>
3383 <pre class="literal-block">
3384 127.0.0.1 www.facebook.com
3387 <p>Impedira' agli utenti della LAN di raggiungere
3388 <em>facebook</em>, ora reindirizzato a <tt class=
3389 "docutils literal">localhost</tt>.</p>
3391 <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3392 server HTTP pubblico usato per i downloads (ad esempio un
3393 mirror della propia distribuzione come <tt class=
3394 "docutils literal">ftp.it.debian.org</tt>) a un equivalente
3395 mirror creato all'interno della rete locale, riducendo il
3396 traffico verso l'esterno e aumentando notevolmente la
3397 velocita' di scaricamento.</p>
3400 <div class="section" id="hostname">
3401 <h2><a class="toc-backref" href=
3402 "#id64">5.9 Hostname</a></h2>
3404 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3405 (e modificabile) con il comando <tt class=
3406 "docutils literal">hostname</tt>. Quando utilizzate a una
3407 shell su un host in genere l'hostname compare nel prompt
3410 <p>Per visualizzare il nome dell'host su cui si sta
3411 operando si digiti semplicemnte <tt class=
3412 "docutils literal">hostname</tt>, lo stesso comando con un
3413 oggetto modifica temporaneamente il nome dell'host. Per
3414 modificare in modo permanente il nome del computer si
3415 modifichi il contenuto del file <tt class=
3416 "docutils literal">/etc/hostname</tt>.</p>
3418 <p>Si faccia attenzione a non aver un hostname puramente
3419 numerico: ad es. <tt class="docutils literal">161</tt>. E'
3420 opportuno che il nome sia comunque un alfanumerico:
3421 <tt class="docutils literal"><span class=
3422 "pre">host-161</span></tt> o simile.</p>
3424 <div class="section" id="fqdn">
3425 <h3><a class="toc-backref" href=
3426 "#id65">5.9.1 FQDN</a></h3>
3428 <p>Per semplicita' gli host sono generalemente
3429 raggiungibili dall'esterno mappando il loro IP su un nome
3430 di dominio FQDN: fully qualified domain name, composto
3431 generalmente da <em>hostname</em>.``domain-name``, ad es.
3432 <em>bender</em>.``piffa.net``.</p>
3434 <p>Alcuni servizi internet fanno affidamento sul PTR
3435 dell'IP del server per cercare una conferma che il
3436 <em>servizio</em> sia veramente chi afferma di essere (ad
3439 <p>Non e' automatico che un servizio, ad esempio un
3440 server di posta, si qualifichi leggendo il contenuto del
3441 file <tt class="docutils literal">hostname</tt>
3442 aggiungendo come suffisso il dominio della rete di cui fa
3443 parte l' host: a volte questo parametro puo' essere
3444 specificato nel file di configurazione del servizio:</p>
3445 <pre class="literal-block">
3446 * Squid (HTTP proxy): ``visible_hostname``
3448 * Postfix (SMTP server): ``myhostname``
3451 <p>I motivi sono diversi, senza entrare nel dettaglio dei
3452 vari protocolli si pensi comunque che un host ha sempre
3453 un solo nome, ma puo' avere un numero variabile di
3454 <em>device di rete</em> sia fisici che virtuali con
3455 relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3461 <div class="section" id="dnsmasq">
3462 <h1><a class="toc-backref" href=
3463 "#id66">6 DNSmasq</a></h1>
3465 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3466 forwarder, server DHCP, e' caratterizzato dalla facilita' di
3467 configurazione, limitato uso di risorse, adattabilita' a
3468 connessioni <em>dinamiche</em> come ADSL o altre punto a
3469 punto (anche via cellulari) per condividere rapidamente la
3470 rete (cosa molto utile se ci dovesse trovare a ridare
3471 connettetivita' a una rete momentaneamente sprovvista), dalla
3472 possibilita' di modificare rapidamente i record DNS serviti
3473 alla rete anche grazie alla distribuzione del file <tt class=
3474 "docutils literal">/etc/hosts</tt> locale. Puo' essere anche
3475 utilizzato come <cite>server per il boot da rete
3476 <http://www.debian-administration.org/articles/478>_</cite>
3479 <p>Dnsmasq e' un interessante alternativa all'uso del server
3480 DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3481 autoritativo) accompagnato dal server DHCPd. I vantaggi
3485 <li>Leggerezza: puo' essere fatto girare su una macchina
3486 relativamente debole in caso di bisogno.</li>
3488 <li>Rapidita' di configurazione (in particolare per servire
3489 dei record A / MX alla rete, modificando al volo i valori
3490 originali ospitati sul server DNS pubblico).</li>
3492 <li>Ben integrato con connessioni PPP : e' ingrado di
3493 rilevare i cambiamenti dei dns suggeriti e impostarli come
3494 forwarders (utile se dovete rendere disponibile rapidamente
3495 una connessione a internet a una rete in difficolta').</li>
3498 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3499 particolare quando si deve intervenire in una rete
3500 pre-esistente in cui il server principale e' in crisi: si
3501 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3502 <em>mascherare</em> i servizi al momento non disponibili.
3503 Molto utile per scopi didattici, sopratutto per testare
3504 server SMTP impostando al volo i campi MX per nomi di dominio
3507 <div class="section" id="configurazione">
3508 <h2><a class="toc-backref" href=
3509 "#id67">6.1 Configurazione</a></h2>
3511 <p>Vediamo alcune direttive di basi del file di
3512 configurazione <tt class=
3513 "docutils literal">/etc/dnsmasq.conf</tt> utili per la
3514 configurazione sia del DNS cache che per il DHCP
3517 <dl class="docutils">
3518 <dt>domain-needed</dt>
3520 <dd>Non inoltrare query ai server DNS esterni per nomi
3521 semplici (es andrea, portatile, pippo) che verranno
3522 risolti solo in locale o causeranno direttamente una
3523 risposta <em>not found</em> .</dd>
3527 <dd>Simile alla voce precedente ma per i reverse
3532 <dd>Nome di dominio della rete da passare ai client.</dd>
3534 <dt>expand_hosts</dt>
3536 <dd>Aggiunge il <tt class="docutils literal">nome
3537 host</tt> ( <tt class=
3538 "docutils literal">/etc/hostname</tt>) dei client al nome
3539 di dominio per qualificarli in rete, senza bisogno di
3540 dover comporre a un elenco statico di record nel file
3541 <tt class="docutils literal">/etc/hosts</tt> o nello
3542 stesso file di configurazione di dnsmasq. Es: se un
3543 vostro client si chiama <tt class=
3544 "docutils literal">chrome</tt> e il vostro dominio
3545 <tt class="docutils literal">piffa.net</tt> dnsmasq
3546 rendera' disponibile il campo <em>A</em> per il dominio
3547 <tt class="docutils literal">chrome.piffa.net</tt>
3548 diretto all'ip che verra' assegnato al client.</dd>
3552 <div class="section" id="dhcp">
3553 <h2><a class="toc-backref" href=
3554 "#id68">6.2 DHCP</a></h2>
3556 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3557 al file di configurazione il <em>range</em> degli IP che si
3558 vuole assegnare ai client con il <em>lease time</em> (tempo
3559 di rilascio: quanto a lungo saranno validi gli IP
3560 assegnati) espresso in ore.</p>
3562 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3563 presente <strong>un solo server DHCP</strong>, o per meglio
3564 dire qualunque server DHCP ascolta sul broadcast <tt class=
3565 "docutils literal">255.255.255.255</tt> e potrebbe
3566 rispondere a un pacchetto di richiesta DHCP. Quindi non
3567 fate partire inavvertitamente un server DHCP in una rete
3568 gia' servita e <strong>non vi azzardate ad andare in giro
3569 con un portatile con un server DHCP attivo</strong> nelle
3570 reti altrui. Questo vale anche per i laboratori di
3571 informatica dei corsi di reti: non fate partire il vostro
3572 server DHCP se siete collegati alla rete interna!</p>
3574 <p>/etc/dnsmasq.conf (riga 118):</p>
3575 <pre class="literal-block">
3576 dhcp-range=192.168.0.20,192.168.0.50,24h
3580 <div class="section" id="dns-cache">
3581 <h2><a class="toc-backref" href=
3582 "#id69">6.3 DNS cache</a></h2>
3584 <p>Dnsmasq lavora di default come cache dns: inserire al
3585 file <tt class="docutils literal">/etc/resolv.conf</tt> il
3586 nameserver localhost in cima alla lista dei
3587 <em>nameserver</em> disponibili.</p>
3590 nameserver 127.0.0.1
3593 <p>Questo pero' potrebbe essere problematico se un altro
3594 servizio, ad esempio il DHCP client, riscrive il contenuto
3596 "docutils literal">/etc/resolv.conf</tt>. Per superare il
3597 problema si aggiunga (riga 20) al file di configurazione
3599 "docutils literal">/etc/dhcp3/dhclient.conf</tt></p>
3600 <pre class="literal-block">
3601 prepend domain-name-servers 127.0.0.1;
3604 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3605 (per la connessione ADSL) a intervenire sul file <tt class=
3606 "docutils literal">//etc/resolv.conf</tt>, si modifichi
3607 quindi <tt class="docutils literal"><span class=
3608 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3609 <tt class="docutils literal">usepeerdns</tt>. Se la vostra
3610 connessione ad internet e' ADSL raramente dovreste aver
3611 bisogno di cambiare i DNS una volta impostati (a meno che
3612 non usiate un portatile!).</p>
3616 <div class="section" id="bind-dns-autoritativo">
3617 <h1><a class="toc-backref" href=
3618 "#id70">7 Bind : DNS Autoritativo</a></h1>
3620 <p>Le soluzioni viste possono bastare per la rete locale o
3621 per fare delle prove, ma prima o poi verra' il momento in cui
3622 si e' chiamati a gestire dei domini su internet: lo standard
3623 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3626 <p>Installare i pacchetti:</p>
3627 <pre class="literal-block">
3631 <div class="section" id="id5">
3632 <h2><a class="toc-backref" href=
3633 "#id71">7.1 DNS cache</a></h2>
3635 <p>Bind appena installato funzionera' come DNS cache: si
3636 faccia un test con un <tt class="docutils literal">dig
3637 @localhost</tt> . Bind a differenza di Dnsmasq e' autonomo:
3638 non ha bisogno di forwardare (inoltrare) le query a un DNS
3639 esterno: queste verranno risolte direttamente da Bind
3640 partendo dai <em>DNS root servers</em>.</p>
3642 <p>E' comunque possibile impostare dei DNS forwarders,
3643 tipicamente i DNS server forniti dal proprio provider, per
3644 velocizzare le query:</p>
3646 <p>/etc/bind/named.conf.options (riga 13):</p>
3647 <pre class="literal-block">
3653 <p>Nel caso si voglia usare Bind solo come server DNS cache
3654 per la propria LAN senza ospitare delle zone DNS pubbliche
3655 sara' il caso di limitare gli accessi al server alla sola
3658 <p>/etc/bind/named.conf.options (riga 19):</p>
3659 <pre class="literal-block">
3660 // Se il proprio server ha IP 10.10.208.254
3661 // sulla rete LAN privata:
3662 listen-on { 10.10.208.254; }
3665 <p>E non si lasci il server in ascolto su uno degli
3666 eventuali indirizzi IP pubblici.</p>
3668 <p>Se questo non fosse possibile si puo' sempre lavorare su
3669 una <em>acl</em>:</p>
3671 <p>/etc/bind/named.conf</p>
3672 <pre class="literal-block">
3674 10.10.208.0/24 ; 127.0.0.0/8 ;
3678 <p>Per poi aggiungere all'interno della stanza options la
3679 direttiva che abilita' l'entita' <tt class=
3680 "docutils literal">localnet</tt>:</p>
3682 <p>/etc/bind/named.conf.options</p>
3683 <pre class="literal-block">
3684 allow-query {"localnet" ;} ;
3688 <div class="section" id="ospitare-una-zona">
3689 <h2><a class="toc-backref" href=
3690 "#id72">7.2 Ospitare una zona</a></h2>
3692 <p>Se avete acquistato un nome di dominio e vi serve un
3693 software DNS per gestirlo Bind e' la scelta piu' diffusa.
3694 Ora vedremo come configurare una <em>zona</em> (come
3695 piffa.net) in modo che Bind sia autoritativoper questa,
3696 rispondendo alle query DNS di tutta la rete internet.</p>
3698 <div class="section" id="named-conf-local">
3699 <h3><a class="toc-backref" href=
3700 "#id73">7.2.1 named.conf.local</a></h3>
3702 <p>Prima di tutti impostiamo il server bind per gestire
3703 la zona, per non fare confusione e' opportuno inserire le
3704 propie zone DNS nel file <tt class=
3705 "docutils literal">named.conf.local</tt> e non in
3706 <tt class="docutils literal">named.conf</tt>.</p>
3708 <p>named.conf.local:</p>
3709 <pre class="literal-block">
3711 // Do any local configuration here
3714 // Consider adding the 1918 zones here, if they are not used in your
3716 //include "/etc/bind/zones.rfc1918";
3720 file "/etc/bind/pz/piffa.net";
3724 <dl class="docutils">
3725 <dt>type master</dt>
3727 <dd>Il nostro server DNS sara' il principale, al quale
3728 poi potremo affiancare dei DNS secondari nel caso
3729 questo non sia disponibile.</dd>
3731 <dt>file "/etc/bind/pz/piffa.net"</dt>
3733 <dd>Dove verranno inserite le informazioni vere e
3734 propie di questa zona.</dd>
3738 <div class="section" id="configurazione-della-zona">
3739 <h3><a class="toc-backref" href=
3740 "#id74">7.2.2 Configurazione della
3743 <p>Ora dovremo preparare il file contenente i record DNS
3744 della zona <em>piffa.net</em>, come abbiamo indicato
3745 prima questi saranno contenuti nel file <tt class=
3746 "docutils literal">/etc/bind/pz/piffa.net</tt> . Tenere
3747 le zone dentro una sottocartella e' buona abitudine,
3748 usare <tt class="docutils literal">pz</tt> per queste e'
3749 una vecchia abitudine.</p>
3752 <pre class="literal-block">
3753 ; Zona per il dominio di secondo livello piffa.net
3756 @ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
3758 8H ; refresh (8 hours)
3759 2H ; retry (2 hours)
3760 4W ; expire (4 weeks)
3761 1D ; minimum (1 day)
3768 TXT "Piffanet main site"
3774 test.piffa.net. A 94.23.63.105
3775 *.piffa.net. A 94.23.63.105 ; *catch all domain
3780 <p>All'interno di questo file si possono inserire dei
3781 commenti con il carattere <tt class=
3782 "docutils literal">;</tt> (punto-e-virgola), si faccia
3783 attenzione alla rigida sintassi: apertura e chiusura
3784 delle parentesi tonde nella parte <tt class=
3785 "docutils literal">IN SOA</tt>, uso del <tt class=
3786 "docutils literal">punto</tt> finale per precisare un
3787 nome di dominio specifico (<em>FQDN</em>: Fully-qualified
3788 Domain Name) come <tt class=
3789 "docutils literal">test.piffa.net.</tt> a differenza
3790 degli altri domini di terzo livello come <tt class=
3791 "docutils literal">pop,imap,smtp</tt> .</p>
3793 <p>La zona inizia con una direttiva <tt class=
3794 "docutils literal">$TTL 3D</tt> (RFC 2308) che indica la
3795 durata (in questo caso tre giorni) che ogni record
3796 dovrebbe avrebbe nella cache degli altri serber DNS.
3797 Questo valore dovrebbe essere superiore a un giorno, se
3798 non modificate spesso i valori dei vostri record DNS e'
3799 consigliabile settarlo a 2/3 settimane in modo da
3800 limitare la frequenza delle query al propio server.
3801 Questo parametro puo' essere modificato per singoli
3803 <pre class="literal-block">
3804 $TTL 3D ; 3 giorni: default se non specificato altrimenti
3805 rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
3806 lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
3807 normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
3810 <p>Segue poi il nome della zona, indicato con la
3811 <tt class="docutils literal">@</tt> per richiamare la
3812 zona originale precisata nel file <tt class=
3813 "docutils literal">named.conf.options</tt> . Segue il
3814 campo <tt class="docutils literal">SOA</tt>.</p>
3816 <div class="section" id="soa-start-of-authority-record">
3817 <h4><a class="toc-backref" href=
3818 "#id75">7.2.2.1 SOA: Start of
3819 Authority Record</a></h4>
3821 <p>Il record SOA puo' comparire solo una volta in una
3822 zona, contiene informazioni relative all'autorita' del
3825 <dl class="docutils">
3826 <dt>ns1.piffa.net. name-server</dt>
3828 <dd>primary master DNS di questo dominio.</dd>
3830 <dt>hostmaster.piffa.net. email-addr</dt>
3832 <dd>email-addr: indirizzo email della persona
3833 responsabile di questa zona, il primo punto viene
3834 tradotto in una <em>chiocciola</em> <tt class=
3835 "docutils literal">@</tt> dato che questo carattere
3836 ha un'altro utilizzo all'interno di questo file. Il
3837 referente della zona <strong>deve</strong> essere un
3838 email valido e controllato, come consuetudine si usa
3840 "docutils literal">hostmaster@dominio.tilde</tt>
3843 <dt>200905245 serial number</dt>
3845 <dd>Questo valore serve per indicare quando e' stato
3846 modificato questo file di configurazione, secondo il
3847 formato <tt class="docutils literal">yyyymmddss</tt>:
3848 <tt class="docutils literal">yyyy</tt> = anno, ''mm''
3849 = mese, ''dd'' = giorno, ''ss'' = seriale. Il seriale
3850 che deve essere sempre specificato anche per una
3851 cifra, va incrementato di una unita' nel caso vengano
3852 fatte piu' modifiche <em>nello stesso
3857 <dd>Indica ai DNS secondari quanto tempo attendere
3858 per cercare di aggiornare i loro dati con il DNS
3863 <dd>Intervallo di tempo per il DNS slave (secondario)
3864 da aspettare prima di cercare di ricontattare il
3865 <em>master</em> in caso di problemi col
3866 <em>refresh</em>.</dd>
3870 <dd>Indica quando i dati dei dns secondarinon sono
3871 piu' autoritativi in caso di impossibilita' degli
3872 <em>slaves</em> di ri-aggiornarsi con il
3873 <em>master</em>. Consigliato un valore di 2/4
3878 <dd>Questo valore indicava il TTL fino alla versione
3879 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3880 durata del <em>negative caching</em>, quanto i
3881 resolvers (ad esempio un server dns cache) puo'
3882 mantenere un record <em>negativo</em> (che non indica
3883 la corrispondenza tra un nome di dominio e un ip, ma
3884 la non esistenza del record). Nell'uso per il
3885 negative caching viene fissato un valore massimo di 3
3886 ore dalla RFC 2308.</dd>
3890 <div class="section" id="altri-campi">
3891 <h4><a class="toc-backref" href=
3892 "#id76">7.2.2.2 Altri campi:</a></h4>
3894 <p>All'interno della zona possono essere utilizati vari
3895 tipi di records (RR):</p>
3897 <dl class="docutils">
3900 <dd>Informazioni testuali associate ad un record</dd>
3904 <dd>Name Server della zona. Non deve essere un
3909 <dd>Indirizzo ipv4 da associare al record</dd>
3913 <dd>Indirizzo ipv6 da associare al record</dd>
3917 <dd>Canonical Name: un alias per un host: ad esempio
3918 per il dominio piffa.net possiamo settare degli alias
3919 come <tt class="docutils literal">www.piffa.net,
3920 http.piffa.net, virtual.piffa.net, ftp.piffa.net,
3921 imap.piffa.net</tt>. Comodo quando diversi alias sono
3922 sempre riferiti allo stesso ip.</dd>
3926 <dd>Mail Exchanger: server di posta che si occupera'
3927 della posta elettronica per questo dominio.E'
3928 opportuno avere almeno un server di posta di back-up,
3929 per indicare la priorita' di un MX rispettoad un
3930 altro si usa un valore di 2 cifre: il valore piu'
3931 basso indica priorita' piu' bassa. Es: <tt class=
3932 "docutils literal">MX 10
3933 smtp.piffa.net.</tt> per il server SMTP principale e
3935 "docutils literal">MX
3936 40 smtp2.piffa.net</tt> per il secondario. Non deve
3937 essere un cname.</dd>
3941 <dd>Reverse look-up, usato per la mappatura inversa
3942 di un indirizzo ip a una stringa identificativa
3943 dell'host. Si noti che per poter modificare questi
3944 record si deve avere <em>in gestione</em> la <em>zona
3945 IP</em>, se cosi' non fosse si dovra' chiedere al
3946 propio provider la modifica di questo record per il
3947 propio ip. Links: <a class="reference external" href=
3948 "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
3954 <div class="section" id="dns-slave">
3955 <h2><a class="toc-backref" href=
3956 "#id77">7.3 DNS slave</a></h2>
3958 <p>Data l'importanza del servizio DNS e' necessario avere
3959 ridondanza per i server DNS che ospitano i vostri dati: in
3960 caso di indisponibilita' del server <em>master</em> (nel
3961 caso fosse il solo a tenere i dati questo comporterebbe la
3962 <em>scomparsa</em> di tutti i servizi / host da esso
3963 seviti!) il client potrebbe contattare uno degli
3966 <p>Gli slave recuperano i dati dei recordos RR direttamente
3967 dal master e non sara' quindi necessario dover mantenere
3968 manualmente il file di configurazione della zona sugli
3969 slaves, ogni volta che aggiorneremo il master questi dati
3970 si propaghera' agli slaves automaticamente.</p>
3972 <p>Per attivare uno <em>slave</em> per la nostra zona di
3973 esempio <tt class="docutils literal">piffa.net</tt> si
3974 inserisca nel file <tt class=
3975 "docutils literal">named.conf.local</tt> dello slave
3977 <pre class="literal-block">
3980 file "/etc/bind/pz/piffa.net";
3981 masters { 192.168.0.1; };
3985 <p>Facendo ripartire Bind il file <tt class=
3986 "docutils literal">/etc/bind/pz/piffa.net</tt> viene creato
3987 automaticamente.</p>
3989 <p>Segue un estratto di <tt class=
3990 "docutils literal">/var/log/syslog</tt> al <tt class=
3991 "docutils literal">restart</tt> di <tt class=
3992 "docutils literal">bind9</tt> sullo slave:</p>
3993 <pre class="literal-block">
3994 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
3995 ... slave named[2256]: running
3996 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
3997 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
3998 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
4001 <div class="warning">
4002 <p class="first admonition-title">Avvertenza</p>
4004 <p class="last">Bind9 (versione 9.3 presente in Debian
4005 Lenny) richiede una esplicita autorizzazione alla
4006 notifica per lo stesso server slave, che in fase di avvio
4007 interroghera' (inviando un notify) se' stesso per
4008 valutare se i dati relativi alla zona di cui e' slave
4009 sono aggiornati. Si aggiunga quindi al file <tt class=
4010 "docutils literal">/etc/bind/named.conf.options</tt>
4011 dello slave: <tt class="docutils literal"><span class=
4012 "pre">allow-notify</span> { 192.168.0.1; };</tt>
4013 all'interno della stanza <tt class=
4014 "docutils literal">options</tt>, in cui l'inidirizzo IP
4015 inserito e' quello dello stesso slave server.</p>
4019 <div class="section" id="aggiornamento-dinamico-nsupdate">
4020 <h2><a class="toc-backref" href=
4021 "#id78">7.4 Aggiornamento dinamico:
4024 <p>Dalla versione 8 di Bind e' dsponibile l'utility
4025 <tt class="docutils literal">nsupdate</tt> (disponibile nel
4026 pacchetto <tt class="docutils literal">dnsutils</tt>) per
4027 aggiornare automaticamente i record di una zona secondo il
4028 paradigma client / server ( RFC2136 ) . Posto che abbiate a
4029 disposizione un server DNS Bind on-line su un indirizzo IP
4030 fisso e un zona da gestire (che potrebbe essere anche solo
4031 la delega di un dominio di terzo livello come
4032 <em>casa.miodominio.net</em>) sara' possibile aggiornare
4033 automaticamente i record che tirano a degli indirizzi IP
4034 <em>pubblici ma dnamici</em>, come quelli spesso messi a
4035 disposizione dei provider per le connessioni ad internet
4036 residenziali, in modo da poter rendere sempre raggiungibile
4037 la vostra workstation a casa anche dopo un aggiornamento
4038 dell'ip dinamico associato alla connessione.</p>
4040 <p>L'auenticazione del client nsupdate che avra' la
4041 possibilita' di aggiornare il server DNS master avviene
4042 tramite <em>Transaction signatures</em> (TSIG, RFC2845)
4043 usando un algoritmo di criptazione dati asimmetrico
4044 <em>HMAC-MD5</em> : generata una coppia di chiavi sul
4045 client / nsupdate con l'utility si dovra' trasferire la
4046 chiave pubblica sul server <em>master</em>, che verra'
4047 configurato per onorare gli aggiornamenti (eliminazione e
4048 inserimento di record RR) autenticati dalla chiave
4051 <div class="section" id="configurazione-client-nsupdate">
4052 <h3><a class="toc-backref" href=
4053 "#id79">7.4.1 Configurazione client
4056 <p>Sul client, sul quale non deve essere necessariamente
4057 installato un server DNS Bind ma la sola utility
4058 <tt class="docutils literal">nsupdate</tt>, generiamo la
4059 coppia di chiavi con l'utility <tt class=
4060 "docutils literal"><span class=
4061 "pre">dnssec-keygen</span></tt> installabile tramite il
4062 pacchetto <tt class=
4063 "docutils literal">bind9utils</tt>:</p>
4064 <pre class="literal-block">
4065 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4068 <p>Otterremo le due chiavi <tt class=
4069 "docutils literal"><span class=
4070 "pre">Khome.piffa.net.+157+04331.key</span>
4072 "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4073 chiave pubblica dovra' essere resa noto al server master
4074 che ricevera' l'update dei records.</p>
4077 <div class="section" id=
4078 "configurazione-server-riconoscimento-chiave">
4079 <h3><a class="toc-backref" href=
4080 "#id80">7.4.2 Configurazione server:
4081 riconoscimento chiave</a></h3>
4083 <dl class="docutils">
4084 <dt>Per rendere nota al server la chiave pubblica
4085 generata sul client si aggiunga quindi al file
4086 <tt class="docutils literal">/etc/bind/named.conf</tt>
4090 <dl class="first last docutils">
4091 <dt>key home.piffa.net. {</dt>
4093 <dd>algorithm HMAC-MD5; secret
4094 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4095 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4101 <p class="first admonition-title">Nota</p>
4103 <p class="last">La parte <tt class=
4104 "docutils literal">secret</tt>, che potete leggere
4105 direttamente nel file *.key della chiave genearta, e'
4106 scritto <em>tutto sulla stessa riga</em> senza ritorni
4111 <div class="section" id="server-gestione-dell-intera-zona">
4112 <h3><a class="toc-backref" href=
4113 "#id81">7.4.3 Server: gestione
4114 dell'intera zona</a></h3>
4116 <p>Sul server modifichiamo il file di configurazione
4117 <tt class="docutils literal">named.conf.local</tt> della
4118 zona della quale vogliamo concedere l'aggiornamento al
4120 <pre class="literal-block">
4123 file "/etc/bind/pz/piffa.net" ;
4130 <dl class="docutils">
4131 <dt>Sara' necessario assicurarsi che il demone di Bind
4132 sia in grado di modificare il file <tt class=
4133 "docutils literal">/etc/bind/pz/piffa.net</tt>: dato
4134 che questo file ora sara' gestito da lui si proceda a
4135 cedergli la propieta' del file::</dt>
4137 <dd>chown bind /etc/bind/pz/piffa.net</dd>
4140 <p>Altro problema che si potrebbe porre: gli orologi di
4141 sistema dei due host devono essere sincronizzati per
4142 poter valutare l'opportunita' di un aggiornamento: si
4143 consigla di installare su entrambi l'utility <tt class=
4144 "docutils literal">ntpdate</tt> e di eseguirla facendo
4145 riferimento ai time server di Debian:</p>
4146 <pre class="literal-block">
4147 apt-get install ntpdate
4151 <p>Ora possiamo provare dal client a effettuare
4152 l'iserimento di un record per testarne il
4154 <pre class="literal-block">
4155 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4156 > server ns1.piffa.net
4157 > update add home.piffa.net. 86400 A 192.168.0.2
4159 Outgoing update query:
4160 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
4161 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4163 home.piffa.net. 86400 IN A 192.168.0.1
4169 <p>Per comprendere meglio l'uso dell'utility <tt class=
4170 "docutils literal">nsupdate</tt> si consiglia la lettura
4171 della relativa pagina man. Nella prima riga viene
4172 invocato il comando <tt class=
4173 "docutils literal">nsupdate</tt> impostando col flag
4174 <tt class="docutils literal"><span class=
4175 "pre">-k</span></tt> la chiave privata generata
4176 precedentemente, con <tt class=
4177 "docutils literal">server</tt> si imposta quale server NS
4178 autoritario della zona (che abbiamo precedentemente
4179 configurato per ricevere gli aggiornamenti) vogliamo
4180 contattare. Alla riga sucessiva <tt class=
4181 "docutils literal">update</tt> viene aggiunto un record
4182 <tt class="docutils literal">A</tt> per la il dominio
4183 <tt class="docutils literal">home.piffa.net</tt>
4184 indirizzato all'IP <tt class=
4185 "docutils literal">192.168.0.2</tt>, poi <tt class=
4186 "docutils literal">show</tt> mostra quanto ci si prepara
4187 a comunicare al server con il finale <tt class=
4188 "docutils literal">send</tt> .</p>
4190 <p>Si noti che in questo modo <em>l'intera zona</em>
4191 piffa.net e suscettibile di essere modificata dal client,
4192 che potra' eliminare e inserire qualunque record. E'
4193 possibile gestire in modo piu' granulare la zona, ad
4194 esempio concedendo al client i privilegi per gestire solo
4195 una parte della zona o i tipo di record da gestire.</p>
4198 <div class="section" id=
4199 "automatizzare-l-aggiornamento-dinamico">
4200 <h3><a class="toc-backref" href=
4201 "#id82">7.4.4 Automatizzare
4202 l'aggiornamento dinamico</a></h3>
4204 <p>Nsupdate risulta comodo per tenere aggiornati i record
4205 DNS degli host connessi ad internet con indirizzi IP
4206 dinamici (pubblici) assegnati dal provider. Il client
4207 deve essere in grado di contattare autonomamente il
4208 server DNS per comunicare un cambiamento del suo ip.
4209 Vediamo innanzi tutto un primo script per nsupdate:</p>
4210 <pre class="literal-block">
4212 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4213 # prima di leggere l'IP ottenuto
4215 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4217 nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
4218 server 192.168.0.254
4219 zone home.piffa.net.
4220 update delete home.piffa.net. A
4221 update delete home.piffa.net. MX
4222 update add home.piffa.net. 432000 A $IPADDR
4223 update add home.piffa.net. 432000 MX 10 home.piffa.net.
4229 <p>Questo script legge il valore del device di rete
4230 <tt class="docutils literal">ppp0</tt> creato dal
4231 <cite>pppoe</cite> di una connessione ADSL per ottenere
4232 l'indirizzo IP ottenuto dal provider (prima di farlo
4233 aspetta 15 secondi per dare il tempo al <tt class=
4234 "docutils literal">pppoe</tt> di negoziare la
4235 connessione).Vengono poi eliminati gli esistenti valori
4236 <tt class="docutils literal">A</tt> e <tt class=
4237 "docutils literal">MX</tt> per <tt class=
4238 "docutils literal">home.piffa.net</tt> (si noti il punto
4239 finale dopo <em>net</em>) e inseriti quelli attuali.</p>
4241 <p>Resta da decidere quando richiamare questo script:
4242 l'evento che causa l'assegnazione del nuovo IP in questo
4243 caso e una nuova connessione <tt class=
4244 "docutils literal">pppoe</tt>, quindi sarebbe
4245 consigliabile inserire lo script nelle routine comprese
4246 in <tt class="docutils literal"><span class=
4247 "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4248 documentazione di ppp), nel caso questo non desse i
4249 risultati sperati (per problemi di connessione) come via
4250 estrema si consideri di mettere lo script nella routine
4251 del demone <tt class="docutils literal">cron</tt> in modo
4252 che venga eseguito periodicamente (ad esempio ogni
4257 <div class="section" id="link-suggeriti">
4258 <h2><a class="toc-backref" href=
4259 "#id83">7.5 Link suggeriti:</a></h2>
4262 <li>DNS for Rocket Scientists <a class=
4263 "reference external" href=
4264 "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4266 <li>DNS HOWTO <a class="reference external" href=
4267 "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4272 <div class="section" id="samba">
4273 <h1><a class="toc-backref" href=
4274 "#id84">8 Samba</a></h1>
4276 <p>Samba e' un progetto libero che fornisce servizi di
4277 condivisione di file e stampanti a client SMB/CIFS.</p>
4279 <p>Samba e' liberamente disponibile, al contrario di altre
4280 implementazioni SMB/CIFS, e permette di ottenere
4281 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4283 <p>Samba e' un software che puo' girare su piattaforme che
4284 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4285 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4286 il protocollo TCP/IP utilizzando i servizi offerti sul server
4287 ospite. Quando correttamente configurato, permette di
4288 interagire con client o server Microsoft Windows come se
4289 fosse un file e print server Microsoft agendo da Primary
4290 Domain Controller (PDC) o come Backup Domain Controller, puo'
4291 inoltre prendere parte ad un dominio Active Directory.</p>
4293 <div class="section" id="pacchetti">
4294 <h2><a class="toc-backref" href=
4295 "#id85">8.1 Pacchetti</a></h2>
4297 <p>Pacchetti da installare per utilizzare Samba in
4298 modalita' client <a class="footnote-reference" href="#id7"
4299 id="id6" name="id6">[2]</a></p>
4300 <pre class="literal-block">
4304 <p>Pacchetti da installare per utilizzare Samba in
4305 modalita' server:</p>
4306 <pre class="literal-block">
4307 samba smbfs smbclient
4310 <table class="docutils footnote" frame="void" id="id7"
4317 <tbody valign="top">
4319 <td class="label"><a class="fn-backref" href=
4322 <td>Anche se nato per i sistemi Windows, Samba puo'
4323 essere usato anche per montare cartelle sotto
4324 GNU/Linux come alternativa a NFS. Per la condivisione
4325 di stampanti sarebbe invece opportuno intervenire
4326 direttamente su <tt class=
4327 "docutils literal">CUPS</tt>.</td>
4332 <p>Durante la prima installazione viene chiesto il nome del
4333 gruppo di appartenenza, il default per Windows e'
4334 <tt class="docutils literal">WORKGROUP</tt>. In aula usiamo
4335 invece <tt class="docutils literal">208</tt> .</p>
4337 <p>Per riconfigurare Samba si usi il comando:</p>
4338 <pre class="literal-block">
4339 dpkg-reconfigure samba-common
4343 <div class="section" id="passwords-e-autenticazione">
4344 <h2><a class="toc-backref" href=
4345 "#id86">8.2 Passwords e
4346 autenticazione</a></h2>
4348 <p>Per poter configurare Samba in modo che usi un sistema
4349 di negoziazione degli accessi alle cartelle condivise
4350 basato su accoppiate <em>nome utente / password</em>
4351 bisogna distinguere tra 3 livelli di password (e
4352 generalmente volete usare <em>sempre la stessa
4353 password</em> per ognuno di questi) e delle differenze tra
4354 le modalita' di <em>autenticazione</em> (e quindi anche di
4355 criptaggio delle passwords) usate da sistemi GNU/Linux e
4358 <dl class="docutils">
4359 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4361 <dd>E' la password dell'<em>utente di sistema</em> che
4362 viene usata sul sistema operativo su cui gira il software
4363 Samba. E' importante tenere conto anche delle
4364 <em>user-id</em> e <em>group-id</em> degli utenti che
4365 dovranno fisicamente scrivere sui file system. Se un
4366 utente non puo' scrivere in una certa posizione del file
4367 system (ad esempio nella cartella <tt class=
4368 "docutils literal">/mnt/condivisione</tt> che sara' stata
4369 necessariamente creata inizialmente dall'utente
4370 <tt class="docutils literal">root</tt>) per mancanza dei
4371 privilegi di scrittura allora non potra' farlo neanche
4372 quando Samba rendera' disponibile la risorsa all'utente.
4373 Se si montano file-system dedicati per le condivisioni
4374 controllare i permessi e proprieta' dei <em>punti di
4375 mount*</em>. Queste passwords sono salvate nel solito
4376 file /etc/shadow (richiamato da /etc/passwd).</dd>
4378 <dt>2 Password per l'applicativo Samba</dt>
4380 <dd>Samba deve essere compatibile con Windows e quindi
4381 utilizzare un sistema di criptazione delle password
4382 diverso da <tt class="docutils literal">/etc/shadow</tt>
4383 . Le password per Samba possono essere gestite ad esempio
4384 col comando <tt class="docutils literal">smbpasswd</tt> e
4385 vengono normalmente salvate all'interno di <tt class=
4386 "docutils literal">/var/lib/samba/passdb.tdb</tt> .</dd>
4388 <dt>3 Password per Windows.</dt>
4390 <dd>Gli utenti Windows effettuano il log-in alla partenza
4391 della sessione di Windows. Se si avra' l'accortezza di
4392 usare sempre la <em>stessa password</em> data
4393 precedentemente anche a Windows (o viceversa impostare la
4394 password per GNU/Linux / Samba uguale a quella di
4395 Windows) l'utente potra' accedere automaticamente alle
4396 condivisioni a lui disponibili.</dd>
4400 <div class="section" id="creazione-utenti">
4401 <h2><a class="toc-backref" href=
4402 "#id87">8.3 Creazione Utenti</a></h2>
4404 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4405 attenzione a <em>non dargli una shell di sistema</em>. Gli
4406 utenti Windows che accedono al server solo per le
4407 condivisioni non hanno bisogno di poter eseguire comandi
4410 <p>Creazione di un utente denominato sambo:</p>
4411 <pre class="literal-block">
4412 adduser --shell /bin/false sambo
4415 <p>Nel file <tt class="docutils literal">/etc/passwd</tt>
4416 comparira' qualcosa come:</p>
4417 <pre class="literal-block">
4418 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4421 <p>Aggiunta dell'utente al database delle password per
4422 Samba e generazione della sua password:</p>
4423 <pre class="literal-block">
4427 <p>Se successivamente si vorra' modificare la password di
4428 un utente gia' esistente si usi:</p>
4429 <pre class="literal-block">
4433 <p>La password sotto Windows andra' modificata sul sistema
4437 <div class="section" id="creare-la-condivisione">
4438 <h2><a class="toc-backref" href=
4439 "#id88">8.4 Creare la
4440 condivisione</a></h2>
4442 <p>La condivisione altro non e' che una cartella sul server
4443 che viene resa disponibile ai client negoziando l'accesso
4444 in base a una autenticazione basata su <em>user-name /
4445 password</em>. E' per altro possibile permettere l'accesso
4446 a una risorsa a chiunque indiscriminatamente (a tutti i
4447 <tt class="docutils literal">guest</tt>) ma la cosa e'
4448 sconsigliabile dal punto di vista della sicurezza. Si
4449 decida se la cartella condivisa debba risiedere nella
4450 <em>home</em> di un utente (nel caso quest'ultimo ne sia
4451 l'unico fruitore) o in una cartella in /mnt/ (nel caso piu'
4452 utenti accedano a questa). Nel secondo caso si potranno
4453 gestire gli accessi sotto GNU/Linux tramite i gruppi.</p>
4455 <p>Creazione della risorsa sambo_share nella home
4456 dell'utente sambo:</p>
4457 <pre class="literal-block">
4458 # mkdir /home/sambo/sambo_share
4459 # chown sambo:sambo /home/sambo/sambo_share/
4462 <div class="section" id=
4463 "sicurezza-permessi-di-esecuzione-sul-server">
4464 <h3><a class="toc-backref" href=
4465 "#id89">8.4.1 Sicurezza: permessi di
4466 esecuzione sul server</a></h3>
4468 <p>A lato server si presti attenzione ai permessi di
4469 esecuzione del file-system che ospita la cartella da
4470 condividere. Se i file che saranno contenuti nella
4471 condivisione saranno da usarsi sotto Windows non c'e'
4472 motivo che questi siano eseguibili sotto GNU/Linux. Si
4473 potrebbe avere quindi, ipotizzando una condivisione in
4474 <tt class="docutils literal">/mnt/share</tt> che risieda
4475 su di un file system dedicato:</p>
4477 <p><tt class="docutils literal">/etc/fstab</tt></p>
4480 /dev/hda10 /mnt/share ext3 rw,
4481 <strong>nosuid,noexec</strong> 0 3
4484 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4485 possibilita' di eseguire programmi con credenziali
4490 <div class="section" id=
4491 "configurazione-dell-applicativo-samba-vero-e-proprio">
4492 <h2><a class="toc-backref" href=
4493 "#id90">8.5 Configurazione
4494 dell'applicativo Samba vero e proprio.</a></h2>
4496 <p>Avendo preparato gli utenti (ancora una volta: non si
4497 dia una shell completa a un utente che accede solo a Samba
4498 o alla posta elettronica) e la cartella sul file system si
4499 puo' procedere a configurare la condivisione su Samba.</p>
4501 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4502 vim si usi 235gg ):</p>
4503 <pre class="literal-block">
4505 # Percorso della cartella condivisa
4506 path = /home/sambo/sambo_share
4507 # Se gli utenti possono scrivere / modificare file
4509 # Negoziazione degli accessi su base utenti / passwords
4512 # #######################################
4513 # Altri parametri opzionali di interesse
4514 # Se posso vedere la condivisione da esplora risorse
4515 # anche se non ho i privilegi per accedervi.
4517 # Commento indicativo della risorsa
4518 comment = Condivisione per Sambo
4521 <p>Dopo aver salvato il file si puo' fare un primo
4522 controllo tramite l'utility <tt class=
4523 "docutils literal">testparm</tt> , che controlla la
4524 sintassi del file di configurazione di Samba. Se questo non
4525 rileva problemi si puo' procedere a un <tt class=
4526 "docutils literal"># /etc/init.d/samba restart</tt> .</p>
4528 <div class="section" id="creazione-di-un-gruppo">
4529 <h3><a class="toc-backref" href=
4530 "#id91">8.5.1 Creazione di un
4533 <p>Se si deve condividere una risorsa con un numero
4534 consistente di utenti e' consigliabile lavorare in
4535 termini termini di gruppi piuttosto che elencare la lista
4536 degli utenti in <tt class="docutils literal">valid
4539 <p>Dopo aver creato il gruppo del quale volete facciano
4540 parte i vostri utenti (<tt class=
4541 "docutils literal">addgroup nome_gruppo</tt>), inserite i
4542 vostri utenti nel gruppo (<tt class=
4543 "docutils literal">adduser nome_utente nome_gruppo</tt>)
4544 e modificate la direttiva <tt class=
4545 "docutils literal">valid users</tt> in <tt class=
4546 "docutils literal">smb.conf</tt> per riferirsi ad un
4547 gruppo piuttosto che a degli utenti. Per riferirsi a un
4548 gruppo si usi il carattere <tt class="docutils literal">@
4549 chicciola</tt> col <tt class=
4550 "docutils literal">nome_del_gruppo</tt>:</p>
4551 <pre class="literal-block">
4552 # Negoziazione degli accessi su base gruppo
4553 valid users = @nome_gruppo
4558 <div class="section" id="testare-il-servizio">
4559 <h2><a class="toc-backref" href=
4560 "#id92">8.6 Testare il Servizio</a></h2>
4562 <p>Come testare il servizio</p>
4565 <pre class="literal-block">
4566 smbclient -U sambo -L localhost
4569 <p>Questo comando permette di esplorare la risorsa
4570 qualificandosi come utente, in questo modo potete testare
4571 il corretto funzionamento dell'autenticazione. Si provi
4572 inizialmente a sbagliare la password deliberatamente, poi a
4573 inserirla correttamente: dovrebbero essere visibili le
4574 risorse disponibili al solo utente sambo: la suo /home e la
4575 cartella samba_share:</p>
4576 <pre class="literal-block">
4577 Sharename Type Comment
4578 --------- ---- -------
4579 sambo_share Disk Condivisione per Sambo
4580 print$ Disk Printer Drivers
4581 IPC$ IPC IPC Service (base server)
4582 sambo Disk Home Directories
4585 <p>In particolare l'ultima voce relativa alla home
4586 directory dell'utente dovrebbe essere visibile solo agli
4587 utenti autenticati.</p>
4589 <p>In alternativa e' possibile montare realmente la
4590 condivisone anche su GNU/Linux tramite un client per samba
4591 e testarne il corretto funzionamento:</p>
4592 <pre class="literal-block">
4593 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4598 <div class="section" id="server-di-posta-postfix">
4599 <h1><a class="toc-backref" href=
4600 "#id93">9 Server di posta: Postfix</a></h1>
4602 <p>Il server di posta che prenderemo in considerazione e'
4603 Postfix, a seguire un estratto di un file di configurazione
4604 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4605 nelle <tt class="docutils literal">/home</tt> degli utenti
4606 per la consegna della posta:</p>
4609 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4610 <pre class="literal-block">
4611 # ...segue dalla riga ~30
4612 myhostname = 162.piffa.net
4613 alias_maps = hash:/etc/aliases
4614 alias_database = hash:/etc/aliases
4615 myorigin = 162.piffa.net
4616 mydestination = 162.piffa.net, localhost
4617 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4618 # dovrete usare un realy host per l'invio della posta
4619 relayhost = smtp.piffa.net
4621 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4622 # Se dovete inviare la posta per i client della vostra LAN privata:
4623 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4624 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4627 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4628 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4629 # si disabiliti procmail
4630 #mailbox_command = procmail -a "$EXTENSION"
4632 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4633 # all'interno della home dell'utente:
4634 home_mailbox = Maildir/
4635 mailbox_size_limit = 0
4636 recipient_delimiter = +
4637 inet_interfaces = all
4640 <dl class="docutils">
4641 <dt>E' disponibile un file di configurazione di esempio ben
4642 piu' articolato e commentato::</dt>
4644 <dd>/usr/share/postfix/main.cf.dist .</dd>
4647 <div class="section" id="test-del-server-smtp">
4648 <h2><a class="toc-backref" href=
4649 "#id94">9.1 Test del server smtp</a></h2>
4651 <p>Per testare il corretto funzionamento del server di
4652 posta si puo' procedere in vari modi.</p>
4655 <li>Spedire una mail a una casella locale / remota e
4656 controllare i log (syslog)</li>
4658 <li>Collegarsi via <em>telnet</em> al server di posta:
4659 <a class="reference external" href=
4660 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4662 <li>usare una utility come SWAKS</li>
4665 <div class="section" id="swaks">
4666 <h3><a class="toc-backref" href=
4667 "#id95">9.1.1 Swaks</a></h3>
4669 <dl class="docutils">
4670 <dt>Per gli utenti meno esperti e' consigliabile
4671 utilizzare <em>SWAKS</em>: si installi l'omonimo
4672 pacchetto e si esegua un test con::</dt>
4674 <dd>swaks --to <a class="reference external" href=
4675 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4676 --from <a class="reference external" href=
4677 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4680 <p>Ecco un esempio di una sessione corretta:</p>
4681 <pre class="literal-block">
4682 swaks --to andrea@piffa.net from andrea@mydomain.com
4683 === Trying smtp.piffa.net:25...
4684 === Connected to smtp.piffa.net.
4685 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4686 -> EHLO alice.mydomain.com
4687 <- 250-zoo.piffa.net
4688 <- 250-PIPELINING
4689 <- 250-SIZE 10240000
4693 <- 250-ENHANCEDSTATUSCODES
4696 -> MAIL FROM:<root@alice.mydomain.com>
4698 -> RCPT TO:<andrea@piffa.net>
4701 <- 354 End data with <CR><LF>.<CR><LF>
4702 -> Date: Thu, 28 May 2009 13:11:19 +0200
4703 -> To: andrea@piffa.net
4704 -> From: root@alice.mydomain.com
4705 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
4706 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4708 -> This is a test mailing
4711 <- 250 2.0.0 Ok: queued as 41FB261AFC
4714 === Connection closed with remote host.
4719 <div class="section" id="imap-e-pop">
4720 <h2><a class="toc-backref" href=
4721 "#id96">9.2 Imap e pop</a></h2>
4723 <p>Postfix e' un server SMTP, di conseguenza se volete che
4724 i vostri utenti possano <em>scaricare</em> in locale la
4725 posta generalmente volete mettere a loro disposizione un
4726 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4728 <dl class="docutils">
4729 <dt>Pacchetti da installare</dt>
4731 <dd>courier-imap courier-pop</dd>
4734 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4735 funziona con le Mailbox in <tt class=
4736 "docutils literal">/var/mail/</tt> .</p>
4739 <div class="section" id="client-a-riga-di-comando">
4740 <h2><a class="toc-backref" href=
4741 "#id97">9.3 Client a riga di
4744 <p>Per testare il corretto funzionamento del server di
4745 posta e' utile avere a disposizione delle utility per
4746 inviare e leggere la posta: ovviamente da riga di
4749 <div class="section" id="mailx">
4750 <h3><a class="toc-backref" href=
4751 "#id98">9.3.1 mailx</a></h3>
4753 <dl class="docutils">
4754 <dt>Uno dei client piu' semplici, sopratutto per
4755 inviare un messaggioi. e' sufficiente usare una formula
4758 <dd>mail <a class="reference external" href=
4759 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4762 <p>Se il comando <tt class="docutils literal">mail</tt>
4763 non fosse disponibile si installi il pacchetto <tt class=
4764 "docutils literal">mailx</tt>.</p>
4766 <p>Al primo prompt si digitera' l'oggetto, il testo del
4767 messaggio (per terminare l'inserimento lasciare una riga
4768 vuota, digitare un <tt class="docutils literal">punto +
4769 Invio</tt> su una riga vuota), la Carbon Copy (se
4773 <pre class="literal-block">
4774 mail andrea@localhost
4775 Subject: Oggetto della mail
4777 per terminare il messaggio
4778 lasciare una riga vuota
4779 e un punto (poi Invio).
4785 <p>Per altrre opzioni si veda la pagina man.</p>
4788 <div class="section" id="mutt">
4789 <h3><a class="toc-backref" href=
4790 "#id99">9.3.2 Mutt</a></h3>
4792 <p>Mutt e' uno dei gestori di posta preferiti da chi
4793 preferisce utilizzare l'interfaccia testuale per la
4794 gestione della posta.</p>
4796 <p>Mutt ha un file di configurazione <tt class=
4797 "docutils literal">.muttrc</tt> nella <em>home</em>
4798 dell'utente, alcuni settaggi possono essere utili:</p>
4800 <dl class="docutils">
4801 <dt>set folder="~/Maildir"</dt>
4803 <dd>Per utilizzare <tt class=
4804 "docutils literal">/home/nome_utente/Maildir come
4805 mailbox</tt>, invece del default <tt class=
4806 "docutils literal">/var/mail/nome_utente</tt>.</dd>
4808 <dt>set editor="vim"</dt>
4810 <dd>Utilizzare <tt class="docutils literal">vim</tt>
4811 come editor per comporre i messaggi.</dd>
4814 <p>Spesso e' utile poter <em>levvere al volo</em> la
4815 Mailbox / Maildir di un utente sul server di posta, per
4816 controllare se i messaggi vengono recapitati
4818 <pre class="literal-block">
4819 mutt -f /var/mail/utente
4820 mutt -f /home/utente/Maildir
4823 <p>In modo analogo si puo' consultare al volo la propia
4824 mailbox su un server remoto tramite IMAP/POP:</p>
4825 <pre class="literal-block">
4826 mutt -f imap://nome_utente@piffa.net
4830 <div class="section" id="web-client">
4831 <h3><a class="toc-backref" href=
4832 "#id100">9.3.3 Web client</a></h3>
4834 <p>Per mettere a disposizione degli utenti un client web
4835 per gestire la propria posta si installi il pacchetto:
4836 <tt class="docutils literal">squirrelmail</tt> . Ci sono
4837 tanti altri client web disponibili: questo e'
4838 particolarmente semplice. Naturalmente dovrete aver
4839 installato: <tt class="docutils literal">php5
4842 <p>L'interfaccia dovrebbe essere disponibile all'url:
4843 <tt class="docutils literal"><span class=
4844 "pre">http://localhost/squirrelmail</span></tt> . Se
4845 cosi' non fosse assicuratevi che Apache abbia incluso il
4846 file di configurazione di squirrelmail:</p>
4847 <pre class="literal-block">
4848 cd /etc/apache2/conf.d/
4849 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
4854 <div class="section" id="graylisting">
4855 <h2><a class="toc-backref" href=
4856 "#id101">9.4 Graylisting</a></h2>
4858 <p>Il <em>graylisting</em> e' un sistema relativamente poco
4859 invasivo, con un limitato consumo di risorse per limitare
4860 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
4861 suggerisce il nome e' una via di mezzo tra una <em>white
4862 list</em> (una lista di mittenti privilegiata, sempre
4863 benvenuti) e una <em>black list</em> (mittenti
4864 <em>bannati</em>, banditi dal poter inviare nuovi
4867 <p>Il funzionamento e' relativamente semplice: ogni
4868 mittente sconosciuto viene immediatamente rifiutato con un
4869 errore <em>non grave</em> come un <em>server non
4870 disponibile, provare piu' tardi</em>. Questo inconveniente
4871 non dovrebbe mettere in difficolta' un server di posta /
4872 mittente legittimo, che dopo un periodo di attesa tentera'
4873 nuovamente di inviare il messaggio ottenendo finalmente il
4874 risultato atteso. Diversamente un <em>bot</em> per l'invio
4875 di SPAM o un applicazione improvvisata (tipicamente di
4876 derivazione virale) che stesse inviando il messaggio
4877 <em>probabilmente</em> non insisterebbe, rinunciano ad
4878 inviare il messaggio preferendo destinazioni meno
4881 <div class="section" id="abilitazione-in-postfix">
4882 <h3><a class="toc-backref" href=
4883 "#id102">9.4.1 Abilitazione in
4886 <p>Installare il pacchetto: <tt class=
4887 "docutils literal">postgrey</tt> e aggiungere il file di
4888 configurazione di Postfix <tt class=
4889 "docutils literal">/etc/postfix/main.cf</tt>:</p>
4890 <pre class="literal-block">
4891 smtpd_recipient_restrictions =
4893 reject_unauth_destination,
4894 check_policy_service inet:127.0.0.1:60000
4898 <div class="section" id="test">
4899 <h3><a class="toc-backref" href=
4900 "#id103">9.4.2 Test</a></h3>
4902 <p>Inviando un messaggio il client dovrebbe ricevere un
4903 iniziale messaggio di rifiuto del messaggio:</p>
4904 <pre class="literal-block">
4905 swaks --to andrea@piffa.net from andrea@mydonain.com
4906 === Trying smtp.piffa.net:25...
4907 === Connected to smtp.piffa.net
4910 -> RCPT TO:<andrea@piffa.net>
4911 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
4912 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
4915 === Connection closed with remote host.
4918 <p>A lato server si dovrebbe rilevare su <tt class=
4919 "docutils literal">/var/log/syslog</tt> qualcosa di
4921 <pre class="literal-block">
4922 connect from alice.mydomain.com[65.98.21.97]
4923 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
4924 client_name=alice.mydomain.com,
4925 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
4926 May 28 14:53:34 r24266 postfix/smtpd[22538]:
4927 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
4928 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
4929 see http://postgrey.schweikert.ch/help/piffa.net.html;
4930 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
4931 proto=ESMTP helo=<alice.mydomain.com>
4932 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
4936 <div class="section" id="statistiche">
4937 <h3><a class="toc-backref" href=
4938 "#id104">9.4.3 Statistiche</a></h3>
4940 <p>E' sempre utile poter tracciare qualche statistica
4941 sulle percentuali di messaggi ricevuti, da chi, messaggi
4942 rifiutati (e per quale motivo). Statistiche che attingono
4943 dai soliti log del server di posta <tt class=
4944 "docutils literal">/var/log/syslog</tt> di default oltre
4945 che i dedicati <tt class=
4946 "docutils literal">/var/log/mail</tt> .</p>
4948 <p>Una utility semplice per analizzare l'attivita' del
4949 propio server smtp potrebbe essere <tt class=
4950 "docutils literal">pflogsumm</tt> , installato il
4951 pacchetto la si puo' invocare con:</p>
4952 <pre class="literal-block">
4953 pflogsumm.pl /var/log/mail.log
4956 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
4957 "docutils literal">/var/log/mail.log.0</tt></p>
4962 <div class="section" id="firewall">
4963 <h1><a class="toc-backref" href=
4964 "#id105">10 Firewall</a></h1>
4966 <p>In Informatica, nell'ambito delle reti di computer, un
4967 firewall (termine inglese dal significato originario di
4968 parete refrattaria, muro tagliafuoco, muro ignifugo; in
4969 italiano anche parafuoco o parafiamma) e' un componente
4970 passivo di difesa perimetrale che puo anche svolgere funzioni
4971 di collegamento tra due o piu' tronconi di rete. Usualmente
4972 la rete viene divisa in due sotto reti: una, detta esterna,
4973 comprende l'intera Internet mentre l'altra interna, detta LAN
4974 (Local Area Network), comprende una sezione piu' o meno
4975 grande di un insieme di computer locali. In alcuni casi e'
4976 possibile che si crei l'esigenza di creare una terza sotto
4977 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
4978 sistemi che devono essere isolati dalla rete interna ma
4979 devono comunque essere protetti dal firewall.</p>
4981 <p>Una prima definizione chiusa di firewall e' la
4984 <p>Apparato di rete hardware o software che filtra tutti i
4985 pacchetti entranti ed uscenti, da e verso una rete o un
4986 computer, applicando regole che contribuiscono alla sicurezza
4989 <p>In realta' un firewall puo' essere realizzato con un
4990 normale computer (con almeno due schede di rete e software
4991 apposito), puo' essere una funzione inclusa in un router o
4992 puo' essere un apparato specializzato. Esistono inoltre i
4993 cosiddetti "firewall personali", che sono programmi
4994 installati sui normali calcolatori, che filtrano solamente i
4995 pacchetti che entrano ed escono da quel calcolatore; in tal
4996 caso viene utilizzata una sola scheda di rete.</p>
4998 <p>La funzionalita' principale in sostanza e' quella di
4999 creare un filtro sulle connessioni entranti ed uscenti, in
5000 questo modo il dispositivo innalza il livello di sicurezza
5001 della rete e permette sia agli utenti interni che a quelli
5002 esterni di operare nel massimo della sicurezza. Il firewall
5003 agisce sui pacchetti in transito da e per la zona interna
5004 potendo eseguire su di essi operazioni di: controllo modifica
5007 <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
5008 IP per leggere le informazioni presenti sul suo header, e in
5009 alcuni casi anche di effettuare verifiche sul contenuto del
5012 <div class="section" id="links">
5013 <h2><a class="toc-backref" href=
5014 "#id106">10.1 Links</a></h2>
5017 <li><a class="reference external" href=
5018 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
5020 <li><a class="reference external" href=
5021 "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
5022 http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></li>
5026 <div class="section" id="ipfilter">
5027 <h2><a class="toc-backref" href=
5028 "#id107">10.2 Ipfilter</a></h2>
5030 <p>Link: <a class="reference external" href=
5031 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
5032 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
5034 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
5035 po' del 3) e su cosa <em>non</em> lavora (livello 4).
5036 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
5037 etc) e del livello 1 (MAC source address). Iptables
5038 comunque permette di fare il <em>connection-tracking</em>,
5039 mediante il quale possiamo implementare il Network Address
5042 <p>Netfilter non ricostruisce il flusso di dati tra
5043 pacchetti, non puo' quindi rilevare la presenza di virus o
5044 simili che si trasmettono su pacchetti separati:
5045 ricomporre, analizzare e tornare a scomporre i frammenti
5046 richiederebbe troppa RAM e risorse di sistema, con il
5047 conseguente rischio di saturare il firewall fino
5048 all'abbandono dei nuovi pacchetti in transito. Ci sono
5049 altri software piu' adatti a questi compiti, ad esempio un
5050 proxy HTTP come Squid che e' appunto una applicazione di
5051 quarto livello, progettata e strutturata per analizzare e
5052 modificare i flussi di dati (il <em>contenuto</em> dei
5053 pacchetti, non le sole <em>intestazioni</em>) facendo
5054 abbondate uso delle risorse RAM e di calcolo del sistema.
5055 Non a caso su macchine embedded dalle prestazioni molto
5056 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5057 massimo le risorse di sistema per gestire il traffico di
5058 una rete 10/100, mentre il lavoro tipico svolto da
5059 netfilter e' quasi irrilevante.</p>
5062 <div class="section" id="progettazione-di-un-firewall">
5063 <h2><a class="toc-backref" href=
5064 "#id108">10.3 Progettazione di un
5067 <p>Per implementare un firewall bisogna decidere un aio di
5068 cose: la collocazione e l'approccio (inclusivo o esclusivo)
5069 al filtraggio, il tipo di hardware.</p>
5071 <div class="section" id="collocazione">
5072 <h3><a class="toc-backref" href=
5073 "#id109">10.3.1 Collocazione</a></h3>
5075 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5076 della rete, decidere se diversi reparti di una azienda si
5077 possano vedere tra loro e in che misura.</p>
5079 <p>Collocazione:</p>
5082 <ol class="arabic simple">
5085 <li>tra router e servers / LAN</li>
5087 <li>Unico server / router / firewall e connessi
5088 rischi. considerare l'acquisto di un router hardware
5093 <dl class="docutils">
5094 <dt>Layeed security:</dt>
5096 <dd>Implementare piu' device / software sui diversi
5097 livelli: <a class="reference external" href=
5098 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5099 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5103 <div class="section" id="policy-di-default">
5104 <h3><a class="toc-backref" href=
5105 "#id110">10.3.2 Policy di
5108 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5112 <div class="section" id="hardware">
5113 <h3><a class="toc-backref" href=
5114 "#id111">10.3.3 Hardware</a></h3>
5116 <p>Sostanzialmente potremmo distinguere due tipologie di
5119 <dl class="docutils">
5120 <dt>Network appliance dedicata::</dt>
5122 <dd>Un dispositivo hardware dedicato alla funzione di
5123 Firewall, ad es un Cisco / Fortigate. Si noti che molti
5124 firewall economici altro non sono che Linux box molto
5127 <dt>Server / Personal computer:</dt>
5129 <dd>Un server sul quale viene fatto girare Netfilter ad
5130 uso del server stesso e della rete connessa.</dd>
5133 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5134 flessibilita', strumenti di gestione, sicurezza,
5139 <div class="section" id=
5140 "percorso-dei-pacchetti-tra-tabelle-e-catene">
5141 <h2><a class="toc-backref" href=
5142 "#id112">10.4 Percorso dei pacchetti tra
5143 tabelle e catene</a></h2>
5145 <p>E importante conoscere il percorso che i paccheti
5146 seguono passando tra le varie catene, l'ordine infatti puo'
5147 cambiare il riusultato ottenuto (che il pacchetto raggiunga
5148 o meno l'host, oppure modificare il pachetto stesso).</p>
5150 <p>link: <a class="reference external" href=
5151 "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
5152 http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></p>
5155 <div class="section" id="concetti-di-base">
5156 <h2><a class="toc-backref" href=
5157 "#id113">10.5 Concetti di base</a></h2>
5159 <div class="section" id="tabelle-catene-regole">
5160 <h3><a class="toc-backref" href=
5161 "#id114">10.5.1 Tabelle, catene,
5164 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5167 <li>filter - Regola il firewalling: quali pacchetti
5168 accettare, quali bloccare</li>
5170 <li>nat - Regola le attivita' di natting</li>
5172 <li>mangle - Interviene sulla alterazione dei
5176 <p>Ogni tabella ha delle catene (chains) predefinite
5177 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5178 aggiunte catene custom. Ogni catena e' composta da un
5179 elenco di regole (rules) che identificano pacchetti di
5180 rete secondo criteri diversi (es: -p tcp --dport 80 -d
5181 10.0.0.45) Ogni regola termina con una indicazione
5182 (target) su cosa fare dei pacchetti identificati dalla
5183 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5186 <div class="section" id="match">
5187 <h3><a class="toc-backref" href=
5188 "#id115">10.5.2 Match</a></h3>
5190 <p>I Match di una regola (rule) servono a testare un
5191 pacchetto per valutare se corrisponda a certe
5192 caratteristiche. I match di possono servire a controllare
5193 se un pacchetto e' destinato a una porta particolare o
5194 utilizza un protocollo particolare.</p>
5196 <p>Alcuni esempi:</p>
5198 <dl class="docutils">
5199 <dt>-p [!] proto</dt>
5201 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5202 udp, gre, ah...)</dd>
5204 <dt>-s [!] address[/mask]</dt>
5206 <dd>Indirizzo IP sorgente (o network con maschera di
5209 <dt>-d [!] address[/mask]</dt>
5211 <dd>Indirizzo IP destinazione (o network)</dd>
5213 <dt>-i [!] interface[+]</dt>
5215 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5217 <dt>-o [!] interface[+]</dt>
5219 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5222 <table class="docutils option-list" frame="void" rules=
5224 <col class="option">
5225 <col class="description">
5227 <tbody valign="top">
5229 <td class="option-group"><kbd><span class=
5230 "option">-f</span></kbd></td>
5232 <td>Frammento di pacchetto</td>
5238 <div class="section" id="targets">
5239 <h3><a class="toc-backref" href=
5240 "#id116">10.5.3 Targets</a></h3>
5242 <p>Se un pacchetto soddisfa le condizioni del Match
5243 <em>salta</em> (jump) su uno dei target possibili, in
5244 caso contrario continua il suo percorso tra regole catene
5247 <p>Target principali:</p>
5249 <dl class="docutils">
5250 <dt><em>-j ACCEPT</em></dt>
5252 <dd>Il pacchetto matchato viene accettato e procede
5253 verso la sua destinazione. Si usa per definire il
5254 traffico permesso.</dd>
5256 <dt><em>-j DROP</em></dt>
5258 <dd>Il pacchetto viene rifiutato e scartato, senza
5259 alcuna notifica al mittente. Si usa, in alternativa a
5260 REJECT, per bloccare traffico.</dd>
5262 <dt><em>-j REJECT</em></dt>
5264 <dd>Il pacchetto viene rifiutato. Al mittente viene
5265 mandato un pacchetto (configurabile) di notifica tipo
5266 ICMP port-unreachable (--reject-with
5267 icmp-port-unreachable)</dd>
5270 <table class="docutils option-list" frame="void" rules=
5272 <col class="option">
5273 <col class="description">
5275 <tbody valign="top">
5277 <td class="option-group"><kbd><span class=
5278 "option">-t <var>LOG</var></span></kbd></td>
5280 <td>Il pacchetto viene loggato via syslog e procede
5281 l'attraversamento della catena. Opzioni:
5282 (--log-level, --log-prefix, --log-tcp-sequence,
5283 --log-tcp-options, --log-ip-options)</td>
5287 <td class="option-group"><kbd><span class=
5288 "option">-j <var>DNAT</var></span></kbd></td>
5290 <td>Viene modificato l'IP di destinazione del
5291 pacchetto. Target disponibile solo in nat /
5292 PREROUTING e nat / OUTPUT. L'opzione
5293 --to-destination IP:porta definisce il nuovo IP di
5294 destinazione. Si usa tipicamente su network
5295 firewall che nattano server di una DMZ</td>
5299 <td class="option-group"><kbd><span class=
5300 "option">-j <var>SNAT</var></span></kbd></td>
5302 <td>Viene modificato l'IP sorgente. Solo in nat /
5303 POSTROUTING. Prevede l'opzione --to-source
5304 IP:porta. Si usa per permettere l'accesso a
5305 Internet da una rete locale con IP privati.</td>
5309 <td class="option-group"><kbd><span class=
5310 "option">-j <var>MASQUERADE</var></span></kbd></td>
5312 <td>Simile a SNAT, si applica quando i pacchetti
5313 escono da interfacce con IP dinamico (dialup, adsl,
5314 dhcp...). Si usa solo in nat / POSTROUTING e
5315 prevede l'opzione --to-ports porte.</td>
5319 <td class="option-group"><kbd><span class=
5320 "option">-j <var>REDIRECT</var></span></kbd></td>
5322 <td>Redirige il pacchetto ad una porta locale.
5323 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5324 previsto per fare un transparent proxy (con proxy
5325 server in esecuzione sulla macchina con
5330 <td class="option-group"><kbd><span class=
5331 "option">-j <var>RETURN</var></span></kbd></td>
5333 <td>Interrompe l'attraversamento della catena. Se
5334 questa e' una secondaria, il pacchetto torna ad
5335 attraversare la catena madre da punto in cui aveva
5336 fatto il salto nella secondaria. Se il RETURN e' in
5337 una delle catene di default, il pacchetto
5338 interrompe l'attraversamento e segue la policy di
5343 <td class="option-group"><kbd><span class=
5344 "option">-j <var>TOS</var></span></kbd></td>
5346 <td>Usabile solo nella tabella mangle, permette di
5347 cambiare il TOS (Type Of Service) di un pacchetto
5348 con l'opzione --set-tos. Per un elenco dei
5349 parametri disponibili: iptables -j TOS -h</td>
5353 <td class="option-group"><kbd><span class=
5354 "option">-j <var>MIRROR</var></span></kbd></td>
5356 <td>Curioso e sperimentale, questo target invia un
5357 pacchetto speculare al mittente. In pratica e' come
5358 se facesse da specchio per tutti i pacchetti
5359 ricevuti. Da usare con cautela, per evitare
5360 attacchi DOS indiretti.</td>
5367 <div class="section" id="tabella-filter">
5368 <h2><a class="toc-backref" href=
5369 "#id117">10.6 Tabella Filter</a></h2>
5371 <p>E' quella implicita e predefinita (-t filter) Riguarda
5372 le attivita' di filtraggio del traffico. Ha 3 catene di
5373 default: INPUT - Riguarda tutti i pacchetti destinati al
5374 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5375 i pacchetti che sono originati dal sistema e destinati ad
5376 uscire. FORWARD - Riguarda i pacchetti che attraversano il
5377 sistema, con IP sorgente e destinazione esterni.</p>
5379 <p>Esempio per permettere accesso alla porta 80 locale:
5380 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5381 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5384 <p>Esempio per permettere ad un pacchetto con IP sorgente
5385 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5386 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5390 <div class="section" id=
5391 "flush-automatico-per-macchine-remote">
5392 <h2><a class="toc-backref" href=
5393 "#id118">10.7 Flush automatico per
5394 macchine remote</a></h2>
5396 <p>Se state provando una configurazione del firewall per
5397 una macchina remota e' buona norma per evitare brutte
5398 figure attivare uno script che faccia il <em>flush</em>
5399 delle regole dopo qualche minuto. Potreste infatti
5400 inavvertitamente impostare una regola che vi impedisca di
5401 raggiungere la macchina remota, cosi' da non poter neanche
5402 eliminare quella regola e ripristinare la situazione
5405 <p><em>Veramente</em>, prima di lavorare sul firewall di
5406 una macchina remota impostate almeno un <tt class=
5407 "docutils literal">at now +5 min</tt> o con un'oretta di
5408 margine per fare il <em>flush</em> delle regole (su tutte
5410 <pre class="literal-block">
5412 at> /sbin/iptables -F
5417 <div class="section" id="gestione-regole-rules">
5418 <h2><a class="toc-backref" href=
5419 "#id119">10.8 Gestione regole
5422 <p>Il comando iptables viene usato per ogni attivita' di
5423 gestione e configurazione.</p>
5425 <p>Inserimento regole:</p>
5427 <dl class="docutils">
5428 <dt>iptables -A CATENA ...</dt>
5430 <dd>Aggiunge una regola alla fine della catena
5433 <dt>iptables -I CATENA [#] ...</dt>
5435 <dd>Inserisce alla riga # (default 1) una regola nella
5436 catena indicata</dd>
5438 <dt>iptables -N CATENA</dt>
5440 <dd>Crea una nuova catena custom</dd>
5442 <dt>iptables -P CATENA TARGET</dt>
5444 <dd>Imposta il target di default per la catena
5448 <p>Rimozione regole e azzeramenti:</p>
5450 <dl class="docutils">
5451 <dt>iptables -F [catena]</dt>
5453 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5455 <dt>iptables -X [catena]</dt>
5457 <dd>Ripulisce tutte le catene custom (o quella
5460 <dt>iptables -Z [catena]</dt>
5462 <dd>Azzera i contatori sulle catene</dd>
5464 <dt>iptables -D catena #</dt>
5466 <dd>Cancella la regola numero # dalla catena
5470 <p>Interrogazione:</p>
5472 <dl class="docutils">
5473 <dt>iptables -L</dt>
5475 <dd>Elenca le regole esistenti</dd>
5477 <dt>iptables -L -n -v</dt>
5479 <dd>Elenca, senza risolvere gli host, in modo verboso le
5480 regole esistenti</dd>
5484 <div class="section" id="salvataggio-regole">
5485 <h2><a class="toc-backref" href=
5486 "#id120">10.9 Salvataggio regole</a></h2>
5488 <p>Il comando <tt class="docutils literal">iptables</tt>
5489 serve per interagire con il framework <tt class=
5490 "docutils literal">Netfilter</tt> che gestisce il firewall
5491 di Linux al livello del kernel. Questo comporta, in modo
5492 analogo a quando avviene col comando <tt class=
5493 "docutils literal">ifconfig</tt>, che i cambiamenti
5494 impostati siano in <em>tempo reale, RAM</em>, non
5495 persistenti nel sistema: al boot successivo del sistema
5496 tutto tornera' alle impostazioni di base (in questo caso
5497 <em>nulle</em>, con policy di default settate su <tt class=
5498 "docutils literal">ACCEPT</tt> per tutto).</p>
5500 <p>Le varie invocazioni di iptables potrebbero essere
5501 richiamate da degli scripts dedicati, ma fortunatamente e'
5502 stata predisposta una apposita utility per gestire questi
5503 scripts in modo da avere a disposizione un <em>formato
5504 standard</em> per il salvataggio e il ripristino delle
5505 regole del firewall.</p>
5507 <p>Altro problema: decidere quando attivare / disattivare
5508 queste regole. Utilizzare i <em>runlevels</em> non e' una
5509 soluzione adeguata: le regole del firewall sono legate
5510 all'attivita' delle schede di rete (e un host con diverse
5511 schede di rete puo' attivarle a secondo delle esigenze di
5512 routing, partenza di servizi es file_sharing per un
5513 back-up...): il sistema operativo Debian permette di legare
5514 l'esecuzione di comandi alla attivazione di una device di
5515 rete (<tt class="docutils literal">up</tt>), dopo la sua
5516 attivazione (<tt class="docutils literal"><span class=
5517 "pre">post-up</span></tt>, utile per devices che richiedono
5518 un certo tempo per inizializzarsi: come un tunnel o una
5519 connessione punto a punto), prima della sua attivazione
5520 (<tt class="docutils literal"><span class=
5521 "pre">pre-up</span></tt>). Allo stesso modo sono
5522 disponibili eventi analoghi per accompagnare la
5523 disattivazione dei device di rete: si veda la pagina man di
5524 <tt class="docutils literal">interfaces</tt>.</p>
5526 <p>Nel nostro caso avremo per una possibile scheda
5527 <tt class="docutils literal">eth0</tt>:</p>
5530 "docutils literal">/etc/network/interfaces</tt></p>
5531 <pre class="literal-block">
5532 iface eth1 inet static
5533 up /sbin/iptables-restore /root/firewall/basic_fw
5534 # Seguono i soliti parametri della scheda di rete
5535 address 10.10.208.21
5538 <div class="section" id="iptables-save">
5539 <h3><a class="toc-backref" href=
5540 "#id121">10.9.1 Iptables-save</a></h3>
5542 <p>Per salvare le regole di iptables attualmente presenti
5543 nel kernel si usi il comando:</p>
5544 <pre class="literal-block">
5545 # iptables-save >> /root/firewall/basic_fw
5548 <p>Il contenuto del file dovrebbe essere
5549 <em>comprensibile</em>: sostanzialmente sono regole di
5550 iptables, senza il comando iptables ripetuto, suddivisi
5551 per le varie tabelle. Potete comunque correggere
5552 eventuali parametri con un edito di testo.</p>
5554 <p>Se non avete un'idea migliore potreste voler tenere
5555 gli script dei firewall in una cartella <tt class=
5556 "docutils literal">~/firewall</tt> nella home directory
5557 dell'utente <tt class="docutils literal">root</tt>.</p>
5560 <div class="section" id="iptables-restore">
5561 <h3><a class="toc-backref" href=
5562 "#id122">10.9.2 Iptables-restore</a></h3>
5564 <p>Per ripristinare un set di regole precedentemente
5565 salvate con <tt class="docutils literal"><span class=
5566 "pre">iptables-save</span></tt> si utilizzi <tt class=
5567 "docutils literal"><span class=
5568 "pre">iptables-restore</span></tt>. Se questo deve essere
5569 fatto in modalita' <em>non interattiva</em>, ad esempio
5570 deve essere eseguito dal demone che si occupa di
5571 inizializzare le schede di rete, oppure un <em>cron</em>
5572 o altro, e' buona norma richiamare i percorsi completi
5573 sia dei comandi che dei file:</p>
5574 <pre class="literal-block">
5575 /sbin/iptables-restore /root/firewall/basic_fw
5580 <div class="section" id="esempi">
5581 <h2><a class="toc-backref" href=
5582 "#id123">10.10 Esempi</a></h2>
5584 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5585 e' un computer con un paio di schede di rete fisiche una
5586 delle quali collegata alla rete internet l'altra a una rete
5587 privata per la LAN interna.</p>
5590 <ol class="arabic simple">
5591 <li><tt class="docutils literal">eth0</tt> scheda di
5592 rete principale sulla rete privata interna
5595 <li><tt class="docutils literal">eth1</tt> scheda di
5596 rete secondaria per la connessione ad internet</li>
5598 <li><tt class="docutils literal">ppp0</tt>
5599 punto-a-punto per una connessione ad internet</li>
5603 <div class="section" id="bloccare-i-ping-dall-esterno">
5604 <h3><a class="toc-backref" href=
5605 "#id124">10.10.1 Bloccare i ping
5606 dall'esterno</a></h3>
5608 <p>Spesso gli script che attaccano
5609 <em>automaticamente</em> le varie reti provano a fare un
5610 ping per verificare quali IP sono on-line: bloccare il
5611 traffico <tt class="docutils literal">ICMP</tt> in
5612 ingresso puo' aiutare ad evitare parte di questi
5614 <pre class="literal-block">
5615 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5619 <div class="section" id="masquerading-snat">
5620 <h3><a class="toc-backref" href=
5621 "#id125">10.10.2 Masquerading
5624 <dl class="docutils">
5625 <dt>Per attivare la network address translation (in
5626 questo caso un SNAT) per la rete locale privata
5627 sull'indirizzo ip del <em>modem</em>::</dt>
5629 <dd>iptables -t nat -A POSTROUTING -s
5630 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5633 <p>Il <em>Masquerading</em> a differenza dello
5634 <em>SNAT</em> puro (<tt class=
5635 "docutils literal"><span class="pre">-j</span> SNAT
5636 <span class="pre">--to-source</span> proprio_ip_pubblico
5637 ) legge l'indirizzo ip del device ``ppp0</tt>. In questo
5638 modo se l'IP cambia automaticamente si aggiorna anche il
5639 source natting. Se avete un indirizzo IP statico
5640 assegnato al vostro gateway potete invece usare lo SNAT
5643 <dl class="docutils">
5644 <dt>Altri esempi::</dt>
5647 <p class="first">## Change source addresses to
5648 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5649 SNAT --to 1.2.3.4</p>
5651 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5652 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5653 SNAT --to 1.2.3.4-1.2.3.6</p>
5655 <p class="last">## Change source addresses to
5656 1.2.3.4, ports 1-1023 # iptables -t nat -A
5657 POSTROUTING -p tcp -o eth0 -j SNAT --to
5663 <div class="section" id="brute-force">
5664 <h3><a class="toc-backref" href=
5665 "#id126">10.10.3 Brute force</a></h3>
5667 <p>Per limitare attacchi di tipo brute force su SSH:</p>
5668 <pre class="literal-block">
5669 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
5671 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5676 <div class="section" id="proc-filesystem">
5677 <h2><a class="toc-backref" href=
5678 "#id127">10.11 Proc filesystem</a></h2>
5680 <p>Tramite il filesystem virtuale <strong>proc</strong>
5681 possiamo monitorare talvolta anche modificarei, a seconda
5682 dei casi, alcuni parametri utili per il networking. La
5683 parte di proc che ci interessa si riconduce al percorso:
5684 <tt class="docutils literal">/proc/sys/net/ipv4</tt> :
5685 vediamo alcuni dei parametri fondamentali.</p>
5687 <div class="section" id="ip-forward">
5688 <h3><a class="toc-backref" href=
5689 "#id128">10.11.1 ip_forward</a></h3>
5691 <p>Questa variabile determine se l'instradamento dei
5692 pacchetti e' attvo, in caso positivo il kernel
5693 instradera' i pacchetti (routing). Con ip_forward settato
5694 a <tt class="docutils literal">0</tt> la nostra macchina
5695 continuera' a vedere le varie reti su cui eventualmente
5696 si trova (gateway) ma non instradera' i pacchetti da
5697 parte di altri host.</p>
5699 <p>Questo parametro determina tutti gli instradamenti che
5700 il nostro host puo' fare, quindi e' determinante anche
5701 per NAT, firewall, masquerading.</p>
5703 <p>E' possibile settarlo per le singole interfacce, ad
5704 esempio per eth0: <tt class=
5705 "docutils literal">/proc/sys/net/ipv4/conf/eth0/forwarding</tt>
5708 <p>Per approfondimenti su cosa si intenda per
5709 instradamento: rfc1812.txt sezione 2.3:</p>
5710 <pre class="literal-block">
5711 In the Internet model, constituent networks are connected together by
5712 IP datagram forwarders which are called routers or IP routers. In
5713 this document, every use of the term router is equivalent to IP
5714 router. Many older Internet documents refer to routers as gateways.
5716 A router connects to two or more logical interfaces, represented by
5717 IP subnets or unnumbered point to point lines (discussed in section
5718 [2.2.7]). Thus, it has at least one physical interface. Forwarding
5719 an IP datagram generally requires the router to choose the address
5720 and relevant interface of the next-hop router or (for the final hop)
5721 the destination host. This choice, called relaying or forwarding
5722 depends upon a route database within the router. The route database
5723 is also called a routing table or forwarding table. The term
5724 "router" derives from the process of building this route database;
5725 routing protocols and configuration interact in a process called
5728 Routers provide datagram transport only, and they seek to minimize
5729 the state information necessary to sustain this service in the
5730 interest of routing flexibility and robustness.
5734 <div class="section" id="ip-default-ttl">
5735 <h3><a class="toc-backref" href=
5736 "#id129">10.11.2 ip_default_ttl</a></h3>
5738 <p><em>Time to leave</em> di default usato dal nostro
5739 host: in genere <tt class="docutils literal">64</tt>.</p>
5742 <div class="section" id="ip-local-port-range">
5743 <h3><a class="toc-backref" href=
5744 "#id130">10.11.3 ip_local_port_range</a></h3>
5746 <p>Il range di porte usato dal nostro host quando si
5747 connette come client ad altri host. Puo' essere utile
5748 modificarlo per poi intercettare piu' facilmente i
5749 pacchetti provenienti da qusto host, oppupure quel
5750 qualunqe limitazione vogliamo imporre sul range da
5751 usarsi. Si ricorda che solo root puo' aprire porte sotto
5752 la <tt class="docutils literal">1024</tt>.</p>
5757 <div class="section" id="ftp-server">
5758 <h1><a class="toc-backref" href=
5759 "#id131">11 FTP Server</a></h1>
5761 <p>Il File Transfer Protocol (FTP) (protocollo di
5762 trasferimento file), è un Protocollo per la trasmissione di
5763 dati tra host basato su TCP, in genere usato dagli autori di
5764 pagine web per <em>pubblicare</em> queste nei propio spazi
5765 web. Storicamente veniva anche usato, mediate l'utilizzo di
5766 utenze anonime, come punto di scambio per materiali di vari
5767 utenti tra loro sconosciuti (una directory dei materiali
5768 scaricabili e una dedicata agli <em>uploads</em> degli
5769 utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
5770 mantiene la cosuetudine di renedere disponibile i materiali
5771 dei <em>mirrors</em> anche tramite FTP, probabilmente per
5772 garantire l'accesso ai client piu' datati che non possono
5773 utilizzare tecnologie piu' recenti.</p>
5775 <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
5776 per quanto riguarda il traffico ad esso associato che per il
5777 passaggio delle passwords degli utenti, facilmente sniffabili
5778 da chiunque abbia accesso alla rete. Naturalmente vsftp per
5779 quanto votato alla sicurezza non modifica queste
5780 caratteristiche del protocollo FTP (ma consente di usare
5781 OpenSSL per la autenticazione degli utenti).</p>
5783 <p>Se propio si deve mettere a disposizione un server FTP ai
5784 propi utenti si considerino le seguenti alternative:</p>
5787 <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
5789 <li>Spingere gli utenti ad usare SSL per autenticarsi al
5792 <li>Nel caso di webdesigners si consideri la possibilita'
5793 di offrire alternative come GIT, Subversion, Rsync o
5797 <p>Nel caso non si possa evitare il server FTP:</p>
5800 <li>Non dare agli utenti FTP una shell di sistema (
5801 Concedere come shell <tt class="docutils literal">ftp</tt>
5802 al posto di <tt class="docutils literal">bash</tt> in
5803 <tt class="docutils literal">/etc/passwd</tt>)</li>
5805 <li>Rendere il filesytem su cui scrive il demone FTP
5806 <tt class="docutils literal">noexec</tt> e <tt class=
5807 "docutils literal">nosuid</tt> (vedi dopo)</li>
5809 <li>Utilizzare un demone FTP come Vsftp: un server FTP con
5810 una forte inclinazione alla sicurezza: <em>Very Secure FTP
5814 <p>Per maggiori informazioni sulle scelte di design legate
5815 alla sicurezza del demone si veda: <a class=
5816 "reference external" href=
5817 "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
5819 <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
5822 <li>Virtual IP configurations</li>
5824 <li>Virtual users</li>
5826 <li>Standalone or inetd operation</li>
5828 <li>Powerful per-user configurability</li>
5830 <li>Bandwidth throttling</li>
5832 <li>Per-source-IP configurability</li>
5834 <li>Per-source-IP limits</li>
5838 <li>Encryption support through SSL integration</li>
5841 <div class="section" id="id8">
5842 <h2><a class="toc-backref" href=
5843 "#id132">11.1 Pacchetti</a></h2>
5845 <p>Per installare il demone vero e propio si usi il
5846 pacchetto <tt class="docutils literal">vsftpd</tt> , mentre
5847 per aver un client da cui fare qualche test sono
5851 <li><tt class="docutils literal">ftp</tt> (pacchetto da
5852 installare) e' il solito client a riga di comando</li>
5854 <li><tt class="docutils literal">gftp</tt> e' un client
5855 grafico simile al classico <em>WSftp</em></li>
5857 <li>Normalmente i file mananager com Konqueror possono
5858 lavarorare come client FTP</li>
5862 <div class="section" id="sessioni-ftp">
5863 <h2><a class="toc-backref" href=
5864 "#id133">11.2 Sessioni ftp</a></h2>
5866 <p>Vediamo alcuni dei comandi di base per gestire una
5867 sessione ftp a riga di comando:</p>
5869 <dl class="docutils">
5870 <dt>ftp nome_host</dt>
5872 <dd>stabilire la connessione all'host, poi verra' chiesta
5873 la password dell'utente. Se avete sbagliato utente: user
5878 <dd>Lista dei comandi disponibili.</dd>
5880 <dt>help [nome_comando]</dt>
5882 <dd>Cosa fa quel comando.</dd>
5886 <dd>Per caricare un file.</dd>
5890 <dd>Per scaricare un file.</dd>
5894 <dd>Lista dei file disponibili.</dd>
5898 <dd>Spostarsi in un altra directory.</dd>
5902 <dd>Cambio directory in LOCALE.</dd>
5906 <dd>Per lavorare su file multipli.</dd>
5911 <dl class="first last docutils">
5912 <dt>Per uscire dalla modalita' interattiva</dt>
5915 <dl class="first last docutils">
5916 <dt>(non vi chiede conferma di ogni singola
5919 <dd>su ogni singolo file...).</dd>
5927 <dd>Entra in modalita' trasferimento binario.</dd>
5931 <dd>Entra in modalita' trasferimento ascii.</dd>
5935 <dd>Per chiudere la sessione.</dd>
5939 <div class="section" id="configurazione-iniziale">
5940 <h2><a class="toc-backref" href=
5941 "#id134">11.3 Configurazione
5944 <p>Il demone di vsftpd e' immediatamente disponibile ma
5945 solo in modalita' anonima (si pensi a uno scenario in cui
5946 si vuole rendere disponibili dei files tramite FTP) e in
5947 <em>sola lettura</em>. Per accedere al servizio si usi
5948 quini come utente <tt class=
5949 "docutils literal">anonymous</tt> (la passwords in genere
5950 e' come consuetudine il propio indirizzo email), la cui
5951 <em>home</em> directory sara' <tt class=
5952 "docutils literal">/home/ftp/</tt> (<tt class=
5953 "docutils literal">/srv/ftp</tt> in Squeeze):</p>
5954 <pre class="literal-block">
5955 zoo:~# ftp localhost
5956 Connected to localhost.localdomain.
5958 Name (localhost:root): anonymous
5959 331 Please specify the password.
5961 230 Login successful.
5962 Remote system type is UNIX.
5963 Using binary mode to transfer files.
5965 200 PORT command successful. Consider using PASV.
5966 150 Here comes the directory listing.
5967 -rw-r--r-- 1 0 0 0 Feb 03 17:17 anoni
5968 226 Directory send OK.
5972 <div class="section" id="abilitare-gli-utenti-locali">
5973 <h2><a class="toc-backref" href=
5974 "#id135">11.4 Abilitare gli utenti
5977 <p>Per poter modificare le impostazioni iniziali, ad
5978 esempio per permettere l'accesso agli utenti del server, si
5979 modifichera' il file <tt class=
5980 "docutils literal">/etc/vsftpd.conf</tt>, a seguire le
5981 impostazioni fondamentali ed altre interessanti per rendere
5982 il server accessibile da utenti di sistema (autenticati
5983 tramite la loro password, quindi con PAM) per il tipico
5984 utilizzo di web designers che debbano pubblicare le loro
5985 pagine web (e non si siano fatti convincere a usare
5987 <pre class="literal-block">
5988 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
5990 # Disabilitiamo l'utente anonimo
5992 # Uncomment this to allow local users to log in.
5994 # Accesso garantito agli utenti di sistema
5996 # Uncomment this to enable any form of FTP write command.
5998 # Permettiamo agli utenti di caricare documenti nella loro home
6000 # You may fully customise the login banner string:
6001 ftpd_banner=Benvenuti al servizio ftp del sito example.com
6004 <p>Per abilitare i cambiamenti si proceda a riavviare il
6005 server: <tt class="docutils literal">/etc/init.d/vsftpd
6006 restart</tt> e si monitorizzi il file di log <tt class=
6007 "docutils literal">tail <span class="pre">-f</span>
6008 /var/log/vsftpd.log</tt> per controllarne il funzionamento
6009 (e anche <tt class="docutils literal">/var/log/syslog</tt>
6010 nel caso non si riuscisse a far partire correttamente il
6013 <p>NOTE: Se non riuscite ad ottenere un <em>directory
6014 listing</em> (<tt class="docutils literal">ls</tt>)
6015 ottenendo un errore <tt class="docutils literal">500
6016 Illegal PORT command? FTP error</tt> abilitare la modalita'
6017 passiva col comando ftp <tt class=
6018 "docutils literal">passive</tt>.</p>
6021 <div class="section" id="jail-chroot">
6022 <h2><a class="toc-backref" href=
6023 "#id136">11.5 Jail chroot</a></h2>
6025 <p>Si puo' impedire all'utente di spostarsi arbitrariamente
6026 per il file system del servere visualizzare il contenuto
6027 delle directory, ad esempio la cartella <tt class=
6028 "docutils literal">/etc</tt>, confinandolo in una jail
6029 chroot limitata alla sua home directory:</p>
6030 <pre class="literal-block">
6031 # You may restrict local users to their home directories. See the FAQ for
6032 # the possible risks in this before using chroot_local_user or
6033 # chroot_list_enable below.
6034 chroot_local_user=YES
6037 <p>Generalmente un utente di sistema con il solo accesso
6038 FTP non dovrebbe avere la possibilita' di poter navigare
6039 liberamente per il file system del server, esponendo file
6040 di configurazione e quant'altro l'utente potrebbe trarre
6041 utili informazioni sul quali software siano installati e di
6043 <pre class="literal-block">
6044 Remote system type is UNIX.
6045 Using binary mode to transfer files.
6049 550 Failed to change directory.
6053 <div class="section" id="permessi-sul-filesystem">
6054 <h2><a class="toc-backref" href=
6055 "#id137">11.6 Permessi sul
6058 <p>Come accennato precedentemente e' opportuno che i
6059 filesystems sui quali un utente puo' scrivere o modificare
6060 il contenuto non abbiano i privilegi di eseguibilita' e
6061 suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
6062 "docutils literal">/home/</tt> directory quindi avremo in
6063 <tt class="docutils literal">/etc/fstab</tt>:</p>
6064 <pre class="literal-block">
6065 /dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
6069 <div class="section" id="shell-dell-utente">
6070 <h2><a class="toc-backref" href=
6071 "#id138">11.7 Shell dell'utente</a></h2>
6073 <p>Come gia' detto piu' volte le passwords degli utenti
6074 viaaggiano in rete in chiaro, ponendo un grave problema di
6075 sicurezza. Sara' quindi opportuno disbilitare la shell di
6076 questi utenti, tramite il flag <tt class=
6077 "docutils literal"><span class="pre">--shell</span>
6078 /bin/false</tt> in fase di creazione degli utenti:</p>
6079 <pre class="literal-block">
6080 # adduser --shell /bin/false nome_utente
6083 <p>Oppure correggiendo manualmente il file <tt class=
6084 "docutils literal">/etc/passwd</tt> per modificare
6085 l'inpostazione della shell dell'utente:</p>
6086 <pre class="literal-block">
6087 nome_utente:x:1001:1001::/var/spool/postfix:/bin/bash
6088 # la riga sopra deve essere trasformata in
6089 nome_utente:x:1001:1001::/var/spool/postfix:/bin/false
6092 <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
6093 <tt class="docutils literal">/bin/false</tt> all'elenco
6094 delle shell valide.</p>
6096 <p><tt class="docutils literal">/etc/shells</tt></p>
6097 <pre class="literal-block">
6103 <div class="section" id="altre-opzioni">
6104 <h2><a class="toc-backref" href=
6105 "#id139">11.8 Altre opzioni</a></h2>
6107 <dl class="docutils">
6108 <dt>xferlog_enable=YES</dt>
6110 <dd>Verra' tenuto un file di log <tt class=
6111 "docutils literal">/var/log/vsftpd.log</tt> degli upload
6112 e download sul server.</dd>
6114 <dt>hide_ids=YES</dt>
6116 <dd>Nasconde le userid e groupid mascherandole con
6117 <tt class="docutils literal">ftp</tt> .</dd>
6119 <dt>anon_root=/home/ftp</dt>
6121 <dd>Home directory dell'utente anonimo.</dd>
6123 <dt>write_enable=YES</dt>
6125 <dd>Permette agli utenti di eseguire i comandi che
6126 possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
6127 MKD, RMD, APPE e SITE .</dd>
6129 <dt>idle_session_timeout=600</dt>
6131 <dd>Permette agli utenti di restare connessi piu' a
6132 lungo, utile per i webdesigners che passano intere
6133 giornate connessi al server.</dd>