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
sudo apt–getupdate
Instalamos Squid(3)
Shell
sudo apt–getinstall 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
mkdir–p/mnt/usbdrive/proxy/cachemkdir–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
cd/mnt/usbdrivechown–Rv proxy:proxy proxy
Editamos la configuracion de Squid(3) «/etc/squid3/squid.conf»
sudo nano/etc/squid3/squid.conf
acl manager proto cache_objectacl localhost src127.0.0.1/32::1acl to_localhost dst127.0.0.0/80.0.0.0/32::1acl localnet src192.168.137.0/24#Cambiar esto por la configuracion de mi red que usualmente es 192.168.0.0acl SSL_ports port443acl Safe_ports port80# httpacl Safe_ports port21# ftpacl Safe_ports port443# httpsacl Safe_ports port70# gopheracl Safe_ports port210# waisacl Safe_ports port1025–65535# unregistered portsacl Safe_ports port280# http-mgmtacl Safe_ports port488# gss-httpacl Safe_ports port591# filemakeracl Safe_ports port777# multiling httpacl CONNECT method CONNECThttp_access allow manager localhosthttp_access deny managerhttp_access deny!Safe_portshttp_access deny CONNECT!SSL_portshttp_access allow localhosthttp_access allow localnet#Cambiar esto para decirle a squid que cualquier usuario de mired pueda utilizar el proxyhttp_access deny allhttp_port3128transparent#Cambiar esto para habilitar la opcion transparent del Squid(3)cache_dir ufs/mnt/usbdrive/proxy/cache204816256#Cambiar esto para asignar el cache_dir dentro de la carpeta en la otra unidad «/mnt/usbdrive/proxy/cache»maximum_object_size51200KB#Cambiar esto para ajustar el tamaño de los objetos del caché en el servidor proxyaccess_log/mnt/usbdrive/proxy/logs/access.logsquid#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:144020%10080refresh_pattern^gopher:14400%1440refresh_pattern–i(/cgi–bin/|\?)00%0refresh_pattern.020%4320dns_nameservers192.168.137.1#Cambiar esto por los dns que usas en tu router
Guardamos, creamos las carpetas de Squid(3) e iniciamos el servicio.
sudo squid3–zsudo 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:
Shell
tail–f/mnt/usbdrive/proxy/log/access.log
Y nos mostrara el siguiente resultado.
1436073354.6886429192.168.137.17TCP_MISS/200293GEThttp://aax.amazon–adsystem.com/e/dtb/bid?–DIRECT/54.240.250.205text/javascript1436073354.743247192.168.137.17TCP_MISS/2006529GEThttp://www.google.com/jsapi–DIRECT/122.2.152.251text/javascript1436073354.7601192.168.137.17TCP_MEM_HIT/2004602GEThttp://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/jpeg1436073354.7632192.168.137.17TCP_MEM_HIT/2007126GEThttp://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/jpeg1436073354.7664192.168.137.17TCP_MEM_HIT/2005734GEThttp://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/jpeg1436073354.7695192.168.137.17TCP_MEM_HIT/2005001GEThttp://pad2.whstatic.com/images/thumb/5/54/Be–Special–Step–14.jpg/–crop–126–120–126px–Be–Special–Step–14.jpg–NONE/–image/jpeg1436073354.7692192.168.137.17TCP_MEM_HIT/2003297GEThttp://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/jpeg1436073354.7692192.168.137.17TCP_MEM_HIT/2003609GEThttp://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.
Shell
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.
Shell
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!