Herramientas personales

Proxy squid

De Proyectos GULIX

Primero hay que destacar que con squid podemos hacer un proxy de cache y/o de filtrado, la ventaja que tiene hacer un proxy cache es que para páginas estáticas almacena el contenido durante un tiempo, con lo cual, ahorramos ancho de banda, en especial cuando se trata de un bien escaso. El proxy de filtrado es básicamente aquel que no nos deja entrar a u sitio o ip por alguna palabra clave.

Haremos este tutor en paralelo con debian/ubuntu y centos/redhat/fedora por tratarse de las más populares.

Tabla de contenidos

Paquetes necesarios a instalar

Debian, Ubuntu y similares

apt-get install squid
update.rc squid 90 2 3 4 5 . stop 90 1 6 .

CentOS, RedHat y Fedora

yum install squid
chkconfig squid on

Esto deja todo instalado, pero no muy configurado. El archivo de configuración principal se encuentra en /etc/squid/squid.conf

Configurando squid

Los objetivos planteados

La configuración que haremos trata de un proxy transparente, es decir de aquel proxy que el usuario final no se da cuenta que utiliza, el cuál no se configura en el navegador, sino que toma al momento de traficar paquetes de red.

Haremos además un archivo de reglas de palabras denegadas y de otras permitidas, de forma predeterminada acepta todo lo que no esta denegado, sin embargo puede ser que al denegar alguna palabra, por ejemplo hot también prohíbe hotmail, la cual si queremos aceptar hay que agregarla a la lista de permitidas.

Finalmente para complicar un poco las cosas segmentaremos la red en dos, dejando por un lado el equipo de los padres, que podrán ver sus sitios con contenido de adultos y el de los hijos, en que intentaremos filtrar en lo posible el contenido de adultos.

squid.conf

Veamos como hacer este archivo paso a paso

proxy transparente

http_port 10.69.0.1:3128 transparent

Esta primer instrucción dice que usaremos el puerto 3128 en nuestro servidor 10.69.0.1, ademas de ello que nuestro proxy será transparente.

el cache

cache_mem 64 MB   
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
cache_dir aufs /var/spool/squid 1024 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log        
cache_store_log /var/log/squid/store.log

Esta es la configuración del cache hablaré acá un poco de estas lineas:

  • cache_mem: memoria de objetos calientes (de forma predeterminada esta en 256, pero si su equipo es pequeño debe bajar, el tope recomendado es RAM/3).
  • cache_swap_low y cache_swap_high: son el rango de porcentajes de memoria cache que se dedica para el intercambio.
  • maximum_object_size: el tamaño máximo del objeto que va a ser almacenado en cache, los objetos mas grandes que estos no se almacenarán, en este caso 4M que es lo predeterminado.
  • cache_dir: directorio donde almacenará el cache, el parámetro aufs es mejor que ufs debido a que maneja multihilo aumentando el rendimiento... 1024 es la cantidad de megas que usará en disco, en nuestro caso 1G y el resto es la figura de 16 directorios o carpetas con 256 directorios cada uno, este valor es el predeterminado (16 256).
  • cache_access_log, cache_log, cache_store_log son los logs que informan el acceso, el log del sistema de cache y el del uso del almacenamiento.


el refresco

Después del cache definimos cuanto tiempo lo guardamos, básicamente la expresión regular el tiempo mínimo antes de descargar de nuevo (en minutos), el porcentaje de envejecimiento y el tiempo máximo para considerarse viejo (en minutos)

# Paquetes Debian y RedHat 1 dia
refresh_pattern -i \.deb$ 1440 100% 1440
refresh_pattern -i \.rpm$ 1440 100% 1440
# Actualizaciones de windows 10 a 20 dias
refresh_pattern -i \.cab$ 14400 80% 28800
# Ejecutables 10 a 30 dias
refresh_pattern -i \.exe$ 14400 80% 43200
# Imagenes minimo 1 dia maximo 3 antes de descargar de nuevo
refresh_pattern -i \.gif$ 1440 80% 4320
refresh_pattern -i \.tiff?$ 1440 80% 4320
refresh_pattern -i \.bmp$ 1440 80% 4320
refresh_pattern -i \.jpe?g$ 1440 80% 4320
refresh_pattern -i \.xbm$ 1440 80% 4320
refresh_pattern -i \.png$ 1440 80% 4320
refresh_pattern -i \.wrl$ 1440 80% 4320
refresh_pattern -i \.ico$ 1440 80% 4320
refresh_pattern -i \.pnm$ 1440 80% 4320
refresh_pattern -i \.pbm$ 1440 80% 4320
refresh_pattern -i \.pgm$ 1440 80% 4320
refresh_pattern -i \.ppm$ 1440 80% 4320
refresh_pattern -i \.rgb$ 1440 80% 4320
refresh_pattern -i \.ppm$ 1440 80% 4320
refresh_pattern -i \.rgb$ 1440 80% 4320
refresh_pattern -i \.xpm$ 1440 80% 4320
refresh_pattern -i \.xwd$ 1440 80% 4320
refresh_pattern -i \.pict?$ 1440 80% 4320
# Video minimo 10 dias, maximo 30
refresh_pattern -i \.mov$ 14400 80% 43200
refresh_pattern -i \.mpe?g?$ 14400 80% 43200
refresh_pattern -i \.avi$ 14400 80% 43200
refresh_pattern -i \.qtm?$ 14400 80% 43200
refresh_pattern -i \.viv$ 14400 80% 43200
refresh_pattern -i \.swf$ 14400 80% 43200
refresh_pattern -i \.flv$ 14400 80% 43200
# Sonido idem que video
refresh_pattern -i \.wav$ 14400 80% 43200
refresh_pattern -i \.aiff?$ 14400 80% 43200
refresh_pattern -i \.au$ 14400 80% 43200
refresh_pattern -i \.ram?$ 14400 80% 43200
refresh_pattern -i \.snd$ 14400 80% 43200
refresh_pattern -i \.mid$ 14400 80% 43200
refresh_pattern -i \.mp2$ 14400 80% 43200
refresh_pattern -i \.mp3$ 14400 80% 43200
refresh_pattern -i \.ogg$ 14400 80% 43200
# Default
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

El tiempo que deseemos mantener almacenado algo es relativo a nuestro trabajo, en todo caso por motivos de actualizaciones lo ideal no es dejar muy alto los valores de los archivos .deb .rpm, y si la gente de Microsoft trabajara en serio en parches, deberia acortarse ese tiempo, pero como no es así...

Recordemos que sólo almacenará los archivos que estén dentro del maximum_object_size

Control de Acceso

Ahora, a crear las listas de control de acceso (acl : access control list), en ellas básicamente decimos que o a quien permitimos o denegamos. En este lugar también usamos el http_access que permite o provee el acceso a las reglas de acceso http. Una cosa importante a recordar es que estas reglas se aplican de arriba a abajo, siendo las superiores sobre las inferiores, es decir, si permito abc arriba y luego deniego todo abajo, significa que solamente estoy permitiendo abc y nada más.

acl all src 0.0.0.0/0.0.0.0     # todo
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 # maquina local
acl SSL_ports port 443 873      # https, rsync
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl CONNECT method CONNECT      # metodo Connect
acl padres src 10.69.0.0/255.255.255.0 # red padres
acl hijos src 10.69.1.0/255.255.255.0 # red hijos
acl palabrasNo url_regex "/etc/squid/palabras_no"
acl palabrasSi url_regex "/etc/squid/palabras_si"
acl horario time MTWHF 18:30-20:00
acl finsemana time AS 15:00-20:00
http_access allow manager localhost
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow palabrasSi
http_access allow padres
http_access allow horario finsemana hijos !palabrasNo
http_access deny all

Me detendré acá a explicar solo un par de reglas, src hace referencia a una o un rango de ip, time hace referencia a dias de la semana (MTWHFAS) y rango horario (00:00-23:59).

acl palabrasNo url_regex "/etc/squid/palabras_no" y acl palabrasSi url_regex "/etc/squid/palabras_si" hacen referencia a url_regex que busca una expresión regular en una url, y la lista de expresiones regulares esta en los archivos /etc/squid/palabras_no y /etc/squid/palabras_si.

Un ejemplo de palabras_no es:

ardiente
ass
bdsm
bestialismo
bitch
bizarre
bizarro
blowjob
boobies
boobs
bukkake
chochito
cum
exnovia
ex\+novia
hot

Un ejemplo de palabras_si seria aquel que tiene como parte alguna denegada, por ejemplo "cum"

cumple
documento

Otras configuraciones

Finalmente es bueno dejar los mensajes del proxy en español y cambiar el nombre del host a alguno que queramos.

error_directory /usr/share/squid/errors/Spanish
visible_hostname proxy.gulix.local

Pasos finales

Configurar iptables

En la linea RedHat (CentOS, Fedora)

Hay que modificar el archivo /etc/sysconfig/iptables agregando lo siguiente:

En la tabla nat:

-A PREROUTING -s 10.69.0.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -s 10.69.1.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

En la tabla filter:

-A RH-Firewall-1-INPUT -i eth1 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT

Suponiendo que eth1 es el dispositivo por el cual se conecta el proxy a la red.

Después de estos cambios, hay que ejecutar

service iptables restart

En Debian y Ubuntu

Crear un archivo squid.sh en /etc/network/if-pre-up.d/ que contenga

#!/bin/sh
iptables -t nat -A PREROUTING -s 10.69.0.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -s 10.69.1.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t filter -A RH-Firewall-1-INPUT -i eth1 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT

Cambiar el permiso para ejecución:

chmod ugo+x /etc/network/if-pre-up.d/squid.sh

Cargar el archivo

source /etc/network/if-pre-up.d/squid.sh

Poner a funcionar el servicio del proxy

En RedHat, Centos, Fedora

service squid start

En Debian, ubuntu y similares

/etc/init.d/squid start



Autores de este Resumen

--RAcl 08:03 8 jul 2009 (UTC)

Leer más


Buscar