Bind9 em chroot no Debian Lenny

Instalação e configuração do Bind9 em chroot no Debian Lenny, utilizando um script pronto. Fácil, rápido e simples.

[ Hits: 17.058 ]

Por: Douglas Q. dos Santos em 22/10/2009 | Blog: http://wiki.douglasqsantos.com.br


O que é Bind



BIND (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato. Foi criado por quatro estudantes de graduação, membros de um grupo de pesquisas em ciência da computação da Universidade de Berkeley, e foi distribuído pela primeira vez com o sistema operacional BSD 4.3. O programador Paul Vixie, enquanto trabalhava para a empresa DEC, foi o primeiro mantenedor do BIND. Atualmente o BIND é suportado e mantido pelo Internet Systems Consortium.

Para a versão 9 o BIND foi praticamente reescrito. Ele passou a suportar, dentre outras funcionalidades, a extensão DNSSEC e os protocolos TSIG e IPv6.

História

O BIND foi escrito originalmente no início da década de 1980 em um projeto suportado pela agência DARPA. Em meados dos anos 80, funcionários da DEC assumiram o seu desenvolvimento. Um destes funcionários era Paul Vixie, que continuou o seu trabalho com o BIND após deixar a empresa. Ele ajudou na criação da organização ISC que se tornou responsável pela manutenção do programa.

O desenvolvimento do BIND 9 foi realizado através de uma combinação de contratos comerciais e militares. A maioria das funcionalidades do BIND 9 eram promovidas por empresas fornecedoras de sistemas Unix que queriam garantir que o BIND se manteria competitivo com as ofertas de servidores DNS da Microsoft. Por exemplo, a extensão de segurança DNSSEC foi financiada pelos militares estadunidenses que perceberam a importância da segurança para o servidor DNS.

Fonte: http://pt.wikipedia.org/wiki/BIND

Script para instalação e configuração do Bind9

O código abaixo pode ser obtido aqui.

#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#Sistema de Configuração de Servidores Bind9                                                            
#Desenvolvido por Douglas Q. dos Santos                                                      
#<douglashx@gmail.com>
# Criado em 19/10/2009 - Ultima alteração em 19/10/2009  
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

######################COMANDOS UTILIZADOS NO SCRIPT#############

APTITUDE=$(which aptitude)
CAT=$(which cat)
CHMOD=$(which chmod)
CHOWN=$(which chown)
DATA=$(which date)
LN=$(which ln)
MKDIR=$(which mkdir)
MKNOD=$(which mknod)
MV=$(which mv)
SLEEP=$(which sleep)
CUT=$(which cut)
############################################################

###################CAMINHO DA JAULA DO BIND######################
PATH_BIND="/var/lib/named"
############################################################

###################VARIÁVEIS PARA A CONFIGURAÇÃO DAS ZONAS#########
echo -n "Forneça o nome do domínio a ser configurado (dominio.com.br): "
read DOMAIN
echo -n "Forneça a faixa de IP da rede valida (ip/mask EX:10.10.10.0/24): "
read NETWORK_RANGE
echo -n "Forneça o endereço IP do servidor NS1 (ip): "
read NS1_IP
echo -n "Forneça o endereço IP do servidor NS2 (ip): "
read NS2_IP
echo -n "Forneça o endereço IP do servidor MX (ip): "
read MX_IP
echo -n "Forneça o endereço IP do servidor WWW (ip): "
read WWW_IP

echo
############################################################

######################INSTALAÇÃO DOS PACOTES####################
echo "A instalação sera iniciada em 5 segundos"
${SLEEP} 5

${APTITUDE} update
${APTITUDE} install bind9 dnsutils -y

/etc/init.d/bind9 stop
#############################################################

######################CRIAÇÃO DA ARVORE DE DIRETÓRIOS##############
${MKDIR} -p ${PATH_BIND}/etc
${MKDIR} -p ${PATH_BIND}/dev
${MKDIR} -p ${PATH_BIND}/var/cache/bind
${MKDIR} -p ${PATH_BIND}/var/run/bind/run
${MKNOD} ${PATH_BIND}/dev/null c 1 3
${MKNOD} ${PATH_BIND}/dev/random c 1 8

######################AJUSTANDO PERMISSÕES#######################
${CHMOD} 666 ${PATH_BIND}/dev/null ${PATH_BIND}/dev/random
${CHOWN} -R bind:bind ${PATH_BIND}/var/*

${MV} /etc/bind ${PATH_BIND}/etc
${LN} -s ${PATH_BIND}/etc/bind /etc/bind
${CHOWN} -R bind:bind ${PATH_BIND}/etc/bind


######################AJUSTANDO O ARQUIVO /etc/default/bind9############
${CAT} <<EOF > /etc/default/bind9
#/etc/default/bind9
RESOLVCONF=yes

# startup options for the server
#OPTIONS="-u bind"
OPTIONS="-u bind -t ${PATH_BIND}"
EOF
##############################################################


######################AJUSTANDO O ARQUIVO /etc/resolv.conf#############
${CAT} <<EOF > /etc/resolv.conf
domain ${DOMAIN}
nameserver 127.0.0.1
EOF
##############################################################

######################EXTRAINDO O ENDEREÇO REVERSO DO NS1###########
REV3=$(echo ${NS1_IP} | cut -d '.' -f 3)
REV2=$(echo ${NS1_IP} | cut -d '.' -f 2)
REV1=$(echo ${NS1_IP} | cut -d '.' -f 1)
IP_REVERSE=${REV3}.${REV2}.${REV1}


######################AJUSTANDO O ARQUIVO /etc/bind/named.conf.options#####
${MV} ${PATH_BIND}/etc/bind/named.conf.options ${PATH_BIND}/etc/bind/named.conf.options.orig
${CAT} <<EOF > ${PATH_BIND}/etc/bind/named.conf.options
options {
   directory "/var/cache/bind";
  
   // 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 and later use an unprivileged
   // port by default.
  
   // query-source address * port 53;
  
   // If your ISP provided one or more IP addresses for stable
   // nameservers, you probably want to use them as forwarders.
   // Uncomment the following block, and insert the addresses replacing
   // the all-0's placeholder.
  
   // forwarders {
   //      0.0.0.0;
   // };
  
   auth-nxdomain no;    # conform to RFC1035
   listen-on-v6 { any; };
  
   listen-on { 127.0.0.1/32; ${NETWORK_RANGE}; };
   allow-query { any; };
   allow-recursion { 127.0.0.1/32; };
   allow-transfer { none; };
   version "Nao disponível";
};
EOF
###############################################################

#######################AJUSTANDO O ARQUIVO /etc/bind/named.conf.local#######
${MV} ${PATH_BIND}/etc/bind/named.conf ${PATH_BIND}/etc/bind/named.conf.orig
${CAT} <<EOF > ${PATH_BIND}/etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
   type hint;
   file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
   type master;
   file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
   type master;
   file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
   type master;
   file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
   type master;
   file "/etc/bind/db.255";
};

zone "${DOMAIN}" {
   type master;
   file "db.${DOMAIN}";
   allow-transfer { ${NS2_IP}; };
};

zone "${IP_REVERSE}.in-addr.arpa" {
   type master;
   file "db.${IP_REVERSE}";
   allow-transfer { ${NS2_IP}; };
};

include "/etc/bind/named.conf.local";
EOF
#################################################################

###############AJUSTANDO O ARQUIVO /var/lib/named/var/cache/bind/db.dominio.com.br##
${CAT} <<EOF > ${PATH_BIND}/var/cache/bind/db.${DOMAIN}
`echo '$TTL 86400'`
@ IN SOA  dns.${DOMAIN}. root.dns.${DOMAIN}. (
                        `date +%Y%m%d`01  ; Serial
                        3600       ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        3600 )     ; Minimum

;
@      IN    NS   ${DOMAIN}.
@               IN   NS   ns1.${DOMAIN}.
@               IN    NS   ns2.${DOMAIN}.
@               IN    MX   0 mail.${DOMAIN}.

;NAME SERVERS
@               IN    A    ${NS1_IP}
ns1             IN    A    ${NS1_IP}
ns2             IN    A    ${NS2_IP}
dns             IN    A    ${NS1_IP}

;MAIL SERVERS
mail            IN    A    ${MX_IP}
imap            IN    CNAME mail
pop             IN    CNAME mail
smtp            IN    CNAME mail
webmail         IN    CNAME mail

;WEB SERVERS
adm             IN    A    ${WWW_IP}
www             IN    A    ${WWW_IP}
ftp             IN    CNAME www
dbadmin         IN    CNAME www
mailadmin       IN    CNAME www
EOF
#####################################################################

#####################RETIRANDO OS ENDEREÇOS FINAIS PARA O ARQUIVO REVERSO######
REV_NS1=$(echo ${NS1_IP} | cut -d '.' -f 4)
REV_NS2=$(echo ${NS2_IP} | cut -d '.' -f 4)
REV_MX=$(echo ${MX_IP} | cut -d '.' -f 4)
REV_WWW=$(echo ${WWW_IP} | cut -d '.' -f 4)
#####################################################################


##########AJUSTANDO O ARQUIVO /var/lib/named/var/cache/bind/db.10.10.10###############
${CAT} <<EOF > ${PATH_BIND}/var/cache/bind/db.${IP_REVERSE}
`echo '$TTL 86400'`
@ IN SOA  dns.${DOMAIN}. root.dns.${DOMAIN}. (
                        `date +%Y%m%d`01  ; Serial
                        3600       ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        3600 )     ; Minimum

;
@      IN    NS   ${DOMAIN}.
@               IN   NS   ns1.${DOMAIN}.
@               IN    NS   ns2.${DOMAIN}.
@               IN    MX   0 mail.${DOMAIN}.

;NAME SERVERS
${REV_NS1}      IN    PTR    ${DOMAIN}.
${REV_NS1}      IN    PTR    ns1.${DOMAIN}.
${REV_NS2}      IN    PTR    ns2.${DOMAIN}.
${REV_NS1}      IN    PTR    dns.${DOMAIN}.

;MAIL SERVERS
${REV_MX}       IN    PTR    mail.${DOMAIN}.

;WEB SERVERS
${REV_WWW}      IN    PTR    adm.${DOMAIN}.
${REV_WWW}      IN    PTR    www.${DOMAIN}.
EOF
####################################################################


#########################INICIANDO OS SERVIÇOS##########################
/etc/init.d/bind9 start
#/etc/init.d/bind9 start
####################################################################

###########################MENSAGEM DE FINALIZAÇÃO######################
echo
echo "INSTALAÇÃO FINALIZADA"
echo "Faca os ajustes necessários e reinicie o serviço *bind9*"
echo "Os Logs serão gerados no arquivo /var/log/syslog        "
echo
####################################################################
exit 0

    Próxima página

Páginas do artigo
   1. O que é Bind
   2. Considerações finais
Outros artigos deste autor

Apache em chroot + MySQL + PHP + mod_security + mod_evasive + vsftpd + Fail2ban + Debian Squeeze

Alta disponibilidade com Debian Lenny + Heartbeat + DRBD8 + OCFS2 + MONIT + LVS

Debian Lenny com Kernel 2.6.28 + Layer7 + Firewall

Bonding para Heartbeat + Bonding para DRBD + OCFS2 + Debian Squeeze

Um pouco sobre IPtables

Leitura recomendada

Instalando o Beryl + Drivers NVIDIA no Ubuntu 6.10 (Edgy)

Instalando e configurando um Webserver

OSPF + quagua + CentOS 5.3

Entendendo TCP/IP (parte 2) - Endereços IP

Instalando o bbpager do Blackbox

  
Comentários
[1] Comentário enviado por gorke em 23/10/2009 - 09:54h

Muito bom.

Estou atualizando meu servidor de Internet.
O script caiu do céu.

Só para garantir, fica minha dúvida.

Aqui uso ubuntu server 9.04. Ta tudo casa já que é Debian, mas não custa nada perguntar. :)

O script vai funcionar sem problemas?


[2] Comentário enviado por removido em 23/10/2009 - 10:08h

Ola.


Só confirme o nomes dos pacotes talvez seja a unica coisa que mude, pois o Ubuntu é baseado em debian então não é para dar erros.

E os arquivos de configurações do Script servem para as distribuições baseados no Debian.

Então Viva o Linux!!!


Qualquer coisa fico a disposição.

se precisar chamar no msn: quintilianodouglas@hotmail.com

O Meu próximo Script vai ser Bem mais fodinha do que esse ai.

Daqui uns dias estará por aqui.

Falow.


[3] Comentário enviado por grandmaster em 23/10/2009 - 10:09h

Vou fazer um teste com ele na VM em casa pra ver como fica.

Sempre bom automatizar as coisas :)

---
Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[4] Comentário enviado por ctavares em 25/10/2009 - 18:02h

douglashx, Parabéns pelo ótimo trabalho, se souber e puder me ajudar apenas me tire uma dúvida, para eu fazer desse servidor dns um dns secundário ou mesmo um DNS primário para um domínio Microsoft AD o que eu precisaria mudar nas configurações? Por exemplo o dominio de minha empresa é domuius.br e hoje tenho um DNS em Windows 2000 mas queria que o Linux fosse o segundo DNS ou mesmo o primário. Sabe me dizer?

[5] Comentário enviado por removido em 26/10/2009 - 07:59h

Ola,


Para interagir com o AD o DNS padrão para ele tem que ser o do Windows por que é todo integrado.

Por que quando você roda o DCPROMO no Windows para montar o AD ele já configura um DNS para a integração, dando a opção de configurar um servidor DNS.

O que você pode fazer é deixar o DNS do Linux como Encaminhadores no DNS do Windows, dai ele vai trabalhar para fazer o serviço pesado que é resolver endereços da Internet, e o DNS do Windows vai ficar resolvendo somente os endereços da sua rede.

Com isso você poderia colocar o DNS primario nas Estações de Trabalho sendo o do Windows e o secundário sendo o do Linux.

Por que ele vai perguntar primeiro para o DNS do AD a respeito da consulta do cliente e se não achar vai verificar no DNS do Windows se tem algum servidor configurado na opção de Encaminhadores se tiver aquele servidor vai fazer a consulta e retornar para o DNS do Windows, ou se estiver configurado como DNS secundario do cliente já vai responder para o Cliente.

Esta opção você pode configurar no DNS do Windows da seguinte maneira.
No menu iniciar/executar
digite: dnsmgmt.msc
vai abrir a janela de configuração do DNS.
Nesta janela tem o Nome do Seu Servidor e em ramificações as Zonas de pesquisa direta e inversas.
Com o botão direito do Mouse em cima do nome do servidor clique em propriedades.
Na guia Encaminhadores na parte de cima Tem a opção de quais dominios os encaminhadores vão resolver as consultas DNS.
Deixe a opção de Todos os outros dominios DNS.
E na parte de baixo na lista de endereços IP de encaminhadores do dominio selecionado.
Digite o ip do seu servidor DNS linux que ira resolver as consultas. e clique em Adicionar.
Clique dai em Aplicar e pronto.


Agora o DNS do Ad so vai resolver da rede interna e o DNS Linux vai fazer as consultas para a Internet.


Qualquer dúvida fico a Disposição.

Douglas.
msn: quintilianodouglas@hotmail.com

[6] Comentário enviado por ctavares em 26/10/2009 - 12:12h

Entendi, vou testar a forma como você descreveu, muito obrigado pela ajuda.


Contribuir com comentário