Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial DNS: 3 PTT F Orum
Tutorial DNS: 3 PTT F Orum
3° PTT Fórum
Registro.br
Dezembro de 2009
1 / 135
Objetivos
2 / 135
Cronograma
1 DNS 5 DNSSEC
Conceitos Vulnerabilidades do DNS
Arquitetura Conceito
Configuração do Autoritativo
2 Servidores DNS Autoritativos
Configuração do Recursivo
Cenário
Arquivos de Zona 6 Firewalls
Configuração BIND DNS
Configuração NSD EDNS0
Configuração
3 Servidores DNS Recursivos
Cenário 7 Testes de Performance
Configuração BIND Recursivo
Servidores DNS Recursivos abertos Autoritativo
4 Recursivo e Autoritativo 8 Escalabilidade de Recursivos
9 Monitoramento
Autoritativo
Recursivo
3 / 135
Parte I
Conceitos DNS
4 / 135
DNS - Domain Name System
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
Hierarquia
DNS UNIX
database "." filesystem /
br usr
eng local
foo bin
tutorial imake
tutorial.foo.eng.br /usr/local/bin/imake
6 / 135
Domı́nio Vs Zona
"." Delegação
com br org
Zona br
de responsabilidade na
foo joao fazenda
administração apartir
daquele ponto na árvore
tutorial DNS
Zona tutorial.foo.eng.br Zona joao.silva.nom.br Zona fazenda.gov.br
Domínio br
7 / 135
Resource Records
Os dados associados com os nomes de domı́nio estão contidos em
Resource Records ou RRs (Registro de Recursos)
São 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 é denominado RRset
Servidor Recursivo
Ao receber requisições de resolução de nomes, faz requisições para os
servidores autoritativos e conforme a resposta recebida dos mesmos
continua a realizar requisições para outros servidores autoritativos até
obter a resposta satisfatória
Servidor Autoritativo
Ao receber requisições de resolução de nome, responde um endereço caso
possua, uma referência caso conheça o caminho da resolução ou uma
negação caso não conheça
9 / 135
Exemplo de requisição de endereço
Supondo que o
cache está vazio ou
sem informações de
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
Resolver
Serviço localizado
no cliente que tem
como
responsabilidade
resolver as
requisições DNS
para diversos
aplicativos
10 / 135
Exemplo de requisição de endereço
Supondo que o
cache está vazio ou
sem informações de
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
11 / 135
Exemplo de requisição de endereço
12 / 135
Exemplo de requisição de endereço
13 / 135
Exemplo de requisição de endereço
14 / 135
Exemplo de requisição de endereço
15 / 135
Exemplo de requisição de endereço
Servidor DNS
Autoritativo "."
r ?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS BR
Recursivo Autoritativo
Referencia servidores foo.eng.br
ENG
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
n g.b
r?
TUTORIAL
Resolver
16 / 135
Exemplo de requisição de endereço
Servidor DNS
Autoritativo "."
r ?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS BR
Recursivo Autoritativo
Referencia servidores foo.eng.br
ENG
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
20 n g.b
0.1
60 r?
.10
.25
1
TUTORIAL
Resolver
17 / 135
Exemplo de requisição de endereço
Servidor DNS
Autoritativo "."
r ?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS BR
Recursivo Autoritativo
Referencia servidores foo.eng.br
ENG
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
20 n g.b
0.1
200.160.10.251
60 r?
.10
.25
1
TUTORIAL
Resolver
18 / 135
Exemplo de requisição de endereço
Servidor DNS
Autoritativo "."
r ?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS BR
Recursivo Autoritativo
Referencia servidores foo.eng.br
ENG
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
20 n g.b
0.1
200.160.10.251
60 r?
.10
.25
1
TUTORIAL
Resolver
19 / 135
Fluxo de dados
20 / 135
Parte II
21 / 135
Cenário
Cliente A
Possui o domı́nio a.foo.eng.br delegado pela organização Foo;
Possui o bloco 200.160.0.127/28 designado pela organização Foo.
Cliente B
Possui o domı́nio b.foo.eng.br delegado pela organização Foo;
Possui o bloco 200.160.0.191/26 designado pela organização Foo.
22 / 135
Cenário
foo.eng.br
2001:12ff::/32
200.160.0/24
200.160.0.127/28 200.160.0.191/26
a.foo.eng.br b.foo.eng.br
Cliente A Cliente B
23 / 135
Cenário
Alocados Livres
200.160.0.0/25 200.160.0.143/28
200.160.0.127/28 200.160.0.159/27
200.160.0.191/26
200.160.0/24
24 / 135
Organização 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
;; 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
Organização Foo - Arquivo de zona (continuação...)
db.foo.eng.br
;; Tradução 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
;; 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
Organização 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
27 / 135
Organização Foo - Arquivo de zona reverso IPv4
db.0.160.200.in-addr.arpa (continuação...)
;; Cliente B (200.160.0.191 → 200.160.0.255 = 200.160.0.191/26)
;; Endereços reversos
28 / 135
Organização Foo - Arquivo de zona reverso IPv4
29 / 135
Organização 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
$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ões. O draft draft-howard-isp-ip6rdns-01 aborda este
tema.
30 / 135
Publicação de Reverso
Informação
Para as delegações informadas diretamente na interface do Registro.br
(/24 ou maior) as publicações das alterações ocorrem a cada 4 horas com
ı́nicio as 2hs.
31 / 135
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
;; Web server
www.a.foo.eng.br. 86400 IN A 200.160.0.142
32 / 135
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
;; Endereços reversos
33 / 135
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
;; Web server
www.b.foo.eng.br. 86400 IN A 200.160.0.254
34 / 135
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
;; Endereços reversos
35 / 135
Organização Foo - Arquivo de configuração (BIND)
key ‘‘key-foo’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.2 {
keys { key-foo; };
};
server 2001:12ff::2 {
keys { key-foo; };
};
36 / 135
Organização Foo - Arquivo de configuração (BIND)
zone ‘‘0.160.200.in-addr.arpa’’ {
type master;
file ‘‘db.0.160.200.in-addr.arpa’’;
allow-transfer { 200.160.0.2; 2001:12ff::2; key key-foo; };
};
zone ‘‘f.f.2.1.1.0.0.2.ip6.arpa’’ {
type master;
file ‘‘db.f.f.2.1.1.0.0.2.ip6.arpa’’;
allow-transfer { 200.160.0.2; 2001:12ff::2; key key-foo; };
};
37 / 135
Organização Foo - Arquivo de configuração (BIND)
key ‘‘key-foo’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.1 {
keys { key-foo; };
};
server 2001:12ff::1 {
keys { key-foo; };
};
38 / 135
Organização Foo - Arquivo de configuração (BIND)
zone ‘‘0.160.200.in-addr.arpa’’ {
type slave;
file ‘‘db.0.160.200.in-addr.arpa’’;
masters { 200.160.0.1; 2001:12ff::1; };
};
zone ‘‘f.f.2.1.1.0.0.2.ip6.arpa’’ {
type slave;
file ‘‘db.f.f.2.1.1.0.0.2.ip6.arpa’’;
masters { 200.160.0.1; 2001:12ff::1; };
};
39 / 135
Cliente A - Arquivo de configuração (BIND)
Gerando chave TSIG
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-a
key ‘‘key-cliente-a’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.129 {
keys { key-cliente-a; };
};
zone ‘‘a.foo.eng.br’’ {
type master;
file ‘‘db.a.foo.eng.br’’;
allow-transfer { 200.160.0.129; key key-cliente-a; };
};
zone ‘‘127/28.0.160.200.in-addr.arpa’’ {
type master;
file ‘‘db.127.0.160.200.in-addr.arpa’’;
allow-transfer { 200.160.0.129; key key-cliente-a; };
};
40 / 135
Cliente A - Arquivo de configuração (BIND)
key ‘‘key-cliente-a’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.128 {
keys { key-cliente-a; };
};
zone ‘‘a.foo.eng.br’’ {
type slave;
file ‘‘db.a.foo.eng.br’’;
masters { 200.160.0.128; };
};
zone ‘‘127/28.0.160.200.in-addr.arpa’’ {
type slave;
file ‘‘db.127.0.160.200.in-addr.arpa’’;
masters { 200.160.0.128; };
};
41 / 135
Cliente B - Arquivo de configuração (BIND)
Gerando chave TSIG
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-b
key ‘‘key-cliente-b’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.193 {
keys { key-cliente-b; };
};
zone ‘‘b.foo.eng.br’’ {
type master;
file ‘‘db.b.foo.eng.br’’;
allow-transfer { 200.160.0.193; key key-cliente-b; }
};
zone ‘‘191/26.0.160.200.in-addr.arpa’’ {
type master;
file ‘‘db.191.0.160.200.in-addr.arpa’’;
allow-transfer { 200.160.0.193; key key-cliente-b; };
};
42 / 135
Cliente B - Arquivo de configuração (BIND)
key ‘‘key-cliente-b’’ {
algorithm hmac-md5;
secret ‘‘VgMNxtub39M=’’;
};
server 200.160.0.192 {
keys { key-cliente-b; };
};
zone ‘‘b.foo.eng.br’’ {
type slave;
file ‘‘db.b.foo.eng.br’’;
masters { 200.160.0.192; };
};
zone ‘‘191/26.0.160.200.in-addr.arpa’’ {
type slave;
file ‘‘db.191.0.160.200.in-addr.arpa’’;
masters { 200.160.0.192; };
};
43 / 135
Organização Foo - Arquivo de configuração (NSD)
zone:
name: foo.eng.br
zonefile: db.foo.eng.br
notify: 200.160.0.2 NOKEY
notify: 2001:12ff::2 NOKEY
provide-xfr: 200.160.0.2 key-foo
provide-xfr: 2001:12ff::2 key-foo
44 / 135
Organização Foo - Arquivo de configuração (NSD)
zone:
name: f.f.2.1.1.0.0.2.ip6.arpa
zonefile: db.f.f.2.1.1.0.0.2.ip6.arpa
notify: 200.160.0.2 NOKEY
notify: 2001:12ff::2 NOKEY
provide-xfr: 200.160.0.2 key-foo
provide-xfr: 2001:12ff::2 key-foo
Observação
O NSD quando utilizado como master não envia IXFR para os slaves. Mas
caso o NSD seja utilizado como slave, ele entende requisições IXFR.
45 / 135
Organização Foo - Arquivo de configuração (NSD)
nsd.conf no slave (200.160.0.2)
key:
name: key-foo
algorithm: hmac-md5
secret: ‘‘VgMNxtub39M=’’
zone:
name: foo.eng.br
zonefile: db.foo.eng.br
allow-notify: 200.160.0.1 NOKEY
allow-notify: 2001:12ff::1 NOKEY
request-xfr: 200.160.0.1 key-foo
request-xfr: 2001:12ff::1 key-foo
zone:
name: 0.160.200.in-addr.arpa
zonefile: db.0.160.200.in-addr.arpa
allow-notify: 200.160.0.1 NOKEY
allow-notify: 2001:12ff::1 NOKEY
request-xfr: 200.160.0.1 key-foo
request-xfr: 2001:12ff::1 key-foo
zone:
name: f.f.2.1.1.0.0.2.ip6.arpa
zonefile: db.f.f.2.1.1.0.0.2.ip6.arpa
allow-notify: 200.160.0.1 NOKEY
allow-notify: 2001:12ff::1 NOKEY
request-xfr: 200.160.0.1 key-foo
request-xfr: 2001:12ff::1 key-foo
46 / 135
Cliente A - Arquivo de configuração (NSD)
zone:
name: a.foo.eng.br
zonefile: db.a.foo.eng.br
notify: 200.160.0.129 NOKEY
provide-xfr: 200.160.0.129 key-cliente-a
zone:
name: 127/28.0.160.200.in-addr.arpa
zonefile: db.127.0.160.200.in-addr.arpa
notify: 200.160.0.129 NOKEY
provide-xfr: 200.160.0.129 key-cliente-a
47 / 135
Cliente A - Arquivo de configuração (NSD)
zone:
name: a.foo.eng.br
zonefile: db.a.foo.eng.br
allow-notify: 200.160.0.128 NOKEY
request-xfr: 200.160.0.128 key-cliente-a
zone:
name: 127/28.0.160.200.in-addr.arpa
zonefile: db.127.0.160.200.in-addr.arpa
allow-notify: 200.160.0.128 NOKEY
request-xfr: 200.160.0.128 key-cliente-a
48 / 135
Cliente B - Arquivo de configuração (NSD)
zone:
name: b.foo.eng.br
zonefile: db.b.foo.eng.br
notify: 200.160.0.193 NOKEY
provide-xfr: 200.160.0.193 key-cliente-b
zone:
name: 191/26.0.160.200.in-addr.arpa
zonefile: db.191.0.160.200.in-addr.arpa
notify: 200.160.0.193 NOKEY
provide-xfr: 200.160.0.193 key-cliente-b
49 / 135
Cliente B - Arquivo de configuração (NSD)
zone:
name: b.foo.eng.br
zonefile: db.b.foo.eng.br
allow-notify: 200.160.0.192 NOKEY
request-xfr: 200.160.0.192 key-cliente-b
zone:
name: 191/26.0.160.200.in-addr.arpa
zonefile: db.191.0.160.200.in-addr.arpa
allow-notify: 200.160.0.192 NOKEY
request-xfr: 200.160.0.192 key-cliente-b
50 / 135
Parte III
51 / 135
Cenário
52 / 135
Organização 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ão utilizem a opção “query-source”. Ao fixar uma porta de origem o
servidor DNS fica muito mais vulnerável a ataques de poluição de cache.
Principalmente aos ataques descritos por Dan Kaminsky.
53 / 135
Organização Foo (BIND)
named.conf (continuação...)
logging {
channel all {
file ‘‘/var/log/named.log’’;
versions 5 size 1M;
print-time yes;
};
zone ‘‘.’’ {
type hint;
file ‘‘named.root’’;
};
zone ‘‘0.0.127.in-addr.arpa’’ {
type master;
file ‘‘db.127.0.0’’;
};
54 / 135
Organização Foo (Unbound)
unbound.conf
server:
port: 53
interface: 127.0.0.1
interface: 200.160.0.6
interface: 2001:12ff::6
access-control: 0.0.0.0/0 refuse
access-control: 200.160.0.0/24 allow
access-control: 127.0.0.0/8 allow
access-control: ::0/0 refuse
access-control: 2001:12ff::/32 allow
directory: ‘‘/usr/local/unbound/etc/unbound’’
chroot: ‘‘/usr/local/unbound/etc/unbound’’
username: ‘‘unbound’’
logfile: ‘‘unbound.log’’
do-ip4: yes
do-ip6: yes
55 / 135
Cuidado com Recursivos Abertos!
Causa
O administrador não 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ção de respostas DNS e uso de banda por
terceiros.
Solução
Configuração correta do firewall.
BIND: NSD:
acl clientes { 127.0.0.0/8; 200.160.0.0/24; }; access-control: 0.0.0.0/0 refuse
allow-query { clientes; }; access-control: 200.160.0.0/24 allow
allow-query-cache { clientes; }; access-control: 127.0.0.0/8 allow
allow-recursion { clientes; };
56 / 135
Cuidado com Recursivos Abertos!
57 / 135
Parte IV
58 / 135
Por que separar?
Motivo
Possibilita ataques ao servidor DNS recursivo;
Aumenta a complexidade na administração do servidor.
Explicando...
Recursivo e autoritativo possui configurações de acesso diferentes;
As regras de firewalls são distintas;
59 / 135
Parte V
60 / 135
Vulnerabilidades do DNS
61 / 135
Vulnerabilidades do DNS - Soluções
62 / 135
O que é DNSSEC?
O que garante?
Origem (Autenticidade)
Integridade
A não existência de um nome ou tipo
63 / 135
O que é DNSSEC?
64 / 135
O que é DNSSEC?
66 / 135
O que é DNSSEC?
Nesta simulação de
resolução supomos que
a raiz não está
assinada.
67 / 135
O que é DNSSEC?
68 / 135
O que é DNSSEC?
O servidor recursivo
requisita a DNSKEY
ao verificar que o nome
da zona é igual ao
nome da zona que
consta em sua
trusted-key.
69 / 135
O que é DNSSEC?
O servidor DNS
responde enviando
DNSKEY e o RRSIG
70 / 135
O que é DNSSEC?
Compara a trusted-key
com a DNSKEY, caso
for válida continua
com as requisições
71 / 135
O que é DNSSEC?
72 / 135
O que é DNSSEC?
73 / 135
O que é DNSSEC?
O servidor DNS
recursivo utiliza a
DNSKEY para checar
a assinatura (RRSIG)
do Record DS
74 / 135
O que é DNSSEC?
75 / 135
O que é DNSSEC?
76 / 135
O que é DNSSEC?
O servidor DNS
recursivo verifica
através do DS e da
DNSKEY, se este
servidor DNS é válido.
77 / 135
O que é DNSSEC?
Servidor DNS
Autoritativo
r?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS
Recursivo Autoritativo
Referencia servidores foo.eng.br
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
n g.b
r?
Servidor DNS
Autoritativo
78 / 135
O que é DNSSEC?
Retorna o Record A e
sua assinatura RRSIG.
Servidor DNS
Autoritativo
r?
n g.b
o.e
.fo .br
plo re
s
em ido
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS
Recursivo Autoritativo
Referencia servidores foo.eng.br
ex
em
plo
.fo
o.e
exemplo.foo.eng.br ?
20 n g.b
0.1
60 r?
.10
.25
1
Servidor DNS
Autoritativo
79 / 135
O que é DNSSEC?
O servidor DNS
recursivo utiliza a
Servidor DNS
Autoritativo DNSKEY para checar
n g.b
r? a assinatura (RRSIG)
o.e
em
plo
.fo
ido
re
s .br
do Record A
ex rv
se
n cia
fe re
Re
exemplo.foo.eng.br ?
Servidor DNS Servidor DNS
Recursivo Autoritativo
Referencia servidores foo.eng.br
ex
em
plo
.fo
o.e
20
exemplo.foo.eng.br ?
0.1 n g.b
60 r?
.10
.25
1
Servidor DNS
Autoritativo
80 / 135
O que é DNSSEC?
81 / 135
O que muda com DNSSEC no DNS autoritativo?
Startup
Gerar a chave assimétrica;
Incluir a chave na zona;
Assinar a zona;
Mudar a referência para o arquivo de zona nas configurações;
Incluir o DS na interface do Registro.br.
Manutenção
Reassinar periodicamente a zona.
82 / 135
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
Manutenção
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
DNSSHIM - DNS Secure Hidden Master
http://registro.br/dnsshim/
Open-Source
Automatiza o processo de provisionamento de zonas
Suporte a DNSSEC
Interface Automatizável
Manutenção de chaves/assinaturas
Público Alvo
Provedores de hospedagem ou qualquer outra instituição responsável por
administrar servidores DNS autoritativos para muitas zonas
84 / 135
O que muda com DNSSEC no DNS recursivo?
Startup
Ancorar a chave pública do.BR
Manutenção
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
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ção
1 Obtenha a nova chave em https://registro.br/ksk/;
2 Ancore a nova chave no servidor DNS recursivo.
86 / 135
Parte VI
Firewalls
87 / 135
DNS
88 / 135
DNS
89 / 135
EDNS0 - Extension Mechanisms for DNS
90 / 135
EDNS0 - Extension Mechanisms for DNS
91 / 135
EDNS0 - Extension Mechanisms for DNS
92 / 135
Configurando o Firewall
93 / 135
Configurando o Firewall
Autoritativos
Consultas com destino à porta 53 UDP e TCP do servidor autoritativo e
respectivas respostas devem ser permitidas.
Recursivos
Consultas do servidor recursivo com destino à porta 53 UDP e TCP de
qualquer outro servidor e respectivas respostas devem ser permitidas;
Consultas vindas de clientes autorizados com destino à porta 53 UDP
e TCP do servidor recursivo e respectivas respostas devem ser
permitidas;
Bloqueio às demais consultas DNS direcionadas ao servidor recursivo.
94 / 135
Configurando o Firewall
95 / 135
Configurando o Firewall
96 / 135
Parte VII
Testes de Performance
97 / 135
Testes de Performance - Recursivo
98 / 135
Testes de Performance - Recursivo
Responde à consultas
consultas já em cache
consulta servidores autoritativos
Aviso
Exatidão de uma simulação depende da comunicação com os autoritativos
99 / 135
Testes de Performance - Recursivo
Testes Propostos
Consultas em cache
Algumas dezenas de consultas
repetidas por 5 minutos
!Cache
Servidor com cache limpo
Consultas únicas durante 5 minutos
Todas as consultas válidas
100 / 135
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
Testes de Performance - Recursivo
102 / 135
Testes de Performance - Recursivo
Bind - Consultas em Cache
N.threads = 8 ( named ... -n 8 )
103 / 135
Testes de Performance - Recursivo
Unbound - Consultas em cache
N.threads = 8 ( unbound.conf )
104 / 135
Testes de Performance - Recursivo
Bind - Consultas únicas - !Cache
N.threads = 8 ( named ... -n 8 )
105 / 135
Testes de Performance - Recursivo
Unbound - Consultas únicas - !Cache
N.threads = 8 ( unbound.conf )
106 / 135
Testes de Performance - Autoritativo
107 / 135
Testes de Performance - Autoritativo
Teste Proposto
Servidor autoritativo com 1000 zonas configuradas
Dois clientes consultam aleatoriamente registros existentes nessas
zonas
108 / 135
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
Testes de Performance - Autoritativo
110 / 135
Testes de Performance - Autoritativo
Bind
12 Threads = 224000 qps
111 / 135
Testes de Performance - Autoritativo
NSD
5 servidores = 257770 qps
112 / 135
Parte VIII
Escalabilidade de Recursivos
113 / 135
Escalabilidade de Recursivos
Motivação
DNS recursivo instável é foco de reclamações constantes
114 / 135
Escalabilidade de Recursivos
Escalabilidade e Estabilidade
Suporte a alto tráfego
Suporte a muitos usuários
Fácil upgrade caso a demanda aumente
Manutenção sem parada do sistema
Alta disponibilidade
Balanceamento de carga
115 / 135
Escalabilidade de Recursivos
Cluster
116 / 135
Escalabilidade de Recursivos
Flexibilidade
Mais de um roteador
Mais de um switch
117 / 135
Escalabilidade de Recursivos
Solução
Roteador + [UNIX + Quagga + BIND]
Endereço do serviço roda na loopback dos servidores
Anycast dentro do cluster
Protocolo de roteamento dinâmico com suporte a ECMP - OSPF
118 / 135
Escalabilidade de Recursivos
Topologia
119 / 135
Escalabilidade de Recursivos
Anycast na Rede
Redundancia
IBGP entre os clusters
120 / 135
Escalabilidade de Recursivos
ECMP
Assimetria de tráfego
O balanceamento de carga não é exato
Incoerência de cache entre os servidores
O cache dos servidores não são idênticos, pois o tráfego que eles
recebem também não é
121 / 135
Escalabilidade de Recursivos
Detalhes do BIND
BIND rodando nas duas interfaces
Queries chegam para a loopback
Monitoração pelo endereço individual
acl
Max-cache-size
recursive-clients
122 / 135
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
Escalabilidade de Recursivos
Recursos
Exemplo:
Rede com 1M de usuários simultâneos
Média de 50 q/h (por usuário)
50 x 1M = 50M q/h 14k q/s
Um único servidor (com hardware robusto) é capaz de suportar esta carga
Sugestão para atingir alta disponibilidade:
- cluster com 3 ou 4 servidores
124 / 135
Escalabilidade de Recursivos
Monitoração
Processo do BIND está no ar?
Monitorar endereço unicast de cada servidor
Qual servidor que está respondendo?
dig @192.168.1.1 chaos txt hostname.bind +short
Watchdog
Caso o BIND pare de responder
ifconfig lo1 down
125 / 135
Parte IX
Monitoramento
126 / 135
Monitoramento
Autoritativos
Disponibilidade
Autoridade sobre as zonas
Versão da zona (serial)
DNSSEC - validação
Recursos
127 / 135
Monitoramento - Autoritativo
128 / 135
Monitoramento - Autoritativo
129 / 135
Monitoramento - Autoritativo
130 / 135
Monitoramento - Autoritativo
Query Types
131 / 135
Monitoramento
Recursivos
Disponibilidade
Recursos
132 / 135
Monitoramento - Recursivo
Custom Plugins
133 / 135
Perguntas?
134 / 135
Referências
◮ RFC 2317
Classless IN-ADDR.ARPA delegation
◮ DNS recursivo estável e escalável
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ções para Evitar o Abuso de Servidores DNS Recursivos Abertos
http://www.cert.br/docs/whitepapers/dns-recursivo-aberto
◮ A última versão do tutorial de DNSSEC pode ser encontrada em
ftp://ftp.registro.br/pub/doc/tutorial-dnssec.pdf
135 / 135