Bewertung 2


Die Kandidaten sollten in der Lage sein, BIND für die Funktion als caching-only DNS-Server zu konfigurieren. Dieses Lernziel beinhaltet die Fähigkeit, ein BIND 4.9 named.boot File auf das BIND 8.x named.conf Format zu konviertieren und DNS mittels kill oder ndc neu zu laden. Ebenfalls enthalten ist die Konfiguration von Logging und von Optionen wie Verzeichnisstruktur für Zone Files.

Schlüsseldateien, Begriffe und Hilfsmittel beinhalten:

  • /etc/named.conf
  • /usr/sbin/ndc
  • /usr/sbin/named-bootconf
  • kill

Konfigurationsdateien

Die zentrale Konfigurationsdatei von bind8 ist /etc/named.conf. Hier werden die verschiedensten grundlegenden Einstellungen vorgenommen. Bei älteren bind-Versionen (4.9.x) hiess diese Datei /etc/named.boot und hatte ein vollkommen anderes Format. Um die Umstellung von der einen zur anderen Version zu erleichtern, liefert bind8 ein Shellscript named-bootconf mit, mit dem bind4.9 Konfigurationsdateien in das Format von bind8 gebracht werden können.

Die Einrichtung eines Caching-Only Nameservers haben wir in der Vorbereitung auf die LPI102 Prüfung schon durchgespielt, hier also nur noch die etwas spezifischeren Angaben:

Konfiguration des Loggings

Die BIND-8 Version hat eine neue Form der Konfiguration des Loggings eingeführt. Unter der Sektion logging in der Konfigurationsdatei können sehr detailierte Angaben gemacht werden, welche Informationen der Nameserver mitprotokolliert und was er mit den Informationen tun soll.

In der Konfigurationsdatei darf nur eine Sektion logging existieren. Sollten mehrere existieren, so wird die erste benutzt und für alle anderen wird eine Warnung ausgegeben.

Das Logging basiert auf sogenannten Channels (Kanälen), die festlegen, was mit Meldungen passiert, die auf eben diese Channels geschickt werden. Erst wenn alle Channels definiert wurden, kommt die Einstellung, welche Meldungen auf welche Channels geschickt werden.

Im Prinzip stehen für Channels drei verschiedene Techniken zur Verfügung: file Dateiname Meldungen an diesen Kanal werden in die angegebene Datei geschrieben. Zusätzlich können hier noch Angaben über die maximale Größe der Datei, sowie die Anzahl der zu erstellenden Versionen gemacht werden. syslog (Herkunft) Meldungen an diesen Kanal werden unter der Verwendung der angegebenen Herkunft (kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, authpriv, ftp, local0-7) an den Syslog-Daemon weitergegeben. Die Priorität wird später (für alle drei denkbaren Kanaltypen gleich) unter dem Begriff severity angegeben. null Diese Meldungen werden ignoriert.

Es können beliebig viele Kanäle definiert werden.

Optional können noch folgende Einstellungen pro Kanal getroffen werden: severity Entspricht der Priorität bei syslog. Mögliche Werte sind critical, error, warning, notice, info, debug [level], dynamic. print-category Soll die Kategorie der Meldung mit ausgegeben werden (yes oder no). print-severity Soll die Priorität der Meldung mit ausgegeben werden (yes oder no). print-time Soll die Zeit mit ausgegeben werden (yes oder no). Der syslogd gibt die Zeit immer mit an, hier kann das also ausgeschaltet sein (no), in Dateien ist es aber sehr praktisch, wenn sie mit angegeben ist (yes).

Wenn die Kanäle definiert sind, so kann dann mit der Anweisung category entschieden werden, welche Meldungen auf welche Kanäle geschickt werden. Dazu stehen verschiedene Kategorien zur Verfügung, die im folgenden nur kurz genannt sind. Eine genaue Beschreibung liefert die Handbuchseite named.conf(5).

Categories (Bedeutung in Klammern) sind: default (alles), config (High-Level Konfiguration), parser (Low-Level Konfiguration), queries (eine Meldung für jede Abfrage), lame-servers, panic, update (dynamische Updates), ncache, xfer-in (eingehende Zonen-Transfers), xfer-out (ausgehende Zonen-Transfers), db (alle Datenbankoperationen), eventlib, packet, notify, cname, security, os, insist, maintenance, load, response-checks.

Eine Konfiguration für logging könnte beispielsweise also folgendermaßen aussehen:

  logging {
    // Zuerst definieren wir ein paar Kanäle
    channel alle_abfragen {
      file "/var/log/dns-queries" versions 5 size 10m;
      print-time yes;
      print-category no;
      print severity no;
    };
    
    channel normallog {
      syslog daemon;		
      severity dynamic;  // Die Priorität wird übernommen
    };

    channel muelleimer {
      none;
    };
    
    // Jetzt bestimmen wir, welche Kategorie in welchen Kanal geht
    category default {
      normallog;
    };
    
    category queries {
      alle_abfragen;
    };
    
    category lame-servers {
      muelleimer;
    };
  };

Konfiguration der Optionen

Wie beim Logging, so darf auch nur ein Optionsblock in der Konfigurationsdatei von BIND8 stehen. Existieren mehrere, so wird nur der erste abgearbeitet und für alle weiteren werden Warnungen ausgegeben.

Es stehen über 50 verschiedene Optionen zur Verfügung, die wir nicht alle kennen müssen. Die wichtigsten Optionen beziehen sich auf die Frage, in welchem Verzeichnis sich die Zonendateien befinden oder in welche Dateien die Dumps abgelegt werden sollen. Ein paar wichtige Optionen sind: version Versionsstring Die Versionsangabe. Wird diese Angabe weggelassen, so wird die wahre Version des NAMED verwendet. (Für die Freunde der Übertreibung ist es also möglich hier die Version 99.9.1 anzugeben). directory Pfad Das Arbeitsverzeichnis des Servers. Alle späteren Dateiangaben, die keinen absoluten Pfad beinhalten werden relativ zu diesem Pfad gewertet. dump-file Dateiname Der Dateiname, in den named seinen Server-Dump schreibt, wenn er das Signal SIGINT bekommt. recursion yes|no Wenn hier yes steht und eine Anfrage Rekursion erfordert, wird der Server alle Arbeit erledigen und die Antwort dem Client zurückgeben. Ansonsten wird er nur eine Referenz eines übergeordneten Servers zurückgeben. fetch-glue yes|no Wenn Rekursion abgeschaltet wurde, sollte auch fetch-glue abgeschaltet werden. data-size Zahl Die maximale Speichergröße, die ein Server nutzen darf. allow-transfer {Adressenliste}; Gibt an, welche Hosts die Erlaubnis haben, Zonentransfers vom Server zu empfangen.

Weitere Optionen betreffen die Zugriffskontrolle und Absicherung des Servers. Diese Optionen werden in den nächsten Abschnitten beschrieben.

Fremde Server spezifizieren

Mit dem Server-Statement können Eigenschaften fremder Server angegeben werden. Dieses Statement hat die Form

  server IP-Adresse{
    

[bogus yes|no;]

[transfer-format ( one-answer | many-answers ); ]

[keys { key_id [ key_id … ] }; ] }; Die Bedeutung der Einstellungen sind: bogus … Wenn bekannt wird, das ein bestimmter Server falsche Antworten versendet, kann er als bogus yes markiert werden. Damit wird er nicht mehr gefragt. transfer-format … Ein Zonen-Transfer kann entweder einzelne Pakete mit jeweils nur einer Antwort oder Pakete mit mehreren Antworten verschicken. Mehrere Antworten können nur Bind-Versionen ab 8.1 versenden, aus diesem Grund kann hier eingestellt werden, wie ein Zonentransfer ablaufen soll. keys … Wird augenblicklich noch ignoriert. Für zukünftige Erweiterungen, um Nameserver eindeutig zu identifizieren.

Das Kontrollprogramm ndc

Das Programm ndc (Name Daemon Control) erlaubt es, einem bind8 Nameserver Befehle im laufenden Betrieb zu übermitteln. Dazu wird ein gemeinsam genutzter Kanal (control-channel) genutzt, standardmäßig ist das die Datei /var/run/ndc, ein UNIX domain socket, der in dem Moment aufgebaut wird, in dem der Nameserver startet. Der Nameserver lauscht auf diesem Kanal nach Kommandos, das Programm ndc kann Kommandos auf diesen Kanal schreiben.

ndc öffnet eine interaktive Shell, die es erlaubt, dem Nameserver Kommandos zu schicken. Diese Shell kann mit dem Befehl /exit wieder geschlossen werden. Alternativ dazu kann ein Kommando auch gleich an die Kommandozeile angehängt werden.

Da es vom jeweils verwendeten Nameserver abhängt, welche Kommandos er versteht, gibt es nur einige wenige fest in ndc eingebaute Kommandos. Das wichtigste davon ist /help, das den Nameserver selbst frägt, welche Kommandos er anbietet und diese Kommandos dann auflistet.

Typische und wichtige Kommandos der Nameserver sind getpid Gibt die PID des Nameservers zurück. status Gibt den Status des Nameservers aus. Dazu zählen Informationen wie Version, Debuglevel und Anzahl gerade aktiver Querys stop Beendet den laufenden Namedaemon. Danach ist nur noch ein /exit möglich, da der Kommandokanal jetzt nicht mehr existiert. reload [zone] Mit diesem Befehl können entweder alle oder einzelne Zonen neu geladen werden. Nützlich wenn Zonendateien manuell verändert wurden. dumpdb Dieser Befehl erstellt eine Datei (meist /var/tmp/named_dump.db oder durch Umgebungsvariable _PATH_DUMPFILE festgelegt) in der der gesamte Cache des Nameservers steht.

Steuerung des Nameservers mit Signalen

Statt mit Hilfe des ndc-Programms können auch einige Aufgaben mit Signalen erledigt werden. Dazu muss mit kill ein bestimmtes Signal an die PID des Nameservers geschickt werden. Folgende Signale werden verarbeitet: SIGHUP Neu einlesen der Konfigurationsdatei und dadurch Neuladen der Datenbanken. SIGINT Dump des Cache in die selbe Datei, in die auch ndc dumpdb schreiben würde. SIGTERM Sichert alle Zoneninfos und beendet den Nameserver