|
Autor: Koji Chroot en BIND 8.X 1. Introducción Configuración probada en FreeBSD 4.3 + BIND 8.2.3 1. Introducción Este articulo va destinado hacia aquellas personas que usan
FreeBSD y que desean obtener algo mas de seguridad en su BIND. Hay varias posibilidades a la hora de configurar un entorno chroot para el BIND, este articulo explica una de ellas, concretamente la de como configurar un entorno chroot usando un BIND compilado estaticamente. No tengo ninguna preferencia por usar un BIND estático o dinamico, simplemente he escogido una de ellas para que todo sea mas corto y claro. Parto de la base del BIND que incorpora FreeBSD en su sistema base y de su configuración por defecto. Si has instalando posteriormente otro BIND mediante los ports o compilandolo a mano, la información que leas a continuación no puede ser del todo válida para ti. Antes de empezar asumo que:
Durante todo el documento me referiré a los archivos mediante su ruta absoluta para que no haya confusiones y quede todo mas claro. 2. chroot ? Podemos definir chroot como una llamada al sistema que permite
configurar un directorio como raíz ("/") del sistema de
ficheros para un proceso y sus hijos. Cuales son las ventajas de todo esto? Cuales son las desventajas de todo esto? 3. Preparativos antes de empezar Tan solo necesitaremos dos cosas para configurar el chroot en nuestro FreeBSD: los sources y decidir donde colocaremos los binarios y la configuración correspondiente de nuestro BIND. Cierto es, que FreeBSD trae ya el BIND en su sistema base compilado y listo para ser configurado, pero el que incorpora esta compilado dinamicamente, es por ello que deberemos de volver a compilarlo añadiendo algunas opciones de mas para que sea estático. Para instalar las fuentes (aseguraos antes de que no las tenéis instaladas mirando en /usr/src) tan solo tenemos que ejecutar /stand/sysinstall y ir al menú Configure / Distributions donde marcaremos la sección src. Para no complicar la cosa elegiremos la opción All y seleccionaremos el medio (normalmente CDROM). Esto instalará todas las fuentes. *NOTA PARA LOS QUE VAN ESCASOS EN MEGAS*: En principio no hace falta instalar todas las fuentes. Si vas justo de megas selecciona las secciones: contrib, libexec y usbin Esas secciones deberían bastar * Ahora que ya tenemos las fuentes necesarias elegiremos un directorio que será donde hagamos el chroot. Yo durante todo el articulo voy a usar como ejemplo el directorio /etc/namedb/chroot vosotros cambiadlo a donde mas os guste. En principio tanto da donde lo ubiquéis, así que una vez que lo tengáis decidido creamos los directorios donde estarán los binarios, configuración, etc. mkdir /etc/namedb/chroot mkdir /etc/namedb/chroot/etc/namedb/dominios Este ultimo directorio hace referencia al directorio o directorios donde tengo la configuración de todos mis dominios, esto está especificado en el /etc/namedb/named.conf para cada dominio: [...] 4. Compilando y configurando Para compilar el BIND estaticamente haremos lo siguiente: cd /usr/src/usr.sbin/named cd /usr/src/libexec/named-xfer Todo esto instalara los binarios named y named-xfer estaticamente en el directorio indicado y sin las paginas man. (ya las tenemos) Podéis hacer una prueba sencilla para ver si todo marcha correctamente ya que llegados a este punto tenemos el BIND que instala FreeBSD por defecto en /usr/sbin/named (dinámico) y el que nosotros hemos compilado que esta situado en /etc/namedb/chroot/usr/sbin/named (estático). Para confirmar todo esto podemos teclear lo siguiente: ldd /usr/sbin/named /usr/libexec/named-xfer (Depende de librerías) ldd /etc/namedb/chroot/usr/sbin/named /etc/namedb/chroot/usr/libexec/named-xfer
(No depende de librerías) Aun falta copiar todos los archivos de configuración del named y nuestros dominios, en mi caso hago lo siguiente: cd /etc/namedb Nuestro BIND correrá con el usuario y el grupo bind (menos privilegios que root, es decir, mayor seguridad). FreeBSD viene por defecto con el usuario y grupo creado, pero nunca esta de mas comprobarlo: grep bind /etc/passwd /etc/group Si los poseemos solo queda dar los privilegios necesarios: chown bind:bind /etc/namedb/chroot/etc/namedb/dominios named también necesita el device null y el archivo localtime para logear con la hora correcta si hiciéramos uso de syslogd: cd /etc/namedb/chroot/dev 5. Parcheando el ndc BIND trae unos scripts para facilitarnos la tarea del reiniciado del named (/usr/sbin/named.reload y /usr/sbin/named.restart). Estos scripts hacen uso del programa ndc el cual sirve para realizar muchas operaciones relacionadas con el named. Sin embargo este programa esta compilado para trabajar en los directorios /var/run /usr/sbin etc. Para ahorrarnos la pesada faena de ir editando archivos y compilar de nuevo el ndc haremos un pequeño parche para que podamos usarlo en nuestro directorio chroot. Primero renombramos el original ndc a ndc.real: mv /usr/sbin/ndc /usr/sbin/ndc.real Ahora crearemos el archivo /usr/sbin/ndc con el siguiente contenido: #!/bin/sh Solo queda darle permisos de ejecución: chmod 555 /usr/sbin/ndc 6. Ultimos ajustes Tenemos que modificar ligeramente nuestro /etc/rc.conf para que
empiece a funcionar nuestro named en chroot, así que TODAS las opciones
referentes named_enable="YES" Como veis estamos indicando que el programa named (el estático) esta
en /etc/namedb/chroot/usr/sbin/named
!named
Aseguraos de crear el archivo /var/log/named antes de hacer el reboot Y ahora ya por fin, lo mas fácil, reiniciar nuestra maquina :-) 7. Despedida Pues como digo siempre, cualquier duda, comentario o rectificación hacedmelo saber ;-) koji |