Refosco Ingeniería Informática

Refosco Ingeniería Informática
Rivadavia 877 CP 3306 Oberá Mnes. Te 03755 406060

jueves, 16 de julio de 2009

Proxy Cache Squid con Debian y Shorewall

Hola.. como le pormetí a Eduardo C. voy a hacer un detalle de lo que hice como para que sirva de guia a el y por que no a cualquier otro ( incluso yo.. ya que el Aleman anda cerca ).

Obetivo:

Conectar una red Lan Privada a Internet buscando acelerar la navegación con un Web Proxy y controlar los accesos a Contenidos, Ancho de Banda de Descargas P2P y otras, de manera de logra un uso moderado que asegure el usufructo de todos.
Para este Proyecto dispongo de:
Dispongo de una PC , PIV con 512MB de Ram , Disco 80GB, dos placas de Red.

Primero instalé Debian 5.0 ( Lenny ) con la Instalación Básica ( lo mas pelado posible , existen en internet varios instructivos de como lograrlo).

eth0 conetada al modem en modo Bridge ( ppp
eth1 Red local 192.168.0.7 (Red de Local)

Durante la instalacion configure la eth0 , como interfaz primaria , esta es la que se conecta a internet.
Luego de Instalar el Debian , lo primero que hice , fué configurar el equipo para poder conectarme a internet via eth1/Modem ADSL y así poder seguir bajando lo que necesite.
Para ello hice :
apt-get install ppoe , ppoe-common,
Ejecutando desde la consola pppoeconf , debería haber encontrado que en la eth0 estaba un modem pero en mi caso no fué así , por lo que ejecuté directamente:
pppoeconf eth
Con este argumento si andubo , le escribí nombre de usuario y passwd para la conexión ADSL y chice quedó funcionando. Al terminar me tira uno comandos que se pueden usar para controlar el pppoe como ser:
pon
poff
postat
plog
En este punto al ejecutar ifconfig ya debería aparecer ppp0, indicandome que esta establecida una conexión via el modem.-
Bueno lo siguiente es hacer que la ruta por defecto de esta máquina no sea el GW o puerta de enlace de la red ( para mi caso 192.168.0.1) si no que salga por eth0 o mejor dicho ppp0, verificamos cual es el GW desde una consola tipeando:
route
Para ello tipeando iflow y editando etc/network/interfaces, comentamos la línea que contiene el GW y luego levantamos el servicio con ifup
Luego nos queda indicar el camino por defecto para esta maquina:
route add default gw ppp0
Para verficar que el GW ahora es ppp0 tipeamos nuevamente
route
y debería aparece esto que la ruta por defecto es ppp0.
Instalamos el lynx que es un navegador no gráfico. Corre desde una terminal.
apt-get install lynx
Ya podemos probar si nuestro equipo navega.

Desinstalar el exim4_listener
/etc/init.d/exim4 stop
Vemos que en la consola aprece:
Stopping MTA: exim4_listener.
Una vez detenido el servicio procedemos a eliminarlo de la lista de servicios que arrancan.
update-rc.d -f exim4 remove
Luego instalo el ssh:
apt-get install ssh
habilitar en /etc/ssh/sshd_config el puerto por el que queremos que se acceda a ssh.

Instalar Squid
apt-get install squid
Encontré que se debe habilitar para el squid una parámetro x_forward_for esto es para permitir identificar en el tráfico la IP de cada equipo que sale por el proxy de manera que podamos tomar alguna acción como ser graficar el consumo de AB por IP , pero como en el Debian el paquete esta precompilado y esta opción la tiene por defecto mejor...
Para ver las opciones de compilacion del squid basta con tipear:
squid -v
Luego recorrí muchos sitios como para encontrar que debería modificar del /etc/squid/squid.conf y en definitiva lo mínimo que hice como para dejar funcionando el proxy, y descomenté algunas líneas y las edité para que se adecúen a mi red y requerimientos, para esta maquina fueron:

http_port 8080
acl localnet src 192.168.0.0/21
client_netmask 255.255.248.0
acl patronesdenegados url_regex src "/etc/squid/patronesdenegados"
http_access deny patronesdenegados
http_access allow localnet
error_directory /usr/share/squid/errors/Spanish

Dentro de /etc/squid edité un archivo de texto llamado patronesdenegados donde incluyo las palabras que quiero que filtre y niegue el squid como ser sexo, porno.

Recomiendo siempre hacer un backup antes de meter mano.
En este punto ya tenía levantado y funcionado lo básico. Quedaba por delante agregar reglas al squid como para tener el control deseado de contenido y descargas.
Instalar Shorewall
Luego para poder trabajar con IPTables instalé el shorewall, es un script que permite escribir reglas de iptables de una manera mas sencilla,
apt-get install shorewall ( lo descargó del DVD de Debian)
En la parte de /usr/share/docs/shorewall hay ejemplos de configuración basíca para dos interfaces. copié estos archivos a /etc/shorewall y solo modifique algunos archivos.

Modificar en el /etc/shorewall.con dos cositas:
STARTUP_ENABLE=Yes
IP_FORWARDING=Yes

Configurar zone, policity, masq y rules mirando los ejemplos-

Alguna modificaciones mias fueron:
A rules antes del final del archivo le agregué:
ACCEPT loc fw tcp 8080

Para que acepte lo que venga por la red local desde el port 8080 que es donde atiende el proxy.
y al archivo masq

ppp0 eth1


Para que traslade las direcciones de la interfaz privada ( eth1) a la publica ( eth0/pppd0)
El archivo interfaces quedó de la siguiente manera:
net ppp0
loc eth1 detect
Con esto ya tenía cargadas las reglas para que el shorewall me generara las reglas de iptables.
Para arrancar el shorewall tenemos los comandos:
shorewall start
shorewall stop
shorewall restart

Para el squid los comandos serían:
/etc/init.d/squid stop
/etc/init.d/squid start
/etc/init.d/squid restart
y los archivos para ver que esta sucediendo con el squid
var/log/squid/access.log
var/log/squid/cache.log
En estos archivos podemos ver las peticiones que llegan al squid(access.log) y los sitios que van quedando cacheados.

Bueno este creo que el artículo ya esta terminado , y lo pongo a disposición de Uds. Espero que sea de ayuda.-