jueves, 24 de noviembre de 2011

Enjaulando el Bind

El motivo de enjaular un servicio, siempre tiene como propósito de crear un ambiente aislado del sistema, por motivos de seguridad.

El proceso lo realice en debian 9.0, pero con unos cuantos ajustes funciona para cualquier debian.

Los pasos para dicha tarea son simples, enjaularemos el servicio dentro de /var/lib/named:

1) Instalamos el servicio:
apt-get install bind9

2) Detenemos el servicio:
/etc/init.d/bind9 stop

3) Hacemos el cambio en /etc/default/bind9 y agregamos "-t /var/lib/named"
sed "s/-u\ bind/-u\ bind\ -t\ \/var\/lib\/named/g" /etc/default/bind9 > /tmp/bind.temp
mv /tmp/bind.temp /etc/default/bind9
chmod 644 /etc/default/bind9
sed "s|OPTIONS=\"\"|OPTIONS=\"-u\ bind\ -t\ /var/lib/named\"|g" /etc/init.d/bind9 > /tmp/bind.temp
mv /tmp/bind.temp /etc/init.d/bind9
chmod 755 /etc/init.d/bind9


4) Creamos los directorios para el ambiente enjaulado
mkdir -p /var/lib/named/etc/ /var/lib/named/dev /var/lib/named/var/cache/bind/{data,local,master,slave} /var/lib/named/var/{log} /var/lib/named/run/

5) Procedemos a mover al ambiente enjaulado y hacemos vinculos al sistema para que siempre halla acceso desde el sistema anfitrion a los recursos del bind:
mv /var/log/named /var/lib/named/var/log/
ln -s /var/lib/named/var/log/named /var/log/named
mv /etc/bind /var/lib/named/etc/
ln -s /var/lib/named/etc/bind /etc/bind
mv /run/named /var/lib/named/run/named
ln -s /var/lib/named/run/named /run/named

6) Hacemos ajustes personalizados, en mi caso usaré en el ejemplo los ficheros de etc/bind y los mando a var/cache/bind/local, asi que cambio todo "/etc/bind" por "local", perfectamente se puede omitir este paso e ir al paso (8) o ajustarlo a su necesidad recuerde que si desea usar otro nombre diferente a "local", por ejemplo "folder", debe de crear la carpeta en el lugar del "var/cache/bind" enjaulado el comando sería "mkdir /var/lib/named/var/cache/bind/folder":
sed "s|/etc/bind/zones.rfc1918|local/zones.rfc1918|g" /etc/bind/named.conf.local > /tmp/bind.temp
mv /tmp/bind.temp /etc/bind/named.conf.local
sed "s/\/etc\/bind/local/g" /var/lib/named/etc/bind/named.conf.default-zones > /tmp/bind.temp
mv /tmp/bind.temp /var/lib/named/etc/bind/named.conf.default-zones
sed "s/\/etc\/bind/local/g" /var/lib/named/etc/bind/zones.rfc1918 > /tmp/bind.temp
mv /tmp/bind.temp /var/lib/named/etc/bind/zones.rfc1918
chmod 644 /var/lib/named/etc/bind/named.conf.local
chmod 644 /var/lib/named/etc/bind/named.conf.default-zones
chmod 644 /var/lib/named/etc/bind/zones.rfc1918

7) Ahora movemos todo a la carpeta "local", si se omite el paso 6, omitir tambien este paso
mv /var/lib/named/etc/bind/zones.rfc1918 /var/lib/named/var/cache/bind/local
mv /var/lib/named/etc/bind/db.* /var/lib/named/var/cache/bind/local

8) Movemos los archivos restantes en /var/cache/bind/ borramos y creamos enlace:
mv /var/cache/bind/managed-keys.bind /var/lib/named/var/cache/bind/
mv /var/cache/bind/managed-keys.bind.jnl /var/lib/named/var/cache/bind/
rm -rf /var/cache/bind
ln -s /var/lib/named/var/cache/bind /var/cache/bind

9) Creamos nodos:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/zero c 1 5
mknod /var/lib/named/dev/random c 1 8
mknod /var/lib/named/dev/urandom c 1 9
chmod 666 /var/lib/named/dev/*

10) Damos los permisos correspondientes:
chown -R bind:bind /var/lib/named/etc/bind
chown -R bind:bind /var/lib/named/var/*

11) Creamos el localtime:
cp /usr/share/zoneinfo/America/Managua /var/lib/named/etc/localtime

12) Iniciamos el servicio:
/etc/init.d/bind9 start