BIND
Siehe auch
Der Berkeley Internet Name Domain Server (BIND) ist der verbreitetste DNS. Mitte der 80er Jahre erschienen, gilt BIND seit 2007 als DNS-Referenzsoftware. Version 9 erschien im Jahr 2000, seit 2013 ist BIND 10 verfügbar. In RHEL 7 kommt BIND 9.9 zum Einsatz, in RHEL 8 Bind 9.11.
Ein Caching Only Nameserver ist ein nicht-autoritativer Nameserver, der keine eigene Zone (wie beispielsweise example.com
) verwaltet. Er muss daher alle eintreffenden DNS-Anfragen über andere Nameserver (Forwarder) auflösen, und speichert das Ergebnis zwecks Caching im lokalen RAM ab. Jeder Cache-Eintrag besitzt ein eigenes Verfallsdatum (TTL, Time To Live), nach dessen Ablauf der Eintrag aus dem Cache gelöscht wird. Die TTL wird dabei durch einen autoritativen Nameserver für diesen Eintrag festgelegt.
- Links:
DNS allgemein, schön erklärt: https://calomel.org/unbound_dns.html
Begriffe:
ARPA: Address and Routing Parameter Area
SOA: Start of Authority
Installation
Auf RHEL: Das Paket heisst „bind“, der Service heisst „named“.
yum -y install bind
systemctl enable --now named.service
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
Wird der named
-Server das erste mal gestartet und bleibt mit der Meldung Generating /etc/rndc.key
hängen, falls man per SSH eingeloggt ist: Direkt auf die (VM-)Konsole wechseln und dort den ersten Start ausführen. Der Grund liegt in der Erstellung eines starken, kryptographischen Schlüssels für den DNS, für die Zufallsinformationen aus Tastatur- und Maus-Streams bezogen werden - die beim Zugang per SSH fehlen können.
Beispiel-Konfiguration
Standalone-DNS
Konfiguration:
Lokaler DNS, standalone
verwaltet die Forward-Zone example.com
verwaltet die Reverse-Zone 192.0.2.x
bietet nur IPv4
leitet Anfragen ausserhalb seiner Zonen an Cloudflare DNS-Server weiter
versteckt seine Versionsnummer in DNS-Anfragen
Auf RHEL:
OPTIONS=-4
acl "trusted" {
localhost;
localnets;
192.0.2.0/24;
};
options {
allow-query-cache { trusted; };
allow-recursion { trusted; };
allow-transfer { none; };
directory "/var/named";
disable-empty-zone yes;
dnssec-enable no;
dnssec-validation no;
dump-file "/var/named/data/cache_dump.db";
filter-aaaa-on-v4 yes;
forward only;
forwarders {
1.1.1.1;
1.0.0.1;
};
listen-on port 53 { any; };
listen-on-v6 { none; };
managed-keys-directory "/var/named/dynamic";
memstatistics-file "/var/named/data/named_mem_stats.txt";
pid-file "/run/named/named.pid";
recursion yes;
session-keyfile "/run/named/session.key";
statistics-file "/var/named/data/named_stats.txt";
version "Linuxfabrik";
};
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";
zone "example.com" IN {
type master;
file "forward.zone";
// do normal iterative resolution (do not forward)
forwarders { };
allow-query { trusted; };
allow-transfer { trusted; };
allow-update { none; };
};
zone "2.0.192.in-addr.arpa" IN {
type master;
file "reverse.zone";
// do normal iterative resolution (do not forward)
forwarders { };
allow-query { trusted; };
allow-transfer { trusted; };
allow-update { none; };
};
$TTL 1H
@ IN SOA infra01.example.com. info@example.com. (
2024041601 ; <SERNO>
1H ; <TIME-TO-REFRESH>
1H ; <TIME-TO-RETRY>
1W ; <TIME-TO-EXPIRE>
1D ) ; <minimum-TTL>
@ IN NS infra01.example.com.
srv01 IN A 192.0.2.2
srv06 IN A 192.0.2.10
srv07 IN A 192.0.2.11
srv08 IN A 192.0.2.12
mail IN CNAME diogenes-ch.mail.protection.outlook.com.
$TTL 1H
@ IN SOA infra01.example.com. info@example.com. (
2024041601 ; <SERNO>
1H ; <TIME-TO-REFRESH>
1H ; <TIME-TO-RETRY>
1W ; <TIME-TO-EXPIRE>
1D ) ; <minimum-TTL>
@ IN NS infra01.example.com.
2 IN PTR srv01.example.com.
10 IN PTR srv06.example.com.
11 IN PTR srv07.example.com.
12 IN PTR srv08.example.com.
Konfiguration prüfen:
named-checkzone example.com /var/named/example.com.zone
named-checkzone 2.0.192.in-addr.arpa /var/named/2.0.192.in-addr.arpa.zone
Primary-Secondary mit LFOps
Hardening
Wer die Versionssnummer des BIND verstecken möchte, verwendet:
options {
version "my-namesrv :-)";
filter-aaaa-on-v4 yes;
....
Wer im Vulnerability-Scanner „Nessus“ das Finding „DNS Server Cache Snooping Remote Information Disclosure“ erhält, muss sich überlegen, ob das Finding nur möglich war, weil der Nessus-Client genau im erlaubten Netzsegment steckt.
Domain Name Service Response Policy Zones
DNS RPZ ermöglicht einem Nameserver-Administrator, ähnlich einer /etc/hosts
benutzerdefinierte Antworten über das globale DNS zu legen (BIND 9.8+, auch „DNS-Firewall“ genannt). Hauptmotivation für die Entwicklung war der Wunsch, schnell bösartige Domänennamen, IP-Adressen oder Nameserver überschreiben zu können:
Clients kann so der Zugriff auf bösartige Hosts verwehrt werden.
Kennt man eine fehlerhafte IP-Adresse, kann man Clients den Zugriff auf Hostnamen, die darauf verweisen, verwehren.
Wenn man einen Nameserver kennt, der bösartige Domains verwaltet, kann man den Zugriff auf dessen DNS-Informationen blockieren.
IPv6 Reverse Zone
Reverse Zones für IPv6 sind im Prinzip gleichen wie für IPv4. Allerdings ist die Handhabung aufgrund der langen Adressen etwas mühsamer. Am einfachsten ist es wie folgt, wenn zum Beispiel einen Eintrag für 2001:db8:cafe:f9::d3
auf test.example.com
eingerichtet werden muss:
Im Bind eine Zone
ip6.arpa
anlegen. Wie bei IPv4 muss die Adresse entsprechend der Subnetzmaske komplett invertiert werden. Aus2001:db8:cafe:f9::/64
wird also9.f.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa
. Dabei hilft auch das „Full Network“ ausipcalc 2001:db8:cafe:f9::/64
.Nun kann per
dig
herausgefunden werden, wie derPTR
-Eintrag aussehen muss:dig -x 2001:db8:cafe:f9::d3 | grep QUESTION -A1 # ;; QUESTION SECTION: # ;3.d.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.f.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR
Nun muss der Teil der Zone von der Adresse entfernt werden. Aus
9.f.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa
und3.d.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.f.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa
ergibt sich also3.d.0.0.0.0.0.0.0.0.0.0.0.0.0.0
. Dies kann nun als3.d.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR test.example.com
in der Zone eingetragen werden.
Built on 2024-09-03