Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Instalación y configuración de PowerDNS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2015 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Acerca de PowerDNS.

Es un servidor DNS autoritativo escrito en C++ y distribuido bajo los términos de la licencia GNU/GPLv2 creado pro la compañía danesa PowerDNS.com BV, con colaboración de la comunidad del software libre. Funciona en todos los sistemas operativos tipo POSIX como Linux™ y los derivados de Unix™. Incluye soporte para utilizar diversos motores de bases de datos, desde los simples archivos tipo BIND hasta bases de datos relacionales. Hay soporte para consultas recursivas a través de un programa separado conocido como pdns-recursor.

Es una muy robusta y versátil alternativa hacia BIND9.

URL: http://www.powerdns.com/.

Acerca de PowerAdmin.

Es una interfaz HTTP amistosa e intuitiva que sirve como herramienta de administración para PowerDNS. La interfaz incluye soporte para todas la funciones de PowerDNS, así como también todos los tipos de zonas y registros DNS, soporte para aprovisionamiento de servidores supermasters para los servidores esclavos, soporte completo para IPv6 y soporte para algunos idiomas —lamentablemente carece de soporte para español.

URL: http://www.poweradmin.org/.

Equipamiento lógico necesario.

Instalación a través de yum.

ALDOS y Fedora™ ya incluyen lo necesario para realizar la instalación del paquete necesario. Si utiliza CentOS o Red Hat™ Enterprise Linux, utilice el almacén YUM de Alcance Libre para servidores en producción, descargando el archivo http://www.alcancelibre.org/al/server/AL-Server.repo dentro del directorio /etc/yum.repos.d/:

wget -N http://www.alcancelibre.org/al/server/AL-Server.repo \
    -P /etc/yum.repos.d/

Examine el contenido del archivo /etc/yum.repos.d/AL-Server.repo:

vi /etc/yum.repos.d/AL-Server.repo

El contenido debe ser el siguiente:

[AL-Server]
name=AL Server para Enterprise Linux $releasever
mirrorlist=http://www.alcancelibre.org/al/el$releasever/al-server
gpgcheck=1
gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY

Salga del editor de texto.

Ejecute lo siguiente para instalar lo necesario:

yum -y install pdns pdns-backend-mysql poweradmin mod_ssl

Modificaciones necesarias en el muro cortafuegos.

Se requiere haber abierto previamente el puerto 53 (dns) por TCP y UDP.

Servicio iptables.

Ejecute lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

Ejecute lo siguiente para guardar los cambios:

service iptables save

O bien añada lo siguiente al archivo /etc/sysconfig/iptables:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

Reinicie el servicio para aplicar los cambios:

service iptables restart

Shorewall.

Edite el archivo /etc/shorewall/rules:

vi /etc/shorewall/rules

Las reglas corresponderían a algo similar a lo siguiente:


#ACTION	SOURCE	DEST	PROTO	DEST		SOURCE
#				PORT	PORT(S)
ACCEPT	all	fw	tcp	53
ACCEPT	all	fw	udp	53

Ejecute lo siguiente para aplicar los cambios:

service shorewall restart

Firewalld.

Ejecute lo siguiente para añadir de manera permanente la reglas necesarias:

firewall-cmd --permanent --zone=home --add-port=53/tcp
firewall-cmd --permanent --zone=home --add-port=53/udp

Reinicie el servicio para aplicar los cambios:

systemctl restart firewalld

Procedimientos.

Desactivar BIND.

En ALDOS, CentOS 5 y 6 y Red Hat™ Enterprise Linux 5 y 6.

Detenga el servicio named y elimine este del arranque del sistema en caso de que esté instalado BIND.

service named status && service named stop && chkconfig named off

En CentOS 7 y Red Hat™ Enterprise Linux 7.

Detenga el servicio named y elimine este del arranque del sistema en caso de que esté instalado BIND.

systemctl status named && systemctl stop named && systemctl disable named

Crear la base de datos.

Acceda hacia el intérprete de MySQL/MariaDB:

mysql -uroot -p

Cree una nueva base de datos con el nombre que mejor prefiera. En el ejemplo se utilizará powerdns.

create database powerdns;

Otorgue todos los permisos al usuario que prefiera con la contraseña que prefiera. En el ejemplo se utilizará al usuario powerdns y utilizará como contraseña la palabra contraseña.

grant all on powerdns.* to powerdns@localhost
identified by 'contraseña';

Salga del intérprete de MySQL/MariaDB:

exit;

Ejecute lo siguiente para crear los esquemas requeridos para PowerDNS en la nueva base de datos:

mysql -upowerdns -pcontraseña powerdns \
    < /usr/share/poweradmin/sql/poweradmin-mysql-db-structure.sql

Ejecute lo siguiente para crear los esquemas requeridos para PowerAdmin en la nueva base de datos:

mysql -upowerdns -pcontraseña powerdns \
    < /usr/share/poweradmin/sql/powerdns-mysql-db-structure.sql

Configuración de PowerDNS.

Edite el archivo /etc/pdns/pdns.conf:

vi /etc/pdns/pdns.conf

Añada lo siguiente al final del archivo donde deberá definir que se utilizará como motor MySQL/MariaDB, el nombre de la base de datos y las credenciales de ésta:

launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=contraseña
gmysql-dbname=powerdns

Añada debajo de lo anterior las siguientes opciones para definir que se funcionará como servidor maestro con master=yes, que se permiten las transferencias de zonas con disable-axfr=no y la dirección IP de un hipotético servidor esclavo donde se replicarán las zonas con allow-axfr-ips=192.168.70.25. En el siguiente ejemplo 192.168.70.25 corresponde a la dirección IP del servidor esclavo:

master=yes
disable-axfr=no
allow-axfr-ips=192.168.70.25

Si requiere especificar dos o más servidores esclavos, puede hacerlo definiendo como valor de allow-axfr-ips una lista separada por comas. Ejemplo:

allow-axfr-ips=192.168.70.25,192.168.70.26,192.168.70.27

Añada debajo de lo anterior la opción recursor usando como valor al dirección IP del servidor DNS que se utilizará para hacer consultas recursivas. Regularmente se utiliza otro servidor con pdns-recursor instalado y ejecutándose o bien cualquier otro servidor o dispositivo que se pueda utilizar como servidor DNS para consultas recursivas. En el siguiente ejempl0 se define 192.168.1.254 como dirección IP del servidor DNS para consultas recursivas.

recursor=192.168.1.254

Añada debajo de lo anterior la opción allow-recursion usando como valor una dirección IP o segmento de red o una lista separada por comas de todos los segmentos de red que tendrán permitido de hacer consultas recursivas a través de PowerDNS. Las conusltas serán redirigidas hacia el servidor que se haya definido en la opción recursor. En el siguiente ejemplo se define al anfitrión local y a la red 192.168.70.0/24:

allow-recursion=127.0.0.1/32,::1,192.168.70.0/25

Como medida de seguridad conviene ocultar la versión de PowerDNS. Añada debajo de lo anterior la siguiente línea:

version-string=powerdns

Lo anterior hará que se devuelva simplemente «Served by PowerDNS - http://www.powerdns.com» como respuesta al solicitar información al servidor.

Guarde los cambios y cierre el editor de texto.

Añada el servicio pdns al arranque del sistema.

Ejecute lo siguiente si utiliza ALDOS, CentOS 6 o Red Hat™ Enterprise Linux 6:

chkconfig pdns on

Ejecute lo siguiente si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7:

systemctl enable pdns

Inicie el servicio pdns.

Ejecute lo siguiente si utiliza ALDOS, CentOS 6 o Red Hat™ Enterprise Linux 6:

service pdns start

Ejecute lo siguiente si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7:

systemctl start pdns

Verifique que el servicio está funcionando y que se ha ocultado al versión de PowerDNS del servidor ejecutando lo siguiente:

dig chaos txt version.bind @127.0.0.1

La respuesta debe ser similar a la siguiente:

; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7.al.1.2 <<>> chaos txt version.bind @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18273
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;version.bind.			CH	TXT

;; ANSWER SECTION:
version.bind.		5	CH	TXT	"Served by PowerDNS - http://www.powerdns.com"

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: mar may 05 01:02:43 CDT 2015
;; MSG SIZE  rcvd: 98

Configuración de PowerAdmin.

Edite el archivo /etc/poweradmin/config.inc.php:

vi /etc/poweradmin/config.inc.php

Encontrará el siguiente contenido:

<?php

$db_host		= "localhost";
$db_user		= "powerdns";
$db_pass		= "";
$db_name		= "powerdns";
$db_type		= "mysql";

$iface_lang	     = "en_EN";

$dns_hostmaster	 = "hostmaster.example.com";
$dns_ns1		= "ns1.example.com";
$dns_ns2		= "ns2.example.com";

// Security settings
// This should be changed upon install
$session_key	    = 'p0w3r4dm1n';
$password_encryption    = 'md5';   // or md5salt

?>

Personalice el contenido para que ajuste el nombre y las credenciales de la base de datos; defina el administrador del servidor en la opción $dns_hostmaster; defina el nombre de anfitrión del servidor en la opción $dns_ns1; opcionalmente puede definir un servidor secundario en la opción $dns_ns2; configure una firma de sesión tan compleja como sea posible en la opción $session_key. Ejemplo:

<?php

$db_host		= "localhost";
$db_user		= "powerdns";
$db_pass		= "contraseña";
$db_name		= "powerdns";
$db_type		= "mysql";

$iface_lang	     = "en_EN";

$dns_hostmaster	 = "root.dominio.com";
$dns_ns1		= "ns1.dominio.com";
$dns_ns2		= "ns2.dominio.com";

// Security settings
// This should be changed upon install
$session_key	    = 'LbR98Urri1+3HPJUqwsX';
$password_encryption    = 'md5';   // or md5salt

?>

Edite el archivo /etc/httpd/conf.d/poweradmin.conf:

vi /etc/httpd/conf.d/poweradmin.conf

Encontrará el siguiente contenido. La configuración predeterminada permite el acceso a PowerAdmin sólo desde el anfitrión local como https://localhost/poweradmin/.

Alias /poweradmin /usr/share/poweradmin
<Directory /usr/share/poweradmin/>
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
    # Uncomment to allow only 192.168.0.0/16.
    # Require ip 192.168.0.0/16
    # Uncomment to allow everyone.
    # Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Uncomment to allow only 192.168.0.0/16.
    # Allow from 192.168.0.0/16
    # Uncomment to allow everyone.
    # Allow from all
  </IfModule>
    # http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
    php_value date.timezone America/Mexico_City
    # Force use of HTTPS.
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

Personalice la configuración. Por motivos de de seguridad defina un alias de directorio distinto al predeterminado; defina desde dónde se permitirá acceder a PowerAdmin; personalice la zona horaria para PHP.

Alias /adminpdns /usr/share/poweradmin
<Directory /usr/share/poweradmin/>
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
    # Uncomment to allow only 192.168.0.0/16.
    # Require ip 192.168.0.0/16
    # Uncomment to allow everyone.
    Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Uncomment to allow only 192.168.0.0/16.
    # Allow from 192.168.0.0/16
    # Uncomment to allow everyone.
    Allow from all
  </IfModule>
    # http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
    php_value date.timezone America/Mexico_City
    # Force use of HTTPS.
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

Reinicie el servicio httpd para que surtan efecto los cambios:

service httpd restart

Acceda con cualquier navegador hacia https://dominio.com/adminpdns/. El usuario predeterminado de PowerAdmin es admin y la contraseña es admin.

Pantalla de ingreso de PowerAdmin.
Pantalla de ingreso de PowerAdmin.

Por favor cambié la contraseña inmediatamente y defina una lo más compleja posible.

Cambio de contraseña en PowerAdmin.
Cambio de contraseña en PowerAdmin.

La interfaz de PowerAdmin es muy intuitiva y permite añadir fácilmente zonas y todos los tipos de registros para DNS.

Configuración de servidores esclavos.

Si va a configurar también un servidor esclavo, repita en éste todos los procedimientos anteriores, omitiendo las opciones master, disable-axfr y allow-axfr-ips.

Edite nuevamente el archivo /etc/pdns/pdns.conf:

vi /etc/pdns/pdns.conf

Localice la opción slave alrededor de la línea 343.

#################################
# slave Act as a slave
#
# slave=no

Descomente y cambie el valor no por yes:

#################################
# slave Act as a slave
#
slave=yes

Reinicie el servicio pdns en el servidor esclavo para aplicar los cambios:

service pdns restart

Puede crear zonas esclavas desde PowerAdmin y dejar que éstas sincronicen solas con el servidor maestro.

Agregar zona esclava en PowerAdmin.
Agregar zona esclava en PowerAdmin.

Se requiere que el nombre de anfitrión del servidor esclavo se defina con registro NS en cada zona en el servidor maestro.

Agregar registro NS en PowerAdmin.
Agregar registro NS en PowerAdmin.

También puede definir desde PowerAdmin un servidor como supermaster. Todas la zonas del servidor supermaster se copian y sincronizan automáticamente en el servidor secundario.

Agregar supermaster en PowerAdmin.
Agregar supermaster en PowerAdmin.

Migración de zonas de BIND hacia PowerDNS.

Puede migrar fácilmente las zonas existentes en BIND utilizando las herramienta zone2sql.

Copie el archivo /etc/named.conf al directorio de trabajo actual.

cp /etc/named.conf ./

Edite el archivo named.conf que acaba de crear:

vi ./named.conf

Elimine las vistas, la zona hint, las zonas del RFC 1912 —regularmente una inclusión del archivo /etc/named.rfc1912.zones— y la sección logging —si acaso ésta existiese. El archivo sólo debe contener la configuración básica y las configuración de las zonas a migrar. Ejemplo:

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";
	managed-keys-directory "/var/named/dynamic";
	forwarders { 8.8.8.8; 8.8.4.4; };
	forward first;
	version "BIND";
	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;
	bindkeys-file "/etc/named.iscdlv.key";
};

include "/etc/rndc.key";
include "/etc/named.root.key";
include "/etc/named.rfc1912.zones";

logging {
	channel default_debug {
		file "data/named.run";
		severity dynamic;
	};
	category lame-servers { null; };
};

controls {
	inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};

zone "dominio.com" {
	type master;
	file "dominio.com.zone";
	allow-update { key "rndc-key"; };
	allow-transfer { 192.168.1.25; };
};
zone "168.192.in-addr.arpa" {
	type master;
	file "168.192.in-addr.arpa.zone";
	allow-update { key "rndc-key"; };
	allow-transfer { 192.168.1.25; };
};

Terminado lo anterior, ejecute lo siguiente:

zone2sql --gmysql --named-conf=./named.conf --verbose > mis-zonas.sql

Lo anterior debe devolver una salida similar a la siguiente:

Domain dominio.com lives in file '/var/named/dominio.com.zone'
Domain 168.192.in-addr.arpa lives in file '/var/named/168.192.in-addr.arpa.zone'
100% done
2 domains were fully parsed, containing 53 records

Ejecute lo siguiente para importarlas en PowerDNS, asumiendo que la base de datos y el nombre del usuario de la misma se denominan powerdns:

mysql -upowerdns -pcontraseña powerdns < mis-zonas.sql

Es innecesario reiniciar el servicio pdns para que surtan efecto los cambios.

Haga consultas con host y dig hacia el anfitrión local para hacer las comprobaciones necesarias.

Configurar DNSSEC.

PowerDNS permite configurar fácilmente DNSSEC. Se requiere primero añadir una opción a la configuración y añadir los esquemas correspondientes a la base de datos.

Cargue primero los esquemas para MySQL™/MariaDB™:

mysql -upowerdns -pcontraseña powerdns \
    < /usr/share/doc/pdns-backend-mysql-*/dnssec.schema.mysql.sql

Edite nuevamente el archivo /etc/pdns/pdns.conf:

vi /etc/pdns/pdns.conf

Añada la opción gmysql-dnssec justo debajo de launch=gmysql:

launch=gmysql
gmysql-dnssec
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=contraseña
gmysql-dbname=powerdns
master=yes
disable-axfr=no
allow-axfr-ips=192.168.70.72
recursor=192.168.1.254
allow-recursion=127.0.0.1/32,::1,192.168.70.0/25,192.168.1.0/24
version-string=powerdns

Reinicie el servicio pdns para aplicar los cambios.

Ejecute lo siguiente si utiliza ALDOS, CentOS 6 o Red Hat™ Enterprise Linux 6:

service pdns restart

Ejecute lo siguiente si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7:

systemctl restart pdns

Ejecute lo siguiente para verificar que la zona a asegurar está libre de errores:

pdnssec check-zone dominio.com

La salida debe ser similar a la siguiente:

Checked 38 records of 'dominio.com', 0 errors, 0 warnings.

Ejecute lo siguiente para configurar DNSSEC en una zona existente:

pdnssec secure-zone dominio.com

La salida debe ser similar a la siguiente:

Securing zone with rsasha256 algorithm with default key size
Zone dominio.com secured

Re-calcule los campos correspondientes al ordenamiento de nombres y autenticación ejecutando lo siguiente:

pdnssec rectify-zone dominio.com

La salida debe ser similar a la siguiente:

Adding NSEC ordering information

Hasta aquí es el procedimiento básico utilizando NSEC.

Para incrementar la seguridad y evitar se exponga información innecesaria que es mostrada con NSEC e impedir la enumeración de zona —lo que se conoce como zone walking—, es conveniente convertir la zona de NSEC a NSEC3. Para este fin se requiere generar primero una cadena de texto aleatorio en hexadecimal:

head -c 1000 /dev/urandom | sha1sum | cut -b 1-16

La salida será una cadena de texto en hexadecimal similar al siguiente:

ffca99871f78fa91

Ejecute lo siguiente para establecer los parámetros NSEC3 utilizando la cadena de texto aleatorio hexadecimal:

pdnssec set-nsec3 dominio.com "1 0 1 ffca99871f78fa91" narrow 

La salida debe ser similar a la siguiente:

NSEC3 set, please rectify-zone if your backend needs it

Re-calcule nuevamente los campos correspondientes al ordenamiento de nombres y autenticación ejecutando lo siguiente:

pdnssec rectify-zone dominio.com

La salida debe ser similar a la siguiente:

Adding NSEC3 hashed ordering information for 'dominio.com'

Ejecute lo siguiente para ver el estado de la zona:

pdnssec show-zone dominio.com

La salida debe ser similar a la siguiente:

Zone is not presigned
Zone has hashed NSEC3 semantics, configuration: 1 0 1 ffca99871f78fa91
keys:
ID = 1 (KSK), tag = 24962, algo = 8, bits = 2048 Active: 1 ( RSASHA256 )
KSK DNSKEY = dominio.com IN DNSKEY 257 3 8 AwEAAZ1KJ79F5SSb+FTEAysfwjRbiHL6jbO
l0s950uxeyu3Fw50KbEoezZdF6RgDbEBoMN+oixCWNA/3dwnrynHx9128gt9xcF4xwqvwL4IEacKYYSS
6d5JpQCzbLYFmUpYvAWsbQiQ0mjaKlbcl0m+lygINW/++kfcYb3WwxGQ/be3t9ndT6iW6AKkQQ+DGvNX
FMC6YehIys0Awflyv8EWTFzfESl5LG0D5zIRtbIdFnV+RODxageuN2oRPTwIh5DB+84ue2wFKEwzhsfc
mbrEOp55cYJ8BMohj0rBCeMMX27rhvWqHXY1m5r1iLH3eA1VZ2uBVmLUNokRB5YRQqXyRbAc= ;
( RSASHA256 )
DS = dominio.com IN DS 24962 8 1 d739b130e46bd8c6ce7462ef8471e39c96c7a555 ;
( SHA1 digest )
DS = dominio.com IN DS 24962 8 2 b8be2443a48812a08d1a5d3fbc6933091ea59f59b09e8
8c74cba338a81613ace ; ( SHA256 digest )
DS = dominio.com IN DS 24962 8 4 72db7a2adb9717246a1d4ca6640d37ec660fcd1386fab
6e6c95675d41f016b1acbb0ec3ed1c3e4a465e55afd63604712 ; ( SHA-384 digest )

ID = 2 (ZSK), tag = 33865, algo = 8, bits = 1024 Active: 1 ( RSASHA256

Observe que la cadena de texto aleatorio en hexadecimal aparece entre los datos mostrados. PowerDNS se encargará de firmar automáticamente los nuevos registros que se vayan agregando a la zona, sin embargo necesitará ejecutar lo siguiente cada vez que realice cambios a fin realizar las rectificaciones correspondientes.

pdnssec rectify-zone dominio.com

Deshabilitar DNSSEC para una zona es tan sencillo como ejecutar algo similar al siguiente ejemplo:

pdnssec disable-dnssec dominio.com

Renovación de cadena aleatoria hexadecimal para NSEC3.

La enumeración de zona —que también se conoce como zone walking— es una técnica utilizada para encontrar todos registros RR —registros de Recurso— de una zona al realizar una consulta el registro NSEC de la zona. NSEC3 oculta esta información con código utilizando una cadena de texto aleatorio en hexadecimal, lo cual dificulta la enumeración de la zona, pero sin imposibilitar ésta. Un atacante con determinación puede recurrir a tablas arcoíris para romper esta codificación, sin embargo ésto puede demorar considerablemente aún con equipo de cómputo de gran poder. Para impedir que ésto ocurra es que se recomienda volver a computar la cadena de texto aleatorio en hexadecimal en intervalos regulares.

Ejecute lo siguiente para consultar el valor actual del registro NSEC3PARAM:

pdnssec show-zone dominio.com |grep NSEC3

La salida debe ser similar a la siguiente:

Zone has NARROW hashed NSEC3 semantics, configuration: 1 0 1 EC59FF1470068907

Ejecute lo siguiente para generar un nuevo archivo denominado /usr/sbin/pdnszonesigner.sh:

vi /usr/sbin/pdnszonesigner.sh

Añada el siguiente contenido:

#!/bin/bash

SALT=`head -c 1000 /dev/urandom | sha1sum | cut -b 1-16`

pdnssec set-nsec3 $1 "1 0 1 $SALT" narrow
pdnssec rectify-zone $1

Ejecute lo siguiente para hacer ejecutable el programa:

chmod +x /usr/sbin/pdnszonesigner.sh 

Pruebe que funciona ejecutando lo siguiente:

pdnszonesigner.sh dominio.com

Espere unos segundos y ejecute lo siguiente para consultar nuevamente el valor del registro NSEC3PARAM:

pdnssec show-zone dominio.com |grep NSEC3

La salida debe ser similar a la siguiente, dónde el valor del registro NSEC3PARAM es diferente al de hace unos instantes:

Zone has NARROW hashed NSEC3 semantics, configuration: 1 0 1 89473870BEECC103

Ejecute lo siguiente para añadir una tarea programada:

crontab -e

Añada el siguiente contenido:

0 0 */3 * * /usr/sbin/pdnszonesigner.sh dominio.com

Lo anterior hará que se cambie el valor del registro NSEC3PARAM y renovará las firmas cada 3 días, haciendo fútil cualquier intento de enumerar la zona —que también se conoce como zone walking— y romper el cifrado utilizando tablas arcoíris pues se carecerá del tiempo suficiente para lograrlo.

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 10/09/2015, 11:53|Hits: 6,111 Ver la versión para imprimir