Configure o BIND como um Reencaminhador apenas (sem sugestões de raiz), encriptado + lista negra de RPZ / whitelist todos juntos

5

Minha configuração está ficando mais complexa, geralmente tenho a tendência de dividir as coisas em partes e juntá-las sozinhas. Mas parece que desta vez eu preciso de mais ajuda para que as engrenagens funcionem juntas. Por isso, pedi ao usuário @Rui F Ribeiro que fizesse essa pergunta separadamente.

O que estou tentando alcançar? Basicamente o que eu encontrei chamado na internet como DNS Firewall.
Eu preciso de um servidor BIND configurado com esses recursos:

  • Ele quer ser capaz de avançar por padrão todas as solicitações para um DNS externo (no meu caso OpenDNS: 208.67.222.222, 208.67.220.220)
  • Ele NÃO deve, e para qualquer caso, consultar os ROOT-SERVERS, porque o OpenDNS tem alguma função útil de bloqueio / manipulação de domínio. Então, se meu servidor de bind começar a pedir coisas para OpenDNS e Root Servers aleatoriamente, terei resultados diferentes a cada vez. (nota: este encaminhamento deve ser feito no modo de criptografia por várias razões, incluindo não ser interceptado e manipulado por outros servidores)
  • O servidor de ligação também tem que servir como cache, ok envie as consultas para o OpenDNS, mas se eu já tiver dados novos, será desnecessário consultar novamente e novamente desperdiçando largura de banda e tempo.
  • Aqui vem meu outro pedido principal que está tornando minha configuração ainda mais complexa: Eu quero configurar uma zona RPZ com uma lista enorme de domínios que eu não quero que eles possam ser resolvidos, basicamente eu quero tê-los resolvendo como 127.0.0.1 ou outro ip / host do meu lan que deve servir como servidor http catch para todos os fins de anúncio e assim por diante.

Como posso conseguir uma configuração tão complexa?

Há meus arquivos de configuração, acho que algo aqui não está funcionando como necessário, então, por favor, me ajude com a configuração.

named.conf

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

named.conf.options

acl "trusted" {
        127.0.0.1/8;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
        ::1;
};

options {

        directory "/var/cache/bind";    # bind cache directory

        recursion yes;                  # enables resursive queries

        allow-query { trusted; } ;

        allow-recursion { trusted; };   # allows recursive queries from "trusted" clients

        //listen-on { 0.0.0.0; };       # interfaces where to listen

        allow-transfer { none; };       # disable zone transfers by default

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forward only;

        forwarders {
                208.67.222.222;
                208.67.220.220;
        };


        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================

        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;


        auth-nxdomain no;               # conform to RFC1035
        #listen-on-v6 { any; };

        response-policy {
                zone "rpz-white" policy PASSTHRU; // my own white list
                zone "rpz-foreign";    // obtained from producer
        };

};

zone "rpz-white" {
  type master;
  file "/etc/bind/rpz-white.db";
};

zone "rpz-foreign" {
  type master;
  file "/etc/bind/rpz-foreign.db";
};

named.conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

named.conf.default-zones

// prime the server with knowledge of the root servers
//zone "." {
//      type hint;
//      file "/etc/bind/db.root";
//};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};
    
por user3450548 18.03.2016 / 17:33

1 resposta

4

Então vamos examinar todos os seus desejos. Estou mudando a ordem apenas para atacar os mais fáceis primeiro.

1) O BIND tem que agir como um cache.

Isso é o que faz por padrão; não há necessidade de configurar nada.

2) Não falaremos com servidores de nomes de raiz.

Eu vejo que você mantém as dicas de raiz comentadas; agora, como estamos falando com servidores DNS fora da organização / home, eu não recomendo o encaminhamento de solicitações com endereços IP. Então, comente forward only; e descomente include "/etc/bind/zones.rfc1918";

3) O RPZ como está aqui parece bem. No rpz-foreign.db você tem que definir os nomes DNS / domínios regexp para

www.domaintoblacklist.xxx CNAME myserver

ou

www.domaintoblacklist.xxx A 127.0.0.1

4) como para criptografar a conexão; Eu estou fazendo isso com dnscrypt . Criptografia de DNS permite que você fale sobre DNS através de TLS / SSL para vários provedores de DNS, incluindo OpenDNS; com as vantagens adicionais de que as pessoas não poderão ouvir ou alterar suas solicitações de DNS.

A maneira mais fácil de instalá-lo é baixar o script dnscrypt-autoinstall

Para baixar o script, faça:

git clone https://github.com/simonclausen/dnscrypt-autoinstall

O script é feito para um uso autônomo do dnscrypt, então será necessário um pouco de trabalho extra para usar o BIND sobre ele.

Então, para começar:

./dnscrypt-autoinstall.sh

O script fará uma série de perguntas, inclusive com o serviço DNS que você deseja usar.

Ele irá mudar seu /etc/resolv.conf para apontar para seu localhost, para dnscrypt. Você terá que mudar o resolv.conf para o BIND. Mais sobre isso mais tarde.

No host local, seu BIND escutará; e o daemon dnscrypt-proxy ouvirá em 127.0.0.2 e 127.0.0.3. dnscrypt-proxy será o único a falar com os servidores opendns.

Encaminhadores BIND também terão que ser configurados para falar com dnscrypt :

options {
  ...
    forwarders {
            127.0.0.2;
            172.0.0.3;
    };
  ...

}

Eu também editei /etc/init.d/dnscrypt-proxy e mudei a linha com 127.0.0.1 para 127.0.0.3

$DAEMON --daemonize --ephemeral-keys --user=dnscrypt --local-address=127.0.0.3 --resolver-address=$ADDRESS1 --provider-name=$PNAME1 --provider-key=$PKEY1

O script também muda /etc/resolv.conf ; você tem que mudá-lo para apontar para BIND / 0.0.0.0 (também conhecido como 127.0.0.1 na terminologia DNS)

chattr -i /etc/resolv.conf

e edite-o.

para terminar:

service dnscrypt-proxy restart
service bind9 restart

Após a conclusão da configuração de criptografia:

  • os clientes com o BIND como cache
  • O BIND irá falar com as duas instâncias do dnsproxy ainda usando o protocolo DNS "normal"
  • dnsproxy com conversa com o provedor selecionado com DNS criptografado em 443 / UDP e 443 / TCP.

Se você quiser monitorar os pacotes para o lado de fora:

sudo tcpdump -n port 443
    
por 18.03.2016 / 23:17