4 Konfiguration

4.1 Grundlegende Einstellungen in der named.conf

Die Konfigurationsdatei named.conf ist das Herzstück der BIND-Konfiguration. In ihr werden globale Servereinstellungen, Zonendefinitionen sowie Zugriffskontrollen festgelegt. Eine gut strukturierte und optimierte Konfiguration ist entscheidend für die Leistung und Sicherheit des BIND-Servers.

4.1.1 Aufbau der Konfigurationsdatei

Die Datei named.conf besteht aus mehreren Blöcken, die jeweils unterschiedliche Aspekte des DNS-Servers regeln. Jeder Block beginnt mit einem Schlüsselwort, gefolgt von einem Block aus geschweiften Klammern {}. Hier einige der wichtigsten Blöcke:

Ein Beispiel für eine einfache named.conf:

options {
    directory "/var/named";
    allow-query { any; };
    recursion yes;
    dnssec-enable yes;
};

zone "example.com" IN {
    type master;
    file "example.com.db";
};

logging {
    channel default_log {
        file "/var/log/named.log" versions 3 size 10m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    category default { default_log; };
};

4.1.2 Optionen für allgemeine Einstellungen

Im options-Block werden die globalen Einstellungen des BIND-Servers definiert. Diese beinhalten unter anderem:

4.1.3 Zugriffskontrollen und Sicherheitsaspekte

In der BIND-Konfiguration ist es entscheidend, Sicherheitsaspekte zu berücksichtigen, um den Server vor unberechtigtem Zugriff zu schützen. Dies erfolgt in der Regel durch die Konfiguration von Access Control Lists (ACLs) und die Beschränkung des Zugriffs auf bestimmte Funktionen.

Beispiel für eingeschränkte Zugriffskontrolle:

acl "trusted-nets" {
    192.168.0.0/16;
    10.0.0.0/8;
};

options {
    allow-query { trusted-nets; };
    allow-recursion { trusted-nets; };
};

Diese Konfiguration sorgt dafür, dass nur Clients aus den Netzwerken 192.168.0.0/16 und 10.0.0.0/8 DNS-Anfragen stellen und rekursive Anfragen an den Server senden dürfen.

4.1.4 Testen der Konfiguration

Nachdem Änderungen an der named.conf vorgenommen wurden, sollten diese immer vor dem Neustart des Servers überprüft werden, um Syntaxfehler zu vermeiden. Der Befehl named-checkconf überprüft die Konfigurationsdatei auf Fehler:

sudo named-checkconf

Wenn keine Ausgabe erfolgt, ist die Konfiguration fehlerfrei. Anschließend kann der BIND-Server neu gestartet werden, um die Änderungen zu übernehmen:

sudo systemctl restart named

Durch diese grundlegenden Einstellungen in der named.conf wird der BIND-Server initial konfiguriert und ist bereit, DNS-Dienste für das Netzwerk bereitzustellen. Weitere Anpassungen, wie die Zonenverwaltung und erweiterte Funktionen, können in den folgenden Kapiteln vorgenommen werden.

4.2 Zonenverwaltung in BIND

Die Zonenverwaltung ist eine der zentralen Aufgaben bei der Konfiguration eines BIND-Servers. Eine Zone stellt einen Teil des DNS-Namensraums dar, für den der Server autoritativ ist. In den Zonendateien werden die Zuordnungen von Domainnamen zu IP-Adressen sowie andere DNS-Informationen gespeichert.

4.2.1 Definieren von Master- und Slave-Zonen

In BIND wird zwischen Master-Zonen und Slave-Zonen unterschieden:

Beispiele für die Definition einer Master- und einer Slave-Zone in der named.conf:

Master-Zone:

zone "example.com" IN {
    type master;
    file "/var/named/example.com.db";
    allow-update { none; };
};

Slave-Zone:

zone "example.com" IN {
    type slave;
    file "/var/named/slave/example.com.db";
    masters { 192.168.1.10; };
};

In der Master-Zone wird die Datei example.com.db auf dem Server gespeichert und enthält die DNS-Einträge der Zone. In der Slave-Zone hingegen wird die Datei durch die Synchronisation mit dem Master-Server gefüllt.

4.2.2 Zonendateien und ihre Struktur

Eine Zonendatei enthält die eigentlichen DNS-Einträge für eine bestimmte Domain. Diese Datei beginnt mit einem SOA (Start of Authority)-Record, der angibt, welcher Server die Zone verwaltet und welche Parameter für die Aktualisierung der Zone gelten.

Ein Beispiel für eine Zonendatei (example.com.db):

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2023100101  ; Seriennummer
        3600        ; Refresh
        1800        ; Retry
        1209600     ; Expiry
        86400 )     ; Minimum TTL

    IN  NS  ns1.example.com.
    IN  NS  ns2.example.com.

@   IN  A   93.184.216.34
www IN  A   93.184.216.34
mail IN  A   93.184.216.35

4.2.3 Dynamische Updates in Zonen

BIND unterstützt dynamische DNS-Updates, bei denen DNS-Einträge zur Laufzeit hinzugefügt oder geändert werden können, ohne die Zonendatei manuell zu bearbeiten. Dies wird durch das Protokoll DDNS (Dynamic DNS) ermöglicht, das oft in Verbindung mit DHCP-Servern verwendet wird, um automatisch Einträge für neue Hosts zu erstellen.

Um dynamische Updates in einer Zone zu erlauben, muss der BIND-Server entsprechend konfiguriert werden:

Beispiel für eine Zone mit dynamischen Updates:

zone "example.com" IN {
    type master;
    file "/var/named/example.com.db";
    allow-update { key ddns-key; };
};

Zusätzlich muss ein TSIG (Transaction Signature)-Schlüssel konfiguriert werden, um die dynamischen Updates abzusichern:

key "ddns-key" {
    algorithm hmac-sha256;
    secret "your_secret_key_here";
};

Die dynamischen Updates können dann über den nsupdate-Befehl durchgeführt werden, der den TSIG-Schlüssel zur Authentifizierung nutzt:

nsupdate -k /path/to/keyfile

4.2.4 Seriennummer und Zonensynchronisation

Die Seriennummer in der SOA-Record ist entscheidend für die Zonensynchronisation zwischen Master- und Slave-Servern. Bei jeder Änderung an der Zonendatei muss die Seriennummer inkrementiert werden, damit Slave-Server erkennen, dass es eine neue Version der Zone gibt.

Typisches Format der Seriennummer:

2023100101  ; YYYYMMDDNN (Jahr, Monat, Tag, Änderung)

Dieses Format hilft, Änderungen an einer Zone chronologisch nachzuvollziehen.

4.2.5 Testen der Zonen

Nach der Erstellung oder Bearbeitung einer Zonendatei sollte diese immer auf Fehler überprüft werden, bevor sie vom BIND-Server geladen wird. Dies kann mit dem Befehl named-checkzone durchgeführt werden:

sudo named-checkzone example.com /var/named/example.com.db

Wenn die Zonendatei korrekt ist, wird eine Bestätigung ausgegeben. Anschließend kann die Zone entweder durch Neustart des BIND-Servers oder durch den rndc reload-Befehl neu geladen werden:

sudo rndc reload

Mit der korrekten Verwaltung von Master- und Slave-Zonen sowie dynamischen Updates ist der BIND-Server in der Lage, eine stabile und flexible DNS-Infrastruktur bereitzustellen.

4.3 Zugriffskontrollen und ACLs (Access Control Lists)

Zugriffskontrollen sind ein wesentlicher Bestandteil der BIND-Konfiguration, um den DNS-Server vor unautorisierten Anfragen zu schützen und den Zugriff auf sensible Funktionen wie rekursive Abfragen oder Zonentransfers zu beschränken. In BIND werden Access Control Lists (ACLs) verwendet, um detaillierte Zugriffsregeln für bestimmte IP-Adressen oder Netzwerke zu definieren.

4.3.1 Einrichtung von ACLs zur Zugriffsbeschränkung

Eine ACL in BIND ist eine benannte Liste von IP-Adressen oder IP-Bereichen, die verwendet wird, um den Zugriff auf verschiedene Funktionen des DNS-Servers zu steuern. Die Definition einer ACL erfolgt in der Datei named.conf im acl-Block. Sobald eine ACL definiert ist, kann sie in verschiedenen Optionen des Servers verwendet werden, um den Zugriff zu regulieren.

Beispiel für die Definition einer ACL in der named.conf:

acl "trusted-nets" {
    192.168.0.0/24;
    10.0.0.0/8;
};

In diesem Beispiel wird eine ACL mit dem Namen “trusted-nets” erstellt, die zwei Netzwerke umfasst: das Netzwerk 192.168.0.0/24 und das größere Netzwerk 10.0.0.0/8. Diese ACL kann nun verwendet werden, um den Zugriff auf bestimmte Serverfunktionen einzuschränken.

4.3.2 Steuerung des Zugriffs auf Zonen und Dienste

ACLs können in verschiedenen Abschnitten der named.conf verwendet werden, um den Zugriff auf bestimmte Funktionen oder Zonen zu regulieren. Zu den häufigsten Verwendungszwecken gehören:

Beispiel für die Verwendung einer ACL zur Steuerung von DNS-Anfragen und rekursiven Abfragen:

options {
    allow-query { trusted-nets; };
    allow-recursion { trusted-nets; };
};

In diesem Beispiel dürfen nur Clients aus den Netzwerken, die in der ACL “trusted-nets” definiert sind, DNS-Abfragen und rekursive Anfragen an den Server senden.

4.3.3 Whitelisting und Blacklisting von IP-Adressen

Zusätzlich zur Verwendung von ACLs für den allgemeinen Zugriff auf den Server kann BIND auch verwendet werden, um bestimmte IP-Adressen explizit zuzulassen (Whitelisting) oder zu blockieren (Blacklisting).

Whitelisting: Bei der Erstellung einer ACL können Sie bestimmte IP-Adressen oder Netzwerke explizit zulassen. Dies ist besonders nützlich, wenn nur eine ausgewählte Gruppe von Clients Zugriff auf den Server erhalten soll.

Beispiel für Whitelisting:

acl "whitelist" {
    203.0.113.10;
};
options {
    allow-query { whitelist; };
}

In diesem Beispiel wird nur die IP-Adresse 203.0.113.10 als zulässig für DNS-Abfragen definiert.

Blacklisting: Sie können auch eine ACL erstellen, die bestimmte IP-Adressen oder Netzwerke blockiert, indem Sie die none-Option verwenden.

Beispiel für Blacklisting:

acl "blacklist" {
    203.0.113.20;
};
options {
    allow-query { any; };
    deny-query { blacklist; };
};

In diesem Beispiel werden Anfragen von der IP-Adresse 203.0.113.20 explizit blockiert, während alle anderen Clients Anfragen stellen dürfen.

4.3.4 Beispiel für eine vollständige Zugriffskonfiguration

Ein typisches Beispiel für eine Zugriffskontrolle in einem BIND-Server, bei dem verschiedene Funktionen auf spezifische Netzwerke beschränkt werden, könnte folgendermaßen aussehen:

acl "internal-nets" {
    192.168.1.0/24;
    10.0.0.0/8;
};

options {
    allow-query { any; };               # Alle dürfen Abfragen stellen
    allow-recursion { internal-nets; }; # Nur interne Netze dürfen rekursive Anfragen stellen
    allow-transfer { none; };           # Zonentransfers sind generell verboten
    allow-update { none; };             # Keine dynamischen Updates erlaubt
}

In diesem Beispiel dürfen alle Clients DNS-Abfragen stellen, aber nur Clients aus den internen Netzwerken dürfen rekursive Anfragen senden. Zonentransfers und dynamische Updates sind vollständig blockiert.

4.3.5 Testen und Überprüfen der Zugriffskontrollen

Um sicherzustellen, dass die Zugriffskontrollen korrekt funktionieren, können Tools wie dig und nslookup verwendet werden, um Anfragen vom Client aus zu testen. Hier sind einige Tests, die durchgeführt werden können:

Die Serverlogs sollten überwacht werden, um sicherzustellen, dass unerwünschte Anfragen korrekt abgelehnt und legitime Anfragen verarbeitet werden.

Durch die Konfiguration von ACLs und die strikte Kontrolle des Zugriffs auf den DNS-Server wird die Sicherheit und Zuverlässigkeit des BIND-Servers erhöht, insbesondere in komplexen Netzwerken oder öffentlichen DNS-Diensten.

4.4 Logging und Protokollierung

Das Logging spielt eine entscheidende Rolle bei der Verwaltung und Überwachung eines BIND-Servers. Es bietet Administratoren wertvolle Einblicke in den Betrieb des Servers, die Fehlerbehebung und die Überprüfung von Sicherheitsereignissen. BIND erlaubt eine flexible Konfiguration des Loggings, sodass Protokolle für verschiedene Kategorien und Ereignisse erstellt werden können.

4.4.1 Konfiguration der Log-Einstellungen in BIND

Die Logging-Konfiguration erfolgt im logging-Block der named.conf. In diesem Block können verschiedene Channels und Categories definiert werden, um festzulegen, welche Art von Informationen protokolliert werden und wohin sie geschrieben werden sollen.

Ein Beispiel für eine einfache Logging-Konfiguration:

logging {
    channel default_log {
        file "/var/log/named.log" versions 3 size 10m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    
    category default { default_log; };
};

In diesem Beispiel wird der default_log-Channel erstellt, der Protokolle in die Datei /var/log/named.log schreibt. Diese Datei wird auf maximal 10 MB begrenzt, und es werden maximal drei Versionen der Datei aufbewahrt. Die Protokolleinträge enthalten die Zeit, die Schwere der Meldung und die Kategorie des Ereignisses.

4.4.2 Protokollierung von Anfragen und Serveraktivitäten

BIND erlaubt es, verschiedene Aspekte des Serverbetriebs zu protokollieren, darunter DNS-Anfragen, Fehler und Sicherheitsereignisse. Einige der wichtigsten Kategorien sind:

Beispiel für die Protokollierung von DNS-Anfragen:

logging {
    channel query_log {
        file "/var/log/query.log" versions 5 size 5m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    
    category queries { query_log; };
};

In diesem Beispiel wird ein separater Log-Channel für DNS-Abfragen konfiguriert, der die Protokolle in die Datei /var/log/query.log schreibt. Es werden maximal fünf Versionen der Datei mit einer Größe von jeweils 5 MB aufbewahrt.

4.4.3 Protokollierung von Fehlern und Warnungen

BIND kann detaillierte Protokolle über Fehler und Warnungen ausgeben, die während des Betriebs auftreten. Diese Informationen sind besonders nützlich, um Probleme bei der Namensauflösung, Zonensynchronisation oder Sicherheitsvorfällen zu diagnostizieren.

Beispiel für die Protokollierung von Fehlern:

logging {
    channel error_log {
        file "/var/log/error.log" versions 3 size 5m;
        severity error;
        print-time yes;
    };
    
    category default { error_log; };
    category security { error_log; };
};

In diesem Beispiel wird eine separate Log-Datei für Fehlerereignisse erstellt. Die Schwere der protokollierten Ereignisse ist auf error beschränkt, sodass nur schwerwiegende Fehler erfasst werden.

4.4.4 Fehlersuche und Performance-Monitoring über Logs

Logs sind ein wertvolles Werkzeug, um Fehler und Leistungsprobleme auf einem BIND-Server zu identifizieren. Einige typische Szenarien, in denen Logs hilfreich sind:

4.4.5 Rotation der Logdateien

Um zu verhindern, dass Log-Dateien zu groß werden und den Speicherplatz auf dem Server ausfüllen, können sie automatisch rotiert werden. In den Konfigurationen oben wird bereits die Rotation über die Option versions eingerichtet. Diese gibt an, wie viele Versionen einer Logdatei aufbewahrt werden sollen, bevor ältere gelöscht werden.

Alternativ kann die Logrotation auch über externe Tools wie logrotate gesteuert werden, das auf den meisten Unix- und Linux-Systemen verfügbar ist. Ein Beispiel für eine logrotate-Konfiguration für BIND:

/var/log/named.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        /bin/systemctl reload named > /dev/null 2>&1 || true
    endscript
}

Diese Konfiguration rotiert die Log-Datei named.log täglich und behält sieben Versionen. Die Dateien werden komprimiert, um Speicherplatz zu sparen, und nach jeder Rotation wird der BIND-Dienst neu geladen, um die Protokollierung fortzusetzen.

4.4.6 Überprüfung der Log-Einstellungen

Nach der Konfiguration der Logging-Optionen sollte sichergestellt werden, dass BIND die Logs korrekt erstellt. Das Überprüfen der Log-Dateien kann mit einem einfachen tail-Befehl erfolgen, um die neuesten Einträge anzuzeigen:

tail -f /var/log/named.log

Mit dieser Protokollierung und Überwachung hat der Administrator stets einen Überblick über den Zustand des BIND-Servers und kann potenzielle Probleme frühzeitig erkennen und beheben.

4.5 Weiterleitung von Anfragen (Forwarding)

Die Weiterleitung von DNS-Anfragen, auch Forwarding genannt, ist eine nützliche Funktion von BIND, um DNS-Abfragen an einen oder mehrere andere DNS-Server weiterzuleiten. Diese Methode wird häufig verwendet, wenn der lokale DNS-Server nicht rekursiv auf externe DNS-Zonen zugreifen soll oder wenn ein zentrales DNS-Caching an einem übergeordneten Server durchgeführt werden soll. Durch das Forwarding können DNS-Abfragen effizient verteilt und optimiert werden.

4.5.1 Einrichtung von Forwarding-Servern

Um Anfragen weiterzuleiten, müssen in der BIND-Konfiguration Forwarder definiert werden. Dies geschieht im options-Block der named.conf-Datei. Hier geben Sie die IP-Adressen der DNS-Server an, an die die Abfragen weitergeleitet werden sollen.

Ein einfaches Beispiel für das Einrichten von Forwardern:

options {
    directory "/var/named";
    forwarders {
        8.8.8.8;  // Google DNS
        8.8.4.4;  // Google DNS
    };
    forward only;
};

In diesem Beispiel werden alle DNS-Anfragen, die der BIND-Server nicht selbst auflösen kann, an die Google Public DNS-Server (8.8.8.8 und 8.8.4.4) weitergeleitet. Die Option forward only stellt sicher, dass der BIND-Server ausschließlich diese Forwarder verwendet und keine eigene rekursive Auflösung durchführt.

Beispiel für die Verwendung von forward first:

options {
    directory "/var/named";
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward first;
};

In diesem Fall wird der BIND-Server zunächst versuchen, die Anfrage an die Forwarder zu senden. Falls diese nicht antworten, wird der BIND-Server selbst versuchen, die Anfrage rekursiv zu lösen.

4.5.2 Verteilte DNS-Infrastrukturen mit BIND

In größeren Netzwerkumgebungen kann das Forwarding dazu verwendet werden, eine verteilte DNS-Infrastruktur zu implementieren, bei der verschiedene DNS-Server in unterschiedlichen Netzwerken oder Standorten die DNS-Auflösung durchführen. In diesen Szenarien kann ein lokaler BIND-Server als erster Anlaufpunkt dienen und Anfragen an zentrale DNS-Server weiterleiten, die beispielsweise für bestimmte interne Zonen oder externe Namensauflösungen verantwortlich sind.

Beispiel für eine Infrastruktur mit mehreren Forwardern:

options {
    directory "/var/named";
    forwarders {
        192.168.1.10;  // Interner DNS-Server
        8.8.8.8;       // Externer DNS-Server
    };
    forward first;
};

In diesem Fall wird der BIND-Server zuerst den internen DNS-Server (192.168.1.10) für die Auflösung kontaktieren und bei Bedarf auf externe DNS-Server wie Google Public DNS zurückgreifen.

4.5.3 Caching bei weitergeleiteten Anfragen

Eine der Hauptvorteile des Forwardings in Kombination mit BIND ist die Möglichkeit, Anfragen lokal im Cache zu speichern. Wenn der BIND-Server eine DNS-Anfrage an einen Forwarder weiterleitet und eine Antwort erhält, kann diese Antwort im lokalen Cache gespeichert werden. Zukünftige Anfragen für denselben Namen können dann direkt aus dem Cache bedient werden, was die Netzwerklast reduziert und die Antwortzeit verkürzt.

Das Caching-Verhalten wird durch den TTL (Time To Live)-Wert bestimmt, der vom autoritativen DNS-Server mit der Antwort zurückgegeben wird. Der BIND-Server speichert die Antwort für die Dauer des TTL-Wertes und löscht sie danach aus dem Cache, sodass bei einer erneuten Anfrage wieder der Forwarder kontaktiert wird.

4.5.4 Testen der Forwarding-Konfiguration

Nach der Konfiguration der Forwarder sollte getestet werden, ob die Weiterleitung korrekt funktioniert. Dies kann mit Tools wie dig durchgeführt werden, indem explizit eine DNS-Abfrage an den BIND-Server gestellt wird, der die Anfrage an den Forwarder weiterleiten sollte.

Beispiel für einen Test mit dig:

dig @localhost example.com

Dieser Befehl sendet eine DNS-Abfrage an den lokalen BIND-Server. Wenn die Weiterleitung korrekt konfiguriert ist, sollte die Antwort vom Forwarder zurückkommen und im Cache des BIND-Servers gespeichert werden.

Um sicherzustellen, dass das Forwarding korrekt funktioniert und der Cache richtig genutzt wird, können die Cache-Daten mit dem folgenden Befehl überprüft werden:

rndc dumpdb -cache

Dieser Befehl erzeugt eine Datei mit dem aktuellen Inhalt des DNS-Caches. Die Datei befindet sich in der Regel im Verzeichnis /var/named/data/cache_dump.db oder einem ähnlichen Verzeichnis, abhängig von der Systemkonfiguration.

4.5.5 Troubleshooting bei Forwarding-Problemen

Wenn das Forwarding nicht wie erwartet funktioniert, gibt es einige häufige Probleme und deren Lösungen:

Mit dieser Konfiguration und dem richtigen Troubleshooting kann BIND effektiv als Forwarder verwendet werden, um DNS-Anfragen effizient zu verteilen und das Netzwerk zu entlasten.

4.6 Verwaltung von Zonen und DNS-Einträgen

Die Verwaltung von Zonen und DNS-Einträgen ist eine der Hauptaufgaben eines BIND-Servers. In den Zonendateien werden DNS-Informationen wie A-Records, CNAME-Records, MX-Records und viele andere Einträge gespeichert, die den Namen einer Domain mit einer IP-Adresse oder anderen wichtigen Informationen verbinden. Ein BIND-Administrator muss die Zonendateien korrekt pflegen, um sicherzustellen, dass DNS-Abfragen richtig beantwortet werden.

4.6.1 Manuelles Erstellen und Bearbeiten von Zonen

Eine DNS-Zone repräsentiert einen Teil des DNS-Namensraums. Jede Zone enthält eine Sammlung von DNS-Einträgen, die Namen und IP-Adressen innerhalb dieser Zone verknüpfen. Eine Zonendatei enthält DNS-Resource-Records und beginnt immer mit einem SOA (Start of Authority)-Record, der die grundlegenden Informationen über die Zone definiert.

Beispiel einer einfachen Zonendatei (example.com.db):

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2023100101  ; Seriennummer
        3600        ; Refresh
        1800        ; Retry
        1209600     ; Expiry
        86400 )     ; Minimum TTL

    IN  NS  ns1.example.com.
    IN  NS  ns2.example.com.

@   IN  A   93.184.216.34
www IN  A   93.184.216.34
mail IN  A   93.184.216.35

In dieser Zonendatei:

4.6.2 Wichtige DNS-Einträge (A, AAAA, CNAME, MX, etc.)

BIND unterstützt viele verschiedene Arten von DNS-Resource-Records, die jeweils unterschiedliche Informationen speichern. Zu den häufigsten DNS-Einträgen gehören:

4.6.3 TTL- und SOA-Einträge in Zonen

Der TTL (Time to Live)-Wert gibt an, wie lange ein DNS-Eintrag im Cache eines Clients oder Zwischenservers gespeichert wird, bevor eine erneute Anfrage gestellt werden muss. In der Zonendatei kann ein globaler TTL-Wert definiert werden, der für alle Einträge gilt. Zusätzlich kann jeder Eintrag einen eigenen TTL-Wert haben.

Beispiel für eine Zonendatei mit spezifischem TTL-Wert:

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2023100101  ; Seriennummer
        3600        ; Refresh
        1800        ; Retry
        1209600     ; Expiry
        86400 )     ; Minimum TTL

    IN  A   93.184.216.34
www IN  A   93.184.216.34
mail IN  A   93.184.216.35

In diesem Beispiel hat die Zone einen globalen TTL-Wert von 86400 Sekunden (24 Stunden), der für alle Einträge gilt, es sei denn, ein Eintrag hat einen eigenen TTL-Wert.

Der SOA-Record enthält mehrere wichtige Felder, die die Verwaltung der Zone steuern:

4.6.4 Testen und Verwalten von Zonen

Nach dem Erstellen oder Bearbeiten einer Zonendatei sollten diese Änderungen getestet werden, um Syntaxfehler oder andere Probleme zu vermeiden. BIND bietet hierfür das Werkzeug named-checkzone an, das die Syntax der Zonendatei überprüft:

sudo named-checkzone example.com /var/named/example.com.db

Wenn die Zonendatei korrekt ist, gibt der Befehl eine Bestätigung aus. Sollte ein Fehler vorliegen, wird dieser detailliert beschrieben, sodass er behoben werden kann.

Nach erfolgreicher Prüfung kann die Zone mit dem Befehl rndc reload neu geladen werden, damit die Änderungen wirksam werden:

sudo rndc reload

Durch diese Schritte wird sichergestellt, dass Zonen korrekt erstellt und verwaltet werden und der BIND-Server DNS-Anfragen zuverlässig beantwortet.

4.7 Rekursive und autoritative Konfiguration

BIND kann in zwei Hauptrollen betrieben werden: als rekursiver DNS-Server und als autoritativer DNS-Server. Jede dieser Rollen hat ihre eigene Funktion im DNS-System, und in einigen Fällen kann ein BIND-Server auch beide Rollen gleichzeitig übernehmen. Eine klare Unterscheidung und die korrekte Konfiguration sind entscheidend für den effizienten Betrieb des Servers.

4.7.1 Unterschiede zwischen rekursiven und autoritativen Servern

4.7.2 Konfiguration eines autoritativen Servers

Um BIND als autoritativen Server zu konfigurieren, müssen die Zonen, für die der Server verantwortlich ist, in der Konfigurationsdatei named.conf definiert werden. Diese Zonen enthalten die DNS-Einträge für die Domains, die der Server verwaltet.

Beispiel einer autoritativen Zonen-Konfiguration:

zone "example.com" IN {
    type master;
    file "/var/named/example.com.db";
};

In diesem Beispiel ist der BIND-Server der Master für die Zone example.com und verwendet die Zonendatei /var/named/example.com.db, um DNS-Anfragen zu beantworten.

Um sicherzustellen, dass der Server nur autoritative Antworten gibt, sollten rekursive Anfragen deaktiviert werden:

options {
    recursion no;
};

4.7.3 Konfiguration eines rekursiven Servers

Ein rekursiver DNS-Server beantwortet Anfragen für alle Domänen, indem er die Namensauflösung bei den Root-Servern beginnt und die Antwortschritte weiterverfolgt, bis er die endgültige Antwort erhält. In der Regel wird ein rekursiver DNS-Server auch als Caching-Server betrieben, sodass die Ergebnisse wiederholter Anfragen zwischengespeichert und schneller bereitgestellt werden können.

Beispiel einer rekursiven Konfiguration:

options {
    recursion yes;
    allow-query { any; };
    forwarders {
        8.8.8.8;  // Google DNS
        8.8.4.4;  // Google DNS
    };
};

In dieser Konfiguration nimmt der Server rekursive Anfragen entgegen und leitet sie gegebenenfalls an die konfigurierten Forwarder (z. B. Google Public DNS) weiter.

4.7.4 Kombinierte Rollen: Caching und autoritativ

Ein BIND-Server kann sowohl als rekursiver Caching-Server als auch als autoritativer Server für bestimmte Zonen betrieben werden. Dies ist besonders nützlich in Umgebungen, in denen der Server interne Zonen verwaltet und gleichzeitig externe DNS-Anfragen rekursiv auflösen soll.

Um eine kombinierte Konfiguration zu erstellen, definieren Sie sowohl die autoritativen Zonen als auch die rekursive Namensauflösung:

options {
    recursion yes;
    allow-query { any; };
};

zone "example.com" IN {
    type master;
    file "/var/named/example.com.db";
};

In diesem Beispiel verwaltet der Server die Zone example.com als autoritativer Server und kann gleichzeitig rekursive Anfragen für externe Domänen wie google.com beantworten.

4.7.5 Best Practices für gemischte Umgebungen

In gemischten Umgebungen, in denen ein BIND-Server sowohl als rekursiver als auch als autoritativer Server fungiert, sollten einige Best Practices beachtet werden:

4.7.6 Testen der rekursiven und autoritativen Konfiguration

Nach der Konfiguration sollte überprüft werden, ob der Server die richtigen Antworten für autoritative und rekursive Anfragen liefert. Verwenden Sie dazu Tools wie dig, um verschiedene Abfragen zu testen:

Durch diese Schritte wird sichergestellt, dass der BIND-Server korrekt als rekursiver und/oder autoritativer Server konfiguriert ist und Anfragen zuverlässig bearbeitet.

4.8 DNSSEC-Integration in BIND

DNSSEC (Domain Name System Security Extensions) ist eine Erweiterung des DNS-Protokolls, die die Authentizität und Integrität der DNS-Daten sicherstellt. DNSSEC schützt DNS-Informationen vor Manipulationen, indem DNS-Antworten digital signiert werden. BIND unterstützt DNSSEC vollständig und ermöglicht es, Zonen zu signieren und die Signaturen von anderen DNS-Servern zu validieren.

4.8.1 Aktivierung von DNSSEC

Um DNSSEC auf einem BIND-Server zu aktivieren, müssen mehrere Schritte durchgeführt werden. Zunächst wird in der named.conf-Konfigurationsdatei festgelegt, dass DNSSEC verwendet werden soll. Die Option dnssec-enable sorgt dafür, dass der Server signierte Antworten akzeptiert und überprüft.

Beispiel einer Konfiguration:

options {
    dnssec-enable yes;
    dnssec-validation auto;
};

4.8.2 Erstellen und Verwalten von Schlüsseln

Um eine DNS-Zone mit DNSSEC zu signieren, müssen zwei Arten von Schlüsseln erstellt werden:

  1. Zonensignaturschlüssel (ZSK): Dieser Schlüssel signiert die DNS-Einträge innerhalb einer Zone.
  2. Schlüsselsignaturschlüssel (KSK): Dieser Schlüssel signiert den Zonensignaturschlüssel und wird in höheren DNS-Ebenen, z. B. bei der Root-Zone, hinterlegt.

Schlüssel werden mit dem Befehl dnssec-keygen erstellt. Beispiel für die Erstellung eines ZSK:

dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com

Dieser Befehl erzeugt einen Zonensignaturschlüssel für die Domain example.com mit einem 2048-Bit-RSA-Schlüssel.

Beispiel für die Erstellung eines KSK:

dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE example.com

Der Zonensignaturschlüssel und der Schlüsselsignaturschlüssel werden in Form von Schlüsseldateien gespeichert. Die Dateinamen folgen dem Muster:

4.8.3 Signieren von Zonen

Nachdem die Schlüssel erstellt wurden, muss die Zone signiert werden. Dies geschieht mit dem Befehl dnssec-signzone. Dieser Befehl signiert die Zonendatei und erstellt eine signierte Kopie.

Beispiel für das Signieren einer Zone:

dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o example.com -t /var/named/example.com.db

Nach der Signierung wird eine neue signierte Zonendatei erstellt, die im Betrieb verwendet wird.

4.8.4 DNSSEC-Schlüsselrotation

Um die Sicherheit zu gewährleisten, sollten DNSSEC-Schlüssel regelmäßig erneuert werden. Dies erfordert die Erstellung neuer ZSKs und KSKs sowie das Signieren der Zone mit den neuen Schlüsseln. Der alte Schlüssel bleibt für eine Übergangsphase gültig, um die Kompatibilität zu gewährleisten.

Die Rotation der Schlüssel erfolgt ähnlich wie bei der erstmaligen Erstellung, jedoch mit zusätzlichen Schritten zur Integration der neuen Schlüssel in die DNS-Hierarchie und zur Entfernung der alten Schlüssel nach Abschluss der Übergangsphase.

4.8.5 Validierung von DNSSEC-Signaturen

BIND kann auch als rekursiver DNS-Server verwendet werden, um DNSSEC-Signaturen zu validieren. Dies wird durch die Option dnssec-validation in der named.conf gesteuert:

options {
    dnssec-enable yes;
    dnssec-validation auto;
};

Wenn dnssec-validation auf auto gesetzt ist, überprüft BIND alle DNSSEC-signierten Antworten, die er empfängt, gegen die bekannten Trust Anchors (z. B. die Root-Zone).

4.8.6 Testen der DNSSEC-Konfiguration

Nach der Aktivierung von DNSSEC und der Signierung der Zone sollte die Konfiguration getestet werden, um sicherzustellen, dass die Zone korrekt signiert und validiert wird. Verwenden Sie den Befehl dig, um die DNSSEC-Informationen für eine Domain abzurufen:

dig +dnssec example.com

In der Antwort sollten zusätzliche DNSSEC-spezifische Felder angezeigt werden, darunter die RRSIG-Einträge, die die digitalen Signaturen der DNS-Einträge enthalten.

Um sicherzustellen, dass die DNSSEC-Validierung korrekt funktioniert, kann der folgende Befehl verwendet werden, um gezielt nach der Validierung zu fragen:

dig +dnssec +multi example.com

4.8.7 Fehlersuche bei DNSSEC

Sollte die DNSSEC-Validierung fehlschlagen, können mehrere Dinge überprüft werden:

Durch die Integration von DNSSEC in BIND wird sichergestellt, dass DNS-Antworten nicht manipuliert werden und die Integrität der DNS-Daten gewahrt bleibt. DNSSEC erhöht somit die Sicherheit des DNS-Protokolls erheblich.

4.9 Verwaltung von Reverse-DNS-Zonen

Neben der Auflösung von Domainnamen zu IP-Adressen bietet BIND auch Unterstützung für Reverse-DNS (rDNS), das die Umkehrung der normalen DNS-Auflösung ermöglicht. Mit Reverse-DNS kann eine IP-Adresse in einen Domainnamen aufgelöst werden. Dies ist nützlich für Anwendungen wie E-Mail-Server, die oft eine Reverse-Lookup durchführen, um die Herkunft einer Anfrage zu überprüfen.

4.9.1 Funktionsweise von Reverse-DNS (PTR-Records)

Im Gegensatz zu einer normalen DNS-Zone, bei der Domainnamen in IP-Adressen aufgelöst werden, erfolgt die Auflösung in einer Reverse-DNS-Zone durch PTR-Records (Pointer-Records), die IP-Adressen in Domainnamen umwandeln.

Um eine IPv4-Adresse wie 192.0.2.1 in einen Domainnamen aufzulösen, wird eine spezielle Zone verwendet, die als in-addr.arpa bekannt ist. Die IP-Adresse wird umgekehrt und in diese Zone eingetragen:

4.9.2 Konfiguration von Reverse-Zonen

Um eine Reverse-DNS-Zone in BIND zu konfigurieren, muss eine entsprechende in-addr.arpa-Zone definiert werden. Hier ein Beispiel für die Konfiguration einer Reverse-DNS-Zone für das Subnetz 192.0.2.0/24:

In der named.conf:

zone "2.0.192.in-addr.arpa" IN {
    type master;
    file "/var/named/2.0.192.in-addr.arpa.db";
};

In der Zonendatei 2.0.192.in-addr.arpa.db:

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2023100101  ; Seriennummer
        3600        ; Refresh
        1800        ; Retry
        1209600     ; Expiry
        86400 )     ; Minimum TTL

    IN  NS  ns1.example.com.
    IN  NS  ns2.example.com.

1   IN  PTR  www.example.com.
2   IN  PTR  mail.example.com.

4.9.3 Konfiguration von Reverse-Zonen für IPv6 (ip6.arpa)

Für IPv6-Adressen verwendet das DNS-System eine spezielle ip6.arpa-Zone. Die Funktionsweise ist ähnlich wie bei IPv4-Reverse-DNS, allerdings wird der PTR-Record für die IPv6-Adresse in einer etwas anderen Form eingetragen.

Beispiel für die Konfiguration einer IPv6-Reverse-DNS-Zone:

In der named.conf:

zone "8.b.d.0.1.0.0.2.ip6.arpa" IN {
    type master;
    file "/var/named/8.b.d.0.1.0.0.2.ip6.arpa.db";
};

In der Zonendatei 8.b.d.0.1.0.0.2.ip6.arpa.db:

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2023100101  ; Seriennummer
        3600        ; Refresh
        1800        ; Retry
        1209600     ; Expiry
        86400 )     ; Minimum TTL

    IN  NS  ns1.example.com.
    IN  NS  ns2.example.com.

1.2.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0 IN PTR www.example.com.

In diesem Beispiel wird der PTR-Record für die IPv6-Adresse 2001:0db8::1 erstellt, der auf den Domainnamen www.example.com zeigt.

4.9.4 Testen und Verifizieren von Reverse-Lookups

Nach der Konfiguration der Reverse-DNS-Zone sollte der Server getestet werden, um sicherzustellen, dass die Reverse-Lookups korrekt funktionieren. Hierzu kann das Tool dig verwendet werden, um gezielt nach PTR-Records zu fragen.

Beispiel für einen Reverse-Lookup für die IP-Adresse 192.0.2.1:

dig -x 192.0.2.1

Die Antwort sollte den PTR-Record enthalten:

;; ANSWER SECTION:
1.2.0.192.in-addr.arpa. 86400 IN PTR www.example.com.

Ebenso kann ein Reverse-Lookup für eine IPv6-Adresse durchgeführt werden:

dig -x 2001:0db8::1

Auch hier sollte die Antwort den PTR-Record für www.example.com enthalten.

4.9.5 Vermeidung von häufigen Problemen bei Reverse-DNS

Durch die korrekte Einrichtung und Verwaltung von Reverse-DNS-Zonen stellt der BIND-Server sicher, dass IP-Adressen zu Domainnamen aufgelöst werden können, was in vielen Netzwerkanwendungen, insbesondere in der E-Mail-Überprüfung, von entscheidender Bedeutung ist.