1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
6 <meta name="generator" content=
7 "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org">
8 <meta http-equiv="Content-Type" content=
9 "text/html; charset=iso-8859-1">
10 <meta name="generator" content=
11 "Docutils 0.5: http://docutils.sourceforge.net/">
13 <title>Servizi di rete passo a passo</title>
14 <style type="text/css">
20 Copyright: This stylesheet has been placed in the public domain - free to edit and use for all uses.
24 font: 100% sans-serif;
33 background-color: #eeffcc;
36 border: 1px solid #ac9;
52 background-color: transparent;
56 text-decoration: none;
61 text-decoration: none;
62 background-color: transparent;
75 margin: 0.5em 0 1em 0;
83 background-color: transparent;
88 background-color: transparent;
92 text-decoration: none;
116 h1, h2, h3, h4, h5, h6 {
118 background-color: transparent;
125 margin-bottom: 0.5em;
126 border-bottom: 2px solid #aaa;
131 margin-bottom: 0.5em;
132 border-bottom: 1px solid #aaa;
137 margin-bottom: 0.5em;
143 margin-bottom: 0.5em;
149 margin-bottom: 0.5em;
155 margin-bottom: 0.5em;
163 margin-bottom: 1.5em;
166 div.admonition, div.note, div.tip, div.caution, div.important {
169 border-top: 1px solid #aaa;
170 border-left: 1px solid #aaa;
171 border-bottom: 2px solid #555;
172 border-right: 2px solid #555;
176 background: transparent url('../images/important.png') 10px 2px no-repeat;
180 background: transparent url('../images/caution.png') 10px 2px no-repeat;
184 background: transparent url('../images/note.png') 10px 2px no-repeat;
188 background: transparent url('../images/tip.png') 10px 2px no-repeat;
191 div.admonition-example {
192 background: transparent url('../images/tip.png') 10px 2px no-repeat;
195 div.admonition-critical-example {
196 background: transparent url('../images/important.png') 10px 2px no-repeat;
201 border-bottom: 1px solid #aaa;
207 border: 1px solid gray;
208 border-collapse: collapse;
213 table.docutils caption {
217 table.docutils td, table.docutils th {
218 padding: 0.25em 0.5em;
222 background-color: #dddddd;
230 border-top: 1px solid #aaa;
231 border-left: 1px solid #aaa;
232 border-bottom: 2px solid #555;
233 border-right: 2px solid #555;
239 border-bottom: 1px solid #aaa;
253 <div class="document" id="servizi-di-rete-passo-a-passo">
254 <h1 class="title">Servizi di rete passo a passo</h1>
256 <h2 class="subtitle" id=
257 "appunti-sulla-installazione-e-configurazione-dei-servizi-di-rete-in-ambiete-gnu-linx">
258 Appunti sulla installazione e configurazione dei servizi di
259 rete in ambiete Gnu/Linx</h2>
262 <table class="docutils field-list" frame="void" rules="none">
263 <col class="field-name">
264 <col class="field-body">
268 <th class="field-name">Author:</th>
270 <td class="field-body">Andrea Manni</td>
274 <th class="field-name">Copyright:</th>
276 <td class="field-body">GFDL</td>
280 <th class="field-name">Version:</th>
282 <td class="field-body">0.94</td>
288 <p>Questa guida tratta la configurazione di base dei principali
289 servizi di rete utilizzati con sistemi operativi <em>Unix</em>
290 e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
291 per amministratori di rete in ambiente <em>GNU/Linux</em>. In
292 particolare questa guida e' stata scritta usando come
293 riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
294 esempi presentati dovrebbero quindi essere direttamente
295 utilizzabili anche su distribuzioni derivate da Debian come
296 Ubuntu, per sistemi operativi diversi si presti attenzione ai
297 percorsi dei file citati.</p>
299 <div class="contents topic" id="indice-degli-argomenti">
300 <p class="topic-title first">Indice degli argomenti</p>
302 <ul class="auto-toc simple">
304 <a class="reference internal" href=
305 "#configurazione-sistema" id="id9" name=
306 "id9">1 Configurazione sistema</a>
308 <ul class="auto-toc">
309 <li><a class="reference internal" href=
310 "#solo-per-uso-interno" id="id10" name=
311 "id10">1.1 Solo per uso
315 <a class="reference internal" href="#rete" id="id11"
316 name="id11">1.2 Rete</a>
318 <ul class="auto-toc">
319 <li><a class="reference internal" href=
320 "#interfaces" id="id12" name=
321 "id12">1.2.1 interfaces</a></li>
325 <li><a class="reference internal" href=
326 "#bash-completion" id="id13" name=
327 "id13">1.3 Bash completion</a></li>
329 <li><a class="reference internal" href="#vim" id="id14"
330 name="id14">1.4 Vim</a></li>
332 <li><a class="reference internal" href="#vnc" id="id15"
333 name="id15">1.5 VNC</a></li>
335 <li><a class="reference internal" href=
336 "#lista-dei-pacchetti-di-base" id="id16" name=
337 "id16">1.6 Lista dei pacchetti di
341 <a class="reference internal" href=
342 "#apt-configurazione" id="id17" name=
343 "id17">1.7 Apt configurazione</a>
345 <ul class="auto-toc">
346 <li><a class="reference internal" href=
347 "#sources-list" id="id18" name=
348 "id18">1.7.1 sources.list</a></li>
350 <li><a class="reference internal" href=
351 "#etc-apt-apt-conf" id="id19" name=
352 "id19">1.7.2 /etc/apt/apt.conf</a></li>
359 <a class="reference internal" href="#squid" id="id20"
360 name="id20">2 Squid</a>
362 <ul class="auto-toc">
364 <a class="reference internal" href=
365 "#configurazione-squid-conf" id="id21" name=
366 "id21">2.1 Configurazione:
369 <ul class="auto-toc">
371 <a class="reference internal" href="#cache-dir"
373 "id22">2.1.1 Cache_dir</a>
375 <ul class="auto-toc">
376 <li><a class="reference internal" href=
377 "#opzioni-del-file-system" id="id23" name=
378 "id23">2.1.1.1 Opzioni del
383 <li><a class="reference internal" href=
384 "#configurazioni-di-cache-dir" id="id24" name=
385 "id24">2.1.2 Configurazioni di
388 <li><a class="reference internal" href=
389 "#tag-maximum-object-size" id="id25" name=
390 "id25">2.1.3 TAG:
391 maximum_object_size</a></li>
393 <li><a class="reference internal" href=
394 "#tag-cache-mem" id="id26" name=
395 "id26">2.1.4 TAG:
398 <li><a class="reference internal" href=
399 "#tag-minimum-object-size" id="id27" name=
400 "id27">2.1.5 TAG:
401 minimum_object_size</a></li>
406 <a class="reference internal" href=
407 "#negoziazione-degli-accesi-al-servizio" id="id28"
408 name="id28">2.2 Negoziazione degli
409 accesi al servizio</a>
411 <ul class="auto-toc">
412 <li><a class="reference internal" href=
413 "#acl-e-http-access" id="id29" name=
414 "id29">2.2.1 ACL e http
420 <a class="reference internal" href="#testare-squid"
421 id="id30" name="id30">2.3 Testare
424 <ul class="auto-toc">
425 <li><a class="reference internal" href=
426 "#client-wgetrc" id="id31" name=
427 "id31">2.3.1 Client:
430 <li><a class="reference internal" href=
431 "#server-access-log" id="id32" name=
432 "id32">2.3.2 Server:
439 <li><a class="reference internal" href="#tiny-proxy" id=
440 "id33" name="id33">3 Tiny proxy</a></li>
443 <a class="reference internal" href="#apache" id="id34"
444 name="id34">4 Apache</a>
446 <ul class="auto-toc">
447 <li><a class="reference internal" href=
448 "#pacchetti-da-installare" id="id35" name=
449 "id35">4.1 Pacchetti da
450 installare::</a></li>
452 <li><a class="reference internal" href=
453 "#configurazione-di-apache" id="id36" name=
454 "id36">4.2 Configurazione di
457 <li><a class="reference internal" href="#apache-conf"
459 "id37">4.3 apache.conf</a></li>
462 <a class="reference internal" href=
463 "#installazione-di-php" id="id38" name=
464 "id38">4.4 Installazione di PHP</a>
466 <ul class="auto-toc">
467 <li><a class="reference internal" href=
468 "#test-del-modulo-php" id="id39" name=
469 "id39">4.4.1 Test del modulo
472 <li><a class="reference internal" href=
473 "#installazione-del-supporto-per-mysql-a-php" id=
475 "id40">4.4.2 Installazione del
476 supporto per Mysql a PHP</a></li>
478 <li><a class="reference internal" href=
479 "#phpmyadmin" id="id41" name=
480 "id41">4.4.3 phpmyadmin</a></li>
482 <li><a class="reference internal" href=
483 "#installazione-del-supporto-per-postgresql-a-php"
485 "id42">4.4.4 Installazione del
486 supporto per Postgresql a PHP</a></li>
488 <li><a class="reference internal" href=
489 "#phppgadmin" id="id43" name=
490 "id43">4.4.5 phppgadmin</a></li>
495 <a class="reference internal" href="#virtual-hosts"
496 id="id44" name="id44">4.5 Virtual
499 <ul class="auto-toc">
500 <li><a class="reference internal" href=
501 "#gestione-dns" id="id45" name=
502 "id45">4.5.1 Gestione DNS</a></li>
504 <li><a class="reference internal" href=
505 "#eseguire-una-query-dns-con-dig" id="id46" name=
506 "id46">4.5.2 Eseguire una query
507 DNS con <tt class="docutils literal"><span class=
508 "pre">dig</span></tt>::</a></li>
510 <li><a class="reference internal" href="#id3" id=
511 "id47" name="id47">4.5.3 Virtual
517 <a class="reference internal" href=
518 "#negoziazione-accessi" id="id48" name=
519 "id48">4.6 Negoziazione accessi</a>
521 <ul class="auto-toc">
522 <li><a class="reference internal" href=
523 "#limiti-su-base-ip" id="id49" name=
524 "id49">4.6.1 Limiti su base
530 <a class="reference internal" href=
531 "#user-authentication" id="id50" name=
532 "id50">4.7 User Authentication</a>
534 <ul class="auto-toc">
535 <li><a class="reference internal" href=
536 "#definire-la-cartella" id="id51" name=
537 "id51">4.7.1 Definire la
540 <li><a class="reference internal" href=
541 "#creazione-del-database-delle-passwords" id="id52"
542 name="id52">4.7.2 Creazione del
543 database delle passwords</a></li>
545 <li><a class="reference internal" href="#id4" id=
547 "id53">4.7.3 Configurazione di
552 <li><a class="reference internal" href="#cavets" id=
553 "id54" name="id54">4.8 Cavets</a></li>
558 <a class="reference internal" href="#domain-name-system"
559 id="id55" name="id55">5 Domain Name
562 <ul class="auto-toc">
563 <li><a class="reference internal" href=
564 "#risoluzione-inversa" id="id56" name=
565 "id56">5.1 Risoluzione
568 <li><a class="reference internal" href=
569 "#nomi-di-dominio" id="id57" name=
570 "id57">5.2 Nomi di dominio</a></li>
572 <li><a class="reference internal" href=
573 "#tipologie-di-record" id="id58" name=
574 "id58">5.3 Tipologie di
577 <li><a class="reference internal" href="#utilizzo" id=
579 "id59">5.4 Utilizzo</a></li>
581 <li><a class="reference internal" href=
582 "#risoluzione-dei-nomi-di-dominio" id="id60" name=
583 "id60">5.5 Risoluzione dei nomi di
586 <li><a class="reference internal" href="#dig" id="id61"
587 name="id61">5.6 Dig</a></li>
589 <li><a class="reference internal" href="#resolv-conf"
591 "id62">5.7 resolv.conf</a></li>
593 <li><a class="reference internal" href="#etc-hosts" id=
595 "id63">5.8 /etc/hosts</a></li>
598 <a class="reference internal" href="#hostname" id=
599 "id64" name="id64">5.9 Hostname</a>
601 <ul class="auto-toc">
602 <li><a class="reference internal" href="#fqdn" id=
604 "id65">5.9.1 FQDN</a></li>
611 <a class="reference internal" href="#dnsmasq" id="id66"
612 name="id66">6 DNSmasq</a>
614 <ul class="auto-toc">
615 <li><a class="reference internal" href=
616 "#configurazione" id="id67" name=
617 "id67">6.1 Configurazione</a></li>
619 <li><a class="reference internal" href="#dhcp" id=
620 "id68" name="id68">6.2 DHCP</a></li>
622 <li><a class="reference internal" href="#dns-cache" id=
623 "id69" name="id69">6.3 DNS
629 <a class="reference internal" href=
630 "#bind-dns-autoritativo" id="id70" name=
631 "id70">7 Bind : DNS Autoritativo</a>
633 <ul class="auto-toc">
634 <li><a class="reference internal" href="#id5" id="id71"
635 name="id71">7.1 DNS cache</a></li>
638 <a class="reference internal" href=
639 "#ospitare-una-zona" id="id72" name=
640 "id72">7.2 Ospitare una zona</a>
642 <ul class="auto-toc">
643 <li><a class="reference internal" href=
644 "#named-conf-local" id="id73" name=
645 "id73">7.2.1 named.conf.local</a></li>
648 <a class="reference internal" href=
649 "#configurazione-della-zona" id="id74" name=
650 "id74">7.2.2 Configurazione
653 <ul class="auto-toc">
654 <li><a class="reference internal" href=
655 "#soa-start-of-authority-record" id="id75"
656 name="id75">7.2.2.1 SOA: Start
657 of Authority Record</a></li>
659 <li><a class="reference internal" href=
660 "#altri-campi" id="id76" name=
661 "id76">7.2.2.2 Altri
668 <li><a class="reference internal" href="#dns-slave" id=
669 "id77" name="id77">7.3 DNS
673 <a class="reference internal" href=
674 "#aggiornamento-dinamico-nsupdate" id="id78" name=
675 "id78">7.4 Aggiornamento dinamico:
678 <ul class="auto-toc">
679 <li><a class="reference internal" href=
680 "#configurazione-client-nsupdate" id="id79" name=
681 "id79">7.4.1 Configurazione client
684 <li><a class="reference internal" href=
685 "#configurazione-server-riconoscimento-chiave" id=
687 "id80">7.4.2 Configurazione
688 server: riconoscimento chiave</a></li>
690 <li><a class="reference internal" href=
691 "#server-gestione-dell-intera-zona" id="id81" name=
692 "id81">7.4.3 Server: gestione
693 dell'intera zona</a></li>
695 <li><a class="reference internal" href=
696 "#automatizzare-l-aggiornamento-dinamico" id="id82"
697 name="id82">7.4.4 Automatizzare
698 l'aggiornamento dinamico</a></li>
702 <li><a class="reference internal" href=
703 "#link-suggeriti" id="id83" name=
704 "id83">7.5 Link suggeriti:</a></li>
709 <a class="reference internal" href="#samba" id="id84"
710 name="id84">8 Samba</a>
712 <ul class="auto-toc">
713 <li><a class="reference internal" href="#pacchetti" id=
715 "id85">8.1 Pacchetti</a></li>
717 <li><a class="reference internal" href=
718 "#passwords-e-autenticazione" id="id86" name=
719 "id86">8.2 Passwords e
720 autenticazione</a></li>
722 <li><a class="reference internal" href=
723 "#creazione-utenti" id="id87" name=
724 "id87">8.3 Creazione Utenti</a></li>
727 <a class="reference internal" href=
728 "#creare-la-condivisione" id="id88" name=
729 "id88">8.4 Creare la
732 <ul class="auto-toc">
733 <li><a class="reference internal" href=
734 "#sicurezza-permessi-di-esecuzione-sul-server" id=
736 "id89">8.4.1 Sicurezza: permessi
737 di esecuzione sul server</a></li>
742 <a class="reference internal" href=
743 "#configurazione-dell-applicativo-samba-vero-e-proprio"
745 "id90">8.5 Configurazione
746 dell'applicativo Samba vero e proprio.</a>
748 <ul class="auto-toc">
749 <li><a class="reference internal" href=
750 "#creazione-di-un-gruppo" id="id91" name=
751 "id91">8.5.1 Creazione di un
756 <li><a class="reference internal" href=
757 "#testare-il-servizio" id="id92" name=
758 "id92">8.6 Testare il
764 <a class="reference internal" href=
765 "#server-di-posta-postfix" id="id93" name=
766 "id93">9 Server di posta: Postfix</a>
768 <ul class="auto-toc">
770 <a class="reference internal" href=
771 "#test-del-server-smtp" id="id94" name=
772 "id94">9.1 Test del server smtp</a>
774 <ul class="auto-toc">
775 <li><a class="reference internal" href="#swaks" id=
777 "id95">9.1.1 Swaks</a></li>
781 <li><a class="reference internal" href="#imap-e-pop"
782 id="id96" name="id96">9.2 Imap e
786 <a class="reference internal" href=
787 "#client-a-riga-di-comando" id="id97" name=
788 "id97">9.3 Client a riga di
791 <ul class="auto-toc">
792 <li><a class="reference internal" href="#mailx" id=
794 "id98">9.3.1 mailx</a></li>
796 <li><a class="reference internal" href="#mutt" id=
798 "id99">9.3.2 Mutt</a></li>
800 <li><a class="reference internal" href=
801 "#web-client" id="id100" name=
802 "id100">9.3.3 Web client</a></li>
807 <a class="reference internal" href="#graylisting" id=
809 "id101">9.4 Graylisting</a>
811 <ul class="auto-toc">
812 <li><a class="reference internal" href=
813 "#abilitazione-in-postfix" id="id102" name=
814 "id102">9.4.1 Abilitazione in
817 <li><a class="reference internal" href="#test" id=
819 "id103">9.4.2 Test</a></li>
821 <li><a class="reference internal" href=
822 "#statistiche" id="id104" name=
823 "id104">9.4.3 Statistiche</a></li>
830 <a class="reference internal" href="#firewall" id="id105"
831 name="id105">10 Firewall</a>
833 <ul class="auto-toc">
834 <li><a class="reference internal" href="#links" id=
836 "id106">10.1 Links</a></li>
838 <li><a class="reference internal" href="#ipfilter" id=
840 "id107">10.2 Ipfilter</a></li>
843 <a class="reference internal" href=
844 "#progettazione-di-un-firewall" id="id108" name=
845 "id108">10.3 Progettazione di un
848 <ul class="auto-toc">
849 <li><a class="reference internal" href=
850 "#collocazione" id="id109" name=
851 "id109">10.3.1 Collocazione</a></li>
853 <li><a class="reference internal" href=
854 "#policy-di-default" id="id110" name=
855 "id110">10.3.2 Policy di
858 <li><a class="reference internal" href="#hardware"
860 "id111">10.3.3 Hardware</a></li>
864 <li><a class="reference internal" href=
865 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
866 "id112" name="id112">10.4 Percorso dei
867 pacchetti tra tabelle e catene</a></li>
870 <a class="reference internal" href=
871 "#concetti-di-base" id="id113" name=
872 "id113">10.5 Concetti di base</a>
874 <ul class="auto-toc">
875 <li><a class="reference internal" href=
876 "#tabelle-catene-regole" id="id114" name=
877 "id114">10.5.1 Tabelle, catene,
880 <li><a class="reference internal" href="#match" id=
882 "id115">10.5.2 Match</a></li>
884 <li><a class="reference internal" href="#targets"
886 "id116">10.5.3 Targets</a></li>
890 <li><a class="reference internal" href=
891 "#tabella-filter" id="id117" name=
892 "id117">10.6 Tabella Filter</a></li>
894 <li><a class="reference internal" href=
895 "#flush-automatico-per-macchine-remote" id="id118"
896 name="id118">10.7 Flush automatico per
897 macchine remote</a></li>
899 <li><a class="reference internal" href=
900 "#gestione-regole-rules" id="id119" name=
901 "id119">10.8 Gestione regole
905 <a class="reference internal" href=
906 "#salvataggio-regole" id="id120" name=
907 "id120">10.9 Salvataggio regole</a>
909 <ul class="auto-toc">
910 <li><a class="reference internal" href=
911 "#iptables-save" id="id121" name=
912 "id121">10.9.1 Iptables-save</a></li>
914 <li><a class="reference internal" href=
915 "#iptables-restore" id="id122" name=
916 "id122">10.9.2 Iptables-restore</a></li>
921 <a class="reference internal" href="#esempi" id=
923 "id123">10.10 Esempi</a>
925 <ul class="auto-toc">
926 <li><a class="reference internal" href=
927 "#bloccare-i-ping-dall-esterno" id="id124" name=
928 "id124">10.10.1 Bloccare i ping
929 dall'esterno</a></li>
931 <li><a class="reference internal" href=
932 "#masquerading-snat" id="id125" name=
933 "id125">10.10.2 Masquerading
936 <li><a class="reference internal" href=
937 "#brute-force" id="id126" name=
938 "id126">10.10.3 Brute
946 <a class="reference internal" href="#ftp-server" id=
947 "id127" name="id127">11 FTP Server</a>
949 <ul class="auto-toc">
950 <li><a class="reference internal" href="#id8" id=
952 "id128">11.1 Pacchetti</a></li>
954 <li><a class="reference internal" href="#sessioni-ftp"
955 id="id129" name="id129">11.2 Sessioni
958 <li><a class="reference internal" href=
959 "#configurazione-iniziale" id="id130" name=
960 "id130">11.3 Configurazione
963 <li><a class="reference internal" href=
964 "#abilitare-gli-utenti-locali" id="id131" name=
965 "id131">11.4 Abilitare gli utenti
968 <li><a class="reference internal" href="#jail-chroot"
969 id="id132" name="id132">11.5 Jail
972 <li><a class="reference internal" href=
973 "#permessi-sul-filesystem" id="id133" name=
974 "id133">11.6 Permessi sul
977 <li><a class="reference internal" href=
978 "#shell-dell-utente" id="id134" name=
979 "id134">11.7 Shell
982 <li><a class="reference internal" href="#altre-opzioni"
983 id="id135" name="id135">11.8 Altre
990 <p>Generato il 2010-02-09 con: <a class="reference external"
992 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
994 <div class="section" id="configurazione-sistema">
995 <h1><a class="toc-backref" href=
996 "#id9">1 Configurazione sistema</a></h1>
998 <div class="section" id="solo-per-uso-interno">
999 <h2><a class="toc-backref" href=
1000 "#id10">1.1 Solo per uso interno</a></h2>
1002 <p>Impostazioni di base per la configurazione del sistema
1003 operativo e della rete nel laboratorio 208 facente parte
1004 della rete piffa.net .</p>
1006 <p>Sono qui riportati i parametri della rete locale per
1007 comodita' degli studenti, gli altri lettori possono
1008 considerarli come riferimento per comprendere i valori
1009 espressi nei vari file di configurazione. Ad esempio:
1010 quando leggerete <tt class="docutils literal"><span class=
1011 "pre">10.10.208.248:3128</span></tt> saprete che si tratta
1012 del nostro <em>proxy http</em> in ascolto sulla porta
1013 <cite>3128</cite>, stara' quindi a voi sostituire i dati
1014 con gli equivalenti <em>IP</em> della vostra rete.</p>
1017 <div class="section" id="rete">
1018 <h2><a class="toc-backref" href=
1019 "#id11">1.2 Rete</a></h2>
1021 <p>Parametri della rete attualmente in uso:</p>
1023 <table border="1" class="docutils">
1029 <tbody valign="top">
1031 <td colspan="2">Parametri della rete</td>
1037 <td>10.10.208.0/24</td>
1043 <td>255.255.255.0</td>
1049 <td>10.10.208.255</td>
1055 <td>10.10.208.248</td>
1061 <td>10.10.208.248</td>
1066 <p>Dal server locale degli studeti,
1067 <strong>Bender</strong>, corrispondente all'IP <tt class=
1068 "docutils literal"><span class=
1069 "pre">10.10.208.248</span></tt>, vengono erogati i servizi
1070 DHCP, DNS, gateway (con NAT), proxy http e mirror della
1071 distribuzione Debian ( <a class="reference external" href=
1072 "http://debian.piffa.net">http://debian.piffa.net</a>).
1073 Altri servizi in esecuzione sul server:</p>
1076 <li>Rsync server e altri software di aggiornamento /
1077 installazione di massa</li>
1079 <li>Server imap / pop3 / webmail / smtp</li>
1081 <li>Server ssh per i test degli studenti</li>
1083 <li>File server Samba, NFS e controller di qualsiasi
1084 altro FS distribuito</li>
1086 <li>Print server per la gestione delle stampanti</li>
1090 <li>Mirror locale delle *.iso dei sistemi operativi e dei
1091 vari software usati durante le lezioni</li>
1093 <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
1094 framework vengono attivati a seconda dei corsi
1098 <p>Durante il corso delle lezioni e' opportuno che le
1099 macchine degli studenti si appoggino al server Bender
1100 (ottetto finale <tt class="docutils literal"><span class=
1101 "pre">248</span></tt>), nel caso questo non fosse
1102 raggiungibile (ad esempio per permettere impostazioni di
1103 DHCP / routing diverse) sara' comunque disponibile il
1104 <tt class="docutils literal"><span class=
1105 "pre">10.10.208.254</span></tt> come gateway | DNS per la
1106 rete <tt class="docutils literal"><span class=
1107 "pre">10.10.208.10</span></tt>.</p>
1109 <p><strong>Non e' piu' possibile</strong> raggiungere
1110 Bender tramite l'IP pubblico <tt class=
1111 "docutils literal"><span class=
1112 "pre">212.22.136.248</span></tt> o <em>qualsiasi altro
1113 ip</em> della classe <tt class=
1114 "docutils literal"><span class="pre">C</span> <span class=
1115 "pre">212.22.136.0/24</span></tt> precedentemente
1118 <p>Il computer del docente con il server VNC e' sempre
1119 configurato con l'ottetto finale: <tt class=
1120 "docutils literal"><span class="pre">177</span></tt> della
1121 rete utilizzata durante le lezioni (quindi generalmente la
1122 VNC sara' disponibile sul <tt class=
1123 "docutils literal"><span class=
1124 "pre">10.10.208.177:1</span></tt>.</p>
1126 <p>Gli studenti sono pregati di non impedire l'accesso SSH
1127 alla propria macchina dal computer del docente, e non
1128 modificare la password dell'utente <tt class=
1129 "docutils literal"><span class="pre">root</span></tt> del
1130 sistema operativo <em>pre-istallato</em> (ad es:
1131 <em>Diurno</em>).</p>
1133 <div class="section" id="interfaces">
1134 <h3><a class="toc-backref" href=
1135 "#id12">1.2.1 interfaces</a></h3>
1137 <p>Segue un esempio del file di configurazione della
1138 scheda di rete con configurazione statica:</p>
1140 <p>/etc/network/interfaces:</p>
1141 <pre class="literal-block">
1142 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
1144 # The loopback interface
1145 iface lo inet loopback
1147 # La prima scheda di rete (se si chiama eth0)
1148 iface etho inet static
1150 # iface etho inet dhcp
1151 address 10.10.208.101
1152 netmask 255.255.255.0
1154 broadcast 10.10.208.255
1155 gateway 10.10.208.254
1157 # Quali interfaccie devono partire automaticamente:
1161 <p>Controllare il nome della propria scheda di rete: a
1162 volte <em>udev</em> rinomina la prima scheda a <tt class=
1163 "docutils literal"><span class="pre">eth1</span></tt>,
1164 oppure potreste avere piu' di una scheda di rete (anche
1165 un'interfaccia <em>firewire</em> puo' essere
1166 automaticamente abilitata come scheda di rete).</p>
1168 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
1169 , eth0:1 , ...) ricordarsi che queste dipendono dalla
1170 scheda fisica a cui sono associate: abbattere con
1171 <tt class="docutils literal"><span class=
1172 "pre">ifconfig</span> <span class="pre">down</span>
1173 <span class="pre">eth0</span></tt> la scheda principale
1174 fara' cadere anche queste. Tornando ad attivare la scada
1175 principale con <tt class="docutils literal"><span class=
1176 "pre">ifconfig</span> <span class="pre">eth0</span>
1177 <span class="pre">up</span></tt> la virtuale tornera'
1178 attiva: nel caso voleste disabilitarla dovrete quindi
1179 sempre abbattere manualmente la scheda virtuale
1180 <em>prima</em> della scheda reale.</p>
1182 <p>I DNS vanno indicati nel file <tt class=
1183 "docutils literal"><span class=
1184 "pre">/etc/resolv.conf</span></tt> , la cui sintassi e'
1185 spiegata al punto 4.6 . Come DNS si <em>deve</em> usare
1186 il server Bender, alcuni parametri dei software di
1187 installazione, risoluzione dei mirror, vengono
1188 opportunamente modificatia da questo DNS.</p>
1192 <div class="section" id="bash-completion">
1193 <h2><a class="toc-backref" href=
1194 "#id13">1.3 Bash completion</a></h2>
1196 <p>Il completamento automatico della shell (che si attiva
1197 premendo il tasto tab una o due volte mentre si sta
1198 scrivendo un termine) permette di comporre automaticamente
1199 i nomi dei comandi e i percorsi dei file, sopratutto la
1200 composizione automatica dei percorsi dei file e' di grande
1203 <p>Bash_completion permette di integrare il completamento
1204 automatico con i nomi dei pacchetti e oggetti dei comandi:
1205 ad es. volendo digitare <tt class=
1206 "docutils literal"><span class="pre">apt-get</span>
1207 <span class="pre">inst[TAB]</span> <span class=
1208 "pre">xtigh[TAB]</span></tt> ora verra' completato
1209 automaticamente sia la parola <tt class=
1210 "docutils literal"><span class="pre">install</span></tt>
1211 che il nome del pacchetto <tt class=
1212 "docutils literal"><span class=
1213 "pre">xtightvncviewer</span></tt>.</p>
1215 <p>Abilitare /etc/bash_completion nel file <tt class=
1216 "docutils literal"><span class=
1217 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
1218 proprio <tt class="docutils literal"><span class=
1219 "pre">~/.bashrc</span></tt> (che sarebbe il file
1220 <em>nascosto</em>, quindi con un punto all'inizio del nome
1221 del file, di configurazione della shell bash per ogni
1222 utente, presente nella propria <em>home
1223 directory</em>):</p>
1224 <pre class="literal-block">
1225 echo ". /etc/bash_completion" >> ~/.bashrc
1228 <p>Esempio di ~/.bahsrc</p>
1229 <pre class="literal-block">
1230 # ~/.bashrc: executed by bash(1) for non-login shells.
1232 export PS1='\h:\w\$ '
1235 # De-commentare le seguenti righe per abilitare la colorazione dei
1237 export LS_OPTIONS='--color=auto'
1239 alias ls='ls $LS_OPTIONS'
1240 alias ll='ls $LS_OPTIONS -l'
1241 alias l='ls $LS_OPTIONS -lA'
1243 # Abilitare i seguenti alias per impostare la conferma per cancellare file
1248 # questo abilita bash completion
1249 . /etc/bash_completion
1252 <p>Il file <tt class="docutils literal"><span class=
1253 "pre">/etc/bash_completion</span></tt> deve essere presente
1254 nel sistema, in caso contrario installare il pacchetto:
1255 <tt class="docutils literal"><span class=
1256 "pre">bash-completion</span></tt>. Generalmente l'utente
1257 <tt class="docutils literal"><span class=
1258 "pre">root</span></tt> ha un file <tt class=
1259 "docutils literal"><span class="pre">.bashrc</span></tt>
1260 preimpostato analogo a quello citato sopra, a differenza
1261 dei normali utenti di sistema.</p>
1266 <li><a class="reference external" href=
1267 "http://www.debian-administration.org/articles/316">An
1268 introduction to bash completion</a></li>
1270 <li><a class="reference external" href=
1271 "http://www.caliban.org/bash/">Working more productively
1272 with bash 2.x/3.x</a></li>
1274 <li>UNIX / Linux Shell Scripting Tutorial: <a class=
1275 "reference external" href=
1276 "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
1280 <div class="section" id="vim">
1281 <h2><a class="toc-backref" href=
1282 "#id14">1.4 Vim</a></h2>
1284 <p>Vim e' l'editor di testo preferito dai sistemisti,
1285 quindi sara' conveniente impostare fin da subito alcune
1286 impostazioni per renderlo piu' comodo.</p>
1288 <p>Assicurarsi che sia installata nel sistema la versione
1289 completa dell'editor installando il pacchetto <tt class=
1290 "docutils literal"><span class="pre">vim</span></tt>:</p>
1291 <pre class="literal-block">
1292 # apt-get install vim
1295 <p>Modificare poi il file di configurazione generale
1296 <tt class="docutils literal"><span class=
1297 "pre">/etc/vim/vimrc</span></tt></p>
1298 <pre class="literal-block">
1299 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1300 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1301 " you can find below. If you wish to change any of those settings, you should
1302 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1303 " everytime an upgrade of the vim packages is performed. It is recommended to
1304 " make changes after sourcing debian.vim since it alters the value of the
1305 " 'compatible' option.
1307 " This line should not be removed as it ensures that various options are
1308 " properly set to work with the Vim-related packages available in Debian.
1311 " Uncomment the next line to make Vim more Vi-compatible
1312 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1313 " options, so any other options should be set AFTER setting 'compatible'.
1316 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1317 " line enables syntax highlighting by default.
1320 " If using a dark background within the editing area and syntax highlighting
1321 " turn on this option as well.
1324 " Uncomment the following to have Vim jump to the last position when
1328 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1329 \| exe "normal! g'\"" | endif
1332 " Uncomment the following to have Vim load indentation rules and plugins
1333 " according to the detected filetype.
1334 " This is not recommanded if you often copy and paste into vim,
1335 " as it messes all the indentation.
1337 filetype plugin indent on
1340 " This goes for comments folding: use co to expnad and zc to compress,
1341 " zi to toggle on/off
1343 set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
1345 " The following are commented out as they cause vim to behave a lot
1346 " differently from regular Vi. They are highly recommended though.
1347 set showcmd " Show (partial) command in status line.
1348 "set showmatch " Show matching brackets.
1349 # Ignorecase is quite userfull
1350 set ignorecase " Do case insensitive matching
1351 "set smartcase " Do smart case matching
1352 "set incsearch " Incremental search
1353 set autowrite " Automatically save before commands like :next and :make
1354 "set hidden " Hide buffers when they are abandoned
1355 "set mouse=a " Enable mouse usage (all modes) in terminals
1357 " Source a global configuration file if available
1358 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1359 if filereadable("/etc/vim/vimrc.local")
1360 source /etc/vim/vimrc.local
1364 <p>I principianti faranno bene ad esercitarsi con
1365 <tt class="docutils literal"><span class=
1366 "pre">vimtutor</span> <span class="pre">it</span></tt>.</p>
1368 <p>Altri link per VIM:</p>
1371 <li>Vim Introduction and Tutorial: <a class=
1372 "reference external" href=
1373 "http://blog.interlinked.org/tutorials/vim_tutorial.html">
1374 http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
1376 <li><a class="reference external" href=
1377 "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
1379 <li><a class="reference external" href=
1380 "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
1384 <div class="section" id="vnc">
1385 <h2><a class="toc-backref" href=
1386 "#id15">1.5 VNC</a></h2>
1388 <p>I Virtual Network Computing (o VNC) sono software di
1389 controllo remoto e servono per amministrare un computer a
1390 distanzai. Nel nostro caso la VNC sara' utilizzata per
1391 visualizzare la sessione di lavoro di un altro computer sul
1392 proprio a scopo didattico.</p>
1394 <p>Per collegarvi al server del docente usate lo script
1395 <tt class="docutils literal"><span class=
1396 "pre">guarda.sh</span></tt> che dovrebbe gia essere
1397 disponibili sui sistemi preconfigurati, oppure potete
1398 invocare direttamente il collegamento con:</p>
1399 <pre class="literal-block">
1400 xtightvncviewer -viewonly 10.10.208.177:1
1403 <p>Se il comando non fosse disponibile installate il
1404 pacchetto <tt class="docutils literal"><span class=
1405 "pre">xtightvncviewer</span></tt>. Potete anche scaricare
1406 lo script <tt class="docutils literal"><span class=
1407 "pre">guarda.sh</span></tt> e renderlo eseguibile, ed
1408 eventualmente creare una voce nel menu di KDE per
1412 <pre class="literal-block">
1415 wget http://bender/guarda.sh
1420 <p>Per eseguire lo script digitare semplicemente <tt class=
1421 "docutils literal"><span class="pre">guarda.sh</span></tt>,
1422 oppure creare un link / collegamento sul Desktop allo
1423 script <tt class="docutils literal"><span class=
1424 "pre">/usr/local/bin/guarda.sh</span></tt>.</p>
1426 <p>Le impostazioni del server VNC sono:</p>
1428 <table border="1" class="docutils">
1434 <thead valign="bottom">
1436 <th class="head">Parametro</th>
1438 <th class="head">Valore</th>
1442 <tbody valign="top">
1446 <td>10.10.208.177:1</td>
1450 <td>Server grafico</td>
1463 <p>Si noti che non e' possibile lanciare un applicativo sul
1464 server grafico di un utente da una shell in cui si sta
1465 lavorando come altro utente, anche se root. E' quindi
1466 necessario essere l'utente di sistema che si e' loggato
1467 inizialmente nella sessione grafica per poter lanciare lo
1468 script guarda.sh da una shell.</p>
1470 <p>Controllare con <tt class=
1471 "docutils literal"><span class="pre">whoami</span></tt> di
1472 essere l'utente normale (es <tt class=
1473 "docutils literal"><span class="pre">utente</span>
1474 <span class="pre">|</span> <span class=
1475 "pre">studente</span> <span class="pre">|</span>
1476 <span class="pre">proprio</span> <span class=
1477 "pre">nome</span></tt> ), in caso si sia assunta una altra
1478 <tt class="docutils literal"><span class=
1479 "pre">id</span></tt> si apra un altra shell o si esca da
1480 quella attuale con <tt class=
1481 "docutils literal"><span class="pre">exit</span></tt> .</p>
1484 <div class="section" id="lista-dei-pacchetti-di-base">
1485 <h2><a class="toc-backref" href=
1486 "#id16">1.6 Lista dei pacchetti di
1489 <p>I pacchetti installati generalmente <a class=
1490 "footnote-reference" href="#id2" id="id1" name=
1491 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1492 <pre class="literal-block">
1493 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1496 <table class="docutils footnote" frame="void" id="id2"
1503 <tbody valign="top">
1505 <td class="label"><a class="fn-backref" href=
1508 <td><tt class="docutils literal"><span class=
1509 "pre">kde-core</span></tt> e' piu' leggero del
1510 pacchetto <tt class="docutils literal"><span class=
1511 "pre">kde</span></tt>. Esiste un equivalente
1512 <tt class="docutils literal"><span class=
1513 "pre">gnome-core</span></tt> per chi preferisce
1514 Gnome, nel caso si potrebbe installare il log-in
1515 manager <cite>gdm</cite> al posto di
1516 <cite>kdm</cite>.</td>
1522 <div class="section" id="apt-configurazione">
1523 <h2><a class="toc-backref" href=
1524 "#id17">1.7 Apt configurazione</a></h2>
1526 <p>Vediamo i due file principali di apt:</p>
1529 <li><tt class="docutils literal"><span class=
1530 "pre">/etc/apt/sources.list</span></tt></li>
1532 <li><tt class="docutils literal"><span class=
1533 "pre">/etc/apt/apt.conf</span></tt></li>
1536 <div class="section" id="sources-list">
1537 <h3><a class="toc-backref" href=
1538 "#id18">1.7.1 sources.list</a></h3>
1540 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1541 preleva i pacchetti da installare tramite <em>dpkg</em>,
1542 vengono quindi precisati i metodi (ad es. http / ftp /
1543 cdrom / file), la release che si vuole tracciare (es
1544 <tt class="docutils literal"><span class=
1545 "pre">stable,</span> <span class="pre">testing,</span>
1546 <span class="pre">unstable</span></tt> oppure i
1547 corrispondenti release name es: <tt class=
1548 "docutils literal"><span class="pre">Lenny,</span>
1549 <span class="pre">Squeeze,</span> <span class=
1550 "pre">Sid</span></tt>), i rami di interesse (es:
1551 <tt class="docutils literal"><span class=
1552 "pre">main</span></tt> che e' l'archivio principale,
1553 <tt class="docutils literal"><span class=
1554 "pre">non-free</span></tt> per il software non libero,
1555 <tt class="docutils literal"><span class=
1556 "pre">contrib</span></tt> per i pacchetti non realizzati
1557 dai manutentori ufficiali).</p>
1559 <p>Gli archivi sono generalmente:</p>
1562 <li><tt class="docutils literal"><span class=
1563 "pre">deb</span></tt> per pacchetti Debian binari,
1564 pronti per l'installazione.</li>
1566 <li><tt class="docutils literal"><span class=
1567 "pre">deb-src</span></tt> per i pacchetti sorgenti
1568 (quindi da compilare, come il kernel) degli stessi
1569 pacchetti binari. In genere se non compilate spesso
1570 potete evitare di tracciare i sorgenti per risparmiare
1574 <p><tt class="docutils literal"><span class=
1575 "pre">/etc/apt/sources.list</span></tt></p>
1576 <pre class="literal-block">
1577 # esempio di accesso a un CDROM:
1578 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1580 # ftp.it.debian.org viene rediretto su un mirror interno
1581 # quando vi trovate nella rete interna piffa.net
1582 deb http://ftp.it.debian.org/debian/ lenny main
1583 # Sono disponibili anche i rami non-free contrib
1584 # deb http://ftp.it.debian.org/debian/ lenny non-free contrib
1585 # Sono disponibili anche le release unstable e testing
1586 # deb http://ftp.it.debian.org/debian/ testing main non-free contrib
1587 # deb http://ftp.it.debian.org/debian/ sid main non-free contrib
1589 # Sorgenti dei pacchetti:
1590 # deb-src http://ftp.bononia.it/debian/ lenny main
1592 # Mirror da kernel.org europa da usare a casa:
1593 deb http://mirrors.eu.kernel.org/debian/ lenny main
1595 # Security dal sito principale
1596 deb http://security.debian.org/ lenny/updates main
1597 # deb-src http://security.debian.org/ lenny/updates main
1599 # Debian volatile per i pacchetti soggetti a frequanti cambiamenti
1600 # non legati a dinamiche di sicurezza
1601 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1602 # deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1604 # Esempio di accesso a un file system locale contenente i pacchetti:
1605 # Potete scaricarei in aula con debmirror da debian.piffa.net
1606 # un mirror locale da usare poi a casa anche senza internet
1607 # deb file:/mnt/mirror sid main non-free contrib
1611 <div class="section" id="etc-apt-apt-conf">
1612 <h3><a class="toc-backref" href=
1613 "#id19">1.7.2 /etc/apt/apt.conf</a></h3>
1615 <p>Questo file contiene le opzioni di apt, come ad
1616 esempio il proxy:</p>
1617 <pre class="literal-block">
1618 Acquire::http::Proxy "http://10.10.208.248:3128";
1621 <p>Si tenga conto che se si imposta un proxy per apt sul
1622 proprio portatile e tornati a casa propria si vuole
1623 scaricare nuovi pacchetti si dovra' disabilitare il proxy
1624 commentando la riga con ";" (''punto-e-virgola''). Su un
1625 portatile vi conviene tracciare il mirror <tt class=
1626 "docutils literal"><span class=
1627 "pre">ftp.it.debian.org</span></tt> senza impostare il
1628 proxy: in aula verra' rediretto al mirror locale e a casa
1629 vi appoggerete al mirror ufficiale.</p>
1631 <p>E' consigliabile impostare il proxy per apt anche in
1632 presenza di un proxy-http <em>trasparente</em>.</p>
1637 <div class="section" id="squid">
1638 <h1><a class="toc-backref" href=
1639 "#id20">2 Squid</a></h1>
1641 <p>Squid e' un proxy cache http (ma puo' anche gestire i
1642 protocolli FTP e https) robusto e strutturato, grazie alla
1643 sua flessibilita' puo' essere utilizzato sia in piccole reti
1644 locali che in scenari piu' complessi. E' molto semplice
1645 configurarlo per la semplice <em>condivisione della
1646 navigazione internet</em> all'interno di una rete locale, per
1647 poi poter sucessivamente implementare la autenticazione degli
1648 utenti, il filtraggio dei contenuti (Squid e' una
1649 applicazione che si muove nel 4' livello del modello TCP/IP a
1650 differenza di un <em>ipfilter</em> limitato al 2'), il
1651 bilanciamento del carico tra piu' server proxy.</p>
1653 <p>Se il server Squid e' in grado di accedere a internet
1654 puor' permette la navigazione web a una rete basata su
1655 indirizzi IP privati (es una 192.168.0.0/24). E se la rete
1656 privata deve solo navigare in internet, non serve introdurre
1657 nella rete un NAT (si veda la sezione sui firewall) per
1658 condividere la connessione: basta il solo Squid. Per altro
1659 non servira' neanche un servizio DNS accessibile dai clients
1660 dato che sara' il solo Squid a risolvere i nomi di dominio
1661 per i suoi client http.</p>
1663 <p>Inoltre Squid svolge la funzione di <em>anonymizer</em>:
1664 nasconde i client http alla rete internet: e' solo il server
1665 proxy ad accedere ai server web frequentati dai client:
1666 questi non sono percepiti ed esposti all'esterno della rete
1667 locale ma si relazionano solo con Squid. Dal punto di vista
1668 della sicurezza della rete locale questo e' preferibile ad un
1669 approccio alla navigazione basato su NAT.</p>
1671 <p>Squid ascolta di default sulla porta <tt class=
1672 "docutils literal"><span class="pre">3128</span></tt>, per
1673 quanto in genere la porta preferita per i servizi di caching
1674 http sia la <tt class="docutils literal"><span class=
1675 "pre">8080</span></tt>. Per utilizzarlo subito anche per apt
1676 si aggiunga ad <tt class="docutils literal"><span class=
1677 "pre">/etc/apt/apt.conf</span></tt></p>
1678 <pre class="literal-block">
1679 Acquire::http::Proxy "10.10.208.254:3128";
1682 <p>Per installare Squid si usi il pacchetto:</p>
1683 <pre class="literal-block">
1687 <div class="section" id="configurazione-squid-conf">
1688 <h2><a class="toc-backref" href=
1689 "#id21">2.1 Configurazione:
1692 <p>egue un estratto delle direttive principali viste in
1693 aula presenti nel file di configurazione <tt class=
1694 "docutils literal"><span class=
1695 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1697 <div class="section" id="cache-dir">
1698 <h3><a class="toc-backref" href=
1699 "#id22">2.1.1 Cache_dir</a></h3>
1701 <p>Cache dir serve per impostare caratteristiche
1702 fondamentali della cache creata sul supporto di storaggio
1703 quali dimensione e percorso nel file-system. Essendo la
1704 dimensione di default della cache pari a ~``100 MB`` e'
1705 altamente consigliabili aumentare questo parametro se si
1706 vuole godere dei vantaggi della funzione di cache per
1709 <p>Per stabilire il dimensionamento della cache si tenga
1710 conto dello spazio disponibile, dimensioni tipiche e
1711 massime degli oggetti che si vuole tenere in cache (un
1712 solo file .iso occupa circa <tt class=
1713 "docutils literal"><span class="pre">700</span>
1714 <span class="pre">MB</span></tt>, il pacchetto
1715 Openoffice.org circa 150 MB, un pacchetto Debian circa 20
1716 MB), e in fine del numero dei client.</p>
1718 <p>Si presti poi attenzione alla natura dei dati che
1719 saranno salvati nella cache: sono tutti dati facilmente
1720 sostituibili (gli originali sono on-line) la cui perdita
1721 causerebbe solo la necessita' di ripopolare la cache.
1722 Questo rende la cache di Squid un possibile candidato ad
1723 un RAID stirpe (livello 0) a ad un file system che
1724 prediliga le performance a scapito della consistenza, con
1725 vantaggi sia per le prestazioni (e la velocita' di
1726 navigazione e' uno dei motivi per cui si installa Squid)
1727 che per l'utilizzo estensivo dello spazio di
1730 <p>Questo fino al momento in cui per voi non sia piu'
1731 importante garantire la disponibilita' del servizio: se
1732 il RAID stripe dovesse rompersi gli utenti non potrebbero
1733 piu' navigare, cosa che per natura dello stripe e' piu'
1734 probabile rispetto ad un filesytem normale.</p>
1736 <div class="section" id="opzioni-del-file-system">
1737 <h4><a class="toc-backref" href=
1738 "#id23">2.1.1.1 Opzioni del file
1741 <p>I dati che compongono la cache vengono salvati sul
1742 filesytem del server dietro richiesta dei client http
1743 degli utenti della rete locale. Come per i servizi di
1744 file sharing o per la posta elettronica non c'e' motivo
1745 che il filesystem su cui sono ospitati questi dati
1746 abbiano i privilegi di eseguibilita' o suid (in genere
1747 si possono anche usare opzioni come noatime per rendere
1748 i file-systems piu' veloci, scegliere di utilizzare un
1749 journal dipende dalla dimesione della cache dalle
1750 preferenze: affidabilita' oppure prestazioni):</p>
1753 <pre class="literal-block">
1755 # Filesystem per Squid http cache
1756 /dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
1761 <div class="section" id="configurazioni-di-cache-dir">
1762 <h3><a class="toc-backref" href=
1763 "#id24">2.1.2 Configurazioni di
1766 <p>Ora possiamo impostare la cache nel file di
1767 configurazione <tt class="docutils literal"><span class=
1768 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1769 <pre class="literal-block">
1770 #TAG: cache_dir (riga 1628)
1773 # cache_dir Type Directory-Name Fs-specific-data [options]
1775 # You can specify multiple cache_dir lines to spread the
1776 # cache among different disk partitions.
1779 # cache_dir ufs /var/spool/squid3 100 16 256
1780 cache_dir aufs /var/spool/squid3 300 24 256
1781 # | | | | secondo livello di directory
1782 # | | | directory primo livello
1783 # | | dimensione in MB
1784 # | path della cache
1788 <p>Se si modifica la struttura della cache di Squid, ad
1789 esempio variando il numero delle directory, puo' essere
1790 opportuno cancellare e rigenerare la cache. Tipicamente
1791 e' consigliabile cancellare (se si ha ridotto il numero
1792 delle directory) la vecchia cache e poi generare una
1793 nuova struttura. Se si vuole star nel sicuro ogni volta
1794 che si modifica l'impostazione delle directory si svuoti
1795 la vecchia cache e se ne generi una nuova:</p>
1796 <pre class="literal-block">
1797 # /etc/init.d/squid3 stop
1798 # rm -r /var/spool/squid3/??
1800 # /etc/init.d/squid3 start
1804 <div class="section" id="tag-maximum-object-size">
1805 <h3><a class="toc-backref" href=
1806 "#id25">2.1.3 TAG:
1807 maximum_object_size</a></h3>
1809 <p>Questa direttiva imposta la dimensione massima degli
1810 oggetti che vengono salvati sul supporto di storaggio,
1811 oggetti di dimensioni superiori saranno comunque
1812 scaricati ma non tenuti in cache.</p>
1814 <p>TAG: maximum_object_size (1760):</p>
1815 <pre class="literal-block">
1816 # TAG: maximum_object_size (1760)
1817 # Objects larger than this size will NOT be saved on disk. The
1818 # value is specified in kilobytes, and the default is 4MB. If
1819 # you wish to get a high BYTES hit ratio, you should probably
1820 # increase this (one 32 MB object hit counts for 3200 10KB
1821 # hits). If you wish to increase speed more than your want to
1822 # save bandwidth you should leave this low.
1824 # NOTE: if using the LFUDA replacement policy you should increase
1825 # this value to maximize the byte hit rate improvement of LFUDA!
1826 # See replacement_policy below for a discussion of this policy.
1829 # maximum_object_size 4096 KB
1830 maximum_object_size 150 MB
1834 <div class="section" id="tag-cache-mem">
1835 <h3><a class="toc-backref" href=
1836 "#id26">2.1.4 TAG: cache_mem</a></h3>
1838 <p><strong>Cache_mem</strong> imposta quanta memoria RAM
1839 venga dedicata alla cache di Squid. Si consideri non solo
1840 quanta RAM sia disponibile sul sistema, ma anche quale
1841 sia l'utilizzo tipico di questo: altri servizi
1842 fondamentali necessitano di molta memoria?</p>
1844 <p>Questo parametro per altro influisce sulle prestazioni
1845 e sul degrado dei supporti di storaggio (sopratutto se
1846 magnetici). Ad esempio se si stanno utilizzando dischi
1847 rigidi esterni USB per la cache sara' preferibile cercare
1848 di usare quanta piu' RAM possibile per evitare il
1849 sovraccarico computazionale dovuto alla gestione dello
1850 stack USB, fenomeno evidente sui sistemi embedded come
1853 <p>Se si stesse pensando di usare dell'hardware
1854 <em>embedded</em> a basse prestazioni / consumo per
1855 realizzare un server gateway / NAT / Squid si tenga
1856 presente che Squid e' relativamente esoso di risorse
1857 rispetto agli altri servizi: avra' bisogno di <tt class=
1858 "docutils literal"><span class="pre">~25MB</span></tt>
1859 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1860 servire decorosamente una decina di client http su una
1861 rete ethernet 10/100. In questo caso non fate scendere
1862 <tt class="docutils literal"><span class=
1863 "pre">cache_mem</span></tt> sotto i <tt class=
1864 "docutils literal"><span class="pre">2/4</span>
1865 <span class="pre">MB</span></tt> pena un accesso continuo
1866 al supporto di storaggio.</p>
1868 <p>Se invece si disponesse di una macchina dedicata a
1869 Squid con gigabytes di RAM non si esiti a dedicarne buona
1870 parte a <em>cache_mem</em>.</p>
1872 <p>TAG: cache_mem (1566):</p>
1873 <pre class="literal-block">
1874 # 'cache_mem' specifies the ideal amount of memory to be used
1876 # * In-Transit objects
1878 # * Negative-Cached objects
1885 <div class="section" id="tag-minimum-object-size">
1886 <h3><a class="toc-backref" href=
1887 "#id27">2.1.5 TAG:
1888 minimum_object_size</a></h3>
1890 <p>Questo parametro imposta la dimensione minima degli
1891 oggetti salvati nella cache. Settato a <tt class=
1892 "docutils literal"><span class="pre">0</span></tt> o a
1893 valori molto piccoli puo' influire negativamente sulla
1894 frammentazione del filesytem e consumare un numero
1895 elevato di <em>inode</em> (cosa non piu' importante con
1896 ext4 o altri filesytem).</p>
1898 <p>In scenari con connessioni molto veloci ( >~10Mb),
1899 pochi client (una decina) e server poco performanti nella
1900 velocita' di accesso ai filesystem ( ~20MB/s, per quanto
1901 il limte sia piuttosto il <em>seek-time</em> ) tenere in
1902 cache i file piu' piccoli finisce per aumentare la
1903 latenza della navigazione.</p>
1905 <p>TAG: minimum_object_size:</p>
1906 <pre class="literal-block">
1907 # TAG: minimum_object_size (bytes)
1908 # Objects smaller than this size will NOT be saved on disk. The
1909 # value is specified in kilobytes, and the default is 0 KB, which
1910 # means there is no minimum.
1913 # minimum_object_size 0 KB
1914 minimum_object_size 0 KB
1919 <div class="section" id=
1920 "negoziazione-degli-accesi-al-servizio">
1921 <h2><a class="toc-backref" href=
1922 "#id28">2.2 Negoziazione degli accesi al
1925 <p>Squid fa parte di quei servizi suscettibili di diventare
1926 un open relay, sara' quindi necessario prestare attenzione
1927 a delimitare la rete che puo' accedere al servizio.</p>
1929 <dl class="docutils">
1930 <dt>Open Relay:</dt>
1932 <dd>Un servizio a cui possono accedere tutti
1933 indiscriminatamente. La cosa puo' andare bene per servizi
1934 come i server web, che aspirano per loro natura al
1935 maggior numero possibile di utenti, ma non a servizi come
1936 i proxy http oppure ai server di posta elettronica
1937 (adibiti ai soli utenti della rete locale).</dd>
1940 <p>Generalmente non volete che il vostro proxy http venga
1941 usato da persone sconosciute ed esterne alla vostra rete,
1942 le quali sostanzialmente <em>navigherebbero sotto
1943 l'identita' del vostro proxy</em> (probabilmente per
1944 visionare materiali che non vorrebbero fossero ricondotti
1945 direttamente a loro) generando traffico e consumando banda
1946 della vostra connessione a internet. Tenere Squid in
1947 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1948 modo per essere inseriti in una <em>black list</em>.</p>
1950 <p>Per poter limitare gli accessi a Squid dal punto di
1951 vista dell'applicazione (quarto livello TCP/IP) si
1952 identifichera' inizialmente l'entita' <em>rete locale</em>
1953 (es: <tt class="docutils literal"><span class=
1954 "pre">localnet</span></tt>) con una ACL di tipo
1955 <em>src</em> (indirizzi IP sorgenti) indicando la
1956 <em>classe / range di IP</em> della nostra rete.</p>
1959 Dopodiche l'accesso (<tt class=
1960 "docutils literal"><span class=
1961 "pre">http_access</span></tt>) si concedera'
1962 (<em>allow</em>) a questa entita' (es: <tt class=
1963 "docutils literal"><span class=
1964 "pre">localnet</span></tt>) negando chiunque altro.
1967 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1968 esprimere i range di IP: <a class="reference external"
1969 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1970 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1972 <p>E' poi sempre possibile tenere il proxy in ascolto su un
1973 solo indirizzo IP, nel caso si disponga di piu' device di
1974 rete, oppure settare un IP firewall per limitare il
1975 traffico in base al protocollo IP.</p>
1977 <div class="section" id="acl-e-http-access">
1978 <h3><a class="toc-backref" href=
1979 "#id29">2.2.1 ACL e http access</a></h3>
1981 <p>Si proceda a creare una <tt class=
1982 "docutils literal"><span class="pre">ACL</span></tt> di
1983 tipo <tt class="docutils literal"><span class=
1984 "pre">src</span></tt> per identificare la nostra rete
1985 locale, poi si abiliti l'accesso a questa con la
1986 direttiva <tt class="docutils literal"><span class=
1987 "pre">http_access</span></tt>. Tutto quanto non e'
1988 espressamente autorizzato viene poi negato da un
1989 <tt class="docutils literal"><span class=
1990 "pre">http_access</span> <span class="pre">deny</span>
1991 <span class="pre">all</span></tt> finale.</p>
1992 <pre class="literal-block">
1994 # Defining an Access List
1996 # Every access list definition must begin with an aclname and acltype,
1997 # followed by either type-specific arguments or a quoted filename that
1998 # they are read from.
2000 # ***** ACL TYPES AVAILABLE *****
2002 # acl aclname src ip-address/netmask ... # clients IP address
2005 # Example rule allowing access from your local networks.
2006 # Adapt to list your (internal) IP networks from where browsing
2008 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
2009 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
2010 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
2012 acl localnet src 10.10.208.0/24
2016 # Allowing or Denying access based on defined access lists
2018 # Access to the HTTP port:
2019 # http_access allow|deny [!]aclname ...
2021 # NOTE on default values:
2023 # If there are no "access" lines present, the default is to deny
2027 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
2029 # Example rule allowing access from your local networks.
2030 # Adapt localnet in the ACL section to list your (internal) IP networks
2031 # from where browsing should be allowed
2032 #http_access allow localnet
2033 http_access allow localnet
2038 <div class="section" id="testare-squid">
2039 <h2><a class="toc-backref" href=
2040 "#id30">2.3 Testare Squid</a></h2>
2042 <p>Dopo aver configurato squid e' fondamentale testarne il
2043 corretto funzionamento per assicurarsi di non aver creato
2044 un <em>open-relay</em>. Per fare dei test significativi
2045 serve utilizzare degli host remoti: ci si connetta via ssh
2046 a questi e si usi <tt class="docutils literal"><span class=
2047 "pre">wget</span></tt> da riga di comando.</p>
2049 <div class="section" id="client-wgetrc">
2050 <h3><a class="toc-backref" href=
2051 "#id31">2.3.1 Client: ~/.wgetrc</a></h3>
2053 <p>Nel file <tt class="docutils literal"><span class=
2054 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
2055 un file nascosto) si puo' impostare il proxy per wget. Si
2056 utilizzi l'indirizzo IP del server che si vuole testare,
2057 e si seguano i log <tt class=
2058 "docutils literal"><span class=
2059 "pre">/var/log/squid3/access.log</span></tt> sul
2062 <p>Da notare che la prova va' fatta su una macchina della
2063 rete che si vuole testare, non da <em>localhost</em>. Per
2064 altro se si utilizzasse <em>direttamente</em> <tt class=
2065 "docutils literal"><span class=
2066 "pre">localhost</span></tt> non si testerebbe la
2067 <em>ACL</em> predisposta, dato che si si rientrerebbe
2068 nella ACL (pre-configurata di default) <tt class=
2069 "docutils literal"><span class=
2070 "pre">localhost</span></tt>.</p>
2072 <dl class="docutils">
2075 <dd>http_proxy=10.10.208.178:3128</dd>
2078 <p>Si proceda a scaricare dal client scelto con un
2080 <pre class="literal-block">
2081 wget http://www.google.it
2085 <div class="section" id="server-access-log">
2086 <h3><a class="toc-backref" href=
2087 "#id32">2.3.2 Server:
2090 <p>Si puo' controllare il corretto funzionamento del
2091 server seguendo i log di accesso a Squid:</p>
2092 <pre class="literal-block">
2093 # tail -f /var/log/squid3/access.log
2096 <p>In oltre e' possibile configurare diversi
2097 <em>analizzatori di log</em> come <tt class=
2098 "docutils literal"><span class=
2099 "pre">Webalizer</span></tt> per studiare i log di
2105 <div class="section" id="tiny-proxy">
2106 <h1><a class="toc-backref" href=
2107 "#id33">3 Tiny proxy</a></h1>
2109 <p>Se avete l'esigenza di un proxy server per la condivisione
2110 della connessione ad internet ma non avete la necessita' o le
2111 risorse di un <em>caching</em> proxy come Squid potete
2112 considerare <strong>tinyproxy</strong>, questo e' molto piu'
2113 leggero (utilizza circa ~2MB di RAM e ovviamente non deve
2114 accedere continuamente ad un file system per lo storaggio
2115 della cache) e risulta piu' semplice nella
2118 <p>TinyProxy puo' essere utilizzato come sostituto di
2119 emergenza in una rete in cui Squid e' momentaneamente non
2122 <p>File di configurazione: <tt class=
2123 "docutils literal"><span class=
2124 "pre">/etc/tinyproxy/tinyproxy.conf</span></tt></p>
2125 <pre class="literal-block">
2126 # Porta su cui ascoltare
2128 # IP su cui ascoltare
2129 Listen 10.10.208.160
2130 # Negoziazione accessi
2131 Allow 10.10.208.0/24
2135 <div class="section" id="apache">
2136 <h1><a class="toc-backref" href=
2137 "#id34">4 Apache</a></h1>
2139 <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
2140 patchy NCSA web server</em> ), e' il server web modulare piu'
2141 diffuso e strutturato disponibile con licenza libera, in
2142 grado di operare da sistemi operativi UNIX/Linux e
2145 <p>Un server web e' un processo, e per estensione il computer
2146 su cui e' in esecuzione, che si occupa di fornire, su
2147 richiesta del browser, una pagina web (spesso scritta in
2148 HTML). Le informazioni inviate dal server web viaggiano in
2149 rete trasportate dal protocollo HTTP. L'insieme di server web
2150 da' vita al World Wide Web, uno dei servizi piu' utilizzati
2153 <div class="section" id="pacchetti-da-installare">
2154 <h2><a class="toc-backref" href=
2155 "#id35">4.1 Pacchetti da
2156 installare::</a></h2>
2162 <p>Con la release 2.0 di Apache viene automaticamente resa
2163 disponibile anche la versione SSL (Secure Socket Layer,
2164 connessioni criptate ) del web server senza che ci sia la
2165 necessita' di installare altri pacchetti.</p>
2168 <div class="section" id="configurazione-di-apache">
2169 <h2><a class="toc-backref" href=
2170 "#id36">4.2 Configurazione di
2173 <p>I file di configurazione di apache si trovano nella
2174 cartella: <tt class="docutils literal"><span class=
2175 "pre">/etc/apache2</span></tt> e sono strutturati come
2176 descritto nel file <tt class=
2177 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
2178 . Sostanzialmente lo schema e' il seguente:</p>
2180 <dl class="docutils">
2181 <dt>apache2.conf</dt>
2184 <p class="first">File di configurazione principale del
2187 <p class="last">httpd.conf e' il vecchio file di
2188 configurazione di Apache1, presente per motivi di
2189 retrocompatibilita' e' generalmente vuoto.</p>
2194 <dd>In questo file vengono specificate le porte sulle
2195 quali resta in ascolto il server web. Si noti che
2196 utilizzando dei virtual hosts generalmente viene
2197 specificata per questi la porta su cui ascoltare nel file
2198 di configurazione del virtual host, ad es: <tt class=
2199 "docutils literal"><span class=
2200 "pre"><VirtualHost</span> <span class=
2201 "pre">*:80></span></tt></dd>
2203 <dt>sites-available</dt>
2205 <dd>In questa cartella vengono raccolti i file di
2206 configurazione dei virtual host disponibili.</dd>
2208 <dt>sites-enabled</dt>
2210 <dd>In questa cartella sono contenuti dei link simbolici
2211 ai files in ../sites-available : se il link e' presente
2212 in questa cartella il virtual host e' abilitato.</dd>
2214 <dt>mods-available</dt>
2216 <dd>Stesso metodo per i moduli: in questa cartella ci
2217 sono i moduli veri e propri che verranno poi abilitati
2218 grazie all'esistenza di link simbolici nella cartella
2221 <dt>mods-enabled</dt>
2223 <dd>Moduli abilitati, effettivamente caricati.</dd>
2227 <div class="section" id="apache-conf">
2228 <h2><a class="toc-backref" href=
2229 "#id37">4.3 apache.conf</a></h2>
2231 <p>File di configurazione del servizio Apache, contiene le
2232 impostazioni generiche (ad esempio utilizzo della RAM e
2233 risorse di sistema) dell'intero servizio. Nella
2234 configurazione di default per Debian non viene definito un
2235 vero e proprio sito di default ma solo dei virtual
2238 <p>Guardiamo alcune direttive interessanti:</p>
2240 <dl class="docutils">
2243 <dd>Numero di secondi da aspettare prima di chiudere la
2244 connessione con il client. Questo parametro serve a
2245 liberare le risorse di sistema nel caso che un client,
2246 magari a causa di una connessione particolarmente lenta o
2247 instabili, tenga attivo indefinitamente un processo di
2252 <dd>L'estensione keep-alive (http 1.0) congiuntamente
2253 alle connessioni persistenti (http 1.1) permettono al
2254 server di rispondere a piu' richieste dei client mediante
2255 la stessa connessione. Il protocollo http per sua natura
2256 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
2257 richiesta (per pagine web si pensi ad esempio alle
2258 immagini) dal client necessita di una connessione
2259 autonoma. Keep-alive permette di ottimizzare la
2260 connessione anche fino al 50% a seconda delle situazioni
2263 <dt>Server-Pool Size Regulation</dt>
2265 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
2266 Tutti spiegati nel manuale di apache) servono per
2267 attribuire le risorse di sistema disponibili al server
2268 Apache. Tenere questi parametri bassi serve a limitare il
2269 rischio di Denial of Service per il server, nel caso
2270 offra altri servizi. I settagli di default sono come
2271 sempre abbastanza conservativi, se si conta di usare il
2272 proprio Apache per servire un sito web con molti
2273 visitatori sara' necessario aumentare sensibilmente le
2274 impostazioni di base.</dd>
2276 <dt>AccessFileName</dt>
2278 <dd>Il nome del file che viene onorato per modificare le
2279 impostazioni per una singola directory, legato alla
2280 direttiva AllowOverride .</dd>
2284 <div class="section" id="installazione-di-php">
2285 <h2><a class="toc-backref" href=
2286 "#id38">4.4 Installazione di PHP</a></h2>
2288 <p>Pacchetti da installare: <tt class=
2289 "docutils literal"><span class="pre">php5</span>
2290 <span class="pre">php-pear</span></tt></p>
2292 <div class="section" id="test-del-modulo-php">
2293 <h3><a class="toc-backref" href=
2294 "#id39">4.4.1 Test del modulo
2297 <p>Creare nella cartella <tt class=
2298 "docutils literal"><span class="pre">/var/www</span></tt>
2299 (o altra cartella visibile) un file con estensione *.php
2300 (es <tt class="docutils literal"><span class=
2301 "pre">/var/www/info.php</span></tt> contenete codice php
2302 eseguibile dall'interprete, ad es:</p>
2303 <pre class="literal-block">
2304 <?php phpinfo() ; ?>
2307 <p>Questa funzione di php generera' la tipica pagina con
2308 le impostazioni attuali per PHP. Richiamando la pagina
2309 (es: <tt class="docutils literal"><span class=
2310 "pre">http://localhost/info.php</span></tt> ) verra'
2311 generata dall'interprete PHP la pagina HTML e resa
2312 disponibile tramite Apache ai client HTTP, a prova del
2313 corretto funzionamento del modulo di PHP e della sua
2314 integrazione con il server web Apache. In caso contrario
2315 se il client http proporra' di scaricare la pagina invece
2316 che visualizzarla nel browser: non funziona l'interprete
2317 di php o sono mal configurati i MIME-type. prima di tutto
2318 assicurarsi di aver fatto ripartire Apache.</p>
2321 <div class="section" id=
2322 "installazione-del-supporto-per-mysql-a-php">
2323 <h3><a class="toc-backref" href=
2324 "#id40">4.4.2 Installazione del supporto
2325 per Mysql a PHP</a></h3>
2327 <p>Installare i pacchetti:</p>
2328 <pre class="literal-block">
2329 php5-mysql phpmyadmin
2332 <p>Controllare tramite la pagina php.info che sia
2333 abilitato il supporto per Mysql (ripartito Apache,
2334 ricaricare la pagina e cercare con CTRL+f <tt class=
2335 "docutils literal"><span class=
2336 "pre">mysql</span></tt>).</p>
2339 <div class="section" id="phpmyadmin">
2340 <h3><a class="toc-backref" href=
2341 "#id41">4.4.3 phpmyadmin</a></h3>
2343 <p>L'interfaccia web Phpmyadmin non richiede
2344 necessariamente la presenza di un database Mysql locale,
2345 puo' infatti essere utilizzata per gestire database
2346 remoti (il suo file di configurazione: <tt class=
2347 "docutils literal"><span class=
2348 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
2349 caso si voglia installare localmente Mysql si utilizzi il
2350 pacchetto <tt class="docutils literal"><span class=
2351 "pre">mysql-server</span></tt> .</p>
2353 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2354 <tt class="docutils literal"><span class=
2355 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
2356 non fosse controllare che sia incluso il file <tt class=
2357 "docutils literal"><span class=
2358 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
2359 <tt class="docutils literal"><span class=
2360 "pre">/etc/apache2/conf.d/</span></tt> .</p>
2363 <div class="section" id=
2364 "installazione-del-supporto-per-postgresql-a-php">
2365 <h3><a class="toc-backref" href=
2366 "#id42">4.4.4 Installazione del supporto
2367 per Postgresql a PHP</a></h3>
2369 <p>Installare i pacchetti:</p>
2370 <pre class="literal-block">
2371 php5-pgsql phppgadmin
2374 <p>Controllare tramite la pagina php.info che sia
2375 abilitato il supporto per PostgreSQL (ripartito Apache,
2376 ricaricare la pagina e cercare con CTRL+f <tt class=
2377 "docutils literal"><span class=
2378 "pre">pgsql</span></tt>).</p>
2381 <div class="section" id="phppgadmin">
2382 <h3><a class="toc-backref" href=
2383 "#id43">4.4.5 phppgadmin</a></h3>
2385 <p>L'interfaccia web Phppgadmin per il database server
2386 PostgreSQL non richiede necessariamente la presenza di un
2387 database locale, puo' infatti essere utilizzata per
2388 gestire database remoti (il suo file di configurazione:
2389 <tt class="docutils literal"><span class=
2390 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
2391 caso si voglia installare localmente Mysql si utilizzi il
2392 pacchetto <tt class="docutils literal"><span class=
2393 "pre">postgresql</span></tt> .</p>
2395 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2396 <tt class="docutils literal"><span class=
2397 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2398 non fosse controllare che sia incluso il file <tt class=
2399 "docutils literal"><span class=
2400 "pre">/etc/phppgadmin/apache.conf</span></tt> in
2401 <tt class="docutils literal"><span class=
2402 "pre">/etc/apache2/conf.d/</span></tt> .</p>
2406 <div class="section" id="virtual-hosts">
2407 <h2><a class="toc-backref" href=
2408 "#id44">4.5 Virtual hosts</a></h2>
2412 <li><a class="reference external" href=
2413 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2415 <li><a class="reference external" href=
2416 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2417 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2421 <p>I virtual host permettono di avere piu' siti internet
2422 disponibili tramite lo stesso server web, eventualmente
2423 mappati su un solo indirizzo IP. Sono generalmente di due
2428 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2429 possibilita' di avere piu' indirizzi IP dedicati per i
2430 diversi siti che si vuole servire. ES: <tt class=
2431 "docutils literal"><span class=
2432 "pre"><VirtualHost</span> <span class=
2433 "pre">192.168.0.2:80></span></tt> . Soluzione
2434 dispendiosa, si tende ad usarla solo se servono
2435 certificati di sicurezza (SSL ) dedicati per ogni
2438 <li>Basati su <em>nomi di dominio</em> che puntano allo
2439 stesso IP. Soluzione piu' economica e diffusa che si
2440 basa sulle funzionalita' di http 1.1 .</li>
2444 <p>Prenderemo in esame la gestione di virtual hosts basati
2445 su nomi di dominio.</p>
2447 <div class="section" id="gestione-dns">
2448 <h3><a class="toc-backref" href=
2449 "#id45">4.5.1 Gestione DNS</a></h3>
2451 <p>Prima di tutto per poter impostare i virtual hosts
2452 dovete avere un server DNS che risolva i vostri nomi di
2453 dominio sull'indirizzo IP del server. Questo si puo'
2454 ottenere in vari modi, ad es:</p>
2457 <dl class="docutils">
2458 <dt><tt class="docutils literal"><span class=
2459 "pre">/etc/hosts</span></tt></dt>
2461 <dd>Per prove sul proprio sistema potete impostare i
2462 nomi dei vostri virtual server nel file /etc/hosts
2465 <dt><em>Dnsmasq</em> (DNS server)</dt>
2467 <dd>Utilizzabile al livello della rete locale per
2468 fare dei test, utilizzando direttive come: <tt class=
2469 "docutils literal"><span class=
2470 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2472 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2474 <dd>Utilizzare un servizio come ad es: <a class=
2475 "reference external" href=
2476 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2477 per mappare nomi di dominio sul proprio indirizzo IP,
2478 comodo ad esempio se si dispone di un indirizzo IP
2479 pubblico (anche se dinamico) per la propria
2480 connessione ad internet.</dd>
2482 <dt><em>Bind</em> (DNS server)</dt>
2484 <dd>Impostare i campi A nelle proprie zone gestite
2485 dal server DNS Bind. Ad es: <tt class=
2486 "docutils literal"><span class=
2487 "pre">papo</span>
2489 "pre">A</span>
2490 <span class="pre">212.22.136.248</span></tt></dd>
2495 <div class="section" id="eseguire-una-query-dns-con-dig">
2496 <h3><a class="toc-backref" href=
2497 "#id46">4.5.2 Eseguire una query DNS con
2498 <tt class="docutils literal"><span class=
2499 "pre">dig</span></tt>::</a></h3>
2501 <p>Per testare la corretta risoluzione dei vostri nomi di
2502 dominio sui relaivi indirizzi IP si usi dig (o altre
2503 utlity, vedere la sezione relativa i DNS). Dig e'
2504 contenuto nel pacchetto <tt class=
2505 "docutils literal"><span class=
2506 "pre">dnsutils</span></tt>.</p>
2509 <p># dig 177.piffa.net</p>
2511 <p>; <<>> DiG 9.5.1-P1 <<>>
2512 177.piffa.net ;; global options: printcmd ;; Got
2513 answer: ;; ->>HEADER<<- opcode: QUERY,
2514 status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
2515 QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
2517 <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
2519 <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
2522 <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
2525 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2526 <tt class="docutils literal"><span class=
2527 "pre">177.piffa.net.</span>
2529 "pre">0</span>
2530 <span class="pre">IN</span>
2532 "pre">A</span>
2533 <span class="pre">10.10.208.177</span></tt> . Il nome di
2534 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2535 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2536 dovra' essere disponibile un virtual host che corrisponde
2537 al nome <tt class="docutils literal"><span class=
2538 "pre">177.piffa.net</span></tt> (<tt class=
2539 "docutils literal"><span class=
2540 "pre">ServerName</span></tt>) .</p>
2542 <p>Il server DNS utilizzato dal sistema e' evidenziato
2543 dalla stringa: <tt class="docutils literal"><span class=
2544 "pre">;;</span> <span class="pre">SERVER:</span>
2546 "pre">10.10.28.248#53(10.10.28.248)</span></tt> che
2547 dovrebbe corrispondere a quanto impostato nel vostro
2548 <tt class="docutils literal"><span class=
2549 "pre">/etc/resolv.conf</span></tt>. Se il vostro browser
2550 web utilizza un proxy http sara questo a risolvere i nomi
2551 di dominio, tipicamente potete disabilitare l'uso del
2552 proxy per determinati domini nella sezione di
2553 configurazione del browser.</p>
2556 <div class="section" id="id3">
2557 <h3><a class="toc-backref" href=
2558 "#id47">4.5.3 Virtual hosts</a></h3>
2560 <p>Esempio di Virtual host:</p>
2561 <pre class="literal-block">
2562 <VirtualHost *:80 >
2563 ServerName 177.piffa.net
2564 DocumentRoot /var/www/177.piffa.net/
2565 ServerAdmin webmaster@177.piffa.net
2566 </VirtualHost>
2569 <ol class="arabic simple">
2570 <li><tt class="docutils literal"><span class=
2571 "pre"><VirtualHost</span> <span class=
2572 "pre">\*:80</span> <span class="pre">></span></tt>
2573 La prima riga indica l'inizio della stanza relativa al
2574 nostro virtual host, che ascoltera' su qualunque
2575 indirizzo IP (nel caso il server abbia piu' indirizzi
2576 dai quali e' raggiungibile) sulla porta <tt class=
2577 "docutils literal"><span class=
2578 "pre">80</span></tt>.</li>
2580 <li><tt class="docutils literal"><span class=
2581 "pre">Server/name</span></tt> precisa quale sara' il
2582 nome di dominio a cui verra' associato questo sito
2583 rispetto ad altri eventualmente presenti sullo stesso
2586 <li><tt class="docutils literal"><span class=
2587 "pre">DocumentRoot</span></tt> : il path della
2588 directory che contiene le pagine del sito.</li>
2590 <li><tt class="docutils literal"><span class=
2591 "pre">ServerAdmin</span></tt>: l'indirizzo del
2592 webmaster, in modo da poterlo contattare in caso di
2593 problemi col sito.</li>
2595 <li><tt class="docutils literal"><span class=
2596 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2597 chiusura della stanza di definizione del virtual
2601 <p>Quelle che abbiamo appena visto sono le direttive
2602 essenziali per definire un sito virtuale, potrebbe essere
2603 utile aggiungere altre:</p>
2607 <dl class="first docutils">
2608 <dt><tt class="docutils literal"><span class=
2609 "pre">ErrorLog</span> <span class=
2610 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2613 <p class="first last">Log degli errori separato
2614 dai restanti siti web ospitati dal server.</p>
2620 <dl class="first docutils">
2621 <dt><tt class="docutils literal"><span class=
2622 "pre">LogLevel</span> <span class=
2623 "pre">warn</span></tt></dt>
2626 <p class="first last">Livello di importanza degli
2627 eventi loggati: warning <em>attenzione</em> .</p>
2633 <dl class="first docutils">
2634 <dt><tt class="docutils literal"><span class=
2635 "pre">CustomLog</span> <span class=
2636 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2637 <span class="pre">combined</span></tt></dt>
2640 <p class="first last">Log di accesso separati
2641 dagli altri siti, utile anche qua per statistiche
2642 di accesso per il solo sito virtuale.</p>
2648 <p>Potrebbe essere utile modificare le impostazioni di
2649 una intera directory, ad esempio per abilitare
2650 l'<tt class="docutils literal"><span class=
2651 "pre">AuthConfig</span></tt>:</p>
2652 <pre class="literal-block">
2653 <Directory "/var/www/miosito.net/privata">
2654 AllowOverride AuthConfig
2655 Options ExecCGI Indexes MultiViews FollowSymLinks
2661 <p><tt class="docutils literal"><span class=
2662 "pre">AllowOverride</span> <span class=
2663 "pre">AuthConfig</span></tt> ora vale per l'intera
2664 directory, come le altre opzioni.</p>
2668 <div class="section" id="negoziazione-accessi">
2669 <h2><a class="toc-backref" href=
2670 "#id48">4.6 Negoziazione accessi</a></h2>
2672 <p>Tipicamente quando si installa un server web il proprio
2673 desiderio e' di dare accesso ai materiali disponibili al
2674 maggior numero di visitatori possibile. Talvolta pero' puo'
2675 essere utile poter limitare questi accessi, ad esempio per
2676 escludere un <em>bot</em> indesiderato che scansiona
2677 ininterrottamente le nostre pagine o per creare una
2678 <em>Area Riservata</em> i cui materiali non devono essere
2679 disponibile a tutti.</p>
2681 <div class="section" id="limiti-su-base-ip">
2682 <h3><a class="toc-backref" href=
2683 "#id49">4.6.1 Limiti su base IP</a></h3>
2685 <p>La forma piu' semplice di restrizione degli accessi e'
2686 su base degli indirizzi IP dei client: tipicamente i siti
2687 web sono settati per dare accesso a chiunque:</p>
2688 <pre class="literal-block">
2689 <VirtualHost *:80 >
2691 <Directory "/var/www/177.piffa.net">
2695 </VirtualHost>
2698 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2700 <pre class="literal-block">
2701 <VirtualHost *:80 >
2703 <Directory "/var/www/177.piffa.net">
2706 Deny from 192.168.0.1
2708 </VirtualHost>
2711 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2712 materiali dell'intero sito virtuale, oppure potremmo
2713 lavorare su una sola directory:</p>
2714 <pre class="literal-block">
2715 <Directory "/var/www/miosito.net/limitata">
2717 Allow from 192.168.0.0./24
2722 <p>In questo modo solo la classe IP <tt class=
2723 "docutils literal"><span class=
2724 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2725 directory <tt class="docutils literal"><span class=
2726 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2727 relativamente facile per un malintenzionato cambiare il
2728 proprio indirizzo IP, oppure collegarsi da un altra zona.
2729 Meno facile e' accedere ad una classe privata trovandosi
2730 all'esterno di questa, ma ci sono comunque soluzioni piu'
2734 <li>Mod_access: <a class="reference external" href=
2735 "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
2737 <li>mod_authz_hosti(Available in Apache 2.1 and later):
2738 <a class="reference external" href=
2739 "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
2740 http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
2745 <div class="section" id="user-authentication">
2746 <h2><a class="toc-backref" href=
2747 "#id50">4.7 User Authentication</a></h2>
2749 <p>Si puo' negoziare gli accessi ad un area del sito
2750 tramite autenticazione basata su <em>nome utente /
2751 password</em>. Questo puo' venire utile per creare una area
2752 download <em>intranet</em>, alla quale possano accedere
2753 solo gli utenti previsti a prescindere dagli indirizzi IP
2754 dei loro client.</p>
2756 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2757 possibile implementare questo paradigma, per quanto
2758 esistano soluzioni piu' granulari e sofisticate, che
2759 richiedono pero' l'implementazione di interpreti di
2760 linguaggi di programmazione, criptazione delle passwords,
2761 gestione degli utenti ed eventualmente delle sessioni. Mod
2762 auth non richiede l'installazione di niente di tutto
2765 <p>link: <a class="reference external" href=
2766 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2768 <div class="section" id="definire-la-cartella">
2769 <h3><a class="toc-backref" href=
2770 "#id51">4.7.1 Definire la
2773 <p>Decidere quale sara' il <em>path</em> della cartella
2774 da sottoporre ad autenticazione:</p>
2777 <tt class="docutils literal"><span class=
2778 "pre">mkdir</span> <span class=
2779 "pre">/var/www/177.piffa.net/privata</span></tt>
2783 <div class="section" id=
2784 "creazione-del-database-delle-passwords">
2785 <h3><a class="toc-backref" href=
2786 "#id52">4.7.2 Creazione del database
2787 delle passwords</a></h3>
2789 <p>Un modo semplice per gestire una database di
2790 <em>user-id / passwords</em> e' utilizzare l'utility
2791 <tt class="docutils literal"><span class=
2792 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2793 in cui un <em>crypt</em> delle password viene associato
2796 <p>Si dovra' decidere dove tenere questo file, la cosa
2797 importante e' che non sia visibile nel sito web: non deve
2798 essere scaricabile dai visitatori. Deve essere cioe'
2799 all'esterno della <em>DocumentRoot</em>: un buon posto
2800 potrebbe essere la /home dell'utente.</p>
2802 <p>Creiamo (con il <em>flag</em> <tt class=
2803 "docutils literal"><span class="pre">-c</span></tt>) il
2804 file <tt class="docutils literal"><span class=
2805 "pre">/home/utente/passwords</span></tt> con l'utente
2806 <tt class="docutils literal"><span class=
2807 "pre">luca</span></tt>:</p>
2808 <pre class="literal-block">
2809 htpasswd -c /home/utente/passwords luca
2812 <p><tt class="docutils literal"><span class=
2813 "pre">htpasswd</span></tt> ci chiedera' la password da
2814 associare all'utente <tt class=
2815 "docutils literal"><span class="pre">luca</span></tt>.
2816 Per successive modifiche della password o aggiunta di
2817 nuovi utenti non sara' necessario usare il flag
2818 <tt class="docutils literal"><span class=
2819 "pre">-c</span></tt>.</p>
2822 <div class="section" id="id4">
2823 <h3><a class="toc-backref" href=
2824 "#id53">4.7.3 Configurazione di
2827 <p>Ora possiamo passare alla configurazione vera e
2828 propria di Apache, ma con una novita': andremo a inserire
2829 la voce in un <tt class="docutils literal"><span class=
2830 "pre">.htaccess</span></tt> invece che modificare
2831 (tramite una direttiva <tt class=
2832 "docutils literal"><span class=
2833 "pre"><Directory></span></tt> ) il file di
2834 impostazione del virtual-host.</p>
2836 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2837 puo' modificare l'impostazione del virtual host nel file
2838 <tt class="docutils literal"><span class=
2839 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2840 ma spesso il motivo per cui creiamo i virtual hosts e'
2841 ospitare i siti di altri utenti, che possono solo
2842 pubblicare (generalmente tramite <em>FTP</em>) i loro
2843 documenti nella loro <em>DocumentRoot</em>, senza poter
2844 quindi modificare in alcun modo la configurazione del
2847 <p>Dando agli utenti la possibilita' di modificare
2848 (<em>AllowOverride</em>) autonomamente alcuni parametri
2849 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2850 funzionamento del loro spazio web ci togliera'
2851 l'incombenza di dover intervenire continuamente sui vari
2854 <p>Abilitiamo l'AllowOverride nel file di configurazione
2855 del virtual host per la sola directory <tt class=
2856 "docutils literal"><span class=
2857 "pre">privata</span></tt>:</p>
2858 <pre class="literal-block">
2859 <VirtualHost *:80 >
2860 ServerName 177.piffa.net
2861 DocumentRoot /var/www/177.piffa.net/
2862 ServerAdmin webmaster@177.piffa.net
2863 <Directory "/var/www/177.piffa.net/privata">
2864 AllowOverride AuthConfig
2866 </VirtualHost>
2869 <p>Per rendere il cambiamento effettivo sara' necessario
2870 fare un restart / reload di Apache.</p>
2872 <p>Ora sara' possibile, anche per l'utente di sistema,
2873 creare un file <tt class="docutils literal"><span class=
2874 "pre">.htaccess</span></tt> che sara' onorato da
2877 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2878 <pre class="literal-block">
2879 # Messaggio visualizzato al prompt per l'autenticazione
2880 AuthName "Area privata soggetta ad autentizazione"
2881 # tipo di autenticazione da usarsi
2883 # File precedentemente generato con htpasswd
2884 AuthUserFile /home/utente/passwords
2886 # Negoziazione degli accessi
2887 # valid users permette l'accesso agli utenti specificati
2888 # nel file generato da htpasswd
2892 <p>Si noti che non e' necessario fare ripartire Apache
2893 per onorare i cambiamenti (un utente non avrebbe la
2894 possibilita' di farlo!).</p>
2896 <dl class="docutils">
2897 <dt>Oltre a <tt class="docutils literal"><span class=
2898 "pre">valid-users</span></tt> si potrebbe scegliere di
2899 usare la formula <tt class=
2900 "docutils literal"><span class="pre">users</span></tt>
2901 che permette di elencare esplicitamente gli
2904 <dd>require user pippo pluto</dd>
2907 <p>L'utente <em>paperino</em> che fosse comunque presente
2908 nel file generato da htpasswd non potrebbe accedere alla
2911 <dl class="docutils">
2912 <dt>Nel caso ci fossero molti utenti conviene gestirli
2913 tramite <em>gruppi</em>::</dt>
2915 <dd>require group staff studenti</dd>
2918 <p>I gruppi vengono definiti in un file in modo simile a
2919 <tt class="docutils literal"><span class=
2920 "pre">/etc/groups</span></tt> per gli utenti di
2922 <pre class="literal-block">
2924 studenti: lucap federico luca
2927 <p>da richiamare tramite la direttiva <tt class=
2928 "docutils literal"><span class=
2929 "pre">AuthGroupFile</span></tt>.</p>
2933 <div class="section" id="cavets">
2934 <h2><a class="toc-backref" href=
2935 "#id54">4.8 Cavets</a></h2>
2937 <p>Problemi di cache:</p>
2941 <li>Proxy: nei settaggi del browser specificare di non
2942 utilizzare un server proxy http per il sito web locale
2943 (o per gli altri che si stanno monitorando). Se si ha
2944 il controllo del proxy server: stopparlo, ricaricare la
2945 pagina (operazione che fallira'), far ripartire il
2946 proxy, ricaricare la pagina.</li>
2948 <li>Provare con un altro browser, o cercare di svuotare
2949 la cache chiudere/riaprire l'applicativo. Provare a
2950 fermare Apache, ricaricare la pagina (operazione che
2951 fallira'), far ripartire Apache, ricaricare la
2958 <div class="section" id="domain-name-system">
2959 <h1><a class="toc-backref" href=
2960 "#id55">5 Domain Name System</a></h1>
2962 <p>Domain Name System (spesso indicato con DNS) e' un
2963 servizio utilizzato per la risoluzione di nomi di host in
2964 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2965 un sistema <strong>gerarchico</strong> (quindi una struttura
2966 ad albero, simile ai <em>file system</em>)
2967 <strong>distribuito</strong> (ogni server DNS facente parte
2968 del sistema puo' mantenere solo una parte delle informazioni,
2969 ad esempio per la sua sola <em>zona</em>), costituito dai
2972 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2973 rete internet come per qualunque rete locale. Ad esempio
2974 durante la navigazione web un client vorrebbe vedere
2975 l'<em>URL</em> <tt class="docutils literal"><span class=
2976 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2977 connettere via <em>http</em> al server web deve prima
2978 ottenere l'indirizzo IP del <em>server http</em>
2979 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2980 fornisce un IP sbagliato l'utente non potra' raggiungere il
2981 servizio: di fatto e' come se il serve http fosse spento.</p>
2983 <p>Stessa cosa vale per gli altri servizi, come la posta
2984 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2987 <p>Potrebbe verificarsi uno scenario simile a questo: i
2988 vostri server per i siti web funzionano correttamente come i
2989 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2990 e POP3, e tutto il resto. Ma se poi un errore nella
2991 configurazione del DNS non rende raggiungibile l'intero
2992 <em>sito</em>: per l'utente finale e' come se nulla
2995 <p>Infatti quando si parla di un intervento della Polizia
2996 Postale per l'<em>oscuramento</em> di un sito dal punto di
2997 vista pratico questo si traduce generalmente nella rimozione
2998 o mistificazione del record DNS relativo a quel dominio (la
2999 <em>PP</em> ha facolta' di chiedere un simile intervento ai
3000 principali provider internet che forniscono connettivita'
3001 agli utenti italiani, oltre che poter agire direttamente sul
3002 NIC italiano per i domini della TLD <em>.it</em>)</p>
3004 <p>L'operazione di convertire un nome in un indirizzo e'
3005 detta risoluzione DNS, convertire un indirizzo IP in nome e'
3006 detto risoluzione inversa.</p>
3009 Un <em>Registar</em> e' un operatore che ha la facolta'
3010 (accreditamento da parte dell ICANN) di registrare i domini
3011 di secondo livello per gli utenti finali, dietro compenso
3012 di una modica cifra (una decina di euro) che vale come
3013 contributo su base annuale per il mantenimento
3014 dell'infrastruttura.
3017 <div class="section" id="risoluzione-inversa">
3018 <h2><a class="toc-backref" href=
3019 "#id56">5.1 Risoluzione Inversa</a></h2>
3021 <p>Per la risoluzione inversa sono invece i provider di
3022 connettivita' a gestire i DNS: se volete impostare il
3023 <em>PTR</em> associato al vostro indirizzo IP dovete
3024 contattare il vostro provider (tipo <em>telecom</em> per
3025 una connessione ADSL) e <em>non il Registar del vostro
3028 <p>Ad esempio all'IP <tt class=
3029 "docutils literal"><span class=
3030 "pre">212.22.136.248</span></tt> era associato un PTR
3031 <tt class="docutils literal"><span class=
3032 "pre">bender.piffa.net</span></tt>, corrispondente al
3033 record <tt class="docutils literal"><span class=
3034 "pre">212</span></tt> facente parte della zona <tt class=
3035 "docutils literal"><span class=
3036 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
3037 provider Tiscali/Nextra proprietario della classe C
3038 <tt class="docutils literal"><span class=
3039 "pre">212.22.136.0</span></tt>. Se avete un solo IP
3040 conviene lasciare al fornitore la gestire del PTR, ma se
3041 avete a disposizione un'itera classe potete chiedere sempre
3042 al vostro provider che vi <em>deleghi</em> la gestione
3043 della zona tramite i vostri DNS.</p>
3045 <p>Per alcuni servizi, ad esempio la spedizione della posta
3046 elettronica, e' richiedeiesto che venga impostata
3047 correttamente l'associazione tra il PTR dell'indirizzo IP
3048 usato dal server di postai e il record A RR al quale questo
3049 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
3054 <li><a class="reference external" href=
3055 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
3056 2.1 Inconsistent, Missing, or Bad Data</li>
3058 <li><a class="reference external" href=
3059 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
3063 <div class="section" id="nomi-di-dominio">
3064 <h2><a class="toc-backref" href=
3065 "#id57">5.2 Nomi di dominio</a></h2>
3067 <p>Un nome a dominio e' costituito da una serie di stringhe
3068 separate da punti, ad esempio bender.piffa.net. I nomi di
3069 dominio si leggono da destra verso sinistra: <em>TLD</em> o
3070 dominio di primo livello <tt class=
3071 "docutils literal"><span class="pre">net</span></tt>,
3072 secondo livello <tt class="docutils literal"><span class=
3073 "pre">piffa</span></tt>, terzo livello <tt class=
3074 "docutils literal"><span class="pre">bender</span></tt>. Il
3075 dominio di primo livello (o TLD, Top Level Domain,
3076 pronunciato <em>tilde</em> in Italia), per esempio .net o
3077 .it sono limitati e decisi direttamente dall'ente
3078 assegnatario ICANN ( Internet Corporation for Assigned
3079 Names and Numbers).</p>
3081 <p>L'utente finale potra' chiedere l'assegnazione (pagando
3082 un contributo al Register preferito per il mantenimento
3083 delle spese dell'infrastruttura) di un dominio di
3084 <em>secondo</em> livello (es <tt class=
3085 "docutils literal"><span class="pre">piffa</span></tt>) di
3086 una delle varie TLD disponibili (noi italiani diciamo
3087 <em>tildi</em>), sempre che non sia gia' stato assegnato a
3090 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
3091 potra' in stanziare domini di terzo livello (es <tt class=
3092 "docutils literal"><span class="pre">bender</span></tt>) e
3093 anche oltre (es www.andrea.bender.piffa.net). Tali records
3094 saranno mantenuti dall'utente, sotto la sua responsbilita':
3095 se il proprio server DNS non fosse raggiungibile o
3096 risultasse mal configurato gli utenti non potrebbero
3097 risolvere / raggiungere i siti di loro interesse.</p>
3099 <p>Tipicamente si ha almeno un server DNS secondario per
3100 garantire la sussistenza del servizio in caso di guasto del
3101 DNS principale. I secondari <em>replicano</em> i dati
3102 presenti nei DNS principali.</p>
3105 <div class="section" id="tipologie-di-record">
3106 <h2><a class="toc-backref" href=
3107 "#id58">5.3 Tipologie di record</a></h2>
3109 <p>Ad un nome DNS possono corrispondere diversi tipi di
3110 informazioni. Per questo motivo, esistono diversi tipi di
3111 record DNS. Ogni voce del database DNS deve essere
3112 caratterizzata da un tipo. I principali tipi sono:</p>
3115 <li>Record A - Indica la corrispondenza tra un nome ed
3116 uno (o piu') indirizzi IP (per la precisione indirizzi
3117 IPv4, ovvero la versione attualmente in uso).</li>
3119 <li>Record MX - (Mail eXchange) indica a quali server
3120 debba essere inviata la posta elettronica per un certo
3123 <li>Record CNAME - Sono usati per creare un alias, ovvero
3124 per fare in modo che lo stesso calcolatore sia noto con
3125 piu' nomi. Uno degli utilizzi di questo tipo di record
3126 consiste nell'attribuire ad un host che offre piu'
3127 servizi un nome per ciascun servizio. In questo modo, i
3128 servizi possono poi essere spostati su altri host senza
3129 dover riconfigurare i client, ma modificando solo il
3132 <li>Record PTR - Il DNS viene utilizzato anche per
3133 realizzare la risoluzione inversa, ovvero per far
3134 corrispondere ad un indirizzo IP il corrispondente nome a
3135 dominio. Per questo si usano i record di tipo "PTR" (e
3136 una apposita zona dello spazio dei nomi
3139 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
3141 <li>Record SRV - Identificano il server per un
3142 determinato servizio all'interno di un dominio. Possono
3143 essere considerati una generalizzazione dei record
3146 <li>Record TXT - Associano campi di testo arbitrari ad un
3147 dominio. Questi campi possono contenere una descrizione
3148 informativa oppure essere utilizzati per realizzare
3152 <p>Vi sono anche tipi di record "di servizio", necessari al
3153 funzionamento del database distribuito: * Record NS -
3154 Utilizzato per indicare quali siano i server DNS
3155 autoritativi per un certo dominio, ovvero per delegarne la
3156 gestione. * Record SOA - (Start of Authority) usato per la
3157 gestione delle zone DNS.</p>
3160 <div class="section" id="utilizzo">
3161 <h2><a class="toc-backref" href=
3162 "#id59">5.4 Utilizzo</a></h2>
3164 <p>I computer vengono identificati in rete grazie agli
3165 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
3166 utenti come riferimento per i vari server. Ad esempio
3167 sarebbe scomodo riferirsi al motore di ricerca Goggle con
3168 uno dei suoi IP: <tt class="docutils literal"><span class=
3169 "pre">74.125.43.104</span></tt>, e' preferibile usare il
3170 nome di dominio <em>www.google.com</em>:</p>
3171 <pre class="literal-block">
3172 ping -c 1 www.google.com
3173 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
3177 <div class="section" id="risoluzione-dei-nomi-di-dominio">
3178 <h2><a class="toc-backref" href=
3179 "#id60">5.5 Risoluzione dei nomi di
3182 <p>Ci sono vari strumenti per interrogare i server DNS e
3183 ottenere l'indirizzo IP associato al nome di dominio che ci
3185 <pre class="literal-block">
3186 $ host www.piffa.net
3187 www.piffa.net is an alias for piffa.net.
3188 piffa.net has address 65.98.21.97
3189 piffa.net mail is handled by 10 65.98.21.97
3192 $ nslookup www.piffa.net
3193 Server: 192.168.0.10
3194 Address: 192.168.0.10#53
3196 Non-authoritative answer:
3197 www.piffa.net canonical name = piffa.net.
3199 Address: 65.98.21.97
3204 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
3205 ;; global options: +cmd
3207 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
3208 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
3210 ;; QUESTION SECTION:
3211 ;www.piffa.net. IN A
3214 www.piffa.net. 3489 IN CNAME piffa.net.
3215 piffa.net. 3489 IN A 65.98.21.97
3217 ;; AUTHORITY SECTION:
3218 piffa.net. 86289 IN NS ns2.mydomain.com.
3219 piffa.net. 86289 IN NS ns1.mydomain.com.
3220 piffa.net. 86289 IN NS ns4.mydomain.com.
3221 piffa.net. 86289 IN NS ns3.mydomain.com.
3223 ;; ADDITIONAL SECTION:
3224 ns1.mydomain.com. 96208 IN A 64.94.117.193
3225 ns2.mydomain.com. 96208 IN A 64.94.31.67
3226 ns3.mydomain.com. 96208 IN A 66.150.161.137
3227 ns4.mydomain.com. 96208 IN A 63.251.83.74
3229 ;; Query time: 1 msec
3230 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3231 ;; WHEN: Sun May 10 21:23:11 2009
3232 ;; MSG SIZE rcvd: 209
3235 <p>Lo strumento piu' esaustivo e' <tt class=
3236 "docutils literal"><span class="pre">dig</span></tt>,
3237 installabile con il pacchetto <tt class=
3238 "docutils literal"><span class="pre">dnsutils</span></tt>
3242 <div class="section" id="dig">
3243 <h2><a class="toc-backref" href=
3244 "#id61">5.6 Dig</a></h2>
3246 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
3247 "docutils literal"><span class="pre">dig</span></tt> per
3248 l'interrogazione dei DNS Server:</p>
3249 <pre class="literal-block">
3252 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
3253 ;; global options: +cmd
3255 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
3256 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
3258 ;; QUESTION SECTION:
3259 ;www.google.it. IN A
3262 www.google.it. 250683 IN CNAME www.google.com.
3263 www.google.com. 334819 IN CNAME www.l.google.com.
3264 www.l.google.com. 186 IN A 74.125.43.103
3265 www.l.google.com. 186 IN A 74.125.43.104
3266 www.l.google.com. 186 IN A 74.125.43.147
3267 www.l.google.com. 186 IN A 74.125.43.99
3269 ;; AUTHORITY SECTION:
3270 l.google.com. 80856 IN NS f.l.google.com.
3271 l.google.com. 80856 IN NS d.l.google.com.
3272 l.google.com. 80856 IN NS b.l.google.com.
3273 l.google.com. 80856 IN NS c.l.google.com.
3274 l.google.com. 80856 IN NS a.l.google.com.
3275 l.google.com. 80856 IN NS e.l.google.com.
3276 l.google.com. 80856 IN NS g.l.google.com.
3278 ;; Query time: 1 msec
3279 ;; SERVER: 192.168.0.10#53(192.168.0.10)
3280 ;; WHEN: Sun May 10 21:34:47 2009
3281 ;; MSG SIZE rcvd: 255
3284 <dl class="docutils">
3287 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
3288 <em>root server</em> utilizzati. I root server sono i
3289 server che mantengono le informazioni sui domini di primo
3290 livello (TLD) e sono quindi il punto di partenza per
3291 scorrere nella directory dei DNS per recuperare le
3292 informazioni (tipicamente un campo <tt class=
3293 "docutils literal"><span class="pre">A</span></tt> per un
3294 indirizzo IP) che ci servono per raggiungere un certo
3303 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
3304 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
3305 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
3306 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
3307 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
3308 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
3309 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
3310 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
3311 J.ROOT-SERVERS.NET. . 192032 IN NS
3312 D.ROOT-SERVERS.NET.</p>
3317 <dl class="docutils">
3318 <dt>dig @nome_dns</dt>
3320 <dd>Permette di fare una query ad un server dns
3321 particolare. Es: <tt class=
3322 "docutils literal"><span class="pre">dig</span>
3323 <span class="pre">@151.99.25.1</span> <span class=
3324 "pre">www.google.it</span></tt></dd>
3326 <dt>dig MX www.google.it</dt>
3328 <dd>Chiede un campo in particolare, in questo caso il
3331 <dt>dig ANY www.google.it</dt>
3333 <dd>Chiede tutti i campi, non solo i campi
3336 <dt>dig -x 74.125.43.104</dt>
3338 <dd>Effettua una richiesta inversa: dall'IP al PTR
3343 <div class="section" id="resolv-conf">
3344 <h2><a class="toc-backref" href=
3345 "#id62">5.7 resolv.conf</a></h2>
3347 <p>Il file <tt class="docutils literal"><span class=
3348 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
3349 sul dns usato dal sistema, in genere anche altre
3350 applicazioni che devono effettuare query DNS leggono
3351 resolv.conf per conoscere l'ubicazione del DNS.</p>
3353 <p>/etc/resolv.conf:</p>
3357 <li><tt class="docutils literal"><span class=
3358 "pre">nameserver</span></tt>: indica il nameserver da
3359 utilizzare, indicato con l'indirizzo IP.</li>
3361 <li><tt class="docutils literal"><span class=
3362 "pre">domain</span></tt>: indica il nome di dominio
3363 della rete attuale, vedi voce successiva.</li>
3365 <li><tt class="docutils literal"><span class=
3366 "pre">search</span></tt>: nome di dominio usato dalla
3367 rete sul quale cercare gli hosts. Ad esempio se
3368 impostato su <tt class="docutils literal"><span class=
3369 "pre">piffa.net</span></tt> pingando l' host <tt class=
3370 "docutils literal"><span class="pre">bender</span></tt>
3371 viene automaticamente fatto un tentativo di ricerca per
3372 <tt class="docutils literal"><span class=
3373 "pre">bender.piffa.net</span></tt>.</li>
3377 <p>Predisponendo l'infrastruttura di rete della vostra LAN
3378 e' consigliabile impostare sempre almeno un DNS cache sul
3379 vostro server locale per i vari client. In questo modo in
3380 caso di malfunzionamento del DNS o necessita' di
3381 intervenire / sostituire i DNS non sara' piu' necessario
3382 dover reimpostare ogni singolo client della LAN: bastera'
3383 intervenire sul server DNS cache, ad esempio per utilizzare
3384 un nuovo forwarder, o modificare al volo un record DNS. La
3385 modifica, anche detta <em>mascheramento</em>, di un record
3386 come il <em>server smtp</em> o un <em>MX</em> potrebbe
3387 tirarvi rapidamente fuori dai guai nel caso di un problema
3388 improvviso con la posta elettronica o qualunque altro
3389 servizio che possiate reindirizzare col DNS.</p>
3391 <p>Utilizzare un server DHCP e una DNS cache come
3392 <tt class="docutils literal"><span class=
3393 "pre">Dnsmasq</span></tt> possono permettervi di risolvere
3394 al volo molte delle problematiche relative alla
3395 configurazione della vostra LAN: ad esempio dover
3396 intervenire manualmente su decine di client per modificare
3397 le impostazioni di SMTP | gateway | DNS | proxy.</p>
3399 <p>Si veda anche la pagina man di resolv.conf.</p>
3401 <div class="warning">
3402 <p class="first admonition-title">Avvertenza</p>
3404 <p class="last">Attenzione: se si usa un client DHCP, ppp
3405 (ADSL compresa) o simile questo file potrebbe' essere
3406 riscritto automaticamente in base a quanto ottenuto dal
3407 DHCP. Si veda la documentazione del pacchetto <tt class=
3408 "docutils literal"><span class=
3409 "pre">resolvconf</span></tt>.</p>
3413 <div class="section" id="etc-hosts">
3414 <h2><a class="toc-backref" href=
3415 "#id63">5.8 /etc/hosts</a></h2>
3417 <p>Tabella statica per l'associazione tra IP e nomi di
3419 <pre class="literal-block">
3424 127.0.0.1 localhost.localdomain localhost 10.10.208.162
3425 daniela daniela.piffa.net 10.10.208.254 mirror
3426 mirror.piffa.net 91.191.138.15 thepiratebay.org
3427 192.168.0.11 chrome chrome.mydomain.com
3430 <p>Il contenuto del file e' un associazione tra un
3431 <em>IP</em> e stringhe di testo (anche piu' di una per IP)
3432 es: <tt class="docutils literal"><span class=
3433 "pre">mirror</span></tt> o veri e propi nomi di dominio
3434 <tt class="docutils literal"><span class=
3435 "pre">mirror.piffa.net</span></tt>. Si puo inserire un nome
3436 semplice come <em>casa</em> per riferirsi ad un host che si
3437 ha necessita' di contattare spesso, oppure mappare un nome
3438 di dominio completo su un indirizzo IP.</p>
3440 <p>Il problema e' la gestione di questo file su molti
3441 hosts: quando gli host cambiano IP si devono aggiornare
3442 manualmente i records, operazione in se' non
3443 particolarmente gravosa ma che andra' fatta per ogni client
3444 della vostra LAN. Un metodo semplice per distribuire questo
3445 file e' utilizzare <tt class=
3446 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
3447 questo infatti legge e onora il file <tt class=
3448 "docutils literal"><span class="pre">hosts</span></tt> che
3449 avete prodotto e lo rende disponibile ai clients tramite le
3452 <p>Dnsmasq lavora come un server DNS, i vostri client lo
3453 interrogheranno per tradurre nomi di host e domini in
3454 indirizzi IP, risolvendo il problema della
3455 <em>distribuzione</em> del file <tt class=
3456 "docutils literal"><span class="pre">hosts</span></tt> tra
3457 molteplici clients. Infatti il servizio DNS indica appunto
3458 una <em>directory distribuita</em> per la risoluzione dei
3459 nomi di dominio, risolvendo i problemi dell'aggiornamento e
3460 diffusione dei continui cambiamenti di questa.</p>
3462 <p>Modificare la risoluzione di un nome di dominio
3463 esistente (ad esempio riconducendola a un IP interno) e' un
3464 modo drastico e funzionale per <em>annullarlo</em>
3465 rendendolo non disponibile alla propria rete locale. Ad
3466 esempio aggiungere al file <tt class=
3467 "docutils literal"><span class=
3468 "pre">/etc/hosts</span></tt>:</p>
3469 <pre class="literal-block">
3470 127.0.0.1 www.facebook.com
3473 <p>Impedira' agli utenti della LAN di raggiungere
3474 <em>facebook</em>, ora reindirizzato a <tt class=
3475 "docutils literal"><span class=
3476 "pre">localhost</span></tt>.</p>
3478 <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
3479 server HTTP pubblico usato per i downloads (ad esempio un
3480 mirror della propia distribuzione come <tt class=
3481 "docutils literal"><span class=
3482 "pre">ftp.it.debian.org</span></tt>) a un equivalente
3483 mirror creato all'interno della rete locale, riducendo il
3484 traffico verso l'esterno e aumentando notevolmente la
3485 velocita' di scaricamento.</p>
3488 <div class="section" id="hostname">
3489 <h2><a class="toc-backref" href=
3490 "#id64">5.9 Hostname</a></h2>
3492 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3493 (e modificabile) con il comando <tt class=
3494 "docutils literal"><span class="pre">hostname</span></tt>.
3495 Quando utilizzate a una shell su un host in genere
3496 l'hostname compare nel prompt della shell.</p>
3498 <p>Per visualizzare il nome dell'host su cui si sta
3499 operando si digiti semplicemnte <tt class=
3500 "docutils literal"><span class="pre">hostname</span></tt>,
3501 lo stesso comando con un oggetto modifica temporaneamente
3502 il nome dell'host. Per modificare in modo permanente il
3503 nome del computer si modifichi il contenuto del file
3504 <tt class="docutils literal"><span class=
3505 "pre">/etc/hostname</span></tt>.</p>
3507 <p>Si faccia attenzione a non aver un hostname puramente
3508 numerico: ad es. <tt class="docutils literal"><span class=
3509 "pre">161</span></tt>. E' opportuno che il nome sia
3510 comunque un alfanumerico: <tt class=
3511 "docutils literal"><span class="pre">host-161</span></tt> o
3514 <div class="section" id="fqdn">
3515 <h3><a class="toc-backref" href=
3516 "#id65">5.9.1 FQDN</a></h3>
3518 <p>Per semplicita' gli host sono generalemente
3519 raggiungibili dall'esterno mappando il loro IP su un nome
3520 di dominio FQDN: fully qualified domain name, composto
3521 generalmente da <em>hostname</em>.``domain-name``, ad es.
3522 <em>bender</em>.``piffa.net``.</p>
3524 <p>Alcuni servizi internet fanno affidamento sul PTR
3525 dell'IP del server per cercare una conferma che il
3526 <em>servizio</em> sia veramente chi afferma di essere (ad
3529 <p>Non e' automatico che un servizio, ad esempio un
3530 server di posta, si qualifichi leggendo il contenuto del
3531 file <tt class="docutils literal"><span class=
3532 "pre">hostname</span></tt> aggiungendo come suffisso il
3533 dominio della rete di cui fa parte l' host: a volte
3534 questo parametro puo' essere specificato nel file di
3535 configurazione del servizio:</p>
3536 <pre class="literal-block">
3537 * Squid (HTTP proxy): ``visible_hostname``
3539 * Postfix (SMTP server): ``myhostname``
3542 <p>I motivi sono diversi, senza entrare nel dettaglio dei
3543 vari protocolli si pensi comunque che un host ha sempre
3544 un solo nome, ma puo' avere un numero variabile di
3545 <em>device di rete</em> sia fisici che virtuali con
3546 relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
3552 <div class="section" id="dnsmasq">
3553 <h1><a class="toc-backref" href=
3554 "#id66">6 DNSmasq</a></h1>
3556 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3557 forwarder, server DHCP, e' caratterizzato dalla facilita' di
3558 configurazione, limitato uso di risorse, adattabilita' a
3559 connessioni <em>dinamiche</em> come ADSL o altre punto a
3560 punto (anche via cellulari) per condividere rapidamente la
3561 rete (cosa molto utile se ci dovesse trovare a ridare
3562 connettetivita' a una rete momentaneamente sprovvista), dalla
3563 possibilita' di modificare rapidamente i record DNS serviti
3564 alla rete anche grazie alla distribuzione del file <tt class=
3565 "docutils literal"><span class="pre">/etc/hosts</span></tt>
3566 locale. Puo' essere anche utilizzato come <cite>server per il
3568 <http://www.debian-administration.org/articles/478>_</cite>
3571 <p>Dnsmasq e' un interessante alternativa all'uso del server
3572 DNS Bind in modalita' <em>forwarding e cache-only</em> (non
3573 autoritativo) accompagnato dal server DHCPd. I vantaggi
3577 <li>Leggerezza: puo' essere fatto girare su una macchina
3578 relativamente debole in caso di bisogno.</li>
3580 <li>Rapidita' di configurazione (in particolare per servire
3581 dei record A / MX alla rete, modificando al volo i valori
3582 originali ospitati sul server DNS pubblico).</li>
3584 <li>Ben integrato con connessioni PPP : e' ingrado di
3585 rilevare i cambiamenti dei dns suggeriti e impostarli come
3586 forwarders (utile se dovete rendere disponibile rapidamente
3587 una connessione a internet a una rete in difficolta').</li>
3590 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3591 particolare quando si deve intervenire in una rete
3592 pre-esistente in cui il server principale e' in crisi: si
3593 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3594 <em>mascherare</em> i servizi al momento non disponibili.
3595 Molto utile per scopi didattici, sopratutto per testare
3596 server SMTP impostando al volo i campi MX per nomi di dominio
3599 <div class="section" id="configurazione">
3600 <h2><a class="toc-backref" href=
3601 "#id67">6.1 Configurazione</a></h2>
3603 <p>Vediamo alcune direttive di basi del file di
3604 configurazione <tt class="docutils literal"><span class=
3605 "pre">/etc/dnsmasq.conf</span></tt> utili per la
3606 configurazione sia del DNS cache che per il DHCP
3609 <dl class="docutils">
3610 <dt>domain-needed</dt>
3612 <dd>Non inoltrare query ai server DNS esterni per nomi
3613 semplici (es andrea, portatile, pippo) che verranno
3614 risolti solo in locale o causeranno direttamente una
3615 risposta <em>not found</em> .</dd>
3619 <dd>Simile alla voce precedente ma per i reverse
3624 <dd>Nome di dominio della rete da passare ai client.</dd>
3626 <dt>expand_hosts</dt>
3628 <dd>Aggiunge il <tt class="docutils literal"><span class=
3629 "pre">nome</span> <span class="pre">host</span></tt> (
3630 <tt class="docutils literal"><span class=
3631 "pre">/etc/hostname</span></tt>) dei client al nome di
3632 dominio per qualificarli in rete, senza bisogno di dover
3633 comporre a un elenco statico di record nel file
3634 <tt class="docutils literal"><span class=
3635 "pre">/etc/hosts</span></tt> o nello stesso file di
3636 configurazione di dnsmasq. Es: se un vostro client si
3637 chiama <tt class="docutils literal"><span class=
3638 "pre">chrome</span></tt> e il vostro dominio <tt class=
3639 "docutils literal"><span class=
3640 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
3641 il campo <em>A</em> per il dominio <tt class=
3642 "docutils literal"><span class=
3643 "pre">chrome.piffa.net</span></tt> diretto all'ip che
3644 verra' assegnato al client.</dd>
3648 <div class="section" id="dhcp">
3649 <h2><a class="toc-backref" href=
3650 "#id68">6.2 DHCP</a></h2>
3652 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3653 al file di configurazione il <em>range</em> degli IP che si
3654 vuole assegnare ai client con il <em>lease time</em> (tempo
3655 di rilascio: quanto a lungo saranno validi gli IP
3656 assegnati) espresso in ore.</p>
3658 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3659 presente <strong>un solo server DHCP</strong>, o per meglio
3660 dire qualunque server DHCP ascolta sul broadcast <tt class=
3661 "docutils literal"><span class=
3662 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
3663 un pacchetto di richiesta DHCP. Quindi non fate partire
3664 inavvertitamente un server DHCP in una rete gia' servita e
3665 <strong>non vi azzardate ad andare in giro con un portatile
3666 con un server DHCP attivo</strong> nelle reti altrui.
3667 Questo vale anche per i laboratori di informatica dei corsi
3668 di reti: non fate partire il vostro server DHCP se siete
3669 collegati alla rete interna!</p>
3671 <p>/etc/dnsmasq.conf (riga 118):</p>
3672 <pre class="literal-block">
3673 dhcp-range=192.168.0.20,192.168.0.50,24h
3677 <div class="section" id="dns-cache">
3678 <h2><a class="toc-backref" href=
3679 "#id69">6.3 DNS cache</a></h2>
3681 <p>Dnsmasq lavora di default come cache dns: inserire al
3682 file <tt class="docutils literal"><span class=
3683 "pre">/etc/resolv.conf</span></tt> il nameserver localhost
3684 in cima alla lista dei <em>nameserver</em> disponibili.</p>
3687 nameserver 127.0.0.1
3690 <p>Questo pero' potrebbe essere problematico se un altro
3691 servizio, ad esempio il DHCP client, riscrive il contenuto
3692 del file <tt class="docutils literal"><span class=
3693 "pre">/etc/resolv.conf</span></tt>. Per superare il
3694 problema si aggiunga (riga 20) al file di configurazione
3695 <tt class="docutils literal"><span class=
3696 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
3697 <pre class="literal-block">
3698 prepend domain-name-servers 127.0.0.1;
3701 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3702 (per la connessione ADSL) a intervenire sul file <tt class=
3703 "docutils literal"><span class=
3704 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
3705 <tt class="docutils literal"><span class=
3706 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3707 <tt class="docutils literal"><span class=
3708 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
3709 internet e' ADSL raramente dovreste aver bisogno di
3710 cambiare i DNS una volta impostati (a meno che non usiate
3715 <div class="section" id="bind-dns-autoritativo">
3716 <h1><a class="toc-backref" href=
3717 "#id70">7 Bind : DNS Autoritativo</a></h1>
3719 <p>Le soluzioni viste possono bastare per la rete locale o
3720 per fare delle prove, ma prima o poi verra' il momento in cui
3721 si e' chiamati a gestire dei domini su internet: lo standard
3722 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3725 <p>Installare i pacchetti:</p>
3726 <pre class="literal-block">
3730 <div class="section" id="id5">
3731 <h2><a class="toc-backref" href=
3732 "#id71">7.1 DNS cache</a></h2>
3734 <p>Bind appena installato funzionera' come DNS cache: si
3735 faccia un test con un <tt class=
3736 "docutils literal"><span class="pre">dig</span>
3737 <span class="pre">@localhost</span></tt> . Bind a
3738 differenza di Dnsmasq e' autonomo: non ha bisogno di
3739 forwardare (inoltrare) le query a un DNS esterno: queste
3740 verranno risolte direttamente da Bind partendo dai <em>DNS
3741 root servers</em>.</p>
3743 <p>E' comunque possibile impostare dei DNS forwarders,
3744 tipicamente i DNS server forniti dal proprio provider, per
3745 velocizzare le query:</p>
3747 <p>/etc/bind/named.conf.options (riga 13):</p>
3748 <pre class="literal-block">
3754 <p>Nel caso si voglia usare Bind solo come server DNS cache
3755 per la propria LAN senza ospitare delle zone DNS pubbliche
3756 sara' il caso di limitare gli accessi al server alla sola
3759 <p>/etc/bind/named.conf.options (riga 19):</p>
3760 <pre class="literal-block">
3761 // Se il proprio server ha IP 10.10.208.254
3762 // sulla rete LAN privata:
3763 listen-on { 10.10.208.254; }
3766 <p>E non si lasci il server in ascolto su uno degli
3767 eventuali indirizzi IP pubblici.</p>
3769 <p>Se questo non fosse possibile si puo' sempre lavorare su
3770 una <em>acl</em>:</p>
3772 <p>/etc/bind/named.conf</p>
3773 <pre class="literal-block">
3775 10.10.208.0/24 ; 127.0.0.0/8 ;
3779 <p>Per poi aggiungere all'interno della stanza options la
3780 direttiva che abilita' l'entita' <tt class=
3781 "docutils literal"><span class=
3782 "pre">localnet</span></tt>:</p>
3784 <p>/etc/bind/named.conf.options</p>
3785 <pre class="literal-block">
3786 allow-query {"localnet" ;} ;
3790 <div class="section" id="ospitare-una-zona">
3791 <h2><a class="toc-backref" href=
3792 "#id72">7.2 Ospitare una zona</a></h2>
3794 <p>Se avete acquistato un nome di dominio e vi serve un
3795 software DNS per gestirlo Bind e' la scelta piu' diffusa.
3796 Ora vedremo come configurare una <em>zona</em> (come
3797 piffa.net) in modo che Bind sia autoritativoper questa,
3798 rispondendo alle query DNS di tutta la rete internet.</p>
3800 <div class="section" id="named-conf-local">
3801 <h3><a class="toc-backref" href=
3802 "#id73">7.2.1 named.conf.local</a></h3>
3804 <p>Prima di tutti impostiamo il server bind per gestire
3805 la zona, per non fare confusione e' opportuno inserire le
3806 propie zone DNS nel file <tt class=
3807 "docutils literal"><span class=
3808 "pre">named.conf.local</span></tt> e non in <tt class=
3809 "docutils literal"><span class=
3810 "pre">named.conf</span></tt>.</p>
3812 <p>named.conf.local:</p>
3813 <pre class="literal-block">
3815 // Do any local configuration here
3818 // Consider adding the 1918 zones here, if they are not used in your
3820 //include "/etc/bind/zones.rfc1918";
3824 file "/etc/bind/pz/piffa.net";
3828 <dl class="docutils">
3829 <dt>type master</dt>
3831 <dd>Il nostro server DNS sara' il principale, al quale
3832 poi potremo affiancare dei DNS secondari nel caso
3833 questo non sia disponibile.</dd>
3835 <dt>file "/etc/bind/pz/piffa.net"</dt>
3837 <dd>Dove verranno inserite le informazioni vere e
3838 propie di questa zona.</dd>
3842 <div class="section" id="configurazione-della-zona">
3843 <h3><a class="toc-backref" href=
3844 "#id74">7.2.2 Configurazione della
3847 <p>Ora dovremo preparare il file contenente i record DNS
3848 della zona <em>piffa.net</em>, come abbiamo indicato
3849 prima questi saranno contenuti nel file <tt class=
3850 "docutils literal"><span class=
3851 "pre">/etc/bind/pz/piffa.net</span></tt> . Tenere le zone
3852 dentro una sottocartella e' buona abitudine, usare
3853 <tt class="docutils literal"><span class=
3854 "pre">pz</span></tt> per queste e' una vecchia
3858 <pre class="literal-block">
3859 ; Zona per il dominio di secondo livello piffa.net
3862 @ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
3864 8H ; refresh (8 hours)
3865 2H ; retry (2 hours)
3866 4W ; expire (4 weeks)
3867 1D ; minimum (1 day)
3874 TXT "Piffanet main site"
3880 test.piffa.net. A 94.23.63.105
3881 *.piffa.net. A 94.23.63.105 ; *catch all domain
3886 <p>All'interno di questo file si possono inserire dei
3887 commenti con il carattere <tt class=
3888 "docutils literal"><span class="pre">;</span></tt>
3889 (punto-e-virgola), si faccia attenzione alla rigida
3890 sintassi: apertura e chiusura delle parentesi tonde nella
3891 parte <tt class="docutils literal"><span class=
3892 "pre">IN</span> <span class="pre">SOA</span></tt>, uso
3893 del <tt class="docutils literal"><span class=
3894 "pre">punto</span></tt> finale per precisare un nome di
3895 dominio specifico (<em>FQDN</em>: Fully-qualified Domain
3896 Name) come <tt class="docutils literal"><span class=
3897 "pre">test.piffa.net.</span></tt> a differenza degli
3898 altri domini di terzo livello come <tt class=
3899 "docutils literal"><span class=
3900 "pre">pop,imap,smtp</span></tt> .</p>
3902 <p>La zona inizia con una direttiva <tt class=
3903 "docutils literal"><span class="pre">$TTL</span>
3904 <span class="pre">3D</span></tt> (RFC 2308) che indica la
3905 durata (in questo caso tre giorni) che ogni record
3906 dovrebbe avrebbe nella cache degli altri serber DNS.
3907 Questo valore dovrebbe essere superiore a un giorno, se
3908 non modificate spesso i valori dei vostri record DNS e'
3909 consigliabile settarlo a 2/3 settimane in modo da
3910 limitare la frequenza delle query al propio server.
3911 Questo parametro puo' essere modificato per singoli
3913 <pre class="literal-block">
3914 $TTL 3D ; 3 giorni: default se non specificato altrimenti
3915 rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
3916 lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
3917 normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
3920 <p>Segue poi il nome della zona, indicato con la
3921 <tt class="docutils literal"><span class=
3922 "pre">@</span></tt> per richiamare la zona originale
3923 precisata nel file <tt class=
3924 "docutils literal"><span class=
3925 "pre">named.conf.options</span></tt> . Segue il campo
3926 <tt class="docutils literal"><span class=
3927 "pre">SOA</span></tt>.</p>
3929 <div class="section" id="soa-start-of-authority-record">
3930 <h4><a class="toc-backref" href=
3931 "#id75">7.2.2.1 SOA: Start of
3932 Authority Record</a></h4>
3934 <p>Il record SOA puo' comparire solo una volta in una
3935 zona, contiene informazioni relative all'autorita' del
3938 <dl class="docutils">
3939 <dt>ns1.piffa.net. name-server</dt>
3941 <dd>primary master DNS di questo dominio.</dd>
3943 <dt>hostmaster.piffa.net. email-addr</dt>
3945 <dd>email-addr: indirizzo email della persona
3946 responsabile di questa zona, il primo punto viene
3947 tradotto in una <em>chiocciola</em> <tt class=
3948 "docutils literal"><span class="pre">@</span></tt>
3949 dato che questo carattere ha un'altro utilizzo
3950 all'interno di questo file. Il referente della zona
3951 <strong>deve</strong> essere un email valido e
3952 controllato, come consuetudine si usa <tt class=
3953 "docutils literal"><span class=
3954 "pre">hostmaster@dominio.tilde</span></tt> .</dd>
3956 <dt>200905245 serial number</dt>
3958 <dd>Questo valore serve per indicare quando e' stato
3959 modificato questo file di configurazione, secondo il
3960 formato <tt class="docutils literal"><span class=
3961 "pre">yyyymmddss</span></tt>: <tt class=
3962 "docutils literal"><span class="pre">yyyy</span></tt>
3963 = anno, ''mm'' = mese, ''dd'' = giorno, ''ss'' =
3964 seriale. Il seriale che deve essere sempre
3965 specificato anche per una cifra, va incrementato di
3966 una unita' nel caso vengano fatte piu' modifiche
3967 <em>nello stesso giorno</em>.</dd>
3971 <dd>Indica ai DNS secondari quanto tempo attendere
3972 per cercare di aggiornare i loro dati con il DNS
3977 <dd>Intervallo di tempo per il DNS slave (secondario)
3978 da aspettare prima di cercare di ricontattare il
3979 <em>master</em> in caso di problemi col
3980 <em>refresh</em>.</dd>
3984 <dd>Indica quando i dati dei dns secondarinon sono
3985 piu' autoritativi in caso di impossibilita' degli
3986 <em>slaves</em> di ri-aggiornarsi con il
3987 <em>master</em>. Consigliato un valore di 2/4
3992 <dd>Questo valore indicava il TTL fino alla versione
3993 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
3994 durata del <em>negative caching</em>, quanto i
3995 resolvers (ad esempio un server dns cache) puo'
3996 mantenere un record <em>negativo</em> (che non indica
3997 la corrispondenza tra un nome di dominio e un ip, ma
3998 la non esistenza del record). Nell'uso per il
3999 negative caching viene fissato un valore massimo di 3
4000 ore dalla RFC 2308.</dd>
4004 <div class="section" id="altri-campi">
4005 <h4><a class="toc-backref" href=
4006 "#id76">7.2.2.2 Altri campi:</a></h4>
4008 <p>All'interno della zona possono essere utilizati vari
4009 tipi di records (RR):</p>
4011 <dl class="docutils">
4014 <dd>Informazioni testuali associate ad un record</dd>
4018 <dd>Name Server della zona. Non deve essere un
4023 <dd>Indirizzo ipv4 da associare al record</dd>
4027 <dd>Indirizzo ipv6 da associare al record</dd>
4031 <dd>Canonical Name: un alias per un host: ad esempio
4032 per il dominio piffa.net possiamo settare degli alias
4033 come <tt class="docutils literal"><span class=
4034 "pre">www.piffa.net,</span> <span class=
4035 "pre">http.piffa.net,</span> <span class=
4036 "pre">virtual.piffa.net,</span> <span class=
4037 "pre">ftp.piffa.net,</span> <span class=
4038 "pre">imap.piffa.net</span></tt>. Comodo quando
4039 diversi alias sono sempre riferiti allo stesso
4044 <dd>Mail Exchanger: server di posta che si occupera'
4045 della posta elettronica per questo dominio.E'
4046 opportuno avere almeno un server di posta di back-up,
4047 per indicare la priorita' di un MX rispettoad un
4048 altro si usa un valore di 2 cifre: il valore piu'
4049 basso indica priorita' piu' bassa. Es: <tt class=
4050 "docutils literal"><span class=
4051 "pre">MX</span> <span class=
4052 "pre">10</span> <span class=
4053 "pre">smtp.piffa.net.</span></tt> per il server SMTP
4054 principale e <tt class=
4055 "docutils literal"><span class="pre">MX</span>
4056 <span class="pre">40</span> <span class=
4057 "pre">smtp2.piffa.net</span></tt> per il secondario.
4058 Non deve essere un cname.</dd>
4062 <dd>Reverse look-up, usato per la mappatura inversa
4063 di un indirizzo ip a una stringa identificativa
4064 dell'host. Si noti che per poter modificare questi
4065 record si deve avere <em>in gestione</em> la <em>zona
4066 IP</em>, se cosi' non fosse si dovra' chiedere al
4067 propio provider la modifica di questo record per il
4068 propio ip. Links: <a class="reference external" href=
4069 "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
4075 <div class="section" id="dns-slave">
4076 <h2><a class="toc-backref" href=
4077 "#id77">7.3 DNS slave</a></h2>
4079 <p>Data l'importanza del servizio DNS e' necessario avere
4080 ridondanza per i server DNS che ospitano i vostri dati: in
4081 caso di indisponibilita' del server <em>master</em> (nel
4082 caso fosse il solo a tenere i dati questo comporterebbe la
4083 <em>scomparsa</em> di tutti i servizi / host da esso
4084 seviti!) il client potrebbe contattare uno degli
4087 <p>Gli slave recuperano i dati dei recordos RR direttamente
4088 dal master e non sara' quindi necessario dover mantenere
4089 manualmente il file di configurazione della zona sugli
4090 slaves, ogni volta che aggiorneremo il master questi dati
4091 si propaghera' agli slaves automaticamente.</p>
4093 <p>Per attivare uno <em>slave</em> per la nostra zona di
4094 esempio <tt class="docutils literal"><span class=
4095 "pre">piffa.net</span></tt> si inserisca nel file
4096 <tt class="docutils literal"><span class=
4097 "pre">named.conf.local</span></tt> dello slave server:</p>
4098 <pre class="literal-block">
4101 file "/etc/bind/pz/piffa.net";
4102 masters { 192.168.0.1; };
4106 <p>Facendo ripartire Bind il file <tt class=
4107 "docutils literal"><span class=
4108 "pre">/etc/bind/pz/piffa.net</span></tt> viene creato
4109 automaticamente.</p>
4111 <p>Segue un estratto di <tt class=
4112 "docutils literal"><span class=
4113 "pre">/var/log/syslog</span></tt> al <tt class=
4114 "docutils literal"><span class="pre">restart</span></tt> di
4115 <tt class="docutils literal"><span class=
4116 "pre">bind9</span></tt> sullo slave:</p>
4117 <pre class="literal-block">
4118 ... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
4119 ... slave named[2256]: running
4120 ... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
4121 ... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
4122 ... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
4125 <div class="warning">
4126 <p class="first admonition-title">Avvertenza</p>
4128 <p class="last">Bind9 (versione 9.3 presente in Debian
4129 Lenny) richiede una esplicita autorizzazione alla
4130 notifica per lo stesso server slave, che in fase di avvio
4131 interroghera' (inviando un notify) se' stesso per
4132 valutare se i dati relativi alla zona di cui e' slave
4133 sono aggiornati. Si aggiunga quindi al file <tt class=
4134 "docutils literal"><span class=
4135 "pre">/etc/bind/named.conf.options</span></tt> dello
4136 slave: <tt class="docutils literal"><span class=
4137 "pre">allow-notify</span> <span class="pre">{</span>
4138 <span class="pre">192.168.0.1;</span> <span class=
4139 "pre">};</span></tt> all'interno della stanza <tt class=
4140 "docutils literal"><span class="pre">options</span></tt>,
4141 in cui l'inidirizzo IP inserito e' quello dello stesso
4146 <div class="section" id="aggiornamento-dinamico-nsupdate">
4147 <h2><a class="toc-backref" href=
4148 "#id78">7.4 Aggiornamento dinamico:
4151 <p>Dalla versione 8 di Bind e' dsponibile l'utility
4152 <tt class="docutils literal"><span class=
4153 "pre">nsupdate</span></tt> (disponibile nel pacchetto
4154 <tt class="docutils literal"><span class=
4155 "pre">dnsutils</span></tt>) per aggiornare automaticamente
4156 i record di una zona secondo il paradigma client / server (
4157 RFC2136 ) . Posto che abbiate a disposizione un server DNS
4158 Bind on-line su un indirizzo IP fisso e un zona da gestire
4159 (che potrebbe essere anche solo la delega di un dominio di
4160 terzo livello come <em>casa.miodominio.net</em>) sara'
4161 possibile aggiornare automaticamente i record che tirano a
4162 degli indirizzi IP <em>pubblici ma dnamici</em>, come
4163 quelli spesso messi a disposizione dei provider per le
4164 connessioni ad internet residenziali, in modo da poter
4165 rendere sempre raggiungibile la vostra workstation a casa
4166 anche dopo un aggiornamento dell'ip dinamico associato alla
4169 <p>L'auenticazione del client nsupdate che avra' la
4170 possibilita' di aggiornare il server DNS master avviene
4171 tramite <em>Transaction signatures</em> (TSIG, RFC2845)
4172 usando un algoritmo di criptazione dati asimmetrico
4173 <em>HMAC-MD5</em> : generata una coppia di chiavi sul
4174 client / nsupdate con l'utility si dovra' trasferire la
4175 chiave pubblica sul server <em>master</em>, che verra'
4176 configurato per onorare gli aggiornamenti (eliminazione e
4177 inserimento di record RR) autenticati dalla chiave
4180 <div class="section" id="configurazione-client-nsupdate">
4181 <h3><a class="toc-backref" href=
4182 "#id79">7.4.1 Configurazione client
4185 <p>Sul client, sul quale non deve essere necessariamente
4186 installato un server DNS Bind ma la sola utility
4187 <tt class="docutils literal"><span class=
4188 "pre">nsupdate</span></tt>, generiamo la coppia di chiavi
4189 con l'utility <tt class="docutils literal"><span class=
4190 "pre">dnssec-keygen</span></tt> installabile tramite il
4191 pacchetto <tt class="docutils literal"><span class=
4192 "pre">bind9utils</span></tt>:</p>
4193 <pre class="literal-block">
4194 dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
4197 <p>Otterremo le due chiavi <tt class=
4198 "docutils literal"><span class=
4199 "pre">Khome.piffa.net.+157+04331.key</span>
4201 "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
4202 chiave pubblica dovra' essere resa noto al server master
4203 che ricevera' l'update dei records.</p>
4206 <div class="section" id=
4207 "configurazione-server-riconoscimento-chiave">
4208 <h3><a class="toc-backref" href=
4209 "#id80">7.4.2 Configurazione server:
4210 riconoscimento chiave</a></h3>
4212 <dl class="docutils">
4213 <dt>Per rendere nota al server la chiave pubblica
4214 generata sul client si aggiunga quindi al file
4215 <tt class="docutils literal"><span class=
4216 "pre">/etc/bind/named.conf</span></tt> sul
4220 <dl class="first last docutils">
4221 <dt>key home.piffa.net. {</dt>
4223 <dd>algorithm HMAC-MD5; secret
4224 "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
4225 Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
4231 <p class="first admonition-title">Nota</p>
4233 <p class="last">La parte <tt class=
4234 "docutils literal"><span class=
4235 "pre">secret</span></tt>, che potete leggere
4236 direttamente nel file *.key della chiave genearta, e'
4237 scritto <em>tutto sulla stessa riga</em> senza ritorni
4242 <div class="section" id="server-gestione-dell-intera-zona">
4243 <h3><a class="toc-backref" href=
4244 "#id81">7.4.3 Server: gestione
4245 dell'intera zona</a></h3>
4247 <p>Sul server modifichiamo il file di configurazione
4248 <tt class="docutils literal"><span class=
4249 "pre">named.conf.local</span></tt> della zona della quale
4250 vogliamo concedere l'aggiornamento al client:</p>
4251 <pre class="literal-block">
4254 file "/etc/bind/pz/piffa.net" ;
4261 <dl class="docutils">
4262 <dt>Sara' necessario assicurarsi che il demone di Bind
4263 sia in grado di modificare il file <tt class=
4264 "docutils literal"><span class=
4265 "pre">/etc/bind/pz/piffa.net</span></tt>: dato che
4266 questo file ora sara' gestito da lui si proceda a
4267 cedergli la propieta' del file::</dt>
4269 <dd>chown bind /etc/bind/pz/piffa.net</dd>
4272 <p>Altro problema che si potrebbe porre: gli orologi di
4273 sistema dei due host devono essere sincronizzati per
4274 poter valutare l'opportunita' di un aggiornamento: si
4275 consigla di installare su entrambi l'utility <tt class=
4276 "docutils literal"><span class="pre">ntpdate</span></tt>
4277 e di eseguirla facendo riferimento ai time server di
4279 <pre class="literal-block">
4280 apt-get install ntpdate
4284 <p>Ora possiamo provare dal client a effettuare
4285 l'iserimento di un record per testarne il
4287 <pre class="literal-block">
4288 # nsupdate -k Khome.piffa.net.+157+04331.private -v
4289 > server ns1.piffa.net
4290 > update add home.piffa.net. 86400 A 192.168.0.2
4292 Outgoing update query:
4293 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
4294 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
4296 home.piffa.net. 86400 IN A 192.168.0.1
4302 <p>Per comprendere meglio l'uso dell'utility <tt class=
4303 "docutils literal"><span class="pre">nsupdate</span></tt>
4304 si consiglia la lettura della relativa pagina man. Nella
4305 prima riga viene invocato il comando <tt class=
4306 "docutils literal"><span class="pre">nsupdate</span></tt>
4307 impostando col flag <tt class=
4308 "docutils literal"><span class="pre">-k</span></tt> la
4309 chiave privata generata precedentemente, con <tt class=
4310 "docutils literal"><span class="pre">server</span></tt>
4311 si imposta quale server NS autoritario della zona (che
4312 abbiamo precedentemente configurato per ricevere gli
4313 aggiornamenti) vogliamo contattare. Alla riga sucessiva
4314 <tt class="docutils literal"><span class=
4315 "pre">update</span></tt> viene aggiunto un record
4316 <tt class="docutils literal"><span class=
4317 "pre">A</span></tt> per la il dominio <tt class=
4318 "docutils literal"><span class=
4319 "pre">home.piffa.net</span></tt> indirizzato all'IP
4320 <tt class="docutils literal"><span class=
4321 "pre">192.168.0.2</span></tt>, poi <tt class=
4322 "docutils literal"><span class="pre">show</span></tt>
4323 mostra quanto ci si prepara a comunicare al server con il
4324 finale <tt class="docutils literal"><span class=
4325 "pre">send</span></tt> .</p>
4327 <p>Si noti che in questo modo <em>l'intera zona</em>
4328 piffa.net e suscettibile di essere modificata dal client,
4329 che potra' eliminare e inserire qualunque record. E'
4330 possibile gestire in modo piu' granulare la zona, ad
4331 esempio concedendo al client i privilegi per gestire solo
4332 una parte della zona o i tipo di record da gestire.</p>
4335 <div class="section" id=
4336 "automatizzare-l-aggiornamento-dinamico">
4337 <h3><a class="toc-backref" href=
4338 "#id82">7.4.4 Automatizzare
4339 l'aggiornamento dinamico</a></h3>
4341 <p>Nsupdate risulta comodo per tenere aggiornati i record
4342 DNS degli host connessi ad internet con indirizzi IP
4343 dinamici (pubblici) assegnati dal provider. Il client
4344 deve essere in grado di contattare autonomamente il
4345 server DNS per comunicare un cambiamento del suo ip.
4346 Vediamo innanzi tutto un primo script per nsupdate:</p>
4347 <pre class="literal-block">
4349 # Diamo al demone ppp un po' di tempo per negoziare la connessione
4350 # prima di leggere l'IP ottenuto
4352 IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
4354 nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
4355 server 192.168.0.254
4356 zone home.piffa.net.
4357 update delete home.piffa.net. A
4358 update delete home.piffa.net. MX
4359 update add home.piffa.net. 432000 A $IPADDR
4360 update add home.piffa.net. 432000 MX 10 home.piffa.net.
4366 <p>Questo script legge il valore del device di rete
4367 <tt class="docutils literal"><span class=
4368 "pre">ppp0</span></tt> creato dal <cite>pppoe</cite> di
4369 una connessione ADSL per ottenere l'indirizzo IP ottenuto
4370 dal provider (prima di farlo aspetta 15 secondi per dare
4371 il tempo al <tt class="docutils literal"><span class=
4372 "pre">pppoe</span></tt> di negoziare la
4373 connessione).Vengono poi eliminati gli esistenti valori
4374 <tt class="docutils literal"><span class=
4375 "pre">A</span></tt> e <tt class=
4376 "docutils literal"><span class="pre">MX</span></tt> per
4377 <tt class="docutils literal"><span class=
4378 "pre">home.piffa.net</span></tt> (si noti il punto finale
4379 dopo <em>net</em>) e inseriti quelli attuali.</p>
4381 <p>Resta da decidere quando richiamare questo script:
4382 l'evento che causa l'assegnazione del nuovo IP in questo
4383 caso e una nuova connessione <tt class=
4384 "docutils literal"><span class="pre">pppoe</span></tt>,
4385 quindi sarebbe consigliabile inserire lo script nelle
4386 routine comprese in <tt class=
4387 "docutils literal"><span class=
4388 "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
4389 documentazione di ppp), nel caso questo non desse i
4390 risultati sperati (per problemi di connessione) come via
4391 estrema si consideri di mettere lo script nella routine
4392 del demone <tt class="docutils literal"><span class=
4393 "pre">cron</span></tt> in modo che venga eseguito
4394 periodicamente (ad esempio ogni giorno).</p>
4398 <div class="section" id="link-suggeriti">
4399 <h2><a class="toc-backref" href=
4400 "#id83">7.5 Link suggeriti:</a></h2>
4403 <li>DNS for Rocket Scientists <a class=
4404 "reference external" href=
4405 "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
4407 <li>DNS HOWTO <a class="reference external" href=
4408 "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
4413 <div class="section" id="samba">
4414 <h1><a class="toc-backref" href=
4415 "#id84">8 Samba</a></h1>
4417 <p>Samba e' un progetto libero che fornisce servizi di
4418 condivisione di file e stampanti a client SMB/CIFS.</p>
4420 <p>Samba e' liberamente disponibile, al contrario di altre
4421 implementazioni SMB/CIFS, e permette di ottenere
4422 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
4424 <p>Samba e' un software che puo' girare su piattaforme che
4425 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
4426 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
4427 il protocollo TCP/IP utilizzando i servizi offerti sul server
4428 ospite. Quando correttamente configurato, permette di
4429 interagire con client o server Microsoft Windows come se
4430 fosse un file e print server Microsoft agendo da Primary
4431 Domain Controller (PDC) o come Backup Domain Controller, puo'
4432 inoltre prendere parte ad un dominio Active Directory.</p>
4434 <div class="section" id="pacchetti">
4435 <h2><a class="toc-backref" href=
4436 "#id85">8.1 Pacchetti</a></h2>
4438 <p>Pacchetti da installare per utilizzare Samba in
4439 modalita' client <a class="footnote-reference" href="#id7"
4440 id="id6" name="id6">[2]</a></p>
4441 <pre class="literal-block">
4445 <p>Pacchetti da installare per utilizzare Samba in
4446 modalita' server:</p>
4447 <pre class="literal-block">
4448 samba smbfs smbclient
4451 <table class="docutils footnote" frame="void" id="id7"
4458 <tbody valign="top">
4460 <td class="label"><a class="fn-backref" href=
4463 <td>Anche se nato per i sistemi Windows, Samba puo'
4464 essere usato anche per montare cartelle sotto
4465 GNU/Linux come alternativa a NFS. Per la condivisione
4466 di stampanti sarebbe invece opportuno intervenire
4467 direttamente su <tt class=
4468 "docutils literal"><span class=
4469 "pre">CUPS</span></tt>.</td>
4474 <p>Durante la prima installazione viene chiesto il nome del
4475 gruppo di appartenenza, il default per Windows e'
4476 <tt class="docutils literal"><span class=
4477 "pre">WORKGROUP</span></tt>. In aula usiamo invece
4478 <tt class="docutils literal"><span class=
4479 "pre">208</span></tt> .</p>
4481 <p>Per riconfigurare Samba si usi il comando:</p>
4482 <pre class="literal-block">
4483 dpkg-reconfigure samba-common
4487 <div class="section" id="passwords-e-autenticazione">
4488 <h2><a class="toc-backref" href=
4489 "#id86">8.2 Passwords e
4490 autenticazione</a></h2>
4492 <p>Per poter configurare Samba in modo che usi un sistema
4493 di negoziazione degli accessi alle cartelle condivise
4494 basato su accoppiate <em>nome utente / password</em>
4495 bisogna distinguere tra 3 livelli di password (e
4496 generalmente volete usare <em>sempre la stessa
4497 password</em> per ognuno di questi) e delle differenze tra
4498 le modalita' di <em>autenticazione</em> (e quindi anche di
4499 criptaggio delle passwords) usate da sistemi GNU/Linux e
4502 <dl class="docutils">
4503 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
4505 <dd>E' la password dell'<em>utente di sistema</em> che
4506 viene usata sul sistema operativo su cui gira il software
4507 Samba. E' importante tenere conto anche delle
4508 <em>user-id</em> e <em>group-id</em> degli utenti che
4509 dovranno fisicamente scrivere sui file system. Se un
4510 utente non puo' scrivere in una certa posizione del file
4511 system (ad esempio nella cartella <tt class=
4512 "docutils literal"><span class=
4513 "pre">/mnt/condivisione</span></tt> che sara' stata
4514 necessariamente creata inizialmente dall'utente
4515 <tt class="docutils literal"><span class=
4516 "pre">root</span></tt>) per mancanza dei privilegi di
4517 scrittura allora neanche Samba potra' farlo nel momento
4518 in mette a disposizione la risorsa all'utente. Se si
4519 montano file-system dedicati per le condivisioni
4520 controllare i permessi e proprieta' dei <em>punti di
4521 mount*</em>. Queste passwords sono salvate nel solito
4522 file /etc/shadow (richiamato da /etc/passwd).</dd>
4524 <dt>2 Password per l'applicativo Samba</dt>
4526 <dd>Samba deve essere compatibile con Windows e quindi
4527 utilizzare un sistema di criptazione delle password
4528 diverso da /etc/shadow . Le password per Samba possono
4529 essere gestite ad esempio col comando <tt class=
4530 "docutils literal"><span class=
4531 "pre">smbpasswd</span></tt> e vengono generalmente
4532 salvate all'interno di <tt class=
4533 "docutils literal"><span class=
4534 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
4536 <dt>3 Password per Windows.</dt>
4538 <dd>Gli utenti Windows effettuano il log-in alla partenza
4539 della sessione di Windows. Se si avra' l'accortezza di
4540 usare sempre la <em>stessa password</em> data
4541 precedentemente anche a Windows (o viceversa impostare la
4542 password per GNU/Linux / Samba uguale a quella di
4543 Windows) l'utente potra' accedere automaticamente alle
4544 condivisioni a lui disponibili.</dd>
4548 <div class="section" id="creazione-utenti">
4549 <h2><a class="toc-backref" href=
4550 "#id87">8.3 Creazione Utenti</a></h2>
4552 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
4553 attenzione a <em>non dargli una shell di sistema</em>. Gli
4554 utenti Windows che accedono al server solo per le
4555 condivisioni non hanno bisogno di poter eseguire comandi
4558 <p>Creazione di un utente denominato sambo:</p>
4559 <pre class="literal-block">
4560 adduser --shell /bin/false sambo
4563 <p>Nel file <tt class="docutils literal"><span class=
4564 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
4565 <pre class="literal-block">
4566 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
4569 <p>Aggiunta dell'utente al database delle password per
4570 Samba e generazione della sua password:</p>
4571 <pre class="literal-block">
4575 <p>Se successivamente si vorra' modificare la password di
4576 un utente gia' esistente si usi:</p>
4577 <pre class="literal-block">
4581 <p>La password sotto Windows verra' modificata sul sistema
4585 <div class="section" id="creare-la-condivisione">
4586 <h2><a class="toc-backref" href=
4587 "#id88">8.4 Creare la
4588 condivisione</a></h2>
4590 <p>La condivisione altro non e' che una cartella sul server
4591 che viene resa disponibile ai client negoziando l'accesso
4592 in base a una autenticazione basata su <em>user-name /
4593 password</em>. E' per altro possibile permettere l'accesso
4594 a una risorsa a chiunque indiscriminatamente (a tutti i
4595 <tt class="docutils literal"><span class=
4596 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
4597 punto di vista della sicurezza. Si decida se la cartella
4598 condivisa debba risiedere nella <em>home</em> di un utente
4599 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
4600 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
4601 Nel secondo caso si potranno gestire gli accessi sotto
4602 GNU/Linux tramite i gruppi.</p>
4604 <p>Creazione della risorsa sambo_share nella home
4605 dell'utente sambo:</p>
4606 <pre class="literal-block">
4607 # mkdir /home/sambo/sambo_share
4608 # chown sambo:sambo /home/sambo/sambo_share/
4611 <div class="section" id=
4612 "sicurezza-permessi-di-esecuzione-sul-server">
4613 <h3><a class="toc-backref" href=
4614 "#id89">8.4.1 Sicurezza: permessi di
4615 esecuzione sul server</a></h3>
4617 <p>Bisognerebbe notare sul server i permessi di
4618 esecuzione del file-system che ospita la cartella da
4619 condividere. Se i file che saranno contenuti nella
4620 condivisione saranno da usarsi sotto Windows non c'e'
4621 motivo che questi siano eseguibili sotto GNU/Linux. Si
4622 potrebbe avere quindi, ipotizzando una condivisione in
4623 <tt class="docutils literal"><span class=
4624 "pre">/mnt/share</span></tt> che risieda su di un file
4625 system dedicato:</p>
4627 <p><tt class="docutils literal"><span class=
4628 "pre">/etc/fstab</span></tt></p>
4631 /dev/hda10 /mnt/share ext3 rw,
4632 <strong>nosuid,noexec</strong> 0 3
4635 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
4636 possibilita' di eseguire programmi con credenziali
4641 <div class="section" id=
4642 "configurazione-dell-applicativo-samba-vero-e-proprio">
4643 <h2><a class="toc-backref" href=
4644 "#id90">8.5 Configurazione
4645 dell'applicativo Samba vero e proprio.</a></h2>
4647 <p>Avendo preparato gli utenti (ancora una volta: non si
4648 dia una shell completa a un utente che serve solo per Samba
4649 o la posta elettronica) e la cartella sul file system si
4650 puo' procedere a configurare la condivisione su Samba.</p>
4652 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
4653 vim si usi 235gg ):</p>
4654 <pre class="literal-block">
4656 # Percorso della cartella condivisa
4657 path = /home/sambo/sambo_share
4658 # Se gli utenti possono scrivere / modificare file
4660 # Negoziazione degli accessi su base utenti / passwords
4663 # #######################################
4664 # Altri parametri opzionali di interesse
4665 # Se posso vedere la condivisione da esplora risorse
4666 # anche se non ho i privilegi per accedervi.
4668 # Commento indicativo della risorsa
4669 comment = Condivisione per Sambo
4672 <p>Dopo aver salvato il file si puo' fare un primo
4673 controllo tramite l'utility <tt class=
4674 "docutils literal"><span class="pre">testparm</span></tt> ,
4675 che controlla la sintassi del file di configurazione di
4676 Samba. Se questo non rileva problemi si puo' procedere a un
4677 <tt class="docutils literal"><span class="pre">#</span>
4678 <span class="pre">/etc/init.d/samba</span> <span class=
4679 "pre">restart</span></tt> .</p>
4681 <div class="section" id="creazione-di-un-gruppo">
4682 <h3><a class="toc-backref" href=
4683 "#id91">8.5.1 Creazione di un
4686 <p>Se si deve condividere una risorsa con un numero
4687 consistente di utenti e' consigliabile lavorare in
4688 termini termini di gruppi piuttosto che elencare la lista
4689 degli utenti in <tt class="docutils literal"><span class=
4690 "pre">valid</span> <span class=
4691 "pre">users</span></tt>.</p>
4693 <p>Dopo aver creato il gruppo del quale volete facciano
4694 parte i vostri utenti (<tt class=
4695 "docutils literal"><span class="pre">addgroup</span>
4696 <span class="pre">nome_gruppo</span></tt>), inserite i
4697 vostri utenti nel gruppo (<tt class=
4698 "docutils literal"><span class="pre">adduser</span>
4699 <span class="pre">nome_utente</span> <span class=
4700 "pre">nome_gruppo</span></tt>) e modificate la direttiva
4701 <tt class="docutils literal"><span class=
4702 "pre">valid</span> <span class="pre">users</span></tt> in
4703 <tt class="docutils literal"><span class=
4704 "pre">smb.conf</span></tt> per riferirsi ad un gruppo
4705 piuttosto che a degli utenti. Per riferirsi a un gruppo
4706 si usi il carattere <tt class=
4707 "docutils literal"><span class="pre">@</span>
4708 <span class="pre">chicciola</span></tt> col <tt class=
4709 "docutils literal"><span class=
4710 "pre">nome_del_gruppo</span></tt>:</p>
4711 <pre class="literal-block">
4712 # Negoziazione degli accessi su base gruppo
4713 valid users = @nome_gruppo
4718 <div class="section" id="testare-il-servizio">
4719 <h2><a class="toc-backref" href=
4720 "#id92">8.6 Testare il Servizio</a></h2>
4722 <p>Come testare il servizio</p>
4725 <pre class="literal-block">
4726 smbclient -U sambo -L localhost
4729 <p>Questo comando permette di esplorare la risorsa
4730 qualificandosi come utente, in questo modo potete testare
4731 il corretto funzionamento dell'autenticazione. Si provi
4732 inizialmente a sbagliare la password deliberatamente, poi a
4733 inserirla correttamente: dovrebbero essere visibili le
4734 risorse disponibili al solo utente sambo: la suo /home e la
4735 cartella samba_share:</p>
4736 <pre class="literal-block">
4737 Sharename Type Comment
4738 --------- ---- -------
4739 sambo_share Disk Condivisione per Sambo
4740 print$ Disk Printer Drivers
4741 IPC$ IPC IPC Service (base server)
4742 sambo Disk Home Directories
4745 <p>In particolare l'ultima voce relativa alla home
4746 directory dell'utente dovrebbe essere visibile solo agli
4747 utenti autenticati.</p>
4749 <p>In alternativa e' possibile montare realmente la
4750 condivisone anche su GNU/Linux tramite un client per samba
4751 e testarne il corretto funzionamento:</p>
4752 <pre class="literal-block">
4753 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
4758 <div class="section" id="server-di-posta-postfix">
4759 <h1><a class="toc-backref" href=
4760 "#id93">9 Server di posta: Postfix</a></h1>
4762 <p>Il server di posta che prenderemo in considerazione e'
4763 Postfix, a seguire un estratto di un file di configurazione
4764 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
4765 nelle <tt class="docutils literal"><span class=
4766 "pre">/home</span></tt> degli utenti per la consegna della
4769 <p><tt class="docutils literal"><span class=
4770 "pre">/etc/postfix/main.cf</span></tt>:</p>
4771 <pre class="literal-block">
4772 # ...segue dalla riga ~30
4773 myhostname = 162.piffa.net
4774 alias_maps = hash:/etc/aliases
4775 alias_database = hash:/etc/aliases
4776 myorigin = 162.piffa.net
4777 mydestination = 162.piffa.net, localhost
4778 # Se non avete un ip pubblico e statico, con un adeguato record PTR
4779 # dovrete usare un realy host per l'invio della posta
4780 relayhost = smtp.piffa.net
4782 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
4783 # Se dovete inviare la posta per i client della vostra LAN privata:
4784 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
4785 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
4788 # Per effettuare lo storaggio della posta nelle home directory degli utenti
4789 # in una Maildir invece che nella Mailbox in /var/mail/nome_utente
4790 # si disabiliti procmail
4791 #mailbox_command = procmail -a "$EXTENSION"
4793 # cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
4794 # all'interno della home dell'utente:
4795 home_mailbox = Maildir/
4796 mailbox_size_limit = 0
4797 recipient_delimiter = +
4798 inet_interfaces = all
4801 <dl class="docutils">
4802 <dt>E' disponibile un file di configurazione di esempio ben
4803 piu' articolato e commentato::</dt>
4805 <dd>/usr/share/postfix/main.cf.dist .</dd>
4808 <div class="section" id="test-del-server-smtp">
4809 <h2><a class="toc-backref" href=
4810 "#id94">9.1 Test del server smtp</a></h2>
4812 <p>Per testare il corretto funzionamento del server di
4813 posta si puo' procedere in vari modi.</p>
4816 <li>Spedire una mail a una casella locale / remota e
4817 controllare i log (syslog)</li>
4819 <li>Collegarsi via <em>telnet</em> al server di posta:
4820 <a class="reference external" href=
4821 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
4823 <li>usare una utility come SWAKS</li>
4826 <div class="section" id="swaks">
4827 <h3><a class="toc-backref" href=
4828 "#id95">9.1.1 Swaks</a></h3>
4830 <dl class="docutils">
4831 <dt>Per gli utenti meno esperti e' consigliabile
4832 utilizzare <em>SWAKS</em>: si installi l'omonimo
4833 pacchetto e si esegua un test con::</dt>
4835 <dd>swaks --to <a class="reference external" href=
4836 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
4837 --from <a class="reference external" href=
4838 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
4841 <p>Ecco un esempio di una sessione corretta:</p>
4842 <pre class="literal-block">
4843 swaks --to andrea@piffa.net from andrea@mydomain.com
4844 === Trying smtp.piffa.net:25...
4845 === Connected to smtp.piffa.net.
4846 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
4847 -> EHLO alice.mydomain.com
4848 <- 250-zoo.piffa.net
4849 <- 250-PIPELINING
4850 <- 250-SIZE 10240000
4854 <- 250-ENHANCEDSTATUSCODES
4857 -> MAIL FROM:<root@alice.mydomain.com>
4859 -> RCPT TO:<andrea@piffa.net>
4862 <- 354 End data with <CR><LF>.<CR><LF>
4863 -> Date: Thu, 28 May 2009 13:11:19 +0200
4864 -> To: andrea@piffa.net
4865 -> From: root@alice.mydomain.com
4866 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
4867 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
4869 -> This is a test mailing
4872 <- 250 2.0.0 Ok: queued as 41FB261AFC
4875 === Connection closed with remote host.
4880 <div class="section" id="imap-e-pop">
4881 <h2><a class="toc-backref" href=
4882 "#id96">9.2 Imap e pop</a></h2>
4884 <p>Postfix e' un server SMTP, di conseguenza se volete che
4885 i vostri utenti possano <em>scaricare</em> in locale la
4886 posta generalmente volete mettere a loro disposizione un
4887 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
4889 <dl class="docutils">
4890 <dt>Pacchetti da installare</dt>
4892 <dd>courier-imap courier-pop</dd>
4895 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
4896 funziona con le Mailbox in <tt class=
4897 "docutils literal"><span class="pre">/var/mail/</span></tt>
4901 <div class="section" id="client-a-riga-di-comando">
4902 <h2><a class="toc-backref" href=
4903 "#id97">9.3 Client a riga di
4906 <p>Per testare il corretto funzionamento del server di
4907 posta e' utile avere a disposizione delle utility per
4908 inviare e leggere la posta: ovviamente da riga di
4911 <div class="section" id="mailx">
4912 <h3><a class="toc-backref" href=
4913 "#id98">9.3.1 mailx</a></h3>
4915 <dl class="docutils">
4916 <dt>Uno dei client piu' semplici, sopratutto per
4917 inviare un messaggioi. e' sufficiente usare una formula
4920 <dd>mail <a class="reference external" href=
4921 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
4924 <p>Se il comando <tt class=
4925 "docutils literal"><span class="pre">mail</span></tt> non
4926 fosse disponibile si installi il pacchetto <tt class=
4927 "docutils literal"><span class=
4928 "pre">mailx</span></tt>.</p>
4930 <p>Al primo prompt si digitera' l'oggetto, il testo del
4931 messaggio (per terminare l'inserimento lasciare una riga
4932 vuota, digitare un <tt class=
4933 "docutils literal"><span class="pre">punto</span>
4934 <span class="pre">+</span> <span class=
4935 "pre">Invio</span></tt> su una riga vuota), la Carbon
4936 Copy (se necessaria).</p>
4939 <pre class="literal-block">
4940 mail andrea@localhost
4941 Subject: Oggetto della mail
4943 per terminare il messaggio
4944 lasciare una riga vuota
4945 e un punto (poi Invio).
4951 <p>Per altrre opzioni si veda la pagina man.</p>
4954 <div class="section" id="mutt">
4955 <h3><a class="toc-backref" href=
4956 "#id99">9.3.2 Mutt</a></h3>
4958 <p>Mutt e' uno dei gestori di posta preferiti da chi
4959 preferisce utilizzare l'interfaccia testuale per la
4960 gestione della posta.</p>
4962 <p>Mutt ha un file di configurazione <tt class=
4963 "docutils literal"><span class="pre">.muttrc</span></tt>
4964 nella <em>home</em> dell'utente, alcuni settaggi possono
4967 <dl class="docutils">
4968 <dt>set folder="~/Maildir"</dt>
4970 <dd>Per utilizzare <tt class=
4971 "docutils literal"><span class=
4972 "pre">/home/nome_utente/Maildir</span> <span class=
4973 "pre">come</span> <span class=
4974 "pre">mailbox</span></tt>, invece del default
4975 <tt class="docutils literal"><span class=
4976 "pre">/var/mail/nome_utente</span></tt>.</dd>
4978 <dt>set editor="vim"</dt>
4980 <dd>Utilizzare <tt class=
4981 "docutils literal"><span class="pre">vim</span></tt>
4982 come editor per comporre i messaggi.</dd>
4985 <p>Spesso e' utile poter <em>levvere al volo</em> la
4986 Mailbox / Maildir di un utente sul server di posta, per
4987 controllare se i messaggi vengono recapitati
4989 <pre class="literal-block">
4990 mutt -f /var/mail/utente
4991 mutt -f /home/utente/Maildir
4994 <p>In modo analogo si puo' consultare al volo la propia
4995 mailbox su un server remoto tramite IMAP/POP:</p>
4996 <pre class="literal-block">
4997 mutt -f imap://nome_utente@piffa.net
5001 <div class="section" id="web-client">
5002 <h3><a class="toc-backref" href=
5003 "#id100">9.3.3 Web client</a></h3>
5005 <p>Per mettere a disposizione degli utenti un client web
5006 per gestire la propria posta si installi il pacchetto:
5007 <tt class="docutils literal"><span class=
5008 "pre">squirrelmail</span></tt> . Ci sono tanti altri
5009 client web disponibili: questo e' particolarmente
5010 semplice. Naturalmente dovrete aver installato:
5011 <tt class="docutils literal"><span class=
5012 "pre">php5</span> <span class="pre">apache2</span></tt>
5015 <p>L'interfaccia dovrebbe essere disponibile all'url:
5016 <tt class="docutils literal"><span class=
5017 "pre">http://localhost/squirrelmail</span></tt> . Se
5018 cosi' non fosse assicuratevi che Apache abbia incluso il
5019 file di configurazione di squirrelmail:</p>
5020 <pre class="literal-block">
5021 cd /etc/apache2/conf.d/
5022 ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
5027 <div class="section" id="graylisting">
5028 <h2><a class="toc-backref" href=
5029 "#id101">9.4 Graylisting</a></h2>
5031 <p>Il <em>graylisting</em> e' un sistema relativamente poco
5032 invasivo, con un limitato consumo di risorse per limitare
5033 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
5034 suggerisce il nome e' una via di mezzo tra una <em>white
5035 list</em> (una lista di mittenti privilegiata, sempre
5036 benvenuti) e una <em>black list</em> (mittenti
5037 <em>bannati</em>, banditi dal poter inviare nuovi
5040 <p>Il funzionamento e' relativamente semplice: ogni
5041 mittente sconosciuto viene immediatamente rifiutato con un
5042 errore <em>non grave</em> come un <em>server non
5043 disponibile, provare piu' tardi</em>. Questo inconveniente
5044 non dovrebbe mettere in difficolta' un server di posta /
5045 mittente legittimo, che dopo un periodo di attesa tentera'
5046 nuovamente di inviare il messaggio ottenendo finalmente il
5047 risultato atteso. Diversamente un <em>bot</em> per l'invio
5048 di SPAM o un applicazione improvvisata (tipicamente di
5049 derivazione virale) che stesse inviando il messaggio
5050 <em>probabilmente</em> non insisterebbe, rinunciano ad
5051 inviare il messaggio preferendo destinazioni meno
5054 <div class="section" id="abilitazione-in-postfix">
5055 <h3><a class="toc-backref" href=
5056 "#id102">9.4.1 Abilitazione in
5059 <p>Installare il pacchetto: <tt class=
5060 "docutils literal"><span class="pre">postgrey</span></tt>
5061 e aggiungere il file di configurazione di Postfix
5062 <tt class="docutils literal"><span class=
5063 "pre">/etc/postfix/main.cf</span></tt>:</p>
5064 <pre class="literal-block">
5065 smtpd_recipient_restrictions =
5067 reject_unauth_destination,
5068 check_policy_service inet:127.0.0.1:60000
5072 <div class="section" id="test">
5073 <h3><a class="toc-backref" href=
5074 "#id103">9.4.2 Test</a></h3>
5076 <p>Inviando un messaggio il client dovrebbe ricevere un
5077 iniziale messaggio di rifiuto del messaggio:</p>
5078 <pre class="literal-block">
5079 swaks --to andrea@piffa.net from andrea@mydonain.com
5080 === Trying smtp.piffa.net:25...
5081 === Connected to smtp.piffa.net
5084 -> RCPT TO:<andrea@piffa.net>
5085 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
5086 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
5089 === Connection closed with remote host.
5092 <p>A lato server si dovrebbe rilevare su <tt class=
5093 "docutils literal"><span class=
5094 "pre">/var/log/syslog</span></tt> qualcosa di simile:</p>
5095 <pre class="literal-block">
5096 connect from alice.mydomain.com[65.98.21.97]
5097 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
5098 client_name=alice.mydomain.com,
5099 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
5100 May 28 14:53:34 r24266 postfix/smtpd[22538]:
5101 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
5102 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
5103 see http://postgrey.schweikert.ch/help/piffa.net.html;
5104 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
5105 proto=ESMTP helo=<alice.mydomain.com>
5106 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
5110 <div class="section" id="statistiche">
5111 <h3><a class="toc-backref" href=
5112 "#id104">9.4.3 Statistiche</a></h3>
5114 <p>E' sempre utile poter tracciare qualche statistica
5115 sulle percentuali di messaggi ricevuti, da chi, messaggi
5116 rifiutati (e per quale motivo). Statistiche che attingono
5117 dai soliti log del server di posta <tt class=
5118 "docutils literal"><span class=
5119 "pre">/var/log/syslog</span></tt> di default oltre che i
5120 dedicati <tt class="docutils literal"><span class=
5121 "pre">/var/log/mail</span></tt> .</p>
5123 <p>Una utility semplice per analizzare l'attivita' del
5124 propio server smtp potrebbe essere <tt class=
5125 "docutils literal"><span class=
5126 "pre">pflogsumm</span></tt> , installato il pacchetto la
5127 si puo' invocare con:</p>
5128 <pre class="literal-block">
5129 pflogsumm.pl /var/log/mail.log
5132 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
5133 "docutils literal"><span class=
5134 "pre">/var/log/mail.log.0</span></tt></p>
5139 <div class="section" id="firewall">
5140 <h1><a class="toc-backref" href=
5141 "#id105">10 Firewall</a></h1>
5143 <p>In Informatica, nell'ambito delle reti di computer, un
5144 firewall (termine inglese dal significato originario di
5145 parete refrattaria, muro tagliafuoco, muro ignifugo; in
5146 italiano anche parafuoco o parafiamma) e' un componente
5147 passivo di difesa perimetrale che puo anche svolgere funzioni
5148 di collegamento tra due o piu' tronconi di rete. Usualmente
5149 la rete viene divisa in due sotto reti: una, detta esterna,
5150 comprende l'intera Internet mentre l'altra interna, detta LAN
5151 (Local Area Network), comprende una sezione piu' o meno
5152 grande di un insieme di computer locali. In alcuni casi e'
5153 possibile che si crei l'esigenza di creare una terza sotto
5154 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
5155 sistemi che devono essere isolati dalla rete interna ma
5156 devono comunque essere protetti dal firewall.</p>
5158 <p>Una prima definizione chiusa di firewall e' la
5161 <p>Apparato di rete hardware o software che filtra tutti i
5162 pacchetti entranti ed uscenti, da e verso una rete o un
5163 computer, applicando regole che contribuiscono alla sicurezza
5166 <p>In realta' un firewall puo' essere realizzato con un
5167 normale computer (con almeno due schede di rete e software
5168 apposito), puo' essere una funzione inclusa in un router o
5169 puo' essere un apparato specializzato. Esistono inoltre i
5170 cosiddetti "firewall personali", che sono programmi
5171 installati sui normali calcolatori, che filtrano solamente i
5172 pacchetti che entrano ed escono da quel calcolatore; in tal
5173 caso viene utilizzata una sola scheda di rete.</p>
5175 <p>La funzionalita' principale in sostanza e' quella di
5176 creare un filtro sulle connessioni entranti ed uscenti, in
5177 questo modo il dispositivo innalza il livello di sicurezza
5178 della rete e permette sia agli utenti interni che a quelli
5179 esterni di operare nel massimo della sicurezza. Il firewall
5180 agisce sui pacchetti in transito da e per la zona interna
5181 potendo eseguire su di essi operazioni di: controllo modifica
5184 <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
5185 IP per leggere le informazioni presenti sul suo header, e in
5186 alcuni casi anche di effettuare verifiche sul contenuto del
5189 <div class="section" id="links">
5190 <h2><a class="toc-backref" href=
5191 "#id106">10.1 Links</a></h2>
5194 <li><a class="reference external" href=
5195 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
5197 <li><a class="reference external" href=
5198 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
5199 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
5203 <div class="section" id="ipfilter">
5204 <h2><a class="toc-backref" href=
5205 "#id107">10.2 Ipfilter</a></h2>
5207 <p>Link: <a class="reference external" href=
5208 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
5209 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
5211 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
5212 po' del 3) e su cosa <em>non</em> lavora (livello 4).
5213 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
5214 etc) e del livello 1 (MAC source address). Iptables
5215 comunque permette di fare il <em>connection-tracking</em>,
5216 mediante il quale possiamo implementare il Network Address
5219 <p>Netfilter non ricostruisce il flusso di dati tra
5220 pacchetti, non puo' quindi rilevare la presenza di virus o
5221 simili che si trasmettono su pacchetti separati:
5222 ricomporre, analizzare e tornare a scomporre i frammenti
5223 richiederebbe troppa RAM e risorse di sistema, con il
5224 conseguente rischio di saturare il firewall fino
5225 all'abbandono dei nuovi pacchetti in transito. Ci sono
5226 altri software piu' adatti a questi compiti, ad esempio un
5227 proxy HTTP come Squid che e' appunto una applicazione di
5228 quarto livello, progettata e strutturata per analizzare e
5229 modificare i flussi di dati (il <em>contenuto</em> dei
5230 pacchetti, non le sole <em>intestazioni</em>) facendo
5231 abbondate uso delle risorse RAM e di calcolo del sistema.
5232 Non a caso su macchine embedded dalle prestazioni molto
5233 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
5234 massimo le risorse di sistema per gestire il traffico di
5235 una rete 10/100, mentre il lavoro tipico svolto da
5236 netfilter e' quasi irrilevante.</p>
5239 <div class="section" id="progettazione-di-un-firewall">
5240 <h2><a class="toc-backref" href=
5241 "#id108">10.3 Progettazione di un
5244 <p>Per implementare un firewall bisogna decidere un aio di
5245 cose: la collocazione e l'approccio (inclusivo o esclusivo)
5246 al filtraggio, il tipo di hardware.</p>
5248 <div class="section" id="collocazione">
5249 <h3><a class="toc-backref" href=
5250 "#id109">10.3.1 Collocazione</a></h3>
5252 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
5253 della rete, decidere se diversi reparti di una azienda si
5254 possano vedere tra loro e in che misura.</p>
5256 <p>Collocazione:</p>
5259 <ol class="arabic simple">
5262 <li>tra router e servers / LAN</li>
5264 <li>Unico server / router / firewall e connessi
5265 rischi. considerare l'acquisto di un router hardware
5270 <dl class="docutils">
5271 <dt>Layeed security:</dt>
5273 <dd>Implementare piu' device / software sui diversi
5274 livelli: <a class="reference external" href=
5275 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
5276 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
5280 <div class="section" id="policy-di-default">
5281 <h3><a class="toc-backref" href=
5282 "#id110">10.3.2 Policy di
5285 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
5289 <div class="section" id="hardware">
5290 <h3><a class="toc-backref" href=
5291 "#id111">10.3.3 Hardware</a></h3>
5293 <p>Sostanzialmente potremmo distinguere due tipologie di
5296 <dl class="docutils">
5297 <dt>Network appliance dedicata::</dt>
5299 <dd>Un dispositivo hardware dedicato alla funzione di
5300 Firewall, ad es un Cisco / Fortigate. Si noti che molti
5301 firewall economici altro non sono che Linux box molto
5304 <dt>Server / Personal computer:</dt>
5306 <dd>Un server sul quale viene fatto girare Netfilter ad
5307 uso del server stesso e della rete connessa.</dd>
5310 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
5311 flessibilita', strumenti di gestione, sicurezza,
5316 <div class="section" id=
5317 "percorso-dei-pacchetti-tra-tabelle-e-catene">
5318 <h2><a class="toc-backref" href=
5319 "#id112">10.4 Percorso dei pacchetti tra
5320 tabelle e catene</a></h2>
5322 <p>link: <a class="reference external" href=
5323 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
5324 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
5327 <div class="section" id="concetti-di-base">
5328 <h2><a class="toc-backref" href=
5329 "#id113">10.5 Concetti di base</a></h2>
5331 <div class="section" id="tabelle-catene-regole">
5332 <h3><a class="toc-backref" href=
5333 "#id114">10.5.1 Tabelle, catene,
5336 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
5339 <li>filter - Regola il firewalling: quali pacchetti
5340 accettare, quali bloccare</li>
5342 <li>nat - Regola le attivita' di natting</li>
5344 <li>mangle - Interviene sulla alterazione dei
5348 <p>Ogni tabella ha delle catene (chains) predefinite
5349 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
5350 aggiunte catene custom. Ogni catena e' composta da un
5351 elenco di regole (rules) che identificano pacchetti di
5352 rete secondo criteri diversi (es: -p tcp --dport 80 -d
5353 10.0.0.45) Ogni regola termina con una indicazione
5354 (target) su cosa fare dei pacchetti identificati dalla
5355 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
5358 <div class="section" id="match">
5359 <h3><a class="toc-backref" href=
5360 "#id115">10.5.2 Match</a></h3>
5362 <p>I Match di una regola (rule) servono a testare un
5363 pacchetto per valutare se corrisponda a certe
5364 caratteristiche. I match di possono servire a controllare
5365 se un pacchetto e' destinato a una porta particolare o
5366 utilizza un protocollo particolare.</p>
5368 <p>Alcuni esempi:</p>
5370 <dl class="docutils">
5371 <dt>-p [!] proto</dt>
5373 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
5374 udp, gre, ah...)</dd>
5376 <dt>-s [!] address[/mask]</dt>
5378 <dd>Indirizzo IP sorgente (o network con maschera di
5381 <dt>-d [!] address[/mask]</dt>
5383 <dd>Indirizzo IP destinazione (o network)</dd>
5385 <dt>-i [!] interface[+]</dt>
5387 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
5389 <dt>-o [!] interface[+]</dt>
5391 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
5394 <table class="docutils option-list" frame="void" rules=
5396 <col class="option">
5397 <col class="description">
5399 <tbody valign="top">
5401 <td class="option-group"><kbd><span class=
5402 "option">-f</span></kbd></td>
5404 <td>Frammento di pacchetto</td>
5410 <div class="section" id="targets">
5411 <h3><a class="toc-backref" href=
5412 "#id116">10.5.3 Targets</a></h3>
5414 <p>Se un pacchetto soddisfa le condizioni del Match
5415 <em>salta</em> (jump) su uno dei target possibili, in
5416 caso contrario continua il suo percorso tra regole catene
5419 <p>Target principali:</p>
5421 <dl class="docutils">
5422 <dt><em>-j ACCEPT</em></dt>
5424 <dd>Il pacchetto matchato viene accettato e procede
5425 verso la sua destinazione. Si usa per definire il
5426 traffico permesso.</dd>
5428 <dt><em>-j DROP</em></dt>
5430 <dd>Il pacchetto viene rifiutato e scartato, senza
5431 alcuna notifica al mittente. Si usa, in alternativa a
5432 REJECT, per bloccare traffico.</dd>
5434 <dt><em>-j REJECT</em></dt>
5436 <dd>Il pacchetto viene rifiutato. Al mittente viene
5437 mandato un pacchetto (configurabile) di notifica tipo
5438 ICMP port-unreachable (--reject-with
5439 icmp-port-unreachable)</dd>
5442 <table class="docutils option-list" frame="void" rules=
5444 <col class="option">
5445 <col class="description">
5447 <tbody valign="top">
5449 <td class="option-group"><kbd><span class=
5450 "option">-t <var>LOG</var></span></kbd></td>
5452 <td>Il pacchetto viene loggato via syslog e procede
5453 l'attraversamento della catena. Opzioni:
5454 (--log-level, --log-prefix, --log-tcp-sequence,
5455 --log-tcp-options, --log-ip-options)</td>
5459 <td class="option-group"><kbd><span class=
5460 "option">-j <var>DNAT</var></span></kbd></td>
5462 <td>Viene modificato l'IP di destinazione del
5463 pacchetto. Target disponibile solo in nat /
5464 PREROUTING e nat / OUTPUT. L'opzione
5465 --to-destination IP:porta definisce il nuovo IP di
5466 destinazione. Si usa tipicamente su network
5467 firewall che nattano server di una DMZ</td>
5471 <td class="option-group"><kbd><span class=
5472 "option">-j <var>SNAT</var></span></kbd></td>
5474 <td>Viene modificato l'IP sorgente. Solo in nat /
5475 POSTROUTING. Prevede l'opzione --to-source
5476 IP:porta. Si usa per permettere l'accesso a
5477 Internet da una rete locale con IP privati.</td>
5481 <td class="option-group"><kbd><span class=
5482 "option">-j <var>MASQUERADE</var></span></kbd></td>
5484 <td>Simile a SNAT, si applica quando i pacchetti
5485 escono da interfacce con IP dinamico (dialup, adsl,
5486 dhcp...). Si usa solo in nat / POSTROUTING e
5487 prevede l'opzione --to-ports porte.</td>
5491 <td class="option-group"><kbd><span class=
5492 "option">-j <var>REDIRECT</var></span></kbd></td>
5494 <td>Redirige il pacchetto ad una porta locale.
5495 Usabile solo in nat / PREROUTING e nat / OUTPUT e'
5496 previsto per fare un transparent proxy (con proxy
5497 server in esecuzione sulla macchina con
5502 <td class="option-group"><kbd><span class=
5503 "option">-j <var>RETURN</var></span></kbd></td>
5505 <td>Interrompe l'attraversamento della catena. Se
5506 questa e' una secondaria, il pacchetto torna ad
5507 attraversare la catena madre da punto in cui aveva
5508 fatto il salto nella secondaria. Se il RETURN e' in
5509 una delle catene di default, il pacchetto
5510 interrompe l'attraversamento e segue la policy di
5515 <td class="option-group"><kbd><span class=
5516 "option">-j <var>TOS</var></span></kbd></td>
5518 <td>Usabile solo nella tabella mangle, permette di
5519 cambiare il TOS (Type Of Service) di un pacchetto
5520 con l'opzione --set-tos. Per un elenco dei
5521 parametri disponibili: iptables -j TOS -h</td>
5525 <td class="option-group"><kbd><span class=
5526 "option">-j <var>MIRROR</var></span></kbd></td>
5528 <td>Curioso e sperimentale, questo target invia un
5529 pacchetto speculare al mittente. In pratica e' come
5530 se facesse da specchio per tutti i pacchetti
5531 ricevuti. Da usare con cautela, per evitare
5532 attacchi DOS indiretti.</td>
5539 <div class="section" id="tabella-filter">
5540 <h2><a class="toc-backref" href=
5541 "#id117">10.6 Tabella Filter</a></h2>
5543 <p>E' quella implicita e predefinita (-t filter) Riguarda
5544 le attivita' di filtraggio del traffico. Ha 3 catene di
5545 default: INPUT - Riguarda tutti i pacchetti destinati al
5546 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
5547 i pacchetti che sono originati dal sistema e destinati ad
5548 uscire. FORWARD - Riguarda i pacchetti che attraversano il
5549 sistema, con IP sorgente e destinazione esterni.</p>
5551 <p>Esempio per permettere accesso alla porta 80 locale:
5552 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
5553 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
5556 <p>Esempio per permettere ad un pacchetto con IP sorgente
5557 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
5558 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
5562 <div class="section" id=
5563 "flush-automatico-per-macchine-remote">
5564 <h2><a class="toc-backref" href=
5565 "#id118">10.7 Flush automatico per
5566 macchine remote</a></h2>
5568 <p>Se state provando una configurazione del firewall per
5569 una macchina remota e' buona norma per evitare brutte
5570 figure attivare uno script che faccia il <em>flush</em>
5571 delle regole dopo qualche minuto. Potreste infatti
5572 inavvertitamente impostare una regola che vi impedisca di
5573 raggiungere la macchina remota, cosi' da non poter neanche
5574 eliminare quella regola e ripristinare la situazione
5577 <p><em>Veramente</em>, prima di lavorare sul firewall di
5578 una macchina remota impostate almeno un <tt class=
5579 "docutils literal"><span class="pre">at</span> <span class=
5580 "pre">now</span> <span class="pre">+5</span> <span class=
5581 "pre">min</span></tt> o con un'oretta di margine per fare
5582 il <em>flush</em> delle regole (su tutte le tabelle):</p>
5583 <pre class="literal-block">
5585 at> /sbin/iptables -F
5590 <div class="section" id="gestione-regole-rules">
5591 <h2><a class="toc-backref" href=
5592 "#id119">10.8 Gestione regole
5595 <p>Il comando iptables viene usato per ogni attivita' di
5596 gestione e configurazione.</p>
5598 <p>Inserimento regole:</p>
5600 <dl class="docutils">
5601 <dt>iptables -A CATENA ...</dt>
5603 <dd>Aggiunge una regola alla fine della catena
5606 <dt>iptables -I CATENA [#] ...</dt>
5608 <dd>Inserisce alla riga # (default 1) una regola nella
5609 catena indicata</dd>
5611 <dt>iptables -N CATENA</dt>
5613 <dd>Crea una nuova catena custom</dd>
5615 <dt>iptables -P CATENA TARGET</dt>
5617 <dd>Imposta il target di default per la catena
5621 <p>Rimozione regole e azzeramenti:</p>
5623 <dl class="docutils">
5624 <dt>iptables -F [catena]</dt>
5626 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
5628 <dt>iptables -X [catena]</dt>
5630 <dd>Ripulisce tutte le catene custom (o quella
5633 <dt>iptables -Z [catena]</dt>
5635 <dd>Azzera i contatori sulle catene</dd>
5637 <dt>iptables -D catena #</dt>
5639 <dd>Cancella la regola numero # dalla catena
5643 <p>Interrogazione:</p>
5645 <dl class="docutils">
5646 <dt>iptables -L</dt>
5648 <dd>Elenca le regole esistenti</dd>
5650 <dt>iptables -L -n -v</dt>
5652 <dd>Elenca, senza risolvere gli host, in modo verboso le
5653 regole esistenti</dd>
5657 <div class="section" id="salvataggio-regole">
5658 <h2><a class="toc-backref" href=
5659 "#id120">10.9 Salvataggio regole</a></h2>
5661 <p>Il comando <tt class="docutils literal"><span class=
5662 "pre">iptables</span></tt> serve per interagire con il
5663 framework <tt class="docutils literal"><span class=
5664 "pre">Netfilter</span></tt> che gestisce il firewall di
5665 Linux al livello del kernel. Questo comporta, in modo
5666 analogo a quando avviene col comando <tt class=
5667 "docutils literal"><span class="pre">ifconfig</span></tt>,
5668 che i cambiamenti impostati siano in <em>tempo reale,
5669 RAM</em>, non persistenti nel sistema: al boot successivo
5670 del sistema tutto tornera' alle impostazioni di base (in
5671 questo caso <em>nulle</em>, con policy di default settate
5672 su <tt class="docutils literal"><span class=
5673 "pre">ACCEPT</span></tt> per tutto).</p>
5675 <p>Le varie invocazioni di iptables potrebbero essere
5676 richiamate da degli scripts dedicati, ma fortunatamente e'
5677 stata predisposta una apposita utility per gestire questi
5678 scripts in modo da avere a disposizione un <em>formato
5679 standard</em> per il salvataggio e il ripristino delle
5680 regole del firewall.</p>
5682 <p>Altro problema: decidere quando attivare / disattivare
5683 queste regole. Utilizzare i <em>runlevels</em> non e' una
5684 soluzione adeguata: le regole del firewall sono legate
5685 all'attivita' delle schede di rete (e un host con diverse
5686 schede di rete puo' attivarle a secondo delle esigenze di
5687 routing, partenza di servizi es file_sharing per un
5688 back-up...): il sistema operativo Debian permette di legare
5689 l'esecuzione di comandi alla attivazione di una device di
5690 rete (<tt class="docutils literal"><span class=
5691 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
5692 "docutils literal"><span class="pre">post-up</span></tt>,
5693 utile per devices che richiedono un certo tempo per
5694 inizializzarsi: come un tunnel o una connessione punto a
5695 punto), prima della sua attivazione (<tt class=
5696 "docutils literal"><span class="pre">pre-up</span></tt>).
5697 Allo stesso modo sono disponibili eventi analoghi per
5698 accompagnare la disattivazione dei device di rete: si veda
5699 la pagina man di <tt class="docutils literal"><span class=
5700 "pre">interfaces</span></tt>.</p>
5702 <p>Nel nostro caso avremo per una possibile scheda
5703 <tt class="docutils literal"><span class=
5704 "pre">eth0</span></tt>:</p>
5706 <p><tt class="docutils literal"><span class=
5707 "pre">/etc/network/interfaces</span></tt></p>
5708 <pre class="literal-block">
5709 iface eth1 inet static
5710 up /sbin/iptables-restore /root/firewall/basic_fw
5711 # Seguono i soliti parametri della scheda di rete
5712 address 10.10.208.21
5715 <div class="section" id="iptables-save">
5716 <h3><a class="toc-backref" href=
5717 "#id121">10.9.1 Iptables-save</a></h3>
5719 <p>Per salvare le regole di iptables attualmente presenti
5720 nel kernel si usi il comando:</p>
5721 <pre class="literal-block">
5722 # iptables-save >> /root/firewall/basic_fw
5725 <p>Il contenuto del file dovrebbe essere
5726 <em>comprensibile</em>: sostanzialmente sono regole di
5727 iptables, senza il comando iptables ripetuto, suddivisi
5728 per le varie tabelle. Potete comunque correggere
5729 eventuali parametri con un edito di testo.</p>
5731 <p>Se non avete un'idea migliore potreste voler tenere
5732 gli script dei firewall in una cartella <tt class=
5733 "docutils literal"><span class=
5734 "pre">~/firewall</span></tt> nella home directory
5735 dell'utente <tt class="docutils literal"><span class=
5736 "pre">root</span></tt>.</p>
5739 <div class="section" id="iptables-restore">
5740 <h3><a class="toc-backref" href=
5741 "#id122">10.9.2 Iptables-restore</a></h3>
5743 <p>Per ripristinare un set di regole precedentemente
5744 salvate con <tt class="docutils literal"><span class=
5745 "pre">iptables-save</span></tt> si utilizzi <tt class=
5746 "docutils literal"><span class=
5747 "pre">iptables-restore</span></tt>. Se questo deve essere
5748 fatto in modalita' <em>non interattiva</em>, ad esempio
5749 deve essere eseguito dal demone che si occupa di
5750 inizializzare le schede di rete, oppure un <em>cron</em>
5751 o altro, e' buona norma richiamare i percorsi completi
5752 sia dei comandi che dei file:</p>
5753 <pre class="literal-block">
5754 /sbin/iptables-restore /root/firewall/basic_fw
5759 <div class="section" id="esempi">
5760 <h2><a class="toc-backref" href=
5761 "#id123">10.10 Esempi</a></h2>
5763 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
5764 e' un computer con un paio di schede di rete fisiche una
5765 delle quali collegata alla rete internet l'altra a una rete
5766 privata per la LAN interna.</p>
5769 <ol class="arabic simple">
5770 <li><tt class="docutils literal"><span class=
5771 "pre">eth0</span></tt> scheda di rete principale sulla
5772 rete privata interna 192.168.0.0/24</li>
5774 <li><tt class="docutils literal"><span class=
5775 "pre">eth1</span></tt> scheda di rete secondaria per la
5776 connessione ad internet</li>
5778 <li><tt class="docutils literal"><span class=
5779 "pre">ppp0</span></tt> punto-a-punto per una
5780 connessione ad internet</li>
5784 <div class="section" id="bloccare-i-ping-dall-esterno">
5785 <h3><a class="toc-backref" href=
5786 "#id124">10.10.1 Bloccare i ping
5787 dall'esterno</a></h3>
5789 <p>Spesso gli script che attaccano
5790 <em>automaticamente</em> le varie reti provano a fare un
5791 ping per verificare quali IP sono on-line: bloccare il
5792 traffico <tt class="docutils literal"><span class=
5793 "pre">ICMP</span></tt> in ingresso puo' aiutare ad
5794 evitare parte di questi attacchi:</p>
5795 <pre class="literal-block">
5796 iptables -A INPUT -i ppp0 -p ICMP -j DROP
5800 <div class="section" id="masquerading-snat">
5801 <h3><a class="toc-backref" href=
5802 "#id125">10.10.2 Masquerading
5805 <dl class="docutils">
5806 <dt>Per attivare la network address translation (in
5807 questo caso un SNAT) per la rete locale privata
5808 sull'indirizzo ip del <em>modem</em>::</dt>
5810 <dd>iptables -A POSTROUTING -s
5811 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
5814 <p>Il <em>Masquerading</em> a differenza dello
5815 <em>SNAT</em> puro (<tt class=
5816 "docutils literal"><span class="pre">-j</span>
5817 <span class="pre">SNAT</span> <span class=
5818 "pre">--to-source</span> <span class=
5819 "pre">proprio_ip_pubblico</span> <span class=
5820 "pre">)</span> <span class="pre">legge</span>
5821 <span class="pre">l'indirizzo</span> <span class=
5822 "pre">ip</span> <span class="pre">del</span> <span class=
5823 "pre">device</span> <span class="pre">``ppp0</span></tt>.
5824 In questo modo se l'IP cambia automaticamente si aggiorna
5825 anche il source natting. Se avete un indirizzo IP statico
5826 assegnato al vostro gateway potete invece usare lo SNAT
5829 <dl class="docutils">
5830 <dt>Altri esempi::</dt>
5833 <p class="first">## Change source addresses to
5834 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
5835 SNAT --to 1.2.3.4</p>
5837 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
5838 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
5839 SNAT --to 1.2.3.4-1.2.3.6</p>
5841 <p class="last">## Change source addresses to
5842 1.2.3.4, ports 1-1023 # iptables -t nat -A
5843 POSTROUTING -p tcp -o eth0 -j SNAT --to
5849 <div class="section" id="brute-force">
5850 <h3><a class="toc-backref" href=
5851 "#id126">10.10.3 Brute force</a></h3>
5853 <p>Per limitare attacchi di tipo brute force su SSH:</p>
5854 <pre class="literal-block">
5855 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
5857 iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
5863 <div class="section" id="ftp-server">
5864 <h1><a class="toc-backref" href=
5865 "#id127">11 FTP Server</a></h1>
5867 <p>Il File Transfer Protocol (FTP) (protocollo di
5868 trasferimento file), è un Protocollo per la trasmissione di
5869 dati tra host basato su TCP, in genere usato dagli autori di
5870 pagine web per <em>pubblicare</em> queste nei propio spazi
5871 web. Storicamente veniva anche usato, mediate l'utilizzo di
5872 utenze anonime, come punto di scambio per materiali di vari
5873 utenti tra loro sconosciuti (una directory dei materiali
5874 scaricabili e una dedicata agli <em>uploads</em> degli
5875 utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
5876 mantiene la cosuetudine di renedere disponibile i materiali
5877 dei <em>mirrors</em> anche tramite FTP, probabilmente per
5878 garantire l'accesso ai client piu' datati che non possono
5879 utilizzare tecnologie piu' recenti.</p>
5881 <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
5882 per quanto riguarda il traffico ad esso associato che per il
5883 passaggio delle passwords degli utenti, facilmente sniffabili
5884 da chiunque abbia accesso alla rete. Naturalmente vsftp per
5885 quanto votato alla sicurezza non modifica queste
5886 caratteristiche del protocollo FTP (ma consente di usare
5887 OpenSSL per la autenticazione degli utenti).</p>
5889 <p>Se propio si deve mettere a disposizione un server FTP ai
5890 propi utenti si considerino le seguenti alternative:</p>
5893 <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
5895 <li>Spingere gli utenti ad usare SSL per autenticarsi al
5898 <li>Nel caso di webdesigners si consideri la possibilita'
5899 di offrire alternative come GIT, Subversion, Rsync o
5903 <p>Nel caso non si possa evitare il server FTP:</p>
5906 <li>Non dare agli utenti FTP una shell di sistema (
5907 Concedere come shell <tt class=
5908 "docutils literal"><span class="pre">ftp</span></tt> al
5909 posto di <tt class="docutils literal"><span class=
5910 "pre">bash</span></tt> in <tt class=
5911 "docutils literal"><span class=
5912 "pre">/etc/passwd</span></tt>)</li>
5914 <li>Rendere il filesytem su cui scrive il demone FTP
5915 <tt class="docutils literal"><span class=
5916 "pre">noexec</span></tt> e <tt class=
5917 "docutils literal"><span class="pre">nosuid</span></tt>
5920 <li>Utilizzare un demone FTP come Vsftp: un server FTP con
5921 una forte inclinazione alla sicurezza: <em>Very Secure FTP
5925 <p>Per maggiori informazioni sulle scelte di design legate
5926 alla sicurezza del demone si veda: <a class=
5927 "reference external" href=
5928 "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
5930 <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
5933 <li>Virtual IP configurations</li>
5935 <li>Virtual users</li>
5937 <li>Standalone or inetd operation</li>
5939 <li>Powerful per-user configurability</li>
5941 <li>Bandwidth throttling</li>
5943 <li>Per-source-IP configurability</li>
5945 <li>Per-source-IP limits</li>
5949 <li>Encryption support through SSL integration</li>
5952 <div class="section" id="id8">
5953 <h2><a class="toc-backref" href=
5954 "#id128">11.1 Pacchetti</a></h2>
5956 <p>Per installare il demone vero e propio si usi il
5957 pacchetto <tt class="docutils literal"><span class=
5958 "pre">vsftpd</span></tt> , mentre per aver un client da cui
5959 fare qualche test sono dipsonibili:</p>
5962 <li><tt class="docutils literal"><span class=
5963 "pre">ftp</span></tt> (pacchetto da installare) e' il
5964 solito client a riga di comando</li>
5966 <li><tt class="docutils literal"><span class=
5967 "pre">gftp</span></tt> e' un client grafico simile al
5968 classico <em>WSftp</em></li>
5970 <li>Normalmente i file mananager com Konqueror possono
5971 lavarorare come client FTP</li>
5975 <div class="section" id="sessioni-ftp">
5976 <h2><a class="toc-backref" href=
5977 "#id129">11.2 Sessioni ftp</a></h2>
5979 <p>Vediamo alcuni dei comandi di base per gestire una
5980 sessione ftp a riga di comando:</p>
5982 <dl class="docutils">
5983 <dt>ftp nome_host</dt>
5985 <dd>stabilire la connessione all'host, poi verra' chiesta
5986 la password dell'utente. Se avete sbagliato utente: user
5991 <dd>Lista dei comandi disponibili.</dd>
5993 <dt>help [nome_comando]</dt>
5995 <dd>Cosa fa quel comando.</dd>
5999 <dd>Per caricare un file.</dd>
6003 <dd>Per scaricare un file.</dd>
6007 <dd>Lista dei file disponibili.</dd>
6011 <dd>Spostarsi in un altra directory.</dd>
6015 <dd>Cambio directory in LOCALE.</dd>
6019 <dd>Per lavorare su file multipli.</dd>
6024 <dl class="first last docutils">
6025 <dt>Per uscire dalla modalita' interattiva</dt>
6028 <dl class="first last docutils">
6029 <dt>(non vi chiede conferma di ogni singola
6032 <dd>su ogni singolo file...).</dd>
6040 <dd>Entra in modalita' trasferimento binario.</dd>
6044 <dd>Entra in modalita' trasferimento ascii.</dd>
6048 <dd>Per chiudere la sessione.</dd>
6052 <div class="section" id="configurazione-iniziale">
6053 <h2><a class="toc-backref" href=
6054 "#id130">11.3 Configurazione
6057 <p>Il demone di vsftpd e' immediatamente disponibile ma
6058 solo in modalita' anonima (si pensi a uno scenario in cui
6059 si vuole rendere disponibili dei files tramite FTP) e in
6060 <em>sola lettura</em>. Per accedere al servizio si usi
6061 quini come utente <tt class="docutils literal"><span class=
6062 "pre">anonymous</span></tt> (la passwords in genere e' come
6063 consuetudine il propio indirizzo email), la cui
6064 <em>home</em> directory sara' <tt class=
6065 "docutils literal"><span class="pre">/home/ftp/</span></tt>
6066 (<tt class="docutils literal"><span class=
6067 "pre">/srv/ftp</span></tt> in Squeeze):</p>
6068 <pre class="literal-block">
6069 zoo:~# ftp localhost
6070 Connected to localhost.localdomain.
6072 Name (localhost:root): anonymous
6073 331 Please specify the password.
6075 230 Login successful.
6076 Remote system type is UNIX.
6077 Using binary mode to transfer files.
6079 200 PORT command successful. Consider using PASV.
6080 150 Here comes the directory listing.
6081 -rw-r--r-- 1 0 0 0 Feb 03 17:17 anoni
6082 226 Directory send OK.
6086 <div class="section" id="abilitare-gli-utenti-locali">
6087 <h2><a class="toc-backref" href=
6088 "#id131">11.4 Abilitare gli utenti
6091 <p>Per poter modificare le impostazioni iniziali, ad
6092 esempio per permettere l'accesso agli utenti del server, si
6093 modifichera' il file <tt class=
6094 "docutils literal"><span class=
6095 "pre">/etc/vsftpd.conf</span></tt>, a seguire le
6096 impostazioni fondamentali ed altre interessanti per rendere
6097 il server accessibile da utenti di sistema (autenticati
6098 tramite la loro password, quindi con PAM) per il tipico
6099 utilizzo di web designers che debbano pubblicare le loro
6100 pagine web (e non si siano fatti convincere a usare
6102 <pre class="literal-block">
6103 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
6105 # Disabilitiamo l'utente anonimo
6107 # Uncomment this to allow local users to log in.
6109 # Accesso garantito agli utenti di sistema
6111 # Uncomment this to enable any form of FTP write command.
6113 # Permettiamo agli utenti di caricare documenti nella loro home
6115 # You may fully customise the login banner string:
6116 ftpd_banner=Benvenuti al servizio ftp del sito example.com
6119 <p>Per abilitare i cambiamenti si proceda a riavviare il
6120 server: <tt class="docutils literal"><span class=
6121 "pre">/etc/init.d/vsftpd</span> <span class=
6122 "pre">restart</span></tt> e si monitorizzi il file di log
6123 <tt class="docutils literal"><span class="pre">tail</span>
6124 <span class="pre">-f</span> <span class=
6125 "pre">/var/log/vsftpd.log</span></tt> per controllarne il
6126 funzionamento (e anche <tt class=
6127 "docutils literal"><span class=
6128 "pre">/var/log/syslog</span></tt> nel caso non si riuscisse
6129 a far partire correttamente il servizio.</p>
6131 <p>NOTE: Se non riuscite ad ottenere un <em>directory
6132 listing</em> (<tt class="docutils literal"><span class=
6133 "pre">ls</span></tt>) ottenendo un errore <tt class=
6134 "docutils literal"><span class="pre">500</span>
6135 <span class="pre">Illegal</span> <span class=
6136 "pre">PORT</span> <span class="pre">command?</span>
6137 <span class="pre">FTP</span> <span class=
6138 "pre">error</span></tt> abilitare la modalita' passiva col
6139 comando ftp <tt class="docutils literal"><span class=
6140 "pre">passive</span></tt>.</p>
6143 <div class="section" id="jail-chroot">
6144 <h2><a class="toc-backref" href=
6145 "#id132">11.5 Jail chroot</a></h2>
6147 <p>Si puo' impedire all'utente di spostarsi arbitrariamente
6148 per il file system del servere visualizzare il contenuto
6149 delle directory, ad esempio la cartella <tt class=
6150 "docutils literal"><span class="pre">/etc</span></tt>,
6151 confinandolo in una jail chroot limitata alla sua home
6153 <pre class="literal-block">
6154 # You may restrict local users to their home directories. See the FAQ for
6155 # the possible risks in this before using chroot_local_user or
6156 # chroot_list_enable below.
6157 chroot_local_user=YES
6160 <p>Generalmente un utente di sistema con il solo accesso
6161 FTP non dovrebbe avere la possibilita' di poter navigare
6162 liberamente per il file system del server, esponendo file
6163 di configurazione e quant'altro l'utente potrebbe trarre
6164 utili informazioni sul quali software siano installati e di
6166 <pre class="literal-block">
6167 Remote system type is UNIX.
6168 Using binary mode to transfer files.
6172 550 Failed to change directory.
6176 <div class="section" id="permessi-sul-filesystem">
6177 <h2><a class="toc-backref" href=
6178 "#id133">11.6 Permessi sul
6181 <p>Come accennato precedentemente e' opportuno che i
6182 filesystems sui quali un utente puo' scrivere o modificare
6183 il contenuto non abbiano i privilegi di eseguibilita' e
6184 suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
6185 "docutils literal"><span class="pre">/home/</span></tt>
6186 directory quindi avremo in <tt class=
6187 "docutils literal"><span class=
6188 "pre">/etc/fstab</span></tt>:</p>
6189 <pre class="literal-block">
6190 /dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
6194 <div class="section" id="shell-dell-utente">
6195 <h2><a class="toc-backref" href=
6196 "#id134">11.7 Shell dell'utente</a></h2>
6198 <p>Come gia' detto piu' volte le passwords degli utenti
6199 viaaggiano in rete in chiaro, ponendo un grave problema di
6200 sicurezza. Sara' quindi opportuno disbilitare la shell di
6201 questi utenti, tramite il flag <tt class=
6202 "docutils literal"><span class="pre">--shell</span>
6203 <span class="pre">/bin/false</span></tt> in fase di
6204 creazione degli utenti:</p>
6205 <pre class="literal-block">
6206 # adduser --shell /bin/false nome_utente
6209 <p>Oppure correggiendo manualmente il file <tt class=
6210 "docutils literal"><span class=
6211 "pre">/etc/passwd</span></tt> per modificare l'inpostazione
6212 della shell dell'utente:</p>
6213 <pre class="literal-block">
6214 nome_utente:x:1001:1001::/var/spool/postfix:/bin/bash
6215 # la riga sopra deve essere trasformata in
6216 nome_utente:x:1001:1001::/var/spool/postfix:/bin/false
6219 <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
6220 <tt class="docutils literal"><span class=
6221 "pre">/bin/false</span></tt> all'elenco delle shell
6224 <p><tt class="docutils literal"><span class=
6225 "pre">/etc/shells</span></tt></p>
6226 <pre class="literal-block">
6232 <div class="section" id="altre-opzioni">
6233 <h2><a class="toc-backref" href=
6234 "#id135">11.8 Altre opzioni</a></h2>
6236 <dl class="docutils">
6237 <dt>xferlog_enable=YES</dt>
6239 <dd>Verra' tenuto un file di log <tt class=
6240 "docutils literal"><span class=
6241 "pre">/var/log/vsftpd.log</span></tt> degli upload e
6242 download sul server.</dd>
6244 <dt>hide_ids=YES</dt>
6246 <dd>Nasconde le userid e groupid mascherandole con
6247 <tt class="docutils literal"><span class=
6248 "pre">ftp</span></tt> .</dd>
6250 <dt>anon_root=/home/ftp</dt>
6252 <dd>Home directory dell'utente anonimo.</dd>
6254 <dt>write_enable=YES</dt>
6256 <dd>Permette agli utenti di eseguire i comandi che
6257 possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
6258 MKD, RMD, APPE e SITE .</dd>
6260 <dt>idle_session_timeout=600</dt>
6262 <dd>Permette agli utenti di restare connessi piu' a
6263 lungo, utile per i webdesigners che passano intere
6264 giornate connessi al server.</dd>