Este tutorial le mostrará cómo proteger su privacidad de DNS en el escritorio Ubuntu 20.04/18.04 con DNS sobre TLS . Usaremos una herramienta llamada stubby para lograr eso Pero primero, déjame decirte por qué el DNS no es seguro.
vulnerabilidad de DNS
El DNS es inseguro porque, de forma predeterminada, las consultas de DNS no están cifradas, lo que puede ser explotado por entidades intermedias. El veneno de caché de DNS es uno de los abusos de DNS que utiliza ampliamente el Gran Cortafuegos de China (GFW) para censurar Internet chino. GFW verifica cada consulta de DNS que se envía a un servidor DNS fuera de China. Dado que el protocolo DNS de texto sin formato se basa en UDP, que es un protocolo sin conexión, GFW puede falsificar tanto la IP del cliente como la IP del servidor. Cuando GFW encuentra un nombre de dominio en su lista de bloqueo, cambia la respuesta de DNS. Por ejemplo, si un internauta chino desea visitar google.com, el Gran cortafuegos de China devuelve al sistema de resolución de DNS una dirección IP ubicada en China en lugar de la dirección IP real de Google. Luego, el sistema de resolución de DNS devuelve la dirección IP falsa a la computadora del usuario.
¿Qué es DNS sobre TLS? ¿Cómo protege su privacidad?
DNS sobre TLS significa que las consultas de DNS se envían a través de una conexión segura cifrada con TLS, la misma tecnología que cifra el tráfico HTTP, por lo que ningún tercero puede ver sus consultas de DNS. Junto con HTTPS y SNI (Indicación de nombre de servidor) cifrado, su historial de navegación está completamente protegido contra el espionaje de ISP.
Stubby es un solucionador de stubs de DNS de código abierto desarrollado por el equipo de getdns. Utiliza la biblioteca getdns. Un resolutor de código auxiliar es un pequeño cliente DNS en la computadora del usuario final que recibe solicitudes de DNS de aplicaciones como Firefox y las reenvía a un resolutor recursivo como 1.1.1.1 o 8.8.8.8. Stubby es especial porque admite DNS sobre TLS. De forma predeterminada, solo enviará solicitudes de DNS encriptadas. Hay otro solucionador de stubs de código abierto llamado cloudflared
que admite DNS sobre HTTPS pero stubby ya está en el repositorio de Ubuntu 20.04/18.04 y es muy fácil de usar.
Cómo instalar y usar Stubby en el escritorio Ubuntu 20.04/18.04
Stubby está en el repositorio de Ubuntu 20.04/18.04. Abra una ventana de terminal y ejecute el siguiente comando para instalarlo.
sudo apt install stubby
Esto instalará stubby y getdns
biblioteca. Una vez instalado, stubby se ejecuta en segundo plano. Compruebas su estado con:
systemctl status stubby
Stubby escucha en el puerto TCP y UDP 53 de localhost (127.0.0.1), como se puede ver al ejecutar este comando:
sudo netstat -lnptu | grep stubby
El solucionador de stub predeterminado proporcionado por systemd-resolved
escucha en el puerto TCP y UDP 53 de 127.0.0.53.
sudo netstat -lnptu | grep systemd-resolv
Nota:Si dnsmasq está escuchando en el puerto TCP 53 de 127.0.0.1, entonces Stubby escuchará solo en el puerto UDP 53 de 127.0.0.1.
El archivo de configuración principal es /etc/stubby/stubby.yml
. Normalmente, no es necesario realizar cambios a menos que desee utilizar otro solucionador recursivo o el suyo propio. Permítanme explicar algunas configuraciones predeterminadas. Puede abrir el archivo con:
sudo nano /etc/stubby/stubby.yml
La siguiente línea hace que stubby se ejecute como un resolutor stub en lugar de un resolutor recursivo completo, razón por la cual se llama stubby.
resolution_type: GETDNS_RESOLUTION_STUB
La siguiente configuración hace que las consultas de DNS de envío rechoncho estén cifradas con TLS. No enviará consultas en texto sin formato.
dns_transport_list: - GETDNS_TRANSPORT_TLS
La siguiente línea requiere un certificado TLS válido en la resolución recursiva remota.
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
Las siguientes líneas establecen las direcciones de escucha para el demonio rechoncho. De manera predeterminada, tanto IPv4 como IPv6 están habilitados.
listen_addresses: - 127.0.0.1 - 0::1
La siguiente línea crea resolutores recursivos de consultas rechonchas de forma rotatoria. Si se establece en 0
, Stubby usará cada servidor ascendente de forma secuencial hasta que deje de estar disponible y luego pasará a usar el siguiente.
round_robin_upstreams: 1
De manera predeterminada, hay 3 solucionadores recursivos habilitados en el archivo de configuración rechoncho. Están a cargo de desarrolladores rechonchos y admiten DNS sobre TLS. Puede ver la lista completa de servidores recomendados en el sitio web de privacidad de DNS.
dnsovertls.sinodun.com 145.100.185.15 dnsovertls1.sinodun.com 145.100.185.16 getdnsapi.net 185.49.141.37
Hay otros servidores DNS en los Additional Servers
sección que están deshabilitadas por defecto.
dns.quad9.net unicast.censurfridns.dk dnsovertls3.sinodun.com (supporting TLS1.2 and TLS 1.3) dnsovertls2.sinodun.com dns.cmrg.net dns.larsdebruin.net ......
También hay servidores DNS que escuchan en el puerto 443. Si el puerto 853 está bloqueado en su red, puede descomentarlos para usar estos servidores.
dnsovertls.sinodun.com dnsovertls1.sinodun.com dns.cmrg.net dns.neutopia.org
Ahora puede salir del editor de texto nano presionando Ctrl+X
.
Cambiando a Rechoncho
Editando el /etc/resolve.conf
Ya no se recomienda el archivo para cambiar el servidor de nombres. Siga las instrucciones a continuación para hacer que systemd-resolved
enviar consultas de DNS a stubby.
Escritorio GNOME
Haga clic en el icono de Network Manager en la esquina superior derecha de su escritorio. A continuación, seleccione la configuración con cable. (Si está utilizando Wi-Fi, seleccione la configuración de Wi-Fi).
Haz clic en el botón de engranaje.
Seleccione IPv4
pestaña, luego en la configuración de DNS, cambie Automatic
a APAGADO, lo que evitará que su sistema Ubuntu obtenga la dirección del servidor DNS de su enrutador. Introduce 127.0.0.1
en el campo DNS. Haz clic en Apply
botón para guardar los cambios.
Luego reinicie NetworkManager para que los cambios surtan efecto.
sudo systemctl restart NetworkManager
Una vez que se haya vuelto a conectar, puede ver que su sistema Ubuntu ahora usa 127.0.0.1 como servidor DNS en Details
pestaña.
Escritorio de la Unidad
Lectura recomendada:cómo instalar el entorno de escritorio de Unity en Ubuntu 20.04/18.04.
Haga clic en el ícono de Network Manager en la esquina superior derecha de su escritorio, luego haga clic en edit connections
.
Selecciona el nombre de tu conexión y haz clic en el ícono de ajustes.
Seleccione la pestaña de configuración de IPv4, cambie el método de Automatic(DHCP)
a Automatic(DHCP) addresses only
, lo que evitará que su sistema Ubuntu obtenga la dirección del servidor DNS de su enrutador. Luego especifique un servidor DNS (127.0.0.1). Stubby escucha en 127.0.0.1.
Guarde sus cambios. Luego reinicie NetworkManager para que los cambios surtan efecto.
sudo systemctl restart NetworkManager
Una vez que se haya vuelto a conectar, vuelva a hacer clic en el icono del Administrador de red y seleccione connection information
. Puede ver que su sistema Ubuntu ahora usa 127.0.0.1 como servidor DNS.
Cambiar el servidor DNS desde la línea de comandos
Puede usar el método a continuación para cambiar el servidor DNS siempre que su entorno de escritorio use NetworkManager.
Abra una ventana de terminal y vaya al directorio del perfil de conexiones de Network Manager.
cd /etc/NetworkManager/system-connections/
Luego enumere los nombres de conexión disponibles en su sistema.
ls
Como puede ver, tengo varias conexiones en mi sistema, una de las cuales es una conexión por cable. Algunas son conexiones inalámbricas y una es una conexión VPN. Debido a que mi computadora de escritorio está conectada a mi enrutador a través de un cable Ethernet, necesito editar el perfil de conexión por cable con el nano
editor de texto de línea de comando.
sudo nano 'Wired connection 1'
Si su computadora está conectada a través de Wi-Fi, entonces necesita editar el perfil de conexión inalámbrica. En este archivo, busque el [ipv4]
configuraciones De forma predeterminada, debería verse así:
[ipv4] dns-search= method=auto
Para hacer que su sistema use Stubby, cambie las configuraciones a lo siguiente.
[ipv4] dns=127.0.0.1; dns-search= ignore-auto-dns=true method=auto
Para guardar el archivo en el editor de texto Nano, presione Ctrl+O
, luego presione Entrar para confirmar. Presiona Ctrl+X
salir. Luego reinicie Network Manager para que los cambios surtan efecto.
sudo systemctl restart NetworkManager
Ahora puede verificar su servidor DNS actual ejecutando el siguiente comando:
systemd-resolve --status
Salida de muestra:
Link 2 (enp5s0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 127.0.0.1
Si 127.0.0.1 aparece como el servidor DNS, entonces su sistema está usando Stubby.
Ignorar la configuración de DNS proporcionada por el servidor DHCP
Si usa edición de servidor Ubuntu , puede configurar systemd para ignorar la configuración de DNS proporcionada por el servidor DHCP, para que su sistema no use accidentalmente el servidor DNS incorrecto.
Primero, verifique el estado de su interfaz de red.
networkctl status enp5s0
Le mostrará el archivo de red para esta interfaz. Edite este archivo de red.
sudo nano /run/systemd/network/10-netplan-enp5s0.network
Encuentra el [DHCP]
sección y agregue la siguiente línea.
UseDNS=false
Así:
[DHCP] RouteMetric=100 UseMTU=true UseDNS=false
Guarde y cierre el archivo. Luego reinicie systemd-netweorkd.service
para que el cambio surta efecto.
sudo systemctl restart systemd-networkd
Ejecute el siguiente comando para verificar los servidores DNS para cada interfaz de red. Si todo es correcto, no verá el servidor DNS proporcionado por su servidor DHCP.
resolvectl status
Los cambios en el archivo de red pueden anularse con una nueva actualización del paquete. Si su servidor usa netplan para administrar la conexión de red, también puede configurar netplan para ignorar la configuración de DHCP DNS.
sudo nano /etc/netplan/50-cloud-init.yaml
Agregue las siguientes dos líneas al archivo.
dhcp4-overrides: use-dns: no
Así:
network: ethernets: eth0: dhcp4: true dhcp4-overrides: use-dns: no optional: true set-name: eth0 nameservers: search: [ invalid ] addresses: 127.0.0.1 version: 2
Guarde y cierre el archivo. Luego aplique los cambios.
sudo netplan apply
Cómo verificar si su tráfico DNS está encriptado
Podemos usar WireShark para monitorear el tráfico de DNS. Instale WireShark desde el repositorio de Ubuntu 20.04/18.04.
sudo apt install wireshark
Si se le pregunta "¿Deberían los no superusuarios poder capturar paquetes?", responda Sí. Una vez que esté instalado, ejecute el siguiente comando para agregar su cuenta de usuario al grupo de wireshark para que pueda capturar paquetes.
sudo adduser your-username wireshark
Cierre sesión y vuelva a iniciarla para que los cambios surtan efecto. Luego abra WireShark desde el menú de su aplicación, seleccione su interfaz de red en WireShark. Por ejemplo, el nombre de mi interfaz Ethernet es enp5s0. Luego ingrese port 853
como filtro de captura. Esto hará que WireShark solo capture tráfico en el puerto 853, que es el puerto que utiliza DNS sobre TLS.
Haga clic en el botón en la esquina superior izquierda para comenzar a capturar. Después de eso, en la ventana de terminal, ejecute el siguiente comando para consultar el nombre de dominio usando dig
utilidad. Por ejemplo, puedo consultar el registro A de mi nombre de dominio.
dig A linuxbabe.com
Ahora puede ver el tráfico de DNS capturado en WireShark. Como puede ver, mi consulta de DNS se envió a 185.49.141.37
, 145.100.185.15
y 145.100.185.16
, que son los 3 solucionadores de DNS predeterminados definidos en el archivo de configuración stubby. Las conexiones se realizaron a través de TCP y se cifraron con TLS, que es lo que quiero.
Si las consultas de DNS se envían sin encriptación, la computadora contactará al servidor DNS en el puerto 53. Puede capturar paquetes nuevamente con port 53
como filtro de captura, pero no verá ningún paquete en WireShark, lo que significa que stubby está cifrando sus consultas de DNS.
Cómo agregar CloudFlare DNS a Stubby
Descubrí que hay una latencia alta (más de 200 ms) entre mi computadora y los 3 servidores DNS predeterminados, mientras que los servidores DNS de CloudFlare (1.1.1.1, 1.0.0.1) me dan una latencia muy baja (menos de 20 ms). CloudFlare también es compatible con DNS sobre TLS. Para agregar el servidor DNS de CloudFlare, edite el archivo de configuración stubby.
sudo nano /etc/stubby/stubby.yml
Desplácese hacia abajo hasta upstream_recursive_servers:
y agregue el siguiente texto sobre otros servidores DNS.
#CloudFlare servers - address_data: 1.1.1.1 tls_auth_name: "cloudflare-dns.com" - address_data: 1.0.0.1 tls_auth_name: "cloudflare-dns.com"
Luego busque la siguiente línea:
round_robin_upstreams: 1
Cambiar 1
a 0
. Esto hará que stubby siempre use el servidor DNS de CloudFlare. Si CloudFlare no está disponible, stubby usará otros servidores DNS. Guarde el archivo y reinicie stubby para que los cambios surtan efecto.
sudo systemctl restart stubby
Soporte de DNS sobre HTTPS
Stubby admitirá DNS sobre HTTPS en la versión 0.3. Ubuntu 20.10 se envía con la versión 0.2.6. Para verificar la versión de Stubby, ejecute
stubby -V