Guida a BIND in Gentoo
1.
Introduzione
Questo tutorial spiega come installare e configurare BIND, il server DNS più
utilizzato su internet. bind verrà configurato per il proprio dominio
utilizzando configurazioni differenti, una per la propria rete locale ed una
per il resto del mondo. Per fare questo verranno utilizzate le viste. Una per la
zona interna (la propria rete locale) ed un'altra per la zona esterna (il resto
del mondo).
2.
Dati utilizzati nell'esempio
| Keyword |
Spiegazione |
Esempio |
| DOMINIO |
Il proprio nome dominio |
gentoo.org |
| INDIRIZZO_IP |
L'indirizzo ip pubblico assegnato dall'ISP |
204.74.99.100 |
| IP_LOCALE |
L'indirizzo ip locale |
192.168.1.5 |
| RETE_LOCALE |
La propria rete locale |
192.168.1.0/24 |
| SERVER_DNS_SLAVE |
L'indirizzo ip del server DNS slave per il proprio dominio. |
209.177.148.228 |
| ADMIN |
Il nome dell'amministratore del server DNS. |
root |
| MODIFICA |
La data di modifica del file di zona, con l'aggiunta di un numero |
2009062901 |
Figura 2.1: Esempio di rete |
 |
3.
Configurazione di BIND
Installazione
Per prima cosa, installare net-dns/bind.
Codice 3.1: Installazione di bind |
# emerge net-dns/bind
|
Configurazione di /etc/bind/named.conf
La prima cosa da configurare è il file /etc/bind/named.conf. La
prima parte di questo passo consiste nello specificare la directory radice di
bind, la porta di ascolto con gli indirizzi IP, il file pid, ed una riga
relativa al protocollo ipv6.
Codice 3.2: Sezione options |
options {
directory "/var/bind";
listen-on-v6 { none; };
listen-on port 53 { 127.0.0.1; IP_LOCALE; };
pid-file "/var/run/named/named.pid";
};
|
La seconda parte di named.conf è la vista interna utilizzata per
la propria rete locale.
Codice 3.3: Vista interna |
view "internal" {
match-clients { RETE_LOCALE; localhost; };
recursion yes;
zone "DOMINIO" {
type master;
file "pri/DOMINIO.internal";
allow-transfer { any; };
};
};
|
La terza parte di named.conf è la vista esterna utilizzata per
risolvere il proprio nome dominio per il resto del mondo e per risolvere tutti
gli altri nomi domini per il proprio host (e per chiunque voglia utilizzare
questo server DNS).
Codice 3.4: Vista esterna |
view "external" {
match-clients { any; };
recursion no;
zone "." IN {
type hint;
file "named.ca";
};
zone "127.in-addr.arpa" IN {
type master;
file "pri/127.zone";
allow-update { none; };
notify no;
};
zone "DOMINIO" {
type master;
file "pri/DOMINIO.external";
allow-query { any; };
allow-transfer { SERVER_DNS_SLAVE; };
};
};
|
La parte finale di named.conf è la politica di logging.
Codice 3.5: Vista esterna |
logging {
channel default_syslog {
file "/var/log/named/named.log" versions 3 size 5m;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category default { default_syslog; };
};
|
La cartella /var/log/named deve esistere ed essere inclusa
in named:
Codice 3.6: Creazione del file di log |
# mkdir -p /var/log/named/
# chmod 770 /var/log/named/
# touch /var/log/named/named.log
# chmod 660 /var/log/named/named.log
# chown -R named /var/log/named/
# chgrp -R named /var/log/named/
|
Creazione del file per la zona interna
Saranno utilizzati i nomi host e gli indirizzi IP nell'immagine della rete di
esempio. C'è da notare che quasi tutti (non tutti) i domini finiscono con "."
(punto).
Codice 3.7: /var/bind/pri/DOMINIO.internal |
$TTL 2d
@ IN SOA ns.DOMINIO. ADMIN.DOMINIO. (
MODIFICATION ; serial
3h ; refresh
1h ; retry
1w ; expiry
1d ) ; minimum
DOMINIO. IN MX 0 mail.DOMINIO.
DOMINIO. IN TXT "v=spf1 ip4:YOUR_PUBLIC_IP/32 mx ptr mx:mail.DOMINIO ~all"
DOMINIO. IN NS ns.DOMINIO.
DOMINIO. IN NS SERVER_DNS_SLAVE
www.DOMINIO. IN A 192.168.1.3
ns.DOMINIO. IN A 192.168.1.5
posta.DOMINIO. IN A 192.168.1.3
router.DOMINIO. IN A 192.168.1.1
hell.DOMINIO. IN A 192.168.1.3
heaven.DOMINIO. IN A 192.168.1.5
desktop.DOMINIO. IN A 192.168.1.4
|
Creazione del file per la zona esterna
Ora qui ci sono soltanto i sottodomini da utilizzare per i client esterni (www,
posta e ns).
Codice 3.8: /var/bind/pri/DOMINIO.external |
$TTL 2d
@ IN SOA ns.DOMINIO. ADMIN.DOMINIO. (
MODIFICATION ;serial
3h ;refresh
1h ;retry
1w ;expiry
1d ) ;minimum
DOMINIO. IN MX 0 mail.DOMINIO.
DOMINIO. IN TXT "v=spf1 ip4:IP_PUBBLICO/32 mx ptr mx:mail.DOMINIO ~all"
DOMINIO. IN NS ns.DOMINIO.
DOMINIO. IN NS SERVER_DNS_SLAVE
www.DOMINIO. IN A IP_PUBBLICO
ns.DOMINIO. IN A IP_PUBBLICO
posta.DOMINIO. IN A IP_PUBBLICO
|
Completamento della configurazione
Il servizio named va aggiunto al runlevel di default:
Codice 3.9: Aggiunta al runlevel di default |
# rc-update add named default
|
4.
Configurazione dei client
Ora è possibile utilizzare il proprio server DNS su tutte le macchine della
propria rete locale per risolvere i nomi domini. È necessario modificare il file
/etc/resolv.conf su tutte le macchine della propria rete locale.
Codice 4.1: Modifica del file /etc/resolv.conf |
search DOMINIO
nameserver IP_SERVER_DNS
|
Notare che IP_SERVER_DNS è lo stesso di IP_LOCALE utilizzato in questo
documento. Nell'immagine l'esempio è 192.168.1.5.
5.
Verifica
Possiamo finalmente testare il nostro nuovo server DNS. Per prima cosa, avviare
il servizio.
Codice 5.1: Avvio manuale del servizio |
# /etc/init.d/named start
|
Verrà invocato diverse volte il comando host su alcuni domini. È
possibile utilizzare qualsiasi computer della propria rete locale per effettuare
questo test. Se net-dns/host non è installato è possibile utilizzare al
suo posto ping. Altrimenti, eseguire prima emerge host.
Codice 5.2: Esecuzione del test |
$ host www.gentoo.org
www.gentoo.org has address 209.177.148.228
www.gentoo.org has address 209.177.148.229
$ host hell
hell.DOMINIO has address 192.168.1.3
$ host router
router.DOMINIO has address 192.168.1.1
|
6.
Protezione del server con iptables
Se si utilizza iptables per proteggere il proprio server, è possibile aggiungere
queste regole per il servizio DNS.
Codice 6.1: Regole iptables |
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
|
|