Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dns_isc_bind_centos_7

DNS ISC bind CentOS 7

DNS ISC bind ist ein DNS-Server, welcher die Namensauflösung in einem Netzwerk realisieren kann. Der DNS-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten Namensserver weltweit und ebenfalls der bei den weltweiten Root-Nameservern verwendete DNS-Server.

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Überblick

Im nachfolgenden soll die Konfiguration eines primary DNS-Servers welcher als interner agierender DNS-Server für ein privates Netzwerk mit drei Zonen durchgeführt werden. Nachfolgende Zonen werden dabei verwaltet:

  • IDMZ - Domain: idmz.tachtler.net - IP-Adressbereich: 192.168.0.0/24
  • EDMZ - Domain: edmz.tachtler.net - IP-Adressbereich: 192.168.1.0/24
  • Intranet - Domain: intra.tachtler.net - IP-Adressbereich: 192.168.2.0/24

Des weiteren sollen views zum Einsatz kommen, die ja nach anfragendem client bzw. dessen IP-Adresse das ein oder andere, je nach view Ergebnis zurück liefern. D.h. je nach IP-Adresse des client, kann die Antwort auf eine DNS-Anfrage unterschiedlich ausfallen!

  • view - Intranet
  • view - IDMZ
  • view - EDMZ
  • view - Rest

:!: HINWEIS - IPv6 soll NICHT genutzt werden!!!

Installation

Zur Installation eines DNS-Servers wird nachfolgendes Paket benötigt:

  • bind - ist im base-Repository von CentOS enthalten

installiert werden.

Um DNS-Abfragen optimiert gegen den DNS-Server durchführen zu können, kann das Paket

  • bind-utils - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete bind installiert:

# yum install bind
Loaded plugins: changelog, priorities    
39 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.9.4-14.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package        Arch             Version                   Repository      Size
================================================================================
Installing:
 bind           x86_64           32:9.9.4-14.el7           base           1.8 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 1.8 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
bind-9.9.4-14.el7.x86_64.rpm                               | 1.8 MB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-9.9.4-14.el7.x86_64                                  1/1 
  Verifying  : 32:bind-9.9.4-14.el7.x86_64                                  1/1 

Installed:
  bind.x86_64 32:9.9.4-14.el7                                                   

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind installiert wurden:

# rpm -qil bind
Name        : bind
Epoch       : 32
Version     : 9.9.4
Release     : 14.el7
Architecture: x86_64
Install Date: Thu 16 Oct 2014 04:02:08 PM CEST
Group       : System Environment/Daemons
Size        : 4488923
License     : ISC
Signature   : RSA/SHA256, Fri 04 Jul 2014 02:47:46 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : bind-9.9.4-14.el7.src.rpm
Build Date  : Tue 10 Jun 2014 10:14:10 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.isc.org/products/BIND/
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
Description :
BIND (Berkeley Internet Name Domain) is an implementation of the DNS
(Domain Name System) protocols. BIND includes a DNS server (named),
which resolves host names to IP addresses; a resolver library
(routines for applications to use when interfacing with DNS); and
tools for verifying that the DNS server is operating properly.
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/rwtab.d/named
/etc/sysconfig/named
/etc/tmpfiles.d/named.conf
/run/named
/usr/lib/systemd/system/named-setup-rndc.service
/usr/lib/systemd/system/named.service
/usr/lib64/bind
/usr/libexec/generate-rndc-key.sh
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-checkds
/usr/sbin/dnssec-coverage
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/dnssec-verify
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/usr/share/doc/bind-9.9.4
/usr/share/doc/bind-9.9.4/Bv9ARM.ch01.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch02.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch03.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch04.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch05.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch06.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch07.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch08.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch09.html
/usr/share/doc/bind-9.9.4/Bv9ARM.ch10.html
/usr/share/doc/bind-9.9.4/Bv9ARM.html
/usr/share/doc/bind-9.9.4/Bv9ARM.pdf
/usr/share/doc/bind-9.9.4/CHANGES
/usr/share/doc/bind-9.9.4/README
/usr/share/doc/bind-9.9.4/isc-logo.pdf
/usr/share/doc/bind-9.9.4/man.arpaname.html
/usr/share/doc/bind-9.9.4/man.ddns-confgen.html
/usr/share/doc/bind-9.9.4/man.dig.html
/usr/share/doc/bind-9.9.4/man.dnssec-checkds.html
/usr/share/doc/bind-9.9.4/man.dnssec-coverage.html
/usr/share/doc/bind-9.9.4/man.dnssec-dsfromkey.html
/usr/share/doc/bind-9.9.4/man.dnssec-keyfromlabel.html
/usr/share/doc/bind-9.9.4/man.dnssec-keygen.html
/usr/share/doc/bind-9.9.4/man.dnssec-revoke.html
/usr/share/doc/bind-9.9.4/man.dnssec-settime.html
/usr/share/doc/bind-9.9.4/man.dnssec-signzone.html
/usr/share/doc/bind-9.9.4/man.dnssec-verify.html
/usr/share/doc/bind-9.9.4/man.genrandom.html
/usr/share/doc/bind-9.9.4/man.host.html
/usr/share/doc/bind-9.9.4/man.isc-hmac-fixup.html
/usr/share/doc/bind-9.9.4/man.named-checkconf.html
/usr/share/doc/bind-9.9.4/man.named-checkzone.html
/usr/share/doc/bind-9.9.4/man.named-journalprint.html
/usr/share/doc/bind-9.9.4/man.named.html
/usr/share/doc/bind-9.9.4/man.nsec3hash.html
/usr/share/doc/bind-9.9.4/man.nsupdate.html
/usr/share/doc/bind-9.9.4/man.rndc-confgen.html
/usr/share/doc/bind-9.9.4/man.rndc.conf.html
/usr/share/doc/bind-9.9.4/man.rndc.html
/usr/share/doc/bind-9.9.4/named.conf.default
/usr/share/doc/bind-9.9.4/sample
/usr/share/doc/bind-9.9.4/sample/etc
/usr/share/doc/bind-9.9.4/sample/etc/named.conf
/usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zones
/usr/share/doc/bind-9.9.4/sample/var
/usr/share/doc/bind-9.9.4/sample/var/named
/usr/share/doc/bind-9.9.4/sample/var/named/data
/usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.db
/usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.db
/usr/share/doc/bind-9.9.4/sample/var/named/named.ca
/usr/share/doc/bind-9.9.4/sample/var/named/named.empty
/usr/share/doc/bind-9.9.4/sample/var/named/named.localhost
/usr/share/doc/bind-9.9.4/sample/var/named/named.loopback
/usr/share/doc/bind-9.9.4/sample/var/named/slaves
/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.db
/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.db
/usr/share/man/man1/arpaname.1.gz
/usr/share/man/man5/named.conf.5.gz
/usr/share/man/man5/rndc.conf.5.gz
/usr/share/man/man8/ddns-confgen.8.gz
/usr/share/man/man8/dnssec-checkds.8.gz
/usr/share/man/man8/dnssec-coverage.8.gz
/usr/share/man/man8/dnssec-dsfromkey.8.gz
/usr/share/man/man8/dnssec-keyfromlabel.8.gz
/usr/share/man/man8/dnssec-keygen.8.gz
/usr/share/man/man8/dnssec-revoke.8.gz
/usr/share/man/man8/dnssec-settime.8.gz
/usr/share/man/man8/dnssec-signzone.8.gz
/usr/share/man/man8/dnssec-verify.8.gz
/usr/share/man/man8/genrandom.8.gz
/usr/share/man/man8/isc-hmac-fixup.8.gz
/usr/share/man/man8/lwresd.8.gz
/usr/share/man/man8/named-checkconf.8.gz
/usr/share/man/man8/named-checkzone.8.gz
/usr/share/man/man8/named-compilezone.8.gz
/usr/share/man/man8/named-journalprint.8.gz
/usr/share/man/man8/named.8.gz
/usr/share/man/man8/nsec3hash.8.gz
/usr/share/man/man8/rndc-confgen.8.gz
/usr/share/man/man8/rndc.8.gz
/var/log/named.log
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves

Mit nachfolgendem Befehl, wird das Pakete bind-utils installiert:

Loaded plugins: changelog, priorities    
39 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package bind-utils.x86_64 32:9.9.4-14.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch           Version                   Repository    Size
================================================================================
Installing:
 bind-utils         x86_64         32:9.9.4-14.el7           base         198 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 198 k
Installed size: 434 k
Is this ok [y/d/N]: y
bind-utils-9.9.4-14.el7.x86_64.rpm                         | 198 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-utils-9.9.4-14.el7.x86_64                            1/1 
  Verifying  : 32:bind-utils-9.9.4-14.el7.x86_64                            1/1 

Installed:
  bind-utils.x86_64 32:9.9.4-14.el7                                             

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind-utils installiert wurden:

# rpm -qil bind-utils
Name        : bind-utils
Epoch       : 32
Version     : 9.9.4
Release     : 14.el7
Architecture: x86_64
Install Date: Mon 13 Oct 2014 06:51:35 AM CEST
Group       : Applications/System
Size        : 444749
License     : ISC
Signature   : RSA/SHA256, Fri 04 Jul 2014 02:48:21 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : bind-9.9.4-14.el7.src.rpm
Build Date  : Tue 10 Jun 2014 10:14:10 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.isc.org/products/BIND/
Summary     : Utilities for querying DNS name servers
Description :
Bind-utils contains a collection of utilities for querying DNS (Domain
Name System) name servers to find out information about Internet
hosts. These tools will provide you with the IP addresses for given
host names, as well as other information about registered domains and
network addresses.

You should install bind-utils if you need to get information from DNS name
servers.
/etc/trusted-key.key
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz

Dienst/Deamon-Start einrichten

Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:

# systemctl enable named.service
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'

Eine Überprüfung, ob beim Neustart des Server der named-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e ^named.service
named.service                          enabled
bzw.
# systemctl is-enabled named.service
enabled

IPv6 deaktivieren

Der Einsatz von IPv6 soll nicht durchgeführt werden. Deshalb müssen nachfolgende Konfigurationsdateien wie folgt angepasst werden:

  • /etc/sysconfig/named
  • /etc/named.conf

Folgende Ergänzung in der Konfigurationsdatei /etc/sysconfig/named muss durchgeführt werden, um den named-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):

# BIND named process options
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# OPTIONS="whatever"     --  These additional options will be passed to named
#                            at startup. Don't add -t here, enable proper
#                            -chroot.service unit file.
 
# Tachtler
OPTIONS="-4"

Effektiv werden am Ende der Konfigurationsdatei nachfolgende Zeilen angefügt:

# Tachtler
OPTIONS="-4"

Folgende Änderung in der Konfigurationsdatei /etc/named.conf muss durchgeführt werden, um den named-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
 
options {
	listen-on port 53 { 127.0.0.1; };
        // Tachtler
        // default: listen-on-v6 port 53 { ::1; };
        // listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { localhost; };
 
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;
 
	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;
 
	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";
 
	managed-keys-directory "/var/named/dynamic";
 
	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
	type hint;
	file "named.ca";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Effektiv werden in der Konfigurationsdatei nachfolgende Zeilen geändert, sprich das „lauschen“ auf Port 53 via IPv6 wird auskommentiert:

        // Tachtler
        // default: listen-on-v6 port 53 { ::1; };
        // listen-on-v6 port 53 { ::1; };

Um die Unterstützung von IPv6 in CentOS zu deaktivieren, kann die Beschreibung unter nachfolgendem Link genutzt werden:

iptables Regel

Damit der DNS-Server auch erreichbar ist und nicht die Weitergabe der Namensauflösungsinformationen vom Paketfilter iptables blockiert wird, muss nachfolgende Regel zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22  
5        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Nachfolgende Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 53 -j ACCEPT
  • -A INPUT -p udp --dport 53 -j ACCEPT

und hier die Befehle:

# iptables -I INPUT 5 -p tcp --dport 53 -j ACCEPT
# iptables -I INPUT 5 -p udp --dport 53 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:53 
6        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:53 
7        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 6 packets, 936 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Die neuen Zeilen sind an Position 5 und Postition 6 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:53
6        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:53
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# /usr/sbin/iptables-save > /etc/sysconfig/iptables 

Erster Start

Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, Installation, IPv6 deaktivieren, sollte dem ersten Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:

# systemctl start named.service

DNS-Server Überprüfung

Ob der DNS-Server, sprich der named-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwf | grep named
root      4998  0.0  0.0 112640   928 pts/0    S+   18:15   0:00                      \_ grep --color=auto named
named     4993  0.8  1.3 160288 13452 ?        Ssl  18:15   0:00 /usr/sbin/named -u named -4

Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien

  • /var/named/data/named.run
  • /var/log/messages

durchgeführt werden.

Ausgabe der LOG-Datei /var/named/data/named.run mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

# cat /var/named/data/named.run
managed-keys-zone: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone localhost.localdomain/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone localhost/IN: loaded serial 0
all zones loaded
running

Ausgabe der LOG-Datei /var/log/messages mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

Oct 16 18:15:50 server20 systemd: Starting Generate rndc key for BIND (DNS)...
Oct 16 18:15:50 server20 generate-rndc-key.sh: Generating /etc/rndc.key:[  OK  ]
Oct 16 18:15:50 server20 systemd: Started Generate rndc key for BIND (DNS).
Oct 16 18:15:50 server20 systemd: Starting Berkeley Internet Name Domain (DNS)...
Oct 16 18:15:50 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0
Oct 16 18:15:50 server20 named-checkconf: zone localhost/IN: loaded serial 0
Oct 16 18:15:50 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Oct 16 18:15:50 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Oct 16 18:15:50 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0
Oct 16 18:15:50 server20 systemd: Started Berkeley Internet Name Domain (DNS).
Oct 16 18:15:50 server20 systemd: Starting Host and Network Name Lookups.
Oct 16 18:15:50 server20 systemd: Reached target Host and Network Name Lookups.

Lokale DNS-Abfrage

Ob der DNS-Server auch auf DNS-Anfragen auf dem lokalen loopback Interface lauscht bzw. diese Beantwortet, kann mit nachfolgendem Befehl Überprüft werden:

# dig @127.0.0.1 tachtler.net

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1539
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tachtler.net.			IN	A

;; ANSWER SECTION:
tachtler.net.		3600	IN	A	88.217.171.167

;; AUTHORITY SECTION:
tachtler.net.		172799	IN	NS	server1-ns3.udagdns.net.
tachtler.net.		172799	IN	NS	server1-ns2.udagdns.net.
tachtler.net.		172799	IN	NS	server1-ns1.udagdns.net.

;; ADDITIONAL SECTION:
server1-ns1.udagdns.net. 172799	IN	A	62.146.28.82
server1-ns2.udagdns.net. 172799	IN	A	62.146.33.101
server1-ns3.udagdns.net. 172799	IN	A	62.146.33.102

;; Query time: 1938 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 16 18:27:20 CEST 2014
;; MSG SIZE  rcvd: 191

Interface Überprüfung

Ob und an welchen Interface der DNS-Server „lauscht“, bzw. DNS-Anfragen beantwortet, kann mit nachfolgendem Befehl überprüft werden:

# netstat -tulpen | grep named
tcp        0      0 127.0.0.1:953       0.0.0.0:*        LISTEN      25         44432      4993/named          
tcp        0      0 127.0.0.1:53        0.0.0.0:*        LISTEN      25         44429      4993/named          
udp        0      0 127.0.0.1:53        0.0.0.0:*                    25         44428      4993/named

Basis-Konfiguration

Zur Steuerung des DNS-Server kommt das Programm

  • rndc

zum Einsatz.

rndc benötigt eine Konfigurationsdatei, seitdem jegliche Kommunikation mit dem DNS-Server nur noch über die Authentifizierung über eine digitale Signatur erfolgt, die wiederum auf einem geteilten Schlüssel beruht. Es gibt keine andere Möglichkeit als diesen Schlüssel in einer Konfigurationsdatei zu hinterlegen und damit zur Verwendung zu bringen.

rndc-confgen

Mit dem Befehl

  • rndc-confgen

und der Anwendung einiger zusätzlicher Parametern, können die Dateien

  • /etc/rndc.conf

und der Syntax zur Einbindung in die Konfigurationsdatei

  • /etc/named.conf

erstellt werden.

Der Aufruf erfolgt wie nachfolgen dargestellt:

# rndc-confgen -b 512 -k rndc-key -r "keyboard" -u named
und erzeugt nachfolgende Bildschirmausgabe:
start typing:
...............................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
stop typing.
# Start of rndc.conf
key "rndc-key" {
	algorithm hmac-md5;
	secret "SBgojrgNCHrQcPC7IT92RVcATCHPwtrXioToz2pT0/GKHSHguORYSJddLfINuy+ELgCtoZgn9adEBuTB4M0pxw==";
};
 
options {
	default-key "rndc-key";
	default-server 127.0.0.1;
	default-port 953;
};
# End of rndc.conf
 
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# 	algorithm hmac-md5;
# 	secret "SBgojrgNCHrQcPC7IT92RVcATCHPwtrXioToz2pT0/GKHSHguORYSJddLfINuy+ELgCtoZgn9adEBuTB4M0pxw==";
# };
# 
# controls {
# 	inet 127.0.0.1 port 953
# 		allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

:!: ACHTUNG - Diese Ausgabe sollte so NICHT verwendet werden, da hier der Schlüssel rndc-key doppelt in den Dateien /etc/rndc.conf und /etc/named.conf eingebettet werden muss. Besser ist es hier, den Schlüssel in eine eigene Datei /etc/myrndc.key auszulagern und via include diese Datei dann jeweils zu importieren!

:!: HINWEIS - Ein optimiertes Vorgehen, soll nachfolgend dargestellt werden!

/etc/myrndc.key

nach der Installation des DNS-Servers ist eine Datei mit einem Schlüssel unter

  • /etc/rndc.key

vorhanden.

:!: HINWEIS - Der Name für die Datei die den Schlüssel enthält darf nicht /etc/rndc.key lauten, da sonst beim Einsatz von /etc/rndc.conf und dem Vorhandensein der Datei /etc/rndc.key ein Warnhinweis, wie nachfolgend gezeigt, erscheint !

WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)

Deshalb sollte die Datei mit einem Schlüssel unter /etc/rndc.key mit nachfolgendem Befehl gelöscht werden:

# rm /etc/rndc.key 
rm: remove regular file ‘/etc/rndc.key’? y

Um die Sicherheit zu erhöhen, sollte ein eigener Schlüssel, welcher in der Datei /etc/myrndc.key beinhaltet ist, erstellt werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# rndc-confgen -a -b 512 -c /etc/myrndc.key -k rndc-key -r "keyboard" -u named
start typing:
...............................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
...........................
stop typing.
wrote key file "/etc/myrndc.key"

Anschließend kann mit nachfolgendem Befehl überprüft werden, ob die Generierung einer neuen Datei mit dem Namen /etc/myrndc.key erfolgreich war:

# cat /etc/myrndc.key
key "rndc-key" {
	algorithm hmac-md5;
        secret "NvVzfoFWdyDHvca87zRuMu+x49VzfyaKDiDHvca87zkRe8YoEhzfoFWdyDHvca87zkRu9v5DQpEzfoFWdyDHvc==";
};

Abschließend sollten die Besitzrecht noch einmal verschärft werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# chown root:named /etc/myrndc.key

Ein Überprüfung, ob die Besitzrechte korrekt gesetzt wurden, kann mit nachfolgendem Befehl durchgeführt werden:

# ll /etc/myrndc.key
-rw-r----- 1 root named 153 Oct 17 13:06 /etc/myrndc.key

/etc/rndc.conf

Die Konfigurationsdatei für rndc ist unter nachfolgendem Verzeichnis mit nachfolgendem Namen zu erstellen:

  • /etc/rndc.conf

Der Inhalt der Datei sollte, wie nachfolgend darstellt, aussehen:

include "/etc/myrndc.key";
 
options {
	default-key "rndc-key";
	default-server 127.0.0.1;
	default-port 953;
};

/var/named/named.ca

nach der Installation des DNS-Servers ist eine Datei mit den 13 ROOT nameservern unter

  • /var/named/named.ca

vorhanden.

Um die Aktualität zu erhöhen, sollte mit nachfolgendem Befehl die Datei aktualisiert werden:

# dig +bufsize=1200 +norec NS . @a.root-servers.net > /var/named/named.ca

Anschließend kann mit nachfolgendem Befehl überprüft werden, ob die Aktualisierung der Datei mit dem Namen /var/named/named.ca erfolgreich war:

# cat /var/named/named.ca

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> +bufsize=1200 +norec NS . @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14893
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 25

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.			518400	IN	NS	j.root-servers.net.
.			518400	IN	NS	a.root-servers.net.
.			518400	IN	NS	k.root-servers.net.
.			518400	IN	NS	m.root-servers.net.
.			518400	IN	NS	c.root-servers.net.
.			518400	IN	NS	e.root-servers.net.
.			518400	IN	NS	b.root-servers.net.
.			518400	IN	NS	h.root-servers.net.
.			518400	IN	NS	i.root-servers.net.
.			518400	IN	NS	l.root-servers.net.
.			518400	IN	NS	f.root-servers.net.
.			518400	IN	NS	g.root-servers.net.
.			518400	IN	NS	d.root-servers.net.

;; ADDITIONAL SECTION:
j.root-servers.net.	3600000	IN	A	192.58.128.30
j.root-servers.net.	3600000	IN	AAAA	2001:503:c27::2:30
a.root-servers.net.	3600000	IN	A	198.41.0.4
a.root-servers.net.	3600000	IN	AAAA	2001:503:ba3e::2:30
k.root-servers.net.	3600000	IN	A	193.0.14.129
k.root-servers.net.	3600000	IN	AAAA	2001:7fd::1
m.root-servers.net.	3600000	IN	A	202.12.27.33
m.root-servers.net.	3600000	IN	AAAA	2001:dc3::35
c.root-servers.net.	3600000	IN	A	192.33.4.12
c.root-servers.net.	3600000	IN	AAAA	2001:500:2::c
e.root-servers.net.	3600000	IN	A	192.203.230.10
b.root-servers.net.	3600000	IN	A	192.228.79.201
b.root-servers.net.	3600000	IN	AAAA	2001:500:84::b
h.root-servers.net.	3600000	IN	A	128.63.2.53
h.root-servers.net.	3600000	IN	AAAA	2001:500:1::803f:235
i.root-servers.net.	3600000	IN	A	192.36.148.17
i.root-servers.net.	3600000	IN	AAAA	2001:7fe::53
l.root-servers.net.	3600000	IN	A	199.7.83.42
l.root-servers.net.	3600000	IN	AAAA	2001:500:3::42
f.root-servers.net.	3600000	IN	A	192.5.5.241
f.root-servers.net.	3600000	IN	AAAA	2001:500:2f::f
g.root-servers.net.	3600000	IN	A	192.112.36.4
d.root-servers.net.	3600000	IN	A	199.7.91.13
d.root-servers.net.	3600000	IN	AAAA	2001:500:2d::d

;; Query time: 37 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Fri Oct 17 13:14:08 CEST 2014
;; MSG SIZE  rcvd: 755

Zonen-Dateien

Um den DNS-Server betreiben zu können, ist es erforderlich auch die entsprechenden Zonen-Dateien zu erstellen und dem DNS-Server bekannt zu machen.

Dabei ist eine Zonen-Datei für die z.B. für die Zone

  • intra.tachtler.net

zu erstellen, welche jedoch aus zwei Zonen-Dateien bestehen sollte,

  • Zonen-Datei für die Forward-Auflösung - /var/named/master/intra.tachtler.net.zone.db
  • Zonen-Datei für die Reverse-Auflösung - /var/named/master/2.168.192.zone.db

:!: HINWEIS - Nachfolgendes Beispiel soll dies für nur eine Zonen-Datei exemplarisch zeigen.

Natürlich können diese Dateien im Verzeichnis

  • /var/named

erstellt werden, jedoch kann auch der Übersicht halber eine Unterordner mit nachfolgendem Pfad und Namen, mit nachfolgendem Befehl angelegt werden:

# mdkir /var/named/master

Nachfolgend sollten nun auch noch die Besitzrechte und die Dateirechte entsprechend angepasst werden, was mit nachfolgenden Befehlen durchgeführt werden kann:

Besitzrechte:

# chown -R named:named /var/named/master

Dateirechte:

# chmod -R 770 /var/named/master

Anschließend können nun die Zonen-Dateien im Verzeichnis /var/named/master erstellt werden.

/var/named/master/intra.tachtler.net.zone.db

Nachfolgend ein Beispiel, wie eine Zonen-Datei für die Forward-Auflösung aussehen könnte:

$TTL 3H
@                               IN SOA  ns1     hostmaster.tachtler.net.        (
                                2014101901      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
 
                                NS      ns1.intra.tachtler.net.
 
                                MX 10   mx1.tachtler.net.
 
ns1                             A       192.168.2.20
 
rechner10                       A       192.168.2.10
rechner20                       A       192.168.2.20

Um die syntaktische Korrektheit einer Zonen-Datei zu überprüfen, kann nachfolgender Befehl verwendet werden:

# /usr/sbin/named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db
zone home.tachtler.net/IN: loaded serial 2014101901
OK

/var/named/master/2.168.192.zone.db

Nachfolgend ein Beispiel, wie eine Zonen-Datei für die Reverse-Auflösung aussehen könnte:

$TTL 3H
@                               IN SOA  ns1.intra.tachtler.net. hostmaster.tachtler.net.        (
                                2014101901      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
 
                                NS      ns1.intra.tachtler.net.
 
                                MX 10   mx1.tachtler.net.
 
10                              PTR     rechner10.intra.tachtler.net.
20                              PTR     rechner20.intra.tachtler.net.

Um die syntaktische Korrektheit einer Zonen-Datei zu überprüfen, kann nachfolgender Befehl verwendet werden:

# /usr/sbin/named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db
zone home.tachtler.net/IN: loaded serial 2014101901
OK

/etc/named.conf

Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):

//
// named.conf
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
 
// ================================================================================
// ACL.
// ================================================================================
acl primary {
        192.168.0.20/32;
};
 
acl interfaces {
        192.168.0.20/32;
        192.168.1.20/32;
};
 
acl pdmz {
        88.217.171.167/32;
};
 
acl edmz {
        192.168.1.0/24;
};
 
acl idmz {
        192.168.0.0/24;
};
 
acl home {
        192.168.2.0/24;
};
 
// ================================================================================
// Keys.
// ================================================================================
include "/etc/myrndc.key";
 
// ================================================================================
// Controls.
// ================================================================================
controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
 
// ================================================================================
// Logging.
// ================================================================================
logging {
 
        // Channels. -------------------------------------------------------------
 
        // Default startup messages.
        channel default_debug {
                file "data/named.run";
                severity dynamic;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        // Approval and denial of requests.
        channel custom_security {
                file "data/named.security";
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        // Lame servers. These are misconfigurations in remote servers, discovered
        // by BIND 9 when trying to query those servers during resolution.
        channel custom_lame-servers {
                file "data/named.lame-servers";
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
 
        // Categories. -----------------------------------------------------------
 
        category security {
                custom_security;
                default_syslog;
                default_debug;
        };
        category lame-servers {
                custom_lame-servers ;
                default_syslog;
                default_debug;
        };
};
 
// ================================================================================
// Options.
// ================================================================================
options {
        // The working directory of the server.
        directory "/var/named";
        // The directory where the public and private DNSSEC key files should be
        // found.
        key-directory "/var/named";
        // The directory which to store the files that track managed DNSSEC keys.
        managed-keys-directory "/var/named/dynamic";
        // The pathname of the file the server dumps the database to when
        // instructed.
        dump-file "/var/named/data/cache_dump.db";
        // The pathname of the file the server writes memory usage statistics to
        // on exit.
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        // The pathname of the file the server writes its process ID in.
        pid-file "/run/named/named.pid";
        // The pathname of the file the server dumps the queries that are currently
        // recursing when instructed
        recursing-file "/var/named/data/named_recursing.db";
        // The pathname of the file the server appends statistics to when
        // instructed.
        statistics-file "/var/named/data/named_stats.txt";
        // The pathname of a file to override the built-in trusted keys provided
        // by named. Path to ISC DLV key.
        bindkeys-file "/etc/named.iscdlv.key";
        // The pathname of the file the server dumps security roots to when
        // instructed.
        secroots-file "/var/named/data/named_secroots.db";
        // The pathname of the file into which to write a TSIG session key
        // generated by named for use by nsupdate -l.
        session-keyfile "/run/named/session.key";
 
        // ------------------------------------------------------------------------
        // Boolean options.
        // ------------------------------------------------------------------------
 
        // If yes, then when generating responses the server will only add records
        // to the authority and additional data sections when they are required.
        minimal-responses no;
        // If yes, and a DNS query requests recursion, then the server will attempt
        // to do all the work required to answer the query. If recursion is off and
        // the server does not already know the answer, it will return a referral
        // response. The default is yes. Note that setting recursion no does not
        // prevent clients from getting data from the serverâs cache; it only
        // prevents new data from being cached as an effect of client queries.
        /*
         - If your recursive DNS server has a public IP address, you MUST enable
           access control to limit queries to your legitimate users. Failing to do
           so will cause your server to become part of large scale DNS
           amplification attacks. Implementing BCP38 within your network would
           greatly reduce such attack surface .
        */
        // IMPORTANT: Use of access control: allow-recursion is required!
        recursion yes;
 
        // DNSSEC. ---------------------------------------------------------------
 
        // Enable DNSSEC support in named.
        dnssec-enable yes;
        // Enable DNSSEC validation in named and compare to root-certs (auto).
        // yes: DNSSEC validation is enabled, but a trust anchor must be manually
        // configured. No validation will actually take place until you have 
        // manually configured at least one trusted key. This is the default.
        // no: DNSSEC validation is disabled, and recursive server will behave
        // in the "old fashioned" way of performing insecure DNS lookups.
        // auto: DNSSEC validation is enabled, and a default trust anchor 
        // (included as part of BIND) for the DNS root zone is used.
        dnssec-validation auto;
        // When set, dnssec-lookaside provides the validator with an alternate
        // method to validate DNSKEY records at the top of a zone.
        // If dnssec-lookaside is set to auto, then built-in default values for the
        // DLV domain and trust anchor will be used, along with a built-in key for
        // validation.
        dnssec-lookaside auto;
 
        // Checks. ---------------------------------------------------------------
 
        // This option is used to restrict the character set and syntax of certain
        // domain names in master files and/or DNS responses received from the
        // network.
        // Tachtler - Warn only, if names not correct, like DKIM for e-mail.
        check-names master warn;
 
        // ------------------------------------------------------------------------
        // Forwarding.
        // ------------------------------------------------------------------------
 
        /* Tachtler - DISABLED -
         *
         * With problems, while censorship with ISP, no forwards will be defined.
         * Asking always the root-server!
         *
         * // Route the questions to the Forwarders first, not only.
         * forward first;
         * // DNS-Server which will asked when local answers not found.
         * forwarders { none; };
         */
 
        // ------------------------------------------------------------------------
        // Dual-stack servers.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Access control.
        // ------------------------------------------------------------------------
 
        // Specifies which hosts are allowed to notify this server, a slave, of
        // zone changes in addition to the zone masters.
        allow-notify { 127.0.0.1; };
        // Specifies which hosts are allowed to ask ordinary DNS questions.
        allow-query { 127.0.0.1; edmz; idmz; home; };
        // Specifies which hosts are allowed to make recursive queries through this
        // server.
        allow-recursion { 127.0.0.1; edmz; idmz; home; };
        // Specifies which hosts are allowed to receive zone transfers from the
        // server.
        allow-transfer { 127.0.0.1; primary; };
        // Specifies a list of addresses that the server will not accept queries
        // from or use to resolve a query. Queries from these addresses will not
        // be responded to.
        blackhole { none; };
 
        // ------------------------------------------------------------------------
        // Interfaces.
        // ------------------------------------------------------------------------
 
        // The interfaces and ports that the server will answer queries from may
        // be specified using the listen-on option.
        listen-on port 53 { 127.0.0.1; interfaces; };
 
        // ------------------------------------------------------------------------
        // Query address.
        // ------------------------------------------------------------------------
 
        // If the server doesnât know the answer to a question, it will query other
        // name servers. query-source specifies the address and port used for such
        // queries.
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to use the query-source directive.
        */
        query-source address * port *;
 
        // ------------------------------------------------------------------------
        // Zone transfer.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // UDP port lists.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // OS resource limits.
        // ------------------------------------------------------------------------
 
        // The maximum size of a core dump.
        coresize default;
        // The maximum amount of data memory the server may use.
        datasize default;
        // The maximum number of files the server may have open concurrently.
        files unlimited;
        // The maximum amount of stack memory the server may use.
        stacksize default;
 
        // ------------------------------------------------------------------------
        // Server resource limits.
        // ------------------------------------------------------------------------
 
        // Sets a maximum size for each journal file.
        // The default is unlimited, which also means 2 gigabytes.
        max-journal-size unlimited;
        // he maximum number of simultaneous recursive lookups the server will
        // perform on behalf of clients. The default is 1000.
        recursive-clients 1000;
        // The maximum number of simultaneous client TCP connections that the
        // server will accept. The default is 100.
        tcp-clients 100;
        // The maximum amount of memory to use for the serverâs cache, in bytes.
        // A value of 0 is special, meaning that records are purged from the cache
        // only when their TTLs expire. Another special keyword unlimited means
        // the maximum value of 32-bit unsigned integers (0xffffffff), which may
        // not have the same effect as 0 on machines that support more than 32 bits
        // of memory space. Any positive values less than 2MB will be ignored reset
        // to 2MB. In a server with multiple views, the limit applies separately to
        // the cache of each view. The default is 0.
        max-cache-size 0;
        // The listen queue depth. The default and minimum is 10. If the kernel
        // supports the accept filter connections that will be queued in kernel
        // space waiting for some data before being passed to accept. Nonzero
        // values less than 10 will be silently raised. A value of 0 may also be
        // used; on most platforms this sets the listen queue length to a
        // system-defined default value.
        tcp-listen-queue 10;
 
        // ------------------------------------------------------------------------
        // Periodic task intervals.
        // ------------------------------------------------------------------------
 
        // The server will scan the network interface list every interface-interval
        // minutes. The default is 60 minutes. The maximum value is 28 days
        // (40320 minutes). If set to 0, interface scanning will only occur when
        // the configuration file is loaded. After the scan, the server will begin
        // listening for queries on any newly discovered interfaces (provided they
        // are allowed by the listen-on configuration), and will stop listening on
        // interfaces that have gone away.
        // Tachtler - NOT default -
        interface-interval 0;
 
        // ------------------------------------------------------------------------
        // Topology.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // The sortlist statement.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // RRset ordering.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Tuning.
        // ------------------------------------------------------------------------
 
        // Sets the number of seconds to cache a lame server indication. 0 disables
        // caching. (This is NOT recommended.) The default is 600 (10 minutes) and
        // the maximum value is 1800 (30 minutes).
        lame-ttl 600;
        // To reduce network traffic and increase performance, the server stores
        // negative answers. max-ncache-ttl is used to set a maximum retention time
        // for these answers in the server in seconds. The default max-ncache-ttl
        // is 10800 seconds (3 hours). max-ncache-ttl cannot exceed 7 days and will
        // be silently truncated to 7 days if set to a greater value.
        max-ncache-ttl 10800;
        // Sets the maximum time for which the server will cache ordinary
        // (positive) answers. The default is one week (7 days). A value of zero
        // may cause all queries to return SERVFAIL, because of lost caches of
        // intermediate RRsets (such as NS and glue AAAA/A records) in the
        // resolution process.
        max-cache-ttl 604800;
        // Sets the advertised EDNS UDP buffer size in bytes to control the size of
        // packets received. Valid values are 512 to 4096 (values outside this
        // range will be silently adjusted). The default value is 4096. The usual
        // reason for setting edns-udp-size to a non-default value is to get UDP
        // answers to pass through broken firewalls that block fragmented packets
        // and/or block UDP packets that are greater than 512 bytes.
        // named will fallback to using 512 bytes if it get a series of timeout at
        // the initial value. 512 bytes is not being offered to encourage sites to
        // fix their firewalls. Small EDNS UDP sizes will result in the excessive
        // use of TCP.
        edns-udp-size 4096;
        // Sets the maximum EDNS UDP message size named will send in bytes. Valid
        // values are 512 to 4096 (values outside this range will be silently
        // adjusted). The default value is 4096. The usual reason for setting
        // max-udp-size to a non-default value is to get UDP answers to pass
        // through broken firewalls that block fragmented packets and/or block UDP
        // packets that are greater than 512 bytes. This is independent of the
        // advertised receive buffer (edns-udp-size).
        // Setting this to a low value  will encourage additional TCP traffic to
        // the nameserver.
        max-udp-size 4096;
        // Set the initial value (minimum) number of recursive simultaneous
        // clients for any given query (<qname,qtype,qclass>) that the server will
        // accept before dropping additional clients. named will attempt to self
        // tune this value and changes will be logged. The default values are 10.
        clients-per-query 10;
        // Set the initial value (maximum) number of recursive simultaneous
        // clients for any given query (<qname,qtype,qclass>) that the server will
        // accept before dropping additional clients. named will attempt to self
        // tune this value and changes will be logged. The default values are 100.
        max-clients-per-query 100;
 
        // ------------------------------------------------------------------------
        // Build-in server information zones.
        // ------------------------------------------------------------------------
 
        // The version the server should report via a query of the name
        // version.bind with type TXT, class CHAOS. The default is the real version
        // number of this server. Specifying version none disables processing of
        // the queries.
        version none;
        // The hostname the server should report via a query of the name
        // hostname.bind with type TXT, class CHAOS. This defaults to the hostname
        // of the machine hosting the name server as found by the gethostname()
        // function.
        // Tachtler - NOT default -
        // hostname "ns1.tachtler.net";
        // The ID the server should report when receiving a Name Server Identifier
        // (NSID) query, or a query of the name ID.SERVER with type TXT, class
        // CHAOS. The primary purpose of such queries is to identify which of a
        // group of anycast servers is actually answering your queries. Specifying
        // server-id none; disables processing of the queries. Specifying server-id
        // hostname; will cause named to use the hostname as found by the
        // gethostname() function. The default server-id is none.
        server-id none;
 
        // ------------------------------------------------------------------------
        // Build-in empty zones.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Additional section caching.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Content filtering.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Response policy zone (RPZ) rewriting.
        // ------------------------------------------------------------------------
 
        // - empty -
 
        // ------------------------------------------------------------------------
        // Response rate limiting.
        // ------------------------------------------------------------------------
 
        // - empty -
 
};
 
// ================================================================================
// Views and Zones.
// ================================================================================
//
// IMPORTANT: The order of the view statements is significant. A client request
// will be resolved in the context of the first view that it matches!
//
view "home" IN {
        // Match for the client IP address.
        match-clients { home; };
 
        // IMPORTANT: A zone can be updated either by editing zone files and
        // reloading the server or by dynamic update, but not both. If you have
        // enabled dynamic update for a zone using the "allow-update" option, you
        // are not supposed to edit the zone file by hand, and the server will not
        // attempt to reload it.
 
        // Zone: root server. -----------------------------------------------------
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        // Zone: localhost. -------------------------------------------------------
        include "/etc/named.rfc1912.zones";
 
        // Zone: home.tachtler.net ------------------------------------------------
        zone "home.tachtler.net" IN {
                type master;
                file "master/home.tachtler.net.zone.db";
        };
 
        zone "2.168.192.in-addr.arpa" in {
                type master;
                file "master/2.168.192.in-addr.arpa.zone.db";
        };
 
        // Zone: tachtler.net (HOME) ----------------------------------------------
        zone "tachtler.net" IN {
                type master;
                file "master/tachtler.net.home.zone.db";
        };
};
 
view "idmz" IN {
        // Match for the client IP address.
        match-clients { localhost; idmz; };
 
        // IMPORTANT: A zone can be updated either by editing zone files and
        // reloading the server or by dynamic update, but not both. If you have
        // enabled dynamic update for a zone using the "allow-update" option, you
        // are not supposed to edit the zone file by hand, and the server will not
        // attempt to reload it.
 
        // Zone: root server. -----------------------------------------------------
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        // Zone: localhost. -------------------------------------------------------
        include "/etc/named.rfc1912.zones";
 
        // Zone: home.tachtler.net ------------------------------------------------
        zone "home.tachtler.net" IN {
                type master;
                file "master/home.tachtler.net.zone.db";
        };
 
        zone "2.168.192.in-addr.arpa" in {
                type master;
                file "master/2.168.192.in-addr.arpa.zone.db";
        };
 
        // Zone: idmz.tachtler.net ------------------------------------------------
        zone "idmz.tachtler.net" IN {
                type master;
                file "master/idmz.tachtler.net.zone.db";
        };
 
        zone "0.168.192.in-addr.arpa" in {
                type master;
                file "master/0.168.192.in-addr.arpa.zone.db";
        };
 
        // Zone: edmz.tachtler.net ------------------------------------------------
        zone "edmz.tachtler.net" IN {
                type master;
                file "master/edmz.tachtler.net.zone.db";
        };
 
        zone "1.168.192.in-addr.arpa" in {
                type master;
                file "master/1.168.192.in-addr.arpa.zone.db";
        };
 
        // Zone: tachtler.net (IDMZ) ----------------------------------------------
        zone "tachtler.net" IN {
                type master;
                file "master/tachtler.net.idmz.zone.db";
        };
};
 
view "edmz" IN {
        // Match for the client IP address.
        match-clients { edmz; };
 
        // IMPORTANT: A zone can be updated either by editing zone files and
        // reloading the server or by dynamic update, but not both. If you have
        // enabled dynamic update for a zone using the "allow-update" option, you
        // are not supposed to edit the zone file by hand, and the server will not
        // attempt to reload it.
 
        // Zone: root server. -----------------------------------------------------
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        // Zone: localhost. -------------------------------------------------------
        include "/etc/named.rfc1912.zones";
 
        // Zone: edmz.tachtler.net ------------------------------------------------
        zone "edmz.tachtler.net" IN {
                type master;
                file "master/edmz.tachtler.net.zone.db";
        };
 
        zone "1.168.192.in-addr.arpa" in {
                type master;
                file "master/1.168.192.in-addr.arpa.zone.db";
        };
 
        // Zone: tachtler.net (EDMZ) ----------------------------------------------
        zone "tachtler.net" IN {
                type master;
                file "master/tachtler.net.edmz.zone.db";
        };
};
 
view "pdmz" IN {
        // Match for the client IP address.
        match-clients { any; };
 
        // If recursion is off and the server does not already know the answer,
        // it will return a referral response.
        recursion no;
 
        // Specifies which hosts are allowed to make recursive queries through this
        // server.
        allow-recursion { none; };
 
        // IMPORTANT: A zone can be updated either by editing zone files and
        // reloading the server or by dynamic update, but not both. If you have
        // enabled dynamic update for a zone using the "allow-update" option, you
        // are not supposed to edit the zone file by hand, and the server will not
        // attempt to reload it.
 
        // Zone: root server. -----------------------------------------------------
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        // Zone: localhost. -------------------------------------------------------
        include "/etc/named.rfc1912.zones";
 
        // Zone: tachtler.net (PDMZ) ----------------------------------------------
        zone "tachtler.net" IN {
                type master;
                file "master/tachtler.net.zone.db";
        };
 
        zone "171.217.88.in-addr.arpa" in {
                type master;
                file "master/171.217.88.in-addr.arpa.zone.db";
        };
};
 
// ================================================================================
// Includes.
// ================================================================================
include "/etc/named.root.key";

Erster Neustart

Zonen-Datei Überprüfung

Mit nachfolgendem Befehl kann die syntaktische Richtigkeit von Zonen-Dateien überprüft werden. Nachfolgende Beispiel zeigen eine Überprüfung der Zonen-Dateien für die Zone:

  • intra.tachtler.net

und zwar für die Zonen-Dateien:

  • Zonen-Datei für die Forward-Auflösung - /var/named/master/intra.tachtler.net.zone.db
  • Zonen-Datei für die Reverse-Auflösung - /var/named/master/2.168.192.zone.db

# /usr/sbin/named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db
zone home.tachtler.net/IN: loaded serial 2014101901
OK
# /usr/sbin/named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db
zone 0.168.192/IN: loaded serial 2014101901
OK

Konfigurationsdatei Überprüfung

Mit nachfolgendem Befehl kann die syntaktische Richtigkeit der Konfigurationsdatei:

  • /etc/named.conf

durchgeführt werden und sollte keine Meldungen ausgeben, wenn die Konfigurationsdatei syntaktische richtig ist:

# /usr/sbin/named-checkconf

Neustart

Falls die Basis-Konfiguration wie oben beschrieben durchgeführt wurde, sollte dem ersten Neustart nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:

# systemctl restart named.service

DNS-Server Überprüfung

Ob der DNS-Server, sprich der named-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwf | grep named
root      9811  0.0  0.0 112640   932 pts/0    S+   21:20   0:00                      \_ grep --color=auto named
named     9806 10.0  3.4 174588 34616 ?        Ssl  21:20   0:00 /usr/sbin/name  -u named -4

Eine weitere Überprüfung, ob der erste Neustart erfolgreich war, kann durch Einsicht der LOG-Dateien

  • /var/named/data/named.lame-servers
  • /var/named/data/named.run
  • /var/named/data/named.security
  • /var/log/messages

durchgeführt werden.

Ausgabe der LOG-Datei /var/named/data/named.run mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

# cat /var/named/data/named.run
19-Oct-2014 21:20:49.866 general: info: managed-keys-zone/home: loaded serial 71
19-Oct-2014 21:20:49.867 general: info: managed-keys-zone/idmz: loaded serial 71
19-Oct-2014 21:20:49.867 general: info: managed-keys-zone/edmz: loaded serial 71
19-Oct-2014 21:20:49.868 general: info: managed-keys-zone/pdmz: loaded serial 71
19-Oct-2014 21:20:49.873 general: info: zone 0.in-addr.arpa/IN/home: loaded serial 0
19-Oct-2014 21:20:49.876 general: info: zone 1.0.0.127.in-addr.arpa/IN/home: loaded serial 0
19-Oct-2014 21:20:49.879 general: info: zone localhost.localdomain/IN/home: loaded serial 0
19-Oct-2014 21:20:49.880 general: info: zone tachtler.net/IN/home: loaded serial 4
19-Oct-2014 21:20:49.880 general: info: zone 0.168.192.in-addr.arpa/IN/idmz: loaded serial 4
19-Oct-2014 21:20:49.881 general: info: zone home.tachtler.net/IN/home: loaded serial 4
19-Oct-2014 21:20:49.882 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/home: loaded serial 0
19-Oct-2014 21:20:49.886 general: info: zone 2.168.192.in-addr.arpa/IN/home: loaded serial 4
19-Oct-2014 21:20:49.886 general: info: zone 1.168.192.in-addr.arpa/IN/idmz: loaded serial 4
19-Oct-2014 21:20:49.888 general: info: zone 0.in-addr.arpa/IN/idmz: loaded serial 0
19-Oct-2014 21:20:49.888 general: info: zone localhost/IN/home: loaded serial 0
19-Oct-2014 21:20:49.890 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/idmz: loaded serial 0
19-Oct-2014 21:20:49.891 general: info: zone idmz.tachtler.net/IN/idmz: loaded serial 5
19-Oct-2014 21:20:49.892 general: info: zone 1.0.0.127.in-addr.arpa/IN/idmz: loaded serial 0
19-Oct-2014 21:20:49.893 general: info: zone localhost.localdomain/IN/idmz: loaded serial 0
19-Oct-2014 21:20:49.893 general: info: zone edmz.tachtler.net/IN/idmz: loaded serial 5
19-Oct-2014 21:20:49.895 general: info: zone 0.in-addr.arpa/IN/edmz: loaded serial 0
19-Oct-2014 21:20:49.896 general: info: zone 1.0.0.127.in-addr.arpa/IN/edmz: loaded serial 0
19-Oct-2014 21:20:49.901 general: info: zone home.tachtler.net/IN/idmz: loaded serial 4
19-Oct-2014 21:20:49.902 general: info: zone 2.168.192.in-addr.arpa/IN/idmz: loaded serial 4
19-Oct-2014 21:20:49.903 general: info: zone tachtler.net/IN/idmz: loaded serial 4
19-Oct-2014 21:20:49.905 general: info: zone 1.168.192.in-addr.arpa/IN/edmz: loaded serial 4
19-Oct-2014 21:20:49.906 general: info: zone localhost/IN/idmz: loaded serial 0
19-Oct-2014 21:20:49.908 general: info: zone tachtler.net/IN/edmz: loaded serial 4
19-Oct-2014 21:20:49.909 general: info: zone 1.0.0.127.in-addr.arpa/IN/pdmz: loaded serial 0
19-Oct-2014 21:20:49.910 general: info: zone localhost/IN/edmz: loaded serial 0
19-Oct-2014 21:20:49.915 general: info: zone tachtler.net/IN/pdmz: loaded serial 4
19-Oct-2014 21:20:49.916 general: info: zone edmz.tachtler.net/IN/edmz: loaded serial 5
19-Oct-2014 21:20:49.916 general: info: zone 0.in-addr.arpa/IN/pdmz: loaded serial 0
19-Oct-2014 21:20:49.917 general: info: zone localhost.localdomain/IN/pdmz: loaded serial 0
19-Oct-2014 21:20:49.917 general: info: zone localhost/IN/pdmz: loaded serial 0
19-Oct-2014 21:20:49.917 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/pdmz: loaded serial 0
19-Oct-2014 21:20:49.918 general: info: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/edmz: loaded serial 0
19-Oct-2014 21:20:49.918 general: info: zone localhost.localdomain/IN/edmz: loaded serial 0
19-Oct-2014 21:20:49.918 general: info: zone 171.217.88.in-addr.arpa/IN/pdmz: loaded serial 4
19-Oct-2014 21:20:49.918 general: notice: all zones loaded
19-Oct-2014 21:20:49.919 general: notice: running

Ausgabe der LOG-Datei /var/log/messages mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

Oct 19 21:20:49 server20 systemd: Starting Generate rndc key for BIND (DNS)...
Oct 19 21:20:49 server20 systemd: Started Generate rndc key for BIND (DNS).
Oct 19 21:20:49 server20 systemd: Starting Berkeley Internet Name Domain (DNS)...
Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone home.tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone 2.168.192.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone home.tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone 2.168.192.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone idmz.tachtler.net/IN: loaded serial 5
Oct 19 21:20:49 server20 named-checkconf: zone 0.168.192.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone edmz.tachtler.net/IN: loaded serial 5
Oct 19 21:20:49 server20 named-checkconf: zone 1.168.192.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone edmz.tachtler.net/IN: loaded serial 5
Oct 19 21:20:49 server20 named-checkconf: zone 1.168.192.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone localhost.localdomain/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone localhost/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone 0.in-addr.arpa/IN: loaded serial 0
Oct 19 21:20:49 server20 named-checkconf: zone tachtler.net/IN: loaded serial 4
Oct 19 21:20:49 server20 named-checkconf: zone 171.217.88.in-addr.arpa/IN: loaded serial 4
Oct 19 21:20:49 server20 systemd: Started Berkeley Internet Name Domain (DNS).

Lokale DNS-Abfrage

Ob der DNS-Server auch auf DNS-Anfragen auf dem lokalen loopback Interface lauscht bzw. diese Beantwortet, kann mit nachfolgendem Befehl Überprüft werden:

# dig @127.0.0.1 tachtler.net

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40640
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tachtler.net.                  IN      A

;; ANSWER SECTION:
tachtler.net.           10800   IN      A       88.217.171.167

;; AUTHORITY SECTION:
tachtler.net.           10800   IN      NS      ns1.idmz.tachtler.net.

;; ADDITIONAL SECTION:
ns1.idmz.tachtler.net.  10800   IN      A       192.168.0.20

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Oct 19 21:27:32 CEST 2014
;; MSG SIZE  rcvd: 96

Interface Überprüfung

Ob und an welchen Interface der DNS-Server „lauscht“, bzw. DNS-Anfragen beantwortet, kann mit nachfolgendem Befehl überprüft werden:

# netstat -tulpen | grep named
tcp        0      0 127.0.0.1:953      0.0.0.0:*          LISTEN      25         83532      9806/named
tcp        0      0 192.168.1.20:53    0.0.0.0:*          LISTEN      25         83529      9806/named
tcp        0      0 192.168.0.20:53    0.0.0.0:*          LISTEN      25         83527      9806/named
tcp        0      0 127.0.0.1:53       0.0.0.0:*          LISTEN      25         83525      9806/named
udp        0      0 192.168.1.20:53    0.0.0.0:*                      25         83528      9806/named
udp        0      0 192.168.0.20:53    0.0.0.0:*                      25         83526      9806/named
udp        0      0 127.0.0.1:53       0.0.0.0:*                      25         83524      9806/named

Chroot

Um den DNS-Server in eine sogenannte chroot-Umgebung zu bringen, ist eine Möglichkeit, die Installation des rpm-Pakets

  • bind-chroot

durchzuführen.

Installation

Mit nachfolgender Befehl, kann das Paket bind-chroot installiert werden:

# yum install bind-chroot
Loaded plugins: changelog
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package bind-chroot.x86_64 32:9.9.4-14.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package             Arch           Version                  Repository    Size
================================================================================
Installing:
 bind-chroot         x86_64         32:9.9.4-14.el7          base          81 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 81 k
Installed size: 3.1 k
Is this ok [y/d/N]: y
Downloading packages:
bind-chroot-9.9.4-14.el7.x86_64.rpm                        |  81 kB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-chroot-9.9.4-14.el7.x86_64                           1/1
  Verifying  : 32:bind-chroot-9.9.4-14.el7.x86_64                           1/1

Installed:
  bind-chroot.x86_64 32:9.9.4-14.el7

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket bind-chroot installiert wurden.

# rpm -qil bind-chroot
Name        : bind-chroot
Epoch       : 32
Version     : 9.9.4
Release     : 14.el7
Architecture: x86_64
Install Date: Sun 19 Oct 2014 09:51:53 PM CEST
Group       : System Environment/Daemons
Size        : 3198
License     : ISC
Signature   : RSA/SHA256, Fri 04 Jul 2014 02:47:49 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : bind-9.9.4-14.el7.src.rpm
Build Date  : Tue 10 Jun 2014 10:14:10 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : /var/named/chroot
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.isc.org/products/BIND/
Summary     : A chroot runtime environment for the ISC BIND DNS server, named(8)
Description :
This package contains a tree of files which can be used as a
chroot(2) jail for the named(8) program from the BIND package.
Based on the code from Jan "Yenya" Kasprzak <kas@fi.muni.cz>
/usr/lib/systemd/system/named-chroot-setup.service
/usr/lib/systemd/system/named-chroot.service
/usr/libexec/setup-named-chroot.sh
/var/named/chroot
/var/named/chroot/dev
/var/named/chroot/dev/null
/var/named/chroot/dev/random
/var/named/chroot/dev/zero
/var/named/chroot/etc
/var/named/chroot/etc/localtime
/var/named/chroot/etc/named
/var/named/chroot/etc/named.conf
/var/named/chroot/etc/pki
/var/named/chroot/etc/pki/dnssec-keys
/var/named/chroot/run
/var/named/chroot/run/named
/var/named/chroot/usr
/var/named/chroot/usr/lib64
/var/named/chroot/usr/lib64/bind
/var/named/chroot/var
/var/named/chroot/var/log
/var/named/chroot/var/named
/var/named/chroot/var/run
/var/named/chroot/var/tmp

Vorbereitung: rsyslog

Die einzige Konfiguration, welche von Hand nachträglich durchgeführt werden muss, die zum Betrieb einer chroot-Umgebung nötig ist, ist die Konfiguration des SYSLOG-Dienstes/Deamons

  • rsyslog

Alle Anpassungen in der nachfolgenden Konfigurationsdatei sind durch nachfolgende Zeichenkette gekennzeichnet:

# Tachtler

Die nachfolgende Konfigurationsdatei

  • /etc/rsyslog.conf

muss wie nachfolgend dargestellt, erweitert werden (nur relevanter Ausschnitt):

...
#### GLOBAL DIRECTIVES ####
 
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
 
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
 
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
 
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
 
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
 
# File to store the position in the journal
$IMJournalStateFile imjournal.state
 
# Tachtler - new -
$AddUnixListenSocket /var/named/chroot/dev/log
 
#### RULES ####
...

:!: WICHTIG - Um die voranstehenden Änderungen wirksam werden zu lassen, ist ein Neustart des SYSLOG-Dienstes/Daemons - rsyslog notwendig!!!

Ein Neustart des SYSLOG-Dienstes/Daemons kann durch nachfolgenden Befehl ausgeführt werden:

# systemctl restart rsyslog.service

Vorbereitung: mount

Das Geheimnis, wie unter CentOS in der Version 7.x eine chroot-Umgebung realisiert wurde, liegt in der Art und Weise, wie bestehende Konfigurationen unter z.B. /var/named oder auch die z.B. Konfigurationsdateien /etc/named.conf in der chroot-Umgebung verfügbar gemacht werden.

:!: HINWEIS - Es wird beim Starten des named-Dienstes/Daemons das „mounten“ der Mount-Points durchgeführt!

:!: HINWEIS - Beim Stoppen des named-Dienstes/Daemons, werden die Mount-Points wieder „unmounted“!

Es wird mit dem Befehl mount und der Befehls-Option –bind das „mounten“ in die chroot-Umgebung realisiert. Nachfolgende Konfigurationsdatei beschreibt, wie und vor allem welche mount-Points beim starten gesetzt und beim stoppen nicht mehr gesetzt werden sollen:

  • /usr/libexec/setup-named-chroot.sh

(Nur relevanter Ausschnitt)

#!/bin/bash
 
ROOTDIR_MOUNT='/etc/named /etc/pki/dnssec-keys /etc/named.root.key /etc/named.conf
/etc/named.dnssec.keys /etc/named.rfc1912.zones /etc/rndc.conf /etc/rndc.key
/usr/lib64/bind /usr/lib/bind /etc/named.iscdlv.key /run/named /var/named'
 
...

:!: WICHTIG - Beim Einsatz eines eigenen Schlüssels anstelle von /etc/rndc.key ist ein symbolischer Link, wie nachfolgend dargestellt, zu erzeugen!

Nachfolgende Anpassungen sollten nun durchgeführt werden:

(Nur relevanter Ausschnitt)

# ln -sf /etc/myrndc.key /etc/rndc.key

:!: HINWEIS - Es wurde ein symbolischer Link /etc/rndc.key auf /etc/myrndc.key erzeugt!

Konfiguration

Nachfolgend soll kurz erläutert werden, welche Konfigurationen mir der Installation des Paketes bind-chroot manuell durchgeführt werden müssen.

Dienst/Deamon-Start einrichten

Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers in einer chroot-Umgebung zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:

# systemctl enable named-chroot.service
ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'

Eine Überprüfung, ob beim Neustart des Server der named-chroot-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e ^named-chroot.service
named-chroot.service                   enabled
bzw.
# systemctl is-enabled named-chroot.service
enabled

Dienst/Deamon-Stopp einrichten

Um einen DNS-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, nach einem Neustart des Servers nur ohne die chroot-Umgebung nicht mehr zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server nicht mehr mit gestartet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# systemctl disable named.service
rm '/etc/systemd/system/multi-user.target.wants/named.service'

Eine Überprüfung, ob beim Neustart des Server der named-Dienst/Deamon wirklich nicht mehr mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e ^named.service
named.service                          disabled
bzw.
# systemctl is-enabled named.service
disabled

Stop: named.service

Zuerst sollte nun der DNS-Sever, welcher nur ohne die chroot-Umgebung gestartet ist und auch werden kann, mit nachfolgendem Befehl beendet werden:

# systemctl stop named.service

Start: named-chroot.service

Falls die Konfigurationen rsyslog und mount wie oben beschrieben durchgeführt wurden, sollte dem Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:

# systemctl start named-chroot.service

DNS-Server Überprüfung

Ob der DNS-Server, sprich der named-chroot-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwf | grep named
root     10403  0.0  0.0 112640   932 pts/0    S+   22:57   0:00                      \_ grep --color=auto named
named    10308  0.0  2.9 170032 30424 ?        Ssl  22:48   0:00 /usr/sbin/named -u named -t /var/named/chroot -4

:!: WICHTIG - In der zweiten Zeile muss -t /var/named/chroot vorkommen, damit chroot aktiv ist!

Mount-Point Überprüfung

Mit nachfolgendem Befehl kann überprüft werden, ob alle benötigten Mount-Points für den DNS-Server in der chroot-Umgebung richtig gesetzt wurden:

# mount | grep named
/dev/mapper/server20-root on /var/named/chroot/etc/named type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/named.root.key type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/named.conf type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/named.rfc1912.zones type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/rndc.conf type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/myrndc.key type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/usr/lib64/bind type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/server20-root on /var/named/chroot/etc/named.iscdlv.key type xfs (rw,relatime,attr2,inode64,noquota)
tmpfs on /var/named/chroot/run/named type tmpfs (rw,nosuid,nodev,mode=755)
/dev/mapper/server20-root on /var/named/chroot/var/named type xfs (rw,relatime,attr2,inode64,noquota)

Auch sollten nachfolgende Abfragen der nun „gemounteten“ Verzeichnisse und Dateien, Ausgaben wie die nachfolgenden zum Vorschein bringen:

# ls -l /var/named/chroot/
total 4
drwxr-x--- 2 root  named   51 Oct 19 22:48 dev
drwxr-x--- 4 root  named 4096 Oct 19 22:50 etc
drwxr-x--- 3 root  named   18 Oct 19 21:51 run
drwxrwx--- 3 named named   18 Oct 19 21:51 usr
drwxr-x--- 5 root  named   48 Oct 19 21:51 var
# ls -l /var/named/chroot/etc/
total 48
-rw-r--r-- 1 root root   2309 Oct 19 21:51 localtime
drwxr-x--- 2 root named     6 Jun 10 10:13 named
-rw-r----- 1 root named 23129 Oct 19 21:12 named.conf
-rw-r--r-- 1 root named  2389 Jun 10 10:13 named.iscdlv.key
-rw-r----- 1 root named   931 Jun 21  2007 named.rfc1912.zones
-rw-r--r-- 1 root named   487 Jul 19  2010 named.root.key
-rw-r----- 1 root named   153 Oct 17 13:06 myrndc.key
drwxr-x--- 3 root named    24 Oct 19 21:51 pki
-rw-r--r-- 1 root root    140 Oct 17 16:07 rndc.conf
# ls -l /var/named/chroot/var/named/
total 28
drwxr-x--- 7 root  named   56 Oct 19 21:51 chroot
drwxrwx--- 2 named named   68 Oct 19 22:48 data
drwxrwx--- 2 named named 4096 Oct 19 22:35 dynamic
drwxrwx--- 2 named named 4096 Oct 19 20:55 master
-rw-r----- 1 root  named 2162 Oct 17 13:14 named.ca
-rw-r----- 1 root  named 2076 Jan 28  2013 named.ca.orig
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jun 10 10:13 slaves

DNSsec

DNSSEC gibt es bereits 1997 mit einer ersten Definition der Domain Name System Security Extensions (DNSsec) im RFC 4034. Diese Fassung funktionierte jedoch nur in kleinen Netzen; bei großen überforderte das geschwätzige Protokoll die Domain Name Server. Nach verschiedenen Überarbeitungen liegt seit März 2005 die aktuelle Version vor, bekannt auch unter der Bezeichnung DNSsec-bis.

Mit DNSsec signiert der Administrator einer Domain die Namenseinträge in seinem Nameserver kryptografisch.

Dafür werden zusätzliche Ressource Records angelegt, sodass DNSsec-Antworten länger sind als herkömmliche DNS-Antworten. Die zusätzlichen DNS-Records werden bei Anfragen als Bestandteile des DNS-Response versendet, sodass Empfänger zunächst prüfen können, ob der Response integer, also unverfälscht ist. Weil der Response auch ein Zertifikat enthält (einen signierten kryptografischen Schlüssel), kann der Empfänger in einem zweiten Schritt auch den Absender verifizieren und so feststellen, ob die im Paket enthaltene Information vertrauenswürdig ist.

Dazu kommen zwei verschiedene Typen von Schlüsseln zum Einsatz,

  • ein langen Key Signing Key von langer Lebensdauer (KSK)
  • ein kurzen Zone Signing Key von kurzer Lebensdauer (ZSK, zum Signieren der DNS-Records)

jeweils als privat und öffentlich Schlüssel erstellt.

Mithin hat eine Domain mindestens vier Schlüssel. Um den gleitenden Wechsel von einem abgelaufenen zu einem neuen Schlüssel zu gewährleisten, hat eine Domain in der Regel sogar mehrere Exemplare gleichzeitig, auch mehrere KSK (können sinnvoll sein, um unterschiedliche Signieralgorithmen nutzen zu können)

Wenn der Domain-Betreiber seinen aktuellen KSK dem Administrator der übergeordneten Domain bekannt gegeben hat, kann er mit diesem anschließend alle Schlüssel der eigenen Zone signieren und nutzen.

Alle anderen Daten der Zone werden mit dem aktuellen ZSK signiert. Neue ZSK kann man nach Gutdünken erzeugen und ohne Meldung gegenüber der Registry nutzen. Die übergeordnete Domain erkennt selbstständig, dass sie gültig sind, wenn man sie mit dem aktuellen KSK signiert hat, weil ihr dieser ja gemeldet worden ist. Ist ein Nameserver auf DNSsec umgestellt, liefert er ausschließlich signierte Antworten.

(Quelle: Heise.de - Artikel - Domain Name System absichern mit DNSsec

Vorbereitung

Zuerst ist es erforderlich nachfolgendes Verzeichnis anzulegen, welches den KSK (Key Signing Key) und den ZSK (Zone Signing Key) aufnehmen wird, was mit nachfolgendem Befehl durchgeführt werden kann:

# mkdir /etc/pki/dnssec-keys

KSK (Key Signing Key)

Nachfolgende Befehle erstellen einen KSK (Key Signing Key) für die FORWARD - Zone - tachtler.net:

# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -f KSK -n ZONE tachtler.net
Generating key pair.......................................................................+++
 .............................................................+++
Ktachtler.net.+010+41592
und die REVERSE - Zone - 171.217.88.in-addr.arpa:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -f KSK -n ZONE 171.217.88.in-addr.arpa
Generating key pair..................................+++ .......................+++
K171.217.88.in-addr.arpa.+010+05364

:!: HINWEIS - Dies muss für alle Zonen durchgeführt werden, welche mit DNSsec abgesichert werden sollen!

:!: HINWEIS - Je nachdem wie viel Entropie auf dem System vorhanden sind, kann die Erzeugung der Schlüsselpaare durchaus mehrere Stunden beanspruchen!

:!: HINWEIS - Um mehr „Entropien“ zur Beschleunigung der Generierung von Schlüsseln zur Verfügung zu haben, kann die Erzeugung der Zufallszahlen durch das Starten von Systemaktivitäten positiv beeinflusst werden. Nachfolgender Befehl, in einer zweiten shell auf dem selben Rechner aufgerufen, kopiert dazu den Inhalt einer Festplatte, hier /dev/sda nach /dev/null (Null Device).

# dd if=/dev/sda of=/dev/null
20480000+0 records in
20480000+0 records out
10485760000 bytes (10 GB) copied, 53.8159 s, 195 MB/s

Abschließend ist es noch erforderlich, das der DNS-Server die privaten Schlüssel lesen kann, was durch Zuweisung der Besitzrechte an den privaten Schlüsseln erfolgen kann, da grundsätzlich die privaten Schlüssel nur durch den Besitzer der Datei gelesen werden können, was mit nachfolgendem Befehl realisiert werden kann:

# chown named:named /etc/pki/dnssec-keys/*.private

ZSK (Zone Signing Key)

Nachfolgende Befehle erstellen einen ZSK (Zone Signing Key) für die FORWARD - Zone - tachtler.net:

# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -n ZONE tachtler.net
Generating key pair............................................................+++ ...................+++
Ktachtler.net.+010+33395
und die REVERSE - Zone - 171.217.88.in-addr.arpa:
# dnssec-keygen -r /dev/urandom -K /etc/pki/dnssec-keys -a RSASHA512 -b 2048 -n ZONE 171.217.88.in-addr.arpa
Generating key pair...........+++ ............+++
K171.217.88.in-addr.arpa.+010+01877

:!: HINWEIS - Dies muss für alle Zonen durchgeführt werden, welche mit DNSsec abgesichert werden sollen!

:!: HINWEIS - Je nachdem wie viel Entropie auf dem System vorhanden sind, kann die Erzeugung der Schlüsselpaare durchaus mehrere Stunden beanspruchen!

:!: HINWEIS - Um mehr „Entropien“ zur Beschleunigung der Generierung von Schlüsseln zur Verfügung zu haben, kann die Erzeugung der Zufallszahlen durch das Starten von Systemaktivitäten positiv beeinflusst werden. Nachfolgender Befehl, in einer zweiten shell auf dem selben Rechner aufgerufen, kopiert dazu den Inhalt einer Festplatte, hier /dev/sda nach /dev/null (Null Device).

# dd if=/dev/sda of=/dev/null
20480000+0 records in
20480000+0 records out
10485760000 bytes (10 GB) copied, 53.8159 s, 195 MB/s

Abschließend können dem DNS-Server die Besitzrechte an den öffentlichen Schlüsseln zugewiesen werden, was mit nachfolgendem Befehl realisiert werden kann:

# chown named:named /etc/pki/dnssec-keys/*.key

Überprüfung: Schlüssel

Mit nachfolgendem Befehl kann überprüft werden, ob die Schlüssel alle erstellt worden sind und die Ausgabe des nachfolgenden Befehls sollte in etwa wie folgt aussehen:

# ls -l /etc/pki/dnssec-keys
total 32
-rw-r--r-- 1 named named  630 Nov  2 07:57 K171.217.88.in-addr.arpa.+010+01877.key
-rw------- 1 named named 1777 Nov  2 07:57 K171.217.88.in-addr.arpa.+010+01877.private
-rw-r--r-- 1 named named  629 Nov  2 07:31 K171.217.88.in-addr.arpa.+010+05364.key
-rw------- 1 named named 1777 Nov  2 07:31 K171.217.88.in-addr.arpa.+010+05364.private
-rw-r--r-- 1 named named  609 Nov  2 07:52 Ktachtler.net.+010+33395.key
-rw------- 1 named named 1777 Nov  2 07:52 Ktachtler.net.+010+33395.private
-rw-r--r-- 1 named named  608 Nov  2 07:24 Ktachtler.net.+010+41592.key
-rw------- 1 named named 1777 Nov  2 07:24 Ktachtler.net.+010+41592.private

Eine einfache Art um herauszufinden, welcher Schlüssel nun welcher ist

  • KSK (Key signing key)
  • ZSK (Zone signing key)

können nachfolgende Befehle genutzt werden, welche auf Dateiebene agieren:

KSK:

# grep key-signing /etc/pki/dnssec-keys/*
/etc/pki/dnssec-keys/K171.217.88.in-addr.arpa.+010+05364.key:; This is a key-signing key, keyid 5364, for 171.217.88.in-addr.arpa.
/etc/pki/dnssec-keys/Ktachtler.net.+010+41592.key:; This is a key-signing key, keyid 41592, for tachtler.net.

und

ZSK:

# grep zone-signing /etc/pki/dnssec-keys/*
/etc/pki/dnssec-keys/K171.217.88.in-addr.arpa.+010+01877.key:; This is a zone-signing key, keyid 1877, for 171.217.88.in-addr.arpa.
/etc/pki/dnssec-keys/Ktachtler.net.+010+33395.key:; This is a zone-signing key, keyid 33395, for tachtler.net.

Konfiguration

Es gibt die Möglichkeit den DNS-Server ISC (Internet System Consortium) so zu konfigurieren, das dieser die DNSsec Verwaltung voll automatisch übernimmt.

Dafür gibt es die Option

  • auto-dnssec

welche zwei mögliche Einstellungen haben kann:

  • allow
  • maintain

Bei der Einstellung allow wird der DNS-Server ISC (Internet System Consortium) das angegeben Schlüssel-Verzeichnis durchsuchen um die passenden Schlüssel zu finden und diese zur Zone hinzufügen um diese dann anschließend auch zu signieren. Dies geschieht allerdings nur, wenn der Befehl rndc sign <Zonemname> manuell abgesetzt wird.

Bei der Einstellung maintain wird der DNS-Server ISC (Internet System Consortium) alle Funktionalitäten wie bei der Einstellung allow durchführen, jedoch ohne das manuelle Anstoßen des entsprechenden Befehls, sondern vollkommen automatisiert die Schlüsselverwaltung selbst durchführen.

/etc/named.conf

Nachfolgende Anpassungen der Konfigurationsdatei /etc/named.conf müssen durchgeführt werden um DNSsec voll automatisiert durch den DNS-Server ISC (Internet System Consortium) einzurichten.

(Nur relevanter Ausschnitt)

...
        // DNSSEC. ---------------------------------------------------------------
 
        // Enable DNSSEC support in named.
        dnssec-enable yes;
        // Enable DNSSEC validation in named and compare to root-certs (auto).
        // yes: DNSSEC validation is enabled, but a trust anchor must be manually
        // configured. No validation will actually take place until you have 
        // manually configured at least one trusted key. This is the default.
        // no: DNSSEC validation is disabled, and recursive server will behave
        // in the "old fashioned" way of performing insecure DNS lookups.
        // auto: DNSSEC validation is enabled, and a default trust anchor 
        // (included as part of BIND) for the DNS root zone is used.
        dnssec-validation auto;
        // When set, dnssec-lookaside provides the validator with an alternate
        // method to validate DNSKEY records at the top of a zone.
        // If dnssec-lookaside is set to auto, then built-in default values for the
        // DLV domain and trust anchor will be used, along with a built-in key for
        // validation.
        dnssec-lookaside auto;
...

Im Bereich der Zonen-Konfiguration, bei der jeweiligen Zonen-Definition:

(Nur relevanter Ausschnitt)

...
view "pdmz" IN {
        // Match for the client IP address.
        match-clients { any; };
 
        // If recursion is off and the server does not already know the answer,
        // it will return a referral response.
        recursion no;
 
        // Specifies which hosts are allowed to make recursive queries through this
        // server.
        allow-recursion { none; };
 
        // IMPORTANT: A zone can be updated either by editing zone files and
        // reloading the server or by dynamic update, but not both. If you have
        // enabled dynamic update for a zone using the "allow-update" option, you
        // are not supposed to edit the zone file by hand, and the server will not
        // attempt to reload it.
 
        // Zone: root server. -----------------------------------------------------
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        // Zone: localhost. -------------------------------------------------------
        include "/etc/named.rfc1912.zones";
 
        // Zone: tachtler.net (PDMZ) ----------------------------------------------
        zone "tachtler.net" IN {
                inline-signing yes;
                auto-dnssec maintain;
                key-directory "/etc/pki/dnssec-keys";
                type master;
                file "master/tachtler.net.zone.db";
        };
 
        zone "171.217.88.in-addr.arpa" in {
                inline-signing yes;
                auto-dnssec maintain;
                key-directory "/etc/pki/dnssec-keys";
                type master;
                file "master/171.217.88.in-addr.arpa.zone.db";
        };
};
...

Nachfolgende drei Konfigurationszeilen müssen bei der jeweiligen Zonen-Definition hinzugefügt werden:

...
                inline-signing yes;
                auto-dnssec maintain;
                key-directory "/etc/pki/dnssec-keys";
...

:!: HINWEIS - Der DNS-Server ISC (Internet System Consortium) wird nach den entsprechenden Schlüsseln unter dem angegeben Pfad selbständig suchen!

Konfigurationsdatei Überprüfung

Mit nachfolgendem Befehl kann die syntaktische Richtigkeit der Konfigurationsdatei:

  • /etc/named.conf

durchgeführt werden und sollte keine Meldungen ausgeben, wenn die Konfigurationsdatei syntaktische richtig ist:

# /usr/sbin/named-checkconf

Neustart

Falls die Basis-Konfiguration wie oben beschrieben durchgeführt wurde, sollte dem einem Neustart nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:

# systemctl restart named.service
bzw. in einer chroot-Umgebung
# systemctl restart named-chroot.service

Überprüfung DNSsec

Folgende Abfrage sollte nun eine Ausgabe in etwa wie die nachfolgende zur Anzeige bringen:

# dig @127.0.0.1 tachtler.net +dnssec +multi

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 tachtler.net +dnssec +multi
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30323
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;tachtler.net.          IN A

;; ANSWER SECTION:
tachtler.net.           10800 IN A 192.168.0.90
tachtler.net.           10800 IN RRSIG A 10 2 10800 (
                                20141202073530 20141102072325 33395 tachtler.net.
                                boZ7udpgEplvLHwkIj+mS27okutxITMMD3HxLZOf8sOZ
                                yh2H4pjxcsNzrFyCpkJBFTBcimHR3GQ0Gykzgif7zupV
                                U30MKZM7/h2fUcc+ZJq7XVwjDtXrB8WumoEFUq85xXUX
                                hOUD1kgicyHIpyZ8yE7Kwu+tcrpQE7r2PF1SBZPVBsAJ
                                jloNfkikR93VtBaDWIziJAOv1gTQCBAcL85Qt41Y1k6g
                                ob/mFa+vbFU3eBWdvagyPMyQqN79OTZIxz4s3indXbi5
                                UGFN20XZvTAY3PQukt7QSkJ2+2sF9707BagXSxhJZ2yo
                                H2m7VFdwlfKpkBnaZ9Ex0JEGHIClGT906g== )

;; AUTHORITY SECTION:
tachtler.net.           10800 IN NS ns1.idmz.tachtler.net.
tachtler.net.           10800 IN RRSIG NS 10 2 10800 (
                                20141202073530 20141102072325 33395 tachtler.net.
                                Z49+KRmLIrvP+xWR/ob8/3QLZ08KiO9iciAgcLewQITS
                                PwxVzcAE7q99Z8fdAD/gZj1UkVLuuWXAyW0qh3BYnxSC
                                XVUhTegflkJc/PKO/QBMaz4f278KeGEUh8MGi+M11qbs
                                eiWr0rHMLnH1OQOdGyT+g/hWeR6CyXBrhBRZ0Frnx92C
                                SpZbIBOEi3fsrqkIlhBxbycq6Zz3RTmNlBl6q/xhC1yS
                                aJfIlcFb9hl8kglHqyX5du3KFNsa5/ZyFNWyjR0pMuxH
                                akqLPISrsi1/JWoup/6vh7PHIadz8ftb9byb1rG6oWka
                                lk1fLnw/LXrjSlZPL5NluC6+R291DvJnWg== )

;; ADDITIONAL SECTION:
ns1.idmz.tachtler.net.  10800 IN A 192.168.0.20

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 09:23:42 CET 2014
;; MSG SIZE  rcvd: 696

:!: HINWEIS - Das Flag: ad ist bei Authoritativen DNS-Servern NICHT gesetzt! Nur bei rekursiven „resolvern“ ist das Flag: ad gesetzt, da diese die „Kette des Vertrauens“ abfragen und auflösen!

Nachfolgende Abfrage bringt den DNSKEY zum Vorschein:

# dig @127.0.0.1 +cd +multi tachtler.net dnskey

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 +cd +multi tachtler.net dnskey
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27553
;; flags: qr aa rd ra cd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tachtler.net.          IN DNSKEY

;; ANSWER SECTION:
tachtler.net.           10800 IN DNSKEY 256 3 10 (
                                AwEAAdieNs0rYbP84RKAaWn1lNsbc+DOxqb3UkzqXH+q
                                fkHaijK2WFr763SeSwiPsBgnM3T44CVYJYOz3UnCSfep
                                VeTLTaT4AJcICy4yoKGkSGAoEpf2zOv7Wm1vDUkqI5FF
                                Ui1lYE+SpeSKrp8SoRZ/3OFc3npIHDkQzSfPMfoQ245z
                                bWHY0+oNsnwQtUWi1FuVSIaprrS3Q6XHjV7Yx8fRv3fD
                                ujSAf5DM8sYJI/rqSdoiuiwx3mCMq+r2eZQNw3aQPjQd
                                CDzWAn2fUxrvdS/lOaVbsg0fAb+PmKNYkpEndrAR6pe/
                                A5PU67UcaGoDWkeEw6ri4w6aWqoVq6Qm92bZeo0=
                                ) ; ZSK; alg = RSASHA512; key id = 33395
tachtler.net.           10800 IN DNSKEY 257 3 10 (
                                AwEAAdYoLcd1WceIuJ8pG6pem5axl1py/721l/diXmmt
                                J6sTMlMXtwDWbSz3+oFKf3KAhOyuT6wxoGZsdMhc4CTs
                                xpPUN9VyqlLDCNP32LYAtcfG9mHkkKuL6UqruVbuo6YN
                                g6rGzbcLeU55Be++z9VT6IACf7wGgCWOnprlqZe0Cz0W
                                9zV7YB5I1MZXPP2x+SPwiNcK/ig+KNs5nDEeGfryummK
                                5cRgPcQwE9Tzi3cDxktGM7us6B9n3tuPs7LWHqUbDeMr
                                aeDd7gIY/Euk6OZ6twVwbF+Z0wc0zQwx2k02Cldc7hd4
                                8v5FGiNvj4ezmhRJ9fRe2oUIKqBHxxpausxdtuU=
                                ) ; KSK; alg = RSASHA512; key id = 41592

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 03 06:32:14 CET 2014
;; MSG SIZE  rcvd: 593

nsupdate

/etc

Nachfolgende Schritte sind erforderlich um Zonen-Dateien via nsupdate bearbeiten zu können.

Bevor mit dem Einsatz von nsupdate begonnen werden kann, sollte ein Schlüsselpaar für den Einsatz von nsupdate pro Zone erstellt werden.

Die soll im Verzeichnis

  • /etc

durchgeführt werden. Nachfolgender Befehl wechselt ist das angegebene Verzeichnis:

# cd /etc

Dies kann mit nachfolgendem Befehl durchgeführt werden:

# dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST tachtler.net

Die Erstellung erfolgt mit dem Algorithmus HMAC-MD5, welcher der Standard ist.

Anschließend sollten nachfolgende Dateien erstellt worden sein:

# ls -l /etc/*157*
-rw------- 1 root root 121 Feb 17 14:21 /etc/Ktachtler.net.+157+19706.key
-rw------- 1 root root 229 Feb 17 14:21 /etc/Ktachtler.net.+157+19706.private

Anschließend sollten noch die richtigen Besitz- und Dateirechte mit nachfolgenden Befehlen gesetzt werden:

# chown root:named /etc/*157*
und
# chmod 640 /etc/*157*

/etc/named.root.key

Für den Inhalt des jeweiligen Zonen-Schlüssels, kann mit nachfolgendem Befehl der Schlüssel ausgegeben werden:

# cat /etc/Ktachtler.net.+157+19706.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg==
Bits: AAA=
Created: 20160217132139
Publish: 20160217132139
Activate: 20160217132139

Der Inhalt der Datei sollte dann wie folgt erweitert werden:

managed-keys {
	# DNSKEY for the root zone.
	# Updates are published on root-dnssec-announce@icann.org
	. initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=";
};
key "tachtler.net" {
    algorithm hmac-md5;
    secret "K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg==";
};

Neu ist hier der Bereich:

key "tachtler.net" {
    algorithm hmac-md5;
    secret "K3EaOD3IysiC/D7lIXp+4hrYGDLyIq6la9oDBSuH2FMlE4kZ3O1ZFxKS/uS547TN5MHfwG5YvUkYE7gxMHCmCg==";
};

/etc/named.conf

Nachfolgend muss noch die Haupt-Konfigurationsdatei wie folgt erweitert werden, um die einzelnen Zonen entsprechend via nsupdate updaten zu dürfen.

Nur relevanter Ausschnitt:

...
        // Zone: tachtler.net ------------------------------------------------
        zone "tachtler.net" IN {
                inline-signing yes;
                auto-dnssec maintain;
                key-directory "/etc/pki/dnssec-keys";
                type master;
                file "master/tachtler.net.zone.db";
                // nsupdate
                allow-update { key "tachtler.net"; };
        };
...

Wichtig ist hier die Zeile:

                allow-update { key "tachtler.net"; }

Beispiel: nsupdate

Nachfolgendes Beispiel fügt einen A-Record der Zone tachtler.net hinzu:

# nsupdate -k /etc/tachtler.net.+157+19706.key 
> server localhost
> zone tachtler.net
> update add test.tachtler.net 600 A 192.168.0.120
> send
> quit

Anschließend Abfrage zeigt sogleich das Ergebnis:

# dig test.tachtler.net

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> test.tachtler.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39236
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.home.tachtler.net.		IN	A

;; ANSWER SECTION:
test.tachtler.net.	600	IN	A	192.168.0.120

;; AUTHORITY SECTION:
tachtler.net.	        10800	IN	NS	ns1.idmz.tachtler.net.

;; ADDITIONAL SECTION:
ns1.idmz.tachtler.net.	10800	IN	A	192.168.0.20

;; Query time: 0 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Wed Feb 17 15:27:53 CET 2016
;; MSG SIZE  rcvd: 106

Anschließend kann der Eintrag mit nachfolgenden Befehlen wieder Rückgängig gemacht werden:

# nsupdate -k /etc/Ktachtler.net.+157+19706.key 
> server localhost
> zone tachtler.net      
> update delete test.tachtler.net A
> send
> quit

Anschließend Abfrage zeigt sogleich das Ergebnis:

# dig test.tachtler.net

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> test.tachtler.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29468
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.tachtler.net.		IN	A

;; AUTHORITY SECTION:
tachtler.net.	10800	IN	SOA	ns1.idmz.tachtler.net. hostmaster.tachtler.net. 620 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Wed Feb 17 15:45:03 CET 2016
;; MSG SIZE  rcvd: 107

rndc sync

Mit nachfolgendem Befehl können nun die durch nsupdate durchgeführten Änderungen, welche sich nur im Hauptspeicher des Servers befinden und in einer Datei die den Namen der Zone trägt und um den Zusatz:

  • jnl

erweitert ist, auch in die Zonen-Datei übernommen werden:

# rndc sync

Anschließend kann dies durch Ausgaben im der LOG-Datei

  • /var/log/named.log

durch nachfolgende Einträge nachvollzogen werden:

(Nur relevanter Ausschnitt)

...
... named[6801]: client 127.0.0.1#24307/key tachtler.net: view idmz: signer "tachtler.net" approved
... named[6801]: client 127.0.0.1#24307/key tachtler.net: view idmz: updating zone 'tachtler.net/IN': adding an RR at 'test.tachtler.net' A
... named[6801]: zone tachtler.net/IN/idmz (signed): serial 619 (unsigned 601)
... named[6801]: received control channel command 'sync'
... named[6801]: dumping all zones: success

Ebenfalls kann die Zonen-Datei überprüft werden:

(Nur relevanter Ausschnitt)

...
$TTL 600        ; 10 minutes
test                    A       192.168.0.120
...

Nützlich Befehle

Nachfolgend befindet sich eine Liste mit nützlichen Befehlen rund um DNS- und die DNS-Server-Verwaltung. Die Liste erhebt keinen Anspruch auf Vollständigkeit:

DNS-Server Konfigurationsdatei auf Fehler überprüfen:

# /usr/sbin/named-checkconf /etc/named.conf

:!: HINWEIS - Der Parameter /etc/named.conf kann weggelassen werden, wenn die „default“ Konfigurationsdatei /etc/named.conf verwendet wird.

DNS-Server Konfigurationsdatei auf Fehler überprüfen: in chroot-Umgebung:

# /usr/sbin/named-checkconf -t /var/named/chroot /etc/named.conf

DNS-Server Konfigurationsdatei auf Fehler überprüfen - und Ausgabe der Konfigurationsdatei, mit „includes“ und ohne Kommentare:

# /usr/sbin/named-checkconf -p /etc/named.conf

DNS-Server Zonenkonfigurationsdatei auf Fehler überprüfen:

Zonen-Datei für die Forward-Auflösung - /var/named/master/intra.tachtler.net.zone.db

# named-checkzone intra.tachtler.net /var/named/master/intra.tachtler.net.zone.db

Zonen-Datei für die Reverse-Auflösung - /var/named/master/2.168.192.zone.db

# named-checkzone 2.168.192 /var/named/master/2.168.192.zone.db

DNS-Server alle Zonenkonfigurationsdateien neu einlesen, ohne den DNS-Server neu starten zu müssen:

# rndc reload

Neue Zonendatei für hint - root-Nameserver holen und abspeichern:

# dig +bufsize=1200 +norec NS . @a.root-servers.net > /var/named/named.ca
bzw.
# dig NS . @a.root-servers.net > /var/named/named.ca

Version des Verwendeten DNS-Servers abfragen (bind):

# dig txt chaos version.bind.

Auflisten aller DNS-Einträge einer Zone - hier z.B. tachtler.net:

# dig axfr tachtler.net

Logging für jede Anfrage einschalten und ausschalten:

# rndc querylog

Debugging Befehl für ein Abfrage via dig:

dig +trace +recurse +all +qr -t NS google.de

:!: HINWEIS Es kann nach dem einschalten ein tail -f /var/named/data/named.run durchgeführt werden, um jede Abfrage zu sehen!

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/dns_isc_bind_centos_7.txt · Zuletzt geändert: 2016/02/17 15:45 von klaus