Product SiteDocumentation Site

5.7. Absichern von BIND

Es gibt verschiedene Dinge, mit denen Sie sich auseinander setzen sollten, um einen Domain-Server-Daemon abzusichern, die hnlich zu den berlegungen sind, wie man einen anderen Dienst absichert:

5.7.1. Bind-Konfiguration um Missbrauch zu verhindern

Sie sollten einige Informationen, die von auen ber den DNS-Server abgefragt werden knnen, zurckhalten, so dass man nicht wertvolle Informationen ber Ihre Organisation, die Sie nicht herausgeben wollen, abfragen kann. Dies schliet die folgenden Optionen mit ein: allow-transfer, allow-query, allow-recursion und version. Sie knnen dies in dem globalen Abschnitt tun (so wird es auf alle Zonen angewandt) oder jeweils pro Zone. Dies ist im Paket bind-doc dokumentiert. Sobald das Paket installiert ist, knnen Sie hierzu mehr in /usr/share/doc/bind/html/index.html lesen.
Stellen Sie sich vor, Ihr Server ist mit dem Internet und Ihrem internen Netzwerk (Ihre interne IP ist 192.168.1.2) verbunden – ein einfacher Server im heimischen Netzwerk. Sie mchten keinen Dienst im Internet anbieten und lediglich DNS-Abfragen von Ihren internen Rechnern erlauben. Sie knnen dies einschrnken, indem Sie Folgendes in Ihre /etc/bind/named.conf aufnehmen:
options {
            allow-query { 192.168.1/24; } ;
            allow-transfer { none; } ; 
            allow-recursion { 192.168.1/24; } ;
            listen-on { 192.168.1.2; } ;
            forward { only; } ;
            forwarders { A.B.C.D; } ;
};
Die Option listen-on bewirkt, dass sich DNS nur auf die Schnittstelle bindet, die die interne Adresse hat. Aber sogar wenn diese Schnittstelle Verbindung zum Internet hat (zum Beispiel weil Sie NAT benutzen), werden Abfragen nur akzeptiert, wenn sie von internen Hosts kommen. Wenn das System mehrere Schnittstellen hat und Sie kein listen-on gesetzt haben, knnten zwar nur interne Benutzer Abfragen starten, aber, da der Port fr Angreifer von auen ansprechbar ist, knnten sie versuchen, den DNS zum Absturz zu bringen (oder durch Speicher-berlauf-Attacken auszunutzen). Sie knnten ihn sogar dazu bringen, lediglich auf 127.0.0.1 zu hren, wenn Sie den DNS-Service nicht fr ein anderes System anbieten wollen.
Der version.bind-Eintrag in der chaos class enthlt die Version des derzeit laufenden Bind-Prozesses. Diese Information wird oft von automatischen Scannern und bsartigen Individuen dazu verwendet herauszufinden, ob ein bind fr eine bestimmte Attacke verwundbar ist. Indem Sie falsche oder gar keine Informationen im version.bind-Eintrag zur Verfgung stellen, minimieren Sie die Wahrscheinlichkeit, dass jemand Ihren Server aufgrund der publizierten Version attackieren wird. Um Ihre eigene Version anzugeben, benutzen Sie die Version-Direktive auf folgende Art:
 options { ... various options here ...
version "Nicht verfgbar."; };
Das ndern des version.bind-Eintrags schtzt eigentlich nicht gegen Attacken, aber Sie knnen es als sinnvolle Schutzvorrichtung ansehen.
Eine beispielhafte named.conf-Konfigurationsdatei knnte so aussehen:
acl internal {
        127.0.0.1/32;           // localhost
        10.0.0.0/8;             // intern
        aa.bb.cc.dd;            // eth0 IP
};

acl friendly {
        ee.ff.gg.hh;            // slave DNS
        aa.bb.cc.dd;            // eth0 IP
        127.0.0.1/32;           // localhost
        10.0.0.0/8;             // intern
};

options {
        directory "/var/cache/bind";
        allow-query { internal; };
        allow-recursion { internal; };
        allow-transfer { none; };
};
// Ab hier bis zur meineseite.bogus Zone
// ist alles im Grunde die unvernderte Debian-Standardeinstellung.
logging {
        category lame-servers { null; };
        category cname { null; };   
};

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

// Zone, die ich selbst hinzugefgt habe
zone "mysite.bogus" {
        type master;
        file "/etc/bind/named.meineseite";
        allow-query { any; };
        allow-transfer { friendly; };
};
Bitte prfen Sie (erneut) die Debian-Fehler-Datenbank (BTS) bezglich Bind, insbesondere http://bugs.debian.org/94760. Fhlen Sie sich ruhig dazu ermutigt, zu diesem Bugreport beizutragen, wenn Sie glauben, ntzliche Informationen hinzufgen zu knnen.

5.7.2. ndern des BIND-Benutzers

Bezglich der Beschrnkung von BINDs Privilegien mssen Sie beachten, dass, wenn Sie BIND als nicht-root Benutzer laufen lassen, BIND neue Netzwerk-Schnittstellen nicht automatisch entdecken kann, zum Beispiel wenn Sie eine PCMCIA-Karte in Ihr Notebook stecken. Lesen Sie die Datei README.Debian in Ihrer named-Dokumentation (/usr/share/doc/bind/README.Debian) fr mehr Informationen hierzu. Es gab in letzter Zeit viele Sicherheitsprobleme mit BIND, so dass es ntzlich ist, den Benutzer zu wechseln, wenn es mglich ist. Wir werden die Schritte, die dazu ntig sind, detailliert auffhren. Wenn Sie dies automatisch machen lassen wollen, knnen Sie das Skript in Abschnitt B.5, „Beispielskript, um die Standard-Installation von Bind zu ändern“ ausprobieren.
Beachten Sie, dass dies nur auf die BIND-Version 8 zutrifft. In den Debian-Paketen fr die BIND-Version 9 wird der Benutzer bind erstellt (seit Version 9.2.1-5, ist in Sarge enthalten) und mit der Variable OPTIONS in /etc/default/bind9 verwendet. Wenn Sie BIND 9 einsetzen und Ihr Nameserver nicht als Benutzer bind luft, sollten Sie die Einstellungen in dieser Datei berprfen.
Um BIND unter einem anderen Benutzer laufen zu lassen, mssen Sie zunchst einen zustzlichen Benutzer und eine zustzlich Gruppe dafr erstellen (es ist keine gute Idee, fr alle Dienste, die Sie nicht als Root laufen lassen, den Benutzer nobody und die Gruppe nogroup zu benutzen). In diesem Beispiel wird der Benutzer und die Gruppe named verwendet. Sie knnen diese anlegen, indem Sie die folgenden Kommandos eingeben:
addgroup named
adduser --system --home /home/named --no-create-home --ingroup named \
      --disabled-password --disabled-login named
Beachten Sie, dass der Benutzer named sehr eingeschrnkt ist. Wenn Sie – aus welchen Grnden auch immer – ein weniger eingeschrnktes Setup haben mchten, benutzen Sie:
adduser --system --ingroup named named
Editieren Sie nun /etc/init.d/bind mit Ihrem Lieblingseditor und ndern Sie die Zeile, die mit
start-stop-daemon --start
anfngt zu[47]:
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
Alternativ dazu knnen Sie auch die Standardkonfigurationsdatei (bei BIND 8 /etc/default/bind) bearbeiten (und erstellen, falls sie nicht vorhanden ist) und Folgendes einfgen:
OPTIONS="-u named -g named"
ndern Sie die Rechte der Dateien, die von Bind verwendet werden, inklusive /etc/bind/rndc.key:
-rw-r-----    1 root     named          77 Jan  4 01:02 rndc.key
und den Ort, an dem bind seine PID-Datei erzeugt, z.B. indem Sie /var/run/named anstatt von /var/run verwenden:
$ mkdir /var/run/named
$ chown named.named /var/run/named
$ vi /etc/named.conf
[ ... ndern Sie die Konfigurationsdatei, um diesen neuen Pfad zu verwenden ...]
options { ...
        pid-file "/var/run/named/named.pid";
};
[ ... ]
Auerdem mssen Sie, um zu verhindern, dass irgendetwas als Root luft, im init.d-Skript die reload-Zeile von:
reload)
       /usr/sbin/ndc reload
in Folgendes ndern:
reload)
        $0 stop
        sleep 1
        $0 start
Hinweis: Abhngig von Ihrer Debian-Version mssen Sie auch die restart-Zeile ndern. Dies wurde in der Version 1:8.3.1-2 von Debians BIND-Paket repariert.
Alles, was Sie jetzt noch tun mssen, ist, bind mittels /etc/init.d/bind restart neu zu starten und dann Ihr Syslog auf zwei Eintrge wie die folgenden zu prfen:
Sep  4 15:11:08 nexus named[13439]: group = named
Sep  4 15:11:08 nexus named[13439]: user = named
Voil! Ihr named luft nicht mehr als Root. Wenn Sie mehr Informationen darber lesen wollen, warum BIND nicht als nicht-root Benutzer auf Debian-Systemen luft, sehen Sie bitte in der Fehlerdatenbank zu Bind nach, insbesondere http://bugs.debian.org/50013 und http://bugs.debian.org/132582, http://bugs.debian.org/53550, http://bugs.debian.org/52745 und http://bugs.debian.org/128129. Fhlen Sie sich ruhig dazu ermuntert, etwas zu den Fehlerbeschreibungen beizutragen, wenn Sie denken, ntzliche Informationen hinzufgen zu knnen.

5.7.3. Chroot-Gefngnis fr den Name-Server

Um die grtmgliche BIND-Sicherheit zu erreichen, mssen Sie nun ein Chroot-Gefngnis (siehe Abschnitt 5.10, „Allgemeine chroot- und suid-Paranoia“) um Ihren Daemon herum bauen. Es gibt einen einfachen Weg, dies zu erreichen: Die Option -t (siehe die Handbuchseite named(8) oder Seite 100 von http://www.nominum.com/content/documents/bind9arm.pdf). Dies wird Bind selbst in ein bestimmtes Verzeichnis chrooten lassen, ohne dass Sie ein eigenes Chroot-Gefngnis aufsetzen und sich Sorgen um dynamische Bibliotheken machen mssen. Die einzigen Dateien, die in diesem Chroot-Gefngnis bentigt werden, sind:
dev/null
etc/bind/       – sollte die named.conf und alle Server-Zonen enthalten
sbin/named-xfer – wenn Sie Namen transferieren
var/run/named/  – sollte die PID und den Cache des
               Name-Servers (falls es ihn gibt) enthalten.
                           Dieses Verzeichnis muss fr
                           den named-User schreibbar sein.
var/log/named   – Wenn Sie in eine Datei protokollieren, muss
                           dies fr den named-User schreibbar sein.
dev/log       – syslogd sollte hierauf hren, wenn
                  named so konfiguriert ist, dass er
                  darber protokolliert.
Damit Ihr Bind-Daemon vernnftig luft, braucht er bestimmte Zugriffsrechte auf die named-Dateien. Dies ist eine einfache Angelegenheit, da die Konfigurationsdateien immer in /etc/named/ liegen. Beachten Sie, dass er lediglich Lesezugriff bentigt, es sei denn, es handelt sich um einen sekundren oder zwischenspeichernden (Cache) Name-Server. Wenn dies der Fall ist, mssen Sie ihm Lese- und Schreibzugriff auf die notwendigen Zonen gewhren (damit Zonen-Transfers vom primren Server funktionieren).
Mehr Informationen ber das Chrooten von Bind finden Sie unter http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO.html (betrifft Bind 9) und http://www.tldp.org/HOWTO/Chroot-BIND8-HOWTO.html (betrifft Bind 8). Diese Dokumente sollten auch nach der Installation des Paketes doc-linux-text (Text-Version) oder doc-linux-html (HTML-Version) verfgbar sein. Ein anderes ntzliches Dokument ist http://web.archive.org/web/20011024064030/http://www.psionic.com/papers/dns/dns-linux.
Wenn Sie fr Bind ein komplettes Chroot-Gefngnis aufsetzen (d.h. Sie benutzen nicht nur -t), stellen Sie sicher, dass Sie die folgenden Dateien darin haben:[48]
dev/log – syslogd sollte hierauf hren
dev/null
etc/bind/named.conf 
etc/localtime
etc/group – mit einer einzigen Zeile: "named:x:GID:"
etc/ld.so.cache – mit ldconfig erstellt
lib/ld-2.3.6.so
lib/libc-2.3.6.so
lib/ld-linux.so.2 – symbolischer Link auf ld-2.3.6.so
lib/libc.so.6 – symbolischer Link auf libc-2.3.6.so
sbin/ldconfig – kann gelscht werden, nachdem Chroot aufgesetzt wurde
sbin/named-xfer – wenn Sie Namen transferieren
var/run/
Sorgen Sie auch dafr, dass syslogd auf $CHROOT/dev/log achtet, so dass der Name-Server seine syslog-Eintrge in das lokale System-Protokoll schreiben lassen kann.
Wenn Sie Probleme mit dynamischen Bibliotheken vermeiden wollen, knnen Sie Bind statisch kompilieren. Sie knnen hierzu apt-get mit der source Option benutzen. Es kann sogar die Pakete herunterladen, die Sie zum Kompilieren bentigen. Sie mssten etwas hnliches wie das Folgende tun:
$ apt-get source bind
# apt-get build-dep bind
$ cd bind-8.2.5-2
  (editieren Sie src/port/linux/Makefile, so dass CFLAGS
  die Option -static beinhaltet
$ dpkg-buildpackage -rfakeroot -uc -us
$ cd ..
# dpkg -i bind-8.2.5-2*deb
Nach der Installation werden Sie die Dateien in das Chroot-Gefngnis verschieben mssen.[49] Sie knnen die init.d-Skripte in /etc/init.d lassen, so dass das System automatisch den Name-Server starten wird, aber editieren Sie sie, indem Sie bei den start-stop-daemon-Aufrufen in diesen Skripten --chroot /location_of_chroot hinzufgen. Oder verwenden Sie fr BIND die Option -t, indem Sie sie in das OPTION-Argument in der Konfigurationsdatei /etc/default/bind (fr Version 8) oder /etc/default/bind9 (fr Version 9) eintragen.
Fr weitere Informationen wie man Chroot-Gefngnisse aufsetzt, siehe Abschnitt 5.10, „Allgemeine chroot- und suid-Paranoia“.


[47] Beachten Sie, dass Sie abhngig von Ihrer Bind-Version die Option -g nicht haben, hchstwahrscheinlich wenn Sie bind9 von Sarge (9.2.4) installiert haben.
[48] Diese Einstellungen wurden fr die neueren Verffentlichung von Bind noch nicht getestet.
[49] Es sei denn, Sie benutzen die instdir-Option, wenn Sie dpkg aufrufen, aber dann knnte das chroot-Gefngnis etwas komplizierter werden.