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:

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

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:

/etc/sysconfig/named
OPTIONS=-4
/etc/named.conf
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; };
};
/var/named/example.com.zone
$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.
/var/named/2.0.192.in-addr.arpa.zone
$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

Hardening

Wer die Versionssnummer des BIND verstecken möchte, verwendet:

/etc/named.conf
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.

Built on 2024-04-18