Bloqueo de publicidad (y malware) para cualquier dispositivo en vuestro hogar

Bloqueo de publicidad (y malware) para cualquier dispositivo en vuestro hogar

Actualización 10 Febrero 2017: Existe un nuevo artículo sobre el tema aquí expuesto, con un proceso mucho más sencillo para habilitar el bloqueo de publicidad y malware en casa. Revisar por acá, por favor.

A continuación se deja el artículo antiguo como referencia.

A.k.a. «Adblock para cualquier dispositivo en vuestro hogar»

Desde hace años suelo comprar mis routers con una idea primordial en mente: meterles Linux.

Después de vitrinear en linea y averiguar bien si tienen soporte para firmwares alternativos, y luego de comprado, el ritual es el mismo: flashear Linux en el router. DD-WRT, Open-WRT, Gargoyle o TomatoUSB. El que sea compatible con el modelo comprado.

flash-all-the-things

Los firmwares alternativos, como los mencionados anteriormente, tienen características muy buenas (y mejores) versus el software restringido que normalmente traen de fábrica. Pueden, entre otras cosas, limitar ancho de banda entre usuarios, obtener un mejor manejo del ancho de banda con un buen QoS, servicio de impresora compartida, un NAS compartido, quotas de navegación diaria o mensual, estadísticas de consumo de ancho de banda, conexión directa a VPN, restricciones de acceso para clientes específicos en base a ips/hosts/layer7 y hasta un servidor web o de torrent si quieres. Claro, dependiendo del modelo de router; esto porque la cpu y memoria disponible varía en c/u y por lo mismo no todos pueden ofrecer el set completo de características que entregan estos firmwares basados en Linux.

No les voy a explicar el detalle de todo lo extra que ofrecen. Pueden buscar ustedes mismos si sienten curiosidad.

Vengo a mostrarles un uso que le doy al router de turno en casa hace mucho tiempo (años) y que había olvidado compartir con ustedes antes: el bloqueo de publicidad (y malware) en Internet para todo dispositivo conectado a la red en el hogar.

Uso un router Asus RT-N66U aquí en casa (hace un par de años ya; router muy estable y fiel). Es potente, tiene un buen procesador, suficiente memoria y almacenamiento. Es dual band (WiFi 2.4ghz y 5ghz). Dos puertos USB para meter lo que quieras; impresora, un modem de datos, o un HDD como NAS para que lo puedas consumir desde diferentes PC o con un media player (para películas y otros) como Kodi en un Nexus Player. Muy cómodo y versátil.

Si tienes Linux en el router, abres la posibilidad de hacer todo lo que haces con un servidor/computador tradicional gracias a esto. Por lo mismo, esta guía podría servir para routers corriendo DD-WRT, Open-WRT o Gargoyle. En mi caso, eso si, este Asus Dark Knight RT-N66U está corriendo Tomato by Shibby.

Esta guía también funciona para un Asus RT-AC66U. Probado (marzo 2016). Luego de instalar Tomato Shibby en un RT-AC66U, el proceso de configurar el bloqueo de publicidad es exactamente el mismo.

¿Cómo instalar Tomato en un Asus RT-N66U y en un Asus RT-AC66U?

Tampoco lo voy a explicar. No en detalle. La verdad es que hay guías muy buenas y un video completo del proceso. Puedes seguir esta guía escrita en un gist o bien puedes mirar este video donde repasan todo el proceso, en detalle. Acá tienen otro video más. Para los RT-AC66U, vean este video. En realidad, el proceso es el mismo para los N66U y el AC66U, simplemente cambia el archivo que van a flashear, la versión de Tomato Shibby, por razones obvias.

Ya tienes Tomato corriendo en tu router (el que sea). ¿Como aplicar Adblock a nivel del router?.

Es muy sencillo. Hay diferentes implementaciones (scripts) que pueden correr y hacer un trabajo similar. Personalmente he decantado por este: ALL-U-NEED Ad Blocking.

Primero, abre la interfaz web del router, generalmente en http://192.168.1.1/

Ve a “Administration” y luego a “Scripts”. Ahí abre la pestaña “WAN Up”.

Pega el script de All-U-Need Ad Blocking dentro del cuadro, guarda los cambios (abajo) y reinicia el router.

RT-N66U-adblock

Dejo un respaldo del script acá, por si acaso:

sleep 10

ADB="/tmp/ADBLOCK.sh"
{
cat <<'ENDF' >$ADB
#!/bin/sh

OPTIMISE="Y"
GETS="1 2 3 4"
TRIM_BEGIN=3
S1="http://pgl.yoyo.org/as/serverlist.php?hostformat=nohtml"  #44K
S2="http://mirror1.malwaredomains.com/files/justdomains"    #189K
S3="http://www.malwaredomainlist.com/hostslist/hosts.txt"   #97K
S4="http://winhelp2002.mvps.org/hosts.txt"              #620K
S5="http://hosts-file.net/hphosts-partial.asp"              #460K
S6="http://hostsfile.mine.nu/Hosts"                         #2641K
S7="http://support.it-mate.co.uk/downloads/hosts.txt"       #3851K

USEWHITELIST="Y" # N/Y/R for remote
WURL="http://example.com/whitelist.txt"
WHITE="intel.com"
BLACK=""

USEPIXELSERV="N"
PXL_IP=192.168.1.2
PXL_EXE="/tmp/pixelserv"
PXL_URL="http://example.com/pixelserv"

UPLOAD="N"
FTP_SERVER="example.com"
FTP_USER=""
FTP_PASS=""
FTP_PORT=21
FTP_PATH="/gen"

ADD_CONF="N"
USEHOSTS="N"
ROUTER="Y"

NIP="0.0.0.0"

ENDF
}

UPDATE="Y"
AUP() {
if [[ "$UPDATE" == "Y" ]] ; then
if [[ "$(cru l | grep AdUpd | cut -d '#' -f2)" != "AdUpd" ]] ; then
cru a AdUpd "0 4 * * * $ADB"
fi
fi
}

#### DO NOT EDIT BELOW ####

b64="openssl enc -base64 -d"
[[ "$(echo WQ==|$b64)" != "Y" ]] && b64="b64" 

b64(){
awk 'BEGIN{b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"}
{for(i=1;i<=length($0);i++){c=index(b64,substr($0,i,1));if(c--)
for(b=0;b<6;b++){o=o*2+int(c/32);c=(c*2)%64;if(++obc==8){if(o)
{printf"%c",o}else{system("echo -en \"\\0\"")}obc=o=0}}}}';}

{
cat <<'ENDF'| $b64 |gunzip >>$ADB
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
AocMj8rT81cK0v4De76CG9wPAAA=
ENDF
}

chmod 775 $ADB
$ADB
AUP

Eso es todo. En serio.

Ahora disfruta de una navegación sin publicidad en cualquier dispositivo conectado a Internet a través de tu router, incluidos media-centers, smart-tv, fonos/tablets con Android e iOS, computadores, notebooks, consolas, etc.

Vamos al detalle, por si quieren manejar en detalle el bloqueo.

¿Cómo configurar el script?

OPTIMISE=”Y”
Acepta los valores Y o N. Yes y No. Al activarlo (Y) el script removerá los hosts duplicados desde las fuentes, antes de aplicar el bloqueo. Útil por si cargan múltiples fuentes de archivos hosts con dominios a bloquear.

GETS=”1 2 3 4 5 6″
Le indica que fuentes debe leer. Son números separados por espacios. Las fuentes las definimos luego.

TRIM_BEGIN=3
Cada fuente debe tener un formato específico para este script. El formato es similar a esto:

dominio1.com
dominio2.com
otrodominio.cl
masdominios.xyz
etc.io

Sin embargo hay archivos hosts pre-hechos en linea, pero que vienen en el formato:

127.0.0.1 dominio1.com
127.0.0.1 dominio2.com
0.0.0.0 otrodominio.cl
0.0.0.0 masdominios.xyz
0.0.0.0 etc.io

Ese formato permite aplicar ese listado directamente en el archivo hosts de un computador (C:\Windows\System32\drivers\etc\hosts o /etc/hosts en Linux y OSX). Pero nosotros no queremos configurar cada equipo por si solo (ni hablar de equipos que no sean computadores, sin este manejo de hosts nativo). Este formato que no sirve para este script.

Ahí entra en juego la configuración TRIM_BEGIN. Al definir TRIM_BEGIN=3, le dices que desde la fuente 3 hasta el final, debe adaptar el formato de los hosts y dejar solo los dominios a bloquear.

Entonces, por ejemplo, esta lista no necesita formato para este script, pero esta otra lista si necesita formato. Simple. Debes tenerlo en mente para colocar primero las fuentes con el formato necesario, y finalmente las fuentes que requieran adaptar el formato.

S1 al SX
Las fuentes se definen como S (source) seguido de un número. Así:

S1="http://dominio.tld/dominios.txt"
S2="http://dominio.tld/hosts.txt"

Pueden colocar cuantas fuentes quieran. Pero cuidado: cada fuente, mientras más grande es, más pesado vuelve el proceso de este script, más memoria se consume al momento de procesar (al iniciar el router) y el script puede terminar simplemente no ejecutándose. Prueben con dos o tres fuentes. No necesitan definir decenas. Escojan un archivo de fuentes (recuerden si necesita aplicársele TRIM_BEGIN o no) y quédense con el.

Pueden crear su propio archivo de hosts y subirlo a algún lado, y decirle al script que lo descargue. Así lo hago acá cuando encuentro publicidad que se salta los hosts que ya tengo aplicados.

USEWHITELIST
Este set de settings (seguido de USEWHITELIST) les permite especificar urls que no quieren bloquear. En caso que alguna lista de bloqueo cargada antes bloquee un servicio que ustedes necesitan (porque trabajan en publicidad o porque les gusta ver algún banner), pueden añadirlo en la lista blanca.

Un dominio por linea, tanto en el WHITE como en el BLACK (si, pueden añadir dominios en la lista negra igual).

Y para si, N para no, R para remoto. Si usan remoto, deben añadir una url en WURL donde suban una lista de dominios (uno por linea) que desean que nunca sean bloqueados, no importando si están en una lista de dominios de las fuentes anteriores.

USEPIXELSERV
Les permite servir un pixel vacío en vez de bloquear la conexión completa. Algunas aplicaciones o publicidad en general se molestan cuando no pueden llegar a la publicidad que estaban pidiendo, y en vez de dejar de molestar, joroban al servidor volviendo a pedir una y otra vez la publicidad, sin detenerse. Esto puede resultar en un consumo de cpu excesivo (de nuevo, en el caso de algunas Apps, por ejemplo). Algunas web en cambio te bloquean si tu les bloqueas la publicidad. Al servir un pixel transparente, el bloqueo continúa funcionando (mostrando ese pixel transparente) y el app o sitio web nunca tiene idea la publicidad ha sido bloqueada.

Revisen como configurar Pixelserv en el tema en linksysinfo.

No es obligatorio. No se calienten la cabeza.

UPLOAD
Permite subir el mix de dominios bloqueados, ya procesados, a un servidor. Luego pueden decirle al router que use solo ese resultado como archivo para buscar dominios a bloquear. Es más rápido de aplicar al iniciar el router, pero no necesario. Sin optimización, dicen, el script puede demorar hasta 6 minutos en terminar de procesar los hosts para iniciar el bloqueo de dominios una vez que lo reinician (sobre todo si usan DNS Cache Poisoning, luego más sobre esto); el router sigue funcionando antes de esos 6 minutos, el bloqueo de dominios es el que demora en hacer efecto. Si no les molesta ese delay, no hay problema con ignorar esta configuración.

Yo no la uso.

Revisen como configurarlo en el tema en linksysinfo.

ADD_CONF
Lean sobre eso en linksysinfo. No les daré detalles acá.

Normalmente no necesitan cambiar esto.

UPDATE
Auto-actualiza desde las fuentes el bloqueo de dominios, todos los días a las 4 de la madrugada. Recomendado dejarlo en Y.

USEHOSTS
Acepta Y para si, N para no.

Al usar Y, el router bloqueará los dominios como si fuera un archivo hosts. Al usar N, el router usará la técnica DNS Cache Poisoning para bloquear los dominios.

La diferencia es sencilla. El bloqueo por hosts es limitado al dominio en que se usa y no todos sus subdominios, en cambio el DNS Cache Poisoning afecta a todo el dominio y sus subdominios.

Por ejemplo, si tienen bloqueado dominio.com y ad1.dominio.com, con el método de hosts, un nuevo subdominio ad2.dominio.com no sería bloqueado. En cambio, con el método DNS Cache Poisoning, basta con bloquear dominio.com para que automáticamente ad1.dominio.com, ad2.dominio.com, ad3.dominio.com y cualquier adloquesea.dominio.com sea bloqueado también.

Pueden probar a ver cual les acomoda más. El creador del script recomienda dejar esta configuración en N para usar DNS Cache Poisoning. El método con el Hosts, en Y, es más rápido de inicializar para el router. Ustedes ven. Prueben y decidan.

Ojo que luego de reiniciado el router, los equipos en casa se demoran en “ver” la configuración. Una vez conectados, entre que el router se toma los 6 minutos para configurar el Adblock y que los equipos actualicen su caché de dns por las nuevas propagadas por dnsmasq con el poisoning o por el bloqueo de hosts (dependiendo del método que estén usando), pueden pasar varios minutos antes que efectivamente noten la publicidad bloqueada. Esperen unos 15 minutos después de reiniciado el router antes de probar y decidir si el bloqueo está funcionando o no. Paciencia.

¿Cómo probar el bloqueo?

Ingresen (con su navegador) a cualquier sitio repleto de publicidad; desactiven Adblock Plus o uBlock Origin antes, claro. Cualquier sitio lleno de avisos, como algún diario nacional o magazine tecnológico. Es fácil darse cuenta si está funcionando o no. O entren a este test de adblock; si no ven publicidad de Google dentro (Adsense) vuestro bloqueo desde el router está funcionando correctamente.

Este bloqueo de publicidad es mucho más rápido y amigable con la ram de sus equipos que el que ofrece Adblock o uBlock. Es el router el que bloquea después de todo.

Ahora cualquier dispositivo conectado a la red de vuestra casa estará inoculado de publicidad, sin necesidad de hacer nada en el dispositivo en particular. Con una fuente de hosts decente y con actualizaciones, ni si quiera prerolls en YouTube en vuestros móviles o en un Chromecast.

Ah, este bloqueo también los puede salvar de muchos dominios de malware conocidos, gracias a listas como esta.

¿Qué tal? 🙂

Show Comments Hide Comments