Estou usando o BIND 9.18.28-0ubuntu0.24.04.1-Ubuntu para atender zonas assinadas por DNSSEC, mas quando atualizo uma zona, o serial SOA da zona assinada não se relaciona com o SOA não assinado.
Após a última atualização, meu arquivo de zona para a zona assinada tem o serial SOA 2024081200, mas a versão assinada da zona tem o serial 2024040710.
Se eu fizer uma alteração no arquivo de zona e alterar o serial SOA para 2024081301 e recarregar o Bind, o serial assinado muda para 2024040711.
Parece que não importa quais mudanças eu faça, o serial para a zona assinada é incrementado apenas em um. Quero que ele use o serial do arquivo de zona não assinado como a nova base para o serial assinado (incrementando-o em um quando as chaves são rotacionadas).
A zona está configurada assim
zone "example.com" IN {
type primary;
file "/var/cache/bind/zones/example.com";
dnssec-policy default;
inline-signing yes;
};
E minha política dnssec se parece com isso
dnssec-policy standard {
dnskey-ttl 600;
keys {
ksk lifetime P365D algorithm ecdsap256sha256;
zsk lifetime P60D algorithm ecdsap256sha256;
};
max-zone-ttl P1D;
parent-ds-ttl PT1H;
parent-propagation-delay PT1H;
publish-safety PT1H;
retire-safety PT1H;
signatures-refresh P5D;
signatures-validity P14D;
signatures-validity-dnskey P14D;
zone-propagation-delay PT5M;
};
O que estou perdendo?
Isso parece ser deliberado, até onde posso ver em
lib/dns/zone.c
, que foi feito para sempre ignorar o SOA da zona insegura no BIND 9.7.x , com uma entrada no changelog que diz apenas:(O item ISC RT referenciado não parece estar disponível ao público, infelizmente.)
Em outras palavras, ele sempre substitui o serial no SOA por oldserial+1, e parece não haver opção para desabilitar esse comportamento.
Pessoalmente, não acho os números de série baseados em data úteis. Inteiros menores são mais fáceis de atualizar e mais fáceis de comparar visualmente – levou mais do que apenas uma olhada para interpretar os da sua pergunta. A questão de "quando a zona foi atualizada pela última vez" pode ser respondida pelo Git/Hg/CVS; a falha ao carregar uma zona já é detectada durante
rndc reload
(e geralmente pode ser capturada preventivamente ao executarnamed-checkzone
como um gancho do Git); a replicação travada é fácil de ver emdig +nssearch
.Observe que as assinaturas DNSSEC têm um tempo de expiração relativamente curto, então o número de série SOA não é alterado apenas durante a rotação da chave, ele também é alterado toda vez que uma assinatura expira e precisa ser assinada novamente, o que parece ocorrer a cada ~5 dias na sua configuração.
(Embora sua definição de zona não use a política "padrão" que você definiu – ela usa a política "padrão"...)
(Sobre o tópico de expiração, você definitivamente não precisa de rotação de 60 dias para um EC P-256 ZSK – isso era algo que costumava ser feito na época das chaves de zona RSA de 768 bits, um compromisso com o uso de chaves fracas para obter assinaturas menores, o que não se aplica ao EC.)