sábado, 2 de abril de 2011

Implementar DNSSEC sobre Linux. Solo resolver. Version 2

Este documento es una actualizacion de "Implementar DNSSEC sobre Linux. Solo resolver" fechado 25 de Noviembre de 2009.


Historia:
Luego de la firma de los root servers a mediados del año 2010 (ver http://www.root-dnssec.org/) habilitar DNSSEC en el resolver es mucho más sencillo debido a que solo hay que validar "." dentro de nuestro archivo de configuración. Anteriormente necesitabamos trust anchors para cada dominio (TLD, ccTLD, zonas) que queriamos validar. Este trabajo era insoportable de manejar y no era escalable.
Ahora con la firma de los root-servers todo es más sencillo.

Software:
Bind 9.7.2-P3
Linux Mandriva 2010.2

Procedimiento:
1) Primero es necesario colocar el trust-anchor para el root zone. Para obtenerlo:

#dig . dnssec

La salida anterior te entregará varios resultados:

root@localhost ~]# dig . dnskey
;; Truncated, retrying in TCP mode.

; <<>> DiG 9.7.2-P3 <<>> . dnskey
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60029
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;. IN DNSKEY

;; ANSWER SECTION:
. 136089 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
. 136089 IN DNSKEY 256 3 8 AwEAAb5gVAzK59YHDxf/DnswfO1RmbRZ6W16JfhFecfI+EUHRXPWlXDi 47t2FHaKyMMEROapL5SZ8HiCzl05lORZGGdN37WY7fkv55rs+kwHdVRS rQdl81fUnEspt67IIgaj3SrGyZqgzyixNk/8oT3yEfKDycTeJy4chKPt 0JegWrjL
. 136089 IN DNSKEY 256 3 8 AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69HfUyuGBbRN0+Hu TOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjEg58sRr4ZQ6Iu6b1xTBKgc193 zUARk4mmQ/PPGxn7Cn5VEGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlF rXDW3tjt

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Apr 2 10:00:49 2011
;; MSG SIZE rcvd: 586

Nos interesa la sección correspondiente a la 257, este valor corresponde a SEP o Secure Entry Point, también conocido como los KSK o Key Signing Key. Como dato adicional el valor 256 corresponde a los Zone Signing Key (ZSK)

2) Del resultado anterior, vamos a copiar la llave (despues del "257 3 8") y vamos a crear la siguiente seccion managed-keys dentro de named.conf. Quedando así:

managed-keys {
"." initial-key 257 3 8 "AwEAAagAIKlVZrp...";
};

3) Dentro de la sección de opciones de named.conf vamos a colocar lo siguiente:

dnssec-enable yes;
dnssec-validation yes;

Reinicia BIND y debe estar funcionando.

Revisar que DNSSEC este operando bien:

La mejor opción es utilizar el famoso comando dig y chequear el flag AD en al respuesta. Por ejemplo:

RESPUESTA SIN DNSSEC

[root@localhost etc]# dig +dnssec registro.br

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43771
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5



RESPUESTA CON DNSSEC

[root@localhost etc]# dig +dnssec registro.br

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1063
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 1



Nótese que que el flag ad no esta encendido en la respuesta sin DNSSEC

Otra forma más sencilla de revisar si esta funcionando DNSSEC es entrar a la página: "DNSSEC test tool" de SIDN y correr la prueba.


Más información:

- El concepto de managed-keys fue introducido en Bind 9.7 en adelante. Ver
- Articulo excelente que indica como hacer que Bind se convierta en un DNSSEC validator

No hay comentarios:

Publicar un comentario

¿Algo adicional que quieras mencionar? ¿Algun consejo?, ¿truco? Gracias!

Una mejora práctica en el Transporte DNS sobre UDP en IPv6

Por Hugo Salgado y Alejandro Acosta Introducción y planteamiento del problema En el presente documento queremos discutir sobre un draft (bor...