9 de abr. de 2010

Bind no Slackware

Transcrição do artigo publicado em 13/12/2004 por Geyson Rogério L. Silva no site http://www.slackware-brasil.com.br/ de autoria de Alex Sandro Gonzales Rodrigues
introdução
Este artigo é voltado para iniciantes no BIND, tentando mostrar de uma maneira simples e clara como configurar um domínio fictício no BIND que vem junto com o Slackware 10. Iremos configurar um domínio da empresa fictícia "Slacks" para melhor compreensão.
O que é DNS
Não falarei sobre o protocolo IP, mas quem já estudou sabe que, seja na Internet ou numa intranet, em tudo o que fazemos, seja navegar, mandar e-mails ou outra coisa, nossas informações São "quebradas" em pequenos pedacinhos denominados "datagramas IP", e que nossas mensagens chegam ao destino baseado no número IP que está no cabeçalho da nossa mensagem, ou seja, os computadores na Internet ou numa intranet se comunicam e se localizam baseando-se nesse endereços IP. Então, quando nós acessamos um site "www.qualquercoisa.com.br", na verdade esse endereço é um endereço IP do tipo "200.256.34.6". Mas já imaginou se tivéssemos que digitar na barrinha de endereços no nosso browser o número IP do site ao invés do seu nome? Seria horrível guardarmos números ao invés de caracteres... Foi por isso que surgiu o DNS, pois temos muito mais facilidade em memorizar nomes do que números.
O DNS (Domain Name System), é um serviço cliente/servidor baseado em hierarquias, em que a parte cliente é conhecida como resolver (resolvedor) e a parte servidora como name server. As conexões entre o cliente e o servidor se dão através da porta UDP 53.
De uma forma simples, a função do resolver (cliente) é passar as consultas da aplicação (o browser, por exemplo) para o servidor de nomes, e este por sua vez consultará uma base de referências entre IPs e nomes e enviará o resultado para o cliente.
Estrutura de domínios
Como falamos, o DNS é baseado em uma estrutura hierárquica, em que o processo de resolução se dá da hierarquia mais alta para a mais baixa. O ponto mais alto da hierarquia é chamado de root-level-domain, ou domínio raiz, que é representado por um caractere '.'.
O próximo nível da hierarquia são os top-level-domain, ou domínios de primeiro nível. Eles são representados por códigos DPN (domínio de primeiro nível). Alguns deles são:
* com - Organização comercial
* mil - Militar
* net - Redes (backbones para a Internet)
* org - organizações sem fins comerciais
* gov - governamental
* xx - Sigla do país representado por dois caracteres. Ex: br, uk
Zona de autoridade
É a parte do domínio ao qual um servidor de DNS é o responsável. Em cada zona tem-se um arquivo de zona que é a base de referências entre os IPs e nomes desta zona.
Servidor primário
É o servidor onde estão os arquivos originais da zona. Só pode existir um servidor primário por zona.
Servidor secundário
Aqui é onde ficam as réplicas dos arquivos de zona, que podem ser consultados no caso de inoperabilidade do servidor primário. Ao contrário do servidor primário, podem existir vários servidores secundários. No Brasil, para que possamos registrar um domínio é obrigatório ter dois servidores: o Primário e também um Secundário.
Servidor master
É aquele servidor para o qual um servidor secundário irá solicitar as cópias dos arquivos de zona.
Servidor cache
É aquele servidor que não responde por zona alguma. Sua função é apenas armazenar resultados de consultas que ele armazena em cache. Assim, novas consultas ao mesmo registro serão atendidas com mais rapidez.
Instalação
A instalação do BIND no Slackware 10 é muito simples. Basta você colocar o CD 1 do Slackware, e após montado o CD-ROM, entrar na pasta Slackware/n do CD e digitar no console:
# installpkg bind-9.2.3-i486-1.tgz
Pronto, o BIND foi instalado no sistema. Pra quem não sabe, o nome do daemon do pacote BIND é named. A instalação ficou assim:
* /etc/named.conf - Arquivo de configuração geral do BIND.
* /usr/sbin/named - O binário (daemon) do BIND.
* /usr/doc/bind-9.2 - Manual em html muito bom do BIND em inglês.
* /var/named/caching-example/ - Diretório com arquivos exemplo de configuração básicos do BIND

Uma vez que estamos familiarizados com a instalação do BIND,passaremos para a melhor parte: a configuração :-)
Configuração do named.conf
O primeiro arquivo que iremos configurar é o /etc/named.conf. Vá em um editor de textos e abra o arquivo. Abaixo segue um exemplo explicativo do arquivo named.conf.
options {
directory "/var/named";
version "uhuh";
minimal-responses yes;
allow-transfer {192.168.0.2;};
listen-on {127.0.0.1; 192.168.0.1;};
allow-recursion {127.0.0.1; localhost; 192.168.0.0/24;};
/*
* 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 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "caching-example/named.ca";
};
zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
zone "0.0.168.192.in-addr.arpa" IN {
type master;
file "caching-example/domain.rev";
allow-transfer { 192.168.0.2; };
};
zone "slacks.com.br" IN {
type master;
file "caching-example/slacks.host";
allow-transfer { 192.168.0.2; };
};
Exame do arquivo named
O arquivo começa com as opções que afetarão o servidor de forma global. Eis a explicação das diretivas do arquivo:
* directory - Aqui você indica qual será o diretório onde ficará os arquivos de registros DNS. Se quiser pode colocar em outro diretório válido ao invés do proposto no nosso exemplo.
* version - Para poder ocultar a sua versão do BIND contra bisbilhoteiros lammers que não tem o que fazer, coloque essa opção com o que você desejar. No meu caso a versão do meu BIND ficou como "uhuh".
* minimal-responses - Se habilitado, quando o servidor gerar respostas, somente adicionará registros na autoridade quando requerido. Esta opção aumenta a performance do servidor.
* allow-transfer - Aqui você indica quem poderá fazer transferência de autoridades. Opção muito importante a ser colocada, pois aqui você indica quem poderá fazer transferência de zona do seu servidor, que no nosso caso é um servidor primário, logo a única maquina que pode ter autorização de transferência de zonas será o nosso servidor secundário. Coloque o IP do seu servidor secundário aqui, pois isso evitará que pessoas mal intencionadas possam fazer transferência de autoridades do teu domínio. No meu caso coloquei o IP 192.168.0.2
* listen-on - Aqui você especifica quais interfaces estão habilitadas a "escutar" conexões na porta UDP 53 do DNS. No meu caso tenho 2 placas de rede, mas só habilitei a minha interface que atende pelo IP 192.168.0.1 e a interface loopback.
* allow-recursion - Caso vá usar um DNS que será acessível pela Internet, é bom que você não deixe que esse pessoal faça recursões, ou seja, que eles pesquisem outros domínios que não sejam os que você tem cadastrado no seu servidor. No nosso caso, o pessoal da Internet só poderá pesquisar o único domínio que teremos cadastrado que é o "slacks.com.br", enquanto que o pessoal da minha rede interna "192.168.0.0" poderá pesquisar qualquer site além do domínio local, como "www.slackware.com" ou outro qualquer. Com essa opção devidamente configurada, você evitará o ataque chamado de "cache-poisoning", no qual o cracker coloca em seu DNS registros pra te enganar.

Após as opções, vem as zonas propriamente ditas.
A primeira que aparece é a zona raiz (lembra? Aquela que é representada por um ponto?). É neste arquivo que ficam os endereços de servidor DNS da zona raiz, que como vimos são necessários para podermos acessar endereços de fora da nossa rede (Internet). Você deve baixar esse arquivo e mantê-lo atualizado se o seu servidor DNS for válido na Internet. Você pode baixá-lo por ftp :

# ftp ftp.internic.net
ftp> cd domain
ftp> get named.root
ftp> exit

Pronto, agora é só você mover esse arquivo de acordo com o nosso exemplo:
# mv named.root /var/named/caching-example/named.ca
A próxima zona é da configuração do nosso localhost. Aqui você não precisa fazer nada.
A próxima zona é a zona reversa para o nosso localhost, que no caso é o endereço loopback 127.0.0.1. Você não precisa fazer nada aqui também.
A próxima zona é a zona reversa para o nosso domínio que ainda vamos configurar. Por enquanto apenas crie o arquivo de configuração domain.rev em /var/named/caching-example. Aqui você vê a opção allow-transfer habilitando a transferência da zona reversa do nosso domínio apenas para o servidor 192.168.0.2, que seria o servidor secundário.
A próxima zona, é a zona do nosso domínio proposto aqui nesse artigo, a zona slacks.com.br. Como você pode ver ela é do tipo master, e só está habilitada a transferência dessa zona pelo IP 192.168.0.2, que seria o nosso secundário. Por enquanto, apenas crie o arquivo slacks.host no diretório /var/named/caching-example.
Alguns lembretes: Preste MUITA atenção na sintaxe do arquivo, para não esquecer nenhuma chave, ponto e vírgula, ou um único ponto, pois caso esqueça de apenas um único ";", o servidor NÃO FUNCIONARÁ. Comentários nesse arquivo começam com "//".
A zona reversa
Bom, o arquivo named.conf já está pronto! Agora iremos editar dois arquivos para que o nosso domínio funcione. Sim, são aqueles dois arquivos que nós criamos, o domain.rev e o slacks.host.
Abaixo segue o conteúdo do arquivo de domínio reverso, o domain.rev.
$TTL 86400
$ORIGIN slacks.com.br.
0.168.192.in-addr.arpa IN SOA servidor.slacks.com.br. root.servidor.slacks.com.br. (
&n bsp; 2004101901 ; Serial de sincronização
&n bsp; 3H ; refresh
&n bsp; 15M ; retry
&n bsp; 1W ; expiry
&n bsp; 1D ) ; minimum
NS dns.slacks.com.br.
1 IN PTR ftp
1 IN PTR www
2 IN PTR dns2
1 IN PTR smtp
E agora uma breve explicação:
O $TTL se refere ao time-to-live, o tempo de vida do registro que é medido em segundos. Então, no nosso exemplo, o tempo de vida é de 86400 segundos.
$ORIGIN é uma variável que o BIND usa para registros que não entende. É onde você coloca o nome do seu domínio em qualquer registro não-qualificado. Para entender melhor: ao invés de num registro você colocar isso:
www.slacks.com.br. IN A 192.168.0.1
Com o uso da diretiva $ORIGIN, bastará fazer isso:
www IN A 192.168.0.1
Entendeu? Ao fazermos referência ao site www.slacks.com.br, bastará colocar www, que o nome do domínio será adicionado automaticamente.
Na terceira linha nós temos 0.168.192.in-addr.arpa, que é o nome padrão da nossa zona reversa. Só para lembrar, zona reversa é aquela que definimos para que as consultas inversas sejam atendidas, ou seja, quando temos o IP, mas não temos o nome. Em seguida temos IN SOA, que indica um Start of authority, que é utilizado para a parametrização do servidor, indicando um início de autoridade. A seguir colocamos o nome da máquina (que você tem registrado em /etc/hosts) + o nosso domínio. E por último o nome do responsável pelo domínio.
Em seguida, entre parênteses, temos 5 números, que dizem ao relacionamento entre o servidor primário com o secundário:
* 2004101901 - Como comentado é o serial de sincronização, entre os servidores, é formado pela data + valor inicial. No nosso caso é 19/10/2004, com valor inicial 01. O valor dessa serial deve ser alterado sempre que houver alguma modificação nesse arquivo, para que o servidor secundário possa sincronizar-se com o master.
* 3H - É o valor de refresh, o intervalo de tempo que o servidor secundário efetuará uma consulta do número de série do servidor master e realizar a sincronização caso necessário. No nosso caso é 3 horas
* 15M - Intervalo de tempo em que o servidor fará um retry (nova consulta), em caso de por algum motivo haja u ma falha de comunicação ao contatar pela primeira vez.
* 1W - Tempo de expiração dos registros em cache no servidor secundário. No nosso caso é uma semana.
* 1D - O mínimo em que se manterá os registros em cache, neste caso é um dia.

Em seguida temos NS dns.slacks.com.br, que está informando qual é o servidor DNS do domínio.
Em seguida, temos os registros do tipo PTR (Point Record), que são utilizados para informar quais são os endereços inversos da zona reversa. O 1 IN PTR www, está nos informando que o IP 192.168.0.1, atende pelo nosso "www".
Configurando o domínio
Bom, agora que já configuramos a zona reversa, vamos configurar o arquivo slacks.host, que tem os registros do nosso domínio. Veja o arquivo abaixo:
$TTL 86400
@ IN SOA servidor.slacks.com.br. root.servidor.slacks.com.br. (
2004101901 ;Serial de sincronização
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
NS dns.slacks.com.br.
IN MX 10 slacks.com.br.

localhost IN A 127.0.0.1

slacks.com.br. IN A 192.168.0.1
dns IN A 192.168.0.1
dns2 IN A 192.168.0.2
www IN A 192.168.0.1
ftp IN A 192.168.0.1
mail IN CNAME slacks.com.br.
pop IN CNAME slacks.com.br.
router IN A 192.168.0.5
Agora a explicação:
A primeira linha refere-se ao TTL (time to live), e aqui tem a mesma função explicada anteriormente.
Na segunda linha tem-se o '@', que significa 'neste servidor'. Em seguida temos o 'IN SOA' (Start of Authority), que indica que os registros seguintes contém informações autoritativas sobre o domínio, depois tem o nome do servidor juntamente com o nome do domínio, e por último o responsável pelo domínio, que no nosso caso é o root.
Depois, entre parênteses, temos novamente informações que dizem a respeito à interação entre servidor primário e secundário, e seu funcionamento é exatamente igual ao que já foi explicado juntamente com arquivo anterior.
A seguir temos a linha com a opção 'NS' (name server), que nos indica qual é o servidor de nomes do master do domínio. Após, temos uma entrada 'MX', que indica que o servidor de e-mails principal está no domínio slacks.com.br.
O número (10) indica a prioridade do servidor (caso houvesse mais de 1 servidor de e-mail), quanto menor esse número, maior a prioridade.
Em seguida temos as traduções propriamente ditas, utilizando-se a diretiva 'IN A', que faz o mapeamento de nome para IP. Também você pode observar o 'CNAME', que associa um apelido da máquina com seu nome de máquina canônico. No nosso exemplo, podemos observar que nossos servidores ftp, http, de e-mail, além do próprio DNS estão na mesma máquina e que o que seria nosso servidor secundário está em outra máquina, com IP 192.168.0.2.
Bom, agora que está tudo configurado, salve esses arquivos e starte o BIND.
# /etc/rc.d/rc.bind start
Conclusão
Pronto. Agora está tudo certinho! Experimente dar um ping para o www, por exemplo:
$ ping www.slacks.com.br
Se obtiver resposta, então está OK!!
Uma última observação: quando for colocar em seus arquivos de registro referência a domínios, não esqueça de colocar o "." no final.
Exemplo: slacks.com.br (isto está errado, pois faltou o ponto).
Bom, este é meu primeiro artigo sobre Linux que coloco na Internet. Qualquer crítica construtiva, errata ou dúvida, estarei na área.
Por: Alex Sandro Gonzales Rodrigues

Nenhum comentário:

Postar um comentário