/* ****************************** named.conf ****************************** */ // ISC Bind Konfigurationsdatei auf Basis der Beispiels-Konfigurationsdatei // /usr/share/doc/bind*/sample/ aus dem zugehörigen RPM-Paket // Konfig-Beschreibung: https://dokuwiki.nausch.org/doku.php/centos:bind_c7 /* ********** Variablendefinition für die unterschiedlichen ACLs ********** */ acl dmz { 10.0.0.0/24; }; acl intra { 10.0.10.0/25; }; acl primary { 10.0.0.27/32; }; acl interfaces { 10.0.0.27/32; 10.0.10.27/32; }; /* *********************** rndc Schlüsseldefinition *********************** */ include "/etc/rndc_local.key"; /* *********************** rndc Control-Definition ************************ */ controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; /* ***************** Definition der allgemeinen Optionen ****************** */ options { // Arbeitsverzeichnis des Servers directory "/var/named"; // Das Verzeichnis, in dem sich die öffentlichen und privaten // DNSSEC-Schlüsseldateien befinden sollen. key-directory "/var/named"; // Das Verzeichnis, in dem die Dateien gespeichert werden, welche // die verwalteten DNSSEC-Schlüssel verfolgen. managed-keys-directory "/var/named/dynamic"; // Pfadname der Datei, um die eingebauten vertrauenswürdigen Schlüssel // von named zu überschreiben. Pfad zum ISC DLV Schlüssel. bindkeys-file "/etc/named.iscdlv.key"; // Der Pfadname der Datei, in die ein TSIG-Sitzungsschlüssel geschrieben // werden soll, der mit named für die Verwendung durch nsupdate -l // erzeugt wurde. session-keyfile "/run/named/session.key"; // Der Pfadname der Datei, auf die der Server die security roots // schreibt, wenn er hierzu angewiesen wird. secroots-file "/var/named/data/named_secroots.db"; // Der Pfadname der Datei, auf die der Server die Datenbank übergibt, // wenn er angewiesen wird. dump-file "/var/named/data/cache_dump.db"; // Der Pfadname der Datei, an die der Server Statistiken anhängt, // wenn er Server hierzu angewiesen wird. statistics-file "/var/named/data/named_stats.txt"; // Der Pfadname der Datei, in die der Server beim Beenden die // Speicherverbrauchsstatistik schreibt. memstatistics-file "/var/named/data/named_mem_stats.txt"; // Pfadname der Datei, in die der Server Abfragen, die gerade // wiederkehren, ausgibt, wenn er dazu angewiesen wird. recursing-file "/var/named/data/named_recursing.db"; // Pfadname der Datei, in die der Server seine Prozess-ID schreibt. pid-file "/run/named/named.pid"; // Wird folgender Parameter auf "yes" gesetzt, dann fügt der Server // bei der Generierung von Antworten nur dann Datensätze zur authority // und additional data sections hinzu, wenn sie benötigt werden. minimal-responses no; /* Wird folgender Parameter auf "yes" gesetzt, dann wird der Server versuchen bei einer rekursiven DNS-Abfrage, alles versuchen um die Anfrage bestmöglich abzuarbeiten. Ist die Rekursion ausgeschaltet ist und der Server die Antwort noch nicht kennt, gibt er eine referral response (Empfehlungsantwort) zurück. Die Default-Einstellung ist "yes". Wichtig: Das Setzen der Rekursions-Option auf "no" verhindert nicht, dass Clients Daten aus dem Server-Cache beziehen; es verhindert nur, dass neue Daten als Folge von Client-Abfragen zwischengespeichert werden. Sofern der rekursiver DNS-Server über eine öffentliche IP-Adresse verfügt, MUSS zwingend eine Zugriffskontrolle aktiviert werden, um Abfragen auf die legitimen Benutzer zu beschränken! Nichtbeachtung kann zu Folgen haben, dass sonst der Server ein Teil von groß angelegten DNS-Amplifikations-Angriffen werden könnte. Die Implementierung von BCP38 in Ihrem Netzwerk würde diese Angriffsfläche erheblich reduzieren! */ recursion yes; // DNSsec-Support aktivieren dnssec-enable yes; /* DNSsec-Validierung aktivieren und mit den Root-Zertificaten abgleichen. "yes" = DNSSEC-Validierung ist aktiviert, aber ein Vertrauensanker muss manuell konfiguriert werden. Eine Validierung findet erst dann statt, wenn mindestens einen vertrauenswürdigen Schlüssel manuell konfiguriert haben. Dies ist die Voreinstellung. "no" = Die DNSSEC-Validierung ist deaktiviert, und rekursive Server verhalten sich in der "altmodischen" Art und Weise, unsichere DNS-Lookups durchzuführen. "auto"= Die DNSSEC-Validierung ist aktiviert, und es wird ein Standard-Trust-Anker (als Teil von BIND enthalten) für die DNS-Rootzone verwendet. */ dnssec-validation auto; /* Wird diese option gesetzt, stellt dnssec-lookaside dem validator eine alternative Methode zur Verfügung, um DNSKEY-Einträge bei Start einer Zone (top of a zone) zu validieren. Wenn dnssec-lookaside auf auto gesetzt ist, dann werden die eingebauten Standardwerte für die DLV-Domäne und den Vertrauensanker verwendet, zusammen mit einem eingebauten Schlüssel für die Validierung. */ dnssec-lookaside auto; // Diese Option wird verwendet, um den Zeichensatz und die Syntax // bestimmter Domänennamen in Masterdateien und/oder DNS-Antworten, // die vom Netzwerk empfangen werden, einzuschränken. check-names master warn; // Gibt an, welche Hosts diesen Server, einen Slave, zusätzlich zu den // Zonen-Mastern über Zonenänderungen benachrichtigen dürfen. allow-notify { 127.0.0.1; }; // Definiert, welche Hosts gewöhnliche DNS-Fragen stellen dürfen. allow-query { ::1; 127.0.0.1; dmz; intra; }; // Legt fest, welche Hosts rekursive Abfragen über diesen Server // durchführen dürfen. allow-recursion { ::1; 127.0.0.1; dmz; intra; }; // Gibt an, welche Hosts Zonentransfers vom Server empfangen dürfen. allow-transfer { 127.0.0.1; primary; }; // Gibt eine Liste von Adressen an, von denen der Server keine Anfragen // annimmt oder die zur Lösung einer Anfrage verwendet werden. Anfragen // von diesen Adressen werden nicht beantwortet. blackhole { none; }; // Die Schnittstellen und Ports, von denen der Server Anfragen // beantwortet, können mit der Listen-On-Option angegeben werden. listen-on port 53 { 127.0.0.1; interfaces; }; listen-on-v6 port 53 { ::1; }; // Sofern der Server die Antwort auf eine Frage nicht kennt, fragt er // andere Nameserver ab. query-source gibt die Adresse und den Port an, // die für solche Abfragen verwendet werden. query-source address * port *; // Maximale Größe eines Core Dump coresize default; // Maximale Größe an RAM, die der Server verbrauchen darf. datasize default; // Maximale Anzahl von geöffneten Dateien. files unlimited; // Maximale Menge an Stack-Speicher, die der Server verwenden darf. stacksize default; // Maximale Größe jeder Journaldatei fest. // (default ist unbegrenzt, was auch 2 Gigabyte bedeutet) max-journal-size unlimited; // Maximale Anzahl gleichzeitiger rekursiver Suchvorgänge, die der Server // für Clients durchführt. Der Standardwert ist 1000. recursive-clients 1000; // Maximale Anzahl gleichzeitiger TCP Verbindungen die der Server von // Clients akzeptiert. Der Standardwert ist 100. tcp-clients 100; /* Maximale Menge an Arbeitsspeicher (in Bytes), die für den Server-Cache verwendet werden kann. Ein Wert von 0 ist speziell, d.h. Datensätze werden nur aus dem Cache gelöscht, wenn ihre TTLs ablaufen ist. Ein weiteres spezielles Schlüsselwort unlimited bedeutet den maximalen Wert von 32-Bit-Ganzzahlen ohne Vorzeichen (0xffffffffffff), die haben nicht den gleichen Effekt wie 0 auf Maschinen, die mehr als 32 Bit unterstützen. Alle positiven Werte kleiner als 2MB werden ignoriert und auf 2MB gesetzt. Bei einem Server mit mehreren Views gilt die Begrenzung separat für den Cache der einzelnen Views. Der Standardwert ist 0. */ max-cache-size 0; /* List Queue Depth: Die Standardeinstellung und das Minimum ist 10. Sofern der Kernel Accept-Filter-Verbindungen unterstützt, werden die Daten im Kernel-Space gehalten und gewartet bevor die Anfrage weiterverarbeitet wird. Werte ungleich 0 unter 10 werden stillschweigend erhöht. ein Wert von 0 kann gesetzt werden und definiert auf den meisten Plattformen, dass die Länge der Listen-Warteschlange auf einen systembedingter Standardwert gesetzt wird. */ tcp-listen-queue 10; /* Der Server scannt die Liste der Netzwerkschnittstellen in regelmäßigen Abständen (Minuten). Die Standardeinstellung ist 60 Minuten. Der Maximalwert beträgt 28 Tage (40320 Minuten). Wird der wert auf 0 gesetzt, erfolgt die Überprüfung der Schnittstelle nur dann, wenn die Konfigurationsdatei geladen wird. Nach dem Scan beginnt der Server mit dem Abhören von Abfragen auf neu entdeckte Interfaces (vorausgesetzt, sie sind durch die Listen-On-Konfiguration erlaubt) und hört auf, auf nicht mehr vorhandene Interfaces zu hören. */ interface-interval 0; /* Definiert die Zeit in Sekunden, in denen eine lahme Serveranzeige zwischengespeichert wird. 0 deaktiviert das Caching. (Dies wird NICHT empfohlen!) Der Standardwert ist 600 (10 Minuten) und der Maximalwert ist 1800 (30 Minuten). */ lame-ttl 600; /* Um den Netzwerkverkehr zu reduzieren und die Leistung zu erhöhen, speichert der Server negative Antworten. max-ncache-ttl wird verwendet, um eine maximale Aufbewahrungszeit für diese Antworten im Server in Sekunden festzulegen. Die Standardeinstellung von max-ncache-ttl ist 10800 Sekunden (3 Stunden). max-ncache-ttl kann nicht länger als 7 Tage dauern und wird stillschweigend auf 7 Tage gekürzt, sollte er auf einen größeren Wert gesetzt werden! */ max-ncache-ttl 10800; /* Legt die maximale Zeit fest, für die der Server gewöhnliche (positive) Antworten zwischenspeichert. Der Standardwert ist eine Woche (7 Tage). Ein Wert von Null kann dazu führen, dass alle Abfragen SERVFAIL zurückgeben, da im Auflösungsprozess verloren gegangene Caches von Zwischen-RRsets (z.B. NS und glue AAAA/A-Records) verloren gehen! */ max-cache-ttl 604800; /* Definiert die Größe des angebotenen EDNS UDP-Puffers (in Bytes), um die Größe der empfangenen Pakete zu kontrollieren. Gültige Werte sind 512 bis 4096 (Werte außerhalb dieses Bereichs werden stillschweigend angepasst). Der Standardwert ist 4096. Der übliche Grund für das Setzen von edns-udp-size auf einen nicht standardmäßigen Wert ist es, UDP-Antworten zu erhalten, um durch gebrochene Firewalls zu gehen, die fragmentierte Pakete blockieren und/oder UDP-Pakete blockieren, die größer als 512 Bytes sind. named wird auf die Verwendung von 512 Bytes zurückgreifen, wenn es eine Reihe von Zeitüberschreitungen beim Anfangswert erhält. 512 Bytes werden nicht angeboten, um Websites zu ermutigen, ihre Firewalls zu reparieren. Kleine EDNS UDP-Größen führen zu einer übermäßigen Nutzung von TCP. */ edns-udp-size 4096; /* Legt die maximale EDNS UDP-Nachrichtengröße fest, die in Bytes gesendet wird. Gültige Werte sind 512 bis 4096 (Werte außerhalb dieses Bereichs werden stillschweigend angepasst). Der Standardwert ist 4096. Der übliche Grund für das Setzen von max-udp-size auf einen nicht standardmäßigen Wert ist es, UDP-Antworten zu erhalten, um durch defekte Firewalls zu gehen, die fragmentierte Pakete blockieren und/oder UDP-Pakete blockieren, die größer als 512 Bytes sind. Dies ist unabhängig vom beworbenen Empfangspuffer (edns-udp-size). Wird dieser Wert auf einen niedrigen Wert gesetzt, wird zusätzlicher TCP-Verkehr zum Nameserver erzeugt! */ max-udp-size 4096; /* Definiert den Anfangswert (Minimum) der Anzahl rekursiver gleichzeitiger Clients für eine beliebige Abfrage () fest, die der Server akzeptiert, bevor er weitere Clients ignorieren wird. Named wird versuchen, diesen Wert selbst zu tunen und Änderungen werden protokolliert. Der Standardwerte ist 10. */ clients-per-query 10; /* Definiert den Anfangswert (Maximum) der Anzahl rekursiver gleichzeitiger Clients für eine beliebige Abfrage () fest, die der Server akzeptiert, bevor er neue Client-Verbindungen anlehnen wird. Named wird versuchen, diesen Wert selbst zu tunen und Änderungen werden protokolliert. Die Standardeinstellung ist 100. */ max-clients-per-query 100; /* Festlegung der Angaben (Version), die der Server über eine Abfrage des Namens version.bind mit dem Typ TXT, Klasse CHAOS, melden soll. Der Default-Wert ist die reale Versionsnummer des Servers. Durch die Angabe der Version none wird die Verarbeitung der Abfragen deaktiviert. */ version "DNS - nausch.org"; /* Der Hostname, den der Server über eine Abfrage des Namens hostname.bind mit dem Typ TXT, Klasse CHAOS, melden soll. Dies ist standardmäßig der Hostname des Rechners, auf dem sich der Name-Server befindet, wie er von der Funktion gethostname() gefunden wird. Die ID, die der Server beim Empfang einer NSID-Abfrage (Name Server Identifier) oder einer Abfrage des Namens ID.SERVER vom Typ TXT, Klasse CHAOS, melden soll. Der primäre Zweck solcher Abfragen ist es, herauszufinden, welcher einer Gruppe von Anycast-Servern Ihre Anfragen tatsächlich beantwortet. Angabe von server-id none; deaktiviert die Verarbeitung der Abfragen. Die Angabe von server-id hostname; bewirkt, dass named den Hostnamen verwendet, wie er durch die Funktion gethostname() gefunden wurde. Der Standardwert ist none. */ server-id none; }; /* ******************* Definition der Logging-Parameter ******************* */ logging { // Definition der unterschiedlichen Kanäle // Standard-Startmeldungen channel default_debug { file "data/named.run"; severity dynamic; print-category yes; print-severity yes; print-time yes; }; // Genehmigung und Ablehnung von DNS-Anfragen channel custom_security { file "data/named.security"; severity info; print-category yes; print-severity yes; print-time yes; }; // Lame servers. Dabei handelt es sich um Fehlkonfigurationen bei // Remote-Servern, die von BIND 9 entdeckt wurden, als dieser // versuchte, diese Server während der Auflösung abzufragen. channel custom_lame-servers { file "data/named.lame-servers"; severity info; print-category yes; print-severity yes; print-time yes; }; // Definition der beiden Kathegorien security und lame-servers category security { custom_security; default_syslog; default_debug; }; category lame-servers { custom_lame-servers ; default_syslog; default_debug; }; }; /* ******************** Definition der Views and Zones ******************** */ /* WICHTIG: ======== Die Reihenfolge der View-Anweisungen ist signifikant. Eine Client-Anfrage wird im Kontext der ersten Ansicht beantwortet, zu der sie passt! */ view "intra" IN { // Ist der Anfragende Client aus dem Netz 10.0.10.0/25 (Intranet)? match-clients { intra; }; /* ACHTUNG: Eine Zone kann entweder durch Bearbeiten von Zonendateien und Neuladen des Servers oder durch dynamisches Update aktualisiert werden, aber NIEMALS durch beides! Ist die dynamische Aktualisierung für eine Zone mit der Option "allow-update" aktiviert, darf KEINENFALLS die Zonendatei manuell bearbeitet werden! Der Server würde dann nicht mehr versuchen, die Informationen zur Zone aus der Datei zu laden! */ // Zone: root server zone "." IN { type hint; file "named.ca"; }; // Zone: localhost include "/etc/named.rfc1912.zones"; // Zone: intra.nausch.org (forward) zone "intra.nausch.org" IN { type master; file "master/intra.nausch.org.zone.db"; }; // Zone: intra.nausch.org (reverse) zone "10.0.10.in-addr.arpa" IN { type master; file "master/10.0.10.in-addr.arpa.zone.db"; }; // Zone: dmz.nausch.org (forward) zone "dmz.nausch.org" IN { type master; file "intra/dmz.nausch.org.zone.db"; }; // Zone: dmz.nausch.org (reverse) zone "0.0.10.in-addr.arpa" IN { type master; file "intra/0.0.10.in-addr.arpa.zone.db"; }; }; view "dmz" IN { // Ist der Anfragende Client aus dem Netz 10.0.0.0/24 (DMZ)? match-clients { localhost; dmz; }; /* ACHTUNG: Eine Zone kann entweder durch Bearbeiten von Zonendateien und Neuladen des Servers oder durch dynamisches Update aktualisiert werden, aber NIEMALS durch beides! Ist die dynamische Aktualisierung für eine Zone mit der Option "allow-update" aktiviert, darf KEINENFALLS die Zonendatei manuell bearbeitet werden! Der Server würde dann nicht mehr versuchen, die Informationen zur Zone aus der Datei zu laden! */ // Zone: root server zone "." IN { type hint; file "named.ca"; }; // Zone: localhost include "/etc/named.rfc1912.zones"; // Zone: intra.nausch.org (forward) zone "intra.nausch.org" IN { type master; file "master/intra.nausch.org.zone.db"; }; // Zone: intra.nausch.org (reverse) zone "10.0.10.in-addr.arpa" IN { type master; file "master/10.0.10.in-addr.arpa.zone.db"; }; // Zone: dmz.nausch.org (forward) zone "dmz.nausch.org" IN { type master; file "master/dmz.nausch.org.zone.db"; }; // Zone: dmz.nausch.org (reverse) zone "0.0.10.in-addr.arpa" IN { type master; file "master/0.0.10.in-addr.arpa.zone.db"; }; }; /* *************************** sonstige includes ************************** */ include "/etc/named.root.key";