domingo, 27 de noviembre de 2016

Shell script en Bash para eliminar publicidad en cualquier navegador

El objetivo es bloquear la mayor cantidad de publicidad posible cuando navegamos por Internet y hacerlo sin usar plugins o add-ons en cualquier navegador.

La idea es añadir sitios de publicidad a /etc/hosts indicando que se encuentra en 127.0.0.1. Cuando visitamos un sitio web en el navegador, el navegador buscará la publicidad en nuestro ordenador, no la encontrará y no mostrará nada. Necesitamos una web {que nos facilite una  base de datos actualizada. Por ejemplo: http://winhelp2002.mvps.org/


Crearemos un shell script en lenguaje Bash en un archivo de texto llamado update_hosts.sh que fue creado por el blogger de http://blog.desdelinux.net/


#!/bin/bash

wget http://winhelp2002.mvps.org/hosts.txt -O /tmp/hosts.txt

ls /etc/hosts.old &> /dev/null
if [ $? -ne 0 ]; then
cp /etc/hosts /etc/hosts.old
fi

echo "127.0.0.1       localhost.localdomain   localhost" >> /etc/hosts
echo "::1             localhost.localdomain   localhost" >> /etc/hosts
cat /tmp/hosts.txt >> /etc/hosts

rm /tmp/hosts.txt

exit


Explicación del funcionamiento del script:

Mediante el comando wget descargamos un archivo hosts actualizado y lo guardamos en la carpeta /tmp con el nombre hosts.txt. Comprobamos si existe una copia de seguridad del archivo hosts llamado hosts.old y si no la hay, el script la creará. El texto "localhost.localdomain" debe sustituirse por el nombre de localhost. Para saber el nombre de tu localhost escriba en el terminal lo siguiente:

monedasdejudas@linuxmint ~ $ hostname
linuxmint

En este caso, hay que sustituir "localhost.localdomain" por "linuxmint" en el código del shell script en Bash llamado update_hosts.sh:

127.0.0.1       linuxmint   localhost
::1             linuxmint   localhost

El comando echo muestra el texto entre comillas que se añadirá al archivo hosts de la carpeta /etc. El comando cat introduce el texto del archivo hosts.txt ubicado en la carpeta /tmp y lo añade al archivo hosts ubicado en la carpeta /etc. El comando rm borra el archivo /hosts.txt de la carpeta /tmp y el comando exit hace salir del programa.

Ejecución del script update_hosts sin que pida contraseña

Este shell script en lenguaje Bash debe ejecutarse sin que pida contraseña durante su ejecución. Busca el directorio donde está el script:

/home/user/scripts/update_hosts.sh

Edita el archivo sudoers con este comando:

monedasdejudas@linuxmint ~ $sudo visudo

Debajo de esta línea del archivo sudoers:

%sudo ALL=(ALL:ALL) ALL

Añada el siguiente texto:

user ALL=(ALL) NOPASSWD:/home/user/scripts/update_hosts.sh

Guarde con la combinación de teclas <Ctrl> + <O> y pulse <Enter>. Ya se puede ejecutar el shell script en Bash y durante su ejecución no necesitará introducir la contraseña. Recuerde dar permisos de ejecución al Shell script en Bash:

monedasdejudas@linuxmint ~ $ sudo chmod +x /home/user/scripts/nombre_del_script.sh

Programar una actualización del script update_hosts.sh con crontab cada cierto tiempo

Modifique el archivo crontabs para que se ejecute el script una vez al mes (por ejemplo) y guarde los cambios:

monedasdejudas@linuxmint ~ $ sudo nano /var/spool/cron/crontabs


# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

# For more information see the manual pages of crontab(5) and cron(8)

# m h  dom mon dow   command


0 0 1 * * sudo /home/user/scripts/update_hosts.sh


He detectado que mi navegador Chromium (una version del navegador Google Chrome para GNU/Linux) reproduce los anuncios y la publicidad. El método de redireccionar la publicidad molesta de Youtube a la dirección 127.0.0.1 antes funcionaba y ahora no. Lo he solucionado con la ExtensiónAdblock de Youtube. Nadie es perfecto.

Fuentes

http://blog.desdelinux.net/script-para-eliminar-automaticamente-cualquier-publicidad-en-cualquier-http://www.putorius.net/2012/01/block-unwanted-advertisements-on.html
https://es.wikipedia.org/wiki/Cron_(Unix)
https://lasmonedasdejudas.blogspot.com.es/2016/11/ejecutar-un-shell-script-en-bash-sin.html
https://www.meneame.net/m/tecnolog%C3%ADa/como-bloquear-paginas-aede-sistema-gnu-linux