Squid es un proxy http que nos permite acelerar la navegación y disminuir el consumo de ancho de banda de nuestra conexión a internet. Una de las razones de instalar squid es eliminar la necesidad de bajar repetidas veces el mismo contenido de internet y por lo tanto, es algo muy recomendable cuando hablamos de una lan.
En esta primera parte veremos cómo instalar squid de forma simple, en las siguientes entregas veremos cómo instalar squid como proxy transparente y por último veremos cómo utilizar squid para acelerar nuestras páginas web instalandolo como proxy reverso.
Existe mucha literatura sobre la conveniencia o no de un proxy, la mayoría de lo escrito no es cierto ya que se basan en que Internet es dinámico, y lo es, pero no es tan dinámico como ellos quieren hacernos creer. Un proxy bien instalado es una gran ayuda y ventaja para los usuarios, uno mal instalado es un incordio, sin embargo, esto no difiere en nada a otra aplicación. Una de las quejas sobre el uso de los proxys radica en que el contenido está desfasado, bien, eso puede ser cierto (o no) en función de cómo se configure, además, las páginas no cambian cada microsegundo (normalmente).
Vamos a ver cómo configurar squid-cache para que nos permita tener el contenido fresco y, a su vez, nos permita ahorrarnos ancho de banda.
Compilación de squid-cache
Primero deberemos comprobar si tenemos un compilador de C/C++ disponible en el sistema, si hemos instalado Solaris completo plus OEM, entonces tendremos el compilar gcc en /usr/sfw/bin/gcc en OpenSolaris, tenemos un link en /usr/gnu/bin/cc a /usr/sfw/bin/gcc
root@opensolaris:/ # which ccLo primero que haremos será descargarnos el código fuente de squid-cache desde su página oficial http://www.squid-cache.org.
/usr/gnu/bin/cc
$ mkdir ~/squidConfiguración Compilación
$ cd ~/squid
$ wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE6.tar.gz
$ gzip -dc squid-2.7.STABLE5.tar.gz | tar xvpf -
Vamos a configurar la compilación de squid para tener algunas opciones que por defecto no se activan. Simplemente comentaremos algunas de las opciones que hemos activado y, por qué.
- --enable-cache-digest habilita el hashing de la caché
- --enable-delay-pools habilita la configuración de anchos de banda
- --enable-http-violations habilita las violaciones del protocolo HTTP
- --enable-store-io habilita modos de almacenamiento UFS y DISKD
$ ./configure --helpUna vez decidido el tipo de configuración, lanzaremos el comando configure y posteriormente el make
$ cd squid-2.7.STABLE6Una vez configurada la instalación, lanzaremos el comando make para proceder a la compilación
$ ./configure \
--with-large-files \
--with-pthreads \
--enable-follow-x-forwarded-for \
--enable-default-err-language=Spanish \
--enable-cache-digests \
--enable-delay-pools \
--enable-http-violations \
--prefix=/usr/local/squid \
--enable-x-accelerator-vary \
--with-maxfd=8192 \
--enable-storeio=ufs,diskd
$ makeSi todo ha ido bien, ya tenemos compilado nuestro squid, el siguiente paso será instalarlo.
Instalación de squid-cache
En función de si hemos hecho la compilación con root o no, lo instalaremos de la siguiente forma:
Si lo hemos compilado como root o con un usuario que tenga permisos de escritura en el directorio definido en --prefix
# cd squid-2.7.STABLE6Si lo hemos compilado con otro usuario (ya que no tendrá permisos para crear el directorio que tengamos definido en --prefix)
# make && make install
$ cd squid-2.7.STABLE6Una vez compilado he instalado, crearemos el grupo y usuario encargado de ejecutar squid, en nuestro caso utilizaremos squid como nombre de grupo y usuario.
$ make
$ su -
# cd squid-2.7.STABLE6
# make install
# groupadd squidA continuación vamos a editar el archivo de configuración de squid que se encuentra en $SQUID_HOME/etc/squid.conf los principales parámetros de configuración son los siguientes:
# useradd -g squid -s /bin/false -d /dev/null squid
# passwd -l squid
- visible_hostname nombre_que_queremos_para_el_proxy
- cache_effective_user _nombre_de_usuario_dueño_del_proceso_
- cache_effective_group _grupo_del_dueño_del_proceso_
- http_port _puerto_de_squid_
- cache_dir _tipo_almacenamiento_ _ubicación_ _tamaño_cache_ 16 256
- strip_query_terms _guardar_log_sin_parametros_
acl ALL src 0.0.0.0/0.0.0.0Este nos permite definir varias reglas de control, sin embargo, si necesitamos incluir muchas cadenas o configuraciones más extensas entonces, squid nos permite definir un acl como una entrada de fichero utilizando la siguiente configuración (Esta configuración tiene la definición de un conjunto de IPs en el archivo bloqued_ips.acl)
acl LAN src 192.168.1.0/255.255.255.0
http_access allow LAN
http_access deny ALL
acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
http_access deny blacklist
# cat /usr/local/squid/etc/acls/bloqued_ips.aclA continuación está el archivo de configuración completo de squid con varios sistemas de control para impedir el acceso a webs p2p, messenger, etc. Puede encontrar más información sobre la configuración de acls en la documentación oficial de squid-cache http://wiki.squid-cache.org/SquidFaq/SquidAcl
192.168.1.30
192.168.1.31
192.168.1.32
# vi /usr/local/squid/etc/squid.confCreación del directorio de swap
############################################
## SQUID.CONF
##
## Description:
## - definicion de confiruacion de SQUID 2.7.x
############################################
############################################
## PARAMETROS ADMINISTRATIVOS
############################################
visible_hostname proxy
cache_effective_user squid
cache_effective_group squid
httpd_suppress_version_string on
strip_query_terms false
############################################
## PARAMETROS DE RED
############################################
http_port 3128
############################################
## PARAMETROS CACHE
############################################
cache_dir ufs /usr/local/squid/var/cache 64000 16 256
coredump_dir /usr/local/squid/var/run
pid_filename /usr/local/squid/var/run/squid.pid
cache_log /dev/null
cache_store_log /dev/null
cache_access_log /usr/local/squid/var/logs/access.log
emulate_httpd_log on
log_ip_on_direct on
hierarchy_stoplist cgi-bin ?
debug_options ALL, 2
############################################
## PARAMETRIZACION DE LA CACHE MEMORIA
############################################
memory_replacement_policy lru
############################################
## PARAMETROS TAMA!NO CACHE
############################################
cache_mem 2048 MB
cache_swap_low 98
cache_swap_high 99
maximum_object_size 2048 MB
maximum_object_size_in_memory 128 KB
############################################
# FTP
############################################
ftp_user anonymous@sfchildren.com
############################################
## PARAMETRIZACION ERRORES
############################################
error_directory /usr/local/squid/share/errors/Spanish
err_html_text support@sfchildren.com
############################################
## REFRESH PATTERN
############################################
# Debian
refresh_pattern -i \.deb$ 129600 100% 129600
refresh_pattern -i \.gz$ 129600 100% 129600
refresh_pattern -i \.bz2$ 129600 100% 129600
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 43200
refresh_pattern -i \.tiff?$ 14400 80% 43200
refresh_pattern -i \.bmp$ 14400 80% 43200
refresh_pattern -i \.jp?g$ 14400 80% 43200
refresh_pattern -i \.xbm$ 14400 80% 43200
refresh_pattern -i \.png$ 14400 80% 43200
refresh_pattern -i \.wrl$ 14400 80% 43200
refresh_pattern -i \.ico$ 14400 80% 43200
refresh_pattern -i \.pnm$ 14400 80% 43200
refresh_pattern -i \.pbm$ 14400 80% 43200
refresh_pattern -i \.pgm$ 14400 80% 43200
refresh_pattern -i \.ppm$ 14400 80% 43200
refresh_pattern -i \.rgb$ 14400 80% 43200
refresh_pattern -i \.ppm$ 14400 80% 43200
refresh_pattern -i \.rgb$ 14400 80% 43200
refresh_pattern -i \.xpm$ 14400 80% 43200
refresh_pattern -i \.xwd$ 14400 80% 43200
refresh_pattern -i \.pict?$ 14400 80% 43200
# Movies
refresh_pattern -i \.mov$ 14400 80% 43200
refresh_pattern -i \.mp?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
# Sounds
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
# Archives
refresh_pattern -i \.sit$ 14400 80% 43200
refresh_pattern -i \.zip$ 14400 80% 43200
refresh_pattern -i \.hqx$ 14400 80% 43200
refresh_pattern -i \.exe$ 14400 80% 43200
refresh_pattern -i \.arj$ 14400 80% 43200
refresh_pattern -i \.lzh$ 14400 80% 43200
refresh_pattern -i \.lha$ 14400 80% 43200
refresh_pattern -i \.cab$ 14400 80% 43200
refresh_pattern -i \.rar$ 14400 80% 43200
refresh_pattern -i \.tar$ 14400 80% 43200
refresh_pattern -i \.gz$ 14400 80% 43200
refresh_pattern -i \.z$ 14400 80% 43200
refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 43200
refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 43200
# Data files
refresh_pattern -i \.txt$ 14400 80% 43200
refresh_pattern -i \.pdf$ 14400 80% 43200
refresh_pattern -i \.doc$ 14400 80% 43200
refresh_pattern -i \.rtf$ 14400 80% 43200
refresh_pattern -i \.tex$ 14400 80% 43200
refresh_pattern -i \.latex$ 14400 80% 43200
# Java-type objects
refresh_pattern -i \.class$ 14400 80% 43200
refresh_pattern -i \.js$ 14400 80% 43200
refresh_pattern -i \.class$ 14400 80% 43200
# Web-type objects
refresh_pattern -i \.css$ 10 20% 4320
refresh_pattern -i \.html?$ 10 20% 4320
refresh_pattern \/$ 10 20% 4320
# Para evitar problemas con scripts .do
refresh_pattern -i \.do$ 0 0% 1440
# Default
refresh_pattern . 0 20% 4320
############################################
## CONFIGURACIONES ACLs
############################################
acl all src 0.0.0.0/0.0.0.0
############################################
## LAN
############################################
acl lan-isp src 192.168.1.0/255.255.255.0
############################################
## ACCESO LOCALHOST
############################################
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
############################################
## NO CACHE QUERYs
############################################
acl QUERY urlpath_regex cgi-bin \?
acl QUERY urlpath_regex gateway.dll \?
acl QUERY urlpath_regex gateway \?
# No cachemaos los cgi
no_cache deny QUERY
############################################
## ACCESO AL SISTEMA DE CONFIGURACION
############################################
acl manager proto cache_object
############################################
## DIRECCIONES IP BLOQUEADAS POR ENCIMA DE
## LO GENERAL
############################################
acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
acl blacklisturl url_regex -i "/usr/local/squid/etc/acls/bloqued_url.acl"
http_access deny blacklisturl
http_access deny blacklist
############################################
## URL SIN CACHE
###########################################
acl urlnocache url_regex -i "/usr/local/squid/etc/acls/no_cache.acl"
no_cache deny urlnocache
##############################################
# URL PROHIBIDAS P2P
##############################################
acl bad_url_p2p url_regex -i "/usr/local/squid/etc/acls/webs_p2p.acl"
http_access deny bad_url_p2p
##############################################
# EXEPCIONES URLS PROHIBIDAS
##############################################
acl bad_url_exceptions url_regex -i "/usr/local/squid/etc/acls/bad_url_exceptions.acl"
http_access allow bad_url_exceptions
##############################################
## URL DENEGADAS
##############################################
acl bad_url url_regex -i "/usr/local/squid/etc/acls/bad_url.acl"
http_access deny bad_url
##############################################
## EXECEPCIONES PALABRAS PROHIBIDAS
##############################################
acl bad_query_exceptions urlpath_regex -i "/usr/local/squid/etc/acls/bad_words_exceptions.acl"
http_access allow bad_query_exceptions
##############################################
# PALABRAS PROHIBIDAS
##############################################
acl bad_query urlpath_regex -i "/usr/local/squid/etc/acls/bad_words.acl"
http_access deny bad_query
##############################################
# DOMINIOS PROHIBIDAS
##############################################
acl bad_domain dstdom_regex -i "/usr/local/squid/etc/acls/bad_domains.acl"
http_access deny bad_domain
##############################################
# Puertos Seguros
##############################################
acl SSL_ports port 443-563 # SSL
acl Safe_ports port 80 # http
acl Safe_ports port 20 21 # ftp
acl Safe_ports port 1025-65535 # unregistered ports
# Permitimos utilizar el CONNECT a puertos seguros, hemos deshabilitado el acces
# para POP y SMTP puesto que nos pueden ocasionar fallos de seguridad, ademas, nos
# pueden utilizar como SPAMMER's
acl CONNECT method CONNECT
# Permitimos acceder al sistema de configuracion solo desde LOCALHOST
http_access allow manager localhost
http_access deny manager
# Cualquier llamada a puertos que no sean seguros denegada
http_access deny !Safe_ports
http_access deny CONNECT !Safe_ports
##############################################
# ACCESO A LA CACHE
##############################################
http_access allow lan-isp
http_access allow localhost
http_access deny all
Una vez configurado el sistema, debemos crear el sistema de archivos (swap) para ello deberemos utilizar el argumento -z, pero antes debemos configurar correctamente el sistema de archivos para asignar el usuario y grupo, definidos en cache_efective_user y cache_efective_group
# cd /usr/local/squidA continuación vamos a verificar que el sistema está correctamente configurado, para ello utilizaremos la opción parse que nos evaluará la estructura del archivo de configuración
# mkdir -p /usr/local/squid/var/cache
# chown -R squid:squid /usr/local/squid/var/cache
# cd var
# mkdir run
# chown -R squid:squid logs
# chmod 750 logs
# /usr/local/squid/sbin/squid -z
# /usr/local/squid/sbin/squid -k parseIniciar el Servicio de squid
Ya tenemos todo preparado para poder lanzar nuestro servicio, para ello, utilizaremos el comando RunCache que se encuenta en $SQUID_HOME/bin/RunCache
# /usr/local/squid/bin/RunCache &Verificar Funcionamiento
Ya podemos verificar el correcto funcionamiento de nuestro servidor proxy, para ello, utilizaremos el comando squidclient que se encuentra en $SQUID_HOME/bin de la siguiente forma:
$ /usr/local/squid/bin/squidclient -h localhost http://www.sun.comPodemos ver cómo en $SQUID_HOME/var/logs/access.log se nos produce una nueva entrada
# tail -f /usr/local/squid/var/logs/acess.logResumen
En esta entrega hemos visto cómo configurar squid-cache para que funcione como proxy http de una forma sencilla sobre Solaris 10, en las siguientes entregas entraremos en la configuración con mayor detalle y de cómo podemos sacar el máximo partido a nuestro nuevo proxy.
Referencias
Hola,
ResponderEliminarTengo un Squid apuntando a un proxy corporativo. Ahora ellos cambiaron ese proxy, por un archivo de conf. automatica (.pac)
Yo puedo configurar ese .pac en mi squid?
Gracias!
Gastón.
Hola Gastón,
ResponderEliminarMe imagino que cuando dices apuntando a un proxy corporativo, es porque tienes configurado tu SQUID algo así:
cache_peer _proxy_ parent _puerto_ _icp_ proxy-only no-query
Bien, ahora ellos han cambiado la configuración de SQUID y notifican el acceso a los clientes mediante un archivo de configuración automática PAC. OK, no hay problema ya que los archivos de configuración (PAC) están "pensados" para clientes, y no tienen por qué afectarte.
Otra cosa es que estén "continuamente" modificando el archivo PAC y te devuelva uno cada vez, entonces, tenemos un problema.
Respondiendo a tu pregunta, no, no es posible configurar un SQUID para que use un PAC -al menos de forma sencilla- y de forma automática.
Lo más recomendable es utilizar ICP (Internet Cache Protocol) para que ambos -tu squid y el proxy corporativo- "hablen", si no es posible, tendrás que configurar el valor de cache_peer utilizando el resultado del archivo PAC.
Por ejemplo, si el archivo PAC te devuelve algo así:
function FindProxyForURL(url, host){
return "PROXY proxy1:3128";
}
Tu configuración de SQUID será:
cache_peer proxy1 parent 3128 0 proxy-only no-query
Espero que te sirva de ayuda,
Un Saludo,
Urko