Mudanças entre as edições de "DNS"
| (18 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. | + | |
| + | 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 == | == Informações iniciais == | ||
| − | Domínio: exemplo. | + | Domínio: exemplo.com.br |
IPv4: 192.0.2.4 | IPv4: 192.0.2.4 | ||
| Linha 10: | Linha 11: | ||
IPv6: 2001:0DB8::4 | IPv6: 2001:0DB8::4 | ||
| − | Hostname: dns1.exemplo. | + | Hostname: dns1.exemplo.com.br |
S.O.: Debian 8 (Jessie) | S.O.: Debian 8 (Jessie) | ||
| Linha 34: | Linha 35: | ||
}; | }; | ||
| − | === Zona exemplo. | + | === Zona exemplo.com.br === |
| − | Arquivo /etc/bind/zonas/exemplo. | + | 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. | + | @ 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 46: | Linha 50: | ||
1D) ; Minimum TTL | 1D) ; Minimum TTL | ||
; Servidores DNS | ; Servidores DNS | ||
| − | @ IN NS dns1.exemplo. | + | @ IN NS dns1.exemplo.com.br. |
; | ; | ||
dns1 IN A 192.0.2.4 | dns1 IN A 192.0.2.4 | ||
| Linha 53: | Linha 57: | ||
=== Zonas reversa IPv4 === | === Zonas reversa IPv4 === | ||
| − | Arquivo /etc/bind/zonas/exemplo. | + | Arquivo /etc/bind/zonas/exemplo.com.br.rev |
| − | |||
$TTL 86400 | $TTL 86400 | ||
| − | @ IN SOA dns1.exemplo. | + | @ IN SOA dns1.exemplo.com.br. admin.exemplo.com.br. ( |
| − | 2016030501 ;Serial | + | 2016030501 ; Serial ; Padrão AAAAMMDDNA (NA = Número de alterções do dia) |
3H ; Refresh | 3H ; Refresh | ||
1H ; Retry | 1H ; Retry | ||
| Linha 64: | Linha 67: | ||
1D) ; Minimum TTL | 1D) ; Minimum TTL | ||
; Servidores DNS | ; Servidores DNS | ||
| − | @ IN NS dns1.exemplo. | + | @ IN NS dns1.exemplo.com.br. |
=== Zonas reversa IPv6 === | === Zonas reversa IPv6 === | ||
| − | Arquivo /etc/bind/zonas/exemplo. | + | Arquivo /etc/bind/zonas/exemplo.com.br.rev.ipv6 |
| − | |||
;Bloco IPv6 2001:0DB8::/48 | ;Bloco IPv6 2001:0DB8::/48 | ||
$TTL 86400 | $TTL 86400 | ||
| − | @ IN SOA dns1.exemplo. | + | @ IN SOA dns1.exemplo.com.br. admin.exemplo.com.br. ( |
| − | 2016032401 ;Serial | + | 2016032401 ; Serial ; Padrão AAAAMMDDNA (NA = Número de alterções do dia) |
3H ; Refresh | 3H ; Refresh | ||
1H ; Retry | 1H ; Retry | ||
| Linha 80: | Linha 82: | ||
1D) ; Minimum TTL | 1D) ; Minimum TTL | ||
; Servidores DNS | ; Servidores DNS | ||
| − | @ IN NS dns1.exemplo. | + | @ IN NS dns1.exemplo.com.br. |
; Nomes de Maquinas | ; 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. | + | 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
Índice
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