Aca te pongo un paso a paso de como instalar un proxy transparente en un dispositivo raspberry pi (1,2,3).
Pasos a seguir…
Actualizamos la lista de paquetes
1 | sudo apt-get update |
Instalamos Squid(3)
1 | sudo apt-get install squid3 |
En este tutorial voy a utilizar un directorio diferente para los logs y el cache de Squid(3) para ahorrar espacio en la tarjeta SD.
Creamos los directorios para el cache y los logs, teniendo en cuenta que hemos montado otra unidad /mnt/otrodisco
1 2 | mkdir -p /mnt/usbdrive/proxy/cache mkdir -p /mnt/usbdrive/proxy/logs |
Cambiamos el propietario y grupo de la carpeta que utilizaremos para guardar la info de Squid(3) a proxy:proxy
1 2 | cd /mnt/usbdrive chown -Rv proxy:proxy proxy |
Editamos la configuracion de Squid(3) «/etc/squid3/squid.conf»
1 | sudo nano /etc/squid3/squid.conf |
Aca les dejo mi squid.conf en algunas lineas he agregado «#Cambiar esto» que son los que me modificado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl localnet src 192.168.137.0/24 #Cambiar esto por la configuracion de mi red que usualmente es 192.168.0.0 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 allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow localnet #Cambiar esto para decirle a squid que cualquier usuario de mired pueda utilizar el proxy http_access deny all http_port 3128 transparent #Cambiar esto para habilitar la opcion transparent del Squid(3) cache_dir ufs /mnt/usbdrive/proxy/cache 2048 16 256 #Cambiar esto para asignar el cache_dir dentro de la carpeta en la otra unidad "/mnt/usbdrive/proxy/cache" maximum_object_size 51200 KB #Cambiar esto para ajustar el tamaño de los objetos del caché en el servidor proxy access_log /mnt/usbdrive/proxy/logs/access.log squid #Cambiar esto para almacenar los access_log dentro de la carpeta en la otra unidad "/mnt/usbdrive/proxy/logs" cache_store_log /mnt/usbdrive/proxy/logs/store.log #Cambiar esto para almacenar los cache_store_log dentro de la carpeta en la otra unidad "/mnt/usbdrive/proxy/logs" cache_log /mnt/usbdrive/proxy/logs/cache.log #Cambiar esto para almacenar los cache_log dentro de la carpeta en la otra unidad "/mnt/usbdrive/proxy/logs" coredump_dir /mnt/usbdrive/proxy/ #Cambiar esto por el directorio de coredump_dir dentro de la otra unidad "/mnt/usbdrive/proxy/" 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 dns_nameservers 192.168.137.1 #Cambiar esto por los dns que usas en tu router |
Guardamos, creamos las carpetas de Squid(3) e iniciamos el servicio.
1 2 | sudo squid3 –z sudo service squid3 start |
Probamos el funcionamiento de Squid(3) en nuetro navegador utilizando el puerto 3128
Iniciamos las pruebas ingresando a cualquier sitio web.
Para visualizar el funcionamiento del proxy revisaremos los logs de esta manera:
1 | tail -f /mnt/usbdrive/proxy/log/access.log |
Y nos mostrara el siguiente resultado.
1 2 3 4 5 6 7 8 | 1436073354.688 6429 192.168.137.17 TCP_MISS/200 293 GET http://aax.amazon-adsystem.com/e/dtb/bid? - DIRECT/54.240.250.205 text/javascript 1436073354.743 247 192.168.137.17 TCP_MISS/200 6529 GET http://www.google.com/jsapi - DIRECT/122.2.152.251 text/javascript 1436073354.760 1 192.168.137.17 TCP_MEM_HIT/200 4602 GET http://pad2.whstatic.com/images/thumb/9/91/Dissuade-Yourself-from-Becoming-a-Blogger-Step-4-Version-2.jpg/-crop-127-140-127px-Dissuade-Yourself-from-Becoming-a-Blogger-Step-4-Version-2.jpg - NONE/- image/jpeg 1436073354.763 2 192.168.137.17 TCP_MEM_HIT/200 7126 GET http://pad2.whstatic.com/images/thumb/a/aa/Make-Your-Blog-Content-Scannable-Step-10.jpg/-crop-127-140-127px-Make-Your-Blog-Content-Scannable-Step-10.jpg - NONE/- image/jpeg 1436073354.766 4 192.168.137.17 TCP_MEM_HIT/200 5734 GET http://pad1.whstatic.com/images/thumb/f/f7/Start-a-Blog-Step-24-Version-2.jpg/-crop-127-140-127px-Start-a-Blog-Step-24-Version-2.jpg - NONE/- image/jpeg 1436073354.769 5 192.168.137.17 TCP_MEM_HIT/200 5001 GET http://pad2.whstatic.com/images/thumb/5/54/Be-Special-Step-14.jpg/-crop-126-120-126px-Be-Special-Step-14.jpg - NONE/- image/jpeg 1436073354.769 2 192.168.137.17 TCP_MEM_HIT/200 3297 GET http://pad3.whstatic.com/images/thumb/8/89/Sharpen-Hair-Clippers-Step-11.jpg/-crop-126-120-126px-Sharpen-Hair-Clippers-Step-11.jpg - NONE/- image/jpeg 1436073354.769 2 192.168.137.17 TCP_MEM_HIT/200 3609 GET http://pad1.whstatic.com/images/thumb/0/05/Write-a-Resignation-Letter-Step-11.jpg/-crop-126-120-126px-Write-a-Resignation-Letter-Step-11.jpg - NONE/- image/jpeg |
Ahora crearemos un script para crear las reglas en iptables y redireccionar todo el trafico que va hacia el puerto 80 al 3128.
1 2 3 4 5 6 7 8 9 | PROXY_IP=192.168.137.71 PROXY_PORT=3128 LAN_IP=`nvram get lan_ipaddr` LAN_NET=$LAN_IP/`nvram get lan_netmask` iptables -t nat -A PREROUTING -i br0 -s $LAN_NET -d $LAN_NET -p tcp --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -i br0 -s ! $PROXY_IP -p tcp --dport 80 -j DNAT --to $PROXY_IP:$PROXY_PORT iptables -t nat -I POSTROUTING -o br0 -s $LAN_NET -d $PROXY_IP -p tcp -j SNAT --to $LAN_IP iptables -I FORWARD -i br0 -o br0 -s $LAN_NET -d $PROXY_IP -p tcp --dport $PROXY_PORT -j ACCEPT |
Despues de agregar las reglas a iptables quitamos la opcion proxy de nuestro navegador y volvemos a hacer las pruebas respectivas, aca el log del squid con el redirect del 80 al 3128.
1 2 3 4 5 6 7 8 9 10 11 12 | 1436075325.876 269 192.168.137.1 TCP_REFRESH_UNMODIFIED/304 313 GET http://a.disquscdn.com/next/embed/lounge.load.2e3f4861c5633a3894949c6c2cd9d726.js - DIRECT/23.235.47.196 - 1436075325.907 426 192.168.137.1 TCP_CLIENT_REFRESH_MISS/200 4125 GET http://pu5h.info/sites/pu5h.com/files/PU5H-icon.png - DIRECT/85.234.203.56 image/png 1436075325.937 1464 192.168.137.1 TCP_MISS/200 673 GET http://urls.api.twitter.com/1/urls/count.json? - DIRECT/192.229.237.25 application/javascript 1436075326.809 475 192.168.137.1 TCP_REFRESH_UNMODIFIED/200 35850 GET http://platform.twitter.com/widgets.js - DIRECT/199.96.57.6 application/javascript 1436075327.133 2293 192.168.137.1 TCP_MISS/200 137506 GET http://www.microsofttranslator.com/ajax/v2/toolkit.ashx? - DIRECT/131.253.14.125 application/x-javascript 1436075327.407 328 192.168.137.1 TCP_MISS/200 2530 GET http://disqus.com/next/config.js - DIRECT/23.235.37.134 application/javascript 1436075328.086 574 192.168.137.1 TCP_MISS/200 831 GET http://api.microsofttranslator.com/V2/Ajax.svc/TranslateArray? - DIRECT/111.221.29.48 application/x-javascript 1436075328.570 1153 192.168.137.1 TCP_REFRESH_MODIFIED/200 33133 GET http://www.bing.com/widget/metrics.js - DIRECT/204.79.197.200 text/javascript 1436075329.292 655 192.168.137.1 TCP_CLIENT_REFRESH_MISS/200 455 GET http://www.pihomeserver.fr/favicon.ico - DIRECT/104.18.52.26 image/vnd.microsoft.icon 1436075329.531 361 192.168.137.1 TCP_REFRESH_UNMODIFIED/304 278 GET http://a.disquscdn.com/next/current/embed/lang/fr.js - DIRECT/23.235.47.196 - 1436075330.670 1581 192.168.137.1 TCP_MISS/404 824 POST http://www.pihomeserver.fr/wp-admin/admin-ajax.php - DIRECT/104.18.52.26 text/html 1436075332.679 536 192.168.137.1 TCP_MISS/200 7633 GET http://disqus.com/api/3.0/discovery/listRelated.json? - DIRECT/23.235.37.134 application/json |
Listo! ya tiene tu proxy transparente con raspberry pi! 😀