Tutorial DNS 3° PTT Fórum
Transcrição
Tutorial DNS 3° PTT Fórum
Tutorial DNS 3° PTT Fórum David Robert Camargo de Campos <[email protected]> Rafael Dantas Justo <[email protected]> Wilson Rogério Lopes <[email protected]> Registro.br Dezembro de 2009 1 / 135 Objetivos Entender os conceitos de DNS Configurar servidores autoritativos Configurar servidores recursivos Entender as diferenças entre DNS e DNSSEC Configurar corretamente o firewall Testar performance dos servidores Planejar escalabilidade de recursivos Monitorar os servidores 2 / 135 Cronograma 1 DNS Conceitos Arquitetura 2 Servidores DNS Autoritativos Cenário Arquivos de Zona Configuração BIND Configuração NSD 3 4 5 DNSSEC Vulnerabilidades do DNS Conceito Configuração do Autoritativo Configuração do Recursivo 6 Firewalls DNS EDNS0 Configuração Servidores DNS Recursivos 7 Cenário Configuração BIND Servidores DNS Recursivos abertos Recursivo e Autoritativo Testes de Performance Recursivo Autoritativo 8 Escalabilidade de Recursivos 9 Monitoramento Autoritativo Recursivo 3 / 135 Parte I Conceitos DNS 4 / 135 DNS - Domain Name System O Sistema de Nomes de Domı́nio é 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és de um esquema cliente-servidor. - Arquitetura hierárquica, dados dispostos em uma árvore invertida - Distribuı́da eficientemente, sistema descentralizado e com cache - O principal propósito é a resolução de nomes de domı́nio em endereços IP e vice-versa exemplo.foo.eng.br www.cgi.br www.registro.br ←→ 200.160.10.251 ←→ 200.160.4.2 ←→ 2001:12ff:0:2::3 5 / 135 Hierarquia DNS database "." br eng foo tutorial tutorial.foo.eng.br UNIX filesystem / usr local bin imake /usr/local/bin/imake 6 / 135 Domı́nio Vs Zona "." com Delegação br org Zona br eng nom Zona eng.br silva Zona foo.eng.br foo Zona nom.br Delegação gov Zona gov.br joao fazenda tutorial Zona tutorial.foo.eng.br Zona joao.silva.nom.br Indica uma transferência de responsabilidade na administração apartir daquele ponto na árvore DNS 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 Alguns Tipos Comuns de Records SOA NS Indica onde começa a autoridade a zona Indica um servidor de nomes para a zona A Mapeamento de nome a endereço (IPv4) AAAA Mapeamento de nome a endereço (IPv6) MX CNAME PTR Indica um mail exchanger para um nome Mapeia um nome alternativo (servidor de email) (apelido) Mapeamento de endereço a nome 8 / 135 Tipos de servidores 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 em ex n o.e .fo plo r g.b "." ? s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br Servidor DNS Autoritativo BR ENG ex em exemplo.foo.eng.br ? plo .fo o.e n g.b r? Servidor DNS Autoritativo FOO TUTORIAL Resolver 16 / 135 Exemplo de requisição de endereço Servidor DNS Autoritativo em ex n o.e .fo plo r g.b "." ? s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br Servidor DNS Autoritativo BR ENG ex em exemplo.foo.eng.br ? 20 0.1 plo .fo o.e n 60 .10 g.b r? .25 1 Servidor DNS Autoritativo FOO TUTORIAL Resolver 17 / 135 Exemplo de requisição de endereço Servidor DNS Autoritativo em ex n o.e .fo plo r g.b "." ? s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br Servidor DNS Autoritativo BR ENG ex em exemplo.foo.eng.br ? 200.160.10.251 20 0.1 plo .fo o.e n 60 .10 g.b r? .25 1 Servidor DNS Autoritativo FOO TUTORIAL Resolver 18 / 135 Exemplo de requisição de endereço Servidor DNS Autoritativo em ex n o.e .fo plo r g.b "." ? s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br Servidor DNS Autoritativo BR ENG ex em exemplo.foo.eng.br ? 200.160.10.251 20 0.1 plo .fo o.e n 60 .10 g.b r? .25 1 Servidor DNS Autoritativo FOO TUTORIAL Resolver 19 / 135 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 Parte II Configurando Servidores DNS Autoritativos 21 / 135 Cenário Organização 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çã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 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 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 2009120200 ; 3600 ; 3600 ; 3600 ; 900 ) ; ns1.foo.eng.br. hostmaster.foo.eng.br. ( serial refresh retry expire 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. a.foo.eng.br. 86400 IN NS ns1.a.foo.eng.br. 86400 IN NS ns2.a.foo.eng.br. ;; Cliente B b.foo.eng.br. b.foo.eng.br. 86400 IN NS ns1.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 ns1.a.foo.eng.br. ns2.a.foo.eng.br. ns1.b.foo.eng.br. ns2.b.foo.eng.br. ;; Web server www.foo.eng.br. www.foo.eng.br. 86400 86400 86400 86400 IN IN IN IN A A A A 200.160.0.128 200.160.0.129 200.160.0.192 200.160.0.193 86400 IN A 200.160.0.3 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. 2009120200 ; 3600 ; 3600 ; 3600 ; 900 ) ; 172800 IN SOA ns1.foo.eng.br. serial refresh retry expire minimum hostmaster.foo.eng.br. ( ;; Servidores DNS que respondem por esta zona reverso 0.160.200.in-addr.arpa. 0.160.200.in-addr.arpa. 172800 IN NS ns1.foo.eng.br. 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. 127/28.0.160.200.in-addr.arpa. 172800 IN NS ns1.a.foo.eng.br. 172800 IN NS ns2.a.foo.eng.br. 128.0.160.200.in-addr.arpa. 129.0.160.200.in-addr.arpa. ... 142.0.160.200.in-addr.arpa. 172800 IN CNAME 128.127/28.0.160.200.in-addr.arpa. 172800 IN CNAME 129.127/28.0.160.200.in-addr.arpa. 172800 IN CNAME 142.127/28.0.160.200.in-addr.arpa. 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) 191/26.0.160.200.in-addr.arpa. 191/26.0.160.200.in-addr.arpa. 172800 IN NS ns1.b.foo.eng.br. 172800 IN NS ns2.b.foo.eng.br. 192.0.160.200.in-addr.arpa. 193.0.160.200.in-addr.arpa. ... 254.0.160.200.in-addr.arpa. 172800 IN CNAME 192.127/28.0.160.200.in-addr.arpa. 172800 IN CNAME 193.127/28.0.160.200.in-addr.arpa. 172800 IN CNAME 254.127/28.0.160.200.in-addr.arpa. ;; Endereços reversos 1.0.160.200.in-addr.arpa. 2.0.160.200.in-addr.arpa. 3.0.160.200.in-addr.arpa. ... 86400 86400 86400 IN PTR ns1.foo.eng.br. IN PTR ns2.foo.eng.br. IN PTR www.foo.eng.br. 28 / 135 Organização Foo - Arquivo de zona reverso IPv4 Mas por que é necessário o CNAME? Porque a RFC 2317 recomenda; Esta solução não exige alterações nos softwares dos servidores DNS; Alteração de hosts no reverso dos clientes não implicam em alterações na zona reverso da organização Foo. 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. 2009120200 ; serial 3600 ; refresh 3600 ; retry 3600 ; expire 900 ) ; minimum hostmaster.foo.eng.br. ( ;; 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 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 2009120200 3600 3600 3600 900 ) SOA ns1.a.foo.eng.br. hostmaster.a.foo.eng.br. ( ; serial ; refresh ; retry ; expire ; 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) 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 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. 2009120200 ; serial 3600 ; refresh 3600 ; retry 3600 ; expire 900 ) ; minimum hostmaster.a.foo.eng.br. ( ;; Servidores DNS que respondem por esta zona reverso 127/28.0.160.200.in-addr.arpa. 127/28.0.160.200.in-addr.arpa. 172800 IN NS ns1.a.foo.eng.br. 172800 IN NS ns2.a.foo.eng.br. ;; Endereços reversos 128.127/28.0.160.200.in-addr.arpa. 129.127/28.0.160.200.in-addr.arpa. ... 142.127/28.0.160.200.in-addr.arpa. 172800 IN PTR ns1.a.foo.eng.br. 172800 IN PTR ns2.a.foo.eng.br. 172800 IN PTR www.a.foo.eng.br. 33 / 135 Cliente B - Arquivo de zona db.b.foo.eng.br b.foo.eng.br. 86400 IN 2009120200 3600 3600 3600 900 ) SOA ns1.b.foo.eng.br. hostmaster.b.foo.eng.br. ( ; serial ; refresh ; retry ; expire ; 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) 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 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. 2009120200 ; serial 3600 ; refresh 3600 ; retry 3600 ; expire 900 ) ; minimum hostmaster.b.foo.eng.br. ( ;; Servidores DNS que respondem por esta zona reverso 191/26.0.160.200.in-addr.arpa. 191/26.0.160.200.in-addr.arpa. 172800 IN NS ns1.b.foo.eng.br. 172800 IN NS ns2.b.foo.eng.br. ;; Endereços reversos 192.191/26.0.160.200.in-addr.arpa. 193.191/26.0.160.200.in-addr.arpa. ... 254.191/26.0.160.200.in-addr.arpa. 172800 IN PTR ns1.b.foo.eng.br. 172800 IN PTR ns2.b.foo.eng.br. 172800 IN PTR www.b.foo.eng.br. 35 / 135 Organização Foo - Arquivo de configuração (BIND) 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 Organização Foo - Arquivo de configuração (BIND) named.conf no master (200.160.0.1) (continuação...) 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 Organização Foo - Arquivo de configuração (BIND) 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 Organização Foo - Arquivo de configuração (BIND) named.conf no slave (200.160.0.2) (continuação...) 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 Cliente A - Arquivo de configuração (BIND) 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 Cliente A - Arquivo de configuração (BIND) 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 Cliente B - Arquivo de configuração (BIND) 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 Cliente B - Arquivo de configuração (BIND) 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 Organização Foo - Arquivo de configuração (NSD) 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 Organização Foo - Arquivo de configuração (NSD) nsd.conf no master (200.160.0.1) (continuação...) 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 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) Gerando chave TSIG - Com uma ferramenta do BIND! dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-a nsd.conf no master (200.160.0.128) key: name: key-cliente-a algorithm: hmac-md5 secret: ‘‘VgMNxtub39M=’’ 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) nsd.conf no slave (200.160.0.129) key: name: key-cliente-a algorithm: hmac-md5 secret: ‘‘VgMNxtub39M=’’ 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) Gerando chave TSIG - Com uma ferramenta do BIND! dnssec-keygen -a HMAC-MD5 -b 128 -n HOST key-cliente-b nsd.conf no master (200.160.0.192) key: name: key-cliente-b algorithm: hmac-md5 secret: ‘‘VgMNxtub39M=’’ 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) nsd.conf no slave (200.160.0.193) key: name: key-cliente-b algorithm: hmac-md5 secret: ‘‘VgMNxtub39M=’’ 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 Configurando Servidores DNS Recursivos 51 / 135 Cenário A organização Foo deseja disponibilizar um servidor DNS recursivo para 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. 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; }; 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 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: 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: access-control: access-control: 0.0.0.0/0 refuse 200.160.0.0/24 allow 127.0.0.0/8 allow 56 / 135 Cuidado com Recursivos Abertos! 57 / 135 Parte IV Importância da Separação de Autoritativo e Recursivo 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; Sem “recursos” para separar os servidores? Para servidores DNS utilizando BIND a sintaxe “view” pode ser utilizada para separar os cenários. 59 / 135 Parte V O que muda com DNSSEC? 60 / 135 Vulnerabilidades do DNS 61 / 135 Vulnerabilidades do DNS - Soluções 62 / 135 O que é DNSSEC? Extensão da tecnologia DNS (o que existia continua a funcionar) Possibilita maior segurança para o usuário na Internet (corrige falhas do DNS) O que garante? Origem (Autenticidade) Integridade A não existência de um nome ou tipo O que NÃO garante? Confidencialidade Proteção contra ataques de negação de serviço (DOS) 63 / 135 O que é DNSSEC? DNSSEC utiliza o conceito de chaves assimétricas − chave pública e chave privada 64 / 135 O que é DNSSEC? DNSSEC utiliza o conceito de chaves assimétricas − chave pública e chave privada 65 / 135 O que é DNSSEC? O resolver recursivo já possui a chave pública da zona “.br” ancorada. 66 / 135 O que é DNSSEC? Nesta simulação de resolução supomos que a raiz não está assinada. 67 / 135 O que é DNSSEC? Retorna sem resposta, mas com referência para os Records: NS do “.br”. 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? Retorna sem resposta, mas com referência 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 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? em ex n o.e .fo plo g.b s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br ex em exemplo.foo.eng.br ? plo .fo o.e n Servidor DNS Autoritativo g.b r? Servidor DNS Autoritativo Autoritativo sobre o FOO.ENG.BR e TUTORIAL.FOO.ENG.BR Resolver 78 / 135 O que é DNSSEC? Retorna o Record A e sua assinatura RRSIG. Servidor DNS Autoritativo r? em ex n o.e .fo plo g.b s re ido .br rv n re se cia fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br ex em exemplo.foo.eng.br ? 20 0.1 plo .fo o.e n 60 .10 Servidor DNS Autoritativo g.b r? .25 1 Servidor DNS Autoritativo Autoritativo sobre o FOO.ENG.BR e TUTORIAL.FOO.ENG.BR Resolver 79 / 135 O que é DNSSEC? Servidor DNS Autoritativo r? em ex n o.e .fo plo g.b s re ido .br rv n re se cia O servidor DNS recursivo utiliza a DNSKEY para checar a assinatura (RRSIG) do Record A fe Re Servidor DNS Recursivo exemplo.foo.eng.br ? Referencia servidores foo.eng.br ex em exemplo.foo.eng.br ? 20 0.1 plo .fo o.e n 60 .10 Servidor DNS Autoritativo g.b r? .25 1 Servidor DNS Autoritativo Autoritativo sobre o FOO.ENG.BR e TUTORIAL.FOO.ENG.BR Resolver 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 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: file ‘‘db.foo.eng.br.signed’’; 5 Incluir o DS no website do Registro.br. http://registro.br/cgi-bin/nicbr/dscheck 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 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 DNS Quando TCP é utilizado Transferências de zona (AXFR); Respostas com payload maior do que 512 bytes: 1 2 3 Consulta inicial via UDP; Resposta maior do que 512 bytes, flag TC e marcada para indicar que sua resposta está truncada; Cliente refaz consulta via TCP. 89 / 135 EDNS0 - Extension Mechanisms for DNS Definido na RFC 2671; Extensão 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 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 da mensagem DNS, informando qual o tamanho máximo 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ão suportar EDNS0, envia resposta com até 512 bytes de payload DNS. 91 / 135 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 Configurando o Firewall Por que configurar corretamente? Garantir qualidade na resolução DNS, ou seja, evitar atrasos e, principalmente, a impossibilidade de resolução de nomes; Evitar overhead desnecessário em servidores DNS, tanto recursivos como autoritativos. 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 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): dig @a.dns.br br ns +dnssec +bufsize=1000 Se a resposta não for recebida, pode-se: corrigir o comportamento do firewall; diminuir o payload máximo enviado via record OPT na configuração; EDNS0 do servidor para 512 bytes. 95 / 135 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 correto reassembly de datagramas UDP fragmentados. Um teste pode ser feito através da seguinte consulta (2185 bytes de payload DNS): dig @a.dns.br br dnskey +dnssec +bufsize=2500 Se a resposta não for recebida, pode-se: corrigir o comportamento do firewall; diminuir o payload máximo enviado via record OPT na configuração EDNS0 do resolver. RFC EDNS0 sugere que se configure baseado em MTU de 1280 bytes. 96 / 135 Parte VII Testes de Performance 97 / 135 Testes de Performance - Recursivo Dependente de fatores externos Link, banda local Capacidade dos autoritativos 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 $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 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 Responde apenas consultas para zonas configuradas Zonas carregadas em memória 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 $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 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 é Não há problema! 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 SNMP - cpu, memória, tráfego 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 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 estatı́sticas CGI plota as 129 / 135 Monitoramento - Autoritativo Diversas estatı́sticas importantes para um autoritativo By Node Qtypes Client Geography IP Version DNS Transport ... 130 / 135 Monitoramento - Autoritativo Query Types 131 / 135 Monitoramento Recursivos Disponibilidade Recursos 132 / 135 Monitoramento - Recursivo SNMP - cpu, memória, tráfego Nagios Plugin check dns DNS OK: 0.009 seconds response time. www.registro.br returns 200.160.2.3 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