FreeBSD utilizza, di default, una versione di
BIND (Berkeley Internet Name Domain), che è
la più completa implementazione del protocollo
DNS. DNS è il protocollo
attraverso il quale nomi sono mappati ad indirizzi IP,
e viceversa. Per esempio, una query per
www.FreeBSD.org
riceverà una replica con l'indirizzo
IP del web server del The FreeBSD Project, mentre una
query per ftp.FreeBSD.org
ritornerà l'indirizzo IP della corrispondente
macchina FTP. Allo stesso modo, può
avvenire l'opposto. Una
query per un indirizzo IP può risolvere il suo
nome host. Non è necessario avere in esecuzione
un name server per fare DNS lookups su un sistema.
FreeBSD al momento viene distribuito con software DNS BIND9 di default. La nostra installazione fornisce caratteristiche di sicurezza migliorate, un nuovo layout del file system e configurazione chroot(8) automatica.
DNS è coordinato su Internet attraverso un sistema alquanto complesso di name server autoritativi, ed altri name server di più piccola scala che ospitano e gestiscono cache di informazioni individuali sui domini.
Al momento corrente, BIND è mantenuto
dall'Internet Software Consortium
http://www.isc.org/
.
Per comprendere questo documento, alcuni termini relativi al DNS devono essere capiti.
Termine | Definizione |
---|---|
Forward DNS | La mappa da hostname ad indirizzi IP. |
Origine | Si riferisce al dominio coperto in un particolare file di zona. |
named, BIND, name server | Nomi comuni per il pacchetto name server BIND all'interno di FreeBSD. |
Risolutore | Un processo di sistema attraverso il quale una macchina fa query su un name server per informazioni di zona. |
DNS inverso | L'opposto del forward DNS; mappare indirizzi IP su nomi host. |
Zona root | L'inizio della gerarchia della zona Internet. Tutte le zone cadono sotto la zona root, analogamente a come tutti i file nel file system cadono sotto la directory root. |
Zona | Un dominio individuale, sottodominio, o porzione del DNS amministrato dalla stessa autorità |
Esempi di zone:
.
è la zona root
org.
è una zona
Top Level Domain (TLD) sotto la zona root
example.org.
è una zona sotto la zona
org.
TLD
1.168.192.in-addr.arpa
è una zona
che referenzia tutti gli indirizzi IP che cadono
sotto lo spazio IP 192.168.1.*
.
Come si può vedere, la parte più
specifica di un nome host appare a sinistra. Per esempio
example.org.
è
più specifico di org.
, come
org.
è più specifico
della zona root. La disposizione di ogni parte di un nome
host è analoga ad un file system: la
directory /dev
cade
all'interno della root, e così via.
Attualmente vengono usati due tipi di name server: un name server autoritativo, ed un name server cache.
Un name server autoritativo è necessario quando:
uno vuole servire informazioni DNS a tutto il mondo, rispondendo in maniera autoritativa alle query.
un dominio, tipo
example.org
, è
registrato e gli indirizzi IP devono essere
assegnati ad hostname sotto questo.
un blocco di indirizzi IP richiede entry di DNS inverso (da IP ad hostname).
un name server di backup, chiamato uno slave, deve rispondere alle query.
Un name server cache è necessario quando:
un server locale DNS può tenere in cache e rispondere più velocemente rispetto ad effettuare query ad un name server all'esterno.
una riduzione nel traffico complessivo di rete è desiderato (è stato calcolato che il traffico DNS conta più del 5% sul traffico totale di Internet).
Quando uno fa una query per risolvere
www.FreeBSD.org
, il
risolutore di solito fa una query al name
server dell'ISP a cui si è connessi,
ed ottiene una risposta. Con un server DNS
locale, che fa cache,
la query deve essere effettuata una volta sola dal
server DNS che fa cache. Ogni
query aggiuntiva non dovrà cercare all'esterno
della rete locale, dato che l'informazione
è tenuta in cache localmente.
In FreeBSD, il demone BIND è chiamato named per ovvie ragioni.
File | Descrizione |
---|---|
named(8) | Il demone BIND. |
rndc(8) | Programma di controllo del name server. |
/etc/namedb | Directory dove risiedono le informazioni di zona di BIND. |
/etc/namedb/named.conf | File di configurazione del demone. |
A seconda di come certe zone sono configurate
sul server, i file relativi a quelle zone possono essere
trovate nelle sottodirectory master
, slave
, or dynamic
della directory
/etc/namedb
.
Questi file contengono le informazioni DNS
che saranno distribuite dal name server in risposta alle query.
Dato che BIND è installato di default, configurarlo è relativamente semplice.
La configurazione di default di named è quella di un name server basilare, eseguito in ambiente chroot(8). Per avviare il server una volta con questa configurazione, usa il seguente comando:
#
/etc/rc.d/named forcestart
Per assicurarsi che il demone
named
sia avviato alla partenza, metti la seguente riga
in /etc/rc.conf
:
named_enable="YES"
Ci sono ovviamente molte opzioni di configurazione
per /etc/namedb/named.conf
che sono al di là
dello scopo di questo documento. Comunque, se siete interessati
nelle opzioni di avvio per named su FreeBSD,
dai un'occhiata ai flags named_
in
/etc/defaults/rc.conf
e consulta la pagina
di manuale rc.conf(5). Anche la sezione Sezione 11.2, «Configurazione Iniziale»
è una buona base di partenza.
I file di configurazione per named
al corrente risiedono nella directory
/etc/named
e necessiteranno di modifiche prima
dell'uso, a meno che non si voglia un semplice resolver.
Qui è dove la maggior pare della configurazione viene
effettuata.
Per configurare una zona master per il localhost
visita la directory /etc/namedb
ed esegui il seguente comando:
#
sh make-localhost
Se tutto è andato bene, un nuovo file dovrebbe
esistere nella sottodirectory
master
.
I nomi dei file dovrebbero essere localhost.rev
per il local domain name elocalhost-v6.rev
per le configurazioni IPv6.
Come il file di configurazione di default, l'informazione
richiesta sarà presente nel file named.conf
.
// $FreeBSD$ // // Refer to the named.conf(5) and named(8) man pages, and the documentation // in /usr/share/doc/bind9 for more details. // // If you are going to set up an authoritative server, make sure you // understand the hairy details of how DNS works. Even with // simple mistakes, you can break connectivity for affected parties, // or cause huge amounts of useless Internet traffic. options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // If named is being used only as a local resolver, this is a safe default. // For named to be accessible to the network, comment this option, specify // the proper IP address, or delete this option. listen-on { 127.0.0.1; }; // If you have IPv6 enabled on this system, uncomment this option for // use as a local resolver. To give access to the network, specify // an IPv6 address, or the keyword "any". // listen-on-v6 { ::1; }; // In addition to the "forwarders" clause, you can force your name // server to never initiate queries of its own, but always ask its // forwarders only, by enabling the following line: // // forward only; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 127.0.0.1; }; */
Proprio come dicono i commenti, per beneficiare
di una cache di un server superiore, può
essere abilitato forwarders
.
Sotto circostanze normali, un name
server farà query ricorsive attraverso Internet
cercando certi name server fino a chè non trova
la risposta che sta cercando. Averlo abilitato farà
sì che sarà fatta prima una query verso il
name server superiore (o il name server fornito),
avvantaggiandosi della sua cache. Se il name
server superiore è un name server molto
trafficato e veloce, può valere la pena di
abilitarlo.
127.0.0.1
non funzionerà qui.
Cambia questo indirizzo IP in un name server
superiore.
/* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND versions 8 and later * use a pseudo-random unprivileged UDP port by default. */ // query-source address * port 53; }; // If you enable a local name server, don't forget to enter 127.0.0.1 // first in your /etc/resolv.conf so this server will be queried. // Also, make sure to enable it in /etc/rc.conf. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "master/localhost.rev"; }; // RFC 3152 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" { type master; file "master/localhost-v6.rev"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // // Example slave zone config entries. It can be convenient to become // a slave at least for the zone your own domain is in. Ask // your network administrator for the IP address of the responsible // primary. // // Never forget to include the reverse lookup (IN-ADDR.ARPA) zone! // (This is named after the first bytes of the IP address, in reverse // order, with ".IN-ADDR.ARPA" appended.) // // Before starting to set up a primary zone, make sure you fully // understand how DNS and BIND works. There are sometimes // non-obvious pitfalls. Setting up a slave zone is simpler. // // NB: Don't blindly enable the examples below. :-) Use actual names // and addresses instead. /* An example master zone zone "example.net" { type master; file "master/example.net"; }; */ /* An example dynamic zone key "exampleorgkey" { algorithm hmac-md5; secret "sf87HJqjkqh8ac87a02lla=="; }; zone "example.org" { type master; allow-update { key "exampleorgkey"; }; file "dynamic/example.org"; }; */ /* Examples of forward and reverse slave zones zone "example.com" { type slave; file "slave/example.com"; masters { 192.168.1.1; }; }; zone "1.168.192.in-addr.arpa" { type slave; file "slave/1.168.192.in-addr.arpa"; masters { 192.168.1.1; }; }; */
In named.conf
, ci sono esempi
di linee slave per zone di forward ed inverse.
Per ogni nuova zona servita, una nuova linea di
zona deve essere aggiunta a
named.conf
.
Per esempio, la più semplice entry per
example.org
può
assomigliare a:
zone "example.org" { type master; file "master/example.org"; };
La zona è una master, come indicato
dall'entry type
,
e conserva le informazioni di zona su
/etc/namedb/master/example.org
indicata dalla entry
file
.
zone "example.org" { type slave; file "slave/example.org"; };
Nel caso slave, l'informazione di zona è trasferita dal name server master per quella zona particolare, e salvata nel file specificato. Se e quando il master muore o è irraggiungibile, il name server slave avrà le informazioni di zona trasferite e sarà in grado di servirlo.
Un esempio di file di zona master per example.org
(che esiste
all'interno di /etc/namedb/master/example.org
) è la seguente:
$TTL 3600 ; 1 hour example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) ; DNS Servers IN NS ns1.example.org. IN NS ns2.example.org. ; MX Records IN MX 10 mx.example.org. IN MX 20 mail.example.org. IN A 192.168.1.1 ; Machine Names localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5 ; Aliases www IN CNAME @
Nota che ogni hostname che finisce in
un «.» è
un nome esatto, mentre ogni entità senza un
«.» è referenziato all'origine.
Per esempio www
è trasformato
in www.origin
.
Nel nostro file di zone fittizio, la nostra origine
è example.org
, così
www
si trasformerebbe in
www.example.org
.
Il formato di un file di zona è il seguente:
recordname IN recordtype value
I record DNS usati più di frequente:
inizio di una zona di autorità
un name server autoritativo
un indirizzo host
il nome canonico per un alias
mail exchanger
un puntatore a nome di dominio (usato nel DNS inverso)
example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 86400 ) ; Minimum TTL of 1 day
example.org.
il nome di dominio, inoltre è l'origine per questo file di zona.
ns1.example.org.
il name server primario/autoritativo per questa zona.
admin.example.org.
la persona responsabile per questa
zona, un indirizzo email con «@»
sostituito. (<admin@example.org>
diventa admin.example.org
)
2006051501
il numero di serie del file. Questo
deve essere aumentato ogni volta che il file di
zona è modificato. Al giorno d'oggi
molti amministratori preferiscono un formato
yyyymmddrr
per il numero
di serie.
2006051501
significherebbe
modificato l'ultima volta il 05/15/2006, l'ultimo
01
essendo la prima volta che
il file di zona è stato modificato in
questo giorno. Il numero di serie è
importante dato che avverte
name server slave per una zona quando questa
` modificata.
IN NS ns1.example.org.
Questa è una linea NS. Ogni name server che
replicherà in maniera autoritativa la zona deve
avere una di queste linee. Il @
come
visto potrebbe essere stato
example.org.
Il @
si traduce nell'origine.
localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5
Il record A indica un nome macchina. Come visto
sopra, ns1.example.org
risolverebbe in 192.168.1.2
.
IN A 192.168.1.1
Questa linea assegna l'indirizzo IP
192.168.1.1
alla corrente origine,
in questo caso example.org
.
www IN CNAME @
Il record nome canonico è usato per dare alias
ad una macchina. Nell'esempio, www
è tramutato in alias nella macchina «master»
che corrisponde al domain name example.org
(192.168.1.1
).
CNAME possono essere usati per fornire alias
ad hostname o distribuire in round robin un
hostname fra molte macchine.
IN MX 10 mail.example.org.
Il record MX ` usato per specificare quali
mail server sono responsabili per gestire mail
entranti per la zona.
mail.example.org
è l'hostname del mail
server, e 10 è la priorità di
quel mail server.
Uno può avere molti mail server, con
priorità di 10, 20 e così via. Un mail server che
cerca di consegnare una mail a
example.org
proverà prima l'MX con la più alta
priorità (il record con il numero di priorita' minimo)
poi il secondo, etc., fino a
chè la mail non sia
consegnata correttamente.
Per file di zona in-addr.arpa (DNS inverso), lo stesso formato è usato, eccetto con linee PTR al posto di A o CNAME.
$TTL 3600 1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum IN NS ns1.example.org. IN NS ns2.example.org. 1 IN PTR example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 4 IN PTR mx.example.org. 5 IN PTR mail.example.org.
Questo file da la corretta mappa da indirizzi IP ad hostname per il nostro dominio fittizio.
Un name server caching è un name server che non è autoritativo per nessuna zona. Fa semplicemente query, e ne memorizza le risposte per uso successivo. Per impostarne uno, configura il name server come al solito, omettendo ogni inclusione di zona.
Anche se BIND è la più comune implementazione del DNS, c'è sempre la questione della sicurezza. Talvolta vengono trovati possibili e sfruttabili buchi di sicurezza.
Mentre FreeBSD tiene named automaticamente in un ambiente chroot(8), ci sono molti altri meccanismi di sicurezza che potrebbero essere sfruttati per attacchi al servizio DNS.
È una buona idea leggere gli avvisi sulla sicurezza di CERT e sottoscrivere le mailing list sugli avvisi di sicurezza su FreeBSD per stare aggiornato con le questioni correnti di sicurezza di Internet e FreeBSD.
Se sorge un problema, tenere i sorgenti aggiornati e fare una compilazione al volo di named non farebbe male.
Pagine di manuale di BIND/named: rndc(8) named(8) named.conf(5)
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Per domande su FreeBSD, leggi la
documentazione prima di contattare
<questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a
<doc@FreeBSD.org>.