Hace unas semanas instalé searx, una solución para hacer búsquedas en los principales buscadores de internet sin ser traceado, es decir, sin dar tu identidad directamente a los buscadores, cosa que hará que cuando aparezca publicidad no te salga nada relacionado con lo que has buscado previamente. ¿Te preguntas como es que en internet los proveedores saben tanto de ti? pues uno de los sitios es por aquí. Searx es una opción para ocultar un poco tus intereses en internet ;)
Searx consta de 3 partes, searx, filtron y morty.
Searx es la interfaz y el programa como tal, filtron es un servicio para limitar el número de búsquedas para evitar que robots se sablen con tu instancia y morty es el proxy que oculta tu información a los buscadores.
Para hacer la instalación seguiremos la documentación de searx
Empezamos con la instalación:
Primero las dependencias
root@searx:~# apt -y upgrade && apt -y dist-upgrade && apt -y install git curl nginx sudo
A continuación clonamos el código de searx y ejecutamos los scripts de instalación
root@searx:/usr/local# git clone https://github.com/searx/searx searx root@searx:/usr/local# cd searx root@searx:/usr/local/searx# sudo -H ./utils/searx.sh install all root@searx:/usr/local/searx# sudo -H ./utils/filtron.sh install all root@searx:/usr/local/searx# sudo -H ./utils/morty.sh install all
Una vez instalado la cosa nos quedará así:
root@searx:/usr/local# netstat -lanp |grep 'LISTEN ' tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 391/uwsgi tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 122/morty tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 395/master tcp 0 0 127.0.0.1:4004 0.0.0.0:* LISTEN 764/filtron tcp 0 0 127.0.0.1:4005 0.0.0.0:* LISTEN 764/filtron tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 111/systemd-resolve tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 404/nginx: master p tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 111/systemd-resolve tcp6 0 0 ::1:25 :::* LISTEN 395/master tcp6 0 0 :::5355 :::* LISTEN 111/systemd-resolve tcp6 0 0 :::80 :::* LISTEN 404/nginx: master p tcp6 0 0 :::22 :::* LISTEN 1/init
Ahora podremos acceder a la instancia de searx accediendo por el puerto 8888
En cualquier momento si queremos ver los logs o qué están haciendo los servicios por detrás hay la opción de parar el servicio
root@searx:/usr/local/searx# service uwsgi stop # para parar searx root@searx:/usr/local/searx# service filtron stop # para parar filtron root@searx:/usr/local/searx# service morty stop # para parar morty
Para inspeccionar lo que hace y ver los logs:
root@searx:/usr/local/searx# sudo -H ./utils/searx.sh inspect service root@searx:/usr/local/searx# sudo -H ./utils/filtron.sh inspect service root@searx:/usr/local/searx# sudo -H ./utils/morty.sh inspect service
A continuación nos interesará exponer searx por filtron o morty, en mi caso voy a usar filtron.
Como es de costumbre, tengo el contenedor de searx dentro de una red privada de servidores y tengo un frontal de nginx donde expongo todos los servicios y gestiono los certificados de letsencrypt
frontal nginx
root@frontal-nginx1:/etc/nginx/sites-enabled# vi searx.lamardebits.org server { listen 80; listen [::]:80; server_name searx.lamardebits.org; include snippets/certbot.conf; return 301 https://$host$request_uri; } server { server_name searx.lamardebits.org; include snippets/certbot.conf; include snippets/lmdb-error-pages.conf; location / { proxy_pass http://172.31.0.120:80; #include proxy_params; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_buffering off; } listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/searx.lamardebits.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/searx.lamardebits.org/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_trusted_certificate /etc/letsencrypt/live/searx.lamardebits.org/chain.pem; }
nginx searx (contenedor)
root@searx:/etc/nginx/sites-enabled# vi searx server { listen 80; listen [::]:80; server_name searx.lamardebits.org; location / { proxy_pass http://127.0.0.1:4004/; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header X-Script-Name /searx; } location /static { alias /usr/local/searx/searx-src/searx/static; } location /morty { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; } }
Para terminar de configurar morty tendremos que modificar el fichero settings.yml, además de configurar algunas cosas mas (configuraciones adicionales)
root@searx:/usr/local/searx/searx/searx# vi settings.yml server: secret_key : "***********" # change this! image_proxy : True # Proxying image results through searx result_proxy: url : https://searx.lamardebits.org/morty key : !!binary "**************************"
Al mirar los logs de nginx me encontraba que la IP que se estaba guardando era la IP del frontal de nginx. Hace unos meses publiqué un artículo de como pasar y procesar las IPs a un apache. Para hacer lo mismo pero para el backend nginx tenemos que modificar el fichero /etc/nginx/nginx.conf
root@searx:~# vi /etc/nginx/nginx.conf http { ## # Logging Settings ## log_format logsearx '$remote_addr forwarded for $http_x_real_ip - $proxy_add_x_forwarded_for - $http_host - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log logsearx; #access_log /var/log/nginx/access.log; }
Igualmente tenemos que tener en cuenta también como trata filtron las IP, ya que es posible que haya varios usuarios que compartan una dirección IP, para ver que es lo que hace vamos a hacer un inspect de filtron
root@searx:/usr/local/searx/searx/utils# source searx-pyenv/bin/activate (searx-pyenv) root@searx:/usr/local/searx/searx/utils# ./filtron.sh inspect service Jan 11 19:46:55 searx filtron[764]: [debug request] 2022-01-11 19:46:55.247 109.69.8.30, 172.31.0.106 POST searx.lamardebits.org/searx/search "q=blackhold&category_general=on&time_range=&language=ca-ES" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" Jan 11 19:53:16 searx filtron[764]: [suspiciously Connection=close header] 2022-01-11 19:53:16.582 109.69.8.30, 172.31.0.106 GET searx.lamardebits.org/search?category_general=1&q=ok&pageno=1&time_range=None&language=en-US&format=json "" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
La primera petición corresponde a la búsqueda del término “blackhold”, la segunda a https://searx.lamardebits.org/search?category_general=1&q=ok&pageno=1&time_range=None&language=en-US&format=json para comprobar que filtron está funcionando correctamente.
Ahora con filtron activado, ya es posible publicar la instancia de searx en el listado público de instancias de searx.
Para que tu instancia no deje logs una recomendación es dejar la configuración de logging de nginx así:
http { # ... access_log /dev/null; error_log /dev/null; # ... }
Lo último que nos interesará hacer es definir la instancia de searx como buscador por defecto en nuestro navegador. En chrome tendremos que ir a preferencias > configuración > motor de búsqueda y configurarlo así:
Y pulsamos a los 3 puntitos y lo definimos como motor de búsqueda por defecto.
Venga, happy privaced searching! :)
Oh, dejando el paradigma orweliano imperante obsoleto ?!
Por otro lado, … que opinas de iniciativas como la de Qwant ? Y de Adeire ?
Salut y happpy searching !