O documento apresenta um tutorial sobre DNS, abordando conceitos como hierarquia, tipos de registros e servidores. O cronograma descreve os tópicos a serem tratados, incluindo configuração de servidores autoritativos e recursivos, DNSSEC e balanceamento de carga.
1. Tutorial DNS
3 PTT F´rum
o
David Robert Camargo de Campos <david@registro.br>
Rafael Dantas Justo <rafael@registro.br>
Wilson Rog´rio Lopes <wilson@registro.br>
e
Registro.br
Dezembro de 2009
1 / 135
2. Objetivos
Entender os conceitos de DNS
Configurar servidores autoritativos
Configurar servidores recursivos
Entender as diferen¸as entre DNS e DNSSEC
c
Configurar corretamente o firewall
Testar performance dos servidores
Planejar escalabilidade de recursivos
Monitorar os servidores
2 / 135
3. Cronograma
1 DNS 5 DNSSEC
Conceitos Vulnerabilidades do DNS
Arquitetura Conceito
Configura¸ao do Autoritativo
c˜
2 Servidores DNS Autoritativos
Configura¸ao do Recursivo
c˜
Cen´rio
a
Arquivos de Zona 6 Firewalls
Configura¸ao BIND
c˜ DNS
Configura¸ao NSD
c˜ EDNS0
Configura¸ao
c˜
3 Servidores DNS Recursivos
Cen´rio
a 7 Testes de Performance
Configura¸ao BIND
c˜ Recursivo
Servidores DNS Recursivos abertos Autoritativo
4 Recursivo e Autoritativo 8 Escalabilidade de Recursivos
9 Monitoramento
Autoritativo
Recursivo
3 / 135
5. DNS - Domain Name System
O Sistema de Nomes de Dom´ ´ um banco de dados distribu´
ınio e ı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´s de um esquema cliente-servidor.
e
- Arquitetura hier´rquica, dados dispostos em uma ´rvore invertida
a a
- Distribu´ eficientemente, sistema descentralizado e com cache
ıda
- O principal prop´sito ´ a resolu¸˜o de nomes de dom´ em
o e ca ınio
endere¸os IP e vice-versa
c
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
6. Hierarquia
DNS UNIX
database "." filesystem /
br usr
eng local
foo bin
tutorial imake
tutorial.foo.eng.br /usr/local/bin/imake
6 / 135
7. Dom´ Vs Zona
ınio
"." Delegação
com br org
Zona br
eng nom gov Delega¸˜o
ca
silva
Zona eng.br
Zona nom.br
Zona gov.br Indica uma transferˆncia
e
Zona foo.eng.br
de responsabilidade na
foo joao fazenda
administra¸˜o apartir
ca
daquele ponto na ´rvore
a
tutorial DNS
Zona tutorial.foo.eng.br Zona joao.silva.nom.br Zona fazenda.gov.br
Domínio br
7 / 135
8. Resource Records
Os dados associados com os nomes de dom´ est˜o contidos em
ınio a
Resource Records ou RRs (Registro de Recursos)
S˜o divididos em classes e tipos
a
Atualmente existe uma grande variedade de tipos
O conjunto de resource records com o mesmo nome de dom´
ınio,
classe e tipo ´ denominado RRset
e
Alguns Tipos Comuns de Records
SOA Indica onde come¸a a autoridade a zona
c
NS Indica um servidor de nomes para a zona
A Mapeamento de nome a endere¸o
c (IPv4)
AAAA Mapeamento de nome a endere¸o
c (IPv6)
MX Indica um mail exchanger para um nome (servidor de email)
CNAME Mapeia um nome alternativo (apelido)
PTR Mapeamento de endere¸o a nome
c
8 / 135
9. Tipos de servidores
Servidor Recursivo
Ao receber requisi¸˜es de resolu¸˜o de nomes, faz requisi¸˜es para os
co ca co
servidores autoritativos e conforme a resposta recebida dos mesmos
continua a realizar requisi¸˜es para outros servidores autoritativos at´
co e
obter a resposta satisfat´ria
o
Servidor Autoritativo
Ao receber requisi¸˜es de resolu¸˜o de nome, responde um endere¸o caso
co ca c
possua, uma referˆncia caso conhe¸a o caminho da resolu¸˜o ou uma
e c ca
nega¸˜o caso n˜o conhe¸a
ca a c
9 / 135
10. Exemplo de requisi¸˜o de endere¸o
ca c
Supondo que o
cache est´ vazio ou
a
sem informa¸oes de
c˜
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
Resolver
Servi¸o localizado
c
no cliente que tem
como
responsabilidade
resolver as
requisi¸oes DNS
c˜
para diversos
aplicativos
10 / 135
11. Exemplo de requisi¸˜o de endere¸o
ca c
Supondo que o
cache est´ vazio ou
a
sem informa¸oes de
c˜
br, eng.br,
foo.eng.br,
exemplo.foo.eng.br
11 / 135
16. Exemplo de requisi¸˜o de endere¸o
ca c
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?
Servidor DNS FOO
Autoritativo
TUTORIAL
Resolver
16 / 135
17. Exemplo de requisi¸˜o de endere¸o
ca c
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
Servidor DNS FOO
Autoritativo
TUTORIAL
Resolver
17 / 135
18. Exemplo de requisi¸˜o de endere¸o
ca c
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
Servidor DNS FOO
Autoritativo
TUTORIAL
Resolver
18 / 135
19. Exemplo de requisi¸˜o de endere¸o
ca c
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
Servidor DNS FOO
Autoritativo
TUTORIAL
Resolver
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´rio
a
Organiza¸˜o Foo Engenharia Ltda.
ca
Possui o dom´ foo.eng.br registrado no Registro.br;
ınio
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´ a.foo.eng.br delegado pela organiza¸˜o Foo;
ınio ca
Possui o bloco 200.160.0.127/28 designado pela organiza¸˜o Foo.
ca
Cliente B
Possui o dom´ b.foo.eng.br delegado pela organiza¸˜o Foo;
ınio ca
Possui o bloco 200.160.0.191/26 designado pela organiza¸˜o Foo.
ca
22 / 135
23. Cen´rio
a
Organização Foo Engenharia Ltda.
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
25. Organiza¸˜o Foo - Arquivo de zona
ca
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¸˜o Foo - Arquivo de zona (continua¸˜o...)
ca ca
db.foo.eng.br
;; Tradu¸˜o nomes → IPs (GLUEs)
ca
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¸˜o Foo - Arquivo de zona reverso IPv4
ca
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¸˜o Foo - Arquivo de zona reverso IPv4
ca
db.0.160.200.in-addr.arpa (continua¸˜o...)
ca
;; 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¸os reversos
c
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¸˜o Foo - Arquivo de zona reverso IPv4
ca
Mas por que ´ necess´rio o CNAME?
e a
Porque a RFC 2317 recomenda;
Esta solu¸˜o n˜o exige altera¸˜es nos softwares dos servidores DNS;
ca a co
Altera¸˜o de hosts no reverso dos clientes n˜o implicam em altera¸˜es
ca a co
na zona reverso da organiza¸˜o Foo.
ca
29 / 135
30. Organiza¸˜o Foo - Arquivo de zona reverso IPv6
ca
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˜es. O draft draft-howard-isp-ip6rdns-01 aborda este
o
tema.
30 / 135
31. Publica¸˜o de Reverso
ca
Informa¸˜o
ca
Para as delega¸˜es informadas diretamente na interface do Registro.br
co
(/24 ou maior) as publica¸˜es das altera¸˜es ocorrem a cada 4 horas com
co co
´
ı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¸˜o nomes → IPs (GLUEs)
ca
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¸os reversos
c
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¸˜o nomes → IPs (GLUEs)
ca
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¸os reversos
c
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
36. Organiza¸˜o Foo - Arquivo de configura¸˜o (BIND)
ca ca
Gerando chave TSIG
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-foo
named.conf no master (200.160.0.1)
options {
listen-on { 200.160.0.1; };
listen-on-v6 { 2001:12ff::1; };
recursion no;
};
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
37. Organiza¸˜o Foo - Arquivo de configura¸˜o (BIND)
ca ca
named.conf no master (200.160.0.1) (continua¸˜o...)
ca
zone ‘‘foo.eng.br’’ {
type master;
file ‘‘db.foo.eng.br’’;
allow-transfer { 200.160.0.2; 2001:12ff::2; key key-foo; };
};
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
38. Organiza¸˜o Foo - Arquivo de configura¸˜o (BIND)
ca ca
named.conf no slave (200.160.0.2)
options {
listen-on { 200.160.0.2; };
listen-on-v6 { 2001:12ff::2; };
recursion no;
};
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
39. Organiza¸˜o Foo - Arquivo de configura¸˜o (BIND)
ca ca
named.conf no slave (200.160.0.2) (continua¸˜o...)
ca
zone ‘‘foo.eng.br’’ {
type slave;
file ‘‘db.foo.eng.br’’;
masters { 200.160.0.1; 2001:12ff::1; };
};
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
40. Cliente A - Arquivo de configura¸˜o (BIND)
ca
Gerando chave TSIG
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-a
named.conf no master (200.160.0.128)
options {
listen-on { 200.160.0.128; };
recursion no;
};
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
41. Cliente A - Arquivo de configura¸˜o (BIND)
ca
named.conf no slave (200.160.0.129)
options {
listen-on { 200.160.0.129; };
recursion no;
};
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
42. Cliente B - Arquivo de configura¸˜o (BIND)
ca
Gerando chave TSIG
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-b
named.conf no master (200.160.0.192)
options {
listen-on { 200.160.0.192; };
recursion no;
};
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
43. Cliente B - Arquivo de configura¸˜o (BIND)
ca
named.conf no slave (200.160.0.193)
options {
listen-on { 200.160.0.193; };
recursion no;
};
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
44. Organiza¸˜o Foo - Arquivo de configura¸˜o (NSD)
ca ca
Gerando chave TSIG - Com uma ferramenta do BIND!
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-foo
nsd.conf no master (200.160.0.1)
key:
name: key-foo
algorithm: hmac-md5
secret: ‘‘VgMNxtub39M=’’
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
45. Organiza¸˜o Foo - Arquivo de configura¸˜o (NSD)
ca ca
nsd.conf no master (200.160.0.1) (continua¸˜o...)
ca
zone:
name: 0.160.200.in-addr.arpa
zonefile: db.0.160.200.in-addr.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
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
ca
O NSD quando utilizado como master n˜o envia IXFR para os slaves. Mas
a
caso o NSD seja utilizado como slave, ele entende requisi¸˜es IXFR.
co
45 / 135
52. Cen´rio
a
A organiza¸˜o Foo deseja disponibilizar um servidor DNS recursivo para
ca
sua infra-estrutura local e para todos os seus clientes. Este servidor DNS
recursivo ter´ o IPv4 200.160.0.6 e o IPv6 2001:12ff::6.
a
52 / 135
53. Organiza¸˜o Foo (BIND)
ca
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
a ca
servidor DNS fica muito mais vulner´vel a ataques de polui¸˜o de cache.
a ca
Principalmente aos ataques descritos por Dan Kaminsky.
53 / 135
54. Organiza¸˜o Foo (BIND)
ca
named.conf (continua¸˜o...)
ca
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˜o configura o servidor DNS recursivo para responder
a
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
ca
terceiros.
Solu¸˜o
ca
Configura¸˜o correta do firewall.
ca
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
59. Por que separar?
Motivo
Possibilita ataques ao servidor DNS recursivo;
Aumenta a complexidade na administra¸˜o do servidor.
ca
Explicando...
Recursivo e autoritativo possui configura¸˜es de acesso diferentes;
co
As regras de firewalls s˜o distintas;
a
Sem “recursos” para separar os servidores?
Para servidores DNS utilizando BIND a sintaxe “view” pode ser utilizada
para separar os cen´rios.
a
59 / 135
63. O que ´ DNSSEC?
e
Extens˜o da tecnologia DNS
a
(o que existia continua a funcionar)
Possibilita maior seguran¸a para o usu´rio na Internet
c a
(corrige falhas do DNS)
O que garante?
Origem (Autenticidade)
Integridade
A n˜o existˆncia de um nome ou tipo
a e
˜
O que NAO garante?
Confidencialidade
Prote¸˜o contra ataques de nega¸˜o de servi¸o (DOS)
ca ca c
63 / 135
64. O que ´ DNSSEC?
e
DNSSEC utiliza o conceito de chaves assim´tricas
e
− chave p´blica e chave privada
u
64 / 135
65. O que ´ DNSSEC?
e
DNSSEC utiliza o conceito de chaves assim´tricas
e
− chave p´blica e chave privada
u
65 / 135
66. O que ´ DNSSEC?
e
O resolver recursivo j´
a
possui a chave p´blica
u
da zona “.br”
ancorada.
66 / 135
67. O que ´ DNSSEC?
e
Nesta simula¸˜o de
ca
resolu¸˜o supomos que
ca
a raiz n˜o est´
a a
assinada.
67 / 135
68. O que ´ DNSSEC?
e
Retorna sem resposta,
mas com referˆncia
e
para os Records: NS
do “.br”.
68 / 135
69. O que ´ DNSSEC?
e
O servidor recursivo
requisita a DNSKEY
ao verificar que o nome
da zona ´ igual ao
e
nome da zona que
consta em sua
trusted-key.
69 / 135
70. O que ´ DNSSEC?
e
O servidor DNS
responde enviando
DNSKEY e o RRSIG
70 / 135
71. O que ´ DNSSEC?
e
Compara a trusted-key
com a DNSKEY, caso
for v´lida continua
a
com as requisi¸oes
c˜
71 / 135
73. O que ´ DNSSEC?
e
Retorna sem resposta,
mas com referˆncia
e
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 ´ DNSSEC?
e
O servidor DNS
recursivo utiliza a
DNSKEY para checar
a assinatura (RRSIG)
do Record DS
74 / 135
77. O que ´ DNSSEC?
e
O servidor DNS
recursivo verifica
atrav´s do DS e da
e
DNSKEY, se este
servidor DNS ´ v´lido.
e a
77 / 135
78. O que ´ DNSSEC?
e
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
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
Resolver
78 / 135
79. O que ´ DNSSEC?
e
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
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
Resolver
79 / 135
80. O que ´ DNSSEC?
e
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
Autoritativo sobre o FOO.ENG.BR
e TUTORIAL.FOO.ENG.BR
Resolver
80 / 135
82. O que muda com DNSSEC no DNS autoritativo?
Startup
Gerar a chave assim´trica;
e
Incluir a chave na zona;
Assinar a zona;
Mudar a referˆncia para o arquivo de zona nas configura¸˜es;
e co
Incluir o DS na interface do Registro.br.
Manuten¸˜o
ca
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ˆncia no arquivo de configura¸˜o named.conf:
e ca
file ‘‘db.foo.eng.br.signed’’;
5 Incluir o DS no website do Registro.br.
http://registro.br/cgi-bin/nicbr/dscheck
Manuten¸˜o
ca
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´vel
a
Manuten¸˜o de chaves/assinaturas
ca
P´blico Alvo
u
Provedores de hospedagem ou qualquer outra institui¸˜o respons´vel por
ca a
administrar servidores DNS autoritativos para muitas zonas
84 / 135
85. O que muda com DNSSEC no DNS recursivo?
Startup
Ancorar a chave p´blica do.BR
u
Manuten¸˜o
ca
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¸˜o
ca
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 ´ utilizado
e
Transferˆncias de zona (AXFR);
e
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´ truncada;
a
3 Cliente refaz consulta via TCP.
89 / 135
90. EDNS0 - Extension Mechanisms for DNS
Definido na RFC 2671;
Extens˜o do protocolo DNS original para eliminar alguns limites do
a
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¸˜o Additional
ca
da mensagem DNS, informando qual o tamanho m´ximo de respostas
a
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˜o suportar EDNS0, envia resposta com at´ 512 bytes de
a e
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¸˜o DNS, ou seja, evitar atrasos e,
ca
principalmente, a impossibilidade de resolu¸˜o de nomes;
ca
Evitar overhead desnecess´rio em servidores DNS, tanto recursivos
a
como autoritativos.
93 / 135
94. Configurando o Firewall
Autoritativos
Consultas com destino ` porta 53 UDP e TCP do servidor autoritativo e
a
respectivas respostas devem ser permitidas.
Recursivos
Consultas do servidor recursivo com destino ` porta 53 UDP e TCP de
a
qualquer outro servidor e respectivas respostas devem ser permitidas;
Consultas vindas de clientes autorizados com destino ` porta 53 UDP
a
e TCP do servidor recursivo e respectivas respostas devem ser
permitidas;
Bloqueio `s demais consultas DNS direcionadas ao servidor recursivo.
a
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´s da seguinte consulta (935 bytes de payload DNS):
e
dig @a.dns.br br ns +dnssec +bufsize=1000
Se a resposta n˜o for recebida, pode-se:
a
corrigir o comportamento do firewall;
diminuir o payload m´ximo enviado via record OPT na configura¸˜o;
a ca
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 ´ capaz de fazer o
e
correto reassembly de datagramas UDP fragmentados. Um teste pode ser
feito atrav´s da seguinte consulta (2185 bytes de payload DNS):
e
dig @a.dns.br br dnskey +dnssec +bufsize=2500
Se a resposta n˜o for recebida, pode-se:
a
corrigir o comportamento do firewall;
diminuir o payload m´ximo enviado via record OPT na configura¸˜o
a ca
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 ` consultas
a
consultas j´ em cache
a
consulta servidores autoritativos
Aviso
Exatid˜o de uma simula¸˜o depende da comunica¸˜o com os autoritativos
a ca ca
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´lidas
a
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´ em http://www.nominum.com
ıvel
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
105. Testes de Performance - Recursivo
Bind - Consultas ´nicas - !Cache
u
N.threads = 8 ( named ... -n 8 )
105 / 135
107. Testes de Performance - Autoritativo
Responde apenas consultas para zonas configuradas
Zonas carregadas em mem´ria
o
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´ no contrib do bind
ıvel
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´fego
a
Suporte a muitos usu´rios
a
F´cil upgrade caso a demanda aumente
a
Manuten¸˜o sem parada do sistema
ca
Alta disponibilidade
Balanceamento de carga
115 / 135
118. Escalabilidade de Recursivos
Solu¸˜o
ca
Roteador + [UNIX + Quagga + BIND]
Endere¸o do servi¸o roda na loopback dos servidores
c c
Anycast dentro do cluster
Protocolo de roteamento dinˆmico com suporte a ECMP - OSPF
a
118 / 135
121. Escalabilidade de Recursivos
ECMP
Assimetria de tr´fego
a
O balanceamento de carga n˜o ´ exato
a e
Incoerˆncia de cache entre os servidores
e
O cache dos servidores n˜o s˜o idˆnticos, pois o tr´fego que eles
a a e a
recebem tamb´m n˜o ´
e a e
N˜o h´ problema!
a a
121 / 135
122. Escalabilidade de Recursivos
Detalhes do BIND
BIND rodando nas duas interfaces
Queries chegam para a loopback
Monitora¸˜o pelo endere¸o individual
ca c
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´rios simultˆneos
a a
M´dia de 50 q/h (por usu´rio)
e a
50 x 1M = 50M q/h 14k q/s
Um ´nico servidor (com hardware robusto) ´ capaz de suportar esta carga
u e
Sugest˜o para atingir alta disponibilidade:
a
- cluster com 3 ou 4 servidores
124 / 135
125. Escalabilidade de Recursivos
Monitora¸˜o
ca
Processo do BIND est´ no ar?
a
Monitorar endere¸o unicast de cada servidor
c
Qual servidor que est´ respondendo?
a
dig @192.168.1.1 chaos txt hostname.bind +short
Watchdog
Caso o BIND pare de responder
ifconfig lo1 down
125 / 135
127. Monitoramento
Autoritativos
Disponibilidade
Autoridade sobre as zonas
Vers˜o da zona (serial)
a
DNSSEC - valida¸˜o
ca
Recursos
127 / 135
128. Monitoramento - Autoritativo
SNMP - cpu, mem´ria, tr´fego
o a
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´ em http://dns.measurement-factory.com/tools/dsc/
ıvel
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ˆncias
e
◮ RFC 2317
Classless IN-ADDR.ARPA delegation
◮ DNS recursivo est´vel e escal´vel
a a
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¸oes para Evitar o Abuso de Servidores DNS Recursivos Abertos
c˜
http://www.cert.br/docs/whitepapers/dns-recursivo-aberto
◮ A ultima vers˜o do tutorial de DNSSEC pode ser encontrada em
´ a
ftp://ftp.registro.br/pub/doc/tutorial-dnssec.pdf
135 / 135