DNS

De IFRS Campus Canoas
Revisão de 20h02min de 11 de abril de 2016 por Vinicius.alves (Discussão | contribs) (Log)

Ir para: navegação, pesquisa

Servidor de DNS

Neste tutorial será mostrado como montar um servidor de DNS autoritativo e recursivo no mesmo servidor respeitando regras de acesso utilizando views[1].

Também será criada uma zona fictícia exemplo.ifrs.edu.br com sua respectiva zona reversa em IPv4 e IPv6 para receber consultas externas.

Informações iniciais

Domínio: exemplo.ifrs.edu.br

IPv4: 192.0.2.4

IPv6: 2001:0DB8::4

Hostname: dns1.exemplo.ifrs.edu.br

S.O.: Debian 8 (Jessie)

Versão BIND: 9.9.5-9

Instalação do BIND

# apt-get install bind9 -y

Configuração

Editar o arquivo de configuração /etc/bind/named.conf.options

options {
       directory "/var/cache/bind";
       statistics-file "/var/log/bind/named.stats";
       memstatistics-file "/var/log/bind/mem.stats";
       dnssec-enable yes;
       dnssec-validation auto;
       auth-nxdomain no;    # conform to RFC1035
       listen-on-v6 { any; };
       version "named";
};

Zona exemplo.ifrs.edu.br

Para melhor organização, crie uma pasta para armazenar os arquivos de zonas:

# mkdir /etc/bind/zonas/

Arquivo /etc/bind/zonas/exemplo.ifrs.edu.br

$TTL 86400
@                       IN      SOA     dns1.exemplo.ifrs.edu.br.  admin.exemplo.ifrs.edu.br. (
           2016040601  ; Serial                                    ; Padrão AAAAMMDDNA (NA = Número de alterções do dia)
           3H          ; Refresh
           1H          ; Retry
           1W          ; Expire
           1D)         ; Minimum TTL
; Servidores DNS
@                       IN      NS      dns1.exemplo.ifrs.edu.br.
;
dns1                    IN      A       192.0.2.4
dns1                    IN      AAAA    2001:0DB8::4

Zonas reversa IPv4

Arquivo /etc/bind/zonas/exemplo.ifrs.edu.br.rev

;$ORIGIN        2.0.192.in-addr.arpa.
$TTL 86400
@  IN SOA dns1.exemplo.ifrs.edu.br.  admin.exemplo.ifrs.edu.br. (
           2016030501  ; Serial       ; Padrão AAAAMMDDNA (NA = Número de alterções do dia)
           3H          ; Refresh
           1H          ; Retry
           1W          ; Expire
           1D)         ; Minimum TTL
; Servidores DNS
@       IN      NS      dns1.exemplo.ifrs.edu.br.

Zonas reversa IPv6

Arquivo /etc/bind/zonas/exemplo.ifrs.edu.br.rev.ipv6

;$ORIGIN        0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
;Bloco IPv6 2001:0DB8::/48
$TTL 86400
@  IN SOA dns1.exemplo.ifrs.edu.br.  admin.exemplo.ifrs.edu.br. (
           2016032401  ; Serial      ; Padrão AAAAMMDDNA (NA = Número de alterções do dia)
           3H          ; Refresh
           1H          ; Retry
           1W          ; Expire
           1D)         ; Minimum TTL
; Servidores DNS
@       IN      NS      dns1.exemplo.ifrs.edu.br.
; Nomes de Maquinas
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     dns1.exemplo.ifrs.edu.br.

Views

Agora é necessário referenciar as zonas criadas no arquivo named.conf.local e colocar estas zonas em views para limitar o acesso interno e externo.

A view "dns_recursivo" é destinado para somente acesso local em uma rede interna, o parâmetro "match-clients", "allow-recursion" e "recursion = no" realizam esta regra.

A view "dns_autoritativo" é destinado para acesso externo onde outros servidores de DNS irão acessar este servidor e realizar o cache o parâmetro "match-clients" e "recursion = no" realizam esta regra.

Arquivo /etc/bind/named.conf.local

acl rede_local { ::1; localhost; 192.0.2.0/24; 2001:0db8::/48; };
view "dns_recursivo" {
       match-clients { rede_local; };
       allow-recursion { rede_local; };
       recursion yes;                          // Parâmetro importante!
       // Zona exemplo
       zone "exemplo.ifrs.edu.br" {
               type master;
               allow-transfer { none; };
               allow-update{ none; };
               file "/etc/bind/zonas/exemplo.ifrs.edu.br";
       };
       // Zona reversa IPv4
       zone "2.0.192.in-addr.arpa" {
               type master;
               allow-transfer { none; };
               allow-update{ none; };
               file "/etc/bind/zonas/exemplo.ifrs.edu.br.rev";
       };
       // Zona reversa IPv6
       zone "0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa." {
               type master;
               allow-transfer { none; };
               allow-update{ none; };
               file "/etc/bind/zonas/exemplo.ifrs.edu.br.rev.ipv6";
       };
       // Zonas padrão.
       zone "." {
             type hint;
             file "/etc/bind/db.root";
       };
       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";
       };
};
view "dns_autoritativo" {
       match-clients { any; };
       recursion no;              // Parâmetro importante!
       additional-from-auth no;
       additional-from-cache no;
       // Zona exemplo
       zone "exemplo.ifrs.edu.br" {
               type master;
               file "/etc/bind/zonas/exemplo.ifrs.edu.br";
               zone-statistics yes;
       };
       // Zona reversa IPv4
       zone "2.0.192.in-addr.arpa" {
               type master;
               file "/etc/bind/zonas/exemplo.ifrs.edu.br.rev";
               allow-transfer { IP.SERVDOR.SLAVE; };
               allow-update{ none; };
               also-notify { IP.SERVDOR.SLAVE; };
               notify yes;
               zone-statistics yes;
       };
       // Zona reversa IPv6
       zone "0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa." {
               type master;
               file "/etc/bind/zonas/exemplo.ifrs.edu.br.rev.ipv6";
               allow-transfer { IP.SERVDOR.SLAVE; };
               allow-update{ none; };
               also-notify { IP.SERVDOR.SLAVE; };
               notify yes;
               zone-statistics yes;
       };
};


Para finalizar comente todas as linha do arquivo /etc/bind/named.conf.default-zones.

Testes

Utilize o comando para testar os arquivos de zonas:

# named-checkzone exemplo.ifrs.edu.br zonas/exemplo.ifrs.edu.br
# named-checkzone 2.0.192.in-addr.arpa zonas/exemplo.ifrs.edu.br.rev
# named-checkzone 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa zonas/exemplo.ifrs.edu.br.rev.ipv6

e o comando abaixo para testar o arquivo de configuração:

# named-checkconf /etc/bind/named.conf.local

Reiniciar o serviço

Se tudo estiver correto reinicie o serviço bind9:

# systemctl restart bind9.service

Recomendações

Sempre que precisar alterar algum registro nos arquivos de zonas é necessário incrementar o número Serial que consta no início do arquivo, caso contrário a atualização não irá se propagar para outros servidores secundários e servidores DNS no mundo, também é necessário recarregar o serviço.

Como o bind sempre utiliza a memória para realizar cache das consultas realizadas pelos computadores clientes, utilize o comando abaixo sempre que for necessário recarregar alguma alteração de configuração para que este cache não seja perdido.

# rndc reload

Altere o dns do sistema operacional para utilizar o próprio IP alterando o arquivo /etc/resolv.conf

domain canoas.ifrs.edu.br
search canoas.ifrs.edu.br
nameserver 192.0.2.4

Log

Inclua no arquivo /etc/bind/named.conf os seguintes parâmetros para gerar logs de acesso[2]:

logging {
channel all.log {     // Log de tudo
       file "/var/log/bind/all.log" versions unlimited size 30m;
       severity debug 1;
       print-time yes;
       print-category yes;
       print-severity yes;
   };
channel transferout.log {      // Log de atualização de servidores secundários.
       file "/var/log/bind/transferout.log" versions unlimited size 30m;
       severity debug;
       print-time yes;
       print-category yes;
       print-severity yes;
   };
channel query.log {      // Log de consultas
       file "/var/log/bind/query.log" versions unlimited size 30m;
       severity debug;
       print-time yes;
       print-category yes;
       print-severity yes;
   };
category xfer-out { transferout.log; };
category queries { query.log; };
category default { all.log; }; };

Referências

  1. http://www.cert.br/docs/whitepapers/dns-recursivo-aberto/
  2. http://www.zytrax.com/books/dns/ch7/logging.html