TEXTO-PLANO ===================================================================== Revista digital 04 | 04 --------------------------------------------------------------------- 04 | Bloquear anuncios a la manera Unix ~anthk --------------------------------------------------------------------- Odia todo el mundo la publicidad online, ¿verdad? Si usas Chromium o Firefox (o sus derivados como Librewolf) puedes usar UBlock Origin y se acabó. Pero, ¿qué pasa con máquinas más antiguas que usen navegadores como Dillo, Netsurf o los viejos+/lynx? Pues puedes crearte un fichero de hosts. El fichero /etc/hosts (antes de tener servicios DNS que tradujeran el nombre de dominio a una IP para poder conectarse a un ordeandor a internet) era el encargado de mirar a qué IP había que ir al conectarse a "ejemplo.com". Por tanto, si pones en /etc/hosts una línea tipo 0.0.0.0 anuncios.ejemplo.com (el ejemplo es falso) todas las conexiones hacia anuncios.ejemplo.com quedan resueltas en 'local', es decir, no salen de tu máquina y no se conectará al destino. El navegador intenta conectarse a 0.0.0.0 para ir, por ejemplo, a una web que use anuncios.ejemplo.com para mostrar anuncios. Obviamente no hay conexión posible a esa IP, por lo que no hay anuncios, ni rasteadores de cookie ni nada. Eso suena genial. Pensarás que hay millones de dominios online, pero hay gente que ha recopilado esos dominios, en concreto los de Steven Black. Para ello, necesitamos acceso a una máquina Unix (o termux en Android y mandar el fichero por ejemplo vía Jabber o con correo electrónico adjunto) e instalar git. Abrimos una terminal en Trisquel, Ubuntu, OpenBSD... sale en los menús. Una vez abierta, tecleamos dentro una de las siguientes órdenes para instalar git: En OpenBSD doas pkg_add git En Trisquel, Ubuntu, Debian, MXLinux... sudo apt-get --no-install-recommends git Termux: pkg in git En Termux no vas a poder copiar claro está el fichero a /etc/hosts pero si tendrás un fichero ~/src/hosts/hosts.add donde puedes añadirlo al final del fichero hosts de cualquier PC, incluso en Windows en C:\Windows\system32\driver\etc\hosts. Abres hosts.add en el bloc de notas. Seleccionas todo y copias, abres C:\Windows\system32\driver\etc\hosts, vas al final de todo, pulsas enter y le das a pegar el texto. Es lo mismo que hacemos en Linux/BSD más adelante con scripts. Ahora toca crear una carpeta ~/src y bajar el 'almacén' del repositorio de git donde se aloja el proyecto del fichero antipublicidad. Creamos ~/src mkdir ~/src Vamos a ~/src cd ~/src Bajamos todo de git git clone https://github.com/stevenblack/hosts Entramos a hosts cd hosts Ahora, explico lo que haremos. Primero haremos copia del fichero /etc/hosts a hosts.base cp /etc/hosts hosts.base Ese fichero es el /etc/hosts original de nuestro equipo, nunca va a cambiar esa parte. Ahora, si miramos el fichero ./hosts, vemos que posee una línea que Steven Black y pone una lista enorme de hosts de publicidad resueltos a 0.0.0.0. Sería genial copiarla y pegarla, pero resulta tedioso. Para ello creamos un script genera.sh. Lanzamos en la terminal: cd ~/src/hosts cat >> genera.sh << EOF #!/bin/sh sed -n '/Steven Black/,$p' < hosts > hosts.add sudo cp hosts.new /etc/hosts || doas cp hosts.new /etc/hosts EOF Explico el comando del cat: cat >> genera.sh envía por defecto a genera.sh. El >> es distinto de >, > sobreescribe, pero >> agrega al final. Por lo tanto, estamos enviando líneas una tras otra. Le hemos enviado dos, la de sed y la de sudo. De lanzar el comando sin '<< EOF' tendríamos que escribir en una línea Ctrl-d. Como suena, pulsar ctrl-d como un atajo de teclado tal como harías con ctrl-c y ctrl-v para copiar y pegar en Windows. Ctrl-d envía un carácter ASCII especial que significa EOF, fín de fichero. Ergo, estamos diciendo a cat que... deja de tomar entrada del usuario y cierra el fichero genera.sh para volver a la terminal. Si agregamos << EOF tras el genera.sh (o << pepito), al escribir en una línea 'pepito' va a hacer lo mismo que pulsar Ctrl-d en el teclado. Cosa que ocurre en el ejemplo de arriba, donde escribimos 'EOF" para finalizar. Miramos dentro de genera.sh: cat genera.sh #!/bin/sh sed -n '/Steven Black/,$p' < hosts > hosts.add sudo cp hosts.new /etc/hosts || doas cp hosts.new /etc/hosts Vemos que se han metido las líneas que has introducido tras << y que el comando cat ha finalizado al meter 'EOF' en una sola línea. También podías haber usado nano, nvi, gedit, cualquier otro editor de GNU/Linux o BSD, pero nunca viene mal aparte de bloquear anuncios el aprender un poquito de comandos. Ahorra mucho tiempo después comparado con abrir el block de notas, copiar, pegar... ya lo verás. Lanzamos genera.sh sh genera.sh Ahora, ¿tienes que hacer *todo el proceso de nuevo*? Recuerda que tienes un script, así que solo hay que hacer tres cosas: Actualiza el fichero de hosts. vete a ~/src/hosts cd ~/src/hosts Recoge los últimos cambios. git pull Genera un hosts.new nuevo: sh genera.sh Ahí te pide la contraseña de root/administrador. Se la das y listo, ya copia el fichero resultante. Con eso ya funciona el bloqueo. Si eso crea un fichero renueva.sh donde llame a git pull obteniendo nuevos cambios y que el propio script llame a su vez -al final- a genera.sh con el fichero hosts ya renovado: cd ~/src/hosts cat >> renueva.sh << EOF #!/bin/sh git pull sh genera.sh EOF Miramos el contenido de renueva.sh: cat renueva.sh #!/bin/sh git pull sh genera.sh y para actualizar la lista de hosts y copiarla de nuevo a /etc/, simplemente lanza en una nueva terminal: # pasos para actualizar cd ~/src/hosts sh renueva.sh Como el script renueva.sh llama a genera.sh, recuerda que tienes un comando con sudo/doas, así que te pide, claro está, la contraseña de administrador. Métela como siempre y listo. Ahora ya tendrías un /etc/hosts con la lista antipublicidad más reciente. No borra tanto como el famoso UBlock Origin pero como digo te funciona con cualquier otro navegador. Resumo para actualizar: cd ~/src/hosts sh renueva.sh (aquí introducimos la contraseña de root cuando la pida). ¿Ves qué fácil para actualizar y tener una lista de miles de sitios bloqueados con solo un sh renueva.sh estando en ~/src/hosts? Eso es lo bueno de la automatización, ahorrar tiempo (y ancho de banda). En siguientes ediciones quizá haga una guía para usar telescope, gem.awk o demás para ver la web vía gemini:// haciendo que el tener un antianuncios sea redundante, pero nunca está de más. Mis artículos son de computación minimalista y así debería ser todo, sin secretos para nadie. Hasta la próxima edición. ---------------------------------------------------------------------