<!--
     The FreeBSD Italian Documentation Project
-->

<chapter id="bind">
  <title>Bind</title>

  <sect1 id="bind-intro">
    <title>Preambolo</title>

    <para>Il <emphasis>Domain Name System</emphasis> &egrave; un protocollo di
      rete a livello applicativo (Layer 7), &egrave; stato originariamente
      ideato per sostituire il file <filename>/etc/hosts</filename>, la
      <emphasis>host table</emphasis> &egrave; un semplice file di testo che
      associa gli indirizzi IP con i nomi di host e veniva utilizzata ai tempi
      di <emphasis>ARPANET</emphasis> ed ancora oggi costituisce il sistema
      primario di risoluzione dei nomi di host per le macchine &unix;.</para>

    <para>Il sistema del <emphasis>DNS</emphasis> viene comunemente utilizzato
      per tradurre i nomi host nei rispettivi indirizzi IP, si tratta di una
      applicazione originariamente composta da due componenti, una server e
      l'altra client.  La componente server &egrave; il
      <emphasis>Name Server</emphasis> ovvero il demone chiamato
      &man.named.8; mentre la componente client &egrave; il
      <emphasis>Resolver</emphasis>, il quale si occupa di formulare le query
      mentre il <emphasis>Name Server</emphasis> ha il compito di rispondere
      alle query, queste due componenti vengono solitamente incluse con le
      applicazioni che compongono lo stack TCP/IP dei sistemi operativi
      &unix;.</para>

    <para>Per certi versi il <emphasis>DNS</emphasis> pu&ograve; essere
      paragonato ad un grande database interrogabile pubblicamente, non si
      tratta di un sistema centralizzato perch&egrave; le informazioni sugli
      host vengono distribuite tra tutti gli altri sistemi DNS che, a loro
      volta, vengono organizzati in maniera gerarchica sullo stile dello
      &unix; filesystem.  Le query consentono di associare un indirizzo IP ad
      un determinato nome host, se si richiede dunque un nome di host
      appartenente ad un dato dominio, grazie al lavoro svolto dal
      <emphasis>Domain Name System</emphasis>, se ne ricava la relativa
      traduzione nel suo indirizzo IP.</para>

    <para>Il software che viene maggiormente utilizzato nei sistemi &unix; per
      svolgere il compito di <emphasis>Domain Name Server</emphasis> &egrave;
      ISC <application>Bind</application>, una implementazione del
      <emphasis>Domain Name System</emphasis>.  <application>Bind</application>
      &egrave; stato sviluppato nel 1984 e viene mantenuto dalla
      Internet Software Consorsium (<ulink
        url="http://www.isc.org/">http://www.isc.org/</ulink>) grazie al
      coordinamento operativo di Paul Vixie, l'ultima versione di Bind
      disponibile alla data odierna (Agosto '2003) &egrave; la 9.2.2.</para>

    <para><application>Bind</application> nella sua storia ha sempre sofferto,
      sopratutto nelle sue versioni 4 e 8, di diversi bugs che ne hanno minato
      pi&ugrave; di una volta la sicurezza.  Nel mese di Luglio del '96,
      Eugene Kashpureff &egrave; riuscito a dirottare il sito Web <ulink
        url="http://www.internic.net">Internic</ulink> sul sito Web <ulink
        url="http://www.alternic.net/">Alternic</ulink>, in conseguenza di
      questo dirottamento i visitatori del sito Internic sono stati inoltrati
      verso quello di Alternic.  Alla fine del '97, Kashpureff &egrave; stato
      arrestato in Canada e nel Marzo '98 &egrave; stato dichiarato colpevole
      di frode informatica.  Questo incidente probabilmente &egrave; servito a
      dimostrare l'importanza di un sistema DNS, l'impatto che pu&ograve;
      avere un'attacco di simile portata ad un sistema di risoluzione dei nomi
      pu&ograve; essere gravissimo.</para>
  </sect1>

  <sect1 id="bind-freebsd">
    <title>&os; e Bind</title>

    <para>Anche &os;, come molti altri sistemi operativi conformi alle
      specifiche &unix;, include una versione integrata di
      <application>Bind</application>, ad oggi &os; 4.9-STABLE viene fornito
      con la versione 8.3.7-REL, questa release naturalmente include tutte le
      patche relative alla sicurezza, dobbiamo anche dire che
      <application>Bind</application> viene automaticamente ricompilato ogni
      tal volta si esegue la rebuild del sistema operativo.  Per ricavare il
      tipo di versione utilizzata di <application>Bind</application> &egrave;
      sufficente interrogare il file <filename>/var/log/messages</filename>
      che viene generato dal syslog di sistema oppure si pu&ograve; anche
      utilizzare il comando <command>dig</command>.</para>

    <screen>&prompt.root; <userinput>dig @ns.mioserver.net version.bind txt chaos</userinput>
.
; DiG 8.3 @localhost version.bind txt chaos
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; -HEADER- opcode: QUERY, status: NOERROR, id: 27875
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUERY SECTION:
;;      version.bind, type = TXT, class = CHAOS
;; ANSWER SECTION:
VERSION.BIND.           0S CHAOS TXT    "8.3.7-REL"
;; Total query time: 0 msec
;; FROM: ns.merlinobbs.net to SERVER: 127.0.0.1
;; WHEN: Sat Dec 27 09:01:46 2003
;; MSG SIZE  sent: 30  rcvd: 77</screen>

    <para>&Egrave; molto importante saper riconoscere la versione di Bind
      installata nel proprio sistema.  Vi sono alcune organizzazioni che
      configurano Bind in modo tale da non fornire il numero di versione in
      produzione, questa prassi &egrave; giustificata dalla opinabile teoria
      che, oscurare le informazioni fornisca un livello di sicurezza pi&ugrave;
      alto.  In merito alla sicurezza sull'esecuzione del demone Bind
      dedicheremo successivamente un paragrafo.  Ritornando al nostro sistema
      &os;, nella directory <filename>/etc/namedb</filename> possiamo trovare
      tutti i files necessari alla configurazione del nostro Name Server
      <application>Bind</application>.</para>

    <screen>&prompt.root; <userinput>ls /etc/namedb/</userinput>
drwxr-xr-x   3 root  wheel   512 Aug 25 17:41 ./
drwxr-xr-x  16 root  wheel  2048 Aug  3 12:01 ../
-rw-r--r--   1 root  wheel   479 Jun  9 15:00 localhost.rev
-rw-r--r--   1 root  wheel  1032 Apr  3 10:55 make-localhost
-rw-r--r--   1 root  wheel   749 Jun  9 15:05 named.conf
-rw-r--r--   1 root  wheel  2583 Apr  3 10:55 named.root
-rw-r--r--   1 root  wheel  2583 Aug 25 10:55 named.root.new
-rw-r--r--   1 root  wheel   750 Apr  3 10:55 miodominio.org
-rw-r--r--   1 root  wheel   750 Apr  3 10.55 db.miodominio.org
drwxr-x---   2 bind  bind    512 Aug 21 22:24 s/</screen>

    <para>Prima di procedere con alcuni esempi e cercare di spiegare al
      lettore come configurare un name server &egrave; necessario distinguere
      alcuni tipi di Name Server, nel nostro caso utilizzeremo dei Name Server
      autoritativi, tra i quali possiamo elencare tre fra le tipologie
      pi&ugrave; importanti:</para>

    <orderedlist>
      <listitem>
        <para>il <emphasis>Master Name Server</emphasis> che &egrave; il server
          autoritativo ufficiale per i record di zona, i dati relativi alla
          zona vengono salvati nei files di configurazione della zona, nel
          passato questo tipo di server prendeva anche il nome di
          <emphasis>Primary Name Server</emphasis>;</para>
      </listitem>

      <listitem>
        <para>lo <emphasis>Slave Name Server</emphasis> &egrave; un server
          autoritativo per la propria zona che per&ograve; copia i record della
          zona principale direttamente da un <emphasis>Master Name
            Server</emphasis>, anche in questo caso i dati vengono salvati
          nei file di configurazione della zona, nel passato questo tipo di
          server prendeva anche il nome di <emphasis>Secondary Name
            Server</emphasis>;</para>
      </listitem>

      <listitem>
        <para>lo <emphasis>Stub Name Server</emphasis> &egrave; un server molto
          simile allo Slave che per&ograve; copia solo i dati relativi ai
          name server;</para>
      </listitem>

      <listitem>
        <para>il <emphasis>Caching-Only Name Server</emphasis> che ottiene
          le informazioni direttamente dagli altri Name Servers e le memorizza
          nella sua cache, questo tipo di Name Server viene utilizzato per
          rispondere a successive interrogazioni senza delegare agli altri
          sistemi sulla rete internet.</para>
      </listitem>
    </orderedlist>

    <para>I Name Server <emphasis>non autoritativi</emphasis> rispondono ad
      una interrogazione con le informazioni che sono memorizzate nella cache,
      solitamente si tratta di servers che non vengono configurati per gestire
      delle zone di autorit&agrave;, un Name Server ricorsivo effettua le
      interrogazioni sino a quando non ottiene una risposta o un errore,
      un Name Server non ricorsivo ci dirotta ad un'altro Name Server nel caso
      in cui non possa rispondere direttamente alla interrogazione.</para>

    <para>Ora possiamo analizzare dettagliatamente file principali che
      consentono di configurare Bind per divenire un <emphasis>Master Name
      Server</emphasis> e uno <emphasis>Slave Name Server</emphasis>.</para>
  </sect1>

  <sect1 id="bind-named.conf">
    <title><filename>named.conf</filename> (il file principale di
      configurazione)</title>

    <para><filename>/etc/namedb/named.conf</filename> &egrave; il principale
      file di configurazione di Bind e si compone di diverse sezioni, &os;
      in qualsiasi versione include un file di esempio dal quale partire.  Di
      seguito vediamo le sezioni principali che compongono questo file.</para>

    <orderedlist>
      <listitem>
        <para><emphasis>forwarders</emphasis> - si tratta dei server DNS ai
          quali far&agrave; riferimento diretto il nostro server Bind, i
          forwarders vengono comunemente utilizzati nelle piccole reti
          intranet;</para>
      </listitem>

      <listitem>
        <para><emphasis>query-source address</emphasis> - con questa opzione
          &egrave; possibile forzare il nostro server DNS a rimanere in ascolto
          su una porta specifica, questa opzione pu&ograve; essere utile nel
          caso si stia utilizzando un firewall;</para>
      </listitem>

      <listitem>
        <para><emphasis>zone </emphasis>- questa istruzione &egrave; il cuore
          del file <filename>named.conf</filename> in quanto indicano al name
          server su quali zone lo stesso ha autorit&agrave; diretta;</para>
      </listitem>

      <listitem>
        <para><emphasis>zone <quote>.</quote></emphasis> - questo tipo di
          istruzione viene utilizzata per caricare le zone relative ai
          top level domains, il file <filename>named.root</filename>, che
          viene generalmente richiamato da questo tipo di istruzione contiene
          le indicazioni per raggiungere tutti i root servers, vedremo poi
          in seguito come ricavare una versione aggiornata della lista dei
          top level domain name server;</para>
      </listitem>

      <listitem>
        <para><emphasis>zone <quote>0.0.127.in-addr.arp</quote></emphasis> -
          Questa zona viene utilizzata per il reverse DNS lookups ma a
          livello di host locale.</para>
      </listitem>

      <listitem>
        <para><emphasis>zone <quote>miodominio.org</quote></emphasis> - si
          tratta del nome del dominio locale, il file del dominio locale
          contiene tutte le specifiche relative alla zona di nostra competenza
          per la quale abbiamo autorit&agrave;, a queste informazioni faranno
          diretto riferimento gli altri server DNS per ottenere le informazioni
          relative al dominio miodominio.org, viene utilizzato anche per gli
          <emphasis>Slave Name Server</emphasis>.</para>
      </listitem>

      <listitem>
        <para><emphasis>zone 1.168.192.in-addr.arpa</emphasis> - Questa zone
          viene utilizzata per il reverse DNS lookups.  Con questo sistema
          &egrave; possibile risalire dall'indirizzo IP al nome dell'host, gli
          indirizzi in-addr.arpa sono gestiti dai possessori di sistemi autonomi
          (AS) che hanno autorit&agrave; in materia di assegnazione
          dell'indirizzamento, viene utilizzato anche per gli <emphasis>Slave
            Name Server</emphasis>.</para>
      </listitem>
    </orderedlist>

    <para>Il file di esempio sottostante &egrave; relativo ad un
      <emphasis>Master Name Server</emphasis> ed include anche alcune
      <emphasis>misure di sicurezza</emphasis> relativamente al possibile
      trasferimento del contenuto delle zone per le quali si &egrave; server di
      autorit&agrave;.  La direttiva <emphasis>allow-transfer</emphasis>
      infatti autorizza il trasferimento delle zone solo verso alcuni hosts
      mentre la direttiva <emphasis>notify no</emphasis> rende impossibile
      l'invio delle notizie di aggiornamento, per eseguire un trasferimento
      di zona <emphasis>Bind</emphasis> utilizza il protocollo TCP, per
      rispondere alle normali query <emphasis>Bind</emphasis> fa ricorso al
      protocollo UDP.  Nel file vengono incluse anche le direttive che ci
      consentono di configurare il nostro Name Server come <emphasis>Slave Name
        Server</emphasis>.</para>

    <programlisting><![CDATA[options {
]]><![CDATA[        directory "/etc/namedb";
]]><![CDATA[        forwarders {
]]><![CDATA[                212.17.192.49;
]]><![CDATA[                212.217.192.209;
]]><![CDATA[        };
]]><![CDATA[        query-source address * port 53;
]]><![CDATA[};
]]><![CDATA[//
]]><![CDATA[// root name server
]]><![CDATA[//
]]><![CDATA[zone "." {
]]><![CDATA[        type hint;
]]><![CDATA[        file "named.root";
]]><![CDATA[};
]]><![CDATA[//
]]><![CDATA[// Reverse mapping per localhost
]]><![CDATA[//
]]><![CDATA[zone "0.0.127.in-addr.arpa" {
]]><![CDATA[        type master;
]]><![CDATA[        file "localhost.rev";
]]><![CDATA[};
]]><![CDATA[//
]]><![CDATA[// Master Name Server
]]><![CDATA[//
]]><![CDATA[zone "miodominio.org" {
]]><![CDATA[        type master;
]]><![CDATA[        notify no;
]]><![CDATA[        allow-transfer {
]]><![CDATA[              192.168.0.1;
]]><![CDATA[              192.168.0.2;
]]><![CDATA[              192.168.0.3;
]]><![CDATA[              192.168.0.4;
]]><![CDATA[              192.168.0.254;
]]><![CDATA[          };
]]><![CDATA[        file "db.miodominio.org";
]]><![CDATA[};
]]><![CDATA[//
]]><![CDATA[// Reverse mapping
]]><![CDATA[//
]]><![CDATA[zone "0.168.192.in-addr.arpa" {
]]><![CDATA[        type master;
]]><![CDATA[        notify no;
]]><![CDATA[        allow-transfer {
]]><![CDATA[              192.168.0.1;
]]><![CDATA[              192.168.0.2;
]]><![CDATA[              192.168.0.3;
]]><![CDATA[              192.168.0.4;
]]><![CDATA[              192.168.0.254;
]]><![CDATA[          };
]]><![CDATA[        file "miodominio.org-reverse";
]]><![CDATA[};
]]><![CDATA[//
]]><![CDATA[// Slave Name Server
]]><![CDATA[//
]]><![CDATA[zone "pluto.net" {
]]><![CDATA[        type slave;
]]><![CDATA[        file "s/pluto.net.bak";
]]><![CDATA[        masters {
]]><![CDATA[                10.250.0.4;
]]><![CDATA[        };
]]><![CDATA[//
]]><![CDATA[// Reverse Mapping
]]><![CDATA[//
]]><![CDATA[};
]]><![CDATA[zone "250.10.in-addr.arpa" {
]]><![CDATA[        type slave;
]]><![CDATA[        file "s/250.10.in-addr.arpa.bak";
]]><![CDATA[        masters {
]]><![CDATA[                10.250.0.4;
]]><![CDATA[        };
]]><![CDATA[};
]]></programlisting>
  </sect1>

  <sect1 id="bind-named.root">
    <title><filename>named.root</filename> (DNS root servers)</title>

    <para>Il file contiene l'elenco dei <emphasis>root name servers</emphasis>
      mondiali e viene incluso con qualsiasi versione di &os;, chi gestisce un
      sistema DNS ha la necessit&agrave; di avere una lista sempre aggiornata
      dei <emphasis>root name servers</emphasis> mondiali, con il comando
      <command>dig</command> possiamo ricavare anche questo tipo di
      informazione.</para>

    <screen>&prompt.root; <userinput>cd /etc/namedb/</userinput></screen>

    <screen>&prompt.root; <userinput>dig @a.root-servers.net. . ns > named.root.new</userinput></screen>

    <para>Nel caso non dovesse ripondere a.root-servers.net utilizziamo il
      server DNS del nostro fornitore di accesso.</para>

    <para>Vediamo ora il contenuto di
      <filename>/etc/namedb/named.root.new</filename>.</para>

    <programlisting><![CDATA[; <<>> DiG 8.3 <<>> @a.root-servers.net. . ns
]]><![CDATA[; (1 server found)
]]><![CDATA[;; res options: init recurs defnam dnsrch
]]><![CDATA[;; got answer:
]]><![CDATA[;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
]]><![CDATA[;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
]]><![CDATA[;; QUERY SECTION:
]]><![CDATA[;;      ., type = NS, class = IN
]]><![CDATA[;; ANSWER SECTION:
]]><![CDATA[.                       6D IN NS        F.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        B.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        J.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        K.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        L.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        M.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        I.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        E.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        D.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        A.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        H.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        C.ROOT-SERVERS.NET.
]]><![CDATA[.                       6D IN NS        G.ROOT-SERVERS.NET.
]]><![CDATA[;; ADDITIONAL SECTION:
]]><![CDATA[F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241
]]><![CDATA[B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
]]><![CDATA[J.ROOT-SERVERS.NET.     5w6d16h IN A    192.58.128.30
]]><![CDATA[K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
]]><![CDATA[L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
]]><![CDATA[M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
]]><![CDATA[I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
]]><![CDATA[E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
]]><![CDATA[D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
]]><![CDATA[A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
]]><![CDATA[H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
]]><![CDATA[C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
]]><![CDATA[G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
]]><![CDATA[;; Total query time: 172 msec
]]><![CDATA[;; FROM: ns.merlinobbs.net to SERVER: a.root-servers.net.  198.41.0.4
]]><![CDATA[;; WHEN: Mon Aug 25 18:20:20 2003
]]><![CDATA[;; MSG SIZE  sent: 17  rcvd: 436
]]></programlisting>

    <para>Per avere a disposizione un'elenco sempre aggiornato dei
      <emphasis>root name servers</emphasis> mondiali, secondo il parere di
      chi scrive, pu&ograve; anche essere una buona idea realizzare uno script
      che port&agrave; successivamente essere inserito nelle procedure
      periodiche.</para>

    <programlisting># !/usr/local/bin/bash
#
# ricava il file per i root name server
# by djspider8
/usr/bin/dig @a.root-servers.net. . ns > /etc/namedb/named.root.new
#
# stoppa e riavvia named
/usr/sbin/ndc reload</programlisting>
  </sect1>

  <sect1 id="bind-localhost.rev">
    <title><filename>localhost.rev</filename> (risoluzione inversa per
      localhost)</title>

    <para>Come abbiamo accennato in precedenza si tratta del file che contiene
      le informazioni per la risoluzione inversa dei nomi ma solo relativamente
      al sistema locale (localhost), &os; include il file
      <filename>/etc/namedb/make-localhost</filename> che consente di generare
      automaticamente questo tipo di informazioni.</para>

    <screen>&prompt.root; <userinput>sh make-localhost</userinput></screen>

    <screen>&prompt.root; <userinput>ls localhost.rev</userinput>
-rw-r--r--  1 root  wheel  464 Aug 25 18:42 localhost.rev
[root@ns namedb]# more localhost.rev
..
;       From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the /etc/namedb directory.
;
$TTL    3600
@       IN      SOA     ns.miodominio.org. root.ns.miodominio.org.  (
                                2003082501      ; Serial
                                3600            ; Refresh
                                900             ; Retry
                                3600000         ; Expire
                                3600 )          ; Minimum
        IN      NS      ns.miodominio.org.
1       IN      PTR     localhost.ns.miodominio.org.</screen>
  </sect1>

  <sect1 id="bind-db.miodominio.org">
    <title><filename>db.miodominio.org</filename> (Zona di
      autorit&agrave;)</title>

    <para>Si tratta del file contenente tutte le informazioni relative al
      dominio per il quale abbiamo autorit&agrave;</para>

    <programlisting><![CDATA[$TTL 86400
]]><![CDATA[;
]]><![CDATA[miodominio.org. IN      SOA     ns.miodominio.org. admin.miodominio.org. (
]]><![CDATA[                2003250801      ; Serial (YYYYDDMM plus 2 digit serial)
]]><![CDATA[                86400           ; refresh (1 day)
]]><![CDATA[                7200            ; retry (2 hours)
]]><![CDATA[                8640000         ; expire (100 days)
]]><![CDATA[                86400)          ; minimum (1 day)
]]><![CDATA[;
]]><![CDATA[                IN      NS      ns.miodominio.org.
]]><![CDATA[                IN      MX      10 mail.example.org.
]]><![CDATA[;
]]><![CDATA[ns              IN      A       192.168.0.1
]]><![CDATA[mail            IN      A       192.168.0.4
]]><![CDATA[sun             IN      A       192.168.0.100
]]><![CDATA[pippo           IN      A       192.168.0.101
]]><![CDATA[paperino        IN      CNAME   pippo
]]></programlisting>
  </sect1>

  <sect1 id="bind-db.miodominio.org-reverse">
    <title><filename>db.miodominio.org-reverse</filename> (IN-ADDR.ARPA
      domain)</title>

    <para>Si tratta del file che esegue la risoluzione inversa dei nomi
      partendo dall'indirizzo IP, come abbiamo detto in precedenza, solo i
      gestori dei Sistemi Autonomi (AS) internet hanno la facolt&agrave; di
      assegnare agli indirizzi IP i nomi di host relativi.</para>

    <programlisting><![CDATA[$TTL 86400
]]><![CDATA[;
]]><![CDATA[@       IN      SOA     ns.miodominio.org. admin.miodominio.org. (
]]><![CDATA[                        2003250801      ; Serial (date, 2 digits version)
]]><![CDATA[                        86400           ; refresh (1 day)
]]><![CDATA[                        7200            ; retry (2 hours)
]]><![CDATA[                        8640000         ; expire (100 days)
]]><![CDATA[                        86400)          ; minimum (1 day)
]]><![CDATA[;
]]><![CDATA[1       IN      NS      ns.miodominio.org.
]]><![CDATA[100     IN      PTR     sun.miodominio.org.
]]><![CDATA[101     IN      PTR     pippo.miodominio.org.
]]></programlisting>

    <para><emphasis>in-addr.arpa</emphasis> &egrave; un nome di dominio
      speciale chiamato anche <emphasis>reverse domain</emphasis>, la mappa dei
      domini inversi associa agli indirizzi IP numerici i nomi di dominio,
      <emphasis>in-addr.arpa</emphasis> viene assegnato dai <emphasis>Regional
        Internet Registry</emphasis> agli ISP (Internet Service Provider) che
      possono gestire direttamente il blocco di indirizzi IP che ci &egrave;
      stato assegnato, possiamo ottenere la gestione diretta
      dell'<emphasis>in-addr.arpa</emphasis> solo grazie alla delega del nostro
      ISP.</para>
  </sect1>

  <sect1 id="bind-slave">
    <title>Files di configurazione degli <emphasis>Slave Name
      Server</emphasis></title>

    <para>Relativamente al contenuto dei file di configurazione degli
      <emphasis>Slave Name Server</emphasis> c'&egrave; da dire che gli stessi
      vengono prelevati direttamente da <emphasis>Bind</emphasis> che, grazie
      all'utility <command>/usr/libexec/named-xfer</command> che si occupa di
      contattare i <emphasis>Master Name Server</emphasis> per eseguire il
      trasferimento di zona.  La zona slave deve essere definita nel file
      <filename>named.conf</filename> ed il nostro name server deve essere
      autorizzato dal master ad eseguire il trasferimeno della zona.</para>
  </sect1>

  <sect1 id="bind-zone">
    <title>I campi utilizzati nei files di zona</title>

    <para>Nella compilazione dei file di zona abbiamo utilizzato alcuni tag
      che sono importantissimi per il funzionamento del server
      <emphasis>Bind</emphasis>, vediamo brevemente di cosa si tratta.</para>

    <itemizedlist>
      <listitem>
        <para><literal>$TTL</literal> - si tratta del tempo di vita di
          default del nostro file di dominio, il tag non &egrave; propriamente
          necessario per le versioni di Bind8 ma &egrave; fondamentale per
          Bind9, la direttiva, inserita all'inizio del file di zona imposta il
          tempo di vita (time to live) nel quale qualsiasi informazione
          viene mantenuta nella cache;</para>
      </listitem>

      <listitem>
        <para><literal>$ORIGIN</literal> - pu&ograve; essere utilizzato per
          modificare il nome della zona che viene definito nell'istruzione
          zone contenuta nel file <filename>named.conf</filename>;</para>
      </listitem>

      <listitem>
        <para><literal>SOA</literal> - (Start of Autority) definisce l'inizio
          di una zona DNS che ha autorit&agrave;, si tratta di un gruppo di
          record e di risorse contenute all'interno di uno spazio di nomi DNS,
          prende anche il nome di punto di delega.</para>
      </listitem>
    </itemizedlist>

    <programlisting><![CDATA[$TTL 86400
]]><![CDATA[@       IN      SOA     ns.miodominio.org. admin.ns.miodominio.org.
]]></programlisting>

    <para>Il simbolo <literal>@</literal> &egrave; una abbreviazione ed indica
      il nome di dominio definito nell'istruzione zone contenuta nel file
      <filename>named.conf</filename>, in questo esempio impostiamo un tempo
      di vita (<literal>$TTL</literal>) pari a 24 ore, la classe
      <emphasis>IN</emphasis> sta per internet, il tipo del record &egrave;
      SOA.</para>

    <itemizedlist>
      <listitem>
        <para><literal>Serial</literal> - si tratta del numero seriale per
          questa zona ed indica agli altri server DNS quando i dati relativi al
          dominio da noi gestito sono stati modificati, &egrave; molto
          importante la gestione del numero seriale sopratutto per i sistemi
          che operano sulla rete internet.</para>
      </listitem>

      <listitem>
        <para><literal>NS</literal> - questo record indica il name server di
          autorit&agrave; per una zona, delega per i sottodomini.</para>
      </listitem>

      <listitem>
        <para><literal>MX</literal> - il sistema di posta elettronica utilizza
          i record MX per instradare la posta in modo efficente, questo record
          indica il mail server (mail excharger) principale della zona e
          controlla l'instradamento dei messaggio di posta elettronica, viene
          preceduto da un numero (0...32767) il cui valore pi&ugrave; basso
          identifica il <emphasis>mail excharger</emphasis> con valore
          primario;</para>
      </listitem>

      <listitem>
        <para><literal>A</literal> - questo record &egrave; il cuore di un
          database DNS in quanto fornisce la corrispondenza tra i nomi di host
          e gli indirizzi IP che veniva all'epoca specificata nel file
          <filename>/etc/hosts</filename>;</para>
      </listitem>

      <listitem>
        <para><literal>CNAME</literal> - questo record assegna un nome
          aggiuntivo ad un host, in effetti si tratta di nome alias per il
          campo A e viene utilizzato per definire una funzione di un host
          (ftp, www....);</para>
      </listitem>

      <listitem>
        <para><literal>PTR</literal> - questo record (pointer) realizza la
          corrispondenza inversa in quanto mappa all'indirizzo IP il nome
          dell'host.</para>
      </listitem>
    </itemizedlist>

    <para>Ulteriori informazioni sui campi di un sistema DNS possono essere
      reperite nella pagina man di &man.named.8;.</para>
  </sect1>

  <sect1 id="bind-start">
    <title>Avviare <application>Bind</application></title>

    <para>Per avviare <application>Bind</application> automaticamente al boot
      del sistema &egrave; necessario modificare il file
      <filename>/etc/rc.conf</filename>.</para>

    <programlisting>named_enable="YES"</programlisting>

    <para>Per apportare eventuali modifiche ai files di configurazione
      potremo bloccare e riavviare il demone manualmente, le nuove versioni di
      <application>Bind</application> sono state dotate di una comoda
      interfaccia testuale chiamata &man.ndc.8; o &man.rndcontrol.8;.</para>

    <screen>&prompt.root; <userinput>ndc stop</userinput></screen>

    <screen>&prompt.root; <userinput>ndc start</userinput>
new pid is 70793</screen>

    <para><application>Bind</application> &egrave; un programma che utilizza la
      memoria in maniera piuttosto intensiva in quanto l'intero database degli
      host viene totalemente trattenuto nella memoria della macchina, il modo
      migliore per verificare se un sistema &egrave; in grado di eseguire
      <application>Bind</application> &egrave; tenere sotto costante controllo
      il processo &man.named.8;.</para>
  </sect1>

  <sect1 id="bind-security">
    <title>Bind e la sicurezza</title>

    <para>In tutte le versioni del ramo 4-STABLE di &os;, il demone
      <application>Bind</application> viene eseguito come processo
      dell'utente <username>root</username> (quindi con i massimi privilegi).
      Molti sono i danni che potrebbero essere arrecati al nostro sistema da
      possibili attacchi diretti verso il nostro Name Server, sopratutto se
      questo viene eseguito come processo dell'utente <username>root</username>.
      &Egrave; quindi una buona idea eseguire il demone
      <application>Bind</application> con i privilegi di un utente comune,
      tutte le versioni 5 di &os;, che sono ancora in fase di sviluppo,
      eseguono <application>Bind</application> come processo non
      privilegiato.</para>

    <para>In questo paragrafo descriviamo come procedere per rendere sicuro
      il demone <application>Bind</application> nelle versioni del ramo
      4-STABLE di &os;.</para>

    <para>Innanzitutto accertiamoci dell'esistenza dell'utente
      <username>bind</username> e del gruppo <groupname>bind</groupname>,
      successivamente sar&agrave; necessario modificare il file
      <filename>/etc/rc.conf</filename>.</para>

    <programlisting>named_enable="YES"
named_flags="-u bind -g bind"</programlisting>

    <para>Con questa modifica al file di override degli script di init di
      &os;, all'accensione della macchina, il demone
      <application>Bind</application> verr&agrave; automaticamente eseguito
      come processo di propriet&agrave; dell'utente <username>bind</username>
      al posto dell'utente <username>root</username>.</para>

    <para>Ora dobbiamo modificare il file
      <filename>/etc/namedb/named.conf</filename> e definire la directory dove
      verranno salvati i file <filename>.pid</filename> nonch&egrave; tutti i
      file di gestione generati dall'interfaccia &man.ndc.8;.</para>

    <programlisting><![CDATA[options {
]]><![CDATA[        directory "/etc/namedb";
]]><![CDATA[        pid-file "/var/run/named/named.pid";
]]><![CDATA[        query-source address * port 53;
]]><![CDATA[        dump-file "s/named.dump.db";
]]><![CDATA[        statistics-file "s/named.memstats";
]]><![CDATA[};
]]></programlisting>

    <para>Nel caso non dovesse esistere sar&agrave; necessario creare la
      directory <filename>/var/run/named</filename></para>

    <screen>&prompt.root; <userinput>mkdir /var/run/named</userinput></screen>

    <screen>&prompt.root; <userinput>chown bind:bind /var/run/named</userinput></screen>

    <screen>&prompt.root; <userinput>chmod 750 /var/run/named</userinput></screen>

    <para>Nel caso non dovesse esistere dovremmo creare la directory
      <filename>/etc/namedb/s</filename></para>

    <screen>&prompt.root; <userinput>mkdir /etc/namedb/s</userinput></screen>
    
    <screen>&prompt.root; <userinput>chown bind:bind /etc/namedb/s</userinput></screen>
        
    <screen>&prompt.root; <userinput>chmod 750 /etc/namedb/s</userinput></screen>

    <para>Per riavviare il demone con il nuovo utente <username>bind</username>
      sar&agrave; necessario stoppare il Name Server senza dimenticare il
      successivo riavvio con il suo nuovo proprietario (userID con il gruppo
      relativo)</para>

    <screen>&prompt.root; <userinput>ndc stop</userinput></screen>

    <screen>&prompt.root; <userinput>ndc start -u bind -g bind</userinput>
new pid is 617</screen>

    <para>Nella normale gestione che viene effettuata su una macchina in
      produzione, potremo eseguire il reload del demone
      <application>Bind</application> utilizzando sempre l'interfaccia di
      gestione &man.ndc.8;:</para>

    <screen>&prompt.root; <userinput>ndc reload</userinput>
Reload initiated.</screen>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "book" "chapter")
     End:
-->
