Featured Posts

:: syscallme :: Rss

Bind9 in chroot su Centos 5.4

Posted on : 25-10-2009 | By : daniele | In : Experience, Linux, Medium

Tags: , , , ,

0

Sono in serie positiva, altro giro altra corsa, altro post altro how-to. In queste (poche) righe che seguono, vedremo come installare e configurare un dominio sul popolare DNS Server Bind9 ospitato su una Centos 5.4 (latest release ad oggi) in chroot mode.

L’environment scelto, come detto, è una Centos, ma (a parte i posizionamenti dei files e delle directory che può cambiare, la configurazione di Bind9 è piuttosto generica e quindi, la guida, può essere “traslata” facilmente anche su sistemi “debian-based”.


Non è questo il luogo dove illustreremo le peculiarità e i vantaggi in termini di sicurezza che stanno dietro alla scelta di installare e configurare in modo che sia startato dal sistema in chroot. Googlando un po’ troverete molte guide e manuali che vi possono spiegare tutto ciò.

Come primo passo installeremo i pacchetti necessari utilizzando yum

yum install bind bind-chroot bind-libs bind-utils caching-nameserver

Ad installazione conclusa spostiamoci nella directory /var/named/chroot/etc e cominciamo le configurazioni

cd /var/named/chroot/etc
rndc-confgen > rndc.key
chown root:named rndc.key

Controllate che il file rndc.key appaia così:

# Start of rndc.conf
key "rndckey" {
algorithm hmac-md5;
secret "n0nV8Jd1nbAby8m3yJMmUw==";
};

Non vi occorre nient’altro, quindi potete anche rimuovere le altre righe che troverete nel file.
Date un’occhiata all’interno di /etc: dovreste avere un symlink all’rndc.key. E’ importante che questo symlink esista e dovrebbe essere correttamente creato da yum durante la fase di spacchettamento dell’rpm. Se, tuttavia, così non fosse preoccupatevi di crearlo, perchè poi il demone named si aspetta di trovarlo lì…è bene che non lo deludiate.

Ora configuriamo il file named.conf

// qui includiamo l'rndc.key con un bel copia-incolla
key "rndckey" {
    algorithm hmac-md5;
    secret "n0nV8Jd1nbAby8m3yJMmUw==";
};

// assumiamo che il nostro dns server abbia l'ip 192.168.13.75
// e serva la subnet 192.168.13.0/24. Ovviamente customizzate in
// base alle vostre esigenze
controls {
    inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndckey"; };
    inet 192.168.13.75 allow { 192.168.13.0/24; } keys { "rndckey"; };
};

options {
    directory "/var/named";
    pid-file "/var/run/named/named.pid";

    recursion yes;

    allow-recursion {
        127.0.0.1;
        192.168.13.0/24;
    };

    // inserite i vostri dns server.
    // Io ho messo quelli di OpenDns
    forwarders {
        208.67.222.222;
        208.67.220.220;
    };

    listen-on {
        127.0.0.1;
        192.168.13.75;
    };

    /*
     * Se avete un firewall fra voi e i nameservers  
     * che dovete contattare potreste aver bisogno
     * di scommentare la direttiva query-source che
     * trovate qui sotto.  Versioni precedenti di Bind
     * facevano sempre query attraverso la porta 53,
     * ma da BIND 8.1 viene utilizzata una porta
     * non privilegiata (sopra la 1024) di default.
     */

     query-source address * port 53;

    // questa istruzione è per non rendere pubblica
    // la versione di bind utilizzata
    version "REFUSED";

    allow-query {
        127.0.0.1;
        192.168.13.0/24;
    };
};

server 192.168.13.75 {
    keys { rndckey; };
};

zone "." IN {
    type hint;
    file "named.ca";
};

// Questa è la zona del nostro dominio
zone "example.com" IN {
    type master;
    file "data/example.com.zone";
    allow-update { none; };
    // per abilitare il master/slave scommenta sotto
    // allow-transfer { 192.168.13.76; };
};

Ok: ora configuriamo la nostra zona. Per farlo creiamo il file /var/named/chroot/var/named/data/example.com.zone. Sarà qualcosa che appare più o meno così:

$ttl 38400
example.com.    IN    SOA     ns.example.com. admin.example.com. (
                         2009102402    ; Serial
                         10800         ; Refresh after 3 hours
                         3600          ; Retry after 1 hour
                         604800        ; Expire after 1 week
                         86400 )       ; Minimum TTL of 1 day

example.com.              IN      NS             ns.example.com.
ns.example.com.           IN      A               192.168.13.75
dns.example.com.          IN      A               192.168.13.75
server1.example.com.      IN      A               192.168.13.31
server2.example.com.      IN      A               192.168.13.38
www.example.com.          IN      CNAME          example.com.

Ovviamente la parte in fondo customizzatela a secondo dei record che volete propagare.
Ok abbiamo finito. Come avete visto è veramente semplice. Ora startiamo named e assicuriamoci che parta al boot

service named start
chkconfig named on

E ora controlliamo che tutto sia startato correttamente dando un colpetto di “rndc status”

# rndc status
number of zones: 1
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running

Ok è tutto “folks!”. Per essere sicuri che tutto funziona fate qualche query con nslookup o con dig, sia dal server dns che dagli altri server.

Write a comment