Instalando e configurando um servidor DNS (Bind+CHROOT) no Slackware

Nesse artigo explico como configurar um servidor DNS utilizando o BIND de uma maneira segura. Criei esse novo artigo atualizando o antigo e adicionando o CHROOT para melhor segurança do nosso sistema.

[ Hits: 322.165 ]

Por: João Paulo de Oliveira Faria em 14/03/2005 | Blog: http://www.jpfaria.com


Criando os arquivos de configuração



1 - Primeiramente precisamos gerar nossas config com as chaves com o seguinte comando:

# rndc-confgen

Você verá as seguintes informações:

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

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "Omr8iA0t9KOuW4jankgInQ==";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

O comando irá gerar dois conteúdos, um que vamos utilizar em /chroot/named/etc/rndc.conf e o outro para adicionar em /chroot/named/etc/named.conf.

LEMBRANDO QUE O SECRET MUDA DE GERAÇÃO PARA GERAÇÃO, PORTANDO SEU SECRET SERÁ DIFERENTE DO ACIMA.

2 - Crie o arquivo /chroot/named/etc/named.conf e coloque o conteúdo abaixo nele.

REPARE QUE EU COLOQUEI O CONTEÚDO QUE GERAMOS ACIMA, RETIRANDO SOMENTE AS TRALHAS

options {
        directory       "/conf";
        pid-file        "/var/run/named.pid";
        statistics-file "/var/run/named.stats";
        dump-file       "/var/run/named.db";
        transfer-format many-answers;
        # hide our "real" version number
        version         "[secured]";
};

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
       algorithm hmac-md5;
       secret "Omr8iA0t9KOuW4jankgInQ==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf


# The root nameservers
zone "." {
        type   hint;
        file   "db.rootcache";
};

# localhost - forward zone
zone    "localhost" {
        type    master;
        file   "db.localhost";
        notify  no;
};

# localhost - inverse zone
zone    "0.0.127.in-addr.arpa" {
        type   master;
        file   "db.127.0.0";
        notify no;
};

zone "meudomínio.com.br" in {
        type master;
        file "meudomínio.com.br.domain";
};

3 - Vamos criar o conteúdo do /chroot/named/etc/rndc.conf com o conteúdo gerado:

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

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

Agora vamos copiar o arquivo criado para /etc/rndc.conf:

# cp /chroot/named/etc/rndc.conf /etc/rndc.conf

4 - Vamos criar o /chroot/named/conf/db.rootcache com o seguinte comando:

# dig @a.root-servers.net . ns > /chroot/named/conf/db.rootcache

5 - Crie o arquivo /chroot/named/conf/db.localhost e coloque o conteúdo abaixo nele:

;
; db.localhost
;
$TTL    86400

@       IN SOA   @ root (
                   42              ; serial (d. adams)
                   3H              ; refresh
                   15M             ; retry
                   1W              ; expiry
                   1D )            ; minimum

        IN NS        @
        IN A         127.0.0.1

6 - Crie o arquivo /chroot/named/conf/db.127.0.0.0 e coloque o conteúdo abaixo nele:

;
; db.127.0.0
;
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                       1 ; Serial
                       28800      ; Refresh
                       14400      ; Retry
                       3600000    ; Expire
                       86400 )    ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.

7 - Crie o arquivo /chroot/named/conf/meudomínio.com.br.domain e coloque o conteúdo abaixo nele, lembrando que se você for criar um domínio com outro nome por exemplo.: uol.com.br, você deverá substituir meudomínio.com.br por uol.com.br, mesmo no nome do arquivo que estamos criando agora.

$TTL    86400
; Authoritative data for meudomínio.com.br
;
@    IN       SOA localhost. root.meudomínio.com.br. (
             2005011297      ; Serial (yymmddxx)
             10800           ; Refresh 3 hours
             3600            ; Retry   1 hour
             36000           ; Expire  10 hours
             86400 )         ; Minimum 24 hours
      IN       NS            ns1.meudomínio.com.br.
      IN       NS            ns2.meudomínio.com.br.

;
;Recebimento de mensagens de mail
;

meudomínio.com.br.  IN      MX      0       mx
meudomínio.com.br.  IN      MX     10       mx

localhost   IN       A             127.0.0.1
            IN       HINFO         INTEL/110       LINUX
ns1         IN       A             100.100.100.100
ns2         IN       A             100.100.100.100
mx          IN       A             100.100.100.100
smtp        IN       A             100.100.100.100
pop         IN       A             100.100.100.100
www         IN       A             100.100.100.100
ftp         IN       A             100.100.100.100

OBS: Substitua o IP 100.100.100.100 para o IP correto.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Começando e organizando a instalação
   3. Preparando o CHROOT
   4. Criando os arquivos de configuração
   5. Criando o arquivo de permissão e de inicialização
   6. Excluindo a estrutura normal do named e alterando o resolv.conf
   7. Iniciando e testando
Outros artigos deste autor

Configurando o iptables-p2p no Slackware

Solução completa com o sendmail

Usando Spammer e SpamDomains no sendmail

Instalando o PostgreSQL no Slackware

Como hospedar um site/domínio de graça na sua casa

Leitura recomendada

Instalando o Linux direto do HD

A importância do ensino de Arte Digital nas comunidades da periferia de São Paulo

Montando um Media Server com o MediaTomb

BC: A sua calculadora programável no Linux

Instalação do Arch Linux com LVM + Luks

  
Comentários
[1] Comentário enviado por internero em 15/03/2005 - 13:57h

Excelente artigo!

um verdadeiro bê-a-bá de como instalar o BIND de uma forma segura!

Parabéns!

[2] Comentário enviado por agk em 17/03/2005 - 11:31h

Parabéns, está muito bom o artigo, apesar de ser para Slackware está bem explicado e fornece uma ótima base de conhecimento para poder instalar em outras distribuições.

[3] Comentário enviado por israel_agalmeida em 17/03/2005 - 11:50h

este artigo, resolveu meu problema com o DNS externo que esta bixado e nao funcionava direito como o named

Resolveu a te um Problema de e-mail,

[4] Comentário enviado por foxrcesar em 24/05/2005 - 20:37h

parabens pelo artigo, mas gostaria se possivel tirar algumas duvidas, por exemplo, para configurar um dns secundario, instalaria como no primario e copiaria os arquivos de configuração? qnd criasse um novo dominio vi em outros artigos sobre o alow transfer ip_secundario, como no secundario iria permitir essa transferencia? grato.

[5] Comentário enviado por Escadinha em 27/01/2006 - 21:55h

Gostei do artigo principalmente por tratar de um Slackware. Nunca tinha encontrado um tutorial passo a passo de bind para Slackware.
Segui todos os passos sem problemas.
O único problema que tive foi na hora de testar o bind.
Iniciei ele com o script rc.bind que criamos mas não houve nenhuma mensagem confirmando nada.
Dei um ps aux | grep bind e a mensagem que veio não foi nada parecida com a que devia aparecer.
Se alguem puder me ajudar eu agradeço.
Mas fora isso, provavelmente o erro foi meu mesmo, gostei muito do tutorial !!

[6] Comentário enviado por julinhoramones em 03/04/2006 - 15:56h

Ótimo artigo !!!!
Em relacao ao nosso amigo do VOL, Escadinha, saliento que:
o comando utilizado para realizar a filtragem da saida do comando ps aux, não irá retornar a palavra, pois simplesmente o daemon não possui este nome, e sim named.
Outra forma invés da listagem de processos ativos no sistema, seria a verificacao do status de portas em listen no sistema:
netstat -l -t -n -p |grep 53

T+

[7] Comentário enviado por wlademy em 04/05/2006 - 12:24h

Muito bom o artigo.
Tb me ajudou legal!
Meus parabens!
OBS: Implementei no FC5

Abraços!

Wl@demy
wlademy@gmail.com

[8] Comentário enviado por dtux em 10/08/2006 - 08:33h

eaí cara vou ver se fonuncia ou naum...
se der certo aki eu volto a escrever.....

[9] Comentário enviado por leaf em 11/10/2006 - 23:52h

Aew João Paulo ...

Fez um excelente artigo ...
Está de parabens ...

Abraço ...
Rafael

[10] Comentário enviado por leoberbert em 24/05/2007 - 14:54h

Congratulations pelo excelente artigo!!!!

Abração!!!

[11] Comentário enviado por renancortes em 15/06/2007 - 00:10h

aeee
mto blz o artigo parabens
soh q eu uso bsd fiz td no freebsd fazendo as mudancas e tal
mais ta ocorrendo um erro queria saber se algum de vcs
me ajuda...
olha quando vou colocar as permissoes da um erro na permissao chown root:root var/ invalid argument
ae do start no /etc/rc.d/rc.bind start
ae no fala assim

starting BIND 9.3.4 -t /chroot/named -u named -c /etc/named.conf
Jun 15 00:07:33 router named[33441]: command channel listening on 127.0.0.1#953
Jun 15 00:07:33 router named[33441]: errno2result.c:109: unexpected error:
Jun 15 00:07:33 router named[33441]: unable to convert errno to isc_result: 45: Operation not supported
Jun 15 00:07:33 router named[33441]: running
espero respostas obrigado =)

[12] Comentário enviado por rspaiva em 08/08/2007 - 12:18h

Excelente!! Instalei aqui no meu slack e foi tranquilo.... so que to com um probleminha quando consulto o DNS la pelo o registro, acusa falha no DNS (diz que o DNS não aceitou uma conexão DNS) e o status ta CREFUSED.... poderia me dar alguma dica ai.Grato
Ricardo Paiva. rspaiva@hotmail.com

[13] Comentário enviado por prgs.linux em 11/08/2007 - 11:24h

cara descobri uma forma bem parecida com essa sua de enjaular
assim que vc instala o dns pelo installpkg ele ja cria o diretorio dentro do /etc
entao vamos ao passo que fiz!!!!.............salientando que seu post fikou 10 e eu particulamente teste ele ...rsrsr

1- como root
#groupadd named
#adduser named

mkdir /etc/raiz
mkdir /etc/raiz/etc
mkdir /etc/raiz/var
mkdir /etc/raiz/var/named
mkdir /etc/raiz/var/run
mkdir /etc/raiz/var/run/named
mkdir /etc/raiz/dev
cp -R /var/named/* /etc/raiz/var/named
cp /etc/named.conf /etc/raiz/etc
ln /dev/random /etc/raiz/dev/random
chgrp named /etc/raiz/etc/named.conf
chown named /etc/raiz/var/run/named

agora e so inicializar o BIND

# /usr/sbin/named -u named -t /etc/raiz

Obs: para inicializar em todo boot
e so coloca-lo dentro do /etc/rc.d/rc.local



[14] Comentário enviado por escuro em 09/10/2007 - 11:49h

Ola João Paulo.
seu artigo esta muito bom. Parabéns.
porem.... quando efetuar o registro no site "registro.br".
ele acusa a DNS duplicado.

"Servidor DNS Slave 1: hostname duplicado"

Teria alguma solução ?

[15] Comentário enviado por gpr.ppg.br em 16/12/2007 - 02:56h


fiz www3.meusite.com.br

mas só no servidor que funciona.
como acesso pela rede intranet? o que pode estar errado?

abraços,
gpr.

[16] Comentário enviado por r0ckst4r em 18/12/2007 - 15:33h

#
# named.start
#
# Note: the path given to the "-c" parameter is relative
# to the jail's root, not the system root.
#
# Add "-n2" if you have multiple CPUs
#
# usage: named [-c conffile] [-d debuglevel] [-f|-g] [-n number_of_cpus]
# [-p port] [-s] [-t chrootdir] [-u username]

cd /chroot/named

# make sure the debugging-output file is writable by named
touch named.run
chown named:named named.run
chmod ug=rw,o=r named.run

PATH=/usr/local/sbin:$PATH named \
-t /chroot/named \
-u named \
-c /etc/named.conf

----------------

Lembrem-se, caso o endereço de instalação do named estiver diferente é necessário modificar o PATH...

PATH=/usr/sbin:$PATH named \

valew!

[17] Comentário enviado por malombrado em 26/12/2007 - 18:33h

Ola. gostaria de saber se e normal alguma lentidao... pois apos eu colocar o dns.. parece que a rede morreu xO... n presiza de nenhuma config de iptables?

[18] Comentário enviado por sequelinha em 24/01/2008 - 23:03h

Excelente Artigo ajudou muito valeu

[19] Comentário enviado por sequelinha em 25/01/2008 - 10:23h

Ola como que coloco no named.conf e na pasta secondaries as zonas secundarias
vlw

[20] Comentário enviado por fajo em 31/01/2008 - 19:36h

Tentei no Debian Etch mas o serviço não inicia

[21] Comentário enviado por diony em 24/04/2008 - 22:17h

Meus Parabéns!!!
Excelente Tutorial. Segui Seus Passos para configurar esse Servidor DNS e funcionou que é uma beleza!!!!
O Servidor DNS que configurei mudou totalmente... O Acesso SSH era muito lento acessando de outro link... Tipo entre o link IP Dedicado e o Speedy. Depois de configurar e ativar o BIND o Servidor mudou totalmente!!!! Ficou um avião!!!!!

Muito Obrigado Pelo Tutorial.

[22] Comentário enviado por xerxeslins em 25/07/2008 - 21:22h

Excelente tutorial!

Fiz tudo o que você disse com muita calma. Não acertei de primeira, mas depois ficou perfeito.

Valeu!!!

[23] Comentário enviado por l-x em 14/08/2008 - 11:50h

Esse tipo de configuração se aplica no debian, visto que o bind 9.5 q tenho aki cria uma pasta no /etc?????

[24] Comentário enviado por Marcelo_Reis em 12/09/2008 - 20:37h

Olá amigos.

Eu configurei o bind no meu server de firewall (Iptables), e minha duvida é qual o IP que eu devo colocar em "/chroot/named/conf/meudomínio.com.br.domain" substituindo ns1, n2 etc...?

Meu modem adsl, é roteado, e possui IP de internet fixo, para a rede externa ele usa 192.168.0.1, para o firewall na placa de rede externa ele está em dhcp 192.168.0.0/24, na placa de rede interna 10.0.0.1.

e qual dos Ip´s eu deveria colocar em resolv.conf? no momento está:
nameserver 192.168.0.1

No momento não faço muita questão de ter um dominio, seria mais para desafogar o trafego e agilizar o serviço, tipo um cache.

valeu!

[25] Comentário enviado por xuxurecordez em 04/11/2008 - 14:56h

E ae ... Obrigado pelo artigo, aqui esta funfando blza. Porem gostaria de saber como ficaria as configurações no slave, ja que ambos serao em CHROOT.

Fico no aguardo ..
Abração ae

[26] Comentário enviado por andriopj em 17/03/2009 - 21:39h

eu dei start
e me retornou o seguinte: # /etc/rc.d/rc.bind start
Starting named: done

[27] Comentário enviado por rensga em 14/05/2009 - 16:22h

Olá pessoal...

Pra mim funcionou tudo tranquilamente...
Entretanto, eu só consigo startar o bind na mao (/etc/rc.d/rc.bind start).
Quando eu tento automatizar a inicializacao do servidor colocando essa linha no /etc/rc.d/rc.local
Ele me aparece o seguinte erro:
"Starting named: named: chroot(): Permission denied"
Alguma sugestao???

Obrigado desde já
Léo Lenza

[28] Comentário enviado por diony em 30/05/2009 - 11:57h

Sim, Caro Amigo...

já deu permissão de execução ao script rc.bind dentro de /etc/rc.d/ ???

Caso não faça esses procedimentos...

# cd /etc/rc.d

# chmod +x rc.bind

Feito isso, você não precisará incluir o rc.bind dentro do arquivo rc.local para execução no boot.
Todos os arquivos que estiverem dentro da pasta rc.local será carregado no boot durante a inicialização do linux.
Obs: Somente serão carregados os arquivos na cor verde (arquivos com permissão de execução) caso sua distro seja slackware.

Remova a linha que você colocou no rc.local e digite os comando que eu passei acma e reinicie o linux.

Poste a Resposta se deu certo ou não.

Abraçoo.....

[29] Comentário enviado por ralfoasis em 18/06/2009 - 14:07h

Otimo , muitooo bommm mesmo !!! parabéns pelo artigo que mostra tudo simples e passo a passo!!!


Obrigado

forte abraço

[30] Comentário enviado por henriquefc em 07/01/2013 - 01:23h

Opa galera, gostaria de saber nessa configuração se consigo efetua-la com dns dinâmico, se consigo ao invés dos números, usar um endereço no-ip, ou melhor ainda, conseguir utilizar algum script que altera meu endereço ip automaticamente


Contribuir com comentário