5.7.1. Bind configuration to avoid misuse
Deberia restringir alguna de la información que es dada por el servidor DNS para clientes externos para que no pueda ser usado para acceder a información valiosa de su organización que usted no quiere dar. Esto incluye añadir las siguientes opciones: allow-transfer, allow-query, allow-recursive y version.Puede limitar en una sección global (para que se aplica a todas las zonas presentes) o sobre una base por zona. Esta información esta documentada en el paquete bind-doc, lea más sobre esto en /usr/share/doc/bind/html/index.html
una vez el paquete este instalado.
Imagine que su servidor está conectado a Internet y a su red interna (su IP interno es 192.168.1.2)(un servicio de multi domicilio basico). Usted no quiere dar ningun servicio para Internet y solo quiere permitir el lookups DNS desde su servidor interno. Usted podria restringir esto para incluirlo en:
/etc/bind/named.conf
:
options {
\t allow-query { 192.168.1/24; } ;
\t allow-transfer { none; } ;
allow-recursion { 192.168.1/24; } ;
\t listen-on { 192.168.1.2; } ;
\t forward { only; } ;
\t forwarders { A.B.C.D; } ;
};
La opciónlisten-onhace el bind DNS solo para la interfaz que tiene la dirección interna, pero si esta interfaz es la misma como la interfaz que se conecta a Internet (por ejemplo, si usted está usando NAT), las dudas seran solamente aceptadas si llegan desde su servidor interno. Si el sistema tiene multiples interfaces y el listen-on no está presente, solamente los usuarios internos podrian pregutar, ya que el puerto seria accesible para los atacantes exteriores, ellos podrian tratar de arrojarlo al servidor DNS (o explotar el amortiguador desbordandose agresivamente). Usted aun podría leer esto en 127.0.0.1 si usted no está dando el servicio DNS por ningun otro sistema que el de usted mismo.
El registro version.bind en la clase caos contiene la versión del proceso bind que se está ejecutando. Esta información es frecuentemente usada por dispositivos automaticos e individuos maliciosos que desean determinar si el bind de uno es vulnerable a un ataque específico. Para proporcionar falsa o negativa información en el registro de la version.bind, uno limita la probabilidad que un servidor pueda ser atacado basandonos en la versión publicitaria.Para suministrar su proia versión, utilice la
version dirigida de la siguiente manera:
options { ... various options here ...
version "Not available."; };
Cambiar el registro de la version.bind que no proporciona una protección actual en contra de los ataques, pero este debería ser considerado un salva guardia útil.
A sample
named.conf
configuration file might be the following:
acl internal {
127.0.0.1/32; // localhost
10.0.0.0/8; // internal
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; // internal
};
options {
directory "/var/cache/bind";
allow-query { internal; };
allow-recursion { internal; };
allow-transfer { none; };
};
// From here to the mysite.bogus zone
// is basically unmodified from the debian default
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";
};
// zones I added myself
zone "mysite.bogus" {
type master;
file "/etc/bind/named.mysite";
allow-query { any; };
allow-transfer { friendly; };
};
Please (again) check the Bug Tracking System regarding Bind, specifically
http://bugs.debian.org/94760. Feel free to contribute to the bug report if you think you can add useful information.
5.7.2. Changing BIND's user
Con respecto a limitar los privilegios de BIND, usted debe darse cuenta que si un usuario del non-root recorre Bind, Bind no podra detectar las nuevas interfaces automaticamente. Como por ejemplo si usted pone en un portatil una tarjeta PCMCIA. Cambie el archivo README Debian en el directorio nombrado (/usr/share/doc/bind/README.Debian
)para mas información acerca de este uso. Recientemente han habido muchos problemas de seguridad en lo que concierne a BIND, y por esto es necesario cambiar el usuario util cuando sea posible.
Notice, in any case, that this only applies to BIND version 8. In the Debian packages for BIND version 9 (since the 9.2.1-5 version, available since sarge) the bind user is created and used by setting the OPTIONS variable in /etc/default/bind9
. If you are using BIND version 9 and your name server daemon is not running as the bind user verify the settings on that file.
Para correr BIND bajo un usuario diferente, primero cree un usuario separado y un grupo para esto (no es buena idea usar,
not nobody o nogroup para todo sevicio que no corra como raiz). En este ejemplo, el usuario y el grupo
named
serán usados. Usted puede hacer esto entrando a:
addgroup named
adduser --system --home /home/named --no-create-home --ingroup named \
--disabled-password --disabled-login named
Notice that the user
named
will be quite restricted. If you want, for whatever reason, to have a less restrictive setup use:
adduser --system --ingroup named named
Ahora edite
/etc/init.d/bind
con su editor favorito y cambie la linea comenzando con:
start-stop-daemon --start
to
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
Or you can change (create it if it does not exit) the default configuration file (
/etc/default/bind
for BIND version 8) and introduce the following:
OPTIONS="-u named -g named"
Change the permissions of files that are used by Bind, including
/etc/bind/rndc.key
:
-rw-r----- 1 root named 77 Jan 4 01:02 rndc.key
and where bind creates its pidfile, using, for example,
/var/run/named
instead of
/var/run
:
$ mkdir /var/run/named
$ chown named.named /var/run/named
$ vi /etc/named.conf
[ ... update the configuration file to use this new location ...]
options { ...
pid-file "/var/run/named/named.pid";
};
[ ... ]
Also, in order to avoid running anything as root, change the
reload
line in the init.d script by substituting:
reload)
/usr/sbin/ndc reload
para:
reload)
$0 stop
sleep 1
$0 start
Note: Depending on your Debian version you might have to change the restart
line too. This was fixed in Debian's bind version 1:8.3.1-2
.
Todo lo que usted necesita hacer ahora es reiniciar Bind'/etc/init.d/bind, y luego cambiar su syslog por dos entradas como estas:
Sep 4 15:11:08 nexus named[13439]: group = named
Sep 4 15:11:08 nexus named[13439]: user = named
5.7.3. Chrooting the name server
To achieve maximum BIND security, now build a chroot jail (see
Sección 5.10, “Cambio general de directorio raíz y paranoia suid”) around your daemon. There is an easy way to do this: the
-t
option (see the
named(8) manual page or page 100 of
http://www.nominum.com/content/documents/bind9arm.pdf). This will make Bind chroot itself into the given directory without you needing to set up a chroot jail and worry about dynamic libraries. The only files that need to be in the chroot jail are:
dev/null
etc/bind/ - should hold named.conf and all the server zones
sbin/named-xfer - if you do name transfers
var/run/named/ - should hold the pid and the name server cache (if
any) this directory needs to be writable by named
user
var/log/named - if you set up logging to a file, needs to be writable
for the named user
dev/log - syslogd should be listening here if named is configured to
log through it
Para que su denmonio BIND trabeje apropiedamente, este necesita permiso en los archivos nombrados. Ésta es una tarea fácil ya que los archivos de configuarción estan siempre en /etc/named/
. Tenga en cuenta que esto solamente necesita acceso de lectura para los archivos de la zona, a menos que este sea un secundario o un servidor llamado cache. Si este es su caso usted tendra que dar permiso de lecto-escritura a las zonas necesarias (asi como la zona transferida desde los tarbajos del servidor primario).
If you are setting up a full chroot jail (i.e. not just
-t
) for Bind in Debian, make sure you have the following files in it
:
dev/log - syslogd should be listening here
dev/null
etc/bind/named.conf
etc/localtime
etc/group - with only a single line: "named:x:GID:"
etc/ld.so.cache - generated with ldconfig
lib/ld-2.1.3.so
lib/libc-2.1.3.so
lib/ld-linux.so.2 - symlinked to ld-2.1.3.so
lib/libc.so.6 - symlinked to libc-2.1.3.so
sbin/ldconfig - may be deleted after setting up the chroot
sbin/named-xfer - if you do name transfers
var/run/
And modify also syslogd
listen on $CHROOT/dev/log
so the named server can write syslog entries into the local system log.
If you want to avoid problems with dynamic libraries, you can compile bind statically. You can use
apt-get
for this, with the
source
option. It can even download the packages you need to properly compile it. You would need to do something similar to:
$ apt-get source bind
# apt-get build-dep bind
$ cd bind-8.2.5-2
(edit src/port/linux/Makefile so CFLAGS includes the '-static'
option)
$ dpkg-buildpackage -rfakeroot -uc -us
$ cd ..
# dpkg -i bind-8.2.5-2*deb
After installation, you will need to move around the files to the chroot jail
you can keep the
init.d
scripts in
/etc/init.d
so that the system will automatically start the name server, but edit them to add
--chroot /location_of_chroot
in the calls to
start-stop-daemon
in those scripts or use the
-t option for BIND by setting it in the OPTIONS argument at the
/etc/default/bind
(for version 8) or
/etc/default/bind9
(for version 9) configuration file.