Los nuevos protocolos DNS-over-TLS (DoT) y DNS-over-HTTPS (DoH) están disponibles para permitir la privacidad y seguridad del usuario final, dado que la mayoría de los clientes DNS utilizan protocolos UDP o TCP que son propensos a la escucha clandestina, vulnerables a los ataques Man-in-the-Middle (MitM) y que son frecuentemente abusados por los ISP en muchos países con censura de Internet.
Los proveedores de DNS públicos como Cloudflare, ya han desplegado estos protocolos y los navegadores web como Mozilla Firefox han incorporado soporte DoH. Sin embargo, la mayoría de los sistemas operativos y aplicaciones no los soportan, pero los usuarios finales pueden seguir utilizando estos protocolos en su ordenador
Ambos protocolos son estándares IETF y son igualmente seguros teniendo en cuenta el hecho de que el propio HTTPS funciona sobre TLS. Sin embargo, ambos protocolos tienen ideas ligeramente diferentes y hay muchos argumentos entre los ingenieros sobre la razón por la que el protocolo DoH existe en primer lugar cuando existe un protocolo DoT superior que implementa las directrices RFC 7766. El argumento de tener DoH es más político ya que las peticiones DNS sobre DoH se parecen al tráfico HTTPS normal sobre el puerto 443 y por lo tanto son difíciles de detener a diferencia de DoT corriendo en el puerto 853. Esto hace que el protocolo DoH sea deseable para los usuarios de países con censura en Internet.
En este post exploraremos la configuración de ambos protocolos para cualquier servidor DNS que ya esté ejecutando en su red. Ambos servicios requieren certificados SSL que pueden obtenerse gratuitamente utilizando la autoridad de certificación Let's Encrypt, en la que confían los principales navegadores web. Puede configurar Certbot para la renovación automática del certificado Let's Encrypt.
DNS-over-TLS (DoT)
El estándar DNS-over-TLS se especifica en el RFC 7858 que es muy sencillo de implementar. Esencialmente, el estándar especifica usar el soporte existente del protocolo DNS-over-TCP, que la mayoría de los servidores DNS ya tienen y añadirle TLS. El soporte DoT puede estar disponible como una característica adicional en su software de servidor DNS o puede utilizar el servidor web de Nginx para habilitarlo.
Nginx soporta la terminación SSL para TCP upstream que usaré para habilitar a DoT a usar con Technitium DNS Server. Estoy usando Ubuntu Server 18.04 LTS para esta configuración pero, debería ser capaz de hacer una configuración similar en cualquier distribución de Linux.
Primero instale el servidor web nginx:
sudo apt-get -y install nginx
Ahora todo lo que necesita para configurar DoT es copiar el siguiente bloque de configuración de stream en su archivo /etc/nginx/nginx.conf y guardar el certificado y los archivos de claves en la ruta dada como en la configuración. No olvide actualizar las direcciones IP del servidor DNS de entrada a sus servidores DNS existentes.
stream { upstream dns-servers { server 10.10.1.5:53; server 10.10.1.6:53; } server { listen 853 ssl; proxy_pass dns-servers; ssl_certificate /etc/nginx/ssl/dot-server.crt; ssl_certificate_key /etc/nginx/ssl/dot-server.key; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_handshake_timeout 10s; ssl_session_cache shared:SSL:20m; ssl_session_timeout 4h; } }
Una vez hecho esto, recargue el servidor web de nginx para terminar la configuración:
sudo service nginx reload
DNS-over-HTTPS (DoH)
El estándar DNS-over-HTTPS está especificado en el RFC 8484 y es un poco diferente de implementar ya que utiliza el protocolo HTTP. Las consultas DNS se envían en formato de cable como un método HTTP POST o como un parámetro HTTP GET con codificación base64. El uso del método GET permite el almacenamiento en caché de la respuesta, lo que puede no ser deseable si se tiene en cuenta que el protocolo DNS controla la caducidad utilizando valores TTL que pueden ser anulados por un servidor de caché basado en HTTP.