Wie stelle ich macOS Server so ein, dass die Übertragung von DNS-Zonen verhindert wird?

In der Dokumentation zu macOS Server 10.12.6 heißt es, dass wir willkürliche Zonenübertragungen von unserem DNS-Server verhindern sollten, und dass der Weg, dies zu tun, darin besteht, Port 53 für alle Personen, die sich nicht in unserem LAN befinden, zu Firewall, mit bestimmten Ausnahmen für unsere sekundären DNS-Server.

Was sie nicht erwähnen, ist, dass der gesamte DNS-Verkehr über Port 53 geht, sodass das Firewallen dieses Ports auch unsere DNS-Dienste für alle unterwegs abschaltet. Ja, wir haben VPN-Verbindungen; nein, sie werden nicht erzwungen und wir wollen nicht damit anfangen.

Die Frage lautet also: 1) Wie weisen wir den Server an, zwischen Übertragungen und einfachen alten DNS-Anforderungen zu unterscheiden? 2) Wenn das einfach wäre, warum sagt die Apple-Dokumentation das nicht ? Ich stöberte herum und fand die Anweisungen, um dies mit dem einfachen alten BIND zu tun, überall außer auf einem Mac – und es ist dieselbe Datei, die mir die Dokumentation vor zwei Wochen gesagt hatte, um sie zu bearbeiten, um ein anderes Sicherheitsproblem zu beheben.

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

Mein nächster Schritt besteht darin, die Datei zu bearbeiten, zu versuchen, meinen eigenen Server anzugreifen, und wenn dies fehlschlägt, dies als erledigt zu markieren. In diesem Fall kann ich zurückkommen und meine eigene Frage beantworten. Aber dazu muss man herausfinden, wie man einen Zone-Transfer-Angriff durchführt – und es lässt mich am Anfang zurück, wenn ich den Vanilla-BIND-Anweisungen folge und es nicht funktioniert. Hat jemand Ideen?

Antworten (1)

Vorwort: Die in Ihrer Frage erwähnte Datei /Applications/Server.app/Contents/ServerRoot/private/etc/named.conf ist nicht die vom macOS-Server verwendete Konfigurationsdatei. Stattdessen befindet sich die Datei unter /Library/Server/named/named.conf .

Die Datei in ServerRoot ist die mehr oder weniger leere Standarddatei named.conf. Bei der Erstkonfiguration beim ersten Start von Server.app wird die ServerRoot named.conf nach /Library/Server/named/ kopiert .


Zugriffsberechtigungen für verschiedene Funktionen des DNS-Servers werden durch ACLs bestimmt. Die vorkonfigurierte ACL im macOS-Server ist com.apple.ServerAdmin.DNS.public .

Abhängig von Ihren Einstellungen im Hauptfenster von DNS wird die ACL com.apple.ServerAdmin.DNS.public mit Netzwerken gefüllt:

  • Wenn Lookups für alle Clients durchgeführt werden:

    Geben Sie hier die Bildbeschreibung ein

    die jeweilige ACL in der named.conf sieht so aus:

    acl "com.apple.ServerAdmin.DNS.public" {
        any;
    };
    
  • Wenn für einige Clients Suchvorgänge durchgeführt werden (nur Beispiel):

    Geben Sie hier die Bildbeschreibung ein

    die jeweilige ACL in der named.conf sieht so aus:

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

    Die einzige ACL, die nach der Ersteinrichtung in named.conf verfügbar ist, ist com.apple.ServerAdmin.DNS.public .

Diese ACL erlaubt standardmäßig Suchen im Ansichtsbereich für alle Mitgliedsnetzwerke:

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

und erlaubt auch Zonentransfers im Abschnitt view > zone [zone_name⁣] > allow-transfers für alle Mitgliedsnetzwerke.

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

Um Lookup-Clients von Zone-Transfer-Clients (AKA-Slaves) zu trennen, erstellen Sie einfach eine neue ACL „Slaves“ (Beispiel):

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
};

Um einen Zonentransfer für eine bestimmte Zone nur auf Slaves zu beschränken, ändern Sie die Allow-Transfer-Direktive ACL für Slaves:

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

Schließen Sie die Pfeile nicht versehentlich ein und starten Sie den DNS-Dienst danach neu!


Ein fortgeschrittenerer und sichererer Ansatz ist die Verwendung gemeinsamer Geheimnisse/Schlüssel, die hier erklärt werden: Using TSIG to enable secure Zone Transfers between Bind 9.x servers . Ich habe das aber nicht in Sierra zum Laufen gebracht.


Um zu überprüfen, ob Zonentransfers zu beliebigen Hosts möglich sind, verwenden Sie auf dem (angreifenden) Client:

dig @dns_server_ip example.org axfr
Es gibt auch allow-transferim optionsAbschnitt am Anfang der Konfigurationsdatei. Ist es möglich, dort global einzustellen allow-transfer, anstatt es für jeden zoneeinzeln einzustellen?