19.04.2023

Programminstallation unter Linux

Apache Webserver
Samba Server
eMail-Server
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
NTP Server / Client
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
Stunnel einrichten
MySQL-Server einrichten
Datensicherung auf Bandlaufwerk
Audio CDs in WAV umwandeln
CDs und DVD erstellen
Grafiken bearbeiten erstellen
FAX Versand und Empfang
Web und FTP Sites syncronisieren
Verschlüsselung von E-Mails und Dokumenten
Programm Übersicht
Datenrettung
Linux Terminalserver
PXE Boot
sonstige Programme

Navigation:

Links:
Wiki Bind DNS Server
Wikipedia DNS Resource Record Liste

DNS TestPages:
MXToolBox - Mailserver Einstellungen im DNS testen mit Blacklist Check
internet.nl - WebDienst zum Prüfen eines DNS Resolver auf DNSSEC Validierung
UNI Duisburg-Essen - WebDienst zum Prüfen eines DNS Resolver auf DNSSEC Validierung

Seitenanfang

Dateien und Befehle

Konfigurationsdateien

Befehle Beschreibung
named-checkconf -z Bind named.conf Konfiguration prüfen
named-checkconf -p named.conf ausgeben
rndc reconfig geänderte Konfiguration des Servers einlesen
rndc status Status des DNS-Servers
rndc zonestatus domain.tld Zonendatei und Status der angegebenen Domain ausgeben
   
Datei Beschreibung
/etc/host.conf (Alle) auf älteren Systemen muss der Eintrag "order hosts,bind" (Reihenfolge der Verzeichnisdienste) in der Datei stehn, damit der Rechner den DNS-Server benutzt.
/etc/bind/named.conf (Debian) Standard Konfiguration der Zonen
/etc/bind/named.conf.local (Debian) Standard Konfiguration der Zonen
/etc/bind/named.conf.zone (Debian) Konfigurationsdatei für die eigenen Zonen
/etc/bind/named.conf.options (Debian) Konfiguration für die Optionen von BIND
/etc/nsswitch.conf (Alle) wenn ein localer DNS läuft, die Zeile "hosts: files" in "hosts: files dns" ändern
/etc/resolv.conf (Alle) DNS Server des Systems
/etc/bind/db.root (Debian) Liste der DNS ROOT Server
   
  1. - Aktuelle Version der DNS ROOT Serverliste herunterladen und in db.root umbenennen. Download: ftp.rs.internic.net/domain/named.root
  2. in der /etc/resolv.conf "search internes.net" in Domainnamen des Intranets ändern
  3. Daemon von Bind9 starten mit /etc/init.d/bind start

DNS-Server mit Debian

Installations des Packet:

apt-get install bind dnsutils

zum Testen des DNS kann man die Tools nslookup, dig, host oder andere verwenden.

Server neu starten

killall -HUP named
oder
/etc/inid.d/bind restart

Konfiguration der Domain und der reverse-Lookup Zone testen

named-checkzone domain.tld db.domain.tld
named-checkzone 1.168.192.in-addr.arpa db.192.168.1
Seitenanfang

Konfiguration der named.conf.options

type hint; (Hinweis) Root Server
type master; Primary DNS-Server, Orginal Datensätze des Namensservers
type slave; Secondary DNS-Server, kopiert die Daten des primary Servers
#Beispiel named.conf.options
options {
	directory "/etc/bind";
	auth-nxdomain no;	#conform to RFC1035
	//Weiterleitung des DNS-Servers aktivieren
	forward only;		#nur den angegebenen DNS abfragen
	forwarders {
		217.237.149.225;
	};
	//Zonentransfer zum DNS-SlaveServer
	allow-transfer {
	1.1.1.1 ;
	1.2.2.2 ;
	};
	DNSsec-enable yes;	#DNSsec aktivieren
	//IPv6 deaktivieren
	listen-on-v6 { none; };
	// Open Recursive Resolver (DNS Weiterleitung) einschraenken
	allow-recursion { 10.0.0.0/8; 192.168.0.0/16;
	127.0.0.0/8; ::1; };
	};
//Zugriff des DNS-Slave	aktivieren
acl	"slaves" {
	1.1.1.1 ;
	1.2.2.2 ;
};

directory - Standard Zonendatei Verzeichnis

forwarders - Weiterleitung der Anfrage, wenn der DNS Server diese nicht beantworten kann. Ohne "forwarders" Eintrag ist der Server "stand alone" und befragt die ROOT Nameserver. Die ROOT Nameserver sind in der Datei /etc/bind/db.root gespeichert.
forward only; - Anfragen nur von Provider DNS (hier T-Online) beantworten lassen ( ROOT Server werden nicht befragt).
forward first; - Anfragen werden erst von Provider DNS (hier T-Online) beantworten, wenn der nicht erreichbar ist, werden die ROOT Server befragt.

Zonen-Datei anlegen mit TYPE SLAVE

im Gegensatz zum Master wird bei FILE kein Path angegeben, Standard ist das der Cache der Zone unter /var/cache/bind/ gespeichert wird (Parameter directory).

#db.domain.tld
zone "domain.tld" {
        type slave;
        file "db.domain.tld";
        masters { IP-des-MasterDNS; };
};
#named.conf.options
...
directory "/var/cache/bind";
...

In einem anderen Verzeichnis hat bind keine Schreibrechte um die Dateien abzulegen.

Fehlermeldung in den Logs, wenn im Verzeichnis keine Schreibrechte bestehn.

dumping master file: <Path>/tmp-JTLUARobop: open: permission denied

IPv6 aktiv/deaktiv any / none

#named.conf.options
options {
...
	listen-on-v6 { any; };
...
};

Zugriff auf den Server einschränken, nur Rechner im lokalen Netzwerk können zugreifen

allow-query { localhost; localnets; };

Zonen-Transfer regeln, mit none den Transfer verbieten, im Normalfall nur Secondary Server erlauben.

allow-transfer { none; };

Zugriff eines Sekundären DNS Server erlauben.

acl "slaves" { IP-ADR des Slaves; };

DHCP Update von DNS

ACL für DHCP-Client Einträge

acl "dhcp-clients" {
192.168.2/24;
};
Seitenanfang

Logging

# /etc/bind/named.conf
options {
...
};

logging {
        channel default_log {    
                file "/var/log/named/named.log" versions 5 size 50M;
                print-time yes;  
                print-severity yes;
                print-category yes;
        };
        category default { default_log; };
        category general { default_log; };
        category lame-servers   { null; };
        category edns-disabled  { null; };
        // category security { null; };
};
...

 

Seitenanfang

Zonen einrichten named.conf.zone

Eine Domain für den Zugriff der localen Benutzer sperren.

zone "werbung.de" {
type master;
file "dummy";
};

Eintrag für die Domain domain.tld, vom Type Primary DNS Server, der die Zonendatei /etc/bind/db.domain.tld benutzt.

#Beispiel named.conf.zone

zone "domain.tld" {
type master;
file "/etc/bind/db.domain.tld";
allow-update {"dhcp-clients";};
};

Eintrag für ein secundary Nameserver (slave), für die Domain domain.tld und der dazugehörige Masterserver hat die IP 195.166.8.89.
Der DNS-Server versucht dann die Daten für die Zone domain.tld vom Master-Nameserver 195.166.8.89 zu holen und eine Kopie dieser Daten im File db.domain.tld.slave abzulegen.

zone "domain.tld" {
type slave;
file "/etc/bind/db.domain.tld.slave";
masters {195.166.8.89;};
};
Seitenanfang

Domain einrichten db.domain.tld

Wenn hinter einem Eintrag ein "." gesetzt wird z.B."ns1.local.de." verhindert man, das bind den Zonenname anhängt, wenn kein Punkt gesetzt ist ergänzt, hängt named den Zonennamen automatisch an.

#Beispiel db.domain.tld
$TTL 86400
@ IN SOA ns1.domain.tld. master.domain.tld. (
	2003040600	; Serial
	28800		; Refresh (8 Stunden)
	7200		; Retry (2 Stunden)
	604800		; Expire (1 Woche)
	86400		; Negative Cache TTL
)
IN	NS	ns1.domain.tld.	 ; 1. Nameserver
IN	NS	ns2.domain.tld.	 ; 2. Nameserver
IN	MX 10	mx1.domain.tld. ; primär Mail Exchanger
IN	MX 20	mx2.domain.tld. ; secundär Mail Exchanger

domain.tld.	IN	A	1.2.3.4
www		IN	CNAME	domain.tld.
ns1		IN	A	2.3.4.5
ns2		IN	A	3.2.4.5
mx1		IN	A	3.2.4.5
mx2		IN	A	4.5.4.5

Erklärung der Einträge

Befehl Bedeutung
SOA jede Master Zone muss diesen Eintrag enthalten
ns1.domain.tld. vollständier Name des Master-Nameserver
master.domain.tld. Mailadresse des verantwortlichen Admins (@ muss durch ein "." ersetzt werden)
( Beginn der Einstellungen für den Secondary Nameserver
2003040600 Seriennummer der Zone (Format vierstellige Jahreszahl Monat Tag und zweistellig laufende Nummer)
28800 wie oft muss der secondary Server den Master Server kontaktieren, um neue Version der Zone zu kopieren.
7200 Wartezeit, wenn die Verbindung zum Master Server fehlschlägt
604800 wie lange die Kopie des Secondary Servers gültig ist
86400 Negative Cache TTL
) Ende der Einstellungen für den Secondary Nameserver

statt in Sekunden, kann die Zeit auch in Stunden, Tagen oder Wochen angegeben werden, indem man der Zahl ein "h", "d" oder "w" anhängt.
Anhand der Seriennummer erkennt der Secondary Server das sich die Zone geändert hat.

IN NS ns1.domain.tld. Eintrag für den zuständigen Namensserver der Zone, ein NS-Record darf nicht auf ein CNAME-Record verweisen, ihm muss immer eine IP-Adr zugeordnet werden
IN MX 10 mx1.domain.tld. Eintrag für Mailserver der Domain, der Server ist auf Priorität 10 gestellt
IN MX 100 mx2.provider.tld. Mailserver mit Priorität 100
# Definieren der Ressourcen
ns1 IN A 192.168.1.1
rechner1 IN A 192.168.1.1
rechner2 IN A 192.168.1.100
mail IN A 192.168.1.1
www IN CNAME rechner1
subdomain IN MX 10 mail.domain.tld.

Records und die Bedeutung:

A - IP Addresse für eine Ressource
CNAME - Aliasname Hier kann man von einem Namen, auf einen anderen verweisen. Wenn sich die IP addresse von rechner1 ändert, ist damit auch die IP Addresse von www.domain.de geändert.
NS - eine Subdomain an eine anderen DNS deligieren
MX - Mail Exchanger Mailempfang für die Ressource
PTR - Reverse-Lookup Record

"subdomain IN MX 10 mx1.domain.tld."
Emails die an xxx@subdomain.domain.de geschickt werden, sollen auch auf mail.domain.tld landen.
(der mit der kleinsten Nummer hat die höchste Priorität)

Seitenanfang

Reverse-Lookup-Zone

#Beispiel named.conf.zone
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
allow-update { none; };
};
#Beispiel db.192.168.1
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.domain.tld. master.domain.tld. (
	2003040600	; Serial
	28800		; Refresh (8 Stunden)
	7200		; Retry (2 Stunden)
	604800		; Expire (1 Woche)
	86400		; Negative Cache TTL
)
;
1.168.192.in-addr.arpa.	IN	NS	ns1.domain.tld.
;
; Definieren der Ressourcen
1	IN	PTR	rechner1.
100	IN	PTR	rechner2.

Download: Beispiel Zonendatei

Seitenanfang

IPv6 Unterstützung von Bind

#Beispiel named.conf.zone
// IPv6 Reverse Lookup Zone (nibble)
zone "0.0.0.0.0.0.0.0.0.C.E.F.ip6.arpa" {
type master;
file "/etc/bind/db.fec0.0.0.arpa";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.C.E.F.ip6.int" {
type master;
file "/etc/bind/db.fec0.0.0.int";
allow-update { none; };
};
// IPv6 Reverse Lookup Zone (Bitstring)
zone "\[xfec000000000/48].ip6.arpa" {
type master;
file "/etc/bind/db.fec0.0.0.arpa.bs";
allow-update { none; };
};
#Beispiel db.fec0.0.0.arpa
$ORIGIN 0.0.0.0.0.0.0.0.0.C.E.F.ip6.arpa.
;
;fec0:0:0:2::1/64
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0 IN PTR pc1.domain.de.
;fec0:0:0:2::2/64
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0 IN PTR pc2.domain.de.
;fec0:0:0:1::1/64 - anderes Subnet
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 IN PTR pc3.domain.de.
Beispiel db.fec0.0.0.int ist ähnlich der db.fec0.0.0.arpa ausser
$ORIGIN 0.0.0.0.0.0.0.0.0.C.E.F.ip6.int.
#Beispiel db.fec0.0.0.arpa.bs
$TTL 86400
$ORIGIN \[xfec000000000/48].ip6.arpa.
@ IN SOA ns1.local.de. master.local.de. (
2003040600	; Serial
28800		; Refresh (8 Stunden)
7200		; Retry (2 Stunden)
604800		; Expire (1 Woche)
86400		; Negative Cache TTL
)
@ IN NS ns1.local.de.
; Definieren der Ressourcen
;fec0:0:0:2::1/64
\[x00020000000000000001] IN PTR pc1.domain.de.
;fec0:0:0:2::2/64
\[x00020000000000000002] IN PTR pc2.domain.de.
;fec0:0:0:1::1/64 - anderes Subnetz
\[x00010000000000000001] IN PTR pc3.domain.de.
#Beispiel IPv6 Zone
; IPv6 Host erste Variante
pc1 IN AAAA fec0:0:0:2::1
pc2 IN AAAA fec0:0:0:2::2

; IPv6 Host zweite Variante
;pc1 IN A6 fec0:0:0:2:0:0:0:1
;pc2 IN A6 0 fec0:0:0:2:0:0:0:2
;mynet IN A6 fec0:0:0:2::
;pc3 IN A6 ::0:0:0:3 64 mynet

DNS testen

# host -t AAAA pc1.domain.de
pc1.domain.de has AAAA address fec0:0:0:2::1
# host -t A6 pc1.domain.de
pc1.domain.de has A6 address 0 fec0:0:0:2::1
# host -n fec0:0:0:2::1
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.ip6.int domain name pointer pc1.domain.de.
# host fec0:0:0:2::1
\[xFEC00000000000020000000000000001/128].ip6.arpa domain name pointer pc1.domain.de.
Seitenanfang

DNS absichern

DNS TestPages:
MXToolBox - Mailserver Einstellungen im DNS testen mit Blacklist Check

Seitenanfang

DNSsec - Domain Name System Security Extensions

/etc/bind/bind.keys - DNSSEC öffentlicher Schlüssel Root KSK Keys
/var/cache/bind/managed-keys.bind - DNSSEC Key File
/var/cache/bind/managed-keys.bind.jnl - DNSSEC Key Journal

Beispiel für eine Zonendatei db.domain.tld

# db.domain.tld
$TTL 86400
@ IN SOA ns1.domain.tld. master.domain.tld. (
2003040600	; Serial
28800		; Refresh (8 Stunden)
7200		; Retry (2 Stunden)
604800		; Expire (1 Woche)
86400		; Negative Cache TTL
)
IN	NS	ns1.domain.tld.	 ; 1. Nameserver
IN	NS	ns2.domain.tld.	 ; 2. Nameserver
IN	MX 10	mx1.domain.tld. ; primär Mail Exchanger
IN	MX 20	mx2.domain.tld. ; secundär Mail Exchanger

domain.tld.	IN	A	1.2.3.4
www		IN	CNAME	domain.tld.
ns1		IN	A	2.3.4.5
ns2		IN	A	3.2.4.5
mx1		IN	A	3.2.4.5
mx2		IN	A	4.5.4.5

- Keys für die Zone erstellen

cd /etc/bind
dnssec-keygen -a RSASHA1 -b1024 -r /dev/urandom -e -n ZONE domain.tld
dnssec-keygen -a RSASHA1 -b1024 -r /dev/urandom -e -n ZONE -f KSK domain.tld

es wurden je zwei Dateien Kdomain.tld+005+xxxxx.key und Kdomain.tld+005+xxxxx.private erstellt.

- Die Schlüssel müssen nun in die Zonendatei angefügt werden.

cat Kdomain.tld*.key >> db.domain.tld

- jetzt muss die Zone mit dem Schlüssel signiert werden

dnssec-signzone -s now+0 -e now+2419200 -o domain.tld -k Kdomain.tld.+005+51189 \
db.domain.tld Kdomain.tld.+005+62267
oder
dnssec-signzone -g -o domain.tld -a -t db.domain.tld Kdomain.tld.+005*

danach wird im Verzeichnis eine Zonendatei mit der Endung .signed erstellt.

- jetzt in der named.conf die signierte Zonendatei laden.

# named.conf.zone
...
zone "domain.tld" {
        type master;
        file "/etc/bind/db.domain.tld.signed";
};
...

- in den Optionen von BIND muss nun noch DNSsec aktiviert werden

# named.conf.options
...
        dnssec-enable yes;      #DNSsec aktivieren
        dnssec-validation auto; #Root-KSK automatisch laden
...

- BIND Konfiguration testen und Konfiguration neu laden

named-checkconf -z
rndc reconfig

Testen der BIND Konfiguration

dig domain.tld any
dig @dns-server domain.tld DS

ein Beispiel wie es aussehen sollte.

dig DNSsec.se any
dig @a.ns.se DNSsec.se DS

RRSIG Record anzeigen

dig NS ns1.nic.fr +dnssec
dig DNSKEY . +dnssec > ./root.key

Paket ldnsutils

drill -D -S -k ./root.key www.dnssec.se
ldns-dane verify www.bund.de 443

- prüfen, ob der DNS-Server das AD-Flag (Authenticated Data) ausgibt

dig @localhost domain.tld +dnssec | grep flags
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
; EDNS: version: 0, flags: do; udp: 4096

 



 Seitenanfang

SPF - Sender Policy Framework

Wiki SPF - Sender Policy Framework
Sender Policy Framework FAQ
SPF Wizard

Beim SPF wird vom Empfänger Mailserver eine Abfrage beim DNS der Domain gemacht, welcher Mailserver für die Domain Mails versenden darf.

X-MS-Exchange-Organization-SenderIdResult

MailHeader mit SPF Eintrag der Domain des Senders

Received-SPF: None (server.domain.zz: user@domain.tld does not designate permitted sender hosts)

MailHeader mit SPF Eintrag der Domain des Senders

Received-SPF: Pass (server.domain.zz: domain of user@domain.tld designates
 xxx.xxx.xxx.xxx as permitted sender) receiver=server.domain.zz;
 client-ip=xxx.xxx.xxx.xxx; helo=mail.domain.tld;

- SPF TXT Eintrag in der ZonenDatei (Bind)

#Beispiel db.domain.tld
# mit Domain Angabe
...
domain.tld.	IN	TXT	"v=spf1 mx -all"
domain.tld.	IN	SPF	"v=spf1 mx -all"
...
#Beispiel db.domain.tld
# ohne Angabe einer Domain
...
@		IN	TXT	"v=spf1 mx -all"
@		IN	SPF	"v=spf1 mx -all"
...

im Beispiel wird die IP-Adresse des MX-Record als gültiger Mailserver spezifiziert, man kann auch einen A-Record oder die IP-Adresse / eine IP-Range angeben. z.B. ip4:213.165.64.0/23

domain.tld.	IN	TXT	"v=spf1 mx a:mail2.example.com ip4:111.222.333.444 ip4:213.165.64.0/23 -all"
Parameter Beschreibung
-all alle Mails die nicht vom aufgeführten Servern kommen werden abgelehnt
+all alle Server sind erlaubt, auch nicht aufgeführte
~all erlaubt allen Servern den Versand, aber bei nicht aufgeführten Servern werden die Mails als Spam/Phishing markiert
?all Einstellungen werden ignoriert, Empfänger kann wählen, was geschehen soll

- Testen der Einstellungen

dig SPF domain.tld @ns1.domain.tld
dig -t TXT domain.tld

Bind Fehlermeldung im LOG

"found SPF/TXT record but no SPF/SPF record found"

lt. RFC 4408 sollen für die Kompatibilität beide Einträge in der Zonen Datei hinterlegt sein, der TXT und der SPF Eintrag. (3.1.1. DNS Resource Record Types)

Seitenanfang

DMARC - Domain-based Message Authentication, Reporting and Conformance

Wiki DMARC - Domain-based Message Authentication, Reporting and Conformance

DKIM und SPF muss eingerichtet sein, dann kann DMARC genutzt werden.

- DKIM TXT Eintrag in der ZonenDatei (Bind)

_dmarc.domain.tld. IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:mailauth-reports@domain.tld;"
Parameter Beschreibung
v=DMARC1 Protokollversion (derzeitiger Standard DMARC1)
p=none eMails der Hauptdomäne werden nicht weiter behandelt
p=quarantine eMails der Hauptdomäne werden in Quarantäne gestellt
p=reject eMails der Hauptdomäne werden abgelehnt
pct=100 Prozentsatz der eMails, die entsprechend von "p" gefiltert werden sollen
rua=mailto:... eMail Adresse, die ein mal Täglich den Report erhält
aspf  

- Testen der Einstellungen

dig -t TXT _dmarc.domain.tld
nslookup -q=TXT _dmarc.gmail.com
Seitenanfang

DKIM - DomainKeys Identified Mail

Wiki DKIM - DomainKeys Identified Mail

 

Seitenanfang

SOA - Start of Authority

Wiki SOA - Start of Authority

- SOA Eintrag in der ZonenDatei (Bind)

#Beispiel db.domain.tld
; Zonefile (Forward Mapping)
$TTL 86400
@ IN SOA ns1.domain.tld. hostmaster.domain.tld. (
        2017070803      ; Serial
        3600            ; Refresh [1h]
        1800            ; Retry [30m]
        1209600         ; Expire [14d]
        1800    )       ; Negative Cache TTL [30m]

Der Wert für Expire sollt lt. RFC 1912 zwei bis vier Wochen betragen.

- Testen der Einstellungen

dig SOA domain.tld +multiline
Seitenanfang

Domain absichern

Seitenanfang

Zertifizierungsstelle im DNS autorisieren mittels CAA Record

In der DNS Zonendatei den CAA (Certification Authority Authorization) festlegen. RFC6844 Damit werden eine oder mehrere CAs autorisiert, für eine Domain ein Zertifikat auszustellen.

Beispiel:

example.com.  CAA 0 issue "letsencrypt.org"
example.com.  CAA 0 issuewild "comodoca.com"
example.com.  CAA 0 iodef "https://iodef.example.com/"
example.com.  CAA 0 iodef "mailto:domain@example.com"

issue - darf Zertitikate auf beliebige Hostnamen der Domain ausstellen
issuewild - darf Wildcard-Zertifikate etwa auf *.example.com beglaubigen, der Eintrag issuewild ";" deaktiviert Wildcard-Zertifikate.
iodef (Optional) - URL zur Benachrichtigung des Domain-Eigentümers, falls eine nicht aufgefühte CAA einen Zertifikatsantrag erhält.
RFC5070 - iodef Format
RFC6546 - Transport of Real-time Inter-network Defense (RID) Messages over HTTP/TLS

Der Webdienst von SSLMate erstellt Vorlagen zum einfügen in die Zonendatei.

; ab Bind 9.9.6
domain.tld.	IN	CAA	0 issue "letsencrypt.org"
domain.tld.	IN	CAA	0 issue "comodo.com"
domain.tld.	IN	CAA	0 issuewild ";"

RFC3597 - Syntax Legacy Zone File für Bind vor Version 9.9.6 und Windows Server 2016

; bis Bind 9.9.6 Legacy Zone File
domain.tld.	IN	TYPE257	\# 22 000569737375656C657473656E63727970742E6F7267
domain.tld.	IN	TYPE257	\# 17 00056973737565636F6D6F646F2E636F6D
domain.tld.	IN	TYPE257	\# 12 0009697373756577696C643B

- Eintrag testen

host -t CAA domain.tld
dig domain.tld type257
dig domain.tld CAA
Seitenanfang

Bind in den chroot-Käfig legen

  1. Verzeichnis in dem Bind laufen soll anlegen
    mkdir -p /var/named/jail
  2. Gruppe erzeugen
    groupadd -g 53 named
  3. User anlegen und anweisen ein chroot auf "/var/named/jail" zu machen
    useradd -u 53 -g named -c "chroot Bind user" -d /var/named/jail -m named
  4. in das Homeverz. vom User wechseln
    cd ~named
  5. legt Verz. und Unterverz. an
    mkdir -p var/{run,named} {dev,etc}
    mkdir -p var/{run,cache/bind} {etc/bind,dev}	#unter Debian
  6. Verzeichnis mit Daten füllen
    cp -Rav /var/named/data var/named/
    cp -Rav /etc/bind etc/	#unter Debian
    cp -av /dev/{null,random} dev/
    cp -av /etc/{localtime,named.conf,rndc.key} etc/	#unter Debian nicht notwendig
    für einen Slave Server ein Verz. mit schreibrechten erstellen
    mkdir var/named/slave
    chown named.named var/named/slave
  7. Rechte setzen
    chown root.root .
    chmod 0755 .
    chown root.root .
    chown named.named var/named/data
    chown named.named etc/bind/	#unter Debian
    chmod 0700 var/named/data
    chmod 0700 etc/bind/	#unter Debian
    chown named.named var/run
  8. Syslog im Käfig einrichten
    syslogd -m 0 -a /var/named/jail/dev/log
  9. named Dienst starten und an User "named" übergeben
    /usr/sbin/named -u named -t /var/named/jail -c /etc/bind/named.conf
  10. Test ob named läuft
    ps axcu | grep named
    tail -n 20 /var/log/daemon.log
Seitenanfang

unbound DNS

- Konfiguration

# /etc/unbound/unbound.conf
server:
    interface: 0.0.0.0
    interface: ::0
    access-control: 127.0.0.1/8 allow
    access-control: ::1/128 allow
    access-control: 192.168.0.0/16 allow
    access-control: 2001:db8::/64 allow
    verbosity: 1
service unbound restart

 

Seitenanfang

DNS testen

- DNS auf unerlaubten Zonentransfer testen. Datei als axfr.sh speichern, start mit axfr.sh domain.tld

#!/bin/bash
# Syntax: axfr.sh domain.tld
# You need to have dnsutils installed
DOMAIN=$1
if [ -z "$1" ];
        then
                echo -e \\n \\t "\e[51;31m"Syntax: axfr.sh domain.tld"\e[0m" \\n;
                exit 1
        fi
        dig NS $DOMAIN +short | sed -e "s/\.$//g" | \
        while read nameserver;
        do echo "Testing $DOMAIN @ $nameserver";
        dig AXFR $DOMAIN "@$nameserver";
done

bei dem Test wird der Zonentransfer nach unbekannt geprüft, das kann auftreten, wenn der Zugriff auf den Master DNS Servers nicht eingeschränkt wurde, dabei wird der Zonentransfer auf den angegebenen Server eingeschränkt.

# named.conf.options
options {
	...
allow-transfer { 192.168.1.1; };

- DNS-Server auf Weiterleitung testen

nmap -sU -p 53 -sV -P0 --script "dns-recursion" x.x.x.x
Seitenanfang

DNS Tools

Seitenanfang

DIG

DNSSEC Resolver-Check

- DNS Resolver prüfen, oder er DNSSEC Anfragen validiert.

dig fail05.dnssec.works
; <<>> DiG 9.10.3-P4-Ubuntu <<>> fail05.dnssec.works
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 29342
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fail05.dnssec.works.           IN      A

;; Query time: 117 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Sat Jul 29 20:37:16 CEST 2017
;; MSG SIZE  rcvd: 37

Als Status wird SERVFAIL geliefert, der DNS-Resolver der abgefragt wird, validiert die DNSSEC Anfragen richtig.
Beim Status NOERROR, währe diese Abfrge nicht richtig validiert, da auf dem Server DNSSEC nicht korrekt eingerichtet ist, die Anfrage muss also immer einen Fehler liefern.

- im Beispiel ist die DNSSEC Validierung in der Abfrage deaktiviert, Parameter +cd - checking disabled, keine DNSSEC Validierung durchführen

dig fail05.dnssec.works +cd
; <<>> DiG 9.10.3-P4-Ubuntu <<>> fail05.dnssec.works +cd
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14407
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;fail05.dnssec.works.           IN      A

;; ANSWER SECTION:
fail05.dnssec.works.    3595    IN      A       5.45.109.212

;; Query time: 15 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Sat Jul 29 20:52:26 CEST 2017
;; MSG SIZE  rcvd: 64

- DNSSEC Test der RootZone, die Anfrage muss auch nach dem 11.Oktober 2017 so ausgegeben werden, sonst hat der Resolver noch nicht den aktuellen DNSSEC Schlüssel der RootZone.

dig . soa +multiline @8.8.4.4
; <<>> DiG 9.10.3-P4-Ubuntu <<>> . soa +multiline @8.8.4.4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;.                      IN SOA

;; ANSWER SECTION:
.                       21986 IN SOA a.root-servers.net. nstld.verisign-grs.com. (
                                2017072801 ; serial
                                1800       ; refresh (30 minutes)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )

;; Query time: 23 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Sat Jul 29 20:56:09 CEST 2017
;; MSG SIZE  rcvd: 103

ist die Antwort positiv, werden vier Flags ausgegeben. flags: qr rd ra ad - das letzte ad steht für authenticated data, die DNS Antwort wurde positiv validiert. Fehlt das Flag, werden die Daten nicht geprüft.

Flags: (nach RFC1035)
QR = specifies whether this message is a query (0), or a response (1)
RD = Recursion Desired (set in a query and copied into the response if recursion is supported)
RA = Recursion Available (if set, denotes recursive query support is available)
AA = Authoritative Answer
TC = Truncation
AD = Authenticated Data (for DNSSEC only; indicates that the data was authenticated)
CD = Checking Disabled (DNSSEC only; disables checking at the receiving server)

Response code:
0 = NOERR, no error
1 = FORMERR, format error (unable to understand the query)
2 = SERVFAIL, name server problem
3 = NXDOMAIN, domain name does not exist
4 = NOTIMPL, not implemented
5 = REFUSED (e.g., refused zone transfer requests)

Seitenanfang

HOST

Parameter Beschreibung
-t query type Abfrage z.B. AAAA oder A6, A, SRV, ANY, CNAME, MX, NS, PTR, SOA, TXT, u.a.
-v Verbose
-a entspricht -v -t ANY
-4 nur IPv4 Query Ausgabe
-6 nur IPv6 Query Ausgabe

- TXT REcord der Domain ausgeben

host -t TXT domain.tld

 

Seitenanfang

NSLOOKUP

 

Seitenanfang

sonstiges