Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

linux:artigos:bind_chroot [13/01/2015 10:44] (atual)
Linha 1: Linha 1:
 +~~NOTOC~~
 +====== Configurando o Bind9 para modo chroot - HOWTO ======
 +
 +**Observações:​**
 +  * Iremos levar em consideração que você possui uma instalação "​limpa"​ do S.O. Debian GNU/Linux.
 +
 +===== Instalando o pacote =====
 +
 +<​code>​
 +root@debian:​~#​ aptitude install bind9 dnsutils -y
 +</​code>​
 +
 +Antes de continuarmos,​ é necessário parar o serviço DNS, caso contrário, poderá ocorrer um erro com a chave //​rndc-key//​.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​bind9 stop
 +</​code>​
 +
 +===== Criando o ambiente =====
 +
 +Em seguida, vamos criar os diretórios necessários para o funcionamento do //bind9// em //chroot//.
 +
 +<​code>​
 +root@debian:​~#​ mkdir -p /​srv/​bind/​etc
 +root@debian:​~#​ mkdir -p /​srv/​bind/​dev
 +root@debian:​~#​ mkdir -p /​srv/​bind/​var/​cache/​bind
 +root@debian:​~#​ mkdir -p /​srv/​bind/​var/​log
 +root@debian:​~#​ mkdir -p /​srv/​bind/​var/​run/​bind/​run
 +root@debian:​~#​ touch /​srv/​bind/​var/​cache/​bind/​managed-keys.bind
 +</​code>​
 +
 +Agora vamos mover a estrutura tradicional para o modo //chroot//.
 +
 +<​code>​
 +root@debian:​~#​ mv /etc/bind /​srv/​bind/​etc
 +</​code>​
 +
 +Para evitar problemas com atualização do sistema operacional,​ crie um link simbólico //​**/​etc/​bind**//​ para //​**/​srv/​bind/​etc/​bind**//​.
 +
 +<​code>​
 +root@debian:​~#​ ln -s /​srv/​bind/​etc/​bind /etc/bind
 +</​code>​
 +
 +Em seguida, precisamos criar alguns dispositivos e ajustar algumas permissões.
 +
 +<​code>​
 +root@debian:​~#​ mknod /​srv/​bind/​dev/​null c 1 3
 +root@debian:​~#​ mknod /​srv/​bind/​dev/​random c 1 8
 +root@debian:​~#​ chmod 666 /​srv/​bind/​dev/​null
 +root@debian:​~#​ chmod 666 /​srv/​bind/​dev/​random
 +root@debian:​~#​ chown -R nobody:​nogroup /​srv/​bind/​var/​*
 +root@debian:​~#​ chown -R nobody:​nogroup /​srv/​bind/​etc/​bind
 +</​code>​
 +
 +===== Configurando o modo chroot =====
 +
 +Agora vamos configurar o //bind9// para operar em modo //chroot// e também configurar o //syslog// para logar as entradas do //bind9// em modo //chroot//.
 +
 +Primeiramente precisamos ajustar o //chroot//.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​default/​bind9
 +
 +# run resolvconf?
 +RESOLVCONF=yes
 +
 +# startup options for the server
 +#​OPTIONS="​-u bind"
 +OPTIONS="​-u nobody -t /​srv/​bind"​
 +</​code>​
 +
 +Onde:
 +
 +  * -u = especifica o usuário (nobody)
 +  * -t = especifica o diretório chroot, (/​var/​lib/​named). ​
 +
 +===== Testando seu servidor DNS =====
 +
 +Abra um terminal e digite:
 +
 +<​code>​
 +root@debian:​~#​ tail -f /​var/​log/​syslog
 +</​code>​
 +
 +Esse comando permite monitorar o arquivo de logs do //syslog// para verificar possíveis problemas.
 +
 +Em seguida reinicie os serviços //​sysklogd//​ e //bind9//.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​bind9 stop
 +root@debian:​~#​ /​etc/​init.d/​bind9 start
 +</​code>​
 +
 +Vamos verificar agora se o //bind9// está operando em modo //chroot//. Verifique os logs.
 +
 +<​code>​
 +root@debian:​~#​ tail -f /​var/​log/​syslog
 +
 +Nov  5 09:21:55 www named[5861]:​ shutting down: flushing changes
 +Nov  5 09:21:55 www named[5861]:​ stopping command channel on 127.0.0.1#​953
 +Nov  5 09:21:55 www named[5861]:​ stopping command channel on ::1#953
 +Nov  5 09:21:55 www named[5861]:​ no longer listening on ::#53
 +Nov  5 09:21:55 www named[5861]:​ no longer listening on 127.0.0.1#​53
 +Nov  5 09:21:55 www named[5861]:​ exiting
 +Nov  5 09:21:58 www named[6606]:​ starting BIND 9.3.4-P1.1 -u nobody -t /srv/bind
 +Nov  5 09:21:58 www named[6606]:​ found 1 CPU, using 1 worker thread
 +Nov  5 09:21:58 www named[6606]:​ loading configuration from '/​etc/​bind/​named.conf'​
 +Nov  5 09:21:58 www named[6606]:​ listening on IPv6 interfaces, port 53
 +Nov  5 09:21:58 www named[6606]:​ listening on IPv4 interface lo, 127.0.0.1#​53
 +Nov  5 09:21:58 www named[6606]:​ command channel listening on 127.0.0.1#​953
 +Nov  5 09:21:58 www named[6606]:​ command channel listening on ::1#953
 +Nov  5 09:21:58 www named[6606]:​ zone 0.in-addr.arpa/​IN:​ loaded serial 1
 +Nov  5 09:21:58 www named[6606]:​ zone 127.in-addr.arpa/​IN:​ loaded serial 1
 +Nov  5 09:21:58 www named[6606]:​ zone 255.in-addr.arpa/​IN:​ loaded serial 1
 +Nov  5 09:21:58 www named[6606]:​ zone localhost/​IN:​ loaded serial 1
 +Nov  5 09:21:58 www named[6606]:​ running
 +</​code>​
 +
 +NOTE: você sabe que está em modo //chroot// pois aparece no log as seguintes informações:​
 +
 +<​code>​
 +starting BIND 9.3.4-P1.1 -u nobody -t /srv/bind
 +</​code>​
 +
 +Para testar a resolução de nomes, edite o //​**/​etc/​resolv.conf**//​ e ajuste o IP do servidor DNS.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​resolv.conf
 +
 +nameserver 127.0.0.1
 +</​code>​
 +
 +E em seguida, teste!
 +
 +<​code>​
 +root@debian:​~#​ nslookup www.google.com.br
 +Server:​ 127.0.0.1
 +Address:​ 127.0.0.1#​53
 +
 +Non-authoritative answer:
 +www.google.com.br canonical name = www.google.com.
 +www.google.com canonical name = www.l.google.com.
 +Name:​ www.l.google.com
 +Address: 209.85.193.99
 +Name:​ www.l.google.com
 +Address: 209.85.193.104
 +</​code>​
 +
 +Também podemos testar com ping.
 +
 +<​code>​
 +root@debian:​~#​ ping www.google.com.br
 +PING www.l.google.com (209.85.193.104) 56(84) bytes of data.
 +64 bytes from br-in-f104.google.com (209.85.193.104):​ icmp_seq=1 ttl=247 time=7.12 ms
 +64 bytes from br-in-f104.google.com (209.85.193.104):​ icmp_seq=2 ttl=247 time=7.79 ms
 +64 bytes from br-in-f104.google.com (209.85.193.104):​ icmp_seq=3 ttl=247 time=8.21 ms
 +64 bytes from br-in-f104.google.com (209.85.193.104):​ icmp_seq=4 ttl=247 time=7.05 ms
 +
 +--- www.l.google.com ping statistics ---
 +8 packets transmitted,​ 8 received, 0% packet loss, time 7004ms
 +rtt min/​avg/​max/​mdev = 6.931/​7.953/​11.367/​1.355 ms
 +</​code>​
 +
 +Com isso, nosso servidor de DNS está configurado em modo //cache//, e pronto para ser utilizado desta forma.
 +
 +===== Configurando o Bind =====
 +
 +A primeira etapa é configurar os arquivos do servidor //bind9//.
 +
 +<​code>​
 +root@debian:​~#​ cd /​srv/​bind/​etc/​bind/​
 +</​code>​
 +
 +O primeiro arquivo a se ajustar é o **//​named.conf//​**. Verifique as entradas necessárias para alteração no exemplo a seguir:
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ vi named.conf
 +
 +include "/​etc/​bind/​named.conf.options";​
 +include "/​etc/​bind/​named.conf.log";​
 +include "/​etc/​bind/​named.conf.local";​
 +include "/​etc/​bind/​named.conf.default-zones";​
 +</​code>​
 +
 +Em seguida, vamos ajustar o **//​named.conf.options//​**.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ vi named.conf.options
 +
 +options {
 +        directory "/​var/​cache/​bind";​
 +
 +        // forwarders {
 +        //      0.0.0.0;
 +        // };
 +
 +        auth-nxdomain no;    # conform to RFC1035
 +        listen-on-v6 { no; };
 +
 +        listen-on { 127.0.0.1/​32;​ 72.233.78.144/​29;​ };
 +        allow-query { any; };
 +        allow-recursion { 127.0.0.1/​32;​ };
 +        allow-transfer { none; };
 +
 +        version "Não Disponível";​
 +};
 +</​code>​
 +
 +E por fim, vamos criar o **//​named.conf.log//​**.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ vi named.conf.log
 +
 +logging {
 +        channel update_debug {
 +                file "/​var/​log/​update_debug.log"​ versions 3 size 100k;
 +                severity debug;
 +                print-severity ​ yes;
 +                print-time ​     yes;
 +        };
 +        channel security_info {
 +                file "/​var/​log/​security_info.log"​ versions 1 size 100k;
 +                severity info;
 +                print-severity ​ yes;
 +                print-time ​     yes;
 +        };
 +        channel bind_log {
 +                file "/​var/​log/​bind.log"​ versions 3 size 1m;
 +                severity info;
 +                print-category ​ yes;
 +                print-severity ​ yes;
 +                print-time ​     yes;
 +        };
 +
 +        category default { bind_log; };
 +        category lame-servers { null; };
 +        category update { update_debug;​ };
 +        category update-security { update_debug;​ };
 +        category security { security_info;​ };
 +};
 +</​code>​
 +
 +Como este é um arquivo novo, precisamos ajustar a permissão dele.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ chown nobody.nogroup named.conf.log
 +</​code>​
 +
 +===== Configurando um domínio no Bind =====
 +
 +Agora vamos editar o arquivo **//​named.conf.local//​** e adicionar nosso domínio no servidor //bind9//.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ vi named.conf.local
 +
 +//
 +// Do any local configuration here
 +//
 +
 +// Consider adding the 1918 zones here, if they are not used in your
 +// organization
 +//include "/​etc/​bind/​zones.rfc1918";​
 +
 +zone "​dominio.com.br"​ {
 +        type master;
 +        file "​db.dominio.com.br";​
 +};
 +</​code>​
 +
 +Agora precisamos adicionar as entradas de domínio. Para isso, vamos alterar o diretório de armazenamento para mantermos a árvore //chroot//.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​etc/​bind#​ cd /​srv/​bind/​var/​cache/​bind/​
 +</​code>​
 +
 +E em seguida, criar o arquivo.
 +
 +<​code>​
 +root@debian:/​srv/​bind/​var/​cache/​bind#​ vi db.dominio.com.br ​
 +
 +$TTL 86400
 +@               IN SOA  dns.dominio.com.br. root.dns.dominio.com.br. (
 +                                      2007050701 ​ ; Serial
 +                                      10800       ; Refresh
 +                                      3600        ; Retry
 +                                      604800 ​     ; Expire
 +                                      86400 )     ; Minimum
 +; NS
 +@               IN NS   ​ns1.dominio.com.br.
 +@               IN NS   ​ns2.dominio.com.br.
 +@               IN MX   0 mail.dominio.com.br.
 +
 +; NAME SERVERS
 +@               IN A    200.1.1.1
 +dns             IN A    200.1.1.1
 +ns1             IN A    200.1.1.1
 +ns2             IN A    200.1.1.2
 +
 +; MAIL
 +mail            IN A    200.1.1.2
 +smtp            IN CNAME mail
 +pop             IN CNAME mail
 +webmail ​        IN CNAME mail
 +
 +; WEB
 +www             IN A    200.1.1.3
 +ftp             IN CNAME www
 +
 +; SPF
 +dominio.com.br. IN TXT "​v=spf1 a mx ip4:​200.1.1.0/​29 ~all"
 +</​code>​
 +
 +Um modelo deste arquivo pode ser obtido em: [[http://​downloads.fabriciovc.eti.br/​bind/​]].
 +
 +Com isso, já podemos reiniciar o serviço //bind9// e testar.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​bind9 stop
 +root@debian:​~#​ /​etc/​init.d/​bind9 start
 +</​code>​
 +
 +E para finalizar, vamos testar
 +
 +<​code>​
 +root@debian:​~#​ nslookup www.dominio.com.br
 +Server:​ 127.0.0.1
 +Address:​ 127.0.0.1#​53
 +
 +Non-authoritative answer:
 +Name:​ www.dominio.com.br
 +Address: 200.1.1.3
 +</​code>​
 +
 +----
 +<​html>​
 +<a href="​javascript:​window.history.go(-1)">​Voltar</​a>​
 +</​html>​
  
linux/artigos/bind_chroot.txt · Última modificação: 13/01/2015 10:44 (edição externa)