Tengo vacaciones, tengo vacaciones y una Raspberry apagada en una esquina, pobre de ella. Voy a explicar como utilizar raspberry para montar un sistema para mantener a «salvo» nuestra privacidad usando la red Tor + Privoxy + HAVP + SQUID, a más explicaré como añadir un antivirus que analice todas las peticiones que se hagan a través del sistema
La privacidad, que importante y que fácil es perderla.
La solución tiene diferentes piezas, vamos a ver que hace cada una de ellas.
Tor : Bien conocido por la mayoria https://es.wikipedia.org/wiki/Tor_(red_de_anonimato)
HAVP: Antivirus que escanea el trafico usando ClamAV http://www.server-side.de/features.htm
SQUID: Proxy https://es.wikipedia.org/wiki/Squid_(programa)
Privoxy: https://es.wikipedia.org/wiki/Privoxy (filtra el contenido indeseable de las páginas, aumenta la seguridad del equipo, evita archivos que nos rastrean y elimina la publicidad.)
La idea viene siendo que las peticiones que hagamos a través de Squid se escaneen utilizando HAVP y se envien a Privoxy, este las limpie y las envíe a la red tor, algo así

En primera instancia lo que vamos a montar es la parte mas estandar que es 1 SQUID + PRIVOXY+TOR, esta solución funciona perfectamente en Raspberry
Algo así

La parte del segundo SQUID + HAVP es opcional y si queréis montarlo en Raspberry deberéis tener el modelo de 1GB. Por ello montamos la primera parte, que debe funcionara para todos y después ampliamos con a la parte del antivirus.
Empezamos.
[email protected]# aptitude install tor
[email protected]# aptitude install privoxy
[email protected]# aptitude install squid
Los tres paquetes esenciales, comenzaremos configurando los servidores tor.
Configuración del servicio Tor
Vamos a crear los ficheros de configurar tor
vim /etc/tor/torrc SocksPort 9050 # what port to open for local application connections SocksBindAddress 127.0.0.1 # accept connections only from localhost AllowUnverifiedNodes middle,rendezvous Log notice syslog RunAsDaemon 1 User tor Group tor DataDirectory /var/lib/tor Log notice file /var/log/tor/notices.log
Básicamente configuramos el puerto donde queremos que escuche el servidor de tor en nuestro caso por defecto en el 9050
Configuración del servicio Privoxy
Configuraremos Privoxy, este servicio tiene muchas opciones, segun comentan en la pagina del proyecto salir con las opciones por defecto es recomendable, después podremos jugar con más opciones si lo deseamos, lo que debemos hacer es asociar un Privoxy con un Tor, ajustando el puerto en la linea froward-socks5
vim /etc/privoxy/config confdir /etc/privoxy logdir /var/log/privoxy actionsfile standard.action # Internal purpose, recommended actionsfile default.action # Main actions file actionsfile user.action # User customizations filterfile default.filter logfile logfile listen-address 127.0.0.1:8118 toggle 1 enable-remote-toggle 0 enable-remote-http-toggle 0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 forward-socks5 / 127.0.0.1:9050 . forwarded-connect-retries 0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0
Con privoxy y tor ya tendremos las dos piezas esenciales, levantamos los servicios y comprobamos que si realizamos una petición al puerto del privoxy este ya se comunica con tor y nos envia por la red tor.
La idea de poner el SQUID por delante es que nos permite si lo deseamos aplicar acl y diferentes reglas, a mi parecer es algo más potente que privoxy
Configuración del servicio SQUID 1
Como hemos explicado en otro post, podéis montar vuestro propio paquete Squid para habilitar algunas opciones, en mi casa por ejemplo la posibilidad de añadir certificados ssl.
La instalación es sencilla
[email protected]# aptitude install squid3
Una vez instalado modificamos el fichero de configuración
acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl user src 192.168.1.138/32 ::1 acl userlist src all http_access allow user http_access allow userlist http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all http_port 3400 cache_peer 192.168.1.101 parent 8118 0 no-query no-digest never_direct allow all coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 access_log /var/log/squid3/access_squid.log
Las lines que son un poco diferentes son
Acl de acceso, aqui teneis dos ejemplos, en uno limitamos por ip y en el otro damos permiso a todo (es un ejemplo y son redundantes entre ellas, es mas mejor no dar acceso a todo el mundo )
acl user src 192.168.1.138/32 ::1 acl userlist src all
Puerto del squid3
http_port 3400
Y a donde se enviará las peticiones, en este caso al puerto del privoxy
cache_peer 192.168.1.101 parent 8118 0 no-query no-digest never_direct allow all
El log
access_log /var/log/squid3/access_squid.log
Arrancamos el servicio y comprobamos que la solución funciona
systemctl start squid3
Vamos a realizar 2 curls, el primero normal y el siguiente utilizando el sistema que hemos montado.
Sin Proxy
[email protected]:~# curl ipv4.icanhazip.com 37.135.18.39
Con Proxy
curl -x 192.168.1.101:3400 ipv4.icanhazip.com 207.244.70.35
Claramente podemos ver el cambio de ip ya que estamos saliendo por la red TOR, con lo que conlleva.
Vamos a por la segunda parte, instalación y configuración de Squid 2 y HAVP
Instalación de paquetes
Recordar que allí donde vayamos a instalar HAVP deberemos tener como mínimo 1 GB de RAM.
Configuración de Squid 2
vim /etc/squid3/squid.conf
acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports acl user src 192.168.1.138/32 ::1 acl userlist src all http_access allow user http_access allow userlist http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all http_port 3128 cache_peer 127.0.0.1 parent 3410 0 no-query no-digest never_direct allow all coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 access_log /var/log/squid3/access_squid.log
Es la misma configuración que el anterior proxy pero lo que haremos es cambiar el puerto de entrada (en el caso que lo tengamos en la misma maquina) y apuntar el cache_peer al puerto del HAVP en este caso el 3410
cache_peer 127.0.0.1 parent 3410 0 no-query no-digest
Configuración de HAVP
Deberemos decirle al servicio que todas aquella peticiones desde el SQUID 2 las debe reenviar al SQUID 1.
USER havp GROUP havp DAEMON true PIDFILE /tmp/havp.pid SERVERNUMBER 1 MAXSERVERS 1 SCANTEMPFILE /tmp/havp-XXXXXX TEMPDIR /tmp DBRELOAD 60 PARENTPROXY 192.168.1.101 PARENTPORT 3400 FORWARDED_IP false X_FORWARDED_FOR false PORT 3410 BIND_ADDRESS 127.0.0.1 ENABLECLAMLIB true ENABLECLAMD false ENABLEFPROT false ENABLEAVG false ENABLEAVESERVER false ENABLESOPHIE false ENABLETROPHIE false ENABLENOD32 false ENABLEAVAST false ENABLEARCAVIR false ENABLEDRWEB false
Por ultimo deberemos montar el sistema de ficheros donde tengamos HAVP con la opcion -o mand.
/dev/mmcblk0p2 / ext4 defaults,noatime,mand 0 1
mount -o remount /
Arrancamos y comprobamos
/etc/init.d/havp start Starting havp (via systemctl): havp.service.
Comprovación
En el gif podeis ver 4 ventanas cada una de ellas es una de las piezas principales del sistema, la idea es lanzar un curl desde un cliente y ver como la peticion pasa por todas las piezas.
Lanzamos
Como podemos ver la petición pasa por todos los sistemas, si que es verdad que introducir la pieza de HAVP hace que la petición sea mas lenta.
¿Cómo podemos utilizar la solución de forma sencilla?
En mi caso utilizo la extensión para chrome FoxyProxy, con ella de forma sencilla podemos tener más de un proxy configurado y decidir cual utilizar en cada momento.
Por último un resultado de una página con bloqueos de Privoxy es
O una prueba completa en una pagina que tiene bastantes anuncios, cookies y cosas raras y feas
¡WOW!
Veo que al final te has lanzado a hacerlo. Créeme cuando te digo que pienso probarlo, ¿eh?
¡Muchas gracias por este aporte!
Un abrazo
Esta bien la solución, y divertida de montar, te animo a que lo montes!
Es un buen artículo, gracias por compartirlo! Si tus dispositivos en tu red local no están enviando todas las solicitudes de DNS a través del proxy tor, o usando DNS a través de HTTPS (dnscrypt), entonces tu privacidad desafortunadamente no es perfecta (= DNS leak y otras cosas) y puedes darle una falsa sensación de seguridad. Términos para buscar en Google para saber y leer más: «plausible deniability».