sexta-feira, 30 de dezembro de 2011

Configurando o Bind9 para modo chroot - Debian Squeeze

BIND (Berkeley Internet Name Domain ou, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet.

Um servidor DNS tem função de resolver nomes. Como assim? Toda vez que você acessa a internet, como por exemplo o Rede Underground, você não está acessando redeunderground.blogspot.com, está acessando um endereço IP formado por 4 octetos (74.125.47.132). Imagine você ter que gravar números ao invés de nomes toda vez que você quiser acessar a internet, seria complicado... pra isso você configura o DNS para resolver isso pra você.

Mas e Chroot? O que é isso?

Devido ao sua larga utilização na internet, o Bind também é sujeito à detecção de falhas por hackers que ficam o dia inteiro tentando detonar a rede dos outros. Por conta disto se inventou um jeito de limitar o acesso de um determinado serviço dentro do servidor que é chamado de chroot.

Este sistema tem o objetivo de criar um mini-ambiente contendo apenas o necessário para aquele executável rodar com o propósito de minimizar uma possível invasão ao servidor. Este conceito chama-se Jail (engaiolar mesmo) o serviço, fazendo com que ele rode em um "cantinho" isolado do sistema.

Observações:
  • Iremos levar em consideração que você possui uma instalação “limpa” do S.O. Debian GNU/Linux.

Instalando o pacote

# aptitude install bind9 dnsutils

Antes de continuarmos, é necessário parar o serviço DNS, caso contrário, poderá ocorrer um erro com a chave rndc-key

# /etc/init.d/bind9 stop

Criando o ambiente

Em seguida, vamos criar os diretórios necessários para o funcionamento do bind9 em chroot

# mkdir -p /srv/bind/etc
# mkdir -p /srv/bind/dev
# mkdir -p /srv/bind/var/cache/bind
# mkdir -p /srv/bind/var/log
# mkdir -p /srv/bind/var/run/bind/run
# touch /srv/bind/var/cache/bind/managed-keys.bind

Agora vamos mover a estrutura tradicional para o modo chroot

# mv /etc/bind /srv/bind/etc

Para evitar problemas com atualização do sistema operacional, crie um link simbólico /etc/bind para /srv/bind/etc/bind.

# ln -s /srv/bind/etc/bind /etc/bind

Em seguida, precisamos criar alguns dispositivos e ajustar algumas permissões.

# mknod /srv/bind/dev/null c 1 3
# mknod /srv/bind/dev/random c 1 8
# chmod 666 /srv/bind/dev/null
# chmod 666 /srv/bind/dev/random
# chown -R nobody:nogroup /srv/bind/var/*
# chown -R nobody:nogroup /srv/bind/etc/bind

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.

# vim /etc/default/bind9

# run resolvconf?
RESOLVCONF=yes

# startup options for the server
#OPTIONS="-u bind"
OPTIONS="-u nobody -t /srv/bind"

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:

# tail -f /var/log/syslog

Esse comando permite monitorar o arquivo de logs do syslog para verificar possíveis problemas.
Em seguida reinicie os serviços sysklogd e bind9.

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

Vamos verificar agora se o bind9 está operando em modo chroot. Verifique os logs.

# 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
NOTE: você sabe que está em modo chroot pois aparece no log as seguintes informações:
starting BIND 9.3.4-P1.1 -u nobody -t /srv/bind

Para testar a resolução de nomes, edite o /etc/resolv.conf eajuste o IP do servidor DNS.

# vim /etc/resolv.conf
nameserver 127.0.0.1
E em seguida, teste!

# 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
Também podemos testar com ping.

# 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
Com isso, nosso servidor de DNS está configurado em modo cache, e pronto para ser utilizado desta forma. 

Configurando um domínio no Bind

A primeira etapa é configurar os arquivos do servidor bind9.

# cd /srv/bind/etc/bind/

O primeiro arquivo a se ajustar é o named.conf.options. Verifique as entradas necessárias para alteração no exemplo a seguir:

# vim /srv/bind/etc/bind/named.conf.options

options {
        directory "/var/cache/bind";

        // forwarders {
        //      0.0.0.0;
        // };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };

        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";
};
Em seguida, vamos editar o arquivo named.conf.local e adicionar nosso domínio no servidor bind9.

# vim /srv/bind/etc/bind/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";
};
Agora precisamos adicionar as entradas de domínio. Para isso, vamos criar o arquivo.

# vim /srv/bind/var/cache/bind/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
Com isso, já podemos reiniciar o serviço bind9 e testar.

# /etc/init.d/bind9 restart

E para finalizar, vamos testar

# 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


Fonte:FabricioVC

Nenhum comentário:

Postar um comentário

DropBox