
Bueno para mi camarada anibal lo prometido es deuda...Hace poco entre mis intentos de poder montar un servidor proxy lo logre...Lo publico con el fin de que se interesen en el tema, y por que hay personas que publican informacion y si no por ellas no lo hubiese logrado. La informacion para que yo montara el proxy-squid la encontre en
sitio de freebsd en mexico.
Antes de meter las manos a la candela vamos a revisar algunos detalles para la instalación.
Cuantos Megabytes de trasferencia esperamos tener hacia el cache? Cuantos usuarios estarán conectados concurrentemente? Cuanto tiempo estarán disponibles los objetos en el cache?
Vamos a crear un escenario en donde contamos con una red de 50 usuarios con una conexión dedicada a 512 k/s, de estos 50 usuarios 10 no tienen acceso a internet, 20 son navegantes moderados y bajan un promedio de 5 Mbytes, 15 son navegantes promedio con 10 Mbytes y 5 son del tipo navegante obsesivo con 30 Mbytes al día, esto arroja 400 Mbytes de trasferencia al día.
Con 400 Mb guardándose en el disco, si tuviéramos 2 Gb de espacio de caché los objetos estarían 5 días en el cache antes de ser sobrescritos por los nuevos objetos que se vayan bajando, cuanto más grande sea el cache más tiempo podrán permanecer los objetos en el servidor aumentando con esto la posibilidad de incrementar los hits al cache. Pero un disco enorme no es por regla general mejor, un mayor rendimiento del cache se logra cuando se comparte entre varios discos, con esto mejoramos la tasa de trasferencia y las respuestas por segundo que podemos manejar simultáneamente. Por ejemplo con 3 discos con un tiempo de acceso (seek time)de X segundos con una tasa de 1000 peticiones por segundo tendría la posibilidad de soportar Z peticiones por segundo:
1000 peticiones/ (12 ms seek time)/(3 discos)=1000/4=250 peticiones/segundo
Y ahora pasemos la memoria, de esto solo hay una regla: siempre se puede usar más memoria RAM ¡, pero ya hablando un poco más en serio, Squid es un programa que hace uso activamente de la memoria del sistema, y las llamadas al swap se traducen en un alentamiento de las respuestas a las peticiones, esto se produce porque para manejar los objetos del cache se crean unos índices de acceso, cada objeto utiliza aproximadamente 75 bytes de memoria, si cada objeto utiliza aproximadamente 13 kb en el disco y tenemos asignado digamos 8 GB al caché, necesitaríamos 48 Mb de memoria RAM solo para los índices del cache, aparte de la que se necesita para los procesos del Sistema.
Con todo lo anterior ya podemos calcular los requerimientos de nuestro servicio de proxy a la medida de nuestra red, pero también hay que pensar un poco en el futuro, así que mientras más espacio de crecimiento le dejemos será mejor.
CONFIGURACION 
Partiremos de una instalación básica del sistema, sin X-Windows, etc. Con una maquina configurada con 2 tarjetas de red. Lo primero que debemos hacer bajar los archivos del Squid e instalarlos, para eso solo nos tenemos que pasar al directorio de los ports y desde ahí realizar el proceso:
fbsd-mx-proxy# cd /usr/ports/www/squid24
fbsd-mx-proxy# make fetch
Ahora podemos editar el archivo de Makefile para incluir algunas opciones que nos pueden ser útiles:
CONFIGURE_ARGS= --bindir=${PREFIX}/sbin --sysconfdir=${PREFIX}/etc/squid
--localstatedir=${PREFIX}/squid
--enable-storeio="ufs diskd null"
--enable-removal-policies="lru heap"
#agregamos
--enable-delay-pools
--enable-snmp
--enable-ipf-transparent
--disable-ident-lookups
--enable-cache-digests
con esto logramos:
Activar el control de ancho de banda para usuarios
Activar la información de snmp del servidor proxy
La posibilidad de configurar el cache en modo transparente (se necesita ademas ipfilter instalado y configurado)
Desactivamos el código que realiza idents (RFC 931) para reducir la posibilidad de ataques de negación de servicio (DoS)
Activamos el método de compresión para los índices de contenido de los objetos de cache y con eso incrementamos un poco el tiempo de respuesta
Ahora solo compilamos normalmente:
fbsd-mx-proxy# make
fbsd-mx-proxy# make install
Y listo, ya tenemos el programa instalado, necesitamos crear un usuario squid con grupo de trabajo squid para ejecutar el proceso y cambiar los permisos del directorio de cache y de los logs a este usuario.
fbsd-mx-proxy# adduser
fbsd-mx-proxy# touch /usr/local/squid/logs/access.log
fbsd-mx-proxy# touch /usr/local/squid/logs/cache.log
fbsd-mx-proxy# touch /usr/local/squid/logs/store.log
fbsd-mx-proxy# chown –R squid:squid /usr/local/squid
Pasemos a editar el archivo principal de configuración del squid para especificar la ubicación de nuestro cache y el tamaño y los accesos de los usuarios:
fbsd-mx-proxy# ee /usr/local/etc/squid/squid.conf
http_port 3128 # default
cache_mem 64 MB # dependiendo del tamaño del cache
maximum_object_size 8192 KB # autoexplicatorio
cache_dir ufs /usr/local/squid/cache 8000 16 256 # cache de 8GB
cache_access_log /usr/local/squid/logs/access.log
cache_log /usr/local/squid/logs/cache.log
cache_store_log /usr/local/squid/logs/store.log
emulate_httpd_log on # para emular el formato de los logs de apache
#default
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 all # activar la salida para todos los usuarios
cache_mgr acosta@freebsd.org.mx # administrador del cache
cache_effective_user squid # usuario:grupo para el proceso
cache_effective_group squid
La ubicación del cache puede ser en cualquier parte del filesystem siempre y cuando se tengan permisos de escritura para el usuario que ejecuta el proceso de Squid, y se pueden tener tantos caches como sea necesario:
cache_dir ufs /usr/local/squid/cache 8000 16 256
cache_dir ufs /squid/cache 8000 16 256
cache_dir ufs /disco3/proxy 17000 32 256
Lo que necesitamos por último es inicializar el directorio de cache para que esté listo a almacenar los objetos, esto puede tardar un poco dependiendo del tamaño del cache.
fbsd-mx-proxy# squid –z
2002/01/23 12:00:46| Creating Swap Directories
Ya está listo! Solo tenemos que levantarlo
fbsd-mx-proxy# squid
Podemos revisar el archivo de cache.log para asegurarnos que el proceso levantó correctamente, de ser así nos debe mostrar algo como esto:
fbsd-mx-proxy# more /usr/local/squid/logs/cache.log
2002/01/25 09:27:43| Starting Squid Cache version 2.4.STABLE3 for i386--freebsd4.3...
2002/01/25 09:27:43| Process ID 23362
2002/01/25 09:27:43| With 2088 file descriptors available
2002/01/25 09:27:43| Performing DNS Tests...
2002/01/25 09:27:43| Successful DNS name lookup tests...
2002/01/25 09:27:43| DNS Socket created on FD 4
2002/01/25 09:27:43| Adding nameserver 192.168.1.179 from /etc/resolv.conf
2002/01/25 09:27:43| Adding nameserver 192.168.1.145 from /etc/resolv.conf
2002/01/25 09:27:43| Unlinkd pipe opened on FD 9
2002/01/25 09:27:43| Swap maxSize 1024000 KB, estimated 78769 objects
2002/01/25 09:27:43| Target number of buckets: 3938
2002/01/25 09:27:43| Using 8192 Store buckets
2002/01/25 09:27:43| Max Mem size: 16384 KB
2002/01/25 09:27:43| Max Swap size: 1024000 KB
2002/01/25 09:27:43| Rebuilding storage in /usr/local/squid/cache (CLEAN)
2002/01/25 09:27:43| Using Least Load store dir selection
2002/01/25 09:27:43| Set Current Directory to /usr/local/squid/cache
2002/01/25 09:27:43| Loaded Icons.
2002/01/25 09:27:43| Accepting HTTP connections at 0.0.0.0, port 3128, FD 11.
2002/01/25 09:27:43| Accepting ICP messages at 0.0.0.0, port 3130, FD 12.
2002/01/25 09:27:43| Accepting SNMP messages on port 3401, FD 13.
2002/01/25 09:27:43| WCCP Disabled.
2002/01/25 09:27:43| Ready to serve requests.
Los clientes que quieran utilizar el servicio de proxy deben apuntarse a la dirección del servidor en el puerto 3128 para navegar.
Conexión en modo transparente
Y que si tenemos 200 maquinas y no queremos ponernos a configurar una por una? Bueno, para eso también hay mas de una forma de pelar un cochino, pero se necesita que la máquina donde estemos ejecutando el squid tenga levantado algún método de NAT, en cuyo caso solo necesitamos modificar un poco la configuración que ya tenemos para agregar algunas opciones necesarias en squid.conf:
httpd_accel_port 80 # para crear conexiones trasparentes
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
En el archivo de configuración del servicio de NAT debemos agregar las reglas para que las peticiones dirigidas a tráfico web que lleguen las mande automáticamente al puerto donde está escuchando el squid, en lo personal prefiero usar ipfilter para NAT, así que en este caso el archivo a modificar es /etc/ipnat.rules:
rdr sis0 0.0.0.0/0 port 80 -> 127.0.0.1 port 3128 tcp
rdr sis0 0.0.0.0/0 port 443 -> 127.0.0.1 port 3128 tcp
Por supuesto hay que reiniciar los servicios de squid y de NAT para que la nueva configuración surta efecto:
fbsd-mx-proxy# squid –k shutdown
fbsd-mx-proxy# squid
fbsd-mx-proxy# ipnat –CFf /etc/ipnat.rules
Ahora ya no necesitamos configurar ningún cliente, todo el tráfico web que ocurra a través de nuestro servidor será instantáneamente redirigido a squid.
Squid es un excelente servidor proxy que puede ser utilizado en forma simple o de manera encadenada con otros servidores proxy para una mayor eficacia.
Este documento es autoria del
Alejandro Acosta