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 6 November 2007), 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;
42 background-color: transparent;
46 text-decoration: none;
51 text-decoration: none;
52 background-color: transparent;
65 margin: 0.5em 0 1em 0;
71 background-color: transparent;
76 background-color: transparent;
80 text-decoration: none;
104 h1, h2, h3, h4, h5, h6 {
106 background-color: transparent;
113 margin-bottom: 0.5em;
114 border-bottom: 2px solid #aaa;
119 margin-bottom: 0.5em;
120 border-bottom: 1px solid #aaa;
125 margin-bottom: 0.5em;
131 margin-bottom: 0.5em;
137 margin-bottom: 0.5em;
143 margin-bottom: 0.5em;
151 margin-bottom: 1.5em;
154 div.admonition, div.note, div.tip, div.caution, div.important {
157 border-top: 1px solid #aaa;
158 border-left: 1px solid #aaa;
159 border-bottom: 2px solid #555;
160 border-right: 2px solid #555;
164 background: transparent url('../images/important.png') 10px 2px no-repeat;
168 background: transparent url('../images/caution.png') 10px 2px no-repeat;
172 background: transparent url('../images/note.png') 10px 2px no-repeat;
176 background: transparent url('../images/tip.png') 10px 2px no-repeat;
179 div.admonition-example {
180 background: transparent url('../images/tip.png') 10px 2px no-repeat;
183 div.admonition-critical-example {
184 background: transparent url('../images/important.png') 10px 2px no-repeat;
189 border-bottom: 1px solid #aaa;
195 border: 1px solid gray;
196 border-collapse: collapse;
201 table.docutils caption {
205 table.docutils td, table.docutils th {
206 padding: 0.25em 0.5em;
210 background-color: #dddddd;
218 border-top: 1px solid #aaa;
219 border-left: 1px solid #aaa;
220 border-bottom: 2px solid #555;
221 border-right: 2px solid #555;
227 border-bottom: 1px solid #aaa;
241 <div class="document" id="servizi-di-rete-passo-a-passo">
242 <h1 class="title">Servizi di rete passo a passo</h1>
244 <h2 class="subtitle" id=
245 "appunti-sulla-installazione-e-configurazione-dei-servizi">
246 Appunti sulla installazione e configurazione dei servizi</h2>
249 <table class="docutils field-list" frame="void" rules="none">
250 <col class="field-name">
251 <col class="field-body">
255 <th class="field-name">Author:</th>
257 <td class="field-body">Andrea Manni</td>
261 <th class="field-name">Copyright:</th>
263 <td class="field-body">GFDL</td>
267 <th class="field-name">Version:</th>
269 <td class="field-body">0.8</td>
275 <p>Questa guida e' dedicata agli studenti delle lezioni di
276 informatica tenute da Andrea nel lab208. Nella parte iniziale
277 sono presenti alcuni richiami alle impostazioni di rete e di
278 installazione del laboratorio 208 (lab208) dove generalmente si
279 tengono le lezioni. Questi parametri non sono interessanti per
280 chiunque si trovasse al di fuori della rete piffa.net .</p>
282 <div class="contents topic" id="indice-degli-argomenti">
283 <p class="topic-title first">Indice degli argomenti</p>
285 <ul class="auto-toc simple">
287 <a class="reference internal" href=
288 "#configurazione-sistema" id="id7" name=
289 "id7">1 Configurazione sistema</a>
291 <ul class="auto-toc">
292 <li><a class="reference internal" href=
293 "#solo-per-uso-interno" id="id8" name=
294 "id8">1.1 Solo per uso
298 <a class="reference internal" href="#rete" id="id9"
299 name="id9">1.2 Rete</a>
301 <ul class="auto-toc">
302 <li><a class="reference internal" href=
303 "#interfaces" id="id10" name=
304 "id10">1.2.1 interfaces</a></li>
308 <li><a class="reference internal" href=
309 "#bash-completion" id="id11" name=
310 "id11">1.3 Bash completion</a></li>
312 <li><a class="reference internal" href="#vim" id="id12"
313 name="id12">1.4 Vim</a></li>
315 <li><a class="reference internal" href="#vnc" id="id13"
316 name="id13">1.5 VNC</a></li>
318 <li><a class="reference internal" href=
319 "#lista-dei-pacchetti-di-base" id="id14" name=
320 "id14">1.6 Lista dei pacchetti di
324 <a class="reference internal" href=
325 "#apt-configurazione" id="id15" name=
326 "id15">1.7 Apt configurazione</a>
328 <ul class="auto-toc">
329 <li><a class="reference internal" href=
330 "#sources-list" id="id16" name=
331 "id16">1.7.1 sources.list</a></li>
333 <li><a class="reference internal" href=
334 "#etc-apt-apt-conf" id="id17" name=
335 "id17">1.7.2 /etc/apt/apt.conf</a></li>
342 <a class="reference internal" href="#squid" id="id18"
343 name="id18">2 Squid</a>
345 <ul class="auto-toc">
347 <a class="reference internal" href=
348 "#configurazione-squid-conf" id="id19" name=
349 "id19">2.1 Configurazione:
352 <ul class="auto-toc">
353 <li><a class="reference internal" href="#cache-dir"
355 "id20">2.1.1 Cache_dir</a></li>
357 <li><a class="reference internal" href=
358 "#tag-maximum-object-size" id="id21" name=
359 "id21">2.1.2 TAG:
360 maximum_object_size</a></li>
362 <li><a class="reference internal" href=
363 "#tag-cache-mem" id="id22" name=
364 "id22">2.1.3 TAG:
367 <li><a class="reference internal" href=
368 "#tag-minimum-object-size" id="id23" name=
369 "id23">2.1.4 TAG:
370 minimum_object_size</a></li>
375 <a class="reference internal" href=
376 "#negoziazione-degli-accesi-al-servizio" id="id24"
377 name="id24">2.2 Negoziazione degli
378 accesi al servizio</a>
380 <ul class="auto-toc">
381 <li><a class="reference internal" href=
382 "#acl-e-http-access" id="id25" name=
383 "id25">2.2.1 ACL e http
389 <a class="reference internal" href="#testare-squid"
390 id="id26" name="id26">2.3 Testare
393 <ul class="auto-toc">
394 <li><a class="reference internal" href=
395 "#client-wgetrc" id="id27" name=
396 "id27">2.3.1 Client:
399 <li><a class="reference internal" href=
400 "#server-access-log" id="id28" name=
401 "id28">2.3.2 Server:
409 <a class="reference internal" href="#apache" id="id29"
410 name="id29">3 Apache</a>
412 <ul class="auto-toc">
413 <li><a class="reference internal" href=
414 "#pacchetti-da-installare" id="id30" name=
415 "id30">3.1 Pacchetti da
416 installare::</a></li>
418 <li><a class="reference internal" href=
419 "#configurazione-di-apache" id="id31" name=
420 "id31">3.2 Configurazione di
423 <li><a class="reference internal" href="#apache-conf"
425 "id32">3.3 apache.conf</a></li>
428 <a class="reference internal" href=
429 "#installazione-di-php" id="id33" name=
430 "id33">3.4 Installazione di PHP</a>
432 <ul class="auto-toc">
433 <li><a class="reference internal" href=
434 "#test-del-modulo-php" id="id34" name=
435 "id34">3.4.1 Test del modulo
438 <li><a class="reference internal" href=
439 "#installazione-del-supporto-per-mysql" id="id35"
440 name="id35">3.4.2 Installazione
441 del supporto per Mysql</a></li>
443 <li><a class="reference internal" href=
444 "#phpmyadmin" id="id36" name=
445 "id36">3.4.3 phpmyadmin</a></li>
447 <li><a class="reference internal" href=
448 "#installazione-del-supporto-per-postgresql" id=
450 "id37">3.4.4 Installazione del
451 supporto per Postgresql</a></li>
453 <li><a class="reference internal" href=
454 "#phppgadmin" id="id38" name=
455 "id38">3.4.5 phppgadmin</a></li>
460 <a class="reference internal" href="#virtual-hosts"
461 id="id39" name="id39">3.5 Virtual
464 <ul class="auto-toc">
465 <li><a class="reference internal" href=
466 "#gestione-dns" id="id40" name=
467 "id40">3.5.1 Gestione DNS</a></li>
469 <li><a class="reference internal" href=
470 "#virtual-host" id="id41" name=
471 "id41">3.5.2 Virtual host</a></li>
476 <a class="reference internal" href=
477 "#negoziazione-accessi" id="id42" name=
478 "id42">3.6 Negoziazione accessi</a>
480 <ul class="auto-toc">
481 <li><a class="reference internal" href=
482 "#limiti-su-base-ip" id="id43" name=
483 "id43">3.6.1 Limiti su base
489 <a class="reference internal" href=
490 "#user-authentication" id="id44" name=
491 "id44">3.7 User Authentication</a>
493 <ul class="auto-toc">
494 <li><a class="reference internal" href=
495 "#definire-la-cartella" id="id45" name=
496 "id45">3.7.1 Definire la
499 <li><a class="reference internal" href=
500 "#creazione-del-database-delle-passwords" id="id46"
501 name="id46">3.7.2 Creazione del
502 database delle passwords</a></li>
504 <li><a class="reference internal" href="#id3" id=
506 "id47">3.7.3 Configurazione di
511 <li><a class="reference internal" href="#cavets" id=
512 "id48" name="id48">3.8 Cavets</a></li>
517 <a class="reference internal" href="#domain-name-system"
518 id="id49" name="id49">4 Domain Name
521 <ul class="auto-toc">
522 <li><a class="reference internal" href=
523 "#risoluzione-inversa" id="id50" name=
524 "id50">4.1 Risoluzione
527 <li><a class="reference internal" href=
528 "#nomi-di-dominio" id="id51" name=
529 "id51">4.2 Nomi di dominio</a></li>
531 <li><a class="reference internal" href=
532 "#tipologie-di-record" id="id52" name=
533 "id52">4.3 Tipologie di
536 <li><a class="reference internal" href="#utilizzo" id=
538 "id53">4.4 Utilizzo</a></li>
540 <li><a class="reference internal" href=
541 "#risoluzione-dei-nomi-di-dominio" id="id54" name=
542 "id54">4.5 Risoluzione dei nomi di
545 <li><a class="reference internal" href="#dig" id="id55"
546 name="id55">4.6 Dig</a></li>
548 <li><a class="reference internal" href="#resolv-conf"
550 "id56">4.7 resolv.conf</a></li>
552 <li><a class="reference internal" href="#etc-hosts" id=
554 "id57">4.8 /etc/hosts</a></li>
556 <li><a class="reference internal" href="#hostname" id=
558 "id58">4.9 Hostname</a></li>
563 <a class="reference internal" href="#dnsmasq" id="id59"
564 name="id59">5 DNSmasq</a>
566 <ul class="auto-toc">
567 <li><a class="reference internal" href=
568 "#configurazione" id="id60" name=
569 "id60">5.1 Configurazione</a></li>
571 <li><a class="reference internal" href="#dhcp" id=
572 "id61" name="id61">5.2 DHCP</a></li>
574 <li><a class="reference internal" href="#dns-cache" id=
575 "id62" name="id62">5.3 DNS
581 <a class="reference internal" href=
582 "#bind-dns-autoritativo" id="id63" name=
583 "id63">6 Bind : DNS Autoritativo</a>
585 <ul class="auto-toc">
586 <li><a class="reference internal" href="#id4" id="id64"
587 name="id64">6.1 DNS cache</a></li>
592 <a class="reference internal" href="#samba" id="id65"
593 name="id65">7 Samba</a>
595 <ul class="auto-toc">
596 <li><a class="reference internal" href="#pacchetti" id=
598 "id66">7.1 Pacchetti</a></li>
600 <li><a class="reference internal" href=
601 "#passwords-e-autenticazione" id="id67" name=
602 "id67">7.2 Passwords e
603 autenticazione</a></li>
605 <li><a class="reference internal" href=
606 "#creazione-utenti" id="id68" name=
607 "id68">7.3 Creazione Utenti</a></li>
610 <a class="reference internal" href=
611 "#creare-la-condivisione" id="id69" name=
612 "id69">7.4 Creare la
615 <ul class="auto-toc">
616 <li><a class="reference internal" href=
617 "#sicurezza-permessi-di-esecuzione-sul-server" id=
619 "id70">7.4.1 Sicurezza: permessi
620 di esecuzione sul server</a></li>
624 <li><a class="reference internal" href=
625 "#configurazione-dell-applicativo-samba-vero-e-proprio"
627 "id71">7.5 Configurazione
628 dell'applicativo Samba vero e proprio.</a></li>
630 <li><a class="reference internal" href=
631 "#testare-il-servizio" id="id72" name=
632 "id72">7.6 Testare il
638 <a class="reference internal" href=
639 "#server-di-posta-postfix" id="id73" name=
640 "id73">8 Server di posta: Postfix</a>
642 <ul class="auto-toc">
644 <a class="reference internal" href=
645 "#test-del-server-smtp" id="id74" name=
646 "id74">8.1 Test del server smtp</a>
648 <ul class="auto-toc">
649 <li><a class="reference internal" href="#swaks" id=
651 "id75">8.1.1 Swaks</a></li>
655 <li><a class="reference internal" href="#imap-e-pop"
656 id="id76" name="id76">8.2 Imap e
660 <a class="reference internal" href=
661 "#client-a-riga-di-comando" id="id77" name=
662 "id77">8.3 Client a riga di
665 <ul class="auto-toc">
666 <li><a class="reference internal" href="#mailx" id=
668 "id78">8.3.1 mailx</a></li>
670 <li><a class="reference internal" href="#mutt" id=
672 "id79">8.3.2 Mutt</a></li>
674 <li><a class="reference internal" href=
675 "#web-client" id="id80" name=
676 "id80">8.3.3 Web client</a></li>
681 <a class="reference internal" href="#graylisting" id=
683 "id81">8.4 Graylisting</a>
685 <ul class="auto-toc">
686 <li><a class="reference internal" href=
687 "#abilitazione-in-postfix" id="id82" name=
688 "id82">8.4.1 Abilitazione in
691 <li><a class="reference internal" href="#test" id=
693 "id83">8.4.2 Test</a></li>
695 <li><a class="reference internal" href=
696 "#statistiche" id="id84" name=
697 "id84">8.4.3 Statistiche</a></li>
704 <a class="reference internal" href="#firewall" id="id85"
705 name="id85">9 Firewall</a>
707 <ul class="auto-toc">
708 <li><a class="reference internal" href="#links" id=
709 "id86" name="id86">9.1 Links</a></li>
711 <li><a class="reference internal" href="#ipfilter" id=
713 "id87">9.2 Ipfilter</a></li>
716 <a class="reference internal" href=
717 "#progettazione-di-un-firewall" id="id88" name=
718 "id88">9.3 Progettazione di un
721 <ul class="auto-toc">
722 <li><a class="reference internal" href=
723 "#collocazione" id="id89" name=
724 "id89">9.3.1 Collocazione</a></li>
726 <li><a class="reference internal" href=
727 "#policy-di-default" id="id90" name=
728 "id90">9.3.2 Policy di
731 <li><a class="reference internal" href="#hardware"
733 "id91">9.3.3 Hardware</a></li>
737 <li><a class="reference internal" href=
738 "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
739 "id92" name="id92">9.4 Percorso dei
740 pacchetti tra tabelle e catene</a></li>
743 <a class="reference internal" href=
744 "#concetti-di-base" id="id93" name=
745 "id93">9.5 Concetti di base</a>
747 <ul class="auto-toc">
748 <li><a class="reference internal" href=
749 "#tabelle-catene-regole" id="id94" name=
750 "id94">9.5.1 Tabelle, catene,
753 <li><a class="reference internal" href="#match" id=
755 "id95">9.5.2 Match</a></li>
757 <li><a class="reference internal" href="#targets"
759 "id96">9.5.3 Targets</a></li>
763 <li><a class="reference internal" href=
764 "#tabella-filter" id="id97" name=
765 "id97">9.6 Tabella Filter</a></li>
767 <li><a class="reference internal" href=
768 "#flush-automatico-per-macchine-remote" id="id98" name=
769 "id98">9.7 Flush automatico per
770 macchine remote</a></li>
772 <li><a class="reference internal" href=
773 "#gestione-regole-rules" id="id99" name=
774 "id99">9.8 Gestione regole
778 <a class="reference internal" href=
779 "#salvataggio-regole" id="id100" name=
780 "id100">9.9 Salvataggio regole</a>
782 <ul class="auto-toc">
783 <li><a class="reference internal" href=
784 "#iptables-save" id="id101" name=
785 "id101">9.9.1 Iptables-save</a></li>
787 <li><a class="reference internal" href=
788 "#iptables-restore" id="id102" name=
789 "id102">9.9.2 Iptables-restore</a></li>
794 <a class="reference internal" href="#esempi" id=
795 "id103" name="id103">9.10 Esempi</a>
797 <ul class="auto-toc">
798 <li><a class="reference internal" href=
799 "#bloccare-i-ping-dall-esterno" id="id104" name=
800 "id104">9.10.1 Bloccare i ping
801 dall'esterno</a></li>
803 <li><a class="reference internal" href=
804 "#masquerading-snat" id="id105" name=
805 "id105">9.10.2 Masquerading
808 <li><a class="reference internal" href=
809 "#brute-force" id="id106" name=
810 "id106">9.10.3 Brute
817 <li><a class="reference internal" href="#note" id="id107"
818 name="id107">10 NOTE</a></li>
822 <p>Generato con: <a class="reference external" href=
823 "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
825 <div class="section" id="configurazione-sistema">
826 <h1><a class="toc-backref" href=
827 "#id7">1 Configurazione sistema</a></h1>
829 <div class="section" id="solo-per-uso-interno">
830 <h2><a class="toc-backref" href=
831 "#id8">1.1 Solo per uso interno</a></h2>
833 <p>Impostazioni di base per la configurazione del sistema
834 operativo e della rete nel laboratorio 208 facente parte
835 della rete piffa.net .</p>
837 <p>Qui riportati per comodita' degli studenti (e del
838 docente che non sara' <strong>mai piu'</strong> costretto a
839 ripeterli continuamente! ). Gli altri lettori potranno
840 tenerli presenti per cercare di comprendere gli esempi nel
841 testo. Ad esempio: quando leggerete <tt class=
842 "docutils literal"><span class=
843 "pre">10.10.208.254:3128</span></tt> saprete che si tratta
844 del nostro <em>proxy http</em>, stara' quindi a voi
845 sostituire i dati con gli equivalenti <em>IP</em> della
849 <div class="section" id="rete">
850 <h2><a class="toc-backref" href=
851 "#id9">1.2 Rete</a></h2>
853 <p>Parametri della rete attualmente in uso:</p>
855 <table border="1" class="docutils">
863 <td colspan="2">Parametri della rete</td>
869 <td>10.10.208.0/24</td>
875 <td>255.255.255.0</td>
881 <td>10.10.208.255</td>
887 <td>10.10.208.254</td>
893 <td>10.10.208.254</td>
899 <td>10.10.208.254:3128</td>
904 <p>Sul portatile di Andrea, corrispondente all'IP 254, gira
905 un DHCP, proxy http e mirror di Debian ( <a class=
906 "reference external" href=
907 "http://debian.piffa.net">http://debian.piffa.net</a>). Se
908 Andrea non e' in aula (o ancora peggio non c'e' il suo
909 portatile Net) gli studenti dovranno darsi un indirizzo IP
910 manualmente e disabilitare il proxy (che pero' e
911 trasparente, quindi fate pure come se non ci fosse ;) . Ad
912 oggi il <em>lab208</em> e' servito dal server Bender (254 o
913 248) che ha ripreso le sue vecchie funzioni.</p>
915 <div class="section" id="interfaces">
916 <h3><a class="toc-backref" href=
917 "#id10">1.2.1 interfaces</a></h3>
919 <p>Segue un esempio del file di configurazione della
920 scheda di rete con configurazione statica:</p>
922 <p>/etc/network/interfaces:</p>
923 <pre class="literal-block">
924 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
926 # The loopback interface
927 iface lo inet loopback
929 # La prima scheda di rete (se si chiama eth0)
930 # (network, broadcast and gateway sono optional)
931 iface etho inet static
933 # iface etho inet dhcp
934 address 10.10.208.101
935 netmask 255.255.255.0
937 broadcast 10.10.208.255
938 gateway 10.10.208.254
940 # Quali interfacci devono partire automaticamente:
944 <p>Controllare il nome della propria scheda di rete: a
945 volte <em>udev</em> rinomina la prima scheda a <tt class=
946 "docutils literal"><span class="pre">eth1</span></tt>,
947 oppure potreste avere piu' di una scheda di rete (anche
948 un'interfaccia <em>firewire</em> puo' essere
949 automaticamente abilitata come scheda di rete).</p>
951 <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
952 , eth0:1 , ...) ricordarsi che queste dipendono dalla
953 scheda fisica a cui sono associate: abbattere con
954 <tt class="docutils literal"><span class=
955 "pre">ifconfig</span> <span class="pre">down</span>
956 <span class="pre">eth0</span></tt> la scheda principale
957 fara' cadere anche queste. Tornando ad attivare la scada
958 principale con <tt class="docutils literal"><span class=
959 "pre">ifconfig</span> <span class="pre">eth0</span>
960 <span class="pre">up</span></tt> la virtuale tornera'
961 attiva: nel caso voleste disabilitarla dovrete quindi
962 sempre abbattere manualmente la scheda virtuale
963 <em>prima</em> della scheda reale.</p>
965 <p>I DNS vanno indicati nel file <tt class=
966 "docutils literal"><span class=
967 "pre">/etc/resolv.conf</span></tt> , la cui sintassi e'
968 spiegata al punto 4.6 .</p>
972 <div class="section" id="bash-completion">
973 <h2><a class="toc-backref" href=
974 "#id11">1.3 Bash completion</a></h2>
976 <p>Il completamento automatico della shell (che si attiva
977 premendo il tasto tab una o due volte mentre si sta
978 scrivendo un termine) permette di comporre automaticamente
979 i nomi dei comandi e i percorsi dei file, sopratutto la
980 composizione automatica dei percorsi dei file e' di grande
983 <p>Bash_completion permette di integrare il completamento
984 automatico con i nomi dei pacchetti e oggetti dei comandi:
985 ad es. volendo digitare <tt class=
986 "docutils literal"><span class="pre">apt-get</span>
987 <span class="pre">inst[TAB]</span> <span class=
988 "pre">xtigh[TAB]</span></tt> ora verra' completato
989 automaticamente sia la parola <tt class=
990 "docutils literal"><span class="pre">install</span></tt>
991 che il nome del pacchetto <tt class=
992 "docutils literal"><span class=
993 "pre">xtightvncviewer</span></tt>.</p>
995 <p>Abilitare /etc/bash_completion nel file <tt class=
996 "docutils literal"><span class=
997 "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
998 proprio <tt class="docutils literal"><span class=
999 "pre">~/.bashrc</span></tt> (che sarebbe il file
1000 <em>nascosto</em>, quindi con un punto all'inizio del nome
1001 del file, di configurazione della shell bash per ogni
1002 utente, presente nella propria <em>home
1003 directory</em>):</p>
1004 <pre class="literal-block">
1005 echo ". /etc/bash_completion" >> ~/.bashrc
1008 <p>Esempio di ~/.bahsrc</p>
1009 <pre class="literal-block">
1010 # ~/.bashrc: executed by bash(1) for non-login shells.
1012 export PS1='\h:\w\$ '
1015 # De-commentare le seguenti righe per abilitare la colorazione dei
1017 export LS_OPTIONS='--color=auto'
1019 alias ls='ls $LS_OPTIONS'
1020 alias ll='ls $LS_OPTIONS -l'
1021 alias l='ls $LS_OPTIONS -lA'
1023 # Some more alias to avoid making mistakes:
1028 # questo abilita bash completion
1029 . /etc/bash_completion
1032 <p>Il file <tt class="docutils literal"><span class=
1033 "pre">/etc/bash_completion</span></tt> deve essere presente
1034 nel sistema, in caso contrario installare il pacchetto:
1035 <tt class="docutils literal"><span class=
1036 "pre">bash-completion</span></tt>. Generalmente l'utente
1037 <tt class="docutils literal"><span class=
1038 "pre">root</span></tt> ha un file <tt class=
1039 "docutils literal"><span class="pre">.bashrc</span></tt>
1040 preimpostato analogo a quello citato sopra, a differenza
1041 dei normali utenti di sistema.</p>
1046 <li><a class="reference external" href=
1047 "http://www.debian-administration.org/articles/316">An
1048 introduction to bash completion</a></li>
1050 <li><a class="reference external" href=
1051 "http://www.caliban.org/bash/">Working more productively
1052 with bash 2.x/3.x</a></li>
1056 <div class="section" id="vim">
1057 <h2><a class="toc-backref" href=
1058 "#id12">1.4 Vim</a></h2>
1060 <p>Vim e' l'editor di testo preferito dai sistemisti,
1061 quindi sara' conveniente impostare fin da subito alcune
1062 impostazioni per renderlo piu' comodo.</p>
1064 <p>Assicurarsi che sia installata nel sistema la versione
1065 completa dell'editor <tt class=
1066 "docutils literal"><span class="pre">vim</span></tt>
1067 installando il pacchetto <tt class=
1068 "docutils literal"><span class="pre">vim</span></tt>:</p>
1069 <pre class="literal-block">
1070 # apt-get install vim
1072 e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
1074 " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
1075 " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
1076 " you can find below. If you wish to change any of those settings, you should
1077 " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
1078 " everytime an upgrade of the vim packages is performed. It is recommended to
1079 " make changes after sourcing debian.vim since it alters the value of the
1080 " 'compatible' option.
1082 " This line should not be removed as it ensures that various options are
1083 " properly set to work with the Vim-related packages available in Debian.
1086 " Uncomment the next line to make Vim more Vi-compatible
1087 " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
1088 " options, so any other options should be set AFTER setting 'compatible'.
1091 " Vim5 and later versions support syntax highlighting. Uncommenting the next
1092 " line enables syntax highlighting by default.
1095 " If using a dark background within the editing area and syntax highlighting
1096 " turn on this option as well
1099 " Uncomment the following to have Vim jump to the last position when
1103 au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
1104 \| exe "normal! g'\"" | endif
1107 " Uncomment the following to have Vim load indentation rules and plugins
1108 " according to the detected filetype.
1110 filetype plugin indent on
1113 " The following are commented out as they cause vim to behave a lot
1114 " differently from regular Vi. They are highly recommended though.
1115 set showcmd " Show (partial) command in status line.
1116 "set showmatch " Show matching brackets.
1117 set ignorecase " Do case insensitive matching
1118 "set smartcase " Do smart case matching
1119 "set incsearch " Incremental search
1120 set autowrite " Automatically save before commands like :next and :make
1121 "set hidden " Hide buffers when they are abandoned
1122 "set mouse=a " Enable mouse usage (all modes) in terminals
1124 " Source a global configuration file if available
1125 " XXX Deprecated, please move your changes here in /etc/vim/vimrc
1126 if filereadable("/etc/vim/vimrc.local")
1127 source /etc/vim/vimrc.local
1131 <p>I principianti faranno bene ad esercitarsi con
1132 <tt class="docutils literal"><span class=
1133 "pre">vimtutor</span> <span class="pre">it</span></tt>.</p>
1136 <div class="section" id="vnc">
1137 <h2><a class="toc-backref" href=
1138 "#id13">1.5 VNC</a></h2>
1140 <p>I Virtual Network Computing (o VNC) sono software di
1141 controllo remoto e servono per amministrare il proprio
1142 computer a distanza o visualizzare la sessione di lavoro di
1143 un altro computer sul proprio a scopo didattico.</p>
1145 <p>Scaricare il pacchetto <tt class=
1146 "docutils literal"><span class=
1147 "pre">xtightvncviewer</span></tt> e lo script <tt class=
1148 "docutils literal"><span class="pre">guarda.sh</span></tt>
1149 in una posizione (collocazione nel <em>path</em> degli
1150 utenti, es <tt class="docutils literal"><span class=
1151 "pre">echo</span> <span class="pre">$PATH</span></tt> per
1152 visualizzare l'attuale path ) comoda per gli utenti ( in
1153 genere <tt class="docutils literal"><span class=
1154 "pre">/bin</span></tt> ), rendere eseguibile lo script.</p>
1157 <pre class="literal-block">
1160 wget http://debian.piffa.net/guarda.sh
1165 <p>Si noti che non e' possibile lanciare un applicativo sul
1166 server grafico di un utente da una shell in cui si sta
1167 lavorando come altro utente, anche se root. E' quindi
1168 necessario essere l'utente di sistema che si e' loggato
1169 inizialmente nella sessione grafica per poter lanciare lo
1170 script guarda.sh da una shell.</p>
1172 <p>Controllare con <tt class=
1173 "docutils literal"><span class="pre">whoami</span></tt> di
1174 essere l'utente normale (es <tt class=
1175 "docutils literal"><span class="pre">utente</span>
1176 <span class="pre">|</span> <span class=
1177 "pre">studente</span> <span class="pre">|</span>
1178 <span class="pre">proprio</span> <span class=
1179 "pre">nome</span></tt> ), in caso si sia assunta una altra
1180 <tt class="docutils literal"><span class=
1181 "pre">id</span></tt> si apra un altra shell o si esca da
1182 quella attuale con <tt class=
1183 "docutils literal"><span class="pre">exit</span></tt> .</p>
1186 <div class="section" id="lista-dei-pacchetti-di-base">
1187 <h2><a class="toc-backref" href=
1188 "#id14">1.6 Lista dei pacchetti di
1191 <p>I pacchetti installati generalmente <a class=
1192 "footnote-reference" href="#id2" id="id1" name=
1193 "id1">[1]</a> per poter seguire le lezioni sono:</p>
1194 <pre class="literal-block">
1195 kde-core kdm kde-i18n-it xorg vim less xtightvncviewer
1198 <table class="docutils footnote" frame="void" id="id2"
1205 <tbody valign="top">
1207 <td class="label"><a class="fn-backref" href=
1210 <td><tt class="docutils literal"><span class=
1211 "pre">kde-core</span></tt> e' piu' leggero del
1212 pacchetto <tt class="docutils literal"><span class=
1213 "pre">kde</span></tt>. Esiste un equivalente
1214 <tt class="docutils literal"><span class=
1215 "pre">gnome-core</span> <span class=
1216 "pre">gnome</span></tt> per chi preferisce gnome, nel
1217 caso si potrebbe installare il log-in manager
1218 <tt class="docutils literal"><span class=
1219 "pre">gdm</span></tt> al posto di <tt class=
1220 "docutils literal"><span class=
1221 "pre">kdm</span></tt>.</td>
1227 <div class="section" id="apt-configurazione">
1228 <h2><a class="toc-backref" href=
1229 "#id15">1.7 Apt configurazione</a></h2>
1231 <p>Vediamo i due file principali di apt:</p>
1234 <li><tt class="docutils literal"><span class=
1235 "pre">/etc/apt/sources.list</span></tt></li>
1237 <li><tt class="docutils literal"><span class=
1238 "pre">/etc/apt/apt.conf</span></tt></li>
1241 <div class="section" id="sources-list">
1242 <h3><a class="toc-backref" href=
1243 "#id16">1.7.1 sources.list</a></h3>
1245 <p>Questo file contiene i sorgenti da cui <em>apt</em>
1246 preleva i pacchetti da installare tramite <em>dpkg</em>,
1247 vengono quindi precisati i metodi (ad es. http / ftp /
1248 cdrom / file), la release che si vuole tracciare (es
1249 <tt class="docutils literal"><span class=
1250 "pre">stable,</span> <span class="pre">testing,</span>
1251 <span class="pre">unstable</span></tt> oppure i
1252 corrispondenti release name es: <tt class=
1253 "docutils literal"><span class="pre">Lenny,</span>
1254 <span class="pre">Squeeze,</span> <span class=
1255 "pre">Sid</span></tt>), i rami di interesse (es:
1256 <tt class="docutils literal"><span class=
1257 "pre">main</span></tt> che e' l'archivio principale,
1258 <tt class="docutils literal"><span class=
1259 "pre">non-free</span></tt> per il software non libero,
1260 <tt class="docutils literal"><span class=
1261 "pre">contrib</span></tt> per i pacchetti non realizzati
1262 dai manutentori ufficiali).</p>
1264 <p>Gli archivi sono generalmente:</p>
1267 <li><tt class="docutils literal"><span class=
1268 "pre">deb</span></tt> per pacchetti Debian binari</li>
1270 <li><tt class="docutils literal"><span class=
1271 "pre">deb-src</span></tt> per i pacchetti sorgenti
1272 (quindi da compilare, come il kernel) degli stessi
1273 pacchetti binari. In genere se non compilate spesso
1274 potete evitare di tracciare i sorgenti per risparmiare
1278 <p><tt class="docutils literal"><span class=
1279 "pre">/etc/apt/sources.list</span></tt></p>
1280 <pre class="literal-block">
1281 # esempio di accesso a un CDROM:
1282 # cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
1284 # Archivio principale debian via http su piffa.net,
1285 # non funziona al di fuori dell'aula dei corsi
1286 deb http://debian.piffa.net/debian/ Lenny main
1287 # Sono disponibili anche i rami non-free contrib
1288 # deb http://debian.piffa.net/debian/ lenny non-free contrib
1290 # Mirror da kernel.org da usare a casa:
1291 deb http://mirrors.eu.kernel.org/debian/ lenny main
1293 # Security dal sito principale
1294 deb http://security.debian.org/ lenny/updates main
1295 deb-src http://security.debian.org/ lenny/updates main
1297 # Debian volatile per le cose soggette a cambiamenti non legati
1298 # a dinamiche di sicurezza
1299 deb http://volatile.debian.org/debian-volatile Lenny/volatile main
1300 deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
1302 # Esempio di accesso a un file system locale contenente i pacchetti:
1303 # deb file:/mnt/mirror Sid main non-free contrib
1307 <div class="section" id="etc-apt-apt-conf">
1308 <h3><a class="toc-backref" href=
1309 "#id17">1.7.2 /etc/apt/apt.conf</a></h3>
1311 <p>Questo file contiene le opzioni di apt, come ad
1312 esempio il proxy:</p>
1313 <pre class="literal-block">
1314 Acquire::http::Proxy "http://10.10.208.254:3128";
1317 <p>Si tenga conto che se si imposta un proxy per apt sul
1318 proprio portatile e tornati a casa propria si vuole
1319 scaricare nuovi pacchetti si dovra' disabilitare il
1325 <div class="section" id="squid">
1326 <h1><a class="toc-backref" href=
1327 "#id18">2 Squid</a></h1>
1329 <p>Squid e' un proxy cache http (ma anche FTP e https)
1330 robusto e strutturato, puo' essere usato sia in reti
1331 relativamente piccole grazie alla semplicita' di
1332 configurazione che in scenari piu' complessi grazie alla
1333 possibilita' di gestirne in modo granulare le risorse. Si
1334 partira' dalle configurazioni piu' semplici per la semplice
1335 <em>condivisione della navigazione</em> internet, per poi
1336 poter configurare la gestione degli accessi, il filtraggio
1337 dei contenuti (Squid e' una applicazione che si muove nel 4'
1338 livello del modello TCP/IP a differenza di un
1339 <em>ipfilter</em> limitato al 2') nel l bilanciamento del
1340 carico tra piu' hosts.</p>
1342 <dl class="docutils">
1343 <dt>Inoltre Squid svolge la funzione di
1344 <em>anonymizer</em>:</dt>
1346 <dd>nasconde i client http alla rete internet: risulta solo
1347 il server proxy nei log dei server web frequentati dagli
1348 utenti di Squid.</dd>
1351 <p>Cosa a volte sottovalutata, Squid permette la navigazione
1352 web a una rete basata su <em>indirizzi IP privati</em> (es
1353 una 192.168.0.0/24). E se la rete privata deve <em>solo
1354 navigare</em> in internet, non serve un <em>NAT</em> od
1355 altro, basta il solo Squid. Per altro non servira' neanche un
1356 servizio DNS dato che <em>sara' il solo Squid a risolvere i
1357 nomi di dominio</em> per i suoi client http.</p>
1359 <p>Squid ascolta di default sulla porta 3128, per impostare
1360 <em>apt</em> per utilizzarlo si aggiunga ad <tt class=
1361 "docutils literal"><span class=
1362 "pre">/etc/apt/apt.conf</span></tt></p>
1363 <pre class="literal-block">
1364 Acquire::http::Proxy "10.10.208.254:3128";
1367 <p>Per installare Squid si usino i pacchetti:</p>
1368 <pre class="literal-block">
1372 <div class="section" id="configurazione-squid-conf">
1373 <h2><a class="toc-backref" href=
1374 "#id19">2.1 Configurazione:
1377 <p>Segue un estratto delle direttive principali viste in
1378 aula presenti nel file di configurazione <tt class=
1379 "docutils literal"><span class=
1380 "pre">/etc/squid3/squid.conf</span></tt> .</p>
1382 <div class="section" id="cache-dir">
1383 <h3><a class="toc-backref" href=
1384 "#id20">2.1.1 Cache_dir</a></h3>
1386 <p>Cache dir serve per impostare dimensione e percorso
1387 della cache creata sul supporto di storaggio. Essendo la
1388 dimensione di default della cache pari a <tt class=
1389 "docutils literal"><span class="pre">~100</span>
1390 <span class="pre">MB</span></tt> e' altamente
1391 consigliabili aumentare questo parametro se si vuole
1392 poter utilizzare la funzione di <em>cache</em> http del
1395 <p>La dimensione ovviamente dipendera' dallo spazio
1396 disponibile, dimensioni tipiche e massime degli oggetti
1397 che si vuole tenere in cache (un solo file <em>.iso e'
1398 circa ``700 MB``, il pacchetto *Openoffice.org</em> circa
1399 <tt class="docutils literal"><span class="pre">150</span>
1400 <span class="pre">MB</span></tt>, un pacchetto debian
1401 circa <tt class="docutils literal"><span class=
1402 "pre">20</span> <span class="pre">MB</span></tt>), numero
1405 <p>Si presti poi attenzione alla natura dei dati che
1406 saranno salvati nella cache: sono tutti dati facilmente
1407 sostituibili (gli originali sono <em>on-line</em>) la cui
1408 perdita non arreca danni permanenti. Questo rende la
1409 cache di Squid un possibile candidato ad un <em>RAID
1410 stirpe</em> (livello 0), con vantaggi sia per le
1411 prestazioni (e la velocita' di navigazione e' uno dei
1412 motivi per cui si installa Squid) che per l'utilizzo
1413 estensivo dello spazio di storaggio. Questo fino al
1414 momento in cui per voi non sia piu' importante
1415 <em>garantire la disponibilita' del servizio</em> (se il
1416 RAID stripe dovesse rompersi gli utenti non potrebbero
1417 piu' navigare, cosa che per natura dello stripe e'
1418 maggiormente probabile rispetto ad un <em>mirror</em> o a
1419 un filesytem <em>normale</em>) con un RAID mirror o
1422 <p>Altra considerazione: i dati del proxy vengono slavati
1423 sul filesytem del server dietro richiesta di utenti
1424 esterni talvolta sconosciuti. Come per i servizi di file
1425 sharing o per la posta elettronica non c'e' motivo che il
1426 filesystem su cui sono ospitati questi dati abbia i
1427 privilegi di eseguibilita' o suid (in genere si puo'
1428 anche usare <em>noatime</em> per renderlo piu' veloce,
1429 che si usi o meno il journal dipende dalle preferenze:
1430 affidabilita' oppure prestazioni):</p>
1433 <pre class="literal-block">
1435 # Filesystem per Squid http cache
1436 /dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
1439 <p>Ora possiamo impostare la cache direttamente nel file
1440 <tt class="docutils literal"><span class=
1441 "pre">/etc/squid3/squid.conf</span></tt>:</p>
1442 <pre class="literal-block">
1443 #TAG: cache_dir (riga 1628)
1446 # cache_dir Type Directory-Name Fs-specific-data [options]
1448 # You can specify multiple cache_dir lines to spread the
1449 # cache among different disk partitions.
1452 # cache_dir ufs /var/spool/squid3 100 16 256
1453 cache_dir aufs /var/spool/squid3 300 24 256
1457 # directory primo livello
1458 # secondo livello di directory
1461 <p>Se si modifica la struttura del filesytem della cache
1462 di Squid, ad esempio variando il numero delle directory,
1463 puo' essere opportuno rigenerare la struttura della cache
1464 di squid (per lo meno se si <em>aumenta</em> il numero
1465 delle directory di primo o secondo livello). Tipicamente
1466 e' consigliabile cancellare (se si ha <em>ridotto</em> il
1467 numero delle directory) la vecchia cache e poi generare
1468 una nuova struttura. Se si vuole <em>star nel sicuro</em>
1469 ogni volta che si modifica l'impostazione delle directory
1470 <em>si svuoti la vecchia cache e se ne generi una
1472 <pre class="literal-block">
1473 # /etc/init.d/squid3 stop
1474 # rm -r /var/spool/squid3/??
1476 # /etc/init.d/squid3 start
1480 <div class="section" id="tag-maximum-object-size">
1481 <h3><a class="toc-backref" href=
1482 "#id21">2.1.2 TAG:
1483 maximum_object_size</a></h3>
1485 <p>Questa direttiva imposta la dimensione massima degli
1486 oggetti che vengono salvati sul supporto di storaggio,
1487 oggetti di dimensioni superiori saranno comunque
1488 scaricati ma non tenuti in cache.</p>
1490 <p>TAG: maximum_object_size (1760):</p>
1491 <pre class="literal-block">
1492 # TAG: maximum_object_size (1760)
1493 # Objects larger than this size will NOT be saved on disk. The
1494 # value is specified in kilobytes, and the default is 4MB. If
1495 # you wish to get a high BYTES hit ratio, you should probably
1496 # increase this (one 32 MB object hit counts for 3200 10KB
1497 # hits). If you wish to increase speed more than your want to
1498 # save bandwidth you should leave this low.
1500 # NOTE: if using the LFUDA replacement policy you should increase
1501 # this value to maximize the byte hit rate improvement of LFUDA!
1502 # See replacement_policy below for a discussion of this policy.
1505 # maximum_object_size 4096 KB
1506 maximum_object_size 150 MB
1510 <div class="section" id="tag-cache-mem">
1511 <h3><a class="toc-backref" href=
1512 "#id22">2.1.3 TAG: cache_mem</a></h3>
1514 <p><em>Cache_mem</em> imposta quanta memoria RAM venga
1515 utilizzata per la cache di Squid. Questo dipendera' dalla
1516 RAM disponibile sul sistema, e da quanta di questa volete
1517 mettere a disposizione di Squid (altri servizi importanti
1518 girano sulla stessa macchina?). Questo parametro
1519 influisce sulle prestazioni e sul degrado dei supporti di
1520 storaggio (sopratutto se magnetici).</p>
1522 <p>Se si stesse pensando di usare dell'hardware
1523 <em>embedded</em> a basse prestazioni / consumo per
1524 realizzare un server gateway / NAT / Squid si tenga
1525 presente che Squid e' relativamente esoso di risorse:
1526 avra' bisogno di una macchina con <tt class=
1527 "docutils literal"><span class="pre">~25MB</span></tt>
1528 (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
1529 servire decorosamente una decina di client http su una
1530 rete ethernet 10/100. In questo caso non fate scendere
1531 <tt class="docutils literal"><span class=
1532 "pre">cache_mem</span></tt> sotto i <tt class=
1533 "docutils literal"><span class="pre">2/4</span>
1534 <span class="pre">MB</span></tt> pena un accesso continuo
1535 al supporto di storaggio.</p>
1537 <p>Se invece si disponesse di una macchina dedicata a
1538 Squid con gigabytes di RAM non si esiti a dedicarne buona
1539 parte a <em>cache_mem</em>.</p>
1541 <p>TAG: cache_mem (1566):</p>
1542 <pre class="literal-block">
1543 # 'cache_mem' specifies the ideal amount of memory to be used
1545 # * In-Transit objects
1547 # * Negative-Cached objects
1554 <div class="section" id="tag-minimum-object-size">
1555 <h3><a class="toc-backref" href=
1556 "#id23">2.1.4 TAG:
1557 minimum_object_size</a></h3>
1559 <p>Questo parametro imposta la dimensione minima degli
1560 oggetti salvati nella cache. Settato a <tt class=
1561 "docutils literal"><span class="pre">0</span></tt> o a
1562 valori molto piccoli puo' influire negativamente sulla
1563 deframmentazione del filesytem e consumare un numero
1564 elevato di <em>inode</em> (cosa non piu' importante con
1565 ext4 o altri filesytem).</p>
1567 <p>TAG: minimum_object_size:</p>
1568 <pre class="literal-block">
1569 # TAG: minimum_object_size (bytes)
1570 # Objects smaller than this size will NOT be saved on disk. The
1571 # value is specified in kilobytes, and the default is 0 KB, which
1572 # means there is no minimum.
1575 # minimum_object_size 0 KB
1576 minimum_object_size 0 KB
1581 <div class="section" id=
1582 "negoziazione-degli-accesi-al-servizio">
1583 <h2><a class="toc-backref" href=
1584 "#id24">2.2 Negoziazione degli accesi al
1587 <p>Squid e' uno di quei servizi soggetto a problemi di tipo
1588 <em>open relay</em> , si deve quindi limitare la rete che
1589 puo' accedere al servizio.</p>
1591 <dl class="docutils">
1592 <dt>Open Relay:</dt>
1594 <dd>Un servizio a cui possono accedere tutti
1595 indiscriminatamente. La cosa puo' andare bene per servizi
1596 come i server web, che aspirano per loro natura al
1597 maggior numero possibile di utenti, ma non a servizi come
1598 i proxy http oppure ai server di posta elettronica (che
1599 permetterebbero l'invio di SPAM).</dd>
1602 <p>Generalmente non volete che il vostro proxy http venga
1603 usato da persone sconosciute le quali sostanzialmente
1604 <em>navigherebbero sotto l'identita' del vostro proxy</em>
1605 (probabilmente per visionare materiali che non vorrebbero
1606 fossero ricondotti direttamente a loro, per motivi che sta
1607 a voi prendere in considerazione) consumando traffico e
1608 banda della vostra connessione a internet. Tenere Squid in
1609 modalita' <em>Open relay</em> e' al giorno d'oggi un buon
1610 modo per essere inseriti in una <em>black list</em>.</p>
1612 <p>Per poter limitare gli accessi a Squid dal punto di
1613 vista dell'applicazione (quarto livello TCP/IP) si
1614 identifichera' inizialmente l'entita' <em>rete locale</em>
1615 (es: <tt class="docutils literal"><span class=
1616 "pre">localnet</span></tt>) con una ACL di tipo
1617 <em>src</em> (indirizzi IP sorgenti) indicando la
1618 <em>classe / range di IP</em> della nostra rete.</p>
1621 Dopodiche l'accesso (<tt class=
1622 "docutils literal"><span class=
1623 "pre">http_access</span></tt>) si concedera'
1624 (<em>allow</em>) a questa entita' (es: <tt class=
1625 "docutils literal"><span class=
1626 "pre">localnet</span></tt>) negando chiunque altro.
1629 <p>Per maggiori dettagli sulla sintassi utilizzabile per
1630 esprimere i range di IP: <a class="reference external"
1631 href="http://www.visolve.com/squid/squid24s1/access_controls.php">
1632 http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
1634 <div class="section" id="acl-e-http-access">
1635 <h3><a class="toc-backref" href=
1636 "#id25">2.2.1 ACL e http access</a></h3>
1638 <p>Si proceda a creare una <tt class=
1639 "docutils literal"><span class="pre">ACL</span></tt> di
1640 tipo <tt class="docutils literal"><span class=
1641 "pre">src</span></tt> per identificare la nostra rete
1642 locale, poi si abiliti l'accesso a questa con la
1643 direttiva <tt class="docutils literal"><span class=
1644 "pre">http_access</span></tt>. Tutto quanto non e'
1645 espressamente autorizzato viene poi negato da un
1646 <tt class="docutils literal"><span class=
1647 "pre">http_access</span> <span class="pre">deny</span>
1648 <span class="pre">all</span></tt> finale.</p>
1649 <pre class="literal-block">
1651 # Defining an Access List
1653 # Every access list definition must begin with an aclname and acltype,
1654 # followed by either type-specific arguments or a quoted filename that
1655 # they are read from.
1657 # ***** ACL TYPES AVAILABLE *****
1659 # acl aclname src ip-address/netmask ... # clients IP address
1662 # Example rule allowing access from your local networks.
1663 # Adapt to list your (internal) IP networks from where browsing
1665 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
1666 #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
1667 #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
1669 acl localnet src 10.10.208.0/24
1673 # Allowing or Denying access based on defined access lists
1675 # Access to the HTTP port:
1676 # http_access allow|deny [!]aclname ...
1678 # NOTE on default values:
1680 # If there are no "access" lines present, the default is to deny
1684 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
1686 # Example rule allowing access from your local networks.
1687 # Adapt localnet in the ACL section to list your (internal) IP networks
1688 # from where browsing should be allowed
1689 #http_access allow localnet
1690 http_access allow localnet
1695 <div class="section" id="testare-squid">
1696 <h2><a class="toc-backref" href=
1697 "#id26">2.3 Testare Squid</a></h2>
1699 <p>Configurato squid e' fondamentale testarne il corretto
1700 funzionamento per assicurarsi di non aver creato un
1701 <em>open-relay</em>. Per fare dei test significativi serve
1702 utilizzare degli host remoti: ci si connetta via ssh a
1703 questi per poi utilizzare <tt class=
1704 "docutils literal"><span class="pre">wget</span></tt> da
1705 riga di comando.</p>
1707 <div class="section" id="client-wgetrc">
1708 <h3><a class="toc-backref" href=
1709 "#id27">2.3.1 Client: ~/.wgetrc</a></h3>
1711 <p>Nel file <tt class="docutils literal"><span class=
1712 "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
1713 un file nascosto) si puo' impostare il proxy per wget. Si
1714 utilizzi l'indirizzo IP del server che si vuole testare,
1715 e si seguano i log <tt class=
1716 "docutils literal"><span class=
1717 "pre">/var/log/squid3/access.log</span></tt> sul
1720 <p>Da notare che la prova va' fatta su una macchina della
1721 rete che si vuole testare, non da <em>localhost</em>. Per
1722 altro se si utilizzasse <em>direttamente</em> <tt class=
1723 "docutils literal"><span class=
1724 "pre">localhost</span></tt> non si testerebbe la
1725 <em>ACL</em> predisposta, dato che si si rientrerebbe
1726 nella ACL (pre-configurata di default) <tt class=
1727 "docutils literal"><span class=
1728 "pre">localhost</span></tt>.</p>
1730 <dl class="docutils">
1733 <dd>http_proxy=10.10.208.178:3128</dd>
1736 <p>Si proceda a scaricare dal client scelto con un
1738 <pre class="literal-block">
1739 wget http://www.google.it
1743 <div class="section" id="server-access-log">
1744 <h3><a class="toc-backref" href=
1745 "#id28">2.3.2 Server:
1748 <p>Si puo' controllare il corretto funzionamento del
1749 server seguendo i log di accesso a Squid:</p>
1750 <pre class="literal-block">
1751 # tail -f /var/log/squid3/access.log
1754 <p>In oltre e' possibile configurare diversi
1755 <em>analizzatori di log</em> come <tt class=
1756 "docutils literal"><span class=
1757 "pre">Webalizer</span></tt> per studiare i log di
1763 <div class="section" id="apache">
1764 <h1><a class="toc-backref" href=
1765 "#id29">3 Apache</a></h1>
1767 <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
1768 dato alla piattaforma server Web modulare piu' diffusa (ma
1769 anche al gruppo di lavoro open source che ha creato,
1770 sviluppato e aggiornato il software server), in grado di
1771 operare da sistemi operativi UNIX-Linux e Microsoft.</p>
1773 <p>Un server web e' un processo, e per estensione il computer
1774 su cui e' in esecuzione, che si occupa di fornire, su
1775 richiesta del browser, una pagina web (spesso scritta in
1776 HTML). Le informazioni inviate dal server web viaggiano in
1777 rete trasportate dal protocollo HTTP. L'insieme di server web
1778 dà vita al World Wide Web, uno dei servizi piu'
1779 utilizzati di Internet.</p>
1781 <div class="section" id="pacchetti-da-installare">
1782 <h2><a class="toc-backref" href=
1783 "#id30">3.1 Pacchetti da
1784 installare::</a></h2>
1790 <p>Con la release 2.0 di Apache viene automaticamente resa
1791 disponibile anche la versione SSL (Secure Socket Layer,
1792 connessioni criptate ) del web server.</p>
1795 <div class="section" id="configurazione-di-apache">
1796 <h2><a class="toc-backref" href=
1797 "#id31">3.2 Configurazione di
1800 <p>I file di configurazione di apache si trovano nella
1801 cartella: <tt class="docutils literal"><span class=
1802 "pre">/etc/apache2</span></tt> e sono strutturati come
1803 descritto nel file <tt class=
1804 "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
1805 . Sostanzialmente lo schema e' il seguente:</p>
1807 <dl class="docutils">
1808 <dt>apache2.conf</dt>
1811 <p class="first">File di configurazione principale del
1814 <p class="last">httpd.conf e' il vecchio file di
1815 configurazione di Apache1, presente per motivi di
1816 retrocompatibilita' e' generalmente vuoto.</p>
1821 <dd>In questo file vengono specificate le porte sulle
1822 quali resta in ascolto il server web. Si noti che
1823 utilizzando dei virtual hosts generalmente viene
1824 specificata per questi la porta su cui ascoltare nel file
1825 di configurazione del virtual host, ad es: <tt class=
1826 "docutils literal"><span class=
1827 "pre"><VirtualHost</span> <span class=
1828 "pre">*:80></span></tt></dd>
1830 <dt>sites-available</dt>
1832 <dd>In questa cartella vengono raccolti i file di
1833 configurazione dei virtual host disponibili.</dd>
1835 <dt>sites-enabled</dt>
1837 <dd>In questa cartella sono contenuti dei link simbolici
1838 ai files in ../sites-available : se il link e' presente
1839 in questa cartella il virtual host e' abilitato.</dd>
1841 <dt>mods-available</dt>
1843 <dd>Stesso metodo per i moduli: in questa cartella ci
1844 sono i moduli veri e propri che verranno poi abilitati
1845 grazie all'esistenza di link simbolici nella cartella
1848 <dt>mods-enabled</dt>
1850 <dd>Moduli abilitati, effettivamente caricati.</dd>
1854 <div class="section" id="apache-conf">
1855 <h2><a class="toc-backref" href=
1856 "#id32">3.3 apache.conf</a></h2>
1858 <p>File di configurazione del servizio Apache, contiene le
1859 impostazioni generiche (ad esempio utilizzo della RAM e
1860 risorse di sistema) dell'intero servizio. Nella
1861 configurazione di default per Debian non viene definito un
1862 vero e proprio sito di default ma solo dei virtual
1865 <p>Guardiamo alcune direttive interessanti:</p>
1867 <dl class="docutils">
1870 <dd>Numero di secondi da aspettare prima di chiudere la
1871 connessione con il client. Questo parametro serve a
1872 liberare le risorse di sistema nel caso che un client,
1873 magari a causa di una connessione particolarmente lenta o
1874 instabili, tenga attivo indefinitamente un processo di
1879 <dd>L'estensione keep-alive (http 1.0) congiuntamente
1880 alle connessioni persistenti (http 1.1) permettono al
1881 server di rispondere a piu' richieste dei client mediante
1882 la stessa connessione. Il protocollo http per sua natura
1883 e' senza stato (<em>stateless</em> ), quindi ogni risorsa
1884 richiesta (per pagine web si pensi ad esempio alle
1885 immagini) dal client necessita di una connessione
1886 autonoma. Keep-alive permette di ottimizzare la
1887 connessione anche fino al 50% a seconda delle situazioni
1890 <dt>Server-Pool Size Regulation</dt>
1892 <dd>Questi parametri (StartServers, MinSpareServers, ecc.
1893 Tutti spiegati nel manuale di apache) servono per
1894 attribuire le risorse di sistema disponibili al server
1895 Apache. Tenere questi parametri bassi serve a limitare il
1896 rischio di Denial of Service per il server, nel caso
1897 offra altri servizi. I settagli di default sono come
1898 sempre abbastanza conservativi, se si conta di usare il
1899 proprio Apache per servire un sito web con molti
1900 visitatori sara' necessario aumentare sensibilmente le
1901 impostazioni di base.</dd>
1903 <dt>AccessFileName</dt>
1905 <dd>Il nome del file che viene onorato per modificare le
1906 impostazioni per una singola directory, legato alla
1907 direttiva AllowOverride .</dd>
1911 <div class="section" id="installazione-di-php">
1912 <h2><a class="toc-backref" href=
1913 "#id33">3.4 Installazione di PHP</a></h2>
1915 <p>Pacchetti da installare: <tt class=
1916 "docutils literal"><span class="pre">php5</span>
1917 <span class="pre">php-pear</span></tt></p>
1919 <div class="section" id="test-del-modulo-php">
1920 <h3><a class="toc-backref" href=
1921 "#id34">3.4.1 Test del modulo
1924 <p>Creare nella cartella <tt class=
1925 "docutils literal"><span class="pre">/var/www</span></tt>
1926 (o altra cartella visibile) un file con estensione *.php
1927 (es <tt class="docutils literal"><span class=
1928 "pre">/var/www/info.php</span></tt> contenete codice php
1929 eseguibile dall'interprete, ad es:</p>
1930 <pre class="literal-block">
1931 <?php phpinfo() ; ?>
1934 <p>Questa funzione di php generera' la tipica pagina con
1935 le impostazioni attuali per PHP. Richiamando la pagina
1936 (es: <tt class="docutils literal"><span class=
1937 "pre">http://localhost/info.php</span></tt> ) verra'
1938 generata dall'interprete PHP la pagina HTML e resa
1939 disponibile tramite Apache ai client HTTP, a prova del
1940 corretto funzionamento del modulo di PHP e della sua
1941 integrazione con il server web Apache. In caso contrario
1942 se il client http proporra' di scaricare la pagina invece
1943 che visualizzarla nel browser: non funziona l'interprete
1944 di php o sono mal configurati i MIME-type. prima di tutto
1945 assicurarsi di aver fatto ripartire Apache.</p>
1948 <div class="section" id=
1949 "installazione-del-supporto-per-mysql">
1950 <h3><a class="toc-backref" href=
1951 "#id35">3.4.2 Installazione del supporto
1954 <p>Installare i pacchetti:</p>
1955 <pre class="literal-block">
1956 php5-mysql phpmyadmin
1959 <p>Controllare tramite la pagina php.info che sia
1960 abilitato il supporto per Mysql (ripartito Apache,
1961 ricaricare la pagina e cercare con CTRL+f <tt class=
1962 "docutils literal"><span class=
1963 "pre">mysql</span></tt>).</p>
1966 <div class="section" id="phpmyadmin">
1967 <h3><a class="toc-backref" href=
1968 "#id36">3.4.3 phpmyadmin</a></h3>
1970 <p>L'interfaccia web Phpmyadmin non richiede
1971 necessariamente la presenza di un database Mysql locale,
1972 puo' infatti essere utilizzata per gestire database
1973 remoti (il suo file di configurazione: <tt class=
1974 "docutils literal"><span class=
1975 "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
1976 caso si voglia installare localmente Mysql si utilizzi il
1977 pacchetto <tt class="docutils literal"><span class=
1978 "pre">mysql-server</span></tt> .</p>
1980 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
1981 <tt class="docutils literal"><span class=
1982 "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
1983 non fosse controllare che sia incluso il file <tt class=
1984 "docutils literal"><span class=
1985 "pre">/etc/phpmyadmin/apache.conf</span></tt> in
1986 <tt class="docutils literal"><span class=
1987 "pre">/etc/apache2/conf.d/</span></tt> .</p>
1990 <div class="section" id=
1991 "installazione-del-supporto-per-postgresql">
1992 <h3><a class="toc-backref" href=
1993 "#id37">3.4.4 Installazione del supporto
1994 per Postgresql</a></h3>
1996 <p>Installare i pacchetti:</p>
1997 <pre class="literal-block">
1998 php5-pgsql phppgadmin
2001 <p>Controllare tramite la pagina php.info che sia
2002 abilitato il supporto per PostgreSQL (ripartito Apache,
2003 ricaricare la pagina e cercare con CTRL+f <tt class=
2004 "docutils literal"><span class=
2005 "pre">pgsql</span></tt>).</p>
2008 <div class="section" id="phppgadmin">
2009 <h3><a class="toc-backref" href=
2010 "#id38">3.4.5 phppgadmin</a></h3>
2012 <p>L'interfaccia web Phppgadmin per il database server
2013 PostgreSQL non richiede necessariamente la presenza di un
2014 database locale, puo' infatti essere utilizzata per
2015 gestire database remoti (il suo file di configurazione:
2016 <tt class="docutils literal"><span class=
2017 "pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
2018 caso si voglia installare localmente Mysql si utilizzi il
2019 pacchetto <tt class="docutils literal"><span class=
2020 "pre">postgresql</span></tt> .</p>
2022 <p>Phpmyadmin dovrebbe essere disponibile all'URL:
2023 <tt class="docutils literal"><span class=
2024 "pre">http://localhost/phppgadmin/</span></tt>, se cosi
2025 non fosse controllare che sia incluso il file <tt class=
2026 "docutils literal"><span class=
2027 "pre">/etc/phppgadmin/apache.conf</span></tt> in
2028 <tt class="docutils literal"><span class=
2029 "pre">/etc/apache2/conf.d/</span></tt> .</p>
2033 <div class="section" id="virtual-hosts">
2034 <h2><a class="toc-backref" href=
2035 "#id39">3.5 Virtual hosts</a></h2>
2039 <li><a class="reference external" href=
2040 "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
2042 <li><a class="reference external" href=
2043 "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
2044 http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
2048 <p>I virtual host permettono di avere piu' siti internet
2049 disponibili tramite lo stesso server web, eventualmente
2050 mappati su un solo indirizzo IP. Sono generalmente di due
2055 <li>Basati su <em>indirizzi IP</em>. Se si ha la
2056 possibilita' di avere piu' indirizzi IP dedicati per i
2057 diversi siti che si vuole servire. ES: <tt class=
2058 "docutils literal"><span class=
2059 "pre"><VirtualHost</span> <span class=
2060 "pre">192.168.0.2:80></span></tt> . Soluzione
2061 dispendiosa, si tende ad usarla solo se servono
2062 certificati di sicurezza (SSL ) dedicati per ogni
2065 <li>Basati su <em>nomi di dominio</em> che puntano allo
2066 stesso IP. Soluzione piu' economica e diffusa che si
2067 basa sulle funzionalita' di http 1.1 .</li>
2071 <p>Prenderemo in esame la gestione di virtual hosts basati
2072 su nomi di dominio.</p>
2074 <div class="section" id="gestione-dns">
2075 <h3><a class="toc-backref" href=
2076 "#id40">3.5.1 Gestione DNS</a></h3>
2078 <p>Prima di tutto per poter impostare i virtual hosts
2079 dovete avere un server DNS che risolva i vostri nomi di
2080 dominio sull'indirizzo IP del server. Questo si puo'
2081 ottenere in vari modi, ad es:</p>
2084 <dl class="docutils">
2085 <dt><em>Bind</em> (DNS server)</dt>
2087 <dd>Impostare i campi A nelle proprie zone gestite
2088 dal server DNS Bind. Ad es: <tt class=
2089 "docutils literal"><span class=
2090 "pre">papo</span>
2092 "pre">A</span>
2093 <span class="pre">212.22.136.248</span></tt></dd>
2095 <dt><em>Servizio DNS dinamico on line</em>.</dt>
2097 <dd>Utilizzare un servizio come ad es: <a class=
2098 "reference external" href=
2099 "https://www.dyndns.com/">https://www.dyndns.com/</a>
2100 per mappare nomi di dominio sul proprio indirizzo IP,
2101 comodo ad esempio se si dispone di un indirizzo IP
2102 pubblico (anche se dinamico) per la propria
2103 connessione ad internet.</dd>
2105 <dt><em>Dnsmasq</em> (DNS server)</dt>
2107 <dd>Utilizzabile al livello della rete locale per
2108 fare dei test, utilizzando direttive come: <tt class=
2109 "docutils literal"><span class=
2110 "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
2112 <dt><tt class="docutils literal"><span class=
2113 "pre">/etc/hosts</span></tt></dt>
2115 <dd>Per prove sul proprio sistema potete impostare i
2116 nomi dei vostri virtual server nel file /etc/hosts
2121 <p>Query DNS con <tt class=
2122 "docutils literal"><span class="pre">dig</span></tt>:</p>
2123 <pre class="literal-block">
2126 ; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
2127 ;; global options: printcmd
2129 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
2130 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
2132 ;; QUESTION SECTION:
2133 ;177.piffa.net. IN A
2136 177.piffa.net. 0 IN A 10.10.208.177
2139 <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
2140 <tt class="docutils literal"><span class=
2141 "pre">177.piffa.net.</span>
2143 "pre">0</span>
2144 <span class="pre">IN</span>
2146 "pre">A</span>
2147 <span class="pre">10.10.208.177</span></tt> . Il nome di
2148 dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
2149 , nel nostro Apache (che risponde all'ip 10.10.208.177 )
2150 dovra' essere disponibile un virtual host che corrisponde
2151 al nome <tt class="docutils literal"><span class=
2152 "pre">177.piffa.net</span></tt> (<tt class=
2153 "docutils literal"><span class=
2154 "pre">ServerName</span></tt>) .</p>
2157 <div class="section" id="virtual-host">
2158 <h3><a class="toc-backref" href=
2159 "#id41">3.5.2 Virtual host</a></h3>
2161 <p>Esempio di Virtual host:</p>
2162 <pre class="literal-block">
2163 <VirtualHost *:80 >
2164 ServerName 177.piffa.net
2165 DocumentRoot /var/www/177.piffa.net/
2166 ServerAdmin webmaster@177.piffa.net
2167 </VirtualHost>
2170 <ol class="arabic simple">
2171 <li><tt class="docutils literal"><span class=
2172 "pre"><VirtualHost</span> <span class=
2173 "pre">\*:80</span> <span class="pre">></span></tt>
2174 La prima riga indica l'inizio della stanza relativa al
2175 nostro virtual host, che ascoltera' su qualunque
2176 indirizzo IP (nel caso il server abbia piu' indirizzi
2177 dai quali e' raggiungibile) sulla porta <tt class=
2178 "docutils literal"><span class=
2179 "pre">80</span></tt>.</li>
2181 <li><tt class="docutils literal"><span class=
2182 "pre">Server/name</span></tt> precisa quale sara' il
2183 nome di dominio a cui verra' associato questo sito
2184 rispetto ad altri eventualmente presenti sullo stesso
2187 <li><tt class="docutils literal"><span class=
2188 "pre">DocumentRoot</span></tt> : il path della
2189 directory che contiene le pagine del sito.</li>
2191 <li><tt class="docutils literal"><span class=
2192 "pre">ServerAdmin</span></tt>: l'indirizzo del
2193 webmaster, in modo da poterlo contattare in caso di
2194 problemi col sito.</li>
2196 <li><tt class="docutils literal"><span class=
2197 "pre"></VirtualHost></span></tt>: <em>tag</em> di
2198 chiusura della stanza di definizione del virtual
2202 <p>Quelle che abbiamo appena visto sono le direttive
2203 essenziali per definire un sito virtuale, potrebbe essere
2204 utile aggiungere altre:</p>
2208 <dl class="first docutils">
2209 <dt><tt class="docutils literal"><span class=
2210 "pre">ErrorLog</span> <span class=
2211 "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
2214 <p class="first last">Log degli errori separato
2215 dai restanti siti web ospitati dal server.</p>
2221 <dl class="first docutils">
2222 <dt><tt class="docutils literal"><span class=
2223 "pre">LogLevel</span> <span class=
2224 "pre">warn</span></tt></dt>
2227 <p class="first last">Livello di importanza degli
2228 eventi loggati= warning <em>attenzione</em> .</p>
2234 <dl class="first docutils">
2235 <dt><tt class="docutils literal"><span class=
2236 "pre">CustomLog</span> <span class=
2237 "pre">/var/log/apache2/177.piffa.net/access.log</span>
2238 <span class="pre">combined</span></tt></dt>
2241 <p class="first last">Log di accesso separati
2242 dagli altri siti, utile anche qua per statistiche
2243 di accesso per il solo sito virtuale.</p>
2249 <p>Potrebbe essere utile modificare le impostazioni di
2250 una intera directory, ad esempio per abilitare
2251 l'<tt class="docutils literal"><span class=
2252 "pre">AuthConfig</span></tt>:</p>
2253 <pre class="literal-block">
2254 <Directory "/var/www/miosito.net/privata">
2255 AllowOverride AuthConfig
2256 Options ExecCGI Indexes MultiViews FollowSymLinks
2262 <p><tt class="docutils literal"><span class=
2263 "pre">AllowOverride</span> <span class=
2264 "pre">AuthConfig</span></tt> ora vale per l'intera
2265 directory, come le altre opzioni.</p>
2269 <div class="section" id="negoziazione-accessi">
2270 <h2><a class="toc-backref" href=
2271 "#id42">3.6 Negoziazione accessi</a></h2>
2273 <p>Tipicamente quando si installa un server web il proprio
2274 desiderio e' di dare accesso ai materiali disponibili al
2275 maggior numero di visitatori possibile. Talvolta pero' puo'
2276 essere utile poter limitare questi accessi, ad esempio per
2277 escludere un <em>bot</em> indesiderato che scansiona
2278 ininterrottamente le nostre pagine o per creare una
2279 <em>Area Riservata</em> i cui materiali non devono essere
2280 disponibile a tutti.</p>
2282 <div class="section" id="limiti-su-base-ip">
2283 <h3><a class="toc-backref" href=
2284 "#id43">3.6.1 Limiti su base IP</a></h3>
2286 <p>La forma piu' semplice di restrizione degli accessi e'
2287 su base degli indirizzi IP dei client: tipicamente i siti
2288 web sono settati per dare accesso a chiunque:</p>
2289 <pre class="literal-block">
2290 <VirtualHost *:80 >
2292 <Directory "/var/www/177.piffa.net">
2296 </VirtualHost>
2299 <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
2301 <pre class="literal-block">
2302 <VirtualHost *:80 >
2304 <Directory "/var/www/177.piffa.net">
2307 Deny from 192.168.0.1
2309 </VirtualHost>
2312 <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
2313 materiali dell'intero sito virtuale, oppure potremmo
2314 lavorare su una sola directory:</p>
2315 <pre class="literal-block">
2316 <Directory "/var/www/miosito.net/limitata">
2318 Allow from 192.168.0.0./24
2323 <p>In questo modo solo la classe IP <tt class=
2324 "docutils literal"><span class=
2325 "pre">192.168.0.0/24</span></tt> potra' accedere alla
2326 directory <tt class="docutils literal"><span class=
2327 "pre">/limitata</span></tt> Si tenga pero' conto che e'
2328 relativamente facile per un malintenzionato cambiare il
2329 proprio indirizzo IP, oppure collegarsi da un altra zona.
2330 Meno facile e' accedere ad una classe privata trovandosi
2331 all'esterno di questa, ma ci sono comunque soluzioni piu'
2336 <div class="section" id="user-authentication">
2337 <h2><a class="toc-backref" href=
2338 "#id44">3.7 User Authentication</a></h2>
2340 <p>Si puo' negoziare gli accessi ad un area del sito
2341 tramite autenticazione basata su <em>nome utente /
2342 password</em>. Questo puo' venire utile per creare una area
2343 download <em>intranet</em>, alla quale possano accedere
2344 solo gli utenti previsti a prescindere dagli indirizzi IP
2345 dei loro client.</p>
2347 <p>Tramite il modulo di Apache <em>mod-auth</em> e'
2348 possibile implementare questo paradigma, per quanto
2349 esistano soluzioni piu' granulari e sofisticate, che
2350 richiedono pero' l'implementazione di interpreti di
2351 linguaggi di programmazione, criptazione delle passwords,
2352 gestione degli utenti ed eventualmente delle sessioni. Mod
2353 auth non richiede l'installazione di niente di tutto
2356 <p>link: <a class="reference external" href=
2357 "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
2359 <div class="section" id="definire-la-cartella">
2360 <h3><a class="toc-backref" href=
2361 "#id45">3.7.1 Definire la
2364 <p>Decidere quale sara' il <em>path</em> della cartella
2365 da sottoporre ad autenticazione:</p>
2368 <tt class="docutils literal"><span class=
2369 "pre">mkdir</span> <span class=
2370 "pre">/var/www/177.piffa.net/privata</span></tt>
2374 <div class="section" id=
2375 "creazione-del-database-delle-passwords">
2376 <h3><a class="toc-backref" href=
2377 "#id46">3.7.2 Creazione del database
2378 delle passwords</a></h3>
2380 <p>Un modo semplice per gestire una database di
2381 <em>user-id / passwords</em> e' utilizzare l'utility
2382 <tt class="docutils literal"><span class=
2383 "pre">htpasswd</span></tt> di Apache. Questa crea un file
2384 in cui un <em>crypt</em> delle password viene associato
2387 <p>Si dovra' decidere dove tenere questo file, la cosa
2388 importante e' che non sia visibile nel sito web: non deve
2389 essere scaricabile dai visitatori. Deve essere cioe'
2390 all'esterno della <em>DocumentRoot</em>: un buon posto
2391 potrebbe essere la /home dell'utente.</p>
2393 <p>Creiamo (con il <em>flag</em> <tt class=
2394 "docutils literal"><span class="pre">-c</span></tt>) il
2395 file <tt class="docutils literal"><span class=
2396 "pre">/home/utente/passwords</span></tt> con l'utente
2397 <tt class="docutils literal"><span class=
2398 "pre">luca</span></tt>:</p>
2399 <pre class="literal-block">
2400 htpasswd -c /home/utente/passwords luca
2403 <p><tt class="docutils literal"><span class=
2404 "pre">htpasswd</span></tt> ci chiedera' la password da
2405 associare all'utente <tt class=
2406 "docutils literal"><span class="pre">luca</span></tt>.
2407 Per successive modifiche della password o aggiunta di
2408 nuovi utenti non sara' necessario usare il flag
2409 <tt class="docutils literal"><span class=
2410 "pre">-c</span></tt>.</p>
2413 <div class="section" id="id3">
2414 <h3><a class="toc-backref" href=
2415 "#id47">3.7.3 Configurazione di
2418 <p>Ora possiamo passare alla configurazione vera e
2419 propria di Apache, ma con una novita': andremo a inserire
2420 la voce in un <tt class="docutils literal"><span class=
2421 "pre">.htaccess</span></tt> invece che modificare
2422 (tramite una direttiva <tt class=
2423 "docutils literal"><span class=
2424 "pre"><Directory></span></tt> ) il file di
2425 impostazione del virtual-host.</p>
2427 <p>Questo per motivi pratici: solo l'utente <em>root</em>
2428 puo' modificare l'impostazione del virtual host nel file
2429 <tt class="docutils literal"><span class=
2430 "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
2431 ma spesso il motivo per cui creiamo i virtual hosts e'
2432 ospitare i siti di altri utenti, che possono solo
2433 pubblicare (generalmente tramite <em>FTP</em>) i loro
2434 documenti nella loro <em>DocumentRoot</em>, senza poter
2435 quindi modificare in alcun modo la configurazione del
2438 <p>Dando agli utenti la possibilita' di modificare
2439 (<em>AllowOverride</em>) autonomamente alcuni parametri
2440 (in questo caso solo l'<em>AuthConfig</em>) relativi al
2441 funzionamento del loro spazio web ci togliera'
2442 l'incombenza di dover intervenire continuamente sui vari
2445 <p>Abilitiamo l'AllowOverride nel file di configurazione
2446 del virtual host per la sola directory <tt class=
2447 "docutils literal"><span class=
2448 "pre">privata</span></tt>:</p>
2449 <pre class="literal-block">
2450 <VirtualHost *:80 >
2451 ServerName 177.piffa.net
2452 DocumentRoot /var/www/177.piffa.net/
2453 ServerAdmin webmaster@177.piffa.net
2454 <Directory "/var/www/177.piffa.net/privata">
2455 AllowOverride AuthConfig
2457 </VirtualHost>
2460 <p>Per rendere il cambiamento effettivo sara' necessario
2461 fare un restart / reload di Apache.</p>
2463 <p>Ora sara' possibile, anche per l'utente di sistema,
2464 creare un file <tt class="docutils literal"><span class=
2465 "pre">.htaccess</span></tt> che sara' onorato da
2468 <p>/var/www/177.piffa.net/privata/.htaccess</p>
2469 <pre class="literal-block">
2470 # Messaggio visualizzato al prompt per l'autenticazione
2471 AuthName "Area privata soggetta ad autentizazione"
2472 # tipo di autenticazione da usarsi
2474 # File precedentemente generato con htpasswd
2475 AuthUserFile /home/utente/passwords
2477 # Negoziazione degli accessi
2478 # valid users permette l'accesso agli utenti specificati
2479 # nel file generato da htpasswd
2483 <p>Si noti che non e' necessario fare ripartire Apache
2484 per onorare i cambiamenti (un utente non avrebbe la
2485 possibilita' di farlo!).</p>
2487 <dl class="docutils">
2488 <dt>Oltre a <tt class="docutils literal"><span class=
2489 "pre">valid-users</span></tt> si potrebbe scegliere di
2490 usare la formula <tt class=
2491 "docutils literal"><span class="pre">users</span></tt>
2492 che permette di elencare esplicitamente gli
2495 <dd>require user pippo pluto</dd>
2498 <p>L'utente <em>paperino</em> che fosse comunque presente
2499 nel file generato da htpasswd non potrebbe accedere alla
2502 <dl class="docutils">
2503 <dt>Nel caso ci fossero molti utenti conviene gestirli
2504 tramite <em>gruppi</em>::</dt>
2506 <dd>require group staff studenti</dd>
2509 <p>I gruppi vengono definiti in un file in modo simile a
2510 <tt class="docutils literal"><span class=
2511 "pre">/etc/groups</span></tt> per gli utenti di
2513 <pre class="literal-block">
2515 studenti: lucap federico luca
2518 <p>da richiamare tramite la direttiva <tt class=
2519 "docutils literal"><span class=
2520 "pre">AuthGroupFile</span></tt>.</p>
2524 <div class="section" id="cavets">
2525 <h2><a class="toc-backref" href=
2526 "#id48">3.8 Cavets</a></h2>
2528 <p>Problemi di cache:</p>
2532 <li>Proxy: nei settaggi del browser specificare di non
2533 utilizzare un server proxy http per il sito web locale
2534 (o per gli altri che si stanno monitorando). Se si ha
2535 il controllo del proxy server: stopparlo, ricaricare la
2536 pagina (operazione che fallira'), far ripartire il
2537 proxy, ricaricare la pagina.</li>
2539 <li>Provare con un altro browser, o cercare di svuotare
2540 la cache chiudere/riaprire l'applicativo. Provare a
2541 fermare Apache, ricaricare la pagina (operazione che
2542 fallira'), far ripartire Apache, ricaricare la
2549 <div class="section" id="domain-name-system">
2550 <h1><a class="toc-backref" href=
2551 "#id49">4 Domain Name System</a></h1>
2553 <p>Domain Name System (spesso indicato con DNS) e' un
2554 servizio utilizzato per la risoluzione di nomi di host in
2555 indirizzi IP e viceversa. Il servizio e' realizzato tramite
2556 un sistema <strong>gerarchico</strong> (quindi una struttura
2557 ad albero, simile ai <em>file system</em>)
2558 <strong>distribuito</strong> (ogni server DNS facente parte
2559 del sistema puo' mantenere solo una parte delle informazioni,
2560 ad esempio per la sua sola <em>zona</em>), costituito dai
2563 <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
2564 rete internet come per qualunque rete locale. Ad esempio
2565 durante la navigazione web un client vorrebbe vedere
2566 l'<em>URL</em> <tt class="docutils literal"><span class=
2567 "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
2568 connettere via <em>http</em> al server web deve prima
2569 ottenere l'indirizzo IP del <em>server http</em>
2570 corrispondente a <em>www.piffa.net</em>. Se il DNS gli
2571 fornisce un IP sbagliato l'utente non potra' raggiungere il
2572 servizio: di fatto e' come se il serve http fosse spento.</p>
2574 <p>Stessa cosa vale per gli altri servizi, come la posta
2575 elettronica, ssh, ecc. : <em>prima si deve effettuare una
2578 <p>Potrebbe verificarsi uno scenario simile a questo: i
2579 vostri server per i siti web funzionano correttamente come i
2580 siti ospitati, stessa cosa per i vostri server di posta, IMAP
2581 e POP3, e tutto il resto. Ma se poi un errore nella
2582 configurazione del DNS non rende raggiungibile l'intero
2583 <em>sito</em>: per l'utente finale e' come se nulla
2586 <p>Infatti quando si parla di un intervento della Polizia
2587 Postale per l'<em>oscuramento</em> di un sito dal punto di
2588 vista pratico questo si traduce generalmente nella rimozione
2589 o mistificazione del record DNS relativo a quel dominio (la
2590 <em>PP</em> ha facolta' di chiedere un simile intervento ai
2591 principali provider internet che forniscono connettivita'
2592 agli utenti italiani, oltre che poter agire direttamente sul
2593 NIC italiano per i domini della TLD <em>.it</em>)</p>
2595 <p>L'operazione di convertire un nome in un indirizzo e'
2596 detta risoluzione DNS, convertire un indirizzo IP in nome e'
2597 detto risoluzione inversa.</p>
2600 Un <em>Registar</em> e' un operatore che ha la facolta'
2601 (accreditamento da parte dell ICANN) di registrare i domini
2602 di secondo livello per gli utenti finali, dietro compenso
2603 di una modica cifra (una decina di euro) che vale come
2604 contributo su base annuale per il mantenimento
2605 dell'infrastruttura.
2608 <div class="section" id="risoluzione-inversa">
2609 <h2><a class="toc-backref" href=
2610 "#id50">4.1 Risoluzione Inversa</a></h2>
2612 <p>Per la risoluzione inversa sono invece i provider di
2613 connettivita' a gestire i DNS: se volete impostare il
2614 <em>PTR</em> associato al vostro indirizzo IP dovete
2615 contattare il vostro provider (tipo <em>telecom</em> per
2616 una connessione ADSL) e <em>non il Registar del vostro
2619 <p>Ad esempio all'IP <tt class=
2620 "docutils literal"><span class=
2621 "pre">212.22.136.248</span></tt> era associato un PTR
2622 <tt class="docutils literal"><span class=
2623 "pre">bender.piffa.net</span></tt>, corrispondente al
2624 record <tt class="docutils literal"><span class=
2625 "pre">212</span></tt> facente parte della zona <tt class=
2626 "docutils literal"><span class=
2627 "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
2628 provider Tiscali/Nextra proprietario della classe C
2629 <tt class="docutils literal"><span class=
2630 "pre">212.22.136.0</span></tt>. Se avete un solo IP
2631 conviene lasciare al fornitore la gestire del PTR, ma se
2632 avete a disposizione un'itera classe potete chiedere sempre
2633 al vostro provider che vi <em>deleghi</em> la gestione
2634 della zona tramite i vostri DNS.</p>
2636 <p>Per alcuni servizi, ad esempio la spedizione della posta
2637 elettronica, e' richiedeiesto che venga impostata
2638 correttamente l'associazione tra il PTR dell'indirizzo IP
2639 usato dal server di postai e il record A RR al quale questo
2640 punta( RFC1912 sezione 2.1, paragrafo 2).</p>
2645 <li><a class="reference external" href=
2646 "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
2647 2.1 Inconsistent, Missing, or Bad Data</li>
2649 <li><a class="reference external" href=
2650 "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
2654 <div class="section" id="nomi-di-dominio">
2655 <h2><a class="toc-backref" href=
2656 "#id51">4.2 Nomi di dominio</a></h2>
2658 <p>Un nome a dominio e' costituito da una serie di stringhe
2659 separate da punti, ad esempio bender.piffa.net. I nomi di
2660 dominio si leggono da destra verso sinistra: <em>TLD</em> o
2661 dominio di primo livello <tt class=
2662 "docutils literal"><span class="pre">net</span></tt>,
2663 secondo livello <tt class="docutils literal"><span class=
2664 "pre">piffa</span></tt>, terzo livello <tt class=
2665 "docutils literal"><span class="pre">bender</span></tt>. Il
2666 dominio di primo livello (o TLD, Top Level Domain,
2667 pronunciato <em>tilde</em> in Italia), per esempio .net o
2668 .it sono limitati e decisi direttamente dall'ente
2669 assegnatario ICANN ( Internet Corporation for Assigned
2670 Names and Numbers).</p>
2672 <p>L'utente finale potra' chiedere l'assegnazione (pagando
2673 un contributo al Register preferito per il mantenimento
2674 delle spese dell'infrastruttura) di un dominio di
2675 <em>secondo</em> livello (es <tt class=
2676 "docutils literal"><span class="pre">piffa</span></tt>) di
2677 una delle varie TLD disponibili (noi italiani diciamo
2678 <em>tildi</em>), sempre che non sia gia' stato assegnato a
2681 <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
2682 potra' in stanziare domini di terzo livello (es <tt class=
2683 "docutils literal"><span class="pre">bender</span></tt>) e
2684 anche oltre (es www.andrea.bender.piffa.net). Tali records
2685 saranno mantenuti dall'utente, sotto la sua responsbilita':
2686 se il proprio server DNS non fosse raggiungibile o
2687 risultasse mal configurato gli utenti non potrebbero
2688 risolvere / raggiungere i siti di loro interesse.</p>
2690 <p>Tipicamente si ha almeno un server DNS secondario per
2691 garantire la sussistenza del servizio in caso di guasto del
2692 DNS principale. I secondari <em>replicano</em> i dati
2693 presenti nei DNS principali.</p>
2696 <div class="section" id="tipologie-di-record">
2697 <h2><a class="toc-backref" href=
2698 "#id52">4.3 Tipologie di record</a></h2>
2700 <p>Ad un nome DNS possono corrispondere diversi tipi di
2701 informazioni. Per questo motivo, esistono diversi tipi di
2702 record DNS. Ogni voce del database DNS deve essere
2703 caratterizzata da un tipo. I principali tipi sono:</p>
2706 <li>Record A - Indica la corrispondenza tra un nome ed
2707 uno (o piu') indirizzi IP (per la precisione indirizzi
2708 IPv4, ovvero la versione attualmente in uso).</li>
2710 <li>Record MX - (Mail eXchange) indica a quali server
2711 debba essere inviata la posta elettronica per un certo
2714 <li>Record CNAME - Sono usati per creare un alias, ovvero
2715 per fare in modo che lo stesso calcolatore sia noto con
2716 piu' nomi. Uno degli utilizzi di questo tipo di record
2717 consiste nell'attribuire ad un host che offre piu'
2718 servizi un nome per ciascun servizio. In questo modo, i
2719 servizi possono poi essere spostati su altri host senza
2720 dover riconfigurare i client, ma modificando solo il
2723 <li>Record PTR - Il DNS viene utilizzato anche per
2724 realizzare la risoluzione inversa, ovvero per far
2725 corrispondere ad un indirizzo IP il corrispondente nome a
2726 dominio. Per questo si usano i record di tipo "PTR" (e
2727 una apposita zona dello spazio dei nomi
2730 <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
2732 <li>Record SRV - Identificano il server per un
2733 determinato servizio all'interno di un dominio. Possono
2734 essere considerati una generalizzazione dei record
2737 <li>Record TXT - Associano campi di testo arbitrari ad un
2738 dominio. Questi campi possono contenere una descrizione
2739 informativa oppure essere utilizzati per realizzare
2743 <p>Vi sono anche tipi di record "di servizio", necessari al
2744 funzionamento del database distribuito: * Record NS -
2745 Utilizzato per indicare quali siano i server DNS
2746 autoritativi per un certo dominio, ovvero per delegarne la
2747 gestione. * Record SOA - (Start of Authority) usato per la
2748 gestione delle zone DNS.</p>
2751 <div class="section" id="utilizzo">
2752 <h2><a class="toc-backref" href=
2753 "#id53">4.4 Utilizzo</a></h2>
2755 <p>I computer vengono identificati in rete grazie agli
2756 indirizzi <em>IP</em>, questi pero' non sono comodi per gli
2757 utenti come riferimento per i vari server. Ad esempio
2758 sarebbe scomodo riferirsi al motore di ricerca Goggle con
2759 uno dei suoi IP: <tt class="docutils literal"><span class=
2760 "pre">74.125.43.104</span></tt>, e' preferibile usare il
2761 nome di dominio <em>www.google.com</em>:</p>
2762 <pre class="literal-block">
2763 ping -c 1 www.google.com
2764 PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
2768 <div class="section" id="risoluzione-dei-nomi-di-dominio">
2769 <h2><a class="toc-backref" href=
2770 "#id54">4.5 Risoluzione dei nomi di
2773 <p>Ci sono vari strumenti per interrogare i server DNS e
2774 ottenere l'indirizzo IP associato al nome di dominio che ci
2776 <pre class="literal-block">
2777 $ host www.piffa.net
2778 www.piffa.net is an alias for piffa.net.
2779 piffa.net has address 65.98.21.97
2780 piffa.net mail is handled by 10 65.98.21.97
2783 $ nslookup www.piffa.net
2784 Server: 192.168.0.10
2785 Address: 192.168.0.10#53
2787 Non-authoritative answer:
2788 www.piffa.net canonical name = piffa.net.
2790 Address: 65.98.21.97
2795 ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
2796 ;; global options: +cmd
2798 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
2799 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2801 ;; QUESTION SECTION:
2802 ;www.piffa.net. IN A
2805 www.piffa.net. 3489 IN CNAME piffa.net.
2806 piffa.net. 3489 IN A 65.98.21.97
2808 ;; AUTHORITY SECTION:
2809 piffa.net. 86289 IN NS ns2.mydomain.com.
2810 piffa.net. 86289 IN NS ns1.mydomain.com.
2811 piffa.net. 86289 IN NS ns4.mydomain.com.
2812 piffa.net. 86289 IN NS ns3.mydomain.com.
2814 ;; ADDITIONAL SECTION:
2815 ns1.mydomain.com. 96208 IN A 64.94.117.193
2816 ns2.mydomain.com. 96208 IN A 64.94.31.67
2817 ns3.mydomain.com. 96208 IN A 66.150.161.137
2818 ns4.mydomain.com. 96208 IN A 63.251.83.74
2820 ;; Query time: 1 msec
2821 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2822 ;; WHEN: Sun May 10 21:23:11 2009
2823 ;; MSG SIZE rcvd: 209
2826 <p>Lo strumento piu' esaustivo e' <tt class=
2827 "docutils literal"><span class="pre">dig</span></tt>,
2828 installabile con il pacchetto <tt class=
2829 "docutils literal"><span class="pre">dnsutils</span></tt>
2833 <div class="section" id="dig">
2834 <h2><a class="toc-backref" href=
2835 "#id55">4.6 Dig</a></h2>
2837 <p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
2838 "docutils literal"><span class="pre">dig</span></tt> per
2839 l'interrogazione dei DNS Server:</p>
2840 <pre class="literal-block">
2843 ; <<>> DiG 9.6.0-P1 <<>> www.google.it
2844 ;; global options: +cmd
2846 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
2847 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
2849 ;; QUESTION SECTION:
2850 ;www.google.it. IN A
2853 www.google.it. 250683 IN CNAME www.google.com.
2854 www.google.com. 334819 IN CNAME www.l.google.com.
2855 www.l.google.com. 186 IN A 74.125.43.103
2856 www.l.google.com. 186 IN A 74.125.43.104
2857 www.l.google.com. 186 IN A 74.125.43.147
2858 www.l.google.com. 186 IN A 74.125.43.99
2860 ;; AUTHORITY SECTION:
2861 l.google.com. 80856 IN NS f.l.google.com.
2862 l.google.com. 80856 IN NS d.l.google.com.
2863 l.google.com. 80856 IN NS b.l.google.com.
2864 l.google.com. 80856 IN NS c.l.google.com.
2865 l.google.com. 80856 IN NS a.l.google.com.
2866 l.google.com. 80856 IN NS e.l.google.com.
2867 l.google.com. 80856 IN NS g.l.google.com.
2869 ;; Query time: 1 msec
2870 ;; SERVER: 192.168.0.10#53(192.168.0.10)
2871 ;; WHEN: Sun May 10 21:34:47 2009
2872 ;; MSG SIZE rcvd: 255
2875 <dl class="docutils">
2878 <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
2879 <em>root server</em> utilizzati. I root server sono i
2880 server che mantengono le informazioni sui domini di primo
2881 livello (TLD) e sono quindi il punto di partenza per
2882 scorrere nella directory dei DNS per recuperare le
2883 informazioni (tipicamente un campo <tt class=
2884 "docutils literal"><span class="pre">A</span></tt> per un
2885 indirizzo IP) che ci servono per raggiungere un certo
2894 <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
2895 . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
2896 B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
2897 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
2898 F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
2899 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
2900 K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
2901 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
2902 J.ROOT-SERVERS.NET. . 192032 IN NS
2903 D.ROOT-SERVERS.NET.</p>
2908 <dl class="docutils">
2909 <dt>dig @nome_dns</dt>
2911 <dd>Permette di fare una query ad un server dns
2912 particolare. Es: <tt class=
2913 "docutils literal"><span class="pre">dig</span>
2914 <span class="pre">@151.99.25.1</span> <span class=
2915 "pre">www.google.it</span></tt></dd>
2917 <dt>dig MX www.google.it</dt>
2919 <dd>Chiede un campo in particolare, in questo caso il
2922 <dt>dig ANY www.google.it</dt>
2924 <dd>Chiede tutti i campi, non solo i campi
2927 <dt>dig -x 74.125.43.104</dt>
2929 <dd>Effettua una richiesta inversa: dall'IP al PTR
2934 <div class="section" id="resolv-conf">
2935 <h2><a class="toc-backref" href=
2936 "#id56">4.7 resolv.conf</a></h2>
2938 <p>Il file <tt class="docutils literal"><span class=
2939 "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
2940 sul dns usato dal sistema, in genere anche altre
2941 applicazioni che devono effettuare query DNS leggono
2942 resolv.conf per conoscere l'ubicazione del DNS.</p>
2944 <p>/etc/resolv.conf:</p>
2948 <li><tt class="docutils literal"><span class=
2949 "pre">nameserver</span></tt>: indica il nameserver da
2950 utilizzare, indicato con l'indirizzo IP.</li>
2952 <li><tt class="docutils literal"><span class=
2953 "pre">domain</span></tt>: indica il nome di dominio
2954 della rete attuale, vedi voce successiva.</li>
2956 <li><tt class="docutils literal"><span class=
2957 "pre">search</span></tt>: nome di dominio usato dalla
2958 rete sul quale cercare gli hosts. Ad esempio se
2959 impostato su <tt class="docutils literal"><span class=
2960 "pre">piffa.net</span></tt> pingando l' host <tt class=
2961 "docutils literal"><span class="pre">bender</span></tt>
2962 viene automaticamente fatto un tentativo di ricerca per
2963 <tt class="docutils literal"><span class=
2964 "pre">bender.piffa.net</span></tt>.</li>
2968 <p>Si veda anche la pagina man di resolv.conf.</p>
2970 <p>Attenzione: se si usa un client DHCP o simile questo
2971 file potra' essere riscritto automaticamente in base a
2972 quanto ottenuto dal DHCP. Si veda la documentazione del
2973 pacchetto <tt class="docutils literal"><span class=
2974 "pre">resolvconf</span></tt>.</p>
2977 <div class="section" id="etc-hosts">
2978 <h2><a class="toc-backref" href=
2979 "#id57">4.8 /etc/hosts</a></h2>
2981 <p>Tabella statica per l'associazione tra IP e nomi di
2983 <pre class="literal-block">
2988 127.0.0.1 localhost.localdomain localhost 10.10.208.162
2989 daniela daniela.piffa.net 10.10.208.254 mirror
2990 mirror.piffa.net 91.191.138.15 thepiratebay.org
2991 192.168.0.11 chrome chrome.mydomain.com
2994 <p>Il contenuto e' un associazione tra un <em>IP</em> e
2995 stringhe di testo (anche piu' di una es: <tt class=
2996 "docutils literal"><span class="pre">mirror</span></tt> e
2997 <tt class="docutils literal"><span class=
2998 "pre">mirror.piffa.net</span></tt>), un record per
3001 <p>Il problema e' la gestione di questo file: quando gli
3002 host cambiano IP si devono aggiornare i records, e poi c'e'
3003 il problema di distribuire questo file tra i vari hosts
3004 della propria LAN. Un metodo semplice per distribuire
3005 questo file e' utilizzare <tt class=
3006 "docutils literal"><span class="pre">Dnsmasq</span></tt>:
3007 questo infatti legge e onora il file <tt class=
3008 "docutils literal"><span class="pre">hosts</span></tt>
3009 locale e lo <em>distribuisce</em> ai clients.</p>
3011 <p>Modificare (riconducendola a un IP interno, cosi'
3012 annullandola) la risoluzione di un nome di dominio e' un
3013 modo drastico e funzionale per <em>annullarlo</em>
3014 rendendolo indisponibile alla propria rete locale, ad
3015 esempio aggiungere al file <tt class=
3016 "docutils literal"><span class=
3017 "pre">/etc/hosts</span></tt>:</p>
3018 <pre class="literal-block">
3019 127.0.0.1 www.facebook.com
3022 <p>Impedira' agli utenti della LAN di raggiungere
3023 <em>facebook</em>, ora reindirizzato a i``localhost``.</p>
3026 <div class="section" id="hostname">
3027 <h2><a class="toc-backref" href=
3028 "#id58">4.9 Hostname</a></h2>
3030 <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
3031 (e modificabile) con il comando <tt class=
3032 "docutils literal"><span class=
3033 "pre">hostname</span></tt>.</p>
3035 <p>Per modificare in modo permanente il nome del computer
3036 si modifichi il contenuto del file <tt class=
3037 "docutils literal"><span class=
3038 "pre">/etc/hostname</span></tt>.</p>
3040 <p>Tipicamente si vuole mantenere una correlazione tra il
3041 nome dell' host, o meglio la stringa con cui il server si
3042 qualifica all'esterno, e il <em>PTR</em> dell'IP. Nel caso
3043 di <em>servizi virtuali</em> ci sara' un <em>nome
3044 server</em> principale associato al <em>PTR</em> condiviso.
3045 Non e' automatico che un servizio, ad esempio un server di
3046 posta, si qualifichi leggendo il contenuto di questo file e
3047 magari aggiungendo come suffisso il dominio di cui fa parte
3048 l' host: a volte questo parametro puo' essere specificato
3049 nel file di configurazione del servizio:</p>
3050 <pre class="literal-block">
3051 * Squid: ``visible_hostname``
3053 * Postfix: ``myhostname``
3056 <p>Si faccia attenzione a non aver un hostname puramente
3057 numerico: ad es. <tt class="docutils literal"><span class=
3058 "pre">161</span></tt>. E' opportuno che il nome sia
3059 comunque un alfanumerico: <tt class=
3060 "docutils literal"><span class="pre">host-161</span></tt> o
3065 <div class="section" id="dnsmasq">
3066 <h1><a class="toc-backref" href=
3067 "#id59">5 DNSmasq</a></h1>
3069 <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
3070 forwarder e un server DHCP caratterizzato dalla facilita' di
3071 configurazione, leggerezza e dalla possibilita' di modificare
3072 rapidamente i record DNS serviti alla rete. Puo' essere anche
3073 utilizzato come <cite>server per il boot da rete
3074 <http://www.debian-administration.org/articles/478>_</cite>
3077 <p>Dnsmasq e' un interessante alternativa all'uso del server
3078 DNS Bind in modalita' cache-only (non autoritativo)
3079 accompagnato dal server DHCPd. I vantaggi sono:</p>
3082 <li>Leggerezza: puo' essere fatto girare su una macchina
3083 relativamente debole in caso di bisogno.</li>
3085 <li>Rapidita' di configurazione (in particolare per servire
3086 dei record A / MX alla rete, modificando al volo i valori
3087 originali ospitati sul server DNS pubblico).</li>
3089 <li>Ben integrato con connessioni PPP : e' ingrado di
3090 rilevare i cambiamenti dei dns suggeriti e impostarli come
3091 forwarders (utile se dovete rendere disponibile rapidamente
3092 una connessione a internet a una rete in difficolta').</li>
3095 <p>Tutto cio' rende Dnsmasq una soluzione valida in
3096 particolare quando si deve intervenire in una rete
3097 pre-esistente in cui il server principale e' in crisi: si
3098 potra' utilizzare Dnsmasq anche su una macchina piu' debole e
3099 <em>mascherare</em> i servizi al momento non disponibili.
3100 Molto utile per scopi didattici, sopratutto per testare
3101 server SMTP impostando al volo i campi MX per nomi di dominio
3104 <div class="section" id="configurazione">
3105 <h2><a class="toc-backref" href=
3106 "#id60">5.1 Configurazione</a></h2>
3108 <p>Vediamo alcune direttive di basi del file di
3109 configurazione <tt class="docutils literal"><span class=
3110 "pre">/etc/dnsmasq.conf</span></tt> utili per la
3111 configurazione sia del DNS cache che per il DHCP
3114 <dl class="docutils">
3115 <dt>domain-needed</dt>
3117 <dd>Non inoltrare query ai server DNS esterni per nomi
3118 semplici (es andrea, portatile, pippo) che verranno
3119 risolti solo in locale o causeranno direttamente una
3120 risposta <em>not found</em> .</dd>
3124 <dd>Simile alla voce precedente ma per i reverse
3129 <dd>Nome di dominio della rete da passare ai client.</dd>
3131 <dt>expand_hosts</dt>
3133 <dd>Aggiunge il <tt class="docutils literal"><span class=
3134 "pre">nome</span> <span class="pre">host</span></tt> (
3135 <tt class="docutils literal"><span class=
3136 "pre">/etc/hostname</span></tt>) dei client al nome di
3137 dominio per qualificarli in rete, senza bisogno di dover
3138 comporre a un elenco statico di record nel file
3139 <tt class="docutils literal"><span class=
3140 "pre">/etc/hosts</span></tt> o nello stesso file di
3141 configurazione di dnsmasq. Es: se un vostro client si
3142 chiama <tt class="docutils literal"><span class=
3143 "pre">chrome</span></tt> e il vostro dominio <tt class=
3144 "docutils literal"><span class=
3145 "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
3146 il campo <em>A</em> per il dominio <tt class=
3147 "docutils literal"><span class=
3148 "pre">chrome.piffa.net</span></tt> diretto all'ip che
3149 verra' assegnato al client.</dd>
3153 <div class="section" id="dhcp">
3154 <h2><a class="toc-backref" href=
3155 "#id61">5.2 DHCP</a></h2>
3157 <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
3158 al file di configurazione il <em>range</em> degli IP che si
3159 vuole assegnare ai client con il <em>lease time</em> (tempo
3160 di rilascio: quanto a lungo saranno validi gli IP
3161 assegnati) espresso in ore.</p>
3163 <p>Si faccia <em>attenzione</em>: in una rete puo' essere
3164 presente <strong>un solo server DHCP</strong>, o per meglio
3165 dire qualunque server DHCP ascolta sul broadcast <tt class=
3166 "docutils literal"><span class=
3167 "pre">255.255.255.255</span></tt> e potrebbe rispondere a
3168 un pacchetto di richiesta DHCP. Quindi non fate partire
3169 inavvertitamente un server DHCP in una rete gia' servita e
3170 <strong>non vi azzardate ad andare in giro con un portatile
3171 con un server DHCP attivo</strong> nelle reti altrui.
3172 Questo vale anche per i laboratori di informatica dei corsi
3173 di reti: non fate partire il vostro server DHCP se siete
3174 collegati alla rete interna!</p>
3176 <p>/etc/dnsmasq.conf (riga 118):</p>
3177 <pre class="literal-block">
3178 dhcp-range=192.168.0.20,192.168.0.50,24h
3182 <div class="section" id="dns-cache">
3183 <h2><a class="toc-backref" href=
3184 "#id62">5.3 DNS cache</a></h2>
3186 <p>Aggiungere al file <tt class=
3187 "docutils literal"><span class=
3188 "pre">/etc/resolv.conf</span></tt> il nameserver localhost
3189 in cima alla lista dei <em>nameserver</em> disponibili.
3190 Dnsmasq usera' la propria cache e in caso non abbia
3191 disponibile il <em>record DNS</em> richiesto fara' partire
3192 una query al primo DNS:</p>
3193 <pre class="literal-block">
3194 nameserver 127.0.0.1
3197 <p>Questo pero' potrebbe essere problematico se un altro
3198 servizio, ad esempio il DHCP client, riscrive il contenuto
3199 del file <tt class="docutils literal"><span class=
3200 "pre">/etc/resolv.conf</span></tt>. Per superare il
3201 problema si aggiunga (riga 20) al file di configurazione
3202 <tt class="docutils literal"><span class=
3203 "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
3204 <pre class="literal-block">
3205 prepend domain-name-servers 127.0.0.1;
3208 <p>Oppure potrebbe essere il nostro <em>PPP client</em>
3209 (per la connessione ADSL) a intervenire sul file <tt class=
3210 "docutils literal"><span class=
3211 "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
3212 <tt class="docutils literal"><span class=
3213 "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
3214 <tt class="docutils literal"><span class=
3215 "pre">usepeerdns</span></tt>. Se la vostra connessione ad
3216 internet e' ADSL raramente dovreste aver bisogno di
3217 cambiare i DNS una volta impostati (a meno che non usiate
3222 <div class="section" id="bind-dns-autoritativo">
3223 <h1><a class="toc-backref" href=
3224 "#id63">6 Bind : DNS Autoritativo</a></h1>
3226 <p>Le soluzioni viste possono bastare per la rete locale o
3227 per fare delle prove, ma prima o poi verra' il momento in cui
3228 si e' chiamati a gestire dei domini su internet: lo standard
3229 e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
3232 <p>Installare i pacchetti:</p>
3233 <pre class="literal-block">
3237 <div class="section" id="id4">
3238 <h2><a class="toc-backref" href=
3239 "#id64">6.1 DNS cache</a></h2>
3241 <p>Bind appena installato funzionera' come DNS cache: si
3242 faccia un test con un <tt class=
3243 "docutils literal"><span class="pre">dig</span>
3244 <span class="pre">@localhost</span></tt> . Bind a
3245 differenza di Dnsmasq e' autonomo: non ha bisogno di
3246 forwardare (inoltrare) le query a un DNS esterno: queste
3247 verranno risolte direttamente da Bind partendo dai <em>DNS
3248 root servers</em>.</p>
3250 <p>E' comunque possibile impostare dei DNS forwarders,
3251 tipicamente i DNS server forniti dal proprio provider, per
3252 velocizzare le query:</p>
3254 <p>/etc/bind/named.conf.options (riga 13):</p>
3255 <pre class="literal-block">
3261 <p>Nel caso si voglia usare Bind solo come server DNS cache
3262 per la propria LAN senza ospitare delle zone DNS pubbliche
3263 sara' il caso di limitare gli accessi al server alla sola
3266 <p>/etc/bind/named.conf.options (riga 19):</p>
3267 <pre class="literal-block">
3268 // Se il proprio server ha IP 10.10.208.254
3269 // sulla rete LAN privata:
3270 listen-on { 10.10.208.254; }
3273 <p>E non si lasci il server in ascolto su uno degli
3274 eventuali indirizzi IP pubblici.</p>
3276 <p>Se questo non fosse possibile si puo' sempre lavorare su
3277 una <em>acl</em>:</p>
3279 <p>/etc/bind/named.conf</p>
3280 <pre class="literal-block">
3282 10.10.208.0/24 ; 127.0.0.0/8 ;
3286 <p>Per poi aggiungere all'interno della stanza options la
3287 direttiva che abilita' l'entita' <tt class=
3288 "docutils literal"><span class=
3289 "pre">localnet</span></tt>:</p>
3291 <p>/etc/bind/named.conf.options</p>
3292 <pre class="literal-block">
3293 allow-query {"localnet" ;} ;
3298 <div class="section" id="samba">
3299 <h1><a class="toc-backref" href=
3300 "#id65">7 Samba</a></h1>
3302 <p>Samba e' un progetto libero che fornisce servizi di
3303 condivisione di file e stampanti a client SMB/CIFS.</p>
3305 <p>Samba e' liberamente disponibile, al contrario di altre
3306 implementazioni SMB/CIFS, e permette di ottenere
3307 interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
3309 <p>Samba e' un software che puo' girare su piattaforme che
3310 non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
3311 System 390, OpenVMS e altri sistemi operativi. Samba utilizza
3312 il protocollo TCP/IP utilizzando i servizi offerti sul server
3313 ospite. Quando correttamente configurato, permette di
3314 interagire con client o server Microsoft Windows come se
3315 fosse un file e print server Microsoft agendo da Primary
3316 Domain Controller (PDC) o come Backup Domain Controller, puo'
3317 inoltre prendere parte ad un dominio Active Directory.</p>
3319 <div class="section" id="pacchetti">
3320 <h2><a class="toc-backref" href=
3321 "#id66">7.1 Pacchetti</a></h2>
3323 <p>Pacchetti da installare per utilizzare Samba in
3324 modalita' client <a class="footnote-reference" href="#id6"
3325 id="id5" name="id5">[2]</a></p>
3326 <pre class="literal-block">
3330 <p>Pacchetti da installare per utilizzare Samba in
3331 modalita' server:</p>
3332 <pre class="literal-block">
3333 samba smbfs smbclient
3336 <table class="docutils footnote" frame="void" id="id6"
3343 <tbody valign="top">
3345 <td class="label"><a class="fn-backref" href=
3348 <td>Anche se nato per i sistemi Windows, Samba puo'
3349 essere usato anche per montare cartelle sotto
3350 GNU/Linux come alternativa a NFS. Per la condivisione
3351 di stampanti sarebbe invece opportuno intervenire
3352 direttamente su <tt class=
3353 "docutils literal"><span class=
3354 "pre">CUPS</span></tt>.</td>
3359 <p>Durante la prima installazione viene chiesto il nome del
3360 gruppo di appartenenza, il default per Windows e'
3361 <tt class="docutils literal"><span class=
3362 "pre">WORKGROUP</span></tt>. In aula usiamo invece
3363 <tt class="docutils literal"><span class=
3364 "pre">208</span></tt> .</p>
3366 <p>Per riconfigurare Samba si usi il comando:</p>
3367 <pre class="literal-block">
3368 dpkg-reconfigure samba-common
3372 <div class="section" id="passwords-e-autenticazione">
3373 <h2><a class="toc-backref" href=
3374 "#id67">7.2 Passwords e
3375 autenticazione</a></h2>
3377 <p>Per poter configurare Samba in modo che usi un sistema
3378 di negoziazione degli accessi alle cartelle condivise
3379 basato su accoppiate <em>nome utente / password</em>
3380 bisogna distinguere tra 3 livelli di password (e
3381 generalmente volete usare <em>sempre la stessa
3382 password</em> per ognuno di questi) e delle differenze tra
3383 le modalita' di <em>autenticazione</em> (e quindi anche di
3384 criptaggio delle passwords) usate da sistemi GNU/Linux e
3387 <dl class="docutils">
3388 <dt>1 Sistema *Unix ( GNU/Linux )</dt>
3390 <dd>E' la password dell'<em>utente di sistema</em> che
3391 viene usata sul sistema operativo su cui gira il software
3392 Samba. E' importante tenere conto anche delle
3393 <em>user-id</em> e <em>group-id</em> degli utenti che
3394 dovranno fisicamente scrivere sui file system. Se un
3395 utente non puo' scrivere in una certa posizione del file
3396 system (ad esempio nella cartella <tt class=
3397 "docutils literal"><span class=
3398 "pre">/mnt/condivisione</span></tt> che sara' stata
3399 necessariamente creata inizialmente dall'utente
3400 <tt class="docutils literal"><span class=
3401 "pre">root</span></tt>) per mancanza dei privilegi di
3402 scrittura allora neanche Samba potra' farlo nel momento
3403 in mette a disposizione la risorsa all'utente. Se si
3404 montano file-system dedicati per le condivisioni
3405 controllare i permessi e proprieta' dei <em>punti di
3406 mount*</em>. Queste passwords sono salvate nel solito
3407 file /etc/shadow (richiamato da /etc/passwd).</dd>
3409 <dt>2 Password per l'applicativo Samba</dt>
3411 <dd>Samba deve essere compatibile con Windows e quindi
3412 utilizzare un sistema di criptazione delle password
3413 diverso da /etc/shadow . Le password per Samba possono
3414 essere gestite ad esempio col comando <tt class=
3415 "docutils literal"><span class=
3416 "pre">smbpasswd</span></tt> e vengono generalmente
3417 salvate all'interno di <tt class=
3418 "docutils literal"><span class=
3419 "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
3421 <dt>3 Password per Windows.</dt>
3423 <dd>Gli utenti Windows effettuano il log-in alla partenza
3424 della sessione di Windows. Se si avra' l'accortezza di
3425 usare sempre la <em>stessa password</em> data
3426 precedentemente anche a Windows (o viceversa impostare la
3427 password per GNU/Linux / Samba uguale a quella di
3428 Windows) l'utente potra' accedere automaticamente alle
3429 condivisioni a lui disponibili.</dd>
3433 <div class="section" id="creazione-utenti">
3434 <h2><a class="toc-backref" href=
3435 "#id68">7.3 Creazione Utenti</a></h2>
3437 <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
3438 attenzione a <em>non dargli una shell di sistema</em>. Gli
3439 utenti Windows che accedono al server solo per le
3440 condivisioni non hanno bisogno di poter eseguire comandi
3443 <p>Creazione di un utente denominato sambo:</p>
3444 <pre class="literal-block">
3445 adduser --shell /bin/false sambo
3448 <p>Nel file <tt class="docutils literal"><span class=
3449 "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
3450 <pre class="literal-block">
3451 sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
3454 <p>Aggiunta dell'utente al database delle password per
3455 Samba e generazione della sua password:</p>
3456 <pre class="literal-block">
3460 <p>Se successivamente si vorra' modificare la password di
3461 un utente gia' esistente si usi:</p>
3462 <pre class="literal-block">
3466 <p>La password sotto Windows verra' modificata sul sistema
3470 <div class="section" id="creare-la-condivisione">
3471 <h2><a class="toc-backref" href=
3472 "#id69">7.4 Creare la
3473 condivisione</a></h2>
3475 <p>La condivisione altro non e' che una cartella sul server
3476 che viene resa disponibile ai client negoziando l'accesso
3477 in base a una autenticazione basata su <em>user-name /
3478 password</em>. E' per altro possibile permettere l'accesso
3479 a una risorsa a chiunque indiscriminatamente (a tutti i
3480 <tt class="docutils literal"><span class=
3481 "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
3482 punto di vista della sicurezza. Si decida se la cartella
3483 condivisa debba risiedere nella <em>home</em> di un utente
3484 (nel caso quest'ultimo ne sia l'unico fruitore) o in una
3485 cartella in /mnt/ (nel caso piu' utenti accedano a questa).
3486 Nel secondo caso si potranno gestire gli accessi sotto
3487 GNU/Linux tramite i gruppi.</p>
3489 <p>Creazione della risorsa sambo_share nella home
3490 dell'utente sambo:</p>
3491 <pre class="literal-block">
3492 # mkdir /home/sambo/sambo_share
3493 # chown sambo:sambo /home/sambo/sambo_share/
3496 <div class="section" id=
3497 "sicurezza-permessi-di-esecuzione-sul-server">
3498 <h3><a class="toc-backref" href=
3499 "#id70">7.4.1 Sicurezza: permessi di
3500 esecuzione sul server</a></h3>
3502 <p>Bisognerebbe notare sul server i permessi di
3503 esecuzione del file-system che ospita la cartella da
3504 condividere. Se i file che saranno contenuti nella
3505 condivisione saranno da usarsi sotto Windows non c'e'
3506 motivo che questi siano eseguibili sotto GNU/Linux. Si
3507 potrebbe avere quindi, ipotizzando una condivisione in
3508 <tt class="docutils literal"><span class=
3509 "pre">/mnt/share</span></tt> che risieda su di un file
3510 system dedicato:</p>
3512 <p><tt class="docutils literal"><span class=
3513 "pre">/etc/fstab</span></tt></p>
3516 /dev/hda10 /mnt/share ext3 rw,
3517 <strong>nosuid,noexec</strong> 0 3
3520 <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
3521 possibilita' di eseguire programmi con credenziali
3526 <div class="section" id=
3527 "configurazione-dell-applicativo-samba-vero-e-proprio">
3528 <h2><a class="toc-backref" href=
3529 "#id71">7.5 Configurazione
3530 dell'applicativo Samba vero e proprio.</a></h2>
3532 <p>Avendo preparato gli utenti (ancora una volta: non si
3533 dia una shell completa a un utente che serve solo per Samba
3534 o la posta elettronica) e la cartella sul file system si
3535 puo' procedere a configurare la condivisione su Samba.</p>
3537 <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
3538 vim si usi 235gg ):</p>
3539 <pre class="literal-block">
3541 # Percorso della cartella condivisa
3542 path = /home/sambo/sambo_share
3543 # Se gli utenti possono scrivere / modificare file
3545 # Negoziazione degli accessi su base utenti / passwords
3548 # #######################################
3549 # Altri parametri opzionali di interesse
3550 # Se posso vedere la condivisione da esplora risorse
3551 # anche se non ho i privilegi per accedervi.
3553 # Commento indicativo della risorsa
3554 comment = Condivisione per Sambo
3557 <p>Dopo aver salvato il file si puo' fare un primo
3558 controllo tramite l'utility <tt class=
3559 "docutils literal"><span class="pre">testparm</span></tt> ,
3560 che controlla la sintassi del file di configurazione di
3561 Samba. Se questo non rileva problemi si puo' procedere a un
3562 <tt class="docutils literal"><span class="pre">#</span>
3563 <span class="pre">/etc/init.d/samba</span> <span class=
3564 "pre">restart</span></tt> .</p>
3567 <div class="section" id="testare-il-servizio">
3568 <h2><a class="toc-backref" href=
3569 "#id72">7.6 Testare il Servizio</a></h2>
3571 <p>Come testare il servizio</p>
3574 <pre class="literal-block">
3575 smbclient -U sambo -L localhost
3578 <p>Questo comando permette di esplorare la risorsa
3579 qualificandosi come utente, in questo modo potete testare
3580 il corretto funzionamento dell'autenticazione. Si provi
3581 inizialmente a sbagliare la password deliberatamente, poi a
3582 inserirla correttamente: dovrebbero essere visibili le
3583 risorse disponibili al solo utente sambo: la suo /home e la
3584 cartella samba_share:</p>
3585 <pre class="literal-block">
3586 Sharename Type Comment
3587 --------- ---- -------
3588 sambo_share Disk Condivisione per Sambo
3589 print$ Disk Printer Drivers
3590 IPC$ IPC IPC Service (base server)
3591 sambo Disk Home Directories
3594 <p>In particolare l'ultima voce relativa alla home
3595 directory dell'utente dovrebbe essere visibile solo agli
3596 utenti autenticati.</p>
3598 <p>In alternativa e' possibile montare realmente la
3599 condivisone anche su GNU/Linux tramite un client per samba
3600 e testarne il corretto funzionamento:</p>
3601 <pre class="literal-block">
3602 mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
3607 <div class="section" id="server-di-posta-postfix">
3608 <h1><a class="toc-backref" href=
3609 "#id73">8 Server di posta: Postfix</a></h1>
3611 <p>Il server di posta che prenderemo in considerazione e'
3612 Postfix, a seguire un estratto di un file di configurazione
3613 <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
3614 nelle <tt class="docutils literal"><span class=
3615 "pre">/home</span></tt> degli utenti per la consegna della
3618 <p><tt class="docutils literal"><span class=
3619 "pre">/etc/postfix/main.cf</span></tt>:</p>
3620 <pre class="literal-block">
3621 # ...segue dalla riga ~30
3622 myhostname = 162.piffa.net
3623 alias_maps = hash:/etc/aliases
3624 alias_database = hash:/etc/aliases
3625 myorigin = 162.piffa.net
3626 mydestination = 162.piffa.net, localhost
3627 # Se non avete un ip pubblico e statico, con un adeguato record PTR
3628 # dovrete usare un realy host per l'invio della posta
3629 relayhost = smtp.piffa.net
3631 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
3632 # Se dovete inviare la posta per i client della vostra LAN privata:
3633 # mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
3634 # E si faccia BEN ATTENZIONE a non diventare un open realay smtp
3637 # Per effettuare lo storaggio della posta nelle home directory degli utenti
3638 # in una Maildir invece che la Mailbox in /var/mail/utente
3639 # si disabiliti procmail
3640 #mailbox_command = procmail -a "$EXTENSION"
3642 # Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
3643 # nella home dell'utente:
3644 home_mailbox = Maildir/
3645 mailbox_size_limit = 0
3646 recipient_delimiter = +
3647 inet_interfaces = all
3650 <dl class="docutils">
3651 <dt>E' disponibile un file di configurazione di esempio ben
3652 piu' articolato e commentato::</dt>
3654 <dd>/usr/share/postfix/main.cf.dist .</dd>
3657 <div class="section" id="test-del-server-smtp">
3658 <h2><a class="toc-backref" href=
3659 "#id74">8.1 Test del server smtp</a></h2>
3661 <p>Per testare il corretto funzionamento del server di
3662 posta si puo' procedere in vari modi.</p>
3665 <li>Spedire una mail a una casella locale / remota e
3666 controllare i log (syslog)</li>
3668 <li>Collegarsi via <em>telnet</em> al server di posta:
3669 <a class="reference external" href=
3670 "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
3672 <li>usare una utility come SWAKS</li>
3675 <div class="section" id="swaks">
3676 <h3><a class="toc-backref" href=
3677 "#id75">8.1.1 Swaks</a></h3>
3679 <dl class="docutils">
3680 <dt>Per gli utenti meno esperti e' consigliabile
3681 utilizzare <em>SWAKS</em>: si installi l'omonimo
3682 pacchetto e si esegua un test con::</dt>
3684 <dd>swaks --to <a class="reference external" href=
3685 "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
3686 --from <a class="reference external" href=
3687 "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
3690 <p>Ecco un esempio di una sessione corretta:</p>
3691 <pre class="literal-block">
3692 swaks --to andrea@piffa.net from andrea@mydomain.com
3693 === Trying smtp.piffa.net:25...
3694 === Connected to smtp.piffa.net.
3695 <- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
3696 -> EHLO alice.mydomain.com
3697 <- 250-zoo.piffa.net
3698 <- 250-PIPELINING
3699 <- 250-SIZE 10240000
3703 <- 250-ENHANCEDSTATUSCODES
3706 -> MAIL FROM:<root@alice.mydomain.com>
3708 -> RCPT TO:<andrea@piffa.net>
3711 <- 354 End data with <CR><LF>.<CR><LF>
3712 -> Date: Thu, 28 May 2009 13:11:19 +0200
3713 -> To: andrea@piffa.net
3714 -> From: root@alice.mydomain.com
3715 -> Subject: test Thu, 28 May 2009 13:11:19 +0200
3716 -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
3718 -> This is a test mailing
3721 <- 250 2.0.0 Ok: queued as 41FB261AFC
3724 === Connection closed with remote host.
3729 <div class="section" id="imap-e-pop">
3730 <h2><a class="toc-backref" href=
3731 "#id76">8.2 Imap e pop</a></h2>
3733 <p>Postfix e' un server SMTP, di conseguenza se volete che
3734 i vostri utenti possano <em>scaricare</em> in locale la
3735 posta generalmente volete mettere a loro disposizione un
3736 server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
3738 <dl class="docutils">
3739 <dt>Pacchetti da installare</dt>
3741 <dd>courier-imap courier-pop</dd>
3744 <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
3745 funziona con le Mailbox in <tt class=
3746 "docutils literal"><span class="pre">/var/mail/</span></tt>
3750 <div class="section" id="client-a-riga-di-comando">
3751 <h2><a class="toc-backref" href=
3752 "#id77">8.3 Client a riga di
3755 <p>Per testare il corretto funzionamento del server di
3756 posta e' utile avere a disposizione delle utility per
3757 inviare e leggere la posta: ovviamente da riga di
3760 <div class="section" id="mailx">
3761 <h3><a class="toc-backref" href=
3762 "#id78">8.3.1 mailx</a></h3>
3764 <dl class="docutils">
3765 <dt>Uno dei client piu' semplici, sopratutto per
3766 inviare un messaggioi. e' sufficiente usare una formula
3769 <dd>mail <a class="reference external" href=
3770 "mailto:utente@dominio.com">utente@dominio.com</a></dd>
3773 <p>Se il comando <tt class=
3774 "docutils literal"><span class="pre">mail</span></tt> non
3775 fosse disponibile si installi il pacchetto <tt class=
3776 "docutils literal"><span class=
3777 "pre">mailx</span></tt>.</p>
3779 <p>Al primo prompt si digitera' l'oggetto, il testo del
3780 messaggio (per terminare l'inserimento lasciare una riga
3781 vuota, digitare un <tt class=
3782 "docutils literal"><span class="pre">punto</span>
3783 <span class="pre">+</span> <span class=
3784 "pre">Invio</span></tt> su una riga vuota), la Carbon
3785 Copy (se necessaria).</p>
3788 <pre class="literal-block">
3789 mail andrea@localhost
3790 Subject: Oggetto della mail
3792 per terminare il messaggio
3793 lasciare una riga vuota
3794 e un punto (poi Invio).
3800 <p>Per altrre opzioni si veda la pagina man.</p>
3803 <div class="section" id="mutt">
3804 <h3><a class="toc-backref" href=
3805 "#id79">8.3.2 Mutt</a></h3>
3807 <p>Mutt e' uno dei gestori di posta preferiti da chi
3808 preferisce utilizzare l'interfaccia testuale per la
3809 gestione della posta.</p>
3811 <p>Mutt ha un file di configurazione <tt class=
3812 "docutils literal"><span class="pre">.muttrc</span></tt>
3813 nella <em>home</em> dell'utente, alcuni settaggi possono
3816 <dl class="docutils">
3817 <dt>set folder="~/Maildir"</dt>
3819 <dd>Per utilizzare <tt class=
3820 "docutils literal"><span class=
3821 "pre">/home/nome_utente/Maildir</span> <span class=
3822 "pre">come</span> <span class=
3823 "pre">mailbox</span></tt>, invece del default
3824 <tt class="docutils literal"><span class=
3825 "pre">/var/mail/nome_utente</span></tt>.</dd>
3827 <dt>set editor="vim"</dt>
3829 <dd>Utilizzare <tt class=
3830 "docutils literal"><span class="pre">vim</span></tt>
3831 come editor per comporre i messaggi.</dd>
3834 <p>Spesso e' utile poter <em>levvere al volo</em> la
3835 Mailbox / Maildir di un utente sul server di posta, per
3836 controllare se i messaggi vengono recapitati
3838 <pre class="literal-block">
3839 mutt -f /var/mail/utente
3840 mutt -f /home/utente/Maildir
3843 <p>In modo analogo si puo' consultare al volo la propia
3844 mailbox su un server remoto tramite IMAP/POP:</p>
3845 <pre class="literal-block">
3846 mutt -f imap://nome_utente@piffa.net
3850 <div class="section" id="web-client">
3851 <h3><a class="toc-backref" href=
3852 "#id80">8.3.3 Web client</a></h3>
3854 <p>Per mettere a disposizione degli utenti un client web
3855 per gestire la propria posta si installi il pacchetto:
3856 <tt class="docutils literal"><span class=
3857 "pre">squirrelmail</span></tt> . Ci sono tanti altri
3858 client web disponibili: questo e' particolarmente
3859 semplice. Naturalmente dovrete aver installato:
3860 <tt class="docutils literal"><span class=
3861 "pre">php5</span> <span class="pre">apache2</span></tt>
3864 <p>L'interfaccia dovrebbe essere disponibile all'url:
3865 <tt class="docutils literal"><span class=
3866 "pre">http://localhost/squirrelmail</span></tt> . Se
3867 cosi' non fosse assicuratevi che Apache abbia incluso il
3868 file di configurazione di squirrelmail:</p>
3869 <pre class="literal-block">
3870 cd /etc/apache2/conf.d/
3871 ln -s /etc/squirrelmail/apache.conf ./
3876 <div class="section" id="graylisting">
3877 <h2><a class="toc-backref" href=
3878 "#id81">8.4 Graylisting</a></h2>
3880 <p>Il <em>graylisting</em> e' un sistema relativamente poco
3881 invasivo, con un limitato consumo di risorse per limitare
3882 lo <em>SPAM</em> in arrivo sul propio server di posta. Come
3883 suggerisce il nome e' una via di mezzo tra una <em>white
3884 list</em> (una lista di mittenti privilegiata, sempre
3885 benvenuti) e una <em>black list</em> (mittenti
3886 <em>bannati</em>, banditi dal poter inviare nuovi
3889 <p>Il funzionamento e' relativamente semplice: ogni
3890 mittente sconosciuto viene immediatamente rifiutato con un
3891 errore <em>non grave</em> come un <em>server non
3892 disponibile, provare piu' tardi</em>. Questo inconveniente
3893 non dovrebbe mettere in difficolta' un server di posta /
3894 mittente legittimo, che dopo un periodo di attesa tentera'
3895 nuovamente di inviare il messaggio ottenendo finalmente il
3896 risultato atteso. Diversamente un <em>bot</em> per l'invio
3897 di SPAM o un applicazione improvvisata (tipicamente di
3898 derivazione virale) che stesse inviando il messaggio
3899 <em>probabilmente</em> non insisterebbe, rinunciano ad
3900 inviare il messaggio preferendo destinazioni meno
3903 <div class="section" id="abilitazione-in-postfix">
3904 <h3><a class="toc-backref" href=
3905 "#id82">8.4.1 Abilitazione in
3908 <p>Installare il pacchetto: <tt class=
3909 "docutils literal"><span class="pre">postgrey</span></tt>
3910 e aggiungere il file di configurazione di Postfix
3911 <tt class="docutils literal"><span class=
3912 "pre">/etc/postfix/main.cf</span></tt>:</p>
3913 <pre class="literal-block">
3914 smtpd_recipient_restrictions =
3916 reject_unauth_destination,
3917 check_policy_service inet:127.0.0.1:60000
3921 <div class="section" id="test">
3922 <h3><a class="toc-backref" href=
3923 "#id83">8.4.2 Test</a></h3>
3925 <p>Inviando un messaggio il client dovrebbe ricevere un
3926 iniziale messaggio di rifiuto del messaggio:</p>
3927 <pre class="literal-block">
3928 swaks --to andrea@piffa.net from andrea@mydonain.com
3929 === Trying smtp.piffa.net:25...
3930 === Connected to smtp.piffa.net
3933 -> RCPT TO:<andrea@piffa.net>
3934 <** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
3935 Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
3938 === Connection closed with remote host.
3941 <p>A lato server si dovrebbe rilevare su <tt class=
3942 "docutils literal"><span class=
3943 "pre">/var/log/syslog</span></tt> qualcosa di simile:</p>
3944 <pre class="literal-block">
3945 connect from alice.mydomain.com[65.98.21.97]
3946 May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
3947 client_name=alice.mydomain.com,
3948 client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
3949 May 28 14:53:34 r24266 postfix/smtpd[22538]:
3950 NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
3951 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
3952 see http://postgrey.schweikert.ch/help/piffa.net.html;
3953 from=<root@alice.mydomain.com> to=<andrea@piffa.net>
3954 proto=ESMTP helo=<alice.mydomain.com>
3955 May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
3959 <div class="section" id="statistiche">
3960 <h3><a class="toc-backref" href=
3961 "#id84">8.4.3 Statistiche</a></h3>
3963 <p>E' sempre utile poter tracciare qualche statistica
3964 sulle percentuali di messaggi ricevuti, da chi, messaggi
3965 rifiutati (e per quale motivo). Statistiche che attingono
3966 dai soliti log del server di posta <tt class=
3967 "docutils literal"><span class=
3968 "pre">/var/log/syslog</span></tt> di default oltre che i
3969 dedicati <tt class="docutils literal"><span class=
3970 "pre">/var/log/mail</span></tt> .</p>
3972 <p>Una utility semplice per analizzare l'attivita' del
3973 propio server smtp potrebbe essere <tt class=
3974 "docutils literal"><span class=
3975 "pre">pflogsumm</span></tt> , installato il pacchetto la
3976 si puo' invocare con:</p>
3977 <pre class="literal-block">
3978 pflogsumm.pl /var/log/mail.log
3981 <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
3982 "docutils literal"><span class=
3983 "pre">/var/log/mail.log.0</span></tt></p>
3988 <div class="section" id="firewall">
3989 <h1><a class="toc-backref" href=
3990 "#id85">9 Firewall</a></h1>
3992 <p>In Informatica, nell'ambito delle reti di computer, un
3993 firewall (termine inglese dal significato originario di
3994 parete refrattaria, muro tagliafuoco, muro ignifugo; in
3995 italiano anche parafuoco o parafiamma) e' un componente
3996 passivo di difesa perimetrale che puo'ò anche svolgere
3997 funzioni di collegamento tra due o piu' tronconi di rete.
3998 Usualmente la rete viene divisa in due sotto reti: una, detta
3999 esterna, comprende l'intera Internet mentre l'altra interna,
4000 detta LAN (Local Area Network), comprende una sezione piu' o
4001 meno grande di un insieme di computer locali. In alcuni casi
4002 e' possibile che si crei l'esigenza di creare una terza sotto
4003 rete detta DMZ (o zona demilitarizzata) atta a contenere quei
4004 sistemi che devono essere isolati dalla rete interna ma
4005 devono comunque essere protetti dal firewall.</p>
4007 <p>Una prima definizione chiusa di firewall è la
4010 <p>Apparato di rete hardware o software che filtra tutti i
4011 pacchetti entranti ed uscenti, da e verso una rete o un
4012 computer, applicando regole che contribuiscono alla sicurezza
4015 <p>In realta'à un firewall puo'ò essere realizzato con
4016 un normale computer (con almeno due schede di rete e software
4017 apposito), puo'ò essere una funzione inclusa in un router o
4018 puo'ò essere un apparato specializzato. Esistono inoltre i
4019 cosiddetti "firewall personali", che sono programmi
4020 installati sui normali calcolatori, che filtrano solamente i
4021 pacchetti che entrano ed escono da quel calcolatore; in tal
4022 caso viene utilizzata una sola scheda di rete.</p>
4024 <p>La funzionalita'à principale in sostanza è quella
4025 di creare un filtro sulle connessioni entranti ed uscenti, in
4026 questo modo il dispositivo innalza il livello di sicurezza
4027 della rete e permette sia agli utenti interni che a quelli
4028 esterni di operare nel massimo della sicurezza. Il firewall
4029 agisce sui pacchetti in transito da e per la zona interna
4030 potendo eseguire su di essi operazioni di: controllo modifica
4033 <p>Questo grazie alla sua capacita'Ã di "aprire" il
4034 pacchetto IP per leggere le informazioni presenti sul suo
4035 header, e in alcuni casi anche di effettuare verifiche sul
4036 contenuto del pacchetto.</p>
4038 <div class="section" id="links">
4039 <h2><a class="toc-backref" href=
4040 "#id86">9.1 Links</a></h2>
4043 <li><a class="reference external" href=
4044 "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
4046 <li><a class="reference external" href=
4047 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
4048 http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
4052 <div class="section" id="ipfilter">
4053 <h2><a class="toc-backref" href=
4054 "#id87">9.2 Ipfilter</a></h2>
4056 <p>Link: <a class="reference external" href=
4057 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
4058 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
4060 <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
4061 po' del 3) e su cosa <em>non</em> lavora (livello 4).
4062 Netfilter lavora anche su parti del livello 3 (TCP, UDP,
4063 etc) e del livello 1 (MAC source address). Iptables
4064 comunque permette di fare il <em>connection-tracking</em>,
4065 mediante il quale possiamo implementare il Network Address
4068 <p>Netfilter non ricostruisce il flusso di dati tra
4069 pacchetti, non puo' quindi rilevare la presenza di virus o
4070 simili che si trasmettono su pacchetti separati:
4071 ricomporre, analizzare e tornare a scomporre i frammenti
4072 richiederebbe troppa RAM e risorse di sistema, con il
4073 conseguente rischio di saturare il firewall fino
4074 all'abbandono dei nuovi pacchetti in transito. Ci sono
4075 altri software piu' adatti a questi compiti, ad esempio un
4076 proxy HTTP come Squid che e' appunto una applicazione di
4077 quarto livello, progettata e strutturata per analizzare e
4078 modificare i flussi di dati (il <em>contenuto</em> dei
4079 pacchetti, non le sole <em>intestazioni</em>) facendo
4080 abbondate uso delle risorse RAM e di calcolo del sistema.
4081 Non a caso su macchine embedded dalle prestazioni molto
4082 ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
4083 massimo le risorse di sistema per gestire il traffico di
4084 una rete 10/100, mentre il lavoro tipico svolto da
4085 netfilter e' quasi irrilevante.</p>
4088 <div class="section" id="progettazione-di-un-firewall">
4089 <h2><a class="toc-backref" href=
4090 "#id88">9.3 Progettazione di un
4093 <p>Per implementare un firewall bisogna decidere un aio di
4094 cose: la collocazione e l'approccio (inclusivo o esclusivo)
4095 al filtraggio, il tipo di hardware.</p>
4097 <div class="section" id="collocazione">
4098 <h3><a class="toc-backref" href=
4099 "#id89">9.3.1 Collocazione</a></h3>
4101 <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
4102 della rete, decidere se diversi reparti di una azienda si
4103 possano vedere tra loro e in che misura.</p>
4105 <p>Collocazione:</p>
4108 <ol class="arabic simple">
4111 <li>tra router e servers / LAN</li>
4113 <li>Unico server / router / firewall e connessi
4114 rischi. considerare l'acquisto di un router hardware
4119 <dl class="docutils">
4120 <dt>Layeed security:</dt>
4122 <dd>Implementare piu' device / software sui diversi
4123 livelli: <a class="reference external" href=
4124 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
4125 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
4129 <div class="section" id="policy-di-default">
4130 <h3><a class="toc-backref" href=
4131 "#id90">9.3.2 Policy di default</a></h3>
4133 <p>Drop o Accept: conseguenze per sicurezza, facilita' di
4137 <div class="section" id="hardware">
4138 <h3><a class="toc-backref" href=
4139 "#id91">9.3.3 Hardware</a></h3>
4141 <p>Sostanzialmente potremmo distinguere due tipologie di
4144 <dl class="docutils">
4145 <dt>Network appliance dedicata::</dt>
4147 <dd>Un dispositivo hardware dedicato alla funzione di
4148 Firewall, ad es un Cisco / Fortigate. Si noti che molti
4149 firewall economici altro non sono che Linux box molto
4152 <dt>Server / Personal computer:</dt>
4154 <dd>Un server sul quale viene fatto girare Netfilter ad
4155 uso del server stesso e della rete connessa.</dd>
4158 <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
4159 flessibilita', strumenti di gestione, sicurezza,
4164 <div class="section" id=
4165 "percorso-dei-pacchetti-tra-tabelle-e-catene">
4166 <h2><a class="toc-backref" href=
4167 "#id92">9.4 Percorso dei pacchetti tra
4168 tabelle e catene</a></h2>
4170 <p>link: <a class="reference external" href=
4171 "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
4172 http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
4175 <div class="section" id="concetti-di-base">
4176 <h2><a class="toc-backref" href=
4177 "#id93">9.5 Concetti di base</a></h2>
4179 <div class="section" id="tabelle-catene-regole">
4180 <h3><a class="toc-backref" href=
4181 "#id94">9.5.1 Tabelle, catene,
4184 <p>Iptables lavora su 3 tabelle (tables) di default:</p>
4187 <li>filter - Regola il firewalling: quali pacchetti
4188 accettare, quali bloccare</li>
4190 <li>nat - Regola le attivita'Ã di natting</li>
4192 <li>mangle - Interviene sulla alterazione dei
4196 <p>Ogni tabella ha delle catene (chains) predefinite
4197 (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
4198 aggiunte catene custom. Ogni catena è composta da un
4199 elenco di regole (rules) che identificano pacchetti di
4200 rete secondo criteri diversi (es: -p tcp --dport 80 -d
4201 10.0.0.45) Ogni regola termina con una indicazione
4202 (target) su cosa fare dei pacchetti identificati dalla
4203 regola stessa (es: -j ACCEPT, -j DROP ...)</p>
4206 <div class="section" id="match">
4207 <h3><a class="toc-backref" href=
4208 "#id95">9.5.2 Match</a></h3>
4210 <p>I Match di una regola (rule) servono a testare un
4211 pacchetto per valutare se corrisponda a certe
4212 caratteristiche. I match di possono servire a controllare
4213 se un pacchetto e' destinato a una porta particolare o
4214 utilizza un protocollo particolare.</p>
4216 <p>Alcuni esempi:</p>
4218 <dl class="docutils">
4219 <dt>-p [!] proto</dt>
4221 <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
4222 udp, gre, ah...)</dd>
4224 <dt>-s [!] address[/mask]</dt>
4226 <dd>Indirizzo IP sorgente (o network con maschera di
4229 <dt>-d [!] address[/mask]</dt>
4231 <dd>Indirizzo IP destinazione (o network)</dd>
4233 <dt>-i [!] interface[+]</dt>
4235 <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
4237 <dt>-o [!] interface[+]</dt>
4239 <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
4242 <table class="docutils option-list" frame="void" rules=
4244 <col class="option">
4245 <col class="description">
4247 <tbody valign="top">
4249 <td class="option-group"><kbd><span class=
4250 "option">-f</span></kbd></td>
4252 <td>Frammento di pacchetto</td>
4258 <div class="section" id="targets">
4259 <h3><a class="toc-backref" href=
4260 "#id96">9.5.3 Targets</a></h3>
4262 <p>Se un pacchetto soddisfa le condizioni del Match
4263 <em>salta</em> (jump) su uno dei target possibili, in
4264 caso contrario continua il suo percorso tra regole catene
4267 <p>Target principali:</p>
4269 <dl class="docutils">
4270 <dt><em>-j ACCEPT</em></dt>
4272 <dd>Il pacchetto matchato viene accettato e procede
4273 verso la sua destinazione. Si usa per definire il
4274 traffico permesso.</dd>
4276 <dt><em>-j DROP</em></dt>
4278 <dd>Il pacchetto viene rifiutato e scartato, senza
4279 alcuna notifica al mittente. Si usa, in alternativa a
4280 REJECT, per bloccare traffico.</dd>
4282 <dt><em>-j REJECT</em></dt>
4284 <dd>Il pacchetto viene rifiutato. Al mittente viene
4285 mandato un pacchetto (configurabile) di notifica tipo
4286 ICMP port-unreachable (--reject-with
4287 icmp-port-unreachable)</dd>
4290 <table class="docutils option-list" frame="void" rules=
4292 <col class="option">
4293 <col class="description">
4295 <tbody valign="top">
4297 <td class="option-group"><kbd><span class=
4298 "option">-t <var>LOG</var></span></kbd></td>
4300 <td>Il pacchetto viene loggato via syslog e procede
4301 l'attraversamento della catena. Opzioni:
4302 (--log-level, --log-prefix, --log-tcp-sequence,
4303 --log-tcp-options, --log-ip-options)</td>
4307 <td class="option-group"><kbd><span class=
4308 "option">-j <var>DNAT</var></span></kbd></td>
4310 <td>Viene modificato l'IP di destinazione del
4311 pacchetto. Target disponibile solo in nat /
4312 PREROUTING e nat / OUTPUT. L'opzione
4313 --to-destination IP:porta definisce il nuovo IP di
4314 destinazione. Si usa tipicamente su network
4315 firewall che nattano server di una DMZ</td>
4319 <td class="option-group"><kbd><span class=
4320 "option">-j <var>SNAT</var></span></kbd></td>
4322 <td>Viene modificato l'IP sorgente. Solo in nat /
4323 POSTROUTING. Prevede l'opzione --to-source
4324 IP:porta. Si usa per permettere l'accesso a
4325 Internet da una rete locale con IP privati.</td>
4329 <td class="option-group"><kbd><span class=
4330 "option">-j <var>MASQUERADE</var></span></kbd></td>
4332 <td>Simile a SNAT, si applica quando i pacchetti
4333 escono da interfacce con IP dinamico (dialup, adsl,
4334 dhcp...). Si usa solo in nat / POSTROUTING e
4335 prevede l'opzione --to-ports porte.</td>
4339 <td class="option-group"><kbd><span class=
4340 "option">-j <var>REDIRECT</var></span></kbd></td>
4342 <td>Redirige il pacchetto ad una porta locale.
4343 Usabile solo in nat / PREROUTING e nat / OUTPUT è
4344 previsto per fare un transparent proxy (con proxy
4345 server in esecuzione sulla macchina con
4350 <td class="option-group"><kbd><span class=
4351 "option">-j <var>RETURN</var></span></kbd></td>
4353 <td>Interrompe l'attraversamento della catena. Se
4354 questa è una secondaria, il pacchetto torna ad
4355 attraversare la catena madre da punto in cui aveva
4356 fatto il salto nella secondaria. Se il RETURN è in
4357 una delle catene di default, il pacchetto
4358 interrompe l'attraversamento e segue la policy di
4363 <td class="option-group"><kbd><span class=
4364 "option">-j <var>TOS</var></span></kbd></td>
4366 <td>Usabile solo nella tabella mangle, permette di
4367 cambiare il TOS (Type Of Service) di un pacchetto
4368 con l'opzione --set-tos. Per un elenco dei
4369 parametri disponibili: iptables -j TOS -h</td>
4373 <td class="option-group"><kbd><span class=
4374 "option">-j <var>MIRROR</var></span></kbd></td>
4376 <td>Curioso e sperimentale, questo target invia un
4377 pacchetto speculare al mittente. In pratica è come
4378 se facesse da specchio per tutti i pacchetti
4379 ricevuti. Da usare con cautela, per evitare
4380 attacchi DOS indiretti.</td>
4387 <div class="section" id="tabella-filter">
4388 <h2><a class="toc-backref" href=
4389 "#id97">9.6 Tabella Filter</a></h2>
4391 <p>E' quella implicita e predefinita (-t filter) Riguarda
4392 le attività di filtraggio del traffico. Ha 3 catene
4393 di default: INPUT - Riguarda tutti i pacchetti destinati al
4394 sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
4395 i pacchetti che sono originati dal sistema e destinati ad
4396 uscire. FORWARD - Riguarda i pacchetti che attraversano il
4397 sistema, con IP sorgente e destinazione esterni.</p>
4399 <p>Esempio per permettere accesso alla porta 80 locale:
4400 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
4401 Analoga a: iptables -I INPUT -p tcp --dport 80 -j
4404 <p>Esempio per permettere ad un pacchetto con IP sorgente
4405 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
4406 il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
4410 <div class="section" id=
4411 "flush-automatico-per-macchine-remote">
4412 <h2><a class="toc-backref" href=
4413 "#id98">9.7 Flush automatico per macchine
4416 <p>Se state provando una configurazione del firewall per
4417 una macchina remota e' buona norma per evitare brutte
4418 figure attivare uno script che faccia il <em>flush</em>
4419 delle regole dopo qualche minuto. Potreste infatti
4420 inavvertitamente impostare una regola che vi impedisca di
4421 raggiungere la macchina remota, cosi' da non poter neanche
4422 eliminare quella regola e ripristinare la situazione
4425 <p><em>Veramente</em>, prima di lavorare sul firewall di
4426 una macchina remota impostate almeno un <tt class=
4427 "docutils literal"><span class="pre">at</span> <span class=
4428 "pre">now</span> <span class="pre">+5</span> <span class=
4429 "pre">min</span></tt> o con un'oretta di margine per fare
4430 il <em>flush</em> delle regole (su tutte le tabelle):</p>
4431 <pre class="literal-block">
4433 at> /sbin/iptables -F
4438 <div class="section" id="gestione-regole-rules">
4439 <h2><a class="toc-backref" href=
4440 "#id99">9.8 Gestione regole
4443 <p>Il comando iptables viene usato per ogni
4444 attivita'Ã di gestione e configurazione.</p>
4446 <p>Inserimento regole:</p>
4448 <dl class="docutils">
4449 <dt>iptables -A CATENA ...</dt>
4451 <dd>Aggiunge una regola alla fine della catena
4454 <dt>iptables -I CATENA [#] ...</dt>
4456 <dd>Inserisce alla riga # (default 1) una regola nella
4457 catena indicata</dd>
4459 <dt>iptables -N CATENA</dt>
4461 <dd>Crea una nuova catena custom</dd>
4463 <dt>iptables -P CATENA TARGET</dt>
4465 <dd>Imposta il target di default per la catena
4469 <p>Rimozione regole e azzeramenti:</p>
4471 <dl class="docutils">
4472 <dt>iptables -F [catena]</dt>
4474 <dd>Ripulisce tutte le catene (o quella indicata)</dd>
4476 <dt>iptables -X [catena]</dt>
4478 <dd>Ripulisce tutte le catene custom (o quella
4481 <dt>iptables -Z [catena]</dt>
4483 <dd>Azzera i contatori sulle catene</dd>
4485 <dt>iptables -D catena #</dt>
4487 <dd>Cancella la regola numero # dalla catena
4491 <p>Interrogazione:</p>
4493 <dl class="docutils">
4494 <dt>iptables -L</dt>
4496 <dd>Elenca le regole esistenti</dd>
4498 <dt>iptables -L -n -v</dt>
4500 <dd>Elenca, senza risolvere gli host, in modo verboso le
4501 regole esistenti</dd>
4505 <div class="section" id="salvataggio-regole">
4506 <h2><a class="toc-backref" href=
4507 "#id100">9.9 Salvataggio regole</a></h2>
4509 <p>Il comando <tt class="docutils literal"><span class=
4510 "pre">iptables</span></tt> serve per interagire con il
4511 framework <tt class="docutils literal"><span class=
4512 "pre">Netfilter</span></tt> che gestisce il firewall di
4513 Linux al livello del kernel. Questo comporta, in modo
4514 analogo a quando avviene col comando <tt class=
4515 "docutils literal"><span class="pre">ifconfig</span></tt>,
4516 che i cambiamenti impostati siano in <em>tempo reale,
4517 RAM</em>, non persistenti nel sistema: al boot successivo
4518 del sistema tutto tornera' alle impostazioni di base (in
4519 questo caso <em>nulle</em>, con policy di default settate
4520 su <tt class="docutils literal"><span class=
4521 "pre">ACCEPT</span></tt> per tutto).</p>
4523 <p>Le varie invocazioni di iptables potrebbero essere
4524 richiamate da degli scripts dedicati, ma fortunatamente e'
4525 stata predisposta una apposita utility per gestire questi
4526 scripts in modo da avere a disposizione un <em>formato
4527 standard</em> per il salvataggio e il ripristino delle
4528 regole del firewall.</p>
4530 <p>Altro problema: decidere quando attivare / disattivare
4531 queste regole. Utilizzare i <em>runlevels</em> non e' una
4532 soluzione adeguata: le regole del firewall sono legate
4533 all'attivita' delle schede di rete (e un host con diverse
4534 schede di rete puo' attivarle a secondo delle esigenze di
4535 routing, partenza di servizi es file_sharing per un
4536 back-up...): il sistema operativo Debian permette di legare
4537 l'esecuzione di comandi alla attivazione di una device di
4538 rete (<tt class="docutils literal"><span class=
4539 "pre">up</span></tt>), dopo la sua attivazione (<tt class=
4540 "docutils literal"><span class="pre">post-up</span></tt>,
4541 utile per devices che richiedono un certo tempo per
4542 inizializzarsi: come un tunnel o una connessione punto a
4543 punto), prima della sua attivazione (<tt class=
4544 "docutils literal"><span class="pre">pre-up</span></tt>).
4545 Allo stesso modo sono disponibili eventi analoghi per
4546 accompagnare la disattivazione dei device di rete: si veda
4547 la pagina man di <tt class="docutils literal"><span class=
4548 "pre">interfaces</span></tt>.</p>
4550 <p>Nel nostro caso avremo per una possibile scheda
4551 <tt class="docutils literal"><span class=
4552 "pre">eth0</span></tt>:</p>
4554 <p><tt class="docutils literal"><span class=
4555 "pre">/etc/network/interfaces</span></tt></p>
4556 <pre class="literal-block">
4557 iface eth1 inet static
4558 up /sbin/iptables-restore /root/firewall/basic_fw
4559 # Seguono i soliti parametri della scheda di rete
4560 address 10.10.208.21
4563 <div class="section" id="iptables-save">
4564 <h3><a class="toc-backref" href=
4565 "#id101">9.9.1 Iptables-save</a></h3>
4567 <p>Per salvare le regole di iptables attualmente presenti
4568 nel kernel si usi il comando:</p>
4569 <pre class="literal-block">
4570 # iptables-save >> /root/firewall/basic_fw
4573 <p>Il contenuto del file dovrebbe essere
4574 <em>comprensibile</em>: sostanzialmente sono regole di
4575 iptables, senza il comando iptables ripetuto, suddivisi
4576 per le varie tabelle. Potete comunque correggere
4577 eventuali parametri con un edito di testo.</p>
4579 <p>Se non avete un'idea migliore potreste voler tenere
4580 gli script dei firewall in una cartella <tt class=
4581 "docutils literal"><span class=
4582 "pre">~/firewall</span></tt> nella home directory
4583 dell'utente <tt class="docutils literal"><span class=
4584 "pre">root</span></tt>.</p>
4587 <div class="section" id="iptables-restore">
4588 <h3><a class="toc-backref" href=
4589 "#id102">9.9.2 Iptables-restore</a></h3>
4591 <p>Per ripristinare un set di regole precedentemente
4592 salvate con <tt class="docutils literal"><span class=
4593 "pre">iptables-save</span></tt> si utilizzi <tt class=
4594 "docutils literal"><span class=
4595 "pre">iptables-restore</span></tt>. Se questo deve essere
4596 fatto in modalita' <em>non interattiva</em>, ad esempio
4597 deve essere eseguito dal demone che si occupa di
4598 inizializzare le schede di rete, oppure un <em>cron</em>
4599 o altro, e' buona norma richiamare i percorsi completi
4600 sia dei comandi che dei file:</p>
4601 <pre class="literal-block">
4602 /sbin/iptables-restore /root/firewall/basic_fw
4607 <div class="section" id="esempi">
4608 <h2><a class="toc-backref" href=
4609 "#id103">9.10 Esempi</a></h2>
4611 <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
4612 e' un computer con un paio di schede di rete fisiche una
4613 delle quali collegata alla rete internet l'altra a una rete
4614 privata per la LAN interna.</p>
4617 <ol class="arabic simple">
4618 <li><tt class="docutils literal"><span class=
4619 "pre">eth0</span></tt> scheda di rete principale sulla
4620 rete privata interna 192.168.0.0/24</li>
4622 <li><tt class="docutils literal"><span class=
4623 "pre">eth1</span></tt> scheda di rete secondaria per la
4624 connessione ad internet</li>
4626 <li><tt class="docutils literal"><span class=
4627 "pre">ppp0</span></tt> punto-a-punto per una
4628 connessione ad internet</li>
4632 <div class="section" id="bloccare-i-ping-dall-esterno">
4633 <h3><a class="toc-backref" href=
4634 "#id104">9.10.1 Bloccare i ping
4635 dall'esterno</a></h3>
4637 <p>Spesso gli script che attaccano
4638 <em>automaticamente</em> le varie reti provano a fare un
4639 ping per verificare quali IP sono on-line: bloccare il
4640 traffico <tt class="docutils literal"><span class=
4641 "pre">ICMP</span></tt> in ingresso puo' aiutare ad
4642 evitare parte di questi attacchi:</p>
4643 <pre class="literal-block">
4644 iptables -A INPUT -i ppp0 -p ICMP -j DROP
4648 <div class="section" id="masquerading-snat">
4649 <h3><a class="toc-backref" href=
4650 "#id105">9.10.2 Masquerading
4653 <dl class="docutils">
4654 <dt>Per attivare la network address translation (in
4655 questo caso un SNAT) per la rete locale privata
4656 sull'indirizzo ip del <em>modem</em>::</dt>
4658 <dd>iptables -A POSTROUTING -s
4659 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
4662 <p>Il <em>Masquerading</em> a differenza dello
4663 <em>SNAT</em> puro (<tt class=
4664 "docutils literal"><span class="pre">-j</span>
4665 <span class="pre">SNAT</span> <span class=
4666 "pre">--to-source</span> <span class=
4667 "pre">proprio_ip_pubblico</span> <span class=
4668 "pre">)</span> <span class="pre">legge</span>
4669 <span class="pre">l'indirizzo</span> <span class=
4670 "pre">ip</span> <span class="pre">del</span> <span class=
4671 "pre">device</span> <span class="pre">``ppp0</span></tt>.
4672 In questo modo se l'IP cambia automaticamente si aggiorna
4673 anche il source natting. Se avete un indirizzo IP statico
4674 assegnato al vostro gateway potete invece usare lo SNAT
4677 <dl class="docutils">
4678 <dt>Altri esempi::</dt>
4681 <p class="first">## Change source addresses to
4682 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
4683 SNAT --to 1.2.3.4</p>
4685 <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
4686 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
4687 SNAT --to 1.2.3.4-1.2.3.6</p>
4689 <p class="last">## Change source addresses to
4690 1.2.3.4, ports 1-1023 # iptables -t nat -A
4691 POSTROUTING -p tcp -o eth0 -j SNAT --to
4697 <div class="section" id="brute-force">
4698 <h3><a class="toc-backref" href=
4699 "#id106">9.10.3 Brute force</a></h3>
4701 <dl class="docutils">
4702 <dt>Per limitare attacchi di tipo brute force su
4706 <p class="first">iptables -A INPUT -i ppp0 -p tcp -m
4707 tcp --dport 22 -m state --state NEW -m recent
4708 --update --seconds 3000 --hitcount 4 --name DEFAULT
4709 --rsource -j DROP</p>
4711 <p class="last">iptables -A INPUT -i ppp0 -p tcp -m
4712 tcp --dport 22 -m state --state NEW -m recent --set
4713 --name DEFAULT --rsource</p>
4720 <div class="section" id="note">
4721 <h1><a class="toc-backref" href=
4722 "#id107">10 NOTE</a></h1>
4725 <li>controllare apache</li>
4728 <p>sintassi: in <tt class="docutils literal"><span class=
4729 "pre">monospace</span></tt> :</p>
4732 <li>nomi di files</li>