Searx: Buscar sin ser traceado

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! :)

One Comment

  1. 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 !

    Respon

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.