DNSSEC ¿ Que es ? Y como se configura en Bind9 en CentOS y RedHat 7.x
By: Date: febrero 25, 2019 Categories: Consultoria y Manuales

Segun el articulo de ADSL ZONE – Internet y sus usuarios necesitan DNSSEC, los ataques DNS no cesan

Es requerido que la mayoría de sitios empiece a usar DNSSEC como complemento al https, pero…

¿ Que es DNSSEC y como funciona ?

DNSSEC es (Domain Name System Security Extensions) es para el DNS algo similar a un parche que evita el DNS Spoofing

se añaden firmas digitales en las partes implicadas: dominio, en el registrar y en el servidor DNS. El navegador comprueba los servidores DNS, Si las firmas digitales públicas que recibe coinciden con las publicadas en el registrar, el navegador dará por válida la solicitud evitando la redirección a sitios maliciosos si las llaves no coinciden.

Pasos para configurar un dominio en BIND9 usando CentOS o RedHat 7.x

En la carpeta donde esta el archivo .host del dominio o zona a segurar, para este ejemplo se usara el dominio lastdragon.net

1 Generar llaves

dnssec-keygen -a RSASHA256 -b 4096 -n ZONE lastdragon.net
dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n ZONE lastdragon.net

El resultado sera 4 archivos adicoiales ( Similares a estos )

-rw-r–r– 1 root root 956 feb 25 18:48 Klastdragon.net.+007+02169.key
-rw——- 1 root root 3319 feb 25 18:48 Klastdragon.net.+007+02169.private
-rw-r–r– 1 root root 958 feb 25 18:48 Klastdragon.net.+007+24215.key
-rw——- 1 root root 3319 feb 25 18:48 Klastdragon.net.+007+24215.private

2 el contenido de los archivos key va al final del archivo lastdragon.net.hosts

Se puede inyectar el contenido con un cat, asi:

cat Klastdragon.net.+007+*.key >> lastdragon.net.hosts

3 Firmar la zona

dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha256sum | cut -b 1-16) -N INCREMENT -o lastdragon.net -t lastdragon.net.hosts

El resultado sera similar a:

Verifying the zone using the following algorithms: NSEC3RSASHA1.
Zone fully signed:
Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
lastdragon.net.hosts.signed
Signatures generated: 27
Signatures retained: 0
Signatures dropped: 0
Signatures successfully verified: 0
Signatures unsuccessfully verified: 0
Signing time in seconds: 0.168
Signatures per second: 159.821
Runtime in seconds: 0.179

4 named.conf

En las opciones del named.conf deben ir las siguientes 3 lineas:

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

ejemplo:

acl recursive-clients { 127.0.0.1; };

options {
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;

allow-recursion { recursive-clients; };
allow-query { any; };

/*
– If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
– If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
– If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file “/etc/named.iscdlv.key”;

managed-keys-directory “/var/named/dynamic”;

pid-file “/run/named/named.pid”;
session-keyfile “/run/named/session.key”;
};

En la zone debe usarse el archivo hosts firmado ejemplo:

zone “lastdragon.net” {
type master;
file “/var/named/lastdragon.net.hosts.signed”;
};

5 Ir al registrar para agregar registros DS, el hash puede ser encontrado el archivo

dsset-lastdragon.net.

La linea uno contendrá algo como:

lastdragon.net. IN DS 49405 8 1 696C71F1C410029346F309F45464F308A4F921AE

de esa linea:

key-tag es 49405 el algoritmo que se uso fue sha256 tipo de digest sha1

en el whois debe salir algo como:

DNSSEC: signedDelegation
DNSSEC DS Data: 49405 8 1 696C71F1C410029346F309F45464F308A4F921AE

4 thoughts on “DNSSEC ¿ Que es ? Y como se configura en Bind9 en CentOS y RedHat 7.x

  1. Google Chrome 73.0.3683.75 Linux

    Hola, creo que tu dominio no esta funcionando para las personas que su navegador/isp validan dnssec (yo uso Google DNS y sale el error que no existe el dominio lastdragon.net, tuve que cambiar el dns a otro proveedor).

    Tambien estoy aprendiendo a utilizar dnssec y segun entiendo las firmas tienen una expiracion y la zona debe de volver a firmarse antes de que expire . Parece que las firmas de tu dominio ya expiraron (http://dnsviz.net/d/lastdragon.net/dnssec/).

    No uso bind pero creo que en el comando dnssec-signzone le puedes agregar el argumento “-e +numero_de_segundos” para indicar cuando quieres que expire y el default es 30 dias.

    Saludos

    1. Google Chrome 73.0.3683.86 Windows NT

      Efectivamente, venció y olvide colocal un script que estuviera encargandose de mantener actualizado los registros…. como ahora mismo no tengo mucho tiempo tuve que desactivar dnssec hasta que tenga tiempo de atenderlo .. Gracias.

  2. Google Chrome 73.0.3683.86 Linux

    ¿Qué tan necesario es dnssec?, ahora que la mayoria de los sitios usan https si alguién llegara a atacar el dns de todas formas no podria hacerse pasar por el sitio sin el ceritificado correcto. Además si lograra cambiar los datos de contacto para generar un certificado entonces tambien podria cambiar la configuración de dnssec.

    Yo activé dnssec en uno de mis dominios solo para probar pero creo que es difícil de automatizar. Escribí un script para firmar periodicamente la zona pero las rotaciones de llave necesitan hacerse manualmente (o tendría que cambiarme a un ‘registrar’ que proporcione algún API para cambiar los registros DS).

    Veo que la mayoria de los sitios grandes (google.com, amazon.com, facebook.com, etc…) no usan dnssec, por eso la pregunta si realmente es necesario.

    1. Google Chrome 73.0.3683.86 Windows NT

      Muy necesario no es, solo es otra capa de seguridad, la cosa es que si el registro no esta firmado entonces no lo resuelve.

      Esto tiene mas utilidad en evitar los dns poison o que si alguien toma control de tu DNS o lo suplanta , esta persona no pueda redirigir a una IP diferente a la de tu servidor.

      En resumen, No resuelve si no es el DNS Server correcto.

Responder a Fernando Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *