+ <p>Oppure potrebbe essere il nostro <em>PPP client</em>
+ (per la connessione ADSL) a intervenire sul file <tt class=
+ "docutils literal"><span class=
+ "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
+ <tt class="docutils literal"><span class=
+ "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
+ <tt class="docutils literal"><span class=
+ "pre">usepeerdns</span></tt>. Se la vostra connessione ad
+ internet e' ADSL raramente dovreste aver bisogno di
+ cambiare i DNS una volta impostati (a meno che non usiate
+ un portatile!).</p>
+ </div>
+ </div>
+
+ <div class="section" id="bind-dns-autoritativo">
+ <h1><a class="toc-backref" href=
+ "#id67">7 Bind : DNS Autoritativo</a></h1>
+
+ <p>Le soluzioni viste possono bastare per la rete locale o
+ per fare delle prove, ma prima o poi verra' il momento in cui
+ si e' chiamati a gestire dei domini su internet: lo standard
+ e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
+ versione 9.</p>
+
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+bind9
+</pre>
+
+ <div class="section" id="id5">
+ <h2><a class="toc-backref" href=
+ "#id68">7.1 DNS cache</a></h2>
+
+ <p>Bind appena installato funzionera' come DNS cache: si
+ faccia un test con un <tt class=
+ "docutils literal"><span class="pre">dig</span>
+ <span class="pre">@localhost</span></tt> . Bind a
+ differenza di Dnsmasq e' autonomo: non ha bisogno di
+ forwardare (inoltrare) le query a un DNS esterno: queste
+ verranno risolte direttamente da Bind partendo dai <em>DNS
+ root servers</em>.</p>
+
+ <p>E' comunque possibile impostare dei DNS forwarders,
+ tipicamente i DNS server forniti dal proprio provider, per
+ velocizzare le query:</p>
+
+ <p>/etc/bind/named.conf.options (riga 13):</p>
+ <pre class="literal-block">
+forwarders {
+ 10.10.208.254;
+ };
+</pre>
+
+ <p>Nel caso si voglia usare Bind solo come server DNS cache
+ per la propria LAN senza ospitare delle zone DNS pubbliche
+ sara' il caso di limitare gli accessi al server alla sola
+ LAN:</p>
+
+ <p>/etc/bind/named.conf.options (riga 19):</p>
+ <pre class="literal-block">
+// Se il proprio server ha IP 10.10.208.254
+// sulla rete LAN privata:
+listen-on { 10.10.208.254; }
+</pre>
+
+ <p>E non si lasci il server in ascolto su uno degli
+ eventuali indirizzi IP pubblici.</p>
+
+ <p>Se questo non fosse possibile si puo' sempre lavorare su
+ una <em>acl</em>:</p>
+
+ <p>/etc/bind/named.conf</p>
+ <pre class="literal-block">
+acl "localnet" {
+ 10.10.208.0/24 ; 127.0.0.0/8 ;
+ } ;
+</pre>
+
+ <p>Per poi aggiungere all'interno della stanza options la
+ direttiva che abilita' l'entita' <tt class=
+ "docutils literal"><span class=
+ "pre">localnet</span></tt>:</p>
+
+ <p>/etc/bind/named.conf.options</p>
+ <pre class="literal-block">
+allow-query {"localnet" ;} ;
+</pre>
+ </div>
+
+ <div class="section" id="ospitare-una-zona">
+ <h2><a class="toc-backref" href=
+ "#id69">7.2 Ospitare una zona</a></h2>
+
+ <p>Se avete acquistato un nome di dominio e vi serve un
+ software DNS per gestirlo Bind e' la scelta piu' diffusa.
+ Ora vedremo come configurare una <em>zona</em> (come
+ piffa.net) in modo che Bind sia autoritativoper questa,
+ rispondendo alle query DNS di tutta la rete internet.</p>
+
+ <div class="section" id="named-conf-local">
+ <h3><a class="toc-backref" href=
+ "#id70">7.2.1 named.conf.local</a></h3>
+
+ <p>Prima di tutti impostiamo il server bind per gestire
+ la zona, per non fare confusione e' opportuno inserire le
+ propie zone DNS nel file <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf.local</span></tt> e non in <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf</span></tt>.</p>
+
+ <p>named.conf.local:</p>
+ <pre class="literal-block">
+/
+// Do any local configuration here
+//
+
+// Consider adding the 1918 zones here, if they are not used in your
+// organization
+//include "/etc/bind/zones.rfc1918";
+
+zone "piffa.net" {
+ type master;
+ file "/etc/bind/pz/piffa.net";
+ }
+</pre>
+
+ <dl class="docutils">
+ <dt>type master</dt>
+
+ <dd>Il nostro server DNS sara' il principale, al quale
+ poi potremo affiancare dei DNS secondari nel caso
+ questo non sia disponibile.</dd>
+
+ <dt>file "/etc/bind/pz/piffa.net"</dt>
+
+ <dd>Dove verranno inserite le informazioni vere e
+ propie di questa zona.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="configurazione-della-zona">
+ <h3><a class="toc-backref" href=
+ "#id71">7.2.2 Configurazione della
+ zona</a></h3>
+
+ <p>Ora dovremo preparare il file contenente i record DNS
+ della zona <em>piffa.net</em>, come abbiamo indicato
+ prima questi saranno contenuti nel file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt> . Tenere le zone
+ dentro una sottocartella e' buona abitudine, usare
+ <tt class="docutils literal"><span class=
+ "pre">pz</span></tt> per queste e' una vecchia
+ abitudine.</p>
+
+ <p>piffa.net:</p>
+ <pre class="literal-block">
+; Zona per il dominio di secondo livello piffa.net
+
+$TTL 3D ; 3 days
+@ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
+ 200905245 ; serial
+ 8H ; refresh (8 hours)
+ 2H ; retry (2 hours)
+ 4W ; expire (4 weeks)
+ 1D ; minimum (1 day)
+ )
+;
+ NS ns1
+ NS ns2
+ A 94.23.63.105
+ MX 10 smtp
+ TXT "Piffanet main site"
+;
+ns1 A 94.23.63.105
+ns2 A 65.98.21.97
+zoo A 94.23.63.105
+smtp A 94.23.63.105
+test.piffa.net. A 94.23.63.105
+*.piffa.net. A 94.23.63.105 ; *catch all domain
+www CNAME zoo
+ftp CNAME zoo
+</pre>
+
+ <p>All'interno di questo file si possono inserire dei
+ commenti con il carattere <tt class=
+ "docutils literal"><span class="pre">;</span></tt>
+ (punto-e-virgola), si faccia attenzione alla rigida
+ sintassi: apertura e chiusura delle parentesi tonde nella
+ parte <tt class="docutils literal"><span class=
+ "pre">IN</span> <span class="pre">SOA</span></tt>, uso
+ del <tt class="docutils literal"><span class=
+ "pre">punto</span></tt> finale per precisare un nome di
+ dominio specifico (<em>FQDN</em>: Fully-qualified Domain
+ Name) come <tt class="docutils literal"><span class=
+ "pre">test.piffa.net.</span></tt> a differenza degli
+ altri domini di terzo livello come <tt class=
+ "docutils literal"><span class=
+ "pre">pop,imap,smtp</span></tt> .</p>
+
+ <p>La zona inizia con una direttiva <tt class=
+ "docutils literal"><span class="pre">$TTL</span>
+ <span class="pre">3D</span></tt> (RFC 2308) che indica la
+ durata (in questo caso tre giorni) che ogni record
+ dovrebbe avrebbe nella cache degli altri serber DNS.
+ Questo valore dovrebbe essere superiore a un giorno, se
+ non modificate spesso i valori dei vostri record DNS e'
+ consigliabile settarlo a 2/3 settimane in modo da
+ limitare la frequenza delle query al propio server.
+ Questo parametro puo' essere modificato per singoli
+ record:</p>
+ <pre class="literal-block">
+$TTL 3D ; 3 giorni: default se non specificato altrimenti
+rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
+lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
+normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
+</pre>
+
+ <p>Segue poi il nome della zona, indicato con la
+ <tt class="docutils literal"><span class=
+ "pre">@</span></tt> per richiamare la zona originale
+ precisata nel file <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf.options</span></tt> . Segue il campo
+ <tt class="docutils literal"><span class=
+ "pre">SOA</span></tt>.</p>
+
+ <div class="section" id="soa-start-of-authority-record">
+ <h4><a class="toc-backref" href=
+ "#id72">7.2.2.1 SOA: Start of
+ Authority Record</a></h4>
+
+ <p>Il record SOA puo' comparire solo una volta in una
+ zona, contiene informazioni relative all'autorita' del
+ server DNS.</p>
+
+ <dl class="docutils">
+ <dt>ns1.piffa.net. name-server</dt>
+
+ <dd>primary master DNS di questo dominio.</dd>
+
+ <dt>hostmaster.piffa.net. email-addr</dt>
+
+ <dd>email-addr: indirizzo email della persona
+ responsabile di questa zona, il primo punto viene
+ tradotto in una <em>chiocciola</em> <tt class=
+ "docutils literal"><span class="pre">@</span></tt>
+ dato che questo carattere ha un'altro utilizzo
+ all'interno di questo file. Il referente della zona
+ <strong>deve</strong> essere un email valido e
+ controllato, come consuetudine si usa <tt class=
+ "docutils literal"><span class=
+ "pre">hostmaster@dominio.tilde</span></tt> .</dd>
+
+ <dt>200905245 serial number</dt>
+
+ <dd>Questo valore serve per indicare quando e' stato
+ modificato questo file di configurazione, secondo il
+ formato <tt class="docutils literal"><span class=
+ "pre">yyyymmddss</span></tt>: <tt class=
+ "docutils literal"><span class="pre">yyyy</span></tt>
+ = anno, ''mm'' = mese, ''dd'' = giorno, ''ss'' =
+ seriale. Il seriale che deve essere sempre
+ specificato anche per una cifra, va incrementato di
+ una unita' nel caso vengano fatte piu' modifiche
+ <em>nello stesso giorno</em>.</dd>
+
+ <dt>8H refresh</dt>
+
+ <dd>Indica ai DNS secondari quanto tempo attendere
+ per cercare di aggiornare i loro dati con il DNS
+ master.</dd>
+
+ <dt>2H retry</dt>
+
+ <dd>Intervallo di tempo per il DNS slave (secondario)
+ da aspettare prima di cercare di ricontattare il
+ <em>master</em> in caso di problemi col
+ <em>refresh</em>.</dd>
+
+ <dt>4W expire</dt>
+
+ <dd>Indica quando i dati dei dns secondarinon sono
+ piu' autoritativi in caso di impossibilita' degli
+ <em>slaves</em> di ri-aggiornarsi con il
+ <em>master</em>. Consigliato un valore di 2/4
+ settimane.</dd>
+
+ <dt>1D minimum</dt>
+
+ <dd>Questo valore indicava il TTL fino alla versione
+ 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
+ durata del <em>negative caching</em>, quanto i
+ resolvers (ad esempio un server dns cache) puo'
+ mantenere un record <em>negativo</em> (che non indica
+ la corrispondenza tra un nome di dominio e un ip, ma
+ la non esistenza del record). Nell'uso per il
+ negative caching viene fissato un valore massimo di 3
+ ore dalla RFC 2308.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="altri-campi">
+ <h4><a class="toc-backref" href=
+ "#id73">7.2.2.2 Altri campi:</a></h4>
+
+ <p>All'interno della zona possono essere utilizati vari
+ tipi di records (RR):</p>
+
+ <dl class="docutils">
+ <dt>TXT</dt>
+
+ <dd>Informazioni testuali associate ad un record</dd>
+
+ <dt>NS</dt>
+
+ <dd>Name Server della zona. Non deve essere un
+ cname.</dd>
+
+ <dt>A</dt>
+
+ <dd>Indirizzo ipv4 da associare al record</dd>
+
+ <dt>AAA</dt>
+
+ <dd>Indirizzo ipv6 da associare al record</dd>
+
+ <dt>CNAME</dt>
+
+ <dd>Canonical Name: un alias per un host: ad esempio
+ per il dominio piffa.net possiamo settare degli alias
+ come <tt class="docutils literal"><span class=
+ "pre">www.piffa.net,</span> <span class=
+ "pre">http.piffa.net,</span> <span class=
+ "pre">virtual.piffa.net,</span> <span class=
+ "pre">ftp.piffa.net,</span> <span class=
+ "pre">imap.piffa.net</span></tt>. Comodo quando
+ diversi alias sono sempre riferiti allo stesso
+ ip.</dd>
+
+ <dt>MX</dt>
+
+ <dd>Mail Exchanger: server di posta che si occupera'
+ della posta elettronica per questo dominio.E'
+ opportuno avere almeno un server di posta di back-up,
+ per indicare la priorita' di un MX rispettoad un
+ altro si usa un valore di 2 cifre: il valore piu'
+ basso indica priorita' piu' bassa. Es: <tt class=
+ "docutils literal"><span class=
+ "pre">MX</span> <span class=
+ "pre">10</span> <span class=
+ "pre">smtp.piffa.net.</span></tt> per il server SMTP
+ principale e <tt class=
+ "docutils literal"><span class="pre">MX</span>
+ <span class="pre">40</span> <span class=
+ "pre">smtp2.piffa.net</span></tt> per il secondario.
+ Non deve essere un cname.</dd>
+
+ <dt>PTR</dt>
+
+ <dd>Reverse look-up, usato per la mappatura inversa
+ di un indirizzo ip a una stringa identificativa
+ dell'host. Si noti che per poter modificare questi
+ record si deve avere <em>in gestione</em> la <em>zona
+ IP</em>, se cosi' non fosse si dovra' chiedere al
+ propio provider la modifica di questo record per il
+ propio ip. Links: <a class="reference external" href=
+ "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
+ </dl>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="dns-slave">
+ <h2><a class="toc-backref" href=
+ "#id74">7.3 DNS slave</a></h2>
+
+ <p>Data l'importanza del servizio DNS e' necessario avere
+ ridondanza per i server DNS che ospitano i vostri dati: in
+ caso di indisponibilita' del server <em>master</em> (nel
+ caso fosse il solo a tenere i dati questo comporterebbe la
+ <em>scomparsa</em> di tutti i servizi / host da esso
+ seviti!) il client potrebbe contattare uno degli
+ <em>slave</em>.</p>
+
+ <p>Gli slave recuperano i dati dei recordos RR direttamente
+ dal master e non sara' quindi necessario dover mantenere
+ manualmente il file di configurazione della zona sugli
+ slaves, ogni volta che aggiorneremo il master questi dati
+ si propaghera' agli slaves automaticamente.</p>
+
+ <p>Per attivare uno <em>slave</em> per la nostra zona di
+ esempio <tt class="docutils literal"><span class=
+ "pre">piffa.net</span></tt> si inserisca nel file
+ <tt class="docutils literal"><span class=
+ "pre">named.conf.local</span></tt> dello slave server:</p>
+ <pre class="literal-block">
+zone "piffa.net" {
+ type slave;
+ file "/etc/bind/pz/piffa.net";
+ masters { 192.168.0.1; };
+ };
+</pre>
+
+ <p>Facendo ripartire Bind il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt> viene creato
+ automaticamente.</p>
+
+ <p>Segue un estratto di <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/syslog</span></tt> al <tt class=
+ "docutils literal"><span class="pre">restart</span></tt> di
+ <tt class="docutils literal"><span class=
+ "pre">bind9</span></tt> sullo slave:</p>
+ <pre class="literal-block">
+... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
+... slave named[2256]: running
+... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
+... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
+... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
+</pre>
+
+ <div class="warning">
+ <p class="first admonition-title">Avvertenza</p>
+
+ <p class="last">Bind9 (versione 9.3 presente in Debian
+ Lenny) richiede una esplicita autorizzazione alla
+ notifica per lo stesso server slave, che in fase di avvio
+ interroghera' (inviando un notify) se' stesso per
+ valutare se i dati relativi alla zona di cui e' slave
+ sono aggiornati. Si aggiunga quindi al file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/named.conf.options</span></tt> dello
+ slave: <tt class="docutils literal"><span class=
+ "pre">allow-notify</span> <span class="pre">{</span>
+ <span class="pre">192.168.0.1;</span> <span class=
+ "pre">};</span></tt> all'interno della stanza <tt class=
+ "docutils literal"><span class="pre">options</span></tt>,
+ in cui l'inidirizzo IP inserito e' quello dello stesso
+ slave server.</p>
+ </div>
+ </div>
+
+ <div class="section" id="aggiornamento-dinamico-nsupdate">
+ <h2><a class="toc-backref" href=
+ "#id75">7.4 Aggiornamento dinamico:
+ nsupdate</a></h2>
+
+ <p>Dalla versione 8 di Bind e' dsponibile l'utility
+ <tt class="docutils literal"><span class=
+ "pre">nsupdate</span></tt> (disponibile nel pacchetto
+ <tt class="docutils literal"><span class=
+ "pre">dnsutils</span></tt>) per aggiornare automaticamente
+ i record di una zona secondo il paradigma client / server (
+ RFC2136 ) . Posto che abbiate a disposizione un server DNS
+ Bind on-line su un indirizzo IP fisso e un zona da gestire
+ (che potrebbe essere anche solo la delega di un dominio di
+ terzo livello come <em>casa.miodominio.net</em>) sara'
+ possibile aggiornare automaticamente i record che tirano a
+ degli indirizzi IP <em>pubblici ma dnamici</em>, come
+ quelli spesso messi a disposizione dei provider per le
+ connessioni ad internet residenziali, in modo da poter
+ rendere sempre raggiungibile la vostra workstation a casa
+ anche dopo un aggiornamento dell'ip dinamico associato alla
+ connessione.</p>
+
+ <p>L'auenticazione del client nsupdate che avra' la
+ possibilita' di aggiornare il server DNS master avviene
+ tramite <em>Transaction signatures</em> (TSIG, RFC2845)
+ usando un algoritmo di criptazione dati asimmetrico
+ <em>HMAC-MD5</em> : generata una coppia di chiavi sul
+ client / nsupdate con l'utility si dovra' trasferire la
+ chiave pubblica sul server <em>master</em>, che verra'
+ configurato per onorare gli aggiornamenti (eliminazione e
+ inserimento di record RR) autenticati dalla chiave
+ privata.</p>
+
+ <div class="section" id="configurazione-client-nsupdate">
+ <h3><a class="toc-backref" href=
+ "#id76">7.4.1 Configurazione client
+ (nsupdate)</a></h3>
+
+ <p>Sul client, sul quale non deve essere necessariamente
+ installato un server DNS Bind ma la sola utility
+ <tt class="docutils literal"><span class=
+ "pre">nsupdate</span></tt>, generiamo la coppia di chiavi
+ con l'utility <tt class="docutils literal"><span class=
+ "pre">dnssec-keygen</span></tt> installabile tramite il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">bind9utils</span></tt>:</p>
+ <pre class="literal-block">
+dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
+</pre>
+
+ <p>Otterremo le due chiavi <tt class=
+ "docutils literal"><span class=
+ "pre">Khome.piffa.net.+157+04331.key</span>
+ <span class=
+ "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
+ chiave pubblica dovra' essere resa noto al server master
+ che ricevera' l'update dei records.</p>
+ </div>
+
+ <div class="section" id=
+ "configurazione-server-riconoscimento-chiave">
+ <h3><a class="toc-backref" href=
+ "#id77">7.4.2 Configurazione server:
+ riconoscimento chiave</a></h3>
+
+ <dl class="docutils">
+ <dt>Per rendere nota al server la chiave pubblica
+ generata sul client si aggiunga quindi al file
+ <tt class="docutils literal"><span class=
+ "pre">/etc/bind/named.conf</span></tt> sul
+ server::</dt>
+
+ <dd>
+ <dl class="first last docutils">
+ <dt>key home.piffa.net. {</dt>
+
+ <dd>algorithm HMAC-MD5; secret
+ "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
+ Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
+ </dl>
+ </dd>
+ </dl>
+
+ <div class="note">
+ <p class="first admonition-title">Nota</p>
+
+ <p class="last">La parte <tt class=
+ "docutils literal"><span class=
+ "pre">secret</span></tt>, che potete leggere
+ direttamente nel file *.key della chiave genearta, e'
+ scritto <em>tutto sulla stessa riga</em> senza ritorni
+ a capo.</p>
+ </div>
+ </div>
+
+ <div class="section" id="server-gestione-dell-intera-zona">
+ <h3><a class="toc-backref" href=
+ "#id78">7.4.3 Server: gestione
+ dell'intera zona</a></h3>
+
+ <p>Sul server modifichiamo il file di configurazione
+ <tt class="docutils literal"><span class=
+ "pre">named.conf.local</span></tt> della zona della quale
+ vogliamo concedere l'aggiornamento al client:</p>
+ <pre class="literal-block">
+zone "piffa.net" {
+ type master;
+ file "/etc/bind/pz/piffa.net" ;
+ allow-update {
+ key home.piffa.net;
+ };
+};
+</pre>
+
+ <dl class="docutils">
+ <dt>Sara' necessario assicurarsi che il demone di Bind
+ sia in grado di modificare il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt>: dato che
+ questo file ora sara' gestito da lui si proceda a
+ cedergli la propieta' del file::</dt>
+
+ <dd>chown bind /etc/bind/pz/piffa.net</dd>
+ </dl>
+
+ <p>Altro problema che si potrebbe porre: gli orologi di
+ sistema dei due host devono essere sincronizzati per
+ poter valutare l'opportunita' di un aggiornamento: si
+ consigla di installare su entrambi l'utility <tt class=
+ "docutils literal"><span class="pre">ntpdate</span></tt>
+ e di eseguirla facendo riferimento ai time server di
+ Debian:</p>
+ <pre class="literal-block">
+apt-get install ntpdate
+ntpdate-debian
+</pre>
+
+ <p>Ora possiamo provare dal client a effettuare
+ l'iserimento di un record per testarne il
+ funzionamento:</p>
+ <pre class="literal-block">
+# nsupdate -k Khome.piffa.net.+157+04331.private -v
+> server ns1.piffa.net
+> update add home.piffa.net. 86400 A 192.168.0.2
+> show
+Outgoing update query:
+;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
+;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
+;; UPDATE SECTION:
+home.piffa.net. 86400 IN A 192.168.0.1
+
+
+> send
+</pre>
+
+ <p>Per comprendere meglio l'uso dell'utility <tt class=
+ "docutils literal"><span class="pre">nsupdate</span></tt>
+ si consiglia la lettura della relativa pagina man. Nella
+ prima riga viene invocato il comando <tt class=
+ "docutils literal"><span class="pre">nsupdate</span></tt>
+ impostando col flag <tt class=
+ "docutils literal"><span class="pre">-k</span></tt> la
+ chiave privata generata precedentemente, con <tt class=
+ "docutils literal"><span class="pre">server</span></tt>
+ si imposta quale server NS autoritario della zona (che
+ abbiamo precedentemente configurato per ricevere gli
+ aggiornamenti) vogliamo contattare. Alla riga sucessiva
+ <tt class="docutils literal"><span class=
+ "pre">update</span></tt> viene aggiunto un record
+ <tt class="docutils literal"><span class=
+ "pre">A</span></tt> per la il dominio <tt class=
+ "docutils literal"><span class=
+ "pre">home.piffa.net</span></tt> indirizzato all'IP
+ <tt class="docutils literal"><span class=
+ "pre">192.168.0.2</span></tt>, poi <tt class=
+ "docutils literal"><span class="pre">show</span></tt>
+ mostra quanto ci si prepara a comunicare al server con il
+ finale <tt class="docutils literal"><span class=
+ "pre">send</span></tt> .</p>
+
+ <p>Si noti che in questo modo <em>l'intera zona</em>
+ piffa.net e suscettibile di essere modificata dal client,
+ che potra' eliminare e inserire qualunque record. E'
+ possibile gestire in modo piu' granulare la zona, ad
+ esempio concedendo al client i privilegi per gestire solo
+ una parte della zona o i tipo di record da gestire.</p>
+ </div>
+
+ <div class="section" id=
+ "automatizzare-l-aggiornamento-dinamico">
+ <h3><a class="toc-backref" href=
+ "#id79">7.4.4 Automatizzare
+ l'aggiornamento dinamico</a></h3>
+
+ <p>Nsupdate risulta comodo per tenere aggiornati i record
+ DNS degli host connessi ad internet con indirizzi IP
+ dinamici (pubblici) assegnati dal provider. Il client
+ deve essere in grado di contattare autonomamente il
+ server DNS per comunicare un cambiamento del suo ip.
+ Vediamo innanzi tutto un primo script per nsupdate:</p>
+ <pre class="literal-block">
+#!/bin/bash
+# Diamo al demone ppp un po' di tempo per negoziare la connessione
+# prima di leggere l'IP ottenuto
+sleep 15
+IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
+
+nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
+ server 192.168.0.254
+ zone home.piffa.net.
+ update delete home.piffa.net. A
+ update delete home.piffa.net. MX
+ update add home.piffa.net. 432000 A $IPADDR
+ update add home.piffa.net. 432000 MX 10 home.piffa.net.
+ show
+ send
+ EOF
+</pre>
+
+ <p>Questo script legge il valore del device di rete
+ <tt class="docutils literal"><span class=
+ "pre">ppp0</span></tt> creato dal <cite>pppoe</cite> di
+ una connessione ADSL per ottenere l'indirizzo IP ottenuto
+ dal provider (prima di farlo aspetta 15 secondi per dare
+ il tempo al <tt class="docutils literal"><span class=
+ "pre">pppoe</span></tt> di negoziare la
+ connessione).Vengono poi eliminati gli esistenti valori
+ <tt class="docutils literal"><span class=
+ "pre">A</span></tt> e <tt class=
+ "docutils literal"><span class="pre">MX</span></tt> per
+ <tt class="docutils literal"><span class=
+ "pre">home.piffa.net</span></tt> (si noti il punto finale
+ dopo <em>net</em>) e inseriti quelli attuali.</p>
+
+ <p>Resta da decidere quando richiamare questo script:
+ l'evento che causa l'assegnazione del nuovo IP in questo
+ caso e una nuova connessione <tt class=
+ "docutils literal"><span class="pre">pppoe</span></tt>,
+ quindi sarebbe consigliabile inserire lo script nelle
+ routine comprese in <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
+ documentazione di ppp), nel caso questo non desse i
+ risultati sperati (per problemi di connessione) come via
+ estrema si consideri di mettere lo script nella routine
+ del demone <tt class="docutils literal"><span class=
+ "pre">cron</span></tt> in modo che venga eseguito
+ periodicamente (ad esempio ogni giorno).</p>
+ </div>
+ </div>
+
+ <div class="section" id="link-suggeriti">
+ <h2><a class="toc-backref" href=
+ "#id80">7.5 Link suggeriti:</a></h2>
+
+ <ul class="simple">
+ <li>DNS for Rocket Scientists <a class=
+ "reference external" href=
+ "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
+
+ <li>DNS HOWTO <a class="reference external" href=
+ "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="section" id="samba">
+ <h1><a class="toc-backref" href=
+ "#id81">8 Samba</a></h1>
+
+ <p>Samba e' un progetto libero che fornisce servizi di
+ condivisione di file e stampanti a client SMB/CIFS.</p>
+
+ <p>Samba e' liberamente disponibile, al contrario di altre
+ implementazioni SMB/CIFS, e permette di ottenere
+ interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
+
+ <p>Samba e' un software che puo' girare su piattaforme che
+ non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
+ System 390, OpenVMS e altri sistemi operativi. Samba utilizza
+ il protocollo TCP/IP utilizzando i servizi offerti sul server
+ ospite. Quando correttamente configurato, permette di
+ interagire con client o server Microsoft Windows come se
+ fosse un file e print server Microsoft agendo da Primary
+ Domain Controller (PDC) o come Backup Domain Controller, puo'
+ inoltre prendere parte ad un dominio Active Directory.</p>
+
+ <div class="section" id="pacchetti">
+ <h2><a class="toc-backref" href=
+ "#id82">8.1 Pacchetti</a></h2>
+
+ <p>Pacchetti da installare per utilizzare Samba in
+ modalita' client <a class="footnote-reference" href="#id7"
+ id="id6" name="id6">[2]</a></p>
+ <pre class="literal-block">
+samba-client
+</pre>
+
+ <p>Pacchetti da installare per utilizzare Samba in
+ modalita' server:</p>
+ <pre class="literal-block">
+samba smbfs smbclient
+</pre>
+
+ <table class="docutils footnote" frame="void" id="id7"
+ rules="none">
+ <colgroup>
+ <col class="label">
+ <col>
+ </colgroup>
+
+ <tbody valign="top">
+ <tr>
+ <td class="label"><a class="fn-backref" href=
+ "#id6">[2]</a></td>
+
+ <td>Anche se nato per i sistemi Windows, Samba puo'
+ essere usato anche per montare cartelle sotto
+ GNU/Linux come alternativa a NFS. Per la condivisione
+ di stampanti sarebbe invece opportuno intervenire
+ direttamente su <tt class=
+ "docutils literal"><span class=
+ "pre">CUPS</span></tt>.</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>Durante la prima installazione viene chiesto il nome del
+ gruppo di appartenenza, il default per Windows e'
+ <tt class="docutils literal"><span class=
+ "pre">WORKGROUP</span></tt>. In aula usiamo invece
+ <tt class="docutils literal"><span class=
+ "pre">208</span></tt> .</p>
+
+ <p>Per riconfigurare Samba si usi il comando:</p>
+ <pre class="literal-block">
+dpkg-reconfigure samba-common
+</pre>
+ </div>
+
+ <div class="section" id="passwords-e-autenticazione">
+ <h2><a class="toc-backref" href=
+ "#id83">8.2 Passwords e
+ autenticazione</a></h2>
+
+ <p>Per poter configurare Samba in modo che usi un sistema
+ di negoziazione degli accessi alle cartelle condivise
+ basato su accoppiate <em>nome utente / password</em>
+ bisogna distinguere tra 3 livelli di password (e
+ generalmente volete usare <em>sempre la stessa
+ password</em> per ognuno di questi) e delle differenze tra
+ le modalita' di <em>autenticazione</em> (e quindi anche di
+ criptaggio delle passwords) usate da sistemi GNU/Linux e
+ Windows:</p>
+
+ <dl class="docutils">
+ <dt>1 Sistema *Unix ( GNU/Linux )</dt>
+
+ <dd>E' la password dell'<em>utente di sistema</em> che
+ viene usata sul sistema operativo su cui gira il software
+ Samba. E' importante tenere conto anche delle
+ <em>user-id</em> e <em>group-id</em> degli utenti che
+ dovranno fisicamente scrivere sui file system. Se un
+ utente non puo' scrivere in una certa posizione del file
+ system (ad esempio nella cartella <tt class=
+ "docutils literal"><span class=
+ "pre">/mnt/condivisione</span></tt> che sara' stata
+ necessariamente creata inizialmente dall'utente
+ <tt class="docutils literal"><span class=
+ "pre">root</span></tt>) per mancanza dei privilegi di
+ scrittura allora neanche Samba potra' farlo nel momento
+ in mette a disposizione la risorsa all'utente. Se si
+ montano file-system dedicati per le condivisioni
+ controllare i permessi e proprieta' dei <em>punti di
+ mount*</em>. Queste passwords sono salvate nel solito
+ file /etc/shadow (richiamato da /etc/passwd).</dd>
+
+ <dt>2 Password per l'applicativo Samba</dt>
+
+ <dd>Samba deve essere compatibile con Windows e quindi
+ utilizzare un sistema di criptazione delle password
+ diverso da /etc/shadow . Le password per Samba possono
+ essere gestite ad esempio col comando <tt class=
+ "docutils literal"><span class=
+ "pre">smbpasswd</span></tt> e vengono generalmente
+ salvate all'interno di <tt class=
+ "docutils literal"><span class=
+ "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
+
+ <dt>3 Password per Windows.</dt>
+
+ <dd>Gli utenti Windows effettuano il log-in alla partenza
+ della sessione di Windows. Se si avra' l'accortezza di
+ usare sempre la <em>stessa password</em> data
+ precedentemente anche a Windows (o viceversa impostare la
+ password per GNU/Linux / Samba uguale a quella di
+ Windows) l'utente potra' accedere automaticamente alle
+ condivisioni a lui disponibili.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="creazione-utenti">
+ <h2><a class="toc-backref" href=
+ "#id84">8.3 Creazione Utenti</a></h2>
+
+ <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
+ attenzione a <em>non dargli una shell di sistema</em>. Gli
+ utenti Windows che accedono al server solo per le
+ condivisioni non hanno bisogno di poter eseguire comandi
+ sul server!</p>
+
+ <p>Creazione di un utente denominato sambo:</p>
+ <pre class="literal-block">
+adduser --shell /bin/false sambo
+</pre>
+
+ <p>Nel file <tt class="docutils literal"><span class=
+ "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
+ <pre class="literal-block">
+sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
+</pre>
+
+ <p>Aggiunta dell'utente al database delle password per
+ Samba e generazione della sua password:</p>
+ <pre class="literal-block">
+smbpasswd -a sambo
+</pre>
+
+ <p>Se successivamente si vorra' modificare la password di
+ un utente gia' esistente si usi:</p>
+ <pre class="literal-block">
+smbpasswd sambo
+</pre>
+
+ <p>La password sotto Windows verra' modificata sul sistema
+ Windows.</p>
+ </div>
+
+ <div class="section" id="creare-la-condivisione">
+ <h2><a class="toc-backref" href=
+ "#id85">8.4 Creare la
+ condivisione</a></h2>
+
+ <p>La condivisione altro non e' che una cartella sul server
+ che viene resa disponibile ai client negoziando l'accesso
+ in base a una autenticazione basata su <em>user-name /
+ password</em>. E' per altro possibile permettere l'accesso
+ a una risorsa a chiunque indiscriminatamente (a tutti i
+ <tt class="docutils literal"><span class=
+ "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
+ punto di vista della sicurezza. Si decida se la cartella
+ condivisa debba risiedere nella <em>home</em> di un utente
+ (nel caso quest'ultimo ne sia l'unico fruitore) o in una
+ cartella in /mnt/ (nel caso piu' utenti accedano a questa).
+ Nel secondo caso si potranno gestire gli accessi sotto
+ GNU/Linux tramite i gruppi.</p>
+
+ <p>Creazione della risorsa sambo_share nella home
+ dell'utente sambo:</p>
+ <pre class="literal-block">
+# mkdir /home/sambo/sambo_share
+# chown sambo:sambo /home/sambo/sambo_share/
+</pre>
+
+ <div class="section" id=
+ "sicurezza-permessi-di-esecuzione-sul-server">
+ <h3><a class="toc-backref" href=
+ "#id86">8.4.1 Sicurezza: permessi di
+ esecuzione sul server</a></h3>
+
+ <p>Bisognerebbe notare sul server i permessi di
+ esecuzione del file-system che ospita la cartella da
+ condividere. Se i file che saranno contenuti nella
+ condivisione saranno da usarsi sotto Windows non c'e'
+ motivo che questi siano eseguibili sotto GNU/Linux. Si
+ potrebbe avere quindi, ipotizzando una condivisione in
+ <tt class="docutils literal"><span class=
+ "pre">/mnt/share</span></tt> che risieda su di un file
+ system dedicato:</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/fstab</span></tt></p>
+
+ <blockquote>
+ /dev/hda10 /mnt/share ext3 rw,
+ <strong>nosuid,noexec</strong> 0 3
+ </blockquote>
+
+ <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
+ possibilita' di eseguire programmi con credenziali
+ diverse.</p>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "configurazione-dell-applicativo-samba-vero-e-proprio">
+ <h2><a class="toc-backref" href=
+ "#id87">8.5 Configurazione
+ dell'applicativo Samba vero e proprio.</a></h2>
+
+ <p>Avendo preparato gli utenti (ancora una volta: non si
+ dia una shell completa a un utente che serve solo per Samba
+ o la posta elettronica) e la cartella sul file system si
+ puo' procedere a configurare la condivisione su Samba.</p>
+
+ <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
+ vim si usi 235gg ):</p>
+ <pre class="literal-block">
+[sambo_share]
+ # Percorso della cartella condivisa
+ path = /home/sambo/sambo_share
+ # Se gli utenti possono scrivere / modificare file
+ writable = yes
+ # Negoziazione degli accessi su base utenti / passwords
+ valid users = sambo
+
+ # #######################################
+ # Altri parametri opzionali di interesse
+ # Se posso vedere la condivisione da esplora risorse
+ # anche se non ho i privilegi per accedervi.
+ browseable = yes
+ # Commento indicativo della risorsa
+ comment = Condivisione per Sambo
+</pre>
+
+ <p>Dopo aver salvato il file si puo' fare un primo
+ controllo tramite l'utility <tt class=
+ "docutils literal"><span class="pre">testparm</span></tt> ,
+ che controlla la sintassi del file di configurazione di
+ Samba. Se questo non rileva problemi si puo' procedere a un
+ <tt class="docutils literal"><span class="pre">#</span>
+ <span class="pre">/etc/init.d/samba</span> <span class=
+ "pre">restart</span></tt> .</p>
+
+ <div class="section" id="creazione-di-un-gruppo">
+ <h3><a class="toc-backref" href=
+ "#id88">8.5.1 Creazione di un
+ gruppo</a></h3>
+
+ <p>Se si deve condividere una risorsa con un numero
+ consistente di utenti e' consigliabile lavorare in
+ termini termini di gruppi piuttosto che elencare la lista
+ degli utenti in <tt class="docutils literal"><span class=
+ "pre">valid</span> <span class=
+ "pre">users</span></tt>.</p>
+
+ <p>Dopo aver creato il gruppo del quale volete facciano
+ parte i vostri utenti (<tt class=
+ "docutils literal"><span class="pre">addgroup</span>
+ <span class="pre">nome_gruppo</span></tt>), inserite i
+ vostri utenti nel gruppo (<tt class=
+ "docutils literal"><span class="pre">adduser</span>
+ <span class="pre">nome_utente</span> <span class=
+ "pre">nome_gruppo</span></tt>) e modificate la direttiva
+ <tt class="docutils literal"><span class=
+ "pre">valid</span> <span class="pre">users</span></tt> in
+ <tt class="docutils literal"><span class=
+ "pre">smb.conf</span></tt> per riferirsi ad un gruppo
+ piuttosto che a degli utenti. Per riferirsi a un gruppo
+ si usi il carattere <tt class=
+ "docutils literal"><span class="pre">@</span>
+ <span class="pre">chicciola</span></tt> col <tt class=
+ "docutils literal"><span class=
+ "pre">nome_del_gruppo</span></tt>:</p>
+ <pre class="literal-block">
+# Negoziazione degli accessi su base gruppo
+valid users = @nome_gruppo
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="testare-il-servizio">
+ <h2><a class="toc-backref" href=
+ "#id89">8.6 Testare il Servizio</a></h2>
+
+ <p>Come testare il servizio</p>
+
+ <p>es:</p>
+ <pre class="literal-block">
+smbclient -U sambo -L localhost
+</pre>
+
+ <p>Questo comando permette di esplorare la risorsa
+ qualificandosi come utente, in questo modo potete testare
+ il corretto funzionamento dell'autenticazione. Si provi
+ inizialmente a sbagliare la password deliberatamente, poi a
+ inserirla correttamente: dovrebbero essere visibili le
+ risorse disponibili al solo utente sambo: la suo /home e la
+ cartella samba_share:</p>
+ <pre class="literal-block">
+Sharename Type Comment
+--------- ---- -------
+sambo_share Disk Condivisione per Sambo
+print$ Disk Printer Drivers
+IPC$ IPC IPC Service (base server)
+sambo Disk Home Directories
+</pre>
+
+ <p>In particolare l'ultima voce relativa alla home
+ directory dell'utente dovrebbe essere visibile solo agli
+ utenti autenticati.</p>
+
+ <p>In alternativa e' possibile montare realmente la
+ condivisone anche su GNU/Linux tramite un client per samba
+ e testarne il corretto funzionamento:</p>
+ <pre class="literal-block">
+mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="server-di-posta-postfix">
+ <h1><a class="toc-backref" href=
+ "#id90">9 Server di posta: Postfix</a></h1>
+
+ <p>Il server di posta che prenderemo in considerazione e'
+ Postfix, a seguire un estratto di un file di configurazione
+ <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
+ nelle <tt class="docutils literal"><span class=
+ "pre">/home</span></tt> degli utenti per la consegna della
+ posta:</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/postfix/main.cf</span></tt>:</p>
+ <pre class="literal-block">
+# ...segue dalla riga ~30
+myhostname = 162.piffa.net
+alias_maps = hash:/etc/aliases
+alias_database = hash:/etc/aliases
+myorigin = 162.piffa.net
+mydestination = 162.piffa.net, localhost
+# Se non avete un ip pubblico e statico, con un adeguato record PTR
+# dovrete usare un realy host per l'invio della posta
+relayhost = smtp.piffa.net
+
+mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
+# Se dovete inviare la posta per i client della vostra LAN privata:
+# mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
+# E si faccia BEN ATTENZIONE a non diventare un open realay smtp
+
+
+# Per effettuare lo storaggio della posta nelle home directory degli utenti
+# in una Maildir invece che nella Mailbox in /var/mail/nome_utente
+# si disabiliti procmail
+#mailbox_command = procmail -a "$EXTENSION"
+
+# cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
+# all'interno della home dell'utente:
+home_mailbox = Maildir/
+mailbox_size_limit = 0
+recipient_delimiter = +
+inet_interfaces = all
+</pre>
+
+ <dl class="docutils">
+ <dt>E' disponibile un file di configurazione di esempio ben
+ piu' articolato e commentato::</dt>
+
+ <dd>/usr/share/postfix/main.cf.dist .</dd>
+ </dl>
+
+ <div class="section" id="test-del-server-smtp">
+ <h2><a class="toc-backref" href=
+ "#id91">9.1 Test del server smtp</a></h2>
+
+ <p>Per testare il corretto funzionamento del server di
+ posta si puo' procedere in vari modi.</p>
+
+ <ul class="simple">
+ <li>Spedire una mail a una casella locale / remota e
+ controllare i log (syslog)</li>
+
+ <li>Collegarsi via <em>telnet</em> al server di posta:
+ <a class="reference external" href=
+ "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
+
+ <li>usare una utility come SWAKS</li>
+ </ul>
+
+ <div class="section" id="swaks">
+ <h3><a class="toc-backref" href=
+ "#id92">9.1.1 Swaks</a></h3>
+
+ <dl class="docutils">
+ <dt>Per gli utenti meno esperti e' consigliabile
+ utilizzare <em>SWAKS</em>: si installi l'omonimo
+ pacchetto e si esegua un test con::</dt>
+
+ <dd>swaks --to <a class="reference external" href=
+ "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
+ --from <a class="reference external" href=
+ "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
+ </dl>
+
+ <p>Ecco un esempio di una sessione corretta:</p>
+ <pre class="literal-block">
+swaks --to andrea@piffa.net from andrea@mydomain.com
+=== Trying smtp.piffa.net:25...
+=== Connected to smtp.piffa.net.
+<- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
+ -> EHLO alice.mydomain.com
+<- 250-zoo.piffa.net
+<- 250-PIPELINING
+<- 250-SIZE 10240000
+<- 250-VRFY
+<- 250-ETRN
+<- 250-STARTTLS
+<- 250-ENHANCEDSTATUSCODES
+<- 250-8BITMIME
+<- 250 DSN
+ -> MAIL FROM:<root@alice.mydomain.com>
+<- 250 2.1.0 Ok
+ -> RCPT TO:<andrea@piffa.net>
+<- 250 2.1.5 Ok
+ -> DATA
+<- 354 End data with <CR><LF>.<CR><LF>
+ -> Date: Thu, 28 May 2009 13:11:19 +0200
+ -> To: andrea@piffa.net
+ -> From: root@alice.mydomain.com
+ -> Subject: test Thu, 28 May 2009 13:11:19 +0200
+ -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
+ ->
+ -> This is a test mailing
+ ->
+ -> .
+<- 250 2.0.0 Ok: queued as 41FB261AFC
+ -> QUIT
+<- 221 2.0.0 Bye
+=== Connection closed with remote host.
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="imap-e-pop">
+ <h2><a class="toc-backref" href=
+ "#id93">9.2 Imap e pop</a></h2>
+
+ <p>Postfix e' un server SMTP, di conseguenza se volete che
+ i vostri utenti possano <em>scaricare</em> in locale la
+ posta generalmente volete mettere a loro disposizione un
+ server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
+
+ <dl class="docutils">
+ <dt>Pacchetti da installare</dt>
+
+ <dd>courier-imap courier-pop</dd>
+ </dl>
+
+ <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
+ funziona con le Mailbox in <tt class=
+ "docutils literal"><span class="pre">/var/mail/</span></tt>
+ .</p>
+ </div>
+
+ <div class="section" id="client-a-riga-di-comando">
+ <h2><a class="toc-backref" href=
+ "#id94">9.3 Client a riga di
+ comando</a></h2>
+
+ <p>Per testare il corretto funzionamento del server di
+ posta e' utile avere a disposizione delle utility per
+ inviare e leggere la posta: ovviamente da riga di
+ comando.</p>
+
+ <div class="section" id="mailx">
+ <h3><a class="toc-backref" href=
+ "#id95">9.3.1 mailx</a></h3>
+
+ <dl class="docutils">
+ <dt>Uno dei client piu' semplici, sopratutto per
+ inviare un messaggioi. e' sufficiente usare una formula
+ come::</dt>
+
+ <dd>mail <a class="reference external" href=
+ "mailto:utente@dominio.com">utente@dominio.com</a></dd>
+ </dl>
+
+ <p>Se il comando <tt class=
+ "docutils literal"><span class="pre">mail</span></tt> non
+ fosse disponibile si installi il pacchetto <tt class=
+ "docutils literal"><span class=
+ "pre">mailx</span></tt>.</p>
+
+ <p>Al primo prompt si digitera' l'oggetto, il testo del
+ messaggio (per terminare l'inserimento lasciare una riga
+ vuota, digitare un <tt class=
+ "docutils literal"><span class="pre">punto</span>
+ <span class="pre">+</span> <span class=
+ "pre">Invio</span></tt> su una riga vuota), la Carbon
+ Copy (se necessaria).</p>
+
+ <p>es:</p>
+ <pre class="literal-block">
+mail andrea@localhost
+Subject: Oggetto della mail
+Testo del messagio,
+per terminare il messaggio
+lasciare una riga vuota
+e un punto (poi Invio).
+
+.
+Cc:
+</pre>
+
+ <p>Per altrre opzioni si veda la pagina man.</p>
+ </div>
+
+ <div class="section" id="mutt">
+ <h3><a class="toc-backref" href=
+ "#id96">9.3.2 Mutt</a></h3>
+
+ <p>Mutt e' uno dei gestori di posta preferiti da chi
+ preferisce utilizzare l'interfaccia testuale per la
+ gestione della posta.</p>
+
+ <p>Mutt ha un file di configurazione <tt class=
+ "docutils literal"><span class="pre">.muttrc</span></tt>
+ nella <em>home</em> dell'utente, alcuni settaggi possono
+ essere utili:</p>
+
+ <dl class="docutils">
+ <dt>set folder="~/Maildir"</dt>
+
+ <dd>Per utilizzare <tt class=
+ "docutils literal"><span class=
+ "pre">/home/nome_utente/Maildir</span> <span class=
+ "pre">come</span> <span class=
+ "pre">mailbox</span></tt>, invece del default
+ <tt class="docutils literal"><span class=
+ "pre">/var/mail/nome_utente</span></tt>.</dd>
+
+ <dt>set editor="vim"</dt>
+
+ <dd>Utilizzare <tt class=
+ "docutils literal"><span class="pre">vim</span></tt>
+ come editor per comporre i messaggi.</dd>
+ </dl>
+
+ <p>Spesso e' utile poter <em>levvere al volo</em> la
+ Mailbox / Maildir di un utente sul server di posta, per
+ controllare se i messaggi vengono recapitati
+ correttamente:</p>
+ <pre class="literal-block">
+mutt -f /var/mail/utente
+mutt -f /home/utente/Maildir
+</pre>
+
+ <p>In modo analogo si puo' consultare al volo la propia
+ mailbox su un server remoto tramite IMAP/POP:</p>
+ <pre class="literal-block">
+mutt -f imap://nome_utente@piffa.net
+</pre>
+ </div>
+
+ <div class="section" id="web-client">
+ <h3><a class="toc-backref" href=
+ "#id97">9.3.3 Web client</a></h3>
+
+ <p>Per mettere a disposizione degli utenti un client web
+ per gestire la propria posta si installi il pacchetto:
+ <tt class="docutils literal"><span class=
+ "pre">squirrelmail</span></tt> . Ci sono tanti altri
+ client web disponibili: questo e' particolarmente
+ semplice. Naturalmente dovrete aver installato:
+ <tt class="docutils literal"><span class=
+ "pre">php5</span> <span class="pre">apache2</span></tt>
+ .</p>
+
+ <p>L'interfaccia dovrebbe essere disponibile all'url:
+ <tt class="docutils literal"><span class=
+ "pre">http://localhost/squirrelmail</span></tt> . Se
+ cosi' non fosse assicuratevi che Apache abbia incluso il
+ file di configurazione di squirrelmail:</p>
+ <pre class="literal-block">
+cd /etc/apache2/conf.d/
+ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="graylisting">
+ <h2><a class="toc-backref" href=
+ "#id98">9.4 Graylisting</a></h2>
+
+ <p>Il <em>graylisting</em> e' un sistema relativamente poco
+ invasivo, con un limitato consumo di risorse per limitare
+ lo <em>SPAM</em> in arrivo sul propio server di posta. Come
+ suggerisce il nome e' una via di mezzo tra una <em>white
+ list</em> (una lista di mittenti privilegiata, sempre
+ benvenuti) e una <em>black list</em> (mittenti
+ <em>bannati</em>, banditi dal poter inviare nuovi
+ messaggi).</p>
+
+ <p>Il funzionamento e' relativamente semplice: ogni
+ mittente sconosciuto viene immediatamente rifiutato con un
+ errore <em>non grave</em> come un <em>server non
+ disponibile, provare piu' tardi</em>. Questo inconveniente
+ non dovrebbe mettere in difficolta' un server di posta /
+ mittente legittimo, che dopo un periodo di attesa tentera'
+ nuovamente di inviare il messaggio ottenendo finalmente il
+ risultato atteso. Diversamente un <em>bot</em> per l'invio
+ di SPAM o un applicazione improvvisata (tipicamente di
+ derivazione virale) che stesse inviando il messaggio
+ <em>probabilmente</em> non insisterebbe, rinunciano ad
+ inviare il messaggio preferendo destinazioni meno
+ problematiche.</p>
+
+ <div class="section" id="abilitazione-in-postfix">
+ <h3><a class="toc-backref" href=
+ "#id99">9.4.1 Abilitazione in
+ Postfix</a></h3>
+
+ <p>Installare il pacchetto: <tt class=
+ "docutils literal"><span class="pre">postgrey</span></tt>
+ e aggiungere il file di configurazione di Postfix
+ <tt class="docutils literal"><span class=
+ "pre">/etc/postfix/main.cf</span></tt>:</p>
+ <pre class="literal-block">
+smtpd_recipient_restrictions =
+ permit_mynetworks,
+ reject_unauth_destination,
+ check_policy_service inet:127.0.0.1:60000
+</pre>
+ </div>
+
+ <div class="section" id="test">
+ <h3><a class="toc-backref" href=
+ "#id100">9.4.2 Test</a></h3>
+
+ <p>Inviando un messaggio il client dovrebbe ricevere un
+ iniziale messaggio di rifiuto del messaggio:</p>
+ <pre class="literal-block">
+swaks --to andrea@piffa.net from andrea@mydonain.com
+=== Trying smtp.piffa.net:25...
+=== Connected to smtp.piffa.net
+...
+<- 250 2.1.0 Ok
+ -> RCPT TO:<andrea@piffa.net>
+<** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
+Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
+ -> QUIT
+<- 221 2.0.0 Bye
+=== Connection closed with remote host.
+</pre>
+
+ <p>A lato server si dovrebbe rilevare su <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/syslog</span></tt> qualcosa di simile:</p>
+ <pre class="literal-block">
+connect from alice.mydomain.com[65.98.21.97]
+May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
+ client_name=alice.mydomain.com,
+ client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
+May 28 14:53:34 r24266 postfix/smtpd[22538]:
+ NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
+ 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
+ see http://postgrey.schweikert.ch/help/piffa.net.html;
+ from=<root@alice.mydomain.com> to=<andrea@piffa.net>
+ proto=ESMTP helo=<alice.mydomain.com>
+May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
+</pre>
+ </div>
+
+ <div class="section" id="statistiche">
+ <h3><a class="toc-backref" href=
+ "#id101">9.4.3 Statistiche</a></h3>
+
+ <p>E' sempre utile poter tracciare qualche statistica
+ sulle percentuali di messaggi ricevuti, da chi, messaggi
+ rifiutati (e per quale motivo). Statistiche che attingono
+ dai soliti log del server di posta <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/syslog</span></tt> di default oltre che i
+ dedicati <tt class="docutils literal"><span class=
+ "pre">/var/log/mail</span></tt> .</p>
+
+ <p>Una utility semplice per analizzare l'attivita' del
+ propio server smtp potrebbe essere <tt class=
+ "docutils literal"><span class=
+ "pre">pflogsumm</span></tt> , installato il pacchetto la
+ si puo' invocare con:</p>
+ <pre class="literal-block">
+pflogsumm.pl /var/log/mail.log
+</pre>
+
+ <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/mail.log.0</span></tt></p>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="firewall">
+ <h1><a class="toc-backref" href=
+ "#id102">10 Firewall</a></h1>
+
+ <p>In Informatica, nell'ambito delle reti di computer, un
+ firewall (termine inglese dal significato originario di
+ parete refrattaria, muro tagliafuoco, muro ignifugo; in
+ italiano anche parafuoco o parafiamma) e' un componente
+ passivo di difesa perimetrale che puo anche svolgere funzioni
+ di collegamento tra due o piu' tronconi di rete. Usualmente
+ la rete viene divisa in due sotto reti: una, detta esterna,
+ comprende l'intera Internet mentre l'altra interna, detta LAN
+ (Local Area Network), comprende una sezione piu' o meno
+ grande di un insieme di computer locali. In alcuni casi e'
+ possibile che si crei l'esigenza di creare una terza sotto
+ rete detta DMZ (o zona demilitarizzata) atta a contenere quei
+ sistemi che devono essere isolati dalla rete interna ma
+ devono comunque essere protetti dal firewall.</p>
+
+ <p>Una prima definizione chiusa di firewall e' la
+ seguente:</p>
+
+ <p>Apparato di rete hardware o software che filtra tutti i
+ pacchetti entranti ed uscenti, da e verso una rete o un
+ computer, applicando regole che contribuiscono alla sicurezza
+ della stessa.</p>
+
+ <p>In realta' un firewall puo' essere realizzato con un
+ normale computer (con almeno due schede di rete e software
+ apposito), puo' essere una funzione inclusa in un router o
+ puo' essere un apparato specializzato. Esistono inoltre i
+ cosiddetti "firewall personali", che sono programmi
+ installati sui normali calcolatori, che filtrano solamente i
+ pacchetti che entrano ed escono da quel calcolatore; in tal
+ caso viene utilizzata una sola scheda di rete.</p>
+
+ <p>La funzionalita' principale in sostanza e' quella di
+ creare un filtro sulle connessioni entranti ed uscenti, in
+ questo modo il dispositivo innalza il livello di sicurezza
+ della rete e permette sia agli utenti interni che a quelli
+ esterni di operare nel massimo della sicurezza. Il firewall
+ agisce sui pacchetti in transito da e per la zona interna
+ potendo eseguire su di essi operazioni di: controllo modifica
+ monitoraggio</p>
+
+ <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
+ IP per leggere le informazioni presenti sul suo header, e in
+ alcuni casi anche di effettuare verifiche sul contenuto del
+ pacchetto.</p>
+
+ <div class="section" id="links">
+ <h2><a class="toc-backref" href=
+ "#id103">10.1 Links</a></h2>
+
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
+
+ <li><a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></li>
+ </ul>
+ </div>
+
+ <div class="section" id="ipfilter">
+ <h2><a class="toc-backref" href=
+ "#id104">10.2 Ipfilter</a></h2>
+
+ <p>Link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
+
+ <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
+ po' del 3) e su cosa <em>non</em> lavora (livello 4).
+ Netfilter lavora anche su parti del livello 3 (TCP, UDP,
+ etc) e del livello 1 (MAC source address). Iptables
+ comunque permette di fare il <em>connection-tracking</em>,
+ mediante il quale possiamo implementare il Network Address
+ Translation.</p>
+
+ <p>Netfilter non ricostruisce il flusso di dati tra
+ pacchetti, non puo' quindi rilevare la presenza di virus o
+ simili che si trasmettono su pacchetti separati:
+ ricomporre, analizzare e tornare a scomporre i frammenti
+ richiederebbe troppa RAM e risorse di sistema, con il
+ conseguente rischio di saturare il firewall fino
+ all'abbandono dei nuovi pacchetti in transito. Ci sono
+ altri software piu' adatti a questi compiti, ad esempio un
+ proxy HTTP come Squid che e' appunto una applicazione di
+ quarto livello, progettata e strutturata per analizzare e
+ modificare i flussi di dati (il <em>contenuto</em> dei
+ pacchetti, non le sole <em>intestazioni</em>) facendo
+ abbondate uso delle risorse RAM e di calcolo del sistema.
+ Non a caso su macchine embedded dalle prestazioni molto
+ ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
+ massimo le risorse di sistema per gestire il traffico di
+ una rete 10/100, mentre il lavoro tipico svolto da
+ netfilter e' quasi irrilevante.</p>
+ </div>
+
+ <div class="section" id="progettazione-di-un-firewall">
+ <h2><a class="toc-backref" href=
+ "#id105">10.3 Progettazione di un
+ firewall</a></h2>
+
+ <p>Per implementare un firewall bisogna decidere un aio di
+ cose: la collocazione e l'approccio (inclusivo o esclusivo)
+ al filtraggio, il tipo di hardware.</p>
+
+ <div class="section" id="collocazione">
+ <h3><a class="toc-backref" href=
+ "#id106">10.3.1 Collocazione</a></h3>
+
+ <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
+ della rete, decidere se diversi reparti di una azienda si
+ possano vedere tra loro e in che misura.</p>
+
+ <p>Collocazione:</p>
+
+ <blockquote>
+ <ol class="arabic simple">
+ <li>sul router</li>
+
+ <li>tra router e servers / LAN</li>
+
+ <li>Unico server / router / firewall e connessi
+ rischi. considerare l'acquisto di un router hardware
+ dedicato.</li>
+ </ol>
+ </blockquote>
+
+ <dl class="docutils">
+ <dt>Layeed security:</dt>
+
+ <dd>Implementare piu' device / software sui diversi
+ livelli: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
+ </dl>
+ </div>
+
+ <div class="section" id="policy-di-default">
+ <h3><a class="toc-backref" href=
+ "#id107">10.3.2 Policy di
+ default</a></h3>
+
+ <p>Drop o Accept: conseguenze per sicurezza, facilita' di
+ gestione.</p>
+ </div>
+
+ <div class="section" id="hardware">
+ <h3><a class="toc-backref" href=
+ "#id108">10.3.3 Hardware</a></h3>
+
+ <p>Sostanzialmente potremmo distinguere due tipologie di
+ hardware:</p>
+
+ <dl class="docutils">
+ <dt>Network appliance dedicata::</dt>
+
+ <dd>Un dispositivo hardware dedicato alla funzione di
+ Firewall, ad es un Cisco / Fortigate. Si noti che molti
+ firewall economici altro non sono che Linux box molto
+ striminzite.</dd>
+
+ <dt>Server / Personal computer:</dt>
+
+ <dd>Un server sul quale viene fatto girare Netfilter ad
+ uso del server stesso e della rete connessa.</dd>
+ </dl>
+
+ <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
+ flessibilita', strumenti di gestione, sicurezza,
+ OpenBSD.</p>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "percorso-dei-pacchetti-tra-tabelle-e-catene">
+ <h2><a class="toc-backref" href=
+ "#id109">10.4 Percorso dei pacchetti tra
+ tabelle e catene</a></h2>
+
+ <p>link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</a></p>
+ </div>
+
+ <div class="section" id="concetti-di-base">
+ <h2><a class="toc-backref" href=
+ "#id110">10.5 Concetti di base</a></h2>
+
+ <div class="section" id="tabelle-catene-regole">
+ <h3><a class="toc-backref" href=
+ "#id111">10.5.1 Tabelle, catene,
+ regole</a></h3>
+
+ <p>Iptables lavora su 3 tabelle (tables) di default:</p>
+
+ <ul class="simple">
+ <li>filter - Regola il firewalling: quali pacchetti
+ accettare, quali bloccare</li>
+
+ <li>nat - Regola le attivita' di natting</li>
+
+ <li>mangle - Interviene sulla alterazione dei
+ pacchetti.</li>
+ </ul>
+
+ <p>Ogni tabella ha delle catene (chains) predefinite
+ (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
+ aggiunte catene custom. Ogni catena e' composta da un
+ elenco di regole (rules) che identificano pacchetti di
+ rete secondo criteri diversi (es: -p tcp --dport 80 -d
+ 10.0.0.45) Ogni regola termina con una indicazione
+ (target) su cosa fare dei pacchetti identificati dalla
+ regola stessa (es: -j ACCEPT, -j DROP ...)</p>
+ </div>
+
+ <div class="section" id="match">
+ <h3><a class="toc-backref" href=
+ "#id112">10.5.2 Match</a></h3>
+
+ <p>I Match di una regola (rule) servono a testare un
+ pacchetto per valutare se corrisponda a certe
+ caratteristiche. I match di possono servire a controllare
+ se un pacchetto e' destinato a una porta particolare o
+ utilizza un protocollo particolare.</p>
+
+ <p>Alcuni esempi:</p>
+
+ <dl class="docutils">
+ <dt>-p [!] proto</dt>
+
+ <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
+ udp, gre, ah...)</dd>
+
+ <dt>-s [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP sorgente (o network con maschera di
+ sotto rete)</dd>
+
+ <dt>-d [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP destinazione (o network)</dd>
+
+ <dt>-i [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
+
+ <dt>-o [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
+ </dl>
+
+ <table class="docutils option-list" frame="void" rules=
+ "none">
+ <col class="option">
+ <col class="description">
+
+ <tbody valign="top">
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-f</span></kbd></td>