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
:
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
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).
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:
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.
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.