Unbound-kindns: mudanças entre as edições

De ISPUP!
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(5 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
{{EXIBETITULO:UNBOUND-KINDNS}}
{{EXIBETITULO:UNBOUND-KINDNS}}
[[Arquivo:Unbound-kindns01.png|nenhum|miniaturadaimagem|825x825px]]
[[Arquivo:Unbound-kindns01.png|nenhum|miniaturadaimagem|825x825px]]
== Introdução ==
Servidores de DNS Recursivos precisam ser bem configurados e atender a alguns requisitos de segurança e boas práticas. Como definição para essas ações podemos seguir as práticas do '''KINDNS''' da '''ICANN''', descritos [https://kindns.org/shared-private-resolvers/ '''aqui''']. Para diminuir a curva de dificuldade entre instalação e configuração, criei um projeto no '''GitHub''' chamado '''[https://github.com/gondimcodes/unbound-kindns UNBOUND-KINDNS].''' O projeto tem como objetivo facilitar a instalação de um sistema, para atender as '''7 práticas do KINDNS''' utilizando containers do '''Docker'''. Vamos fazer um check list rápido do que contempla o projeto:
* '''Prática 1''' - A validação DNSSEC deve estar obrigatoriamente habilitada nos resolvedores recursivos. '''Unbound já atende por padrão'''.
* '''Prática 2''' - Regras de ACL devem ser obrigatoriamente utilizadas para restringir quem pode enviar consultas recursivas aos seus resolvedores/validadores DNS. '''Este projeto possui arquivos de ACLs para liberar apenas quem pode consultar seu DNS'''.
* '''Prática 3''' - A minimização de QNAME (QNAME Minimization) deve estar obrigatoriamente habilitada para mitigar o vazamento de nomes de domínio. '''Este projeto encontra-se com QNAME minimization já ativo'''.
* '''Prática 4''' - Os serviços DNS autoritativo e recursivo não devem coexistir no mesmo servidor DNS. '''Unbound não faz Autoritativo, então OK também'''.
* '''Prática 5''' - Os seus serviços de resolução recursiva devem possuir resiliência, utilizando pelo menos dois servidores distintos, considerando critérios de diversidade. '''Este projeto te permite configurar  DNS(s) Primário e Secundário ou uma rede de DNS(s) Anycast'''.
* '''Prática 6''' - O monitoramento dos serviços, servidores e equipamentos de rede que compõem a sua infraestrutura DNS deve ser obrigatoriamente implementado. '''O projeto já entrega um container com Zabbix Agent2 7.0.x e um script para envio de métricas para o Zabbix Server'''. O template para o Zabbix Server encontra-se '''[https://github.com/gondimcodes/template_zabbix_dns_unbound aqui]'''.
* '''Prática 7''' - DoT (DNS-over-TLS) ou DoH (DNS-over-HTTPS) deveriam estar habilitados. A implantação de qualquer um deles é a forma mais simples de proteger contra interceptação (eavesdropping), manipulação de consultas DNS e ataques do tipo homem-no-meio (Man-in-the-Middle), por meio da criptografia das consultas DNS entre o resolvedor stub e o resolvedor recursivo, ou entre um resolvedor encaminhador (forwarder) e um resolvedor recursivo. '''Aqui também o projeto entrega o sistema preparado para DoT e DoH, só necessitando da configuração dos certificados TLS'''.
== Requisitos ==
O projeto foi concebido para rodar em um '''GNU/Linux Debian 13 (Trixie)''' mas fique à vontade para modificá-lo para sua distribuição '''GNU/Linux''' favorita. Como os serviços rodam em containers, ficam independentes de distro '''GNU/Linux'''.
Um sistema com 8 vCores e 16G de ram suporta +20.000 assinantes simultâneos.


== Introdução ==
== Preparação antes de rodar o script ==
Servidores de DNS Recursivos precisam ser bem configurados e atender a alguns requisitos de segurança e boas práticas. Como definição para essas ações podemos seguir o '''KINDNS''' da '''ICANN''', descritos [https://kindns.org/shared-private-resolvers/ '''aqui''']. Para diminuir a curva de implementação entre instalação e configuração, criei um projeto no '''GitHub''' chamado '''[https://github.com/gondimcodes/unbound-kindns UNBOUND-KINDNS].''' O projeto tem como objetivo facilitar a instalação de um sistema, para atender as 7 práticas do KINDNS. Vamos fazer um check list rápido:
No topo do script '''unbound_kindns.sh''' existem algumas variáveis para configurarmos antes de sua execução:
 
* <code>CORES</code>: Número de núcleos de CPU dedicados ao Unbound (define o parâmetro <code>num-threads</code> na configuração do Unbound; padrão: '''4''').
* <code>OSPF_INTERFACE</code>: Interface física de rede utilizada para o roteamento '''OSPF''' (por exemplo, <code>ens20</code>). Se deixado em branco, a implantação de '''OSPF/Anycast''' (container '''FRR''') será ignorada, executando o sistema em modo autônomo (stand-alone).
* <code>APPARMOR</code>: Defina como <code>0</code> para desabilitar o AppArmor e obter o máximo desempenho, ou como <code>1</code> para mantê-lo habilitado.
* <code>MITIGATIONS</code>: Defina como <code>off</code> para desabilitar as mitigações de CPU e obter o máximo desempenho, ou como <code>auto</code> para deixá-las no modo automático.
* <code>ZBX_HOSTNAME</code>: Identificador do host no servidor Zabbix. Se deixado em branco, o script utilizará o '''hostname''' do sistema.
* <code>CERT_DOMAIN</code>: Nome de domínio utilizado para os certificados SSL do Let's Encrypt (empregado na validação dos serviços '''DoH''' e '''DoT'''; padrão: <code>doh.brasil.com.br</code>).
* <code>ZBX_SERVER_HOST</code>: Endereço IP do servidor Zabbix.
* <code>ZBX_SERVER_ACTIVE</code>: Endereço IP do servidor Zabbix ativo (Active Zabbix Server).
* <code>ZBX_LISTENIP</code>: Endereço IP de vinculação (binding) para o container do Zabbix Agent 2 escutar conexões (padrão: <code>0.0.0.0</code>).
 
== Executando a instalação ==
Ao executar como root '''./unbound_kindns.sh <hostname>''', verá a tela do instalador abaixo onde fará todo o processo de baixar imagens, compilar os programas e criar os containers. Sim o '''Unbound''' que o projeto utiliza é o '''latest''' do próprio desenvolvedor '''NLnet Labs'''.
[[Arquivo:Unbound-kindns02.png|nenhum|miniaturadaimagem|1046x1046px]]
Tudo ocorrendo bem veremos a mensagem de '''Installation finished'''. Na sequência veremos sobre a administração do sistema.
 
== Administrando o sistema ==
 
== Apoie este projeto ==
Se este projeto foi útil para você e deseja contribuir com seu desenvolvimento, considere fazer uma doação.
 
== ❤️ Apoie este projeto ==
Este projeto é desenvolvido e mantido no meu tempo livre.
 
Se ele foi útil para você, considere fazer uma contribuição para ajudar a manter o desenvolvimento ativo — e o estoque de café em dia.


* Prática 1 - DNSSEC validation '''MUST''' be enabled for recursive resolvers. Unbound já atende por padrão.
[https://www.paypal.com/donate/?business=7LD8SPXNF2KH2&no_recurring=0&item_name=Sua+contribui%C3%A7%C3%A3o+ajuda+a+manter+meu+estoque+de+caf%C3%A9+em+dia+%3A%29&currency_code=BRL 💙 Contribuir via PayPal]{{ORDENACAOPADRAO:UNBOUND-KINDNS}}
* Prática 2 - ACL statements '''MUST''' be used to restrict who may send recursive queries to your DNS resolvers/validators. Este projeto possui arquivos de ACLs para liberar apenas quem pode consultar seu DNS.
* Prática 3 - QNAME minimization '''MUST''' be enabled to mitigate leakage of domain names. Este projeto encontra-se com QNAME minimization já ativo.
* Prática 4 - Authoritative and recursive DNS service '''MUST NOT''' coexist on the same DNS server. Unbound não faz Autoritativo, então OK também.
* Prática 5 - Your recursion services '''MUST''' have resilience by using at least two distinct servers that take diversity into consideration. Este projeto te permite configurar  DNS(s) Primário e Secundário ou uma rede de DNS(s) Anycast.
* Prática 6 - Monitoring of the services, servers, and network equipment that make up your DNS infrastructure '''MUST''' be implemented. O projeto já entrega um container com '''Zabbix Agent2''' 7.0.x e um script para envio de métricas para o '''Zabbix Server'''. O template para o Zabbix Server encontra-se '''[https://github.com/gondimcodes/template_zabbix_dns_unbound aqui]'''.
* Prática 7 - DoT (DNS-over-TLS) or DoH (DNS-over-HTTPS) '''SHOULD''' be enabled. Deploying either is the easiest way to protect against eavesdropping and manipulation of DNS queries and man-in-the-middle attacks by encrypting DNS queries between stub and recursive resolvers, or between a forwarding and recursive resolver. Aqui também o projeto entrega o sistema preparado para '''DoT''' e '''DoH''', só necessitando da configuração dos certificados TLS.
{{ORDENACAOPADRAO:UNBOUND-KINDNS}}

Edição atual tal como às 22h34min de 5 de julho de 2026

Introdução

Servidores de DNS Recursivos precisam ser bem configurados e atender a alguns requisitos de segurança e boas práticas. Como definição para essas ações podemos seguir as práticas do KINDNS da ICANN, descritos aqui. Para diminuir a curva de dificuldade entre instalação e configuração, criei um projeto no GitHub chamado UNBOUND-KINDNS. O projeto tem como objetivo facilitar a instalação de um sistema, para atender as 7 práticas do KINDNS utilizando containers do Docker. Vamos fazer um check list rápido do que contempla o projeto:

  • Prática 1 - A validação DNSSEC deve estar obrigatoriamente habilitada nos resolvedores recursivos. Unbound já atende por padrão.
  • Prática 2 - Regras de ACL devem ser obrigatoriamente utilizadas para restringir quem pode enviar consultas recursivas aos seus resolvedores/validadores DNS. Este projeto possui arquivos de ACLs para liberar apenas quem pode consultar seu DNS.
  • Prática 3 - A minimização de QNAME (QNAME Minimization) deve estar obrigatoriamente habilitada para mitigar o vazamento de nomes de domínio. Este projeto encontra-se com QNAME minimization já ativo.
  • Prática 4 - Os serviços DNS autoritativo e recursivo não devem coexistir no mesmo servidor DNS. Unbound não faz Autoritativo, então OK também.
  • Prática 5 - Os seus serviços de resolução recursiva devem possuir resiliência, utilizando pelo menos dois servidores distintos, considerando critérios de diversidade. Este projeto te permite configurar DNS(s) Primário e Secundário ou uma rede de DNS(s) Anycast.
  • Prática 6 - O monitoramento dos serviços, servidores e equipamentos de rede que compõem a sua infraestrutura DNS deve ser obrigatoriamente implementado. O projeto já entrega um container com Zabbix Agent2 7.0.x e um script para envio de métricas para o Zabbix Server. O template para o Zabbix Server encontra-se aqui.
  • Prática 7 - DoT (DNS-over-TLS) ou DoH (DNS-over-HTTPS) deveriam estar habilitados. A implantação de qualquer um deles é a forma mais simples de proteger contra interceptação (eavesdropping), manipulação de consultas DNS e ataques do tipo homem-no-meio (Man-in-the-Middle), por meio da criptografia das consultas DNS entre o resolvedor stub e o resolvedor recursivo, ou entre um resolvedor encaminhador (forwarder) e um resolvedor recursivo. Aqui também o projeto entrega o sistema preparado para DoT e DoH, só necessitando da configuração dos certificados TLS.

Requisitos

O projeto foi concebido para rodar em um GNU/Linux Debian 13 (Trixie) mas fique à vontade para modificá-lo para sua distribuição GNU/Linux favorita. Como os serviços rodam em containers, ficam independentes de distro GNU/Linux.

Um sistema com 8 vCores e 16G de ram suporta +20.000 assinantes simultâneos.

Preparação antes de rodar o script

No topo do script unbound_kindns.sh existem algumas variáveis para configurarmos antes de sua execução:

  • CORES: Número de núcleos de CPU dedicados ao Unbound (define o parâmetro num-threads na configuração do Unbound; padrão: 4).
  • OSPF_INTERFACE: Interface física de rede utilizada para o roteamento OSPF (por exemplo, ens20). Se deixado em branco, a implantação de OSPF/Anycast (container FRR) será ignorada, executando o sistema em modo autônomo (stand-alone).
  • APPARMOR: Defina como 0 para desabilitar o AppArmor e obter o máximo desempenho, ou como 1 para mantê-lo habilitado.
  • MITIGATIONS: Defina como off para desabilitar as mitigações de CPU e obter o máximo desempenho, ou como auto para deixá-las no modo automático.
  • ZBX_HOSTNAME: Identificador do host no servidor Zabbix. Se deixado em branco, o script utilizará o hostname do sistema.
  • CERT_DOMAIN: Nome de domínio utilizado para os certificados SSL do Let's Encrypt (empregado na validação dos serviços DoH e DoT; padrão: doh.brasil.com.br).
  • ZBX_SERVER_HOST: Endereço IP do servidor Zabbix.
  • ZBX_SERVER_ACTIVE: Endereço IP do servidor Zabbix ativo (Active Zabbix Server).
  • ZBX_LISTENIP: Endereço IP de vinculação (binding) para o container do Zabbix Agent 2 escutar conexões (padrão: 0.0.0.0).

Executando a instalação

Ao executar como root ./unbound_kindns.sh <hostname>, verá a tela do instalador abaixo onde fará todo o processo de baixar imagens, compilar os programas e criar os containers. Sim o Unbound que o projeto utiliza é o latest do próprio desenvolvedor NLnet Labs.

Tudo ocorrendo bem veremos a mensagem de Installation finished. Na sequência veremos sobre a administração do sistema.

Administrando o sistema

Apoie este projeto

Se este projeto foi útil para você e deseja contribuir com seu desenvolvimento, considere fazer uma doação.

❤️ Apoie este projeto

Este projeto é desenvolvido e mantido no meu tempo livre.

Se ele foi útil para você, considere fazer uma contribuição para ajudar a manter o desenvolvimento ativo — e o estoque de café em dia. ☕

💙 Contribuir via PayPal