I-dns-linuxconf: (0.07) (potato) Servidor de nombres de dominio "bind" configurado como "CACHE DNS" con linuxconf, con restricción de acceso e interface y no corre como root Cambios: 0.06 9/9/00 0.07 21/10/00 +archivos /var/cache/bind/* al final SIMBOLOS UTILIZADOS: -> Se abre una ventana o se activa la pestaña (cambian los botones) # Comentarios [boton] Pulsar boton /pestaña\ Pulsar pestaña (x) opcion Activar opcion ( ) opcion Desactivar opcion Campo = valor Escribir valor en el Campo ANTES DE EMPEZAR: Cambiar idioma para tener en castellano gran parte de linuxconf (ver mi chuleta I-castellano) 1) Instalar el paquete bind 2) Ejecutar como root linuxconf 3) Activar el módulo DNS (para que aparezca en los menus) Linuxconf -> /Control\ -> [Configura archivos y sistemas] -> [Configura módulos de Linuxconf] (x) DNS - Configuración del servidor de nombres [Aceptar] [Salir] 4) Configurar el servidor DNS Linuxconf -> /Configuración\ -> [Configuración de red] -> /Tareas como servidor\ -> [DNS: Servidor de Nombres de Dominio] -> /Configuración\ [Configura dominios] #(dominios de los que este servidor DNS esta a cargo) [Agregar] Dominio = local [Aceptar] [Salir] [Mapeos IP inversos] #(las IP que gestiona este servidor DNS) [Agregar] Número de red = 192.168.0. [Aceptar] [Salir] [Forwarders] #(las IP de los servidores DNS del proveedor de internet) Dirección IP = Poner IP del DNS primario del proveedor 2ªlinea = Poner IP del DNS secundario del proveedor [Aceptar] [Características] ** (x) Sincrhonise DNS # ?No aparece en "man named.conf" (x) Sólo re-envio # Sólo preguntar a los forwarders, estaba a ( ) ( ) Sin recursión # (da más trabajo a clientes) ( ) No buscar glue # (da más trabajo a clientes) ( ) Iquery falsa # Simular consulta DNS obsoleta (x) Notificar # Notificar cambios a DNS esclavos [Aceptar] ** ¿podria ser que linuxconf rellena el DNS con la info de host? *POR CONFIRMAR* /Agrega/edita\ [Agrega/edita información de máquina por dominio] [local 2000/07/30] # El dominio que queremos llenar de maquinas [Agregar] Nombre de una maquina o un subdominio = nombre1.local # Nombre de la maquina a añadir a la zona DNS [Aceptar] /Dirs. IP\ 1ªlinea = 192.168.0.2 #Poner la IP correspondiente [Aceptar] #Repetir estos ultimos cuatro pasos para cada maquina a añadir # su IP a este servidor DNS [Cancelar] [Salir] [Salir] [Salir] 5) Activar el uso local del servidor DNS Linuxconf -> /Configuración\ -> [Configuración de red] -> /Tareas como cliente\ -> [DNS: Servidor de nombres] (x) DNS requerido para operación normal Servidor de nombres 1 = 127.0.0.1 #loopback de esta maquina dominio de búsqueda 1 (opc) = local #Nombre del dominio local [Aceptar] -> [Salir] 6) Listas de control de acceso Vamos a evitar que *TODO* el mundo haga lo que quiera con nuestro servidor DNS..., restringiendo su uso a nuestra red y nuestro servidor. Linuxconf -> /Configuración\ -> [Configuración de red] -> /Tareas como servidor\ -> [DNS: Servidor de Nombres de Dominio] -> /Seguridad\ Desde esta pestaña fijamos las opciones de seguridad de "options" en named.conf que valen para todos los dominios del DNS Primero creamos una Lista de Control de Acceso que incluya nuestra red (192.168.0.1/24) y nuestro loopback (127.0.0.1) que usaremos después para acceder al servidor DNS desde nuestra red y desde nuestro servidor, respectivamente [Configura Listas de control de acceso] -> # Ventana: Listas de control de acceso [Agregar] -> # Ventana: Nombre del Acl Nombre = miacl #poner nombre a la nueva ACL (Lista Control Acceso) [Aceptar] -> # Ventana: Lista de control de acceso miacl [Agregar] # Agrego elemento a la lista ACL miacl Red, máquina o ACL = 192.168.0.0 Tipo de red (/xx) = 24 [Aceptar] -> # Ventana: Lista de control de acceso miacl [Agregar] # Agrego elemento a la lista ACL miacl Red, máquina o ACL = 127.0.0.1 Tipo de red (/xx) = #(nada) [Aceptar] [Salir] [Salir] [Control de Acceso] ATENCION: Si no se especifica ninguna lista, se da permiso a *TODO* el mundo y todos los interfaces en el caso de listen-on, ¡incluido el de internet! -> # Ventana: Control de acceso general /Permitir transferencia a\ # (allow-transfer en "man named.conf") # Significa permitir "tranferencias de zona" a... 1ªlinea = miacl /Permitir consulta desde\ # (allow-query en "man named.conf") # Se refiere a permitir "preguntas ordinarias" 1ªlinea = miacl /Atiende en\ # (listen-on wn "man named.conf") # Se refiere a en que interfaces se debe estar activo el DNS # y seran los interfaces relacionados con las IP de nuestra ACL 1ªlinea = miacl [Aceptar] [Salir] 7) Un poco de seguridad, hacer que no corra como root: * Crear usuario y grupo nuevos no usados para nada mas ("named" 53): adduser --system --no-create-home --uid 53 --group named # --system hace que la shell sea /bin/false y deshabilita password # --group junto a --system hace que se cree un grupo como el usuario * Modificar el lanzamiento del demonio para usar ese usuario y grupo Editar: /etc/init.d/bind Cambiar: ---8<--- start) echo -n "Starting domain name service: named" start-stop-daemon --start --quiet --exec /usr/sbin/named --->8--- Por: ---8<--- start) echo -n "Starting domain name service: named" start-stop-daemon --start --quiet --exec /usr/sbin/named -- \ -unamed -gnamed --->8--- * ATENCION: Todos los archivos han quedado como propiedad de root, con lo que un atacante que consiga acceso con un exploit ganará acceso como usuario "named" y no podrá modificar la configuración de named. Si tu servidor DNS es un secundario entoces recibe transferencias de zona en ese caso deberás cambiar el propietario del directorio y los archivos en /etc/namedb para que named pueda escribir en ellos: --- ESTO NO LO HE PROBADO --- En el Chroot-BIND-HOWTO dice que /etc/namedb pero ese directorio no existe en Debian, supongo que es: # chown -R named:named /var/cache/bind De /var/run no hay que preocuparse, como named arranca como "root" escribe su pid _antes_ de hacer el chroot (comprobado). 8) Más seguridad: Si el servidor DNS va a ser victima de ataques (internet o internos) hay que hacerlo funcionar en una jaula "chroot" (mira mi chuleta teoria-chroot). A named se le puede pasar como parametro -t el directorio a "chroot" Pero al mover todos los archivos de bind al directorio chroot creo que ya no podremos hacer la configuración con linuxconf... (a lo mejor usando symlinks se puede...) PRUEBAS: 1) host nombre.local # Utiliza DNS para encontrar su IP 2) host 192.168.0.2 # Para obtener el nombre del host con esa IP 3) host -l local # Muestra listado de la zona "local" UN POCO DE TEORIA: "Forwarder" Servidores DNS a los que realizar todas las consultas (proveedor) "Secundarios" Servidores DNS de los que somos DNS secundario (copia seguridad) "zona" Las IP se agrupan y gestionan por zonas (dominios) *CREO* "transferencia de zona" *POR CONFIRMAR* Sospecho que es el volcado completo de toda la información de zona de nuestro DNS al DNS que nos lo pida ARCHIVOS: /etc/bind/* configuración e información de loopback /var/cache/bind/* información de IP y dominios (excepto loopback) MAS AYUDA: man named.conf man host Chroot-BIND-HOWTO (En tu distribución o en http://www.linuxdoc.org) Para esta configuración "/etc/bind/named.conf" queda como: ---8<--- acl miacl{ 192.168.0.0/24; 127.0.0.1; }; options { directory "/var/cache/bind"; forward only; forwarders{ XXX.XXX.XXX.XXX; #DNS_primario de proveedor XXX.XXX.XXX.XXX; #DNS_secundario de proveedor }; allow-transfer{ miacl; }; allow-query{ miacl; }; listen-on{ miacl; }; }; // reduce log verbosity on issues outside our control logging{ category lame-servers{ null; }; category cname{ null; }; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "local"{ type master; file "local"; }; zone "localhost"{ type master; file "/etc/bind/db.local"; }; zone "0.in-addr.arpa"{ type master; file "/etc/bind/db.0"; }; zone "127.in-addr.arpa"{ type master; file "/etc/bind/db.127"; }; zone "0.168.192.IN-ADDR.ARPA"{ type master; file "192.168.0."; }; zone "255.in-addr.arpa"{ type master; file "/etc/bind/db.255"; }; --->8--- /var/cache/bind/local (para convertir nombres a IP) # MX = servidor de correo # NS = servidor DNS ---8<--- @ IN SOA nombre1 hostmaster.nombre1. ( 2000090601 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) nombre1 IN A 192.168.0.1 nombre2 IN A 192.168.0.2 @ IN MX 5 nombre1 @ IN NS nombre1 --->8--- /var/cache/bind/192.168.0. (para covertir IP a nombres) ---8<--- @ IN SOA nombre1 hostmaster.nombre1. ( 2000073002 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ IN NS nombre1 1 IN PTR nombre1.local. 2 IN PTR nombre2.local. --->8---