logoCert_sugestao2.png

Tutorial para implantação de DNSSEC em sua zona

Introdução

Esse tutorial descreve os passos para implantação do DNSSEC em uma zona DNS. A parte conceitual dessa tecnologia não será abordada aqui. Para mais informações sobre o funcionamento do DNSSEC, favor consultar Projeto de implementação de DNSSEC no POP-BA.

Pré-requisitos

Vamos supor algumas configurações iniciais para implantação do DNSSEC. Essas configurações são listadas a seguir:
  • Servidor de Nomes utilizado: bind9
  • Zona em que se está implantando DNSSEC: exemplo-dnssec.br.
  • Localização dos arquivos de configuração:
    • named.conf -> /etc/bind/named.conf
    • Arquivo de zona de exemplo-dnssec.br. -> /etc/bind/var/exemplo-dnssec.zone
    • Diretório para chaves DNSSEC -> /etc/bind/keys

O arquivo de zona para exemplo-dnssec.br. (/etc/bind/var/exemplo-dnssec.zone) inicialmente contém o seguinte:
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

A configuração inicial do /etc/bind/named.conf é a seguinte (somente a parte importante):
...

zone "exemplo-dnssec.br" {
   type master;
   file "/etc/bind/var/exemplo-dnssec.zone";
};

...

Passos para configuração

Configuração do bind

Antes mesmo de iniciar qualquer configuração, o primeiro passo para implantação do DNSSEC em uma zona é definir a política de gerenciamento de chaves. É nessa política que será definido o tamanho da KSK e ZSK, duração das chaves, dentre outros detalhes. Recomendamos a leitura da Política de publicação e administração de chaves DNSSEC do POP-BA para uma visão geral e exemplo de tal documento. A configuração abaixo usará a política acima para escolha dos parâmetros de configuração (tamanho da chave, algoritmos, etc.).

  • Primeiro geramos a chave KSK, que será usada somente para assinatura dos registros DNSKEY.
# mkdir -p /etc/bind/keys
# cd /etc/bind/keys
# dnssec-keygen -a rsasha1 -b 1280 -f KSK -r /dev/urandom exemplo-dnssec.br
Kexemplo-dnssec.br.+005+50148

A chave gerada está em dois arquivos: Kexemplo-dnssec.br.+005+50148.key e Kexemplo-dnssec.br.+005+50148.private. O primeiro é a chave pública, que deverá ser incluído na zona logo abaixo, o segundo é a chave privada que deve ser mantida de forma segura no servidor.

  • Em seguida, geramos a chave ZSK, que será usada somente para assinatura dos demais registros da zona (com exceção da DNSKEY, assinada pela KSK).
# cd /etc/bind/keys
# dnssec-keygen -a rsasha1 -b 1152 -r /dev/urandom exemplo-dnssec.br
Kexemplo-dnssec.br.+005+39539

A chave gerada está em dois arquivos: Kexemplo-dnssec.br.+005+39539.key e Kexemplo-dnssec.br.+005+39539.private. O primeiro é a chave pública, que deverá ser incluído na zona logo abaixo, o segundo é a chave privada que deve ser mantida de forma segura no servidor.

  • Recomenda-se manter uma planilha de controle com as informações sobre as chaves geradas. Isso será importante, por exemplo, no procedimento de troca de chaves.

  • Uma vez que as chaves já foram geradas, é momento de incluí-las no arquivo da zona. A chave que será inclusa é a chave pública, tando da KSK quando da ZSK. O exemplo abaixo mostra o arquivo de zona inicial alterado para inclusão das chaves geradas.
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

$INCLUDE /etc/bind/keys/Kexemplo-dnssec.br.+005+50148.key ; KSK atual
$INCLUDE /etc/bind/keys/Kexemplo-dnssec.br.+005+39539.key ; ZSK atual

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

  • Lembre-se de atualizar o Serial da zona depois da inclusão das chaves.

  • Antes de assinar a zona, vamos checar se nossa alteração contém algum problema. Para isso, vamos usar o comando named-checkzone como ilustrado abaixo:
named-checkzone exemplo-dnssec.br  /etc/bind/var/exemplo-dnssec.zone

  • Agora precisamos assinar o arquivo de zona. O procedimento de assinatura consistem em ordenar o arquivo da zona, gerar os registros NSEC, e assinar os RRsets da zona. O comando abaixo realiza essas atividades (a contra-barra apenas indica que o comando acima deveria conter apenas uma linha):
dnssec-signzone -K /etc/bind/keys -o exemplo-dnssec.br -g -t -k KSK_KEY /etc/bind/var/exemplo-dnssec.zone ZSK_KEY

Os parâmetros acima são os seguintes:
-K /etc/bind/keys informa qual o diretório que contém os arquivos das chaves (públicas e privadas) KSK e ZSK, nesse caso /etc/bind/keys.
-o exemplo-dnssec.br é o nome da zona, nesse caso exemplo-dnssec.br
-g é um parâmetro usado para gerar o arquivo dsset que contém o registro DS para possivelmente ser adicionado à zona parent. Veremos com mais detalhes a importância desse parâmetro mais abaixo. Após a execução do comando acima com esse parâmetro, será gerado um arquivo dsset-exemplo-dnssec.br. no diretório corrente;
-t é um parâmetro para gerar estatísticas sobre a assinatura da zona;
-k KSK_KEY informa qual a chave KSK para assinatura do DNSKEY;
/etc/bind/var/exemplo-dnssec.zone é o arquivo de zona (parâmetro obrigatório);
ZSK_KEY é a chave ZSK usada na assinatura dos outros registros da zona (parâmetro obrigatório).

O comando acima deve ter gerado uma versão assinada do arquivo de zona, que deve estar em /etc/bind/var/exemplo-dnssec.zone.signed. Essa versão é que deverá ser usada pelo bind para prover informações sobre a zona, conforme configuraremos no passo a seguir.

  • Agora precisaremos alterar a configuração do bind para utilizar a versão assinada do arquivo de zona (gerado no passo acima). Para isso, edite o arquivo named.conf e deixe-o como a seguir (veja a versão anterior na seção de pré-requisitos deste tutorial).
...

zone "exemplo-dnssec.br" {
   type master;
   file "/etc/bind/var/exemplo-dnssec.zone.signed";
};

...

  • Precisamos recarregar o daemon do bind para que ele reconheça essa nova configuração. Para tal:
/etc/init.d/bind9 restart

  • Isso finaliza a configuração do servidor. Agora precisaremos divulgar de alguma forma a chave pública de nossa KSK. A seção a seguir detalha esse passo.

Divulgando a chave pública da KSK

Uma discussão detalhada das formas de divulgação da chave pública KSK está disponível em Projeto de implementação de DNSSEC no POP-BA, seção Canal de confiança na hierarquia DNS. Nesta seção seremos bastante objetivos quando ao método utilizado.

Como a zona parent de nosso exemplo (a zona br.) já possui DNSSEC implantado, vamos simplesmente solicitar a inclusão do registro DS na zona parent. Esse é o método mais recomendado para garantia da cadeia de confiança, logo sempre que possível utilize esse método (para clientes do POP-BA, diretamente abaixo da zona br. sempre será possível usar esse método. Para zonas que não estiverem diretamente abaixo da zona br. consulte a lista de DPNs com DNSSEC disponível).

Para que isso seja possível, acesse a página de atualização de dados de seu domínio, no site do Registro.br, faça a inclusão do registro (arquivo dsset-exemplo-dnssec.br. gerado na etapa anterior). Caso seu domínio esteja abaixo de outra zona que não a br., envie um e-mail para o administrador da zona para saber como proceder.

OBS: Caso a zona parent de seu domínio não tenha suporte à DNSSEC, você terá que usar outro método de divulgação da chave pública, por exemplo, divulgando sua chave em um servidor DLV. Caso isso seja realmente necessário, recomendamos usar o DLV da ISC: https://dlv.isc.org/about/using

Gerência das chaves DNSSEC

Como discutido no Projeto de implementação de DNSSEC no POP-BA, seção Manutenção de zona segura, as chaves devem ser trocadas com alguma frequência. Essa frequência depende da política de cada domínio. De qualquer forma, é interessante manter em local seguro (por exemplo na Intranet de sua instituição) uma planilha que liste as chaves que estão sendo usadas, além de informações sobre a data de utilização (criação e troca). Veja um exemplo aqui.

Ainda, configure duas rotinas em seu servidor de gerência para enviar e-mails quando tiver próximo ao período de troca das chaves:
  • Um e-mail para a troca da chave KSK
  • Um e-mail para a troca da chave ZSK

Documentos relacionados