Konfigurationsdatei named.conf

Zentrale Konfiguartionsdatei einer jeden BIND9-Konfiguration ist die Datei "/etc/named.conf". Sie enthält die frei wählbaren Namen der
Zonendateien mit den eigentlichen Datenbankeinträgen. Ausserdem umfasst sie die Steuerdaten, wie Protokollierung, Zugangsbeschränkungen,
Schlüssel- und Zonendefinitionen oder Startoptionen für den BIND9-Daemon "named".

Die Konfiguartionsdatei "named.conf" gliedert sich in mehrere Options, das Verhalten des Nameservers steuern. Man unterscheidet zwischen Globalen Options und Zonen Options. Globale Options sind allgemeiner Natur und betreffen alle Zonen. Eine Zonen Option betrifft nur die Zone, der sie zugeordnet ist. Für nicht in named.conf aufgeführte Options gelten Default-Werte. Wenn eine Option sowohl global als auch zonenspezifisch definiert ist, dann hat die Zonen Option Vorrang.

Dann gibt es auch noch die Direktiven controls, key und logging, die Sicherheitbedingungen, das Verhalten mit Schöüsseln und das Loggen behandeln.

Da die Datei "named.conf" sehr umfangreich und unübersichtlich werden kann, habe ich mir angewöhnt, die einzelnen Bereiche in separate Dateien aufteilen. Diese sind dann nach dem Bereich benannt, named.conf.options, named.conf.logund named.conf.zone. Eingebunden werden diese Dateien dann in der named.conf über die Anweisungen

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.zone";
include "/etc/bind/named.conf.log";

Das hat den einscheidenen Vorteil, dass man schneller an der richtigen Stelle die Einstellungen findet und ändern kann. Zusätzlich sieht das aufgeräumter und strukturierter aus.

 

 

 

Gemeinsame Direktiven

Access Control Lists  acl

Die Access Control Lists definieren jeweils eine Gruppe von Hosts, der dann der Zugriff auf den Nameserver werden gewährt oder verweigert kann.
Die acl-Syntax gestaltet sich wie folgt:

acl <ACL-Name> {
        <Match-element>;
        [<Match-element>;  ...]
};

Hier wird <ACL-Name> mit dem Namen der ACL ersetzt und die <Match-element>-Elemente sind eine durch Semikolons getrennte Liste von IP-Adressen. Die meiste Zeit wird eine einzelne IP-Adresse oder IP-Netzwerk-Notation (wie 10.0.1.0/24) verwendet, um die IP-Adressen mit der ACL zu identifizieren.

Die folgenden Zugriffssteuerungslisten sind bereits als Stichworte, um die Konfiguration zu vereinfachen definiert:

options - Direktive

Die Direktive definiert die globalen Server-Konfigurationsoptionen und setzt Standardwerte. Sie kann benutzt werden, um den Ort des named-Arbeitsverzeichnis angegeben werden und es definiert die Art der erlaubten Anfragen, und vieles mehr.

Die options-Direktive hat die folgende Syntax:

options {
          <option>;
          [<option>; ...]
};

In dieser Syntax werden die <option> Direktiven mit einer gültigen Option ersetzt.

Die folgenden häufig benutzten Optionen sind demzufolge:

  • allow-query - Legt fest, welche Hosts erlaubt ist den Nameserver abfragen. Standardmäßig sind alle Hosts dazu berechtigt. Eine Zugriffssteuerungsliste, einer Sammlung von IP-Adressen oder Netzwerken kann festgelegt werden, dass nur bestimmte Hosts den Nameserver abfragen.
  • allow-recursion - Ähnelt allow-query zu ermöglichen, diese Option erlaubt rekursive Abfragen. Standardmäßig sind allen Hosts rekursive Abfragen auf dem Nameserver erlaubt.
  • blackhole - Gibt an, welchen Hosts es nicht erlaubt ist, den Server abzufragen.
  • directory - Ändert das named-Arbeitsverzeichnis, wenn ein anderer Wert als der Standardwert gewählt wird, /var/named/.
  • forward - Spezifziert das Forwarding-Verhalten einer forwarders Direktive.
    Dabei werden folgende Optionen akzeptiert,
    - first - Dieser Parameter bewirkt, dass die DNS-Anfragen zuerst geforwarded werden, bevor versucht wird, diese über die Root-Nameserver aufzulösen.
    - only - In diesem Fall werden alle Anfragen direkt weitergeleitet. Das macht Sinn bei einer Firewall.
  • forwarders - Legt eine Liste von gültigen IP-Adressen für die Nameserver an, dessen Abfragen zur Auflösung weitergeleitet werden.
  • listen-on - Hier weiß BIND, auf welchen Netzwerkinterfaces Anfragen entgegen genommen werden soll. Fehlt dieser Eintrag, dann werden alle Interfaces verwendet.
    Mit dem Gebrauch dieser Direktive auf einem DNS-Server, der auch als Gateway fungieren kann, wird BIND so konfiguriert, dass er nur Anfragen aus dem eigenen Netzwerk zulassen soll.

Eine listen-on Direktive zeigt das folgende Beispiel:

options {
          listen-on { 127.0.0.1;
                            198.205.10.2;};
};

Hier akzeptiert der Server nur die Anfragen, die von Localhost und dem Host mit der IP-Adresse 198.205.10.2 gestellt werden.

  • notify - Legt fest, ob mit dem Namen benachrichtigt die Slave-Server, wenn eine Zone aktualisiert. Er akzeptiert die folgenden Optionen:
       - yes - Die Slave-Server werden informiert.
       - no - Die Slave-Server werden nicht informiert.
       - explicit - Es werden nur die Slave-Server informiert, die in der Zonen-Direktive in der Option also-notify aufgelistet sind.
  • pid-file - Bestimmt den Speicherort der Prozess-ID-Datei, die von dem named-Service angelegt wird.
  • statistics-file - Spezifiziert den alternativen Speicerorte der Statistik-Datei. Standardmäßig werden die Statistiken von named unter /var/named/named.stats abgelegt.

include - Direktive

Die include-Direktive erlaubt es, Dateien in die named.conf miteinzubeziehen. Auf diese Weise können sensible Konfigurationsdaten (wie keys) in einer separaten Datei mit eingeschränkten Rechten ausgelagert werden. Oder die einzelnen Sektionen der named.conf auf mehrere Dateien zu verteilen, ohne dass das den Betrieb des Nameserver beeinträchtigt.

Die include-Syntax gestaltet sich so,

include "<Dateiname>"

Hier wird <Dateiname> durch den absoluten Pfad zu der betreffenden Datei ersetzt.

zone - Direktive

Die zone-Direktive legt die Eigenschaften einer Zone fest, sowie den Ort der Konfigurationsdatei und zonenspezifische Optionen. Diese Anweisung kann auch verwendet werden, um globale options-Direktiven zu überschreiben.

Eine zone-Direktive hat die folgende Syntax

  zone <Zonenname> <zone-class> {
       <Zone-options>;
       [<Zone-options>;  ...]
  };

In dieser Direktive ist <zone-name> der Name der Zone, <zone-class> die optionale Klasse der Zone und <zone-options> stellt eine Liste von Optionen dar, die die Eigenschaften der Zone beschreibt. Das Attribut <zone-name> ist für die zone-Direktive besonders wichtig, da es der Standardwert für die $ORIGIN-Variable, nach der die Zonen-Dateien im Verzeichnis (/var/named/ | /var/lib/bind/) zugeordnet sind. Der named-Daemon hängt den Namen der Zone, somit den Inhalt von $ORIGIN, an jeden nicht vollqualifizierten Domänennamen in der Zonendatei. Zum Beispiel wenn eine zone-Direktive den Namespace für example.com definiert, dann wird example.com als <zone-name> verwendet und wird am Ende des Hostnamen host, der in der als Resource Record in der Zonendatei enthalten ist, in der Art host.example.com angefügt.

Generell ist Vorsicht geboten, wenn Hosts erlaubt wird die Informationen über die Zonen zu aktualisieren. Deshalb ist das Aktivieren dieser Option nur sinnvoll, wenn der entsprechende Host absolut sicher ist. Im Allgemeinen ist es besser, wenn ein Administrator die Zonen-Aktualisierung manuell durchführt und den Nameserver reloaded.

  • file - Spezifiziert den Dateinamen in dem named-Arbeitsverzeichnis mit den Konfigurationsdateien der Zonen. Sinnvollerweise wird der Dateiname dem Zonennamen entsprechen, also zum Beispiel zone.example.com.
  • masters - Diesen Eintrag braucht man nur für Slave-Zonen und er gibt an, von welchem Nameserver die Zonendatei transferiert werden soll.
  • notify - Spezifiziert die Server, die über Aktualisierungen informiert werden sollen und einen Zonentransfer durchführen sollen.
    Dabei sind diese Optionen möglich
    - yes - Der Slave-Server wird informiert.
    - nein - Der Slave-Server wird nicht informiert.
    - explicit - Der Slave-Server wird nur informiert, wenn ein Eintrag in dem also-notify besteht.    
  • type master - Das master legt fest, dass diese Zone auf diesem Nameserver verwaltet wird. Das setzt eine korrekt erstellte Zonendatei voraus.
  • type slave - Diese Zone wird von einem anderen Nameserver transferiert. Muss zusammen mit masters verwendet werden.
  • type hint - Die Zone . vom Typ hint wird für die Angabe der Root-Nameserver verwendet. Diese Zonendefinition kann man unverändert lassen.
  • allow-update - Diese Option regelt den Schreibzugriff von extern auf die Zonendaten. Damit wäre es Clients möglich, sich selbst im DNS einzutragen, was aus Sicherheitsgründen nicht wünschenswert ist. Ohne diesen Eintrag, sind Zonen-Updates generell untersagt, dieses Beispiel würde daran auch nichts ändern, da ! * ebenfalls alles verbietet.
  • allow-query - Spezifiert die Clients, denen es erlaubt ist, Informationen über diese Zone anfordern. Standardmäßig sind alle Anfragen zugelassen.
  • allow-transfer - Spezifiert die Slave-Server, denen es erlaubt ist, den Transfer von den Zonen anfordern. Standardmäßig sind alle Übertragungsanforderungen zugelassen.
  • zone-statistics - Weist BIND an, die Statistiken für diese Zone zu erstellen.
  • interface-interval - BIND durchsucht regelmäßig die Netzwerkschnittstellen nach neuen oder nicht mehr vorhandenen Interfaces. Setzt man diesen Wert auf 0, so wird darauf verzichtet und BIND lauscht nur auf den beim Start gefundenen Interfaces. Alternativ kann man das Intervall in Minuten angeben. Voreingestellt sind 60 Minuten.

Beispiel für zwei Zonen

Hier finden Sie ein Beispiel für eine zone-Anweisung für den primären Nameserver-Hosting-example.com mit der IP-Adresse 192.168.0.1:

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

Hier wird die Zone example.com identifiziert, der Typ auf Master festegelegt und der named-Service wird angewiesen, die Datei /var/named/example.com.zone einzulesen. Außerdem wird named angewiesen, anderen Hosts das Aktualisieren zu unterbinden.

Die Zone-Direktive von example.com für einen Slave-Server sieht etwas anders aus. Für einen Slave-Server wird der Typ auf slave gestetzt und anstelle der Zeile allow-update steht master mit der IP-Adresse des Master-Servers.

  zone "example.com" {
    type slave;
    file "example.com.zone";
    master {192.168.0.1;  };
  };

Diese Zone-Direktive auf dem Slave-Server fragt den Master-Server mit der IP 192.168.0.1 nach Informationen über die Zone example.com ab. Die eingehenden Informationen des Master-Server werden unter /var/named/example.com.zone abgespeichert.

Weitere Direktiven

  • controls - Konfiguriert verschiedene Sicherheitsbedingungen um mit rndc den BIND-Service verwalten zu können.
  • key "<key-name>" - Definiert einen bestimmten Schlüssel. Die Schlüssel werden verwendet, um verschiedene Aktionen wie sichere Aktualisierungen oder die Verwendung des Befehls rndc authentifizieren.
  • algorithmus <algorithm-name> - Die Art des verwendeten Algorithmus, zB. DSA oder HMAC-MD5.
  • secret "<key-value>" - Der verschlüsselte Schlüssel.
  • logging - Die Logging-Direktive konfiguriert eine Vielzahl von Protokollierungsoptionen für die Nameserver. Der Kanal assoziiert Ausgabemethoden, Formatoptionen und Schweregrade mit einem Namen, den Sie dann verwenden können, mit categorie name kann man wählen, wie verschiedene Klassen von Nachrichten protokolliert werden.


Sie benötigen nur eine Logging-Direktive, um so viele Kanäle und Kategorien zu definieren, wie Sie wollen. Wenn es mehrere Logging-Direktiven in einer Konfigurationsdatei, bestimmt die erste definierte Direktive die Protokollierung, und Warnungen werden für die anderen erteilt. Wenn keine logging-Direktive existiert erfolgt die Standard-Logging-Konfiguration:

logging {
         category default {default_syslog; default_debug; };
         Kategorie Panik{default_syslog; ; };
         KategoriePaket {default_debug; };
         Kategorie eventlib{default_debug; };
    };