Pozos negros y frambuesas – Montando un servidor DNS y bloqueando anuncios a nivel de red con la Raspberry Pi

M.R 05/12/2018

¡Ya casi estamos en navidad! y si necesitas una buena razón para comprar o regalar una Raspberry Pi, aquí la tienes: este mes montamos nuestro propio servidor DNS. Es muy fácil y tiene que ver con la seguridad más de lo que pensamos.

Domain Name System

El sistema de nombres de dominio (Domain Name System o DNS, por sus siglas en inglés) asocia información variada con nombre de dominio asignado a cada uno de los participantes. Su función más importante es "traducir" nombres inteligibles para las personas en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.

 

La página https://howdns.works/ explica cómo funciona exactamente:

Con la publicación de RFC 8484, se ha vuelto a hablar sobre el sistema DNS. La IETF (Internet Engineering Task Force), una organización internacional de normalización, la cual tiene como objetivo el contribuir a la ingeniería de Internet, actuando en diversas áreas, como transporte, encaminamiento y seguridad, ha propuesto el uso de DNS sobre HTTPS o DoH, no sin causar cierta polémica, tal y como explica Sergio de los Santos en el blog de ElevenPaths:

"DNS es uno de los protocolos más antiguos de la red, y siempre ha sido un dolor de cabeza de la seguridad (desde el ataque cumpleaños, hasta el problema de Kaminsky). Todo en claro, con posibilidad de UDP (más fácil aún de inyectar paquetes falsos...). Un desastre incluso sin necesidad de ataques porque los servidores pueden estar controlados por gobiernos y así redirigir o bloquear peticiones. Y todo de forma absolutamente transparente y sin privacidad ni integridad."

Sin duda, una propuesta que tendrá un importante impacto en nuestras redes, pero en este artículo vamos a enfocar otro aspecto de la seguridad DNS:

Banners, Popups y Adblockers

Hay quien defiende que los anuncios son una manera de garantizar la sobrevivencia de la libertad de la prensa y de los medios online. Otros, prefieren que los banners engañosos y los histéricos popups desaparezcan por completo de nuestras pantallas. Lo cierto es que cualquier persona que no usa un Adblocker decente, se encuentra con frecuencia con páginas web cuyo abuso de anuncios y elementos molestos anima a apagar el ordenar y no volver a encenderlo.

 

Los Adblockers no son panacea, e incluso pueden aumentar la superficie de ataque. Al fin y al cabo, son plugins para navegadores, que inhiben la ejecución de scripts y las consultas http mediante listas de bloqueo. El autodenominado Adblocker gratuito nº 1 se ha convertido en un “marketplace automático en el que las marcas podrán inscribirse y usar Acceptable Ads Platform para vender y colocar su publicidad en la web”. Otros, como Ghostery han violado recientemente el nuevo Reglamento General de Protección de Datos (RGPD) de manera bastante embarazosa. En septiembre de este año, Sophos reportó que la empresa detrás de AdGuard, tuvo que resetear las contraseñas de todos sus usuarios tras sufrir un ataque. El hecho de depender de listas de filtros, que dada la naturaleza del software libre pueden ser editadas por cualquier persona, alberga otro peligro: La censura por motivos políticos.

Cookies y telemetría

Este mes la Oficina Federal Alemana para la Seguridad de la Información (BSI) publicó un análisis detallado de telemetría de Windows 10, una función incluida en Windows, mediante la cual se recopilan y envían todo tipo de datos personales e información, sobre el comportamiento del usuario a Microsoft. Un estudio parecido encargado por el  gobierno holandés, fue publicado este mes. A pesar de que según esta empresa el objetivo es identificar problemas y ayudar a solucionarlos, analizar la actividad y el comportamiento, y así mejorar la experiencia de usuario, en realidad no es complicado advertir en este comportamiento una clara invasión de nuestra privacidad.

…y si podríamos bloquear todas estas consultas a los servidores de rastreo, de redes anunciantes, páginas de phishing y alojamientos de malware?

 

Necesitamos un servidor DNS compatible con cualquier dispositivo y fácil de manejar. La configuración en los puntos finales debería ser mínima, no debería afectar al rendimiento y queremos bajar el consumo de ancho de banda.

Ingredientes y receta

Necesitamos una Raspberry Pi B 3+ (Funciona incluso en una Pi Zero W si cuenta con adaptador), una tarjeta MicroSD y un cable de red.

 

Entramos en la página oficial para descargarnos la imagen oficial de Raspbian Stretch Lite. Formateamos la tarjeta SD y quemamos la imagen usando Win32 Disk Imager. Simplemente debemos extraer el fichero zip que descargamos anteriormente, abrir Win32 Disk Imager como Administrador y seleccionar nuestra tarjeta microSD (cuidado aquí la podemos liar bastante. Chequeamos dos veces si hemos elegido el Device correcto):

Como nuestra Raspberry no tiene ni pantalla ni teclado, tenemos que habilitar un modo de conectar con ella. Por ello, habilitamos el protocolo ssh creando un fichero (con nombre ssh y sin extensión) en la partición boot:

Que quede así:

Expulsamos la tarjeta del ordenador, la introducimos en la Raspberry previamente conectada a la red y la encendemos. Con el programa MobaXterm (o cualquier otro software que permite realizar conexiones ssh desde Windows) no conectamos usando los siguientes parámetros (la contraseña por defecto es raspberry):

Si nuestro servidor DHCP suministra otro rango, podemos asignar una IP estática en el fichero de configuración /etc/dhcpd.conf:

eth0
static ip_address = 192.168.1.100 / 24
static routers = 192.168.1.1
static domain_name_servers = 192.168.1.1

Lo primero que deberíamos hacer después de conectar, es cambiar la contraseña siguiendo las instrucciones en pantalla y actualizar el sistema:

sudo apt-get update && sudo apt-get dist-upgrade --yes

La instalación de Pi-hole realmente es lo más sencillo de todo este proceso y consiste en una sola línea de comando:

wget -O basic-install.sh https://install.pi-hole.net && sudo bash basic-install.sh

 

(si prefieres ver lo que pegas en la consola siendo root, tienes el código fuente aquí: https://github.com/pi-hole/pi-hole#alternative-semi-automated-install-methods

Desde aquí, podemos hacer clic en el enlace de inicio de sesión y usar la contraseña de la interfaz web anotada anteriormente para iniciar sesión en el panel de control para ver aún más estadísticas y configuraciones para nuestro servidor Pi-hole.

Ahora tenemos dos opciones para la configuración nuestros dispositivos: Configurar cada dispositivo cambiando el servidor DNS en las preferencias de la conexión TCP/IP o cambiar la entrada DNS en el router.

 

Para ver un resultado inmediato y hacer una comparativa, cambiaremos las preferencias DNS de un solo equipo mientras el otro sigue con sus preferencias por defecto. Probamos surfear una página cualquiera y vemos las diferencias:

Sin Pi-hole: elcorreo.com, 298 requests, 3.8 MB

Sin Pi-hole: elcorreo.com, 298 requests, 3.8 MB

Con Pi-hole: elcorreo.com, 131 requests, 1.6 MB

Después de unas pocas pruebas rápidas, podemos ver estadísticas muy interesantes en el dashboard: 

Vista de reincidentes en un típico entorno empresarial donde se usa Windows de sistema operativo y toda la gama de productos Office:

Pi-hole avanzado

 

Si desea pasar a un DNS más seguro, recomiendo consultar este artículo para saber cómo ejecutar DNS-Over-HTTPS