djbdns vs bind [fechado]

20

Eu sou um novato que quer aprender como configurar um servidor de nomes DNS. Devo usar djbdns, BIND ou outra coisa?

Os requisitos de rede atuais incluem suporte a subdomínios, SSL e serviço de correio, tudo com pouco tráfego. Gostaria de uma solução que um dia pudesse escalar para tráfego mais pesado e requisitos possivelmente mais complicados (como balanceamento de carga). Nesse momento, eu rodava no Linux.

Eu li que o BIND tem problemas de segurança se não estiver configurado corretamente e que sua configuração pode ser complicada. Também li que o djbdns é mais fácil de configurar, mais seguro e igual a cargas pesadas. Os argumentos para djbdns parecem plausíveis, mas não tenho experiência para avaliá-los adequadamente. Se o BIND for melhor, eu apreciaria uma discussão dessas reivindicações por djbdns.

Obrigado.

Chernevik
fonte
Serviço autoritário ou recursivo?
bortzmeyer 02/07/2009
Autoritário, eu acho.
Chernevik 02/07/2009

Respostas:

14

Eu trabalhei com djbdns no passado e atualmente corro vários servidores BIND.

O maior problema com o djbdns é o melhor que meu professor da primeira série colocou no meu boletim: "não joga bem com os outros". Simplesmente não se comporta como qualquer outra coisa em uma caixa unix de todas as formas muito pequenas que podem te morder mais tarde. Ele usa uma sintaxe para arquivos de zona que você não verá em nenhum outro lugar.

A maior vantagem do djbdns é que ele foi projetado desde o início com a segurança como objetivo nº 1.

Se você estava indo para configurar um servidor DNS, expô-lo à Internet e nunca mais mantê-lo, djbdns seria o caminho a seguir.

No mundo real, a maioria dos administradores é melhor usar os pacotes BIND do fornecedor do sistema operacional e corrigi-los imediatamente quando houver uma atualização. Mas executá-lo com chroot é uma boa ideia, e manter seus servidores DNS autorizados separados dos servidores DNS resolvedores recursivos é uma boa idéia.

Se você encontrar documentos para algo com DNS, o BIND será incluído e o djbdns provavelmente não será incluído. Se você usar dig, o formato retornado poderá ser colado em um arquivo de zona BIND e funcionar. Ele age como qualquer daemon unix normal, em vez de algo de outro planeta.

Usamos alguns balanceadores de carga de hardware e balanceam nossos servidores BIND de resolução recursiva; funciona bem. Apenas certifique-se de que os usuários obtenham o mesmo IP de origem em que enviaram suas solicitações e qualquer configuração de balanceamento de carga compatível com UDP e TCP deve funcionar. Se você usa DNS autoritativo, o balanceamento de carga é tão simples quanto ter mais de um servidor e publicar todos eles nas informações whois; os outros servidores DNS carregarão o equilíbrio de forma inteligente.

freiheit
fonte
2
Eu gosto de pensar nisso como se o djdns não funcionasse, a culpa é sua, se funcionar, então é do seu DJ.
Dave Cheney
2
Toda a discussão é útil, e destacar qualquer resposta parece um pouco injusta para as outras. Este é o mais próximo da conclusão que cheguei para mim: sejam quais forem as diferenças tecnológicas, o BIND é melhor suportado pela documentação e pela comunidade. Como outra resposta observada, entender que parece provável simplificar futuras interações de DNS. Essas vantagens parecem mais importantes do que qualquer benefício que o djbdns ofereça na facilidade de configuração.
Chernevik
9

Para um serviço autorizado, nsd .

Para um recursivo, ilimitado .

Ambos são pequenos (portanto, provavelmente têm menos falhas de segurança esperando para serem descobertos), mantidos ativamente e suportam todas as coisas recentes do DNS (DNSSEC, IPv6, etc.).

Caso contrário, o BIND é um bom software.

O djbdns é um projeto individual, sem manutenção por muito tempo, não mais seguro (o autor apenas o diz), e o site oficial está cheio de erros. (Agora, eu tenho certeza que vou receber muitos votos negativos de djbboys, meu representante. Era muito alto para o meu gosto :-)

bortzmeyer
fonte
8

Se for para você, e se você quiser aprender como o DNS funciona, eu usaria djbdns.

Se você quiser entender como todo mundo faz o DNS e como oferecer suporte a implantações corporativas típicas, aprenda bind.

Se seu objetivo é esforço e suporte mínimos e você é razoavelmente competente, o djbdns possui uma sobrecarga de suporte muito menor.

Se você está mais do lado novato da cerca, provavelmente terá mais facilidade para se manter em funcionamento, mas lembre-se de que é muito mais provável que exploda de maneiras estranhas e malucas.

Se eu ainda não conhecia o djbdns (e o bind), também procuraria powerdns e maradns, mas duvido que, para pequenas instalações, seja melhor do que o conjunto djbdns.

Independentemente, mesmo se você usar o bind para anunciar seu DNS na Internet, ainda deverá executar o dnscache (parte do conjunto djbdns) em execução no localhost para o resolvedor do seu sistema.

chris
fonte
6

Ignore djbdns. Embora djb seja um herói, ele carrega a arrogância de um matemático ao software. O fato de ele não se comportar como outro software em relação a iniciar / parar pode ser uma boa demonstração de uma técnica inteligente de gerenciar daemons. Mas você terá que retirar a documentação se não a usar regularmente, porque tudo é muito diferente. Se você configurá-lo em sistemas mantidos por outras pessoas, precisará escrever uma documentação clara - que eles precisam ler na íntegra para realizar operações simples. Executar coisas fora do init é fofo, até inteligente. Mas também é desagradável, surpreendente e fora do padrão.

Além disso, tive problemas com o djbdns causando problemas sérios devido à insistência em respeitar apenas os padrões e não à interoperabilidade de software. A solução desses problemas foi uma grande perda de tempo, porque dependia de pequenas diferenças nos pacotes DNS.

Além disso, o djbdns possui um comportamento estranho em certos casos, que fará com que as pessoas que solucionam problemas no servidor DNS com outras ferramentas que não o djb (por exemplo, com nslookup) obtenham resultados surpreendentes. Você vai perder seu tempo explicando "na verdade, eu apenas uso esse servidor DNS obscuro chamado djbdns. O problema é que suas ferramentas de diagnóstico estão lhe enviando uma mensagem estranha, mas está funcionando bem. Se você observar esta captura de pacote, poderá dizer Isso não está relacionado ao problema que tivemos há alguns meses atrás, em que o djbdns não estava interoperando corretamente com o servidor DNS, nem ao problema que tivemos há algumas semanas, em que eu estava fora do escritório e levou meu colegas de equipe por hora para reiniciar o servidor DNS ".

Problemas semelhantes com o qmail ao redor.

Existe algum valor educacional na configuração de djbdns, se você estiver fazendo a pergunta e tiver tempo para matar. Você também pode aprender bastante lendo o site do djb.

Existem dois conjuntos de problemas de segurança. Falhas de segurança que permitem ao invasor acessar o sistema - o djbdns quase definitivamente não possui nenhum deles. Alguns anos atrás, o bind teve alguns embaraçosos descobertos em pouco tempo, também expondo um design ruim. Eu esperaria que, ao longo de muitos anos, tenha sido completamente reescrito. Se você realmente quer estar seguro nesse aspecto, execute-o em uma máquina virtual (por exemplo, Xen). Considere também, se você estiver executando em um sistema Linux com o SELinux no modo de destino, você terá uma configuração para o bind e provavelmente não se incomodará com o djbdns. O sistema bind + SELinux é potencialmente mais seguro.

A outra questão é a segurança contra envenenamento de cache. Meu palpite é que o djbdns era melhor quando foi lançado, e o bind provavelmente está melhor agora devido a uma atenção maior. Essa é provavelmente a causa da sua audição que o vínculo é inseguro, a menos que esteja "configurado corretamente". Você deve pelo menos pesquisar e entender esse problema. No processo, você provavelmente descobrirá quais riscos de configuração existem para os dois servidores DNS.

O comportamento sob carga pesada é um critério sem sentido para a maioria dos usuários. Cuidado com o desempenho usado como critério para avaliar software que raramente é um gargalo de desempenho. Você não está hospedando um servidor DNS em cache para uma enorme base de usuários, onde você pode receber solicitações a uma taxa significativa. Você está executando o DNS autoritativo para fornecer serviços que provavelmente estão em execução no mesmo sistema. Esses serviços são milhares de vezes mais caros que o DNS. Seu link da Internet pode até não ser suficiente para carregar muito o servidor DNS, mas se você estivesse recebendo uma carga tão pesada nos serviços que fornece, o DNS não seria um provável gargalo.

Carlito
fonte
5

Você pode dar uma olhada no MaraDNS , um servidor DNS com reconhecimento de segurança.

  • Seguro. O MaraDNS tem um histórico de segurança tão bom quanto ou melhor que qualquer outro servidor DNS. Por exemplo, o MaraDNS sempre randomizou, usando um gerador de números aleatórios seguro, o ID da consulta e a porta de origem das consultas DNS; e nunca esteve vulnerável ao "novo" ataque de envenenamento de cache.

  • Suportado. O MaraDNS tem um longo histórico de manutenção e atualização. O MaraDNS foi originalmente criado em 2001. O MaraDNS 1.0 foi lançado em 2002 e o MaraDNS 1.2 em dezembro de 2005. O MaraDNS foi extensivamente testado, tanto com um processo de SQA quanto com mais de quatro anos de uso no mundo real. O MaraDNS continua sendo totalmente suportado: A versão mais recente foi realizada em 13 de fevereiro de 2009. Deadwood, o código que se tornará parte do MaraDNS 2.0, está sendo desenvolvido ativamente.

  • Fácil de usar. Uma configuração recursiva básica precisa apenas de um único arquivo de configuração de três linhas. Uma configuração autoritativa básica precisa apenas de um arquivo de configuração de quatro linhas e um arquivo de zona de uma linha. O MaraDNS está totalmente documentado, com tutoriais fáceis de seguir e um manual de referência completo e atualizado.

  • Pequeno. O MaraDNS é adequado para aplicativos incorporados e outros ambientes em que o servidor deve usar o número mínimo absoluto de recursos possível. O binário do MaraDNS é menor que o de qualquer outro servidor DNS recursivo mantido atualmente.

  • Código aberto. O MaraDNS é totalmente de código aberto. A licença é uma licença BSD de duas cláusulas quase idêntica à licença do FreeBSD.

Consulte a página de defesa do maraDNS, onde há uma comparação de vários softwares de servidor DNS que podem ajudá-lo a escolher.

chmeee
fonte
MaraDNS não é mais mantido pelo autor, como observado na home page do projeto: maradns.org
Joseph Holsten
11
Como correção, embora eu não desenvolva mais o MaraDNS ativamente, ainda o mantenho (correções de bugs, atualizações para novos compiladores e distribuições Linux, etc.). Na verdade, eu só colocar um novo MaraDNS lançar este ano (2014) e, provavelmente, vai fazer um ano que vem: maradns.samiam.org/download.html
Samiam
4

Se você estiver executando o DNS apenas para si, djbdns é o melhor pacote de software. Foi um dos poucos pacotes de software que identificaram o principal problema de segurança do DNS do ano passado e foi construído / corrigido para corrigi-lo anos antes. Para o cache do DNS, instalo o dnscache (parte do djbdns) em todos os servidores que não são executados como servidores DNS autoritativos. Realmente funciona melhor que o BIND para a maioria dos itens, mas, considerando o hardware atual, o peso extra e a velocidade mais lenta do BIND não são um problema.

Por experiência, eu aprenderia o básico do BIND, independentemente de qual pacote você escolher executar.

O Djbdns está configurado para ser realmente fácil de administrar a partir da linha de comando. Todas as alterações nos dados do DNS são feitas como comandos. No BIND, você edita uma série de arquivos de texto.

Você pode obter pacotes para ambos. Eu vejo a diferença como IE vs. outros navegadores. O IE vem embutido e funciona para muitas coisas, e isso não muda o padrão. Djbdns é diferente e requer um conjunto diferente de trade-offs. Para um provedor de serviços de Internet, mudar de BIND para djbdns pode ser um pouco complicado, porque o BIND, por padrão, faz cache e exibição de nomes, enquanto que djbdns divide isso em duas partes. Essa solução de segurança preferida, mas é mais difícil de configurar, muitas instalações BIND não se incomodam.

Walter
fonte
3

Pessoalmente, eu diria que você precisa aprender o básico do BIND para fins de referência, mas que mudar para outra coisa fará de você um administrador de sistema mais feliz no futuro :)

A maioria dos lugares em que trabalhei no setor de ISP parece usar djbdns, ele fornece excelentes blocos de construção e bases para a camada de serviços 'gerenciados' sobre - escrever scripts para gerar arquivos de zona é bastante trivial, o que significa que você pode armazenar todos os seus dados DNS no SQL de qualquer maneira. Ele lida com uma quantidade ridícula de consultas por segundo e é seguro para inicializar.

Se você precisar escalá-lo, dê uma olhada em http://haproxy.1wt.eu e instale alguns servidores autorizados por trás disso! Também recomendo dividir os resolvedores de servidores autorizados em qualquer configuração que você escolher implantar.

Vale a pena ler outras coisas sobre o MaraDNS e o PowerDNS.

nixgeek
fonte
2

Eu uso principalmente o FreeBSD para esse tipo de coisa e, como vem com o BIND, nunca me esforcei para aprender mais nada. No entanto, acho o BIND bastante fácil de configurar e, como o FreeBSD é mantido em uma perspectiva de segurança, só preciso rastrear esse canal em busca de problemas de segurança.

Então, acho que a melhor aposta para você é tentar os dois e ver qual deles combina mais com você, ou seja, a menos que você use um sistema operacional que vem junto com eles.

Martin P. Hellwig
fonte
2

Se você deseja aprender sobre o DNS, uma cópia do livro da O'Reilly " DNS and BIND " e a versão mais recente do bind instalada provavelmente é o melhor caminho a percorrer.

É verdade que o BIND teve mais problemas de segurança durante sua vida útil. O dnjdns não tinha nenhum até o ano passado, mas ele tem uma arquitetura muito diferente do BIND e você pode achar mais difícil escolher se não estiver familiarizado com o funcionamento do sistema de nomes.

Se você está apenas procurando aprender sobre como executar um servidor DNS (em vez de aprender sobre os protocolos e outros), seria melhor escolher um e mergulhar. Espero que você encontre pacotes binários para ambos na distro * nix que você escolher. Dito isto, há algumas vantagens em compilar a partir da fonte com o software que você pode precisar recriar se houver uma vulnerabilidade de segurança anunciada.

Como em qualquer serviço voltado para a Internet, o bom senso e o pensamento pragmático são o melhor caminho a seguir, independentemente do software usado. Se você precisar habilitar atualizações dinâmicas, verifique se elas estão assinadas. Se você permitir transferências de zona, restrinja quem pode executá-las a partir do seu servidor, etc.

James F
fonte
11
Eu mergulhei no djbdns, encontrei rapidamente alguns problemas menores de instalação e descobri que simplesmente não há uma comunidade muito grande documentando esses problemas. Não há nada como "DNS e BIND" para ele. Mesmo se eu superar esse obstáculo, tudo o que eu gostaria de fazer é mais provável de ter uma discussão sobre a solução BIND. Quer a tecnologia seja melhor ou não, o BIND parece ter um melhor suporte.
Chernevik
Aparentemente, não é tão difícil quanto você gostaria. Estou tentando fazer o trabalho e fazer as melhores escolhas possíveis no entendimento limitado, sem esgotar o potencial de qualquer ferramenta específica. Sou grato por djbdns, perl, lighttpd, Free BSD e todas as outras coisas de código aberto que não estou usando atualmente. Bem, quase tudo. Mas não acho que você possa esperar seriamente que um novato em RTFM, ou Look For TFM, seja mais do que eu. Você está claramente investido em djbdns, e isso é ótimo. Se minha opinião o incomoda, acho que você pode esperar novatos mais inteligentes ou pode trabalhar para facilitar a busca de respostas.
Chernevik 03/07/2009
2

LIGAR.

Se você aprender como configurá-lo (enquanto lê um monte de RFCs relacionadas ao DNS um pouco cansativas), poderá alternar facilmente para outro servidor DNS no futuro (para qualquer finalidade). Estou usando o BIND como servidores primário e secundário em todo lugar no FreeBSD, Linux e até no laptop Vista (para hosts VMware NAT'ed).

Aliás, é meio divertido ler a fonte do BIND e descobrir como, por exemplo, funções clássicas como gethostbyname () ou gethostbyaddr () funcionam.

Alexander Gromnitsky
fonte
2

Depois de anos usando o bind, finalmente me ocorreu que a maioria dos meus servidores não precisa executar o seu próprio daemon DNS. Isso pode não se aplicar a você, mas pense bem: praticamente todos os registradores de domínio hoje em dia oferecem o servidor de seus registros DNS (geralmente fornecendo uma maneira baseada na Web de editar seus registros DNS). Eles lidam com a veiculação de informações, o gerenciamento de secundários etc. Se você remover a necessidade de o servidor responder a consultas DNS, tudo o que resta é que o servidor faça pesquisas de DNS. Para isso, aponto meu /etc/resolv.conf em 4.2.2.1 e 4.2.2.2, que são os servidores DNS "anycast" de Nível 3 e parecem ser bastante rápidos e confiáveis.

Um bônus adicional é que a configuração do firewall do seu servidor não precisa mais permitir o DNS. Você só precisa da regra "estabelecida, relacionada" para permitir que as consultas DNS do servidor funcionem.

Ok, então você não perguntou se precisava executar um daemon DNS, mas essa foi a pergunta que eu respondi. Apenas para concluir, se você achar que deve executar um, recomendo continuar com o bind, porque é tão comumente usado que você encontrará muita documentação e ajudará a fazer o que deseja.

andy
fonte
Parece razoável, mas parece mais fácil descobrir como isso funciona hospedando-o primeiro.
Chernevik 28/06/09