Como configurar o macOS Server para impedir a transferência de zona DNS?

2

A documentação do macOS Server 10.12.6 diz que devemos impedir transferências arbitrárias de zona para fora do servidor DNS e que a maneira de fazer isso é o firewall da porta 53 para qualquer pessoa que não esteja em nossa LAN, com exceções específicas para nossos servidores DNS secundários.

O que eles não mencionam é que a porta 53 é para onde todo o tráfego DNS vai, portanto, o firewall dessa porta também desliga nossos serviços de DNS para qualquer pessoa na estrada. Sim, temos conexões VPN; não, eles não são aplicados e não queremos começar.

Portanto, a pergunta passa a ser: 1) como instruímos o servidor a fazer uma distinção entre transferências e solicitações simples de DNS antigas; 2) se isso era simples, por que a documentação da Apple não faz isso ? Pesquisei e encontrei as instruções para fazer isso com o BIND antigo simples em qualquer lugar, exceto um Mac - e é o mesmo arquivo que a documentação me pediu para editar duas semanas atrás para corrigir um problema de segurança diferente.

/Applications/Server.app/Contents/ServerRoot/private/etc/named.conf

Minha próxima etapa é editar o arquivo, tentar atacar meu próprio servidor e, se falhar, marque-o como concluído. Nesse caso, posso voltar e responder minha própria pergunta. Mas isso requer descobrir como fazer um ataque de transferência de zona - e isso me deixa de volta à estaca zero se eu seguir as instruções BIND de baunilha e não funcionar. Alguém tem alguma ideia?

Jeff Porten
fonte

Respostas:

1

Prefácio: o arquivo /Applications/Server.app/Contents/ServerRoot/private/etc/named.conf mencionado em sua pergunta não é o arquivo de configuração usado pelo servidor macOS. Em vez disso, o arquivo está localizado em /Library/Server/named/named.conf .

O arquivo no ServerRoot é o arquivo named.conf padrão mais ou menos vazio. Na configuração inicial ao iniciar o Server.app pela primeira vez, o ServerRoot named.conf é copiado para / Library / Server / named / .


As permissões de acesso a vários recursos do servidor DNS são determinadas pelas ACLs. A ACL pré-configurada no servidor macOS é com.apple.ServerAdmin.DNS.public .

Dependendo das configurações no painel principal do DNS, o ACL com.apple.ServerAdmin.DNS.public é preenchido com redes:

  • Se as pesquisas forem realizadas para todos os clientes:

    insira a descrição da imagem aqui

    a respectiva ACL em named.conf é assim:

    acl "com.apple.ServerAdmin.DNS.public" {
        any;
    };
    
  • Se as pesquisas forem realizadas para alguns clientes (apenas exemplo):

    insira a descrição da imagem aqui

    a respectiva ACL em named.conf é assim:

    acl "com.apple.ServerAdmin.DNS.public" {
        172.16.0.0/16;
        localhost;
        localnets;
    };
    

    A única ACL disponível no named.conf após a configuração inicial é com.apple.ServerAdmin.DNS.public .

Essa ACL por padrão permite pesquisas na seção de exibição para todas as redes membros:

view "com.apple.ServerAdmin.DNS.public" { ⬅︎
    zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update {
            none;
        };
    };

e também permite transferências de zona na seção view> zone [zone_name⁣]> allow-transfers para todas as redes membros.

...
    zone "test.home" IN {
        type master;
        file "db.test.home";
        allow-transfer {                      ⬅︎
            com.apple.ServerAdmin.DNS.public; ⬅︎
        };
        allow-update {
        none;
        };
...

Para separar os clientes de pesquisa dos clientes de transferências de zona (escravos AKA), basta criar um novo "slaves" da ACL (exemplo):

acl "com.apple.ServerAdmin.DNS.public" {
    172.16.0.0/16;
    localhost;
    localnets;
};
acl "slaves" {
    172.16.1.8/32;  #first DNS slave
    172.16.1.18/32; #second DNS slave
};

Para restringir uma transferência de zona para uma zona específica apenas a escravos, modifique a diretiva de transferência ACL da permissão para escravos:

...
    zone "test.home" IN {
        type master;
        file "db.test.home";
        allow-transfer {       ⬅︎
            slaves;            ⬅︎
        };
        allow-update {
        none;
        };
...

Não inclua as setas acidentalmente e reinicie o serviço DNS posteriormente!


Uma abordagem mais avançada e segura é usar segredos / chaves que é explicado aqui compartilhada: Usando TSIG para permitir transferências de zona seguras entre servidores BIND 9.x . Eu não consegui que isso funcionasse na Sierra.


Para verificar se as transferências de zona são possíveis para hosts arbitrários usarem no cliente (atacante):

dig @dns_server_ip example.org axfr
Klanomath
fonte