¿Cómo configurar macOS Server para evitar la transferencia de zona DNS?

La documentación de macOS Server 10.12.6 dice que debemos evitar transferencias de zona arbitrarias fuera de nuestro servidor DNS, y que la forma de hacerlo es mediante el puerto 53 del cortafuegos para cualquier persona que no esté en nuestra LAN, con excepciones específicas para nuestros servidores DNS secundarios.

Lo que no mencionan es que el puerto 53 es donde va todo el tráfico de DNS, por lo que el firewall de ese puerto también cierra nuestros servicios de DNS para cualquier persona en el camino. Sí, tenemos conexiones VPN; no, no se aplican y no queremos empezar.

Entonces, la pregunta es: 1) ¿cómo le indicamos al servidor que haga una distinción entre las transferencias y las solicitudes de DNS simples y antiguas? 2) si eso fuera simple, ¿por qué la documentación de Apple no dice que se haga eso ? Busqué y encontré las instrucciones para hacer esto con BIND simple en cualquier lugar menos en una Mac, y es el mismo archivo que la documentación me dijo que editara hace dos semanas para solucionar un problema de seguridad diferente.

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

Mi siguiente paso es editar el archivo, intentar atacar mi propio servidor y, si falla, marcarlo como hecho. En cuyo caso puedo volver y responder a mi propia pregunta. Pero esto requiere descubrir cómo hacer un ataque de transferencia de zona, y me deja en el punto de partida si sigo las instrucciones básicas de BIND y no funciona. ¿Alguien tiene alguna idea?

Respuestas (1)

Prefacio: el archivo /Applications/Server.app/Contents/ServerRoot/private/etc/named.conf mencionado en su pregunta no es el archivo de configuración utilizado por el servidor macOS. En su lugar, el archivo se encuentra en /Library/Server/named/named.conf .

El archivo en ServerRoot es el archivo named.conf predeterminado más o menos vacío. En la configuración inicial, al iniciar Server.app por primera vez, ServerRoot named.conf se copia en /Library/Server/named/ .


Los permisos de acceso a varias funciones del servidor DNS están determinados por las ACL. La ACL preconfigurada en macOS Server es com.apple.ServerAdmin.DNS.public .

Dependiendo de su configuración en el panel principal de DNS, la ACL com.apple.ServerAdmin.DNS.public se completa con redes:

  • Si se realizan búsquedas para todos los clientes:

    ingrese la descripción de la imagen aquí

    la ACL respectiva en named.conf se ve así:

    acl "com.apple.ServerAdmin.DNS.public" {
        any;
    };
    
  • Si se realizan búsquedas para algunos clientes (solo como ejemplo):

    ingrese la descripción de la imagen aquí

    la ACL respectiva en named.conf se ve así:

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

    La única ACL disponible en named.conf después de la configuración inicial es com.apple.ServerAdmin.DNS.public .

Esta ACL por defecto permite búsquedas en la sección de vista para todas las redes miembro:

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

y también permite transferencias de zona en la vista > zona [zone_name⁣] > sección permitir transferencias para todas las redes miembro.

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

Para separar los clientes de búsqueda de los clientes de transferencia de zona (también conocidos como esclavos), simplemente cree un nuevo ACL "esclavo" (ejemplo):

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 una transferencia de zona para una zona en particular solo a los esclavos, modifique la ACL de la directiva allow-transfer a los esclavos:

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

¡No incluya las flechas accidentalmente y reinicie el servicio DNS después!


Un enfoque más avanzado y seguro es usar claves/secretos compartidos que se explican aquí: Uso de TSIG para habilitar transferencias de zona seguras entre servidores Bind 9.x. Sin embargo, no conseguí que esto funcionara en Sierra.


Para verificar si las transferencias de zona son posibles para el uso de hosts arbitrarios en el cliente (atacante):

dig @dns_server_ip example.org axfr
También está allow-transferen la optionssección al principio del archivo de configuración. ¿Es posible configurar allow-transferglobalmente allí en lugar de configurarlo para cada uno zonepor separado?