1. Tutorial DNS
3 PTT F´orum
David Robert Camargo de Campos <david@registro.br>
Rafael Dantas Justo <rafael@registro.br>
Wilson Rog´erio Lopes <wilson@registro.br>
Registro.br
Dezembro de 2009
1 / 135
2. Objetivos
Entender os conceitos de DNS
Configurar servidores autoritativos
Configurar servidores recursivos
Entender as diferen¸cas entre DNS e DNSSEC
Configurar corretamente o firewall
Testar performance dos servidores
Planejar escalabilidade de recursivos
Monitorar os servidores
2 / 135
3. Cronograma
1 DNS
Conceitos
Arquitetura
2 Servidores DNS Autoritativos
Cen´ario
Arquivos de Zona
Configura¸c˜ao BIND
Configura¸c˜ao NSD
3 Servidores DNS Recursivos
Cen´ario
Configura¸c˜ao BIND
Servidores DNS Recursivos abertos
4 Recursivo e Autoritativo
5 DNSSEC
Vulnerabilidades do DNS
Conceito
Configura¸c˜ao do Autoritativo
Configura¸c˜ao do Recursivo
6 Firewalls
DNS
EDNS0
Configura¸c˜ao
7 Testes de Performance
Recursivo
Autoritativo
8 Escalabilidade de Recursivos
9 Monitoramento
Autoritativo
Recursivo
3 / 135
5. DNS - Domain Name System
O Sistema de Nomes de Dom´ınio ´e um banco de dados distribu´ıdo. Isso
permite um controle local dos segmentos do banco de dados global,
embora os dados em cada segmento estejam dispon´ıveis em toda a rede
atrav´es de um esquema cliente-servidor.
- Arquitetura hier´arquica, dados dispostos em uma ´arvore invertida
- Distribu´ıda eficientemente, sistema descentralizado e com cache
- O principal prop´osito ´e a resolu¸c˜ao de nomes de dom´ınio em
endere¸cos IP e vice-versa
exemplo.foo.eng.br ←→ 200.160.10.251
www.cgi.br ←→ 200.160.4.2
www.registro.br ←→ 2001:12ff:0:2::3
5 / 135
7. Dom´ınio Vs Zona
Zona gov.br
Zona nom.br
Zona eng.br
Domínio br
Zona joao.silva.nom.brZona tutorial.foo.eng.br
Zona foo.eng.br
Zona br
"."
com
eng
br org
nom gov
foo
tutorial
joao
Zona fazenda.gov.br
fazenda
Delegação
silva
Delega¸c˜ao
Indica uma transferˆencia
de responsabilidade na
administra¸c˜ao apartir
daquele ponto na ´arvore
DNS
7 / 135
8. Resource Records
Os dados associados com os nomes de dom´ınio est˜ao contidos em
Resource Records ou RRs (Registro de Recursos)
S˜ao divididos em classes e tipos
Atualmente existe uma grande variedade de tipos
O conjunto de resource records com o mesmo nome de dom´ınio,
classe e tipo ´e denominado RRset
Alguns Tipos Comuns de Records
SOA Indica onde come¸ca a autoridade a zona
NS Indica um servidor de nomes para a zona
A Mapeamento de nome a endere¸co (IPv4)
AAAA Mapeamento de nome a endere¸co (IPv6)
MX Indica um mail exchanger para um nome (servidor de email)
CNAME Mapeia um nome alternativo (apelido)
PTR Mapeamento de endere¸co a nome
8 / 135
9. Tipos de servidores
Servidor Recursivo
Ao receber requisi¸c˜oes de resolu¸c˜ao de nomes, faz requisi¸c˜oes para os
servidores autoritativos e conforme a resposta recebida dos mesmos
continua a realizar requisi¸c˜oes para outros servidores autoritativos at´e
obter a resposta satisfat´oria
Servidor Autoritativo
Ao receber requisi¸c˜oes de resolu¸c˜ao de nome, responde um endere¸co caso
possua, uma referˆencia caso conhe¸ca o caminho da resolu¸c˜ao ou uma
nega¸c˜ao caso n˜ao conhe¸ca
9 / 135
10. Exemplo de requisi¸c˜ao de endere¸co
Supondo que o
cache est´a vazio ou
sem informa¸c˜oes de
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
Resolver
Servi¸co localizado
no cliente que tem
como
responsabilidade
resolver as
requisi¸c˜oes DNS
para diversos
aplicativos
10 / 135
11. Exemplo de requisi¸c˜ao de endere¸co
Supondo que o
cache est´a vazio ou
sem informa¸c˜oes de
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
11 / 135
16. Exemplo de requisi¸c˜ao de endere¸co
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
"."
BR
ENG
FOO
TUTORIAL
16 / 135
17. Exemplo de requisi¸c˜ao de endere¸co
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
200.160.10.251
"."
BR
ENG
FOO
TUTORIAL
17 / 135
18. Exemplo de requisi¸c˜ao de endere¸co
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
200.160.10.251
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
200.160.10.251
"."
BR
ENG
FOO
TUTORIAL
18 / 135
19. Exemplo de requisi¸c˜ao de endere¸co
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
200.160.10.251
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
200.160.10.251
"."
BR
ENG
FOO
TUTORIAL
19 / 135
20. Fluxo de dados
1 Resolver faz consultas no Recursivo
2 Recursivo faz consultas no Master ou Slave
3 Master tem a zona original (via arquivo ou Dynamic Update)
4 Slave recebe a zona do Master (AXFR ou IXFR)
20 / 135
22. Cen´ario
Organiza¸c˜ao Foo Engenharia Ltda.
Possui o dom´ınio foo.eng.br registrado no Registro.br;
Possui o bloco 200.160.0/24 designado de um provedor;
Possui o bloco 2001:12ff::/32 alocado pelo Registro.br.
Cliente A
Possui o dom´ınio a.foo.eng.br delegado pela organiza¸c˜ao Foo;
Possui o bloco 200.160.0.127/28 designado pela organiza¸c˜ao Foo.
Cliente B
Possui o dom´ınio b.foo.eng.br delegado pela organiza¸c˜ao Foo;
Possui o bloco 200.160.0.191/26 designado pela organiza¸c˜ao Foo.
22 / 135
25. Organiza¸c˜ao Foo - Arquivo de zona
db.foo.eng.br
foo.eng.br. 86400 IN SOA ns1.foo.eng.br. hostmaster.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona
foo.eng.br. 86400 IN NS ns1.foo.eng.br.
foo.eng.br. 86400 IN NS ns2.foo.eng.br.
;; Cliente A
a.foo.eng.br. 86400 IN NS ns1.a.foo.eng.br.
a.foo.eng.br. 86400 IN NS ns2.a.foo.eng.br.
;; Cliente B
b.foo.eng.br. 86400 IN NS ns1.b.foo.eng.br.
b.foo.eng.br. 86400 IN NS ns2.b.foo.eng.br.
25 / 135
26. Organiza¸c˜ao Foo - Arquivo de zona (continua¸c˜ao...)
db.foo.eng.br
;; Tradu¸c˜ao nomes → IPs (GLUEs)
ns1.foo.eng.br. 86400 IN A 200.160.0.1
ns2.foo.eng.br. 86400 IN A 200.160.0.2
ns1.foo.eng.br. 86400 IN AAAA 2001:12ff::1
ns2.foo.eng.br. 86400 IN AAAA 2001:12ff::2
ns1.a.foo.eng.br. 86400 IN A 200.160.0.128
ns2.a.foo.eng.br. 86400 IN A 200.160.0.129
ns1.b.foo.eng.br. 86400 IN A 200.160.0.192
ns2.b.foo.eng.br. 86400 IN A 200.160.0.193
;; Web server
www.foo.eng.br. 86400 IN A 200.160.0.3
www.foo.eng.br. 86400 IN AAAA 2001:12ff::3
26 / 135
27. Organiza¸c˜ao Foo - Arquivo de zona reverso IPv4
db.0.160.200.in-addr.arpa
0.160.200.in-addr.arpa. 172800 IN SOA ns1.foo.eng.br. hostmaster.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona reverso
0.160.200.in-addr.arpa. 172800 IN NS ns1.foo.eng.br.
0.160.200.in-addr.arpa. 172800 IN NS ns2.foo.eng.br.
;; Cliente A (200.160.0.127 → 200.160.0.142 = 200.160.0.127/28)
127/28.0.160.200.in-addr.arpa. 172800 IN NS ns1.a.foo.eng.br.
127/28.0.160.200.in-addr.arpa. 172800 IN NS ns2.a.foo.eng.br.
128.0.160.200.in-addr.arpa. 172800 IN CNAME 128.127/28.0.160.200.in-addr.arpa.
129.0.160.200.in-addr.arpa. 172800 IN CNAME 129.127/28.0.160.200.in-addr.arpa.
...
142.0.160.200.in-addr.arpa. 172800 IN CNAME 142.127/28.0.160.200.in-addr.arpa.
27 / 135
28. Organiza¸c˜ao Foo - Arquivo de zona reverso IPv4
db.0.160.200.in-addr.arpa (continua¸c˜ao...)
;; Cliente B (200.160.0.191 → 200.160.0.255 = 200.160.0.191/26)
191/26.0.160.200.in-addr.arpa. 172800 IN NS ns1.b.foo.eng.br.
191/26.0.160.200.in-addr.arpa. 172800 IN NS ns2.b.foo.eng.br.
192.0.160.200.in-addr.arpa. 172800 IN CNAME 192.127/28.0.160.200.in-addr.arpa.
193.0.160.200.in-addr.arpa. 172800 IN CNAME 193.127/28.0.160.200.in-addr.arpa.
...
254.0.160.200.in-addr.arpa. 172800 IN CNAME 254.127/28.0.160.200.in-addr.arpa.
;; Endere¸cos reversos
1.0.160.200.in-addr.arpa. 86400 IN PTR ns1.foo.eng.br.
2.0.160.200.in-addr.arpa. 86400 IN PTR ns2.foo.eng.br.
3.0.160.200.in-addr.arpa. 86400 IN PTR www.foo.eng.br.
...
28 / 135
29. Organiza¸c˜ao Foo - Arquivo de zona reverso IPv4
Mas por que ´e necess´ario o CNAME?
Porque a RFC 2317 recomenda;
Esta solu¸c˜ao n˜ao exige altera¸c˜oes nos softwares dos servidores DNS;
Altera¸c˜ao de hosts no reverso dos clientes n˜ao implicam em altera¸c˜oes
na zona reverso da organiza¸c˜ao Foo.
29 / 135
30. Organiza¸c˜ao Foo - Arquivo de zona reverso IPv6
db.f.f.2.1.1.0.0.2.ip6.arpa
f.f.2.1.1.0.0.2.ip6.arpa. 86400 IN SOA ns1.foo.eng.br. hostmaster.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona
f.f.2.1.1.0.0.2.ip6.arpa. 86400 IN NS ns1.foo.eng.br.
f.f.2.1.1.0.0.2.ip6.arpa. 86400 IN NS ns2.foo.eng.br.
°ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.2.1.1.0.0.2.ip6.arpa.
1 86400 IN PTR ns1.foo.eng.br.
2 86400 IN PTR ns2.foo.eng.br.
3 86400 IN PTR www.foo.eng.br.
Dificuldade
A inviabilidade de listar todos os reversos dos hosts de um bloco IPv6
gerou diversas discuss˜oes. O draft draft-howard-isp-ip6rdns-01 aborda este
tema.
30 / 135
31. Publica¸c˜ao de Reverso
Informa¸c˜ao
Para as delega¸c˜oes informadas diretamente na interface do Registro.br
(/24 ou maior) as publica¸c˜oes das altera¸c˜oes ocorrem a cada 4 horas com
´ınicio as 2hs.
31 / 135
32. Cliente A - Arquivo de zona
db.a.foo.eng.br
a.foo.eng.br. 86400 IN SOA ns1.a.foo.eng.br. hostmaster.a.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona
a.foo.eng.br. 86400 IN NS ns1.a.foo.eng.br.
a.foo.eng.br. 86400 IN NS ns2.a.foo.eng.br.
;; Tradu¸c˜ao nomes → IPs (GLUEs)
ns1.a.foo.eng.br. 86400 IN A 200.160.0.128
ns2.a.foo.eng.br. 86400 IN A 200.160.0.129
;; Web server
www.a.foo.eng.br. 86400 IN A 200.160.0.142
32 / 135
33. Cliente A - Arquivo de zona reverso
db.127.0.160.200.in-addr.arpa
127/28.0.160.200.in-addr.arpa. 172800 IN SOA ns1.a.foo.eng.br. hostmaster.a.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona reverso
127/28.0.160.200.in-addr.arpa. 172800 IN NS ns1.a.foo.eng.br.
127/28.0.160.200.in-addr.arpa. 172800 IN NS ns2.a.foo.eng.br.
;; Endere¸cos reversos
128.127/28.0.160.200.in-addr.arpa. 172800 IN PTR ns1.a.foo.eng.br.
129.127/28.0.160.200.in-addr.arpa. 172800 IN PTR ns2.a.foo.eng.br.
...
142.127/28.0.160.200.in-addr.arpa. 172800 IN PTR www.a.foo.eng.br.
33 / 135
34. Cliente B - Arquivo de zona
db.b.foo.eng.br
b.foo.eng.br. 86400 IN SOA ns1.b.foo.eng.br. hostmaster.b.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona
b.foo.eng.br. 86400 IN NS ns1.b.foo.eng.br.
b.foo.eng.br. 86400 IN NS ns2.b.foo.eng.br.
;; Tradu¸c˜ao nomes → IPs (GLUEs)
ns1.b.foo.eng.br. 86400 IN A 200.160.0.192
ns2.b.foo.eng.br. 86400 IN A 200.160.0.193
;; Web server
www.b.foo.eng.br. 86400 IN A 200.160.0.254
34 / 135
35. Cliente B - Arquivo de zona reverso
db.191.0.160.200.in-addr.arpa
191/26.0.160.200.in-addr.arpa. 172800 IN SOA ns1.b.foo.eng.br. hostmaster.b.foo.eng.br. (
2009120200 ; serial
3600 ; refresh
3600 ; retry
3600 ; expire
900 ) ; minimum
;; Servidores DNS que respondem por esta zona reverso
191/26.0.160.200.in-addr.arpa. 172800 IN NS ns1.b.foo.eng.br.
191/26.0.160.200.in-addr.arpa. 172800 IN NS ns2.b.foo.eng.br.
;; Endere¸cos reversos
192.191/26.0.160.200.in-addr.arpa. 172800 IN PTR ns1.b.foo.eng.br.
193.191/26.0.160.200.in-addr.arpa. 172800 IN PTR ns2.b.foo.eng.br.
...
254.191/26.0.160.200.in-addr.arpa. 172800 IN PTR www.b.foo.eng.br.
35 / 135
52. Cen´ario
A organiza¸c˜ao Foo deseja disponibilizar um servidor DNS recursivo para
sua infra-estrutura local e para todos os seus clientes. Este servidor DNS
recursivo ter´a o IPv4 200.160.0.6 e o IPv6 2001:12ff::6.
52 / 135
53. Organiza¸c˜ao Foo (BIND)
named.conf
acl clientes { 127.0.0.0/8; 200.160.0.0/24; 2001:12ff::/32; };
options {
listen-on { 127.0.0.1; 200.160.0.6; };
listen-on-v6 { 2001:12ff::6; };
directory ‘‘/etc’’;
pid-file ‘‘/var/run/named/pid’’;
statistics-file ‘‘/var/stats/named.stats’’;
allow-query { clientes; };
allow-query-cache { clientes; };
allow-recursion { clientes; };
max-cache-size 512M;
clients-per-query 0;
max-clients-per-query 0;
};
Aviso
N˜ao utilizem a op¸c˜ao “query-source”. Ao fixar uma porta de origem o
servidor DNS fica muito mais vulner´avel a ataques de polui¸c˜ao de cache.
Principalmente aos ataques descritos por Dan Kaminsky.
53 / 135
54. Organiza¸c˜ao Foo (BIND)
named.conf (continua¸c˜ao...)
logging {
channel all {
file ‘‘/var/log/named.log’’;
versions 5 size 1M;
print-time yes;
};
category default { all; };
category security { all; };
};
zone ‘‘.’’ {
type hint;
file ‘‘named.root’’;
};
zone ‘‘0.0.127.in-addr.arpa’’ {
type master;
file ‘‘db.127.0.0’’;
};
54 / 135
56. Cuidado com Recursivos Abertos!
Causa
O administrador n˜ao configura o servidor DNS recursivo para responder
apenas para os clientes de sua rede.
Efeito
Aceitam consultas DNS vindas de qualquer computador da Internet.
Possibilita ataques de amplifica¸c˜ao de respostas DNS e uso de banda por
terceiros.
Solu¸c˜ao
Configura¸c˜ao correta do firewall.
BIND:
acl clientes { 127.0.0.0/8; 200.160.0.0/24; };
allow-query { clientes; };
allow-query-cache { clientes; };
allow-recursion { clientes; };
NSD:
access-control: 0.0.0.0/0 refuse
access-control: 200.160.0.0/24 allow
access-control: 127.0.0.0/8 allow
56 / 135
59. Por que separar?
Motivo
Possibilita ataques ao servidor DNS recursivo;
Aumenta a complexidade na administra¸c˜ao do servidor.
Explicando...
Recursivo e autoritativo possui configura¸c˜oes de acesso diferentes;
As regras de firewalls s˜ao distintas;
Sem “recursos” para separar os servidores?
Para servidores DNS utilizando BIND a sintaxe “view” pode ser utilizada
para separar os cen´arios.
59 / 135
63. O que ´e DNSSEC?
Extens˜ao da tecnologia DNS
(o que existia continua a funcionar)
Possibilita maior seguran¸ca para o usu´ario na Internet
(corrige falhas do DNS)
O que garante?
Origem (Autenticidade)
Integridade
A n˜ao existˆencia de um nome ou tipo
O que N˜AO garante?
Confidencialidade
Prote¸c˜ao contra ataques de nega¸c˜ao de servi¸co (DOS)
63 / 135
64. O que ´e DNSSEC?
DNSSEC utiliza o conceito de chaves assim´etricas
− chave p´ublica e chave privada
64 / 135
65. O que ´e DNSSEC?
DNSSEC utiliza o conceito de chaves assim´etricas
− chave p´ublica e chave privada
65 / 135
66. O que ´e DNSSEC?
O resolver recursivo j´a
possui a chave p´ublica
da zona “.br”
ancorada.
66 / 135
67. O que ´e DNSSEC?
Nesta simula¸c˜ao de
resolu¸c˜ao supomos que
a raiz n˜ao est´a
assinada.
67 / 135
68. O que ´e DNSSEC?
Retorna sem resposta,
mas com referˆencia
para os Records: NS
do “.br”.
68 / 135
69. O que ´e DNSSEC?
O servidor recursivo
requisita a DNSKEY
ao verificar que o nome
da zona ´e igual ao
nome da zona que
consta em sua
trusted-key.
69 / 135
70. O que ´e DNSSEC?
O servidor DNS
responde enviando
DNSKEY e o RRSIG
70 / 135
71. O que ´e DNSSEC?
Compara a trusted-key
com a DNSKEY, caso
for v´alida continua
com as requisi¸c˜oes
71 / 135
73. O que ´e DNSSEC?
Retorna sem resposta,
mas com referˆencia
para os Records:
- NS do “foo.eng.br”
e com autoridade sobre
os Records:
- DS do “foo.eng.br”
- RRSIG do Record DS
73 / 135
74. O que ´e DNSSEC?
O servidor DNS
recursivo utiliza a
DNSKEY para checar
a assinatura (RRSIG)
do Record DS
74 / 135
77. O que ´e DNSSEC?
O servidor DNS
recursivo verifica
atrav´es do DS e da
DNSKEY, se este
servidor DNS ´e v´alido.
77 / 135
78. O que ´e DNSSEC?
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
78 / 135
79. O que ´e DNSSEC?
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
200.160.10.251
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
Retorna o Record A e
sua assinatura RRSIG.
79 / 135
80. O que ´e DNSSEC?
Resolver
Servidor DNS
Recursivo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
Servidor DNS
Autoritativo
exemplo.foo.eng.br?
exem
plo.foo.eng.br ?
Referencia servidores .br
exemplo.foo.eng.br ?
Referencia servidores foo.eng.br
exemplo.foo.eng.br ?
200.160.10.251
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
O servidor DNS
recursivo utiliza a
DNSKEY para checar
a assinatura (RRSIG)
do Record A
80 / 135
82. O que muda com DNSSEC no DNS autoritativo?
Startup
Gerar a chave assim´etrica;
Incluir a chave na zona;
Assinar a zona;
Mudar a referˆencia para o arquivo de zona nas configura¸c˜oes;
Incluir o DS na interface do Registro.br.
Manuten¸c˜ao
Reassinar periodicamente a zona.
82 / 135
83. E como fazer isso no DNS autoritativo? (BIND)
Startup
1 Execute o comando (gera um arquivo .key e um .private):
dnssec-keygen -f KSK -a RSASHA1 -b 1024 -n ZONE -r /dev/urandom foo.eng.br
2 Inclua no final do arquivo de zona db.foo.eng.br (incremente o SOA):
°include Kfoo.eng.br+005.5423.key
3 Execute o comando (gera um arquivo .signed):
dnssec-signzone -z -o foo.eng.br -e 20100102120000 db.foo.eng.br
4 Altere a referˆencia no arquivo de configura¸c˜ao named.conf:
file ‘‘db.foo.eng.br.signed’’;
5 Incluir o DS no website do Registro.br.
http://registro.br/cgi-bin/nicbr/dscheck
Manuten¸c˜ao
1 Altere o arquivo de zona db.foo.eng.br incrementando o SOA;
2 Execute o comando:
dnssec-signzone -z -o foo.eng.br -e 20100102120000 db.foo.eng.br
83 / 135
84. DNSSHIM - DNS Secure Hidden Master
http://registro.br/dnsshim/
Open-Source
Automatiza o processo de provisionamento de zonas
Suporte a DNSSEC
Interface Automatiz´avel
Manuten¸c˜ao de chaves/assinaturas
P´ublico Alvo
Provedores de hospedagem ou qualquer outra institui¸c˜ao respons´avel por
administrar servidores DNS autoritativos para muitas zonas
84 / 135
85. O que muda com DNSSEC no DNS recursivo?
Startup
Ancorar a chave p´ublica do.BR
Manuten¸c˜ao
Para servidores DNS com suporte a RFC 5011:
Nada!
Para servidores DNS sem suporte a RFC 5011:
Trocar a chave ancorada todas as vezes em que ocorrer um rollover
no .BR
85 / 135
86. E como fazer isso no DNS recursivo?
Startup
BIND (named.conf):
trusted-keys {
br. 257 3 5
‘‘AwEAAdDoVnG9CyHbPUL2rTnE22uN66gQCrUW5W0NTXJB
NmpZXP27w7PMNpyw3XCFQWP/XsT0pdzeEGJ400kdbbPq
Xr2lnmEtWMjj3Z/ejR8mZbJ/6OWJQ0k/2YOyo6Tiab1N
GbGfs513y6dy1hOFpz+peZzGsCmcaCsTAv+DP/wmm+hN
x94QqhVx0bmFUiCVUFKU3TS1GP415eykXvYDjNpy6AM=’’;
};
Unbound (unbound.conf):
trust-anchor: ‘‘br. DS 18457 5 1 1067149C134A5B5FF8FC5ED0996E4E9E50AC21B1’’
Manuten¸c˜ao
1 Obtenha a nova chave em https://registro.br/ksk/;
2 Ancore a nova chave no servidor DNS recursivo.
86 / 135
88. DNS
Definido nas RFCs 1034 e 1035;
Servidores aceitam consultas em transporte TCP/UDP, porta 53;
Payload maximo em transporte UDP de 512 bytes;
Payload maximo por mensagem DNS em TCP de 64 Kbytes.
88 / 135
89. DNS
Quando TCP ´e utilizado
Transferˆencias de zona (AXFR);
Respostas com payload maior do que 512 bytes:
1 Consulta inicial via UDP;
2 Resposta maior do que 512 bytes, flag TC e marcada para indicar que
sua resposta est´a truncada;
3 Cliente refaz consulta via TCP.
89 / 135
90. EDNS0 - Extension Mechanisms for DNS
Definido na RFC 2671;
Extens˜ao do protocolo DNS original para eliminar alguns limites do
protocolo;
Permite:
◮ mais flags e RCODEs ao cabe alho DNS;
◮ novos tipos de labels;
◮ payloads maiores em transporte UDP (limitado a 64 Kbytes);
◮ define um novo pseudo-RR: OPT.
90 / 135
91. EDNS0 - Extension Mechanisms for DNS
Depende de suporte tanto no cliente como no servidor;
Cliente envia consulta UDP com pseudo-RR OPT na se¸c˜ao Additional
da mensagem DNS, informando qual o tamanho m´aximo de respostas
UDP que pode processar;
Se servidor suportar EDNS0, pode aumentar o limite para o tamanho
da resposta que vai retornar ao cliente, evitando re-query via TCP;
Se servidor n˜ao suportar EDNS0, envia resposta com at´e 512 bytes de
payload DNS.
91 / 135
92. EDNS0 - Extension Mechanisms for DNS
Alguns exemplos de servidores que suportam EDNS0:
Bind (desde 8.3.x - 2001);
Microsoft DNS server (Windows 2003);
NSD (auth only - desde 1.x - 2003);
ANS/CNS.
92 / 135
93. Configurando o Firewall
Por que configurar corretamente?
Garantir qualidade na resolu¸c˜ao DNS, ou seja, evitar atrasos e,
principalmente, a impossibilidade de resolu¸c˜ao de nomes;
Evitar overhead desnecess´ario em servidores DNS, tanto recursivos
como autoritativos.
93 / 135
94. Configurando o Firewall
Autoritativos
Consultas com destino `a porta 53 UDP e TCP do servidor autoritativo e
respectivas respostas devem ser permitidas.
Recursivos
Consultas do servidor recursivo com destino `a porta 53 UDP e TCP de
qualquer outro servidor e respectivas respostas devem ser permitidas;
Consultas vindas de clientes autorizados com destino `a porta 53 UDP
e TCP do servidor recursivo e respectivas respostas devem ser
permitidas;
Bloqueio `as demais consultas DNS direcionadas ao servidor recursivo.
94 / 135
95. Configurando o Firewall
Firewalls e DNS/UDP > 512 bytes
Se seu servidor recursivo suporta EDNS0, verifique se seu firewall permite
datagramas UDP/DNS com mais de 512 bytes. Um teste pode ser feito
atrav´es da seguinte consulta (935 bytes de payload DNS):
dig @a.dns.br br ns +dnssec +bufsize=1000
Se a resposta n˜ao for recebida, pode-se:
corrigir o comportamento do firewall;
diminuir o payload m´aximo enviado via record OPT na configura¸c˜ao;
EDNS0 do servidor para 512 bytes.
95 / 135
96. Configurando o Firewall
Firewalls e DNS/UDP > 512 bytes
Se seu servidor recursivo suporta EDNS0 e o firewall suporta mensagens
DNS maiores que 512 bytes, verifique se seu firewall ´e capaz de fazer o
correto reassembly de datagramas UDP fragmentados. Um teste pode ser
feito atrav´es da seguinte consulta (2185 bytes de payload DNS):
dig @a.dns.br br dnskey +dnssec +bufsize=2500
Se a resposta n˜ao for recebida, pode-se:
corrigir o comportamento do firewall;
diminuir o payload m´aximo enviado via record OPT na configura¸c˜ao
EDNS0 do resolver. RFC EDNS0 sugere que se configure baseado em
MTU de 1280 bytes.
96 / 135
98. Testes de Performance - Recursivo
Dependente de fatores externos
Link, banda local
Capacidade dos autoritativos
98 / 135
99. Testes de Performance - Recursivo
Responde `a consultas
consultas j´a em cache
consulta servidores autoritativos
Aviso
Exatid˜ao de uma simula¸c˜ao depende da comunica¸c˜ao com os autoritativos
99 / 135
100. Testes de Performance - Recursivo
Testes Propostos
Consultas em cache
Algumas dezenas de consultas
repetidas por 5 minutos
!Cache
Servidor com cache limpo
Consultas ´unicas durante 5 minutos
Todas as consultas v´alidas
100 / 135
101. Testes de Performance - Recursivo
Ambiente
Servidor Recursivo
2 Xeon X5570 2.93GHz QuadCore HT - 16 CPU’s
FreeBSD 7.2 amd64
Bind 9.6.1-P1 compilado com suporte a threads
Unbound 1.4.0
Cliente
1 Xeon X5560 2.80GHz QuadCore HT
DNSPERF 1.0.1.0-1
resperf - mede throughput do recursivo
Dispon´ıvel em http://www.nominum.com
Cliente e Servidor no mesmo seguimento de rede
101 / 135
102. Testes de Performance - Recursivo
°resperf -d <arquivo consultas> -s <servidor> -r 300
-d: Especifica um aquivo contendo as consultas
Formato: HOST RR
www.registro.br A
nic.br MX
...
-s: IP ou nome do servidor recursivo
-r: Tempo do teste, em segundos
102 / 135
103. Testes de Performance - Recursivo
Bind - Consultas em Cache
N.threads = 8 ( named ... -n 8 )
103 / 135
104. Testes de Performance - Recursivo
Unbound - Consultas em cache
N.threads = 8 ( unbound.conf )
104 / 135
107. Testes de Performance - Autoritativo
Responde apenas consultas para zonas configuradas
Zonas carregadas em mem´oria
107 / 135
108. Testes de Performance - Autoritativo
Teste Proposto
Servidor autoritativo com 1000 zonas configuradas
Dois clientes consultam aleatoriamente registros existentes nessas
zonas
108 / 135
109. Testes de Performance - Autoritativo
Ambiente
Servidor Autoritativo
2 Xeon X5570 2.93GHz QuadCore HT - 16 CPU’s
FreBSD 7.2 amd64
Bind 9.6.1-P1 compilado com threads
NSD 3.2.3
Clientes
1 Xeon X5560 2.80GHz QuadCore HT
Queryperf 1.12
Dispon´ıvel no contrib do bind
Servidor e clientes no mesmo seguimento de rede
109 / 135
110. Testes de Performance - Autoritativo
°queryperf -d <arquivo consultas> -s <servidor> -l <tempo>
-d: Especifica um aquivo contendo as consultas
Formato: HOST RR
www.registro.br A
nic.br MX
...
-s: IP ou nome do servidor recursivo
-l: Tempo do teste, em segundos
110 / 135
115. Escalabilidade de Recursivos
Escalabilidade e Estabilidade
Suporte a alto tr´afego
Suporte a muitos usu´arios
F´acil upgrade caso a demanda aumente
Manuten¸c˜ao sem parada do sistema
Alta disponibilidade
Balanceamento de carga
115 / 135
118. Escalabilidade de Recursivos
Solu¸c˜ao
Roteador + [UNIX + Quagga + BIND]
Endere¸co do servi¸co roda na loopback dos servidores
Anycast dentro do cluster
Protocolo de roteamento dinˆamico com suporte a ECMP - OSPF
118 / 135
121. Escalabilidade de Recursivos
ECMP
Assimetria de tr´afego
O balanceamento de carga n˜ao ´e exato
Incoerˆencia de cache entre os servidores
O cache dos servidores n˜ao s˜ao idˆenticos, pois o tr´afego que eles
recebem tamb´em n˜ao ´e
N˜ao h´a problema!
121 / 135
122. Escalabilidade de Recursivos
Detalhes do BIND
BIND rodando nas duas interfaces
Queries chegam para a loopback
Monitora¸c˜ao pelo endere¸co individual
acl
Max-cache-size
recursive-clients
122 / 135
123. Escalabilidade de Recursivos
Controle
1 Iniciar processo do BIND
2 Subir interface loopback
Quagga envia LSA para o roteador
ifconfig lo1 up
3 Tirar o servidor do ar
Enviar LSA removendo a rota
ifconfig lo1 down
123 / 135
124. Escalabilidade de Recursivos
Recursos
Exemplo:
Rede com 1M de usu´arios simultˆaneos
M´edia de 50 q/h (por usu´ario)
50 x 1M = 50M q/h 14k q/s
Um ´unico servidor (com hardware robusto) ´e capaz de suportar esta carga
Sugest˜ao para atingir alta disponibilidade:
- cluster com 3 ou 4 servidores
124 / 135
125. Escalabilidade de Recursivos
Monitora¸c˜ao
Processo do BIND est´a no ar?
Monitorar endere¸co unicast de cada servidor
Qual servidor que est´a respondendo?
dig @192.168.1.1 chaos txt hostname.bind +short
Watchdog
Caso o BIND pare de responder
ifconfig lo1 down
125 / 135
128. Monitoramento - Autoritativo
SNMP - cpu, mem´oria, tr´afego
Nagios
Plugin check dns
Alertas via email, sms
Status Information:OK: Servidor a.dns.br. (200.160.0.10)
respondendo com autoridade para ”com.br”
Custom Plugins - Serial, DNSSEC
128 / 135
129. Monitoramento - Autoritativo
DSC - DNS Statistics Collector
Dispon´ıvel em http://dns.measurement-factory.com/tools/dsc/
Collector - Processo que usa a libpcap para coletar pacotes DNS
Armazena em XML
Presenter - Recebe datasets XML dos coletores CGI plota as
estat´ısticas
129 / 135
130. Monitoramento - Autoritativo
Diversas estat´ısticas importantes para um autoritativo
By Node
Qtypes
Client Geography
IP Version
DNS Transport
...
130 / 135
135. Referˆencias
◮ RFC 2317
Classless IN-ADDR.ARPA delegation
◮ DNS recursivo est´avel e escal´avel
ftp://ftp.registro.br/pub/gter/gter23/05-DNSrecEstavelEscalavel.pdf
◮ Firewalls e DNS, como e porque configurar corretamente
ftp://ftp.registro.br/pub/doc/dns-fw.pdf
◮ Recomenda¸c˜oes para Evitar o Abuso de Servidores DNS Recursivos Abertos
http://www.cert.br/docs/whitepapers/dns-recursivo-aberto
◮ A ´ultima vers˜ao do tutorial de DNSSEC pode ser encontrada em
ftp://ftp.registro.br/pub/doc/tutorial-dnssec.pdf
135 / 135