terça-feira, 6 de março de 2007

Instalação e configuração de um servidor DNS (BIND) em Linux

Objectivo

Instalação e configuração de um servidor DNS.

Introdução

Uma das aplicações mais utilizados como servidores de DNS é o BIND. É esta aplicação, neste caso BIND 9, que será utilizado para configurar um servidor DNS.

Implementação

  1. Instalar BIND 9.

    • sudo apt-get install bind9

  2. O Bind é composto por três componentes:

    • named – que é o daemon que correr no lado do servidor DNS.

    • resolver library – que é o resolver do lado do client do BIND. Faz as queries ao servidores DNS, de modo a traduzir os nomes.

    • tools for testing – ferramentas para testar o servidor de DNS.

  3. Como se instalou o pacote compilado do Ubuntu os ficheiros do BIND já estão pré-configurados.

  4. O ubuntu divide as configurações do ficheiro named.conf em named.conf.options, named.conf e named.conf.local.

    • O ficheiro named.conf contém as configurações por defeito comuns a todos os servidores de nomes. Isto é contém por exemplo as configurações referentes às zonas da raíz, loopbak e broadcast (não incluída nesta configuração).

    • O ficheiro /etc/bind/named.conf.options contém opções.

    • O ficheiro named.conf.local, será aquele onde serão configuradas as zonas que se pretende identificar no servidor de nomes.

  5. Ter em atenção que o conteúdo do ficheiro /etc/bind/named.conf deverá ser decomposto nos três ficheiros descritos anteriormente.

    • A secção options para o ficheiro /etc/bind/named.conf.options.

    • A secção zone root e zone loopbak para o ficheiro named.conf .

    • A secção zone ass.estgm.ipb.pt"

  1. Ficheiro de central de configuração do BIND - /etc/named.conf (ubuntu - /etc/bind/named.conf.local).

    • Informa quais as zonas sob a sua responsabilidade e respectivos ficheiros.

/etc/bind/named.conf

options {

forwarders {

193.136.195.220;

};

// pid-file "/var/run/bind/run/named.pid";

// query-source address * port 53;

// to listen for queries only on certain interfaces

listen-on { 127.0.0.1; 192.168.1.0/24; }

    };

//

// a master nameserver config

//

zone "." {

type hint;

file "db.root";

};


zone "localhost" IN {

// a master type means that this server needn't look

// anywhere else for information; the localhost buck stops here.

type master;

file "/etc/bind/zone.localhost";

// don't allow dynamic DNS clients to update info

// about the localhost zone

allow-update { none; };

};


zone "0.0.127.in-addr.arpa" {

type master;

file "/etc/bind/db.local";

allow-update { none; };

};


zone "1.168.192.in-addr.arpa" {

type master;

file "/etc/bind/zones/pri.1.168.192.in-addr.arpa";

also-notify { 192.168.1.2; }

};


zone "ass.estgm.ipb.pt" {

type master;

file "/etc/bind/zones/pri.ass.estgm.ipb.pt";

allow-transfer { 192.168.1.2; };

also-notify { 192.168.1.2; }

};



    • A secção options define o tipo de servidor, a directoria por defeito para o named.

    • A secção zone identifica a localização de hints, localhost, zone e reverse zone.

    • Na zona ass.estgm.ipb.pt a linha allow-transfer { 192.168.1.2; } define que:

      • Por questões de segurança apenas o servidor secundário poderá fazer fazer transferência da zona.

    • Ficheiro Hints

      • Este ficheiro contém os nomes e endereços dos servidores root da Internet. Estes conhecem onde os authoritative servers para o seu domínio existem.

    • Ficheiro Local

      • Os servidores DNS (Name servers) são mestres ou servidores principais do seu próprio domino loopback (127.0.0.1). O objectivo de criar ficheiros de zonas locais para cada aspecto do nosso localhost é reduzir o tráfego e permitir ao software do servidor .

    • Ficheiro Zone

      • Este ficheiro, é também de chamado de base de dados do domínio. Define a maior parte da informação necessária para resolver as queries do domínio que administramos. Mapeia os nomes em endereços IP e disponibiliza informação sobre os serviços fornecidos sobre os serviços oferecido pela organização incluído: servidor web, ftp, email, telnet, name servers, etc.

      • O ficheiro zone utiliza diversos record types incluindo o SOA or start of authority; NS ou name server; A or host name to address map; PTR ou apontador pra o endereço que mapeia os nomes; MX ou mail exchanger que identifica os servidor de mail do domínio; e o CNAME ou canonical nome que define um alias para o nome de um host.

    • Ficheiro Reverse zone

      • O ficheiro reverse zone mapeia os endereços IP aos nomes dos hosts.

    • O parâmetro allow-transfer { 192.168.1.2; }; indica que permite a transferência de zones para o servidor secundário.

    • O parâmetro also-notify { 192.168.1.2; } sempre que o número de série é incrementado e o servidor é reiniciado é enviada uma notificação ao servidor secundário. Este ao verificar que o serial foi incrementado faz a actualização.

  1. Como indica o ficheiro named.conf que na secção das zonas indica onde encontrar a informação sobre as diversas zonas.

    • Neste caso são cinco ficheiros db.root, zone.localhost, 0.0.127.in-addr.arpa, 1.168.192.in-addr.arpa, ass.estgm.ipb.pt.

    • O ficheiro db.root ao contrário dos outros é gerido pela The Internet's Network Information Center e caso não exista ou desconfie que esteja desactualizado faça o download de ftp://ftp.internic.net/domain/named.root.

    • O ficheiro zone.localhost, pode ter outro nome arbitrário, e indica ao named que o endereço de localhost é 127.0.0.1. Normalmente vêm configurado por defeito.

/etc/bind/zone.localhost

; loopback/localhost zone file

;

$TTL 1D

$ORIGIN localhost.

@ IN SOA @ root (

1 ; Serial

8H ; Refresh

15M ; Retry

1W ; Expire

1D) ; Minimum TTL

IN NS @

IN A 127.0.0.1

    • O ficheiro 0.0.127.in-addr.arpa, indica o named que o nome associado ao IP 127.0.0.1 é localhost. Normalmente vêm configurado por defeito.

/etc/bind/0.0.127.in-addr.arpa

; reverse pointers for localhost

;

$TTL 1D

$ORIGIN 0.0.127.in-addr.arpa.

@ IN SOA localhost. root.localhost. (

1 ; serial

8H ; refresh

15M ; retry

1W ; expire

1D ) ; minimum

IN NS localhost.

1 IN PTR localhost.



    • Os restantes são explicados de seguida.

  1. Ficheiro zone pri.ass.estgm.ipb.pt

/etc/bind/zones/pri.ass.estgm.ipb.pt


@ IN SOA server1.ass.estgm.ipb.pt. administrador.ass.estgm.ipb.pt. (

2006012103; serial

28800; refresh, seconds

7200; retry, seconds

604800; expire, seconds

86400 ); minimum, seconds

;

NS server1.ass.estgm.ipb.pt.;

NS ns0.ass.estgm.ipb.pt. ;

;

MX 10 mail.ass.estgm.ipb.pt.;

;

ass.estgm.ipb.pt. A 192.168.1.1

www A 192.168.1.1

server1 A 192.168.1.1

ns0 A 192.168.1.2

ftp A 192.168.1.3

webdav CNAME www

ass.estgm.ipb.pt. TXT "v=spf1 a mx ~all"

mail.ass.estgm.ipb.pt. TXT "v=spf1 a -all"


    • SOA - refere-se a "Start of Authority"

    • Assim o nosso ficheiro zona indica onde começa a autoridade. A nossa autoridade começa no ficheiro zone. Os servidor Top Level Domain estão agora à espera que o nosso servidor faça parte do trabalho.

    • A primeira linha do ficheiro zone.

      • O "@" refere-se à origem deste ficheiro de zona que é o server1.ass.estgm.ipb.pt. O DnS utiliza esta label para designar o registo Start Of Authority (SOA) que aparece no inicio de qualquer ficheiro zona definindo o domínio.

      • o próximo item "IN" indica que é Internet. Existem outras classes mas são pouco utilizadas.

      • o próximo é o email do administrador neste caso administrador@ass.estgm.ipb.pt.

      • seriel – numero de série da zona. É incrementado cada vez que a zona é alterada, assim o servidor de secundário sabe quando a zona foi alterada.

      • refresh – número de segundo que o servidor secundário deverá esperar antes de verificar novas actualizações.

      • retry – número de segundos que o servidor secundário ir esperar para fazer um novo pedido depois do seu último pedido falhado.

      • expire – o número de segundo que o o servidor secundário irá esperar antes de considerar que os seus dados expirados se não conseguir contactar o servidor primário.

      • ninimum – usado para determinar o mínimo TTL.

    • Registos NS

      • Especificam os servidores de nomes responsáveis pelo domínio. É necessário pelo menos um, no entanto é comum ter dois (primário e secundário).

    • Registos MX

      • Necessário para recebermos mails em ass.estgm.ipb.pt. Este registo indica que os mails para ass.estgm.ipb.pt devem ser entregues em server1.ass.estgm.ipb.pt, com uma prioridade de 10. Pode-se colocar mais de que um servidor de mail.

      • Quanto maior for o número menor é a prioridade. Os servidores serão contactados pela ordem de prioridade.

      • Se quisemos que o servidor server1.ass.estgm.ipb.pt, trata-se endereços de email do um subdomínio (e.g. user@sub.ass.estgm.ipb.pt), então bastaria colocar:

        • subdomain.ass.estgm.ipb.pt. MX 10 mail.ass.estgm.ipb.pt. (ou)

        • subdomain MX 10 mail.ass.estgm.ipb.pt.

    • Registos A

      • São os registo mais importantes de DNS. Permitem mapear nomes em endereços IP

      • Especificar que o ass.estgm.ipb.pt tem o endereço IP 192.168.1.1. Dois modos:

        • ass.estgm.ipb.pt. A 192.168.1.1 ou

        • A 192.168.1.1

      • O servidor www tem o mesmo IP, isto é www.ass.estgm.ipb.pt e ass.estgm.ipb.pt apontam para o mesmo servidor.

        • www A 192.168.1.1

      • Por fim os servidores server1.ass.estgm.ipb.pt e ns0.ass.estgm.ipb.pt, em que o segundo tem um IP diferente do primeiro porque é um servidor DNS secundário.

    • Registos CNAME

      • Mnemónica para “canonical name”.

        • webdav CNAME www

      • Significa que webdav.ass.estgm.ipb.pt é um alias para ftp.ass.estgm.ipb.pt e por isso aponta para o mesmo host.

      • Um CNAME tem sempre que apontar para o registo A. Não devem ser usados registos CNAME com registos SOA.

      • Os CNAME são benéficos em determinados casos. Imagine que tem centenas de máquinas como registos A apontar para o mesmo IP. Se um dia alterar esse IP terá que alterar todos os registo A. Isso não se passava se utilizasse o CNAME. Só se faria a actualização de um registo A.

    • Registo TXT

      • Permitem atribuir informação adicional a uma zona. Estes contém registos SPF (Sender Policy Framework), que especificam que hosts estão permitidos enviar mail com o domínio ass.estgm.ipb.pt. Tecnicamente é possível enviar mail de qualquer host, no entanto, provedores de mail (yahoo, hotmail), utilizam actualmente registos SPF. Isto é se o emissor do domínio não tiver um registo SPF ou enviar de uma máquina que não esteja na lista de registos SPF, o mail é classificado como spam.

      • Existe um wizard para criar um registos SPF em http://www.openspf.org/wizard.html?mydomain=&x=26&y=8 e em seguida adicionar isso no ficheiro da zona :

        • ass.estgm.ipb.pt. TXT "v=spf1 a mx ~all"

        • mail.ass.estgm.ipb.pt. TXT "v=spf1 a -all"

  1. Ficheiro Reverse Zone

    • Agora os programas pode procurar ass.estgm.ipb.pt e o todos os seu subdomínios no DNS, mas é necessário a reverse zone que mapeia os IP em ass.estgm.ipb.pt. O reverse lookup é utilizado pr diversos programas que irão recusar se o reverse lookup e o forward lookup (o lookup normal do ass.estgm.ipb.pt) não corresponderem um com o outro (também utilizado para classificar os mail como spam).

    • O início do ficheiro pri.1.168.192.in-addr.arpa é exactamente igual ao pri.ass.estgm.ipb.pt.

/etc/bind/zones/pri.1.168.192.in-addr.arpa

    @ IN SOA server1.ass.estgm.ipb.pt. administrador.ass.estgm.ipb.pt. (

2006012103; serial

28800; refresh, seconds

7200; retry, seconds

604800; expire, seconds

86400 ); minimum, seconds

;

NS server1.ass.estgm.ipb.pt.;

NS ns0.ass.estgm.ipb.pt. ;

1 PTR ass.estgm.ipb.pt.

2 PTR ns0.ass.estgm.ipb.pt.

3 PTR ftp.ass.estgm.ipb.pt.


  1. Agora pode-se testar fazendo o lookup como o comando dig, tentando descobrir o endereço de IP de ass.estgm.ipb.pt (dig ass.estgm.ipb.pt):

; <<>> DiG 9.3.2 <<>> ass.estgm.ipb.pt

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58609

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2


;; QUESTION SECTION:

;ass.estgm.ipb.pt. IN A


;; ANSWER SECTION:

ass.estgm.ipb.pt. 86400 IN A 192.168.1.1


;; AUTHORITY SECTION:

ass.estgm.ipb.pt. 86400 IN NS ns0.ass.estgm.ipb.pt.

ass.estgm.ipb.pt. 86400 IN NS server1.ass.estgm.ipb.pt.


;; ADDITIONAL SECTION:

ns0.ass.estgm.ipb.pt. 86400 IN A 192.168.1.3

server1.ass.estgm.ipb.pt. 86400 IN A 192.168.1.1


;; Query time: 29 msec

;; SERVER: 192.168.123.128#53(192.168.123.128)

;; WHEN: Mon Mar 5 18:04:28 2007

;; MSG SIZE rcvd: 122

  1. E agora fazer o reverse lookup, (dig -x 192.168.1.1):

; <<>> DiG 9.3.2 <<>> -x 192.168.1.1

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40943

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2


;; QUESTION SECTION:

;1.1.168.192.in-addr.arpa. IN PTR


;; ANSWER SECTION:

1.1.168.192.in-addr.arpa. 86400 IN PTR ass.estgm.ipb.pt.


;; AUTHORITY SECTION:

1.168.192.in-addr.arpa. 86400 IN NS ns0.ass.estgm.ipb.pt.

1.168.192.in-addr.arpa. 86400 IN NS server1.ass.estgm.ipb.pt.


;; ADDITIONAL SECTION:

ns0.ass.estgm.ipb.pt. 86400 IN A 192.168.1.3

server1.ass.estgm.ipb.pt. 86400 IN A 192.168.1.1


;; Query time: 99 msec

;; SERVER: 192.168.1.1#53(192.168.1.1)

;; WHEN: Mon Mar 5 18:05:26 2007

;; MSG SIZE rcvd: 148

    • Repare nas secções de questão e resposta em ambas as pesquisas. Como se pode verificar as o forward e o reverse lookup corresponderem.

  1. Configurar o Servidor DNS secundário:

    • De notar que nas configurações do servidor primário está definido que o servidor DNS secundário é ns0.ass.estgm.ipb.pt. Este servidor irá funcionar como servidor de backup caso o servidor principal falhe, permitindo que o serviço de nomes continue a disponibilizar o seu serviço para o domínio e subdomínio de ass.estgm.ipb.pt.

    • Ficheiro named.conf

options {

//pid-file "/var/run/bind/run/named.pid";

//directory "/etc/bind";

// query-source address * port 53;

};

zone "." {

type hint;

file "db.root";

};

zone "localhost" IN {

type master;

file "/etc/bind/zone.localhost";

allow-update { none; };

};

zone "0.0.127.in-addr.arpa" {

type master;

file "db.local";

allow-update { none; };

};

zone "ass.estgm.ipb.pt" {

type slave;

file "/etc/bind/zones/sec.ass.estgm.ipb.pt";

masters { 192.168.1.1; };

};

    • Escrevendo slave, define-se que se trata de uma slave zone e na linha masters especifica-se o IP do servidor primário. Na linha file especifica-se nome do ficheiro em que a slave zone que deve deve ser guardada.

    • Reinicie o servidor e brevemente deverá encontrar o ficheiro /etc/bind/sec.ass.estgm.ipb.pt no servidor secundário. Isto aconteceu porque o servidor secundário contactou o primário e este último transferiu a zona para o secundário.

    • De lembrar que cada vez que é feito um update à zona no servidor primário, deve ser incrementado o número serial, doutro modo a zona não será transferida.

  1. Ter em atenção que se houver firewall em alguns dos servidores primário ou secundário que bloqueie a porta 53 o zona não será transferida.

Bibliografia