Mudanças entre as edições de "DNS"

De IFRS Campus Canoas
Ir para: navegação, pesquisa
 
(24 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
== Servidor de DNS ==
 
== 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.
+
Neste tutorial será mostrado como montar um servidor de DNS autoritativo e recursivo no mesmo servidor respeitando regras de acesso utilizando views<ref>http://www.cert.br/docs/whitepapers/dns-recursivo-aberto/</ref>.
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 ===
+
Também será criada uma zona fictícia exemplo.com.br com sua respectiva zona reversa em IPv4 e IPv6 para receber consultas externas.
Domínio: exemplo.ifrs.edu.br
+
 
 +
== Informações iniciais ==
 +
Domínio: exemplo.com.br
  
 
IPv4: 192.0.2.4
 
IPv4: 192.0.2.4
  
 
IPv6: 2001:0DB8::4
 
IPv6: 2001:0DB8::4
 +
 +
Hostname: dns1.exemplo.com.br
  
 
S.O.: Debian 8 (Jessie)
 
S.O.: Debian 8 (Jessie)
  
=== Instalação do BIND ===
+
Versão BIND: 9.9.5-9
 +
 
 +
== Instalação do BIND ==
 
  # apt-get install bind9 -y
 
  # apt-get install bind9 -y
  
=== Configuração ===
+
== Configuração ==
  
 
Editar o arquivo de configuração /etc/bind/named.conf.options
 
Editar o arquivo de configuração /etc/bind/named.conf.options
Linha 30: Linha 35:
 
  };
 
  };
  
=== Criação da zona exemplo.ifrs.edu.br ===
+
=== Zona exemplo.com.br ===
  
Arquivo /etc/bind/zonas/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.com.br
  
 
  $TTL 86400
 
  $TTL 86400
  @                      IN      SOA    dns1.exemplo.ifrs.edu.br.       admin.exemplo.ifrs.edu.br. (
+
  @                      IN      SOA    dns1.exemplo.com.br. admin.exemplo.com.br. (
             2016040601  ; Serial
+
             2016040601  ; Serial                                   ; Padrão AAAAMMDDNA (NA = Número de alterções do dia)
 
             3H          ; Refresh
 
             3H          ; Refresh
 
             1H          ; Retry
 
             1H          ; Retry
Linha 42: Linha 50:
 
             1D)        ; Minimum TTL
 
             1D)        ; Minimum TTL
 
  ; Servidores DNS
 
  ; Servidores DNS
  @                      IN      NS      dns1.exemplo.ifrs.edu.br.
+
  @                      IN      NS      dns1.exemplo.com.br.
 
  ;
 
  ;
 
  dns1                    IN      A      192.0.2.4
 
  dns1                    IN      A      192.0.2.4
 
  dns1                    IN      AAAA    2001:0DB8::4
 
  dns1                    IN      AAAA    2001:0DB8::4
 +
 +
=== Zonas reversa IPv4 ===
 +
 +
Arquivo /etc/bind/zonas/exemplo.com.br.rev
 +
 +
$TTL 86400
 +
@  IN SOA dns1.exemplo.com.br.  admin.exemplo.com.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.com.br.
 +
 +
=== Zonas reversa IPv6 ===
 +
 +
Arquivo /etc/bind/zonas/exemplo.com.br.rev.ipv6
 +
 +
;Bloco IPv6 2001:0DB8::/48
 +
$TTL 86400
 +
@  IN SOA dns1.exemplo.com.br.  admin.exemplo.com.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.com.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.com.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.com.br" {
 +
                type master;
 +
                allow-transfer { none; };
 +
                allow-update{ none; };
 +
                file "/etc/bind/zonas/exemplo.com.br";
 +
        };
 +
        // Zona reversa IPv4
 +
        zone "2.0.192.in-addr.arpa" {
 +
                type master;
 +
                allow-transfer { none; };
 +
                allow-update{ none; };
 +
                file "/etc/bind/zonas/exemplo.com.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.com.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.com.br" {
 +
                type master;
 +
                file "/etc/bind/zonas/exemplo.com.br";
 +
                zone-statistics yes;
 +
        };
 +
        // Zona reversa IPv4
 +
        zone "2.0.192.in-addr.arpa" {
 +
                type master;
 +
                file "/etc/bind/zonas/exemplo.com.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.com.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.com.br zonas/exemplo.com.br
 +
# named-checkzone 2.0.192.in-addr.arpa zonas/exemplo.com.br.rev
 +
# named-checkzone 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa zonas/exemplo.com.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
 +
 +
== Observações ==
 +
Somente esta configuração relacionada ao reverso IPv4 e IPv6 não basta para que os endereços reversos funcionem corretamente pela internet, é necessário solicitar para o órgão gerenciador do domínio a autoridade sobre as zonas reversas, no caso para reverso IPv4 é através do contato: registro ARROBA rnp PONTO br e para IPv6 é: suporte ARROBA pop-rs PONTO br <ref>https://www.pop-ba.rnp.br/Site/ConfDNSReverso</ref>.
 +
== Log ==
 +
 +
Inclua no arquivo /etc/bind/named.conf os seguintes parâmetros para gerar logs de acesso<ref>http://www.zytrax.com/books/dns/ch7/logging.html</ref>:
 +
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; }; };
 +
 +
===Rotação do Log===
 +
 +
/var/log/query.log {
 +
    daily
 +
    rotate 7
 +
    compress
 +
    delaycompress
 +
    missingok
 +
    notifempty
 +
    su bind bind
 +
    create 0664 bind bind
 +
    postrotate
 +
      systemctl reload bind9.service > /dev/null
 +
    endscript
 +
}
 +
 +
logrotate -d /etc/logrotate.d/bind
 +
 +
== Ferramentas ==
 +
 +
No linux há a ferramenta de teste de dns chamado DIG, exemplos:
 +
 +
# dig exemplo.com.br
 +
# dig -x 192.0.2.4
 +
 +
Também há ferramentas online, que pode testar o DNS de fora da rede interna:
 +
 +
[http://www.digwebinterface.com/ DigWebInterface]
 +
 +
Validação de e-mail
 +
[http://www.mail-tester.com/ Mail Tester]
 +
 +
== Referências ==
 +
<references/>

Edição atual tal como às 15h28min de 22 de março de 2018

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.com.br com sua respectiva zona reversa em IPv4 e IPv6 para receber consultas externas.

Informações iniciais

Domínio: exemplo.com.br

IPv4: 192.0.2.4

IPv6: 2001:0DB8::4

Hostname: dns1.exemplo.com.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.com.br

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

# mkdir /etc/bind/zonas/

Arquivo /etc/bind/zonas/exemplo.com.br

$TTL 86400
@                       IN      SOA     dns1.exemplo.com.br.  admin.exemplo.com.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.com.br.
;
dns1                    IN      A       192.0.2.4
dns1                    IN      AAAA    2001:0DB8::4

Zonas reversa IPv4

Arquivo /etc/bind/zonas/exemplo.com.br.rev

$TTL 86400
@  IN SOA dns1.exemplo.com.br.  admin.exemplo.com.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.com.br.

Zonas reversa IPv6

Arquivo /etc/bind/zonas/exemplo.com.br.rev.ipv6

;Bloco IPv6 2001:0DB8::/48
$TTL 86400
@  IN SOA dns1.exemplo.com.br.  admin.exemplo.com.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.com.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.com.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.com.br" {
               type master;
               allow-transfer { none; };
               allow-update{ none; };
               file "/etc/bind/zonas/exemplo.com.br";
       };
       // Zona reversa IPv4
       zone "2.0.192.in-addr.arpa" {
               type master;
               allow-transfer { none; };
               allow-update{ none; };
               file "/etc/bind/zonas/exemplo.com.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.com.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.com.br" {
               type master;
               file "/etc/bind/zonas/exemplo.com.br";
               zone-statistics yes;
       };
       // Zona reversa IPv4
       zone "2.0.192.in-addr.arpa" {
               type master;
               file "/etc/bind/zonas/exemplo.com.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.com.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.com.br zonas/exemplo.com.br
# named-checkzone 2.0.192.in-addr.arpa zonas/exemplo.com.br.rev
# named-checkzone 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa zonas/exemplo.com.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

Observações

Somente esta configuração relacionada ao reverso IPv4 e IPv6 não basta para que os endereços reversos funcionem corretamente pela internet, é necessário solicitar para o órgão gerenciador do domínio a autoridade sobre as zonas reversas, no caso para reverso IPv4 é através do contato: registro ARROBA rnp PONTO br e para IPv6 é: suporte ARROBA pop-rs PONTO br [2].

Log

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

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; }; };

Rotação do Log

/var/log/query.log {
   daily
   rotate 7
   compress
   delaycompress
   missingok
   notifempty
   su bind bind
   create 0664 bind bind
   postrotate
     systemctl reload bind9.service > /dev/null
   endscript
}
logrotate -d /etc/logrotate.d/bind

Ferramentas

No linux há a ferramenta de teste de dns chamado DIG, exemplos:

# dig exemplo.com.br
# dig -x 192.0.2.4

Também há ferramentas online, que pode testar o DNS de fora da rede interna:

DigWebInterface

Validação de e-mail

Mail Tester

Referências

  1. http://www.cert.br/docs/whitepapers/dns-recursivo-aberto/
  2. https://www.pop-ba.rnp.br/Site/ConfDNSReverso
  3. http://www.zytrax.com/books/dns/ch7/logging.html