Inicio > Linux > Configurar un DNS Primario y Secundario con TSIG

Configurar un DNS Primario y Secundario con TSIG


Antes de comenzar a explicar como vamos a configurar un buen servidor de DNS quisiera que por favor estudiaran un poco sobre algunos conceptos, es importante informar que este post será muy largo ya que colocaré hasta los archivos de configuración de cada cosa que necesitaremos implementar en nuestro servidor.

Quisiera por favor para las personas que nunca han configurado un servidor de DNS y tampoco saben lo que son los DNS leyeramos lo siguiente:

Entendiendo los conceptos antes mensionados procedemos a instalar los servicios que nos permitiran instalar el servicio de DNS primario y secundario(s). Debemos tomar en cuenta que no importa el S.O. que queramos instalar en nuestro servidor en mi caso uso Ubuntu Server o en su defecto Debian cualquier de los dos te podrá servir, mosca no quiero decir que son estos los únicos S.O. que podremos usar para configurar nuestro servidor de DNS para nada hay otras alternativas que si bien nos agrada y nos cubres las espectativas podremos usar sin ningún problema pero en este caso usaremos un S.O. Libre que use los paquetes “.deb”.

Nosotros para empezar a configurar el servidor de DNS les recomiendo que usen BIND9 es una de las alternativas mas solidas que podemos usar para esta oportunidad. Para instalar el paquete BIND9 es muy sencillo solo tenemos que ejcutar de modo root lo siguiente:

aptitude install bind9

Ya con eso tenemos instalado lo que necesitamos el paquete de BIND9 que nos permitira configurar nuestro servidor de DNS con el dominio que tengamos en nuestras manos para controlar nuestros servicios.

Ahora lo que debemos hacer es modificar lo siguientes archivos en el Servidor Primario:

Archivo named.conf.options

acl red_interna {
192.168.0.23; # IP que permitiremos para la transferencia de nuestras zonas.
};

options {
directory “/var/cache/bind”;
auth-nxdomain no;    # conform to RFC1035
recursion yes;
listen-on-v6 { any; };

//query-sources address * port 53;
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0’s placeholder.

// forwarders {
//      0.0.0.0;
// };
};

Archivo named.conf.local

zone “dominio.com” {
type master;
file “/etc/bind/db.dominio.com”;
};

zone “0.168.192.in-addr.arpa”{
type master;
file “/etc/bind/db.192.168.0″;
};

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include “/etc/bind/zones.rfc1918″;

Debemos tomar en cuenta lo siguiente: para obtener nuestro hostname necesitamos ejecutar en consola sin las comillas OJO “hostname”

Archivo db.dominio.com

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     hostname.dominio.com. root.hostname.dominio.com. (
2008120218         ; Serial
604800               ; Refresh
86400                 ; Retry
2419200              ; Expire
604800 )            ; Negative Cache TTL
;
; Servidores de nombres
@       IN      NS      dns1.dominio.com.
;
; Host Ordenados por IP
IN      A       192.168.0.1
;
; Intercambiadores
IN      MX      10      mail.dominio.com.
;
; CNAME
mail.   IN      CNAME   mail.dominio.com.

Archivo db.192.168.0

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     hostname.dominio.com. root.hostname.dominio.com. (
2008120204         ; Serial
604800         ; Refresh
86400         ; Retry
2419200         ; Expire
604800 )       ; Negative Cache TTL
;
IN      NS               dns1.dominio.com.
1     IN      PTR     dns1.dominio.com.
1     IN      PTR     mail.dominio.com.

Con eso podremos decir que tenemos configurado nuestro servidor de DNS primario. Para conocer si nuestro servidor está respondiendo correctamente tenemos que hacer lo siguiente:

dig dominio.com @localhost

Si queremos saber si está funcionando el recursivo ejecutamos lo siguiente:

dig -x 192.168.0.1 @localhost

Ahora procederemos a configurar el servidor de DNS secundario modificando lo siguientes archivos:

Archivo named.conf.options

options {
directory “/var/cache/bind”;
auth-nxdomain no;    # conform to RFC1035
recursion yes;
listen-on-v6 { any; };
allow-recursion { localhost; red_interna; };

//query-sources address * port 53;
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0’s placeholder.

// forwarders {
//      0.0.0.0;
// };
};

Archivo named.conf.local

//acl secundarios_externos {
//       192.168.0/23;
//};

zone “dominio.com” {
type slave;
file “db.dominio.com”;
masters { 192.168.0.1; }; #Colocaremos la IP del servidor primario
};

zone “0.168.192.in-addr.arpa”{
type slave;
file “db.192.168.0″;
masters { 192.168.0.1; };
};

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include “/etc/bind/zones.rfc1918″;

Para confirmar de que el servidor de DNS secundario ha obtenido las zonas del servidor primario podemos averiguar de dos forma:

La primera es ver averiguar si en la carpeta /var/cache/bind/ están las zonas db.dominio.com y db.192.168.0, la otra forma es ir al log de SYSLOG ejecutando desde la consola tail /var/log/syslog nos debería mostrar el siguiente resultado:

# tail /var/log/syslog
Dic 11 14:28:04 secundario named[2273]: zone test.ve/IN: Transfer started.
Dic 11 14:28:04 secundario named[2273]: transfer of ‘test.ve/IN’ from 192.168.100.100#53: connected using 192.168.100.200#4166
Dic 11 14:28:04 secundario named[2273]: zone test.ve/IN: transferred serial 3: TSIG ‘primario.test.ve’
Dic 11 14:28:04 secundario named[2273]: transfer of ‘test.ve/IN’ from 192.168.100.100#53: end of transfer

Ya con eso podemos decir que tenemos configurado nuestro servidor de DNS Primario y Secundario pero como hay siempre un bendito “PERO” de esta manera no estamos aplicando las políticas de seguridad necesaria estaríamos buscando que de alguna u otra forma los BENDITOS CRACKER jodan nuestros grandes trabajos para evitar esas rabietas debemos aplicar lo siguiente tanto en el servidor de DNS primario como en el secundario:

Antes de empezar a configurar debemos saber que nosotros lo que vamos aplicar ahorita es la configuración de Transferencia de Zonas autentificadas con TSIG.

Con la versión de bind 9 se puede utilizar TSIG para que de forma criptográfica se pueda autentificar y verificar los datos de una zona. TSIG usa una llave secreta compartida para autentificar los datos de la transferencia de zona. Para el uso de TSIG se requiere que el maestro y el esclavo estén configurados para usar la llave para firmar la comunicación entre ellos.

Para que la trasferencia de zona con TSIG se pueda llevar a cabo es necesario que el maestro y los esclavos estén sincronizados en tiempo para ello instalamos el paquete ntpdate y sincronizamos los relojes de los servidores (maestro y esclavo)

aptitude install ntpdate -y && ntpdate 0.debian.pool.ntp.org

En el servidor maestro ejecutar los siguientes comandos para generar el BASH para la transferencia segura de zona

#cd /etc/bind/

#dnssec-keygen -a HMAC-MD5 -b 128 -n HOST dominio.com

Kservertest.com.ve.+157+03749

En el servidor maestro podemos observar el bash generado mediante el comando

Kservertest.com.ve.+157+03749.*
::::::::::::::
Kservertest.com.ve.+157+03749.key
::::::::::::::
servertest.com.ve. IN KEY 512 3 157 AuZBtgJcwg8=
::::::::::::::
Kservertest.com.ve.+157+03749.private
::::::::::::::
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: AuZBtgJcwg8=

Ahora se debe colocar la el hash generado anteriormente en el maestro y en el esclavo en el archivo /etc/bind/named.conf.local de la siguiente forma:

Key primario.dominio.com. {
algorithm hmac-md5;
secret “AuZBtgJcwg8=”;
};

En el esclavo se debe colocar la IP del servidor maestro en el archivo /etc/bind/named.conf.local

server IP_DEL_MAESTRO {
keys {primario.dominio.com.; };
};

En el servidor maestro se debe editar cada una de las zonas y colocarles la línea que permite la transferencia allow-transfer { key primario.test.ve. ; }; en el archivo /etc/bind/named.conf.local

zone “dominio.com” {
type master;
file “/etc/bind/master.dominio.com”;
allow-transfer { key primario.dominio.com. ;  };
};

En el servidor esclavo editar cada una de las zonas y colocarles la línea que permite la transferencia masters { IP_DEL_MAESTRO; }; en el archivo /etc/bind/named.conf.local

zone “dominio.com”  {
type slave;
file “db.dominio.com”;
masters { IP_DEL_MAESTRO; };
};

Los archivos en el archivo /etc/bind/named.conf.local deben quedar de una forma similar a la que se muestra a continuación

MAESTRO

Key primario.dominio.com. {
algorithm hmac-md5;
secret “AuZBtgJcwg8=”;
};

zone “dominio.com” {
type master;
file “/etc/bind/master.dominio.com”;
allow-transfer { key primario.dominio.com. ;  };
};

zone “100.168.192.IN-ADDR.ARPA” {
type master;
file “/etc/bind/192.168.100.rev”;
allow-transfer { key primario.dominio.com. ;  };
};

ESCLAVO

Key primario.dominio.com. {
algorithm hmac-md5;
secret “AuZBtgJcwg8=”;
};

server IP_DEL_MAESTRO {
keys {primario.dominio.com.; };
};

zone “dominio.com”  {
type slave;
file “db.dominio.com”;
masters { IP_DEL_MAESTRO; };
};

zone “100.168.192.IN-ADDR.ARPA ”  {
type slave;
file “db.100.168.192.IN-ADDR.ARPA “;
masters { IP_DEL_MAESTRO; };
};

Una vez realizado los pasos anteriores procedemos a reiniciar el servicio en el servidor maestro y en esclavo mediante el siguiente comando

# rndc reload

Si la transferencia de zona se realiza de forma satisfactoria en el esclavo debemos observar las siguientes lineas en el archivo de logs

# tail /var/log/syslog
Nov 29 14:28:04 secundario named[2273]: zone dominio.com/IN: Transfer started.
Nov 29 14:28:04 secundario named[2273]: transfer of ‘dominio.com/IN’ from 192.168.100.100#53: connected using 192.168.100.200#4166
Nov 29 14:28:04 secundario named[2273]: zone dominio.com/IN: transferred serial 3: TSIG ‘primario.test.ve’
Nov 29 14:28:04 secundario named[2273]: transfer of ‘dominio.com/IN’ from 192.168.100.100#53: end of transfer

Si la trasferencia es exitosa en el esclavo también se puede observar las tablas que han sido trasferidas en el directorio /var/cache/bind

# ls /var/cache/bind/
db.192.168.100.rev  db.master.dominio.com

DNS Y CORTAFUEGOS

Servidor de DNS sin intercambio de zona

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT  -o lo -j ACCEPT

# iptables -A OUTPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A OUTPUT -p udp -d 0.0.0.0/0  –destination-port 53 -j ACCEPT

# iptables -A INPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A INPUT -p udp -s 0.0.0.0/0 –destination-port 53 -j ACCEPT

# iptables  -P INPUT DROP
# iptables  -P OUTPUT DROP
# iptables  -P FORWARD DROP

Servidor DNS Maestro

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT  -o lo -j ACCEPT

# iptables -A OUTPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A OUTPUT -p udp -d 0.0.0.0/0  –destination-port 53 -j ACCEPT

#// Para permitir la descarga de los paquetes de mirror
# iptables -A OUTPUT -p udp -d mirror.debian.org  –destination-port 80 -j ACCEPT

# iptables -A INPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A INPUT -p tcp -s 0.0.0.0/0 –destination-port 53 -m state –state NEW -j ACCEPT
# iptables -A INPUT -p udp -s 0.0.0.0/0 –destination-port 53 -j ACCEPT

# //Para permitir conexiones por ssh
# iptables -A INPUT -p udp -s 0.0.0.0/0 –destination-port 22 -j ACCEPT

# iptables  -P INPUT DROP
# iptables  -P OUTPUT DROP
# iptables  -P FORWARD DROP

Servidor DNS Maestro/Esclavo

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT  -o lo -j ACCEPT

# iptables -A OUTPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A OUTPUT -p tcp -d 0.0.0.0/0  –destination-port 53 -m state –state NEW  -j ACCEPT
# iptables -A OUTPUT -p udp -d 0.0.0.0/0  –destination-port 53 -j ACCEPT

# iptables -A INPUT -p ALL  -m state –state ESTABLISHED,RELATED      -j ACCEPT
# iptables -A INPUT -p tcp -s 0.0.0.0/0 –destination-port 53 -m state –state NEW -j ACCEPT
# iptables -A INPUT -p udp -s 0.0.0.0/0 –destination-port 53 -j ACCEPT

# iptables  -P INPUT DROP
# iptables  -P OUTPUT DROP
# iptables  -P FORWARD DROP

About these ads
Categorías:Linux
  1. Ciamur
    20 septiembre 2012 en 1:18 pm

    ¿El DNS Secundario hace falta que este en otro equipo o se puede poner en el mismo que configure mi DNS Primario?

  1. No trackbacks yet.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 993 seguidores

A %d blogueros les gusta esto: