Instalación Proxy Squid

En este artículo aprenderemos a instalar en Linux uno de los proxies más utilizados y extendidos hoy en día. Squid implementa un servidor proxy junto con un demonio para cache de páginas Web permitiendo así obtener una aceleración de nuestra navegación al almacenar en su cache, peticiones repetidas a servidores DNS. Como veremos, su instalación no es extremadamente complicada pero si no conocemos los cuatro pasos básicos tendremos que dedicar más tiempo del necesario hasta conseguir que todo funcione correctamente.

Como podremos ver, hay algunos errores y problemas comunes que mucha gente ha tenido que sufrir y dedicar algo de tiempo a resolverlos. En este pequeño manual de instalación nombraremos los más típicos y mostraremos las pautas para solucionarlos y hacer que la instalación sea lo más sencilla posible.

Lo primero que debemos hacer es descargar Squid. Para ello nos dirigiremos a su página Web y escogeremos la última versión estable que encontremos.

     Descargar Squid

Este artículo está basado en la última versión que existe hoy en día (Squid 3.0 Stable9). Si esta es la versión que queréis descargar podéis hacerlo directamente desde:

     Descargar Squid 3.0 Stable

 

Una vez lo hemos descargado desempaquetaremos el tar.gz, nos introduciremos en el directorio obtenido y ejecutaremos el archivo “configure

     > ./configure

 

En este momento es posible que encontremos el siguiente error:

checking for gcc… gcc

checking for C compiler default output file name…

configure: error: C compiler cannot create executables

See `config.log’ for more details.

 

Si este es nuestro caso, instalaremos g++ para solucionarlo. Si estamos utilizando Ubuntu o tenemos instalado apt-get (o similar) bastara con introducir el siguiente comando:

     > apt-get install g++

 

Una vez instalado volveremos a ejecutar configure y veremos cómo dicho problema ha sido solucionado.

En este momento ya tenemos Squid configurado y ya podemos crear los binarios necesarios para instalarlo sin problemas. Ejecutaremos make para crear dichos binarios y veremos cómo se crea el directorio src/squid.

     > make

 

Este proceso puede tardar un poco así que podemos tomarlo con calma.

Como hemos dicho, make nos creará los archivos binarios pero no instalara Squid. Para hacerlo, deberemos ejecutar make install el cual nos creará los directorios /usr/local/squid/bin y /usr/local/squid/etc

     > make install

 

En este momento ya tenemos Squid correctamente instalado. Para iniciarlo introduciremos:

     > /usr/local/squid/sbin/squid -N -d 1 -D

De esta forma podremos ver los detalles del proceso y los posibles errores que puedan surgir en esta primera ejecución. En futuras ejecuciones bastaría con introducir /usr/local/squid/sbin/squid

 

Uno de los errores habituales en este punto y que ha causado algún dolor de cabeza a más de uno es el siguiente:

FATAL: Could not determine fully qualified hostname. Please set ‘visible_hostname’

Squid Cache (Version 3.0.STABLE9): Terminated abnormally.

CPU Usage: 0.020 seconds = 0.020 user + 0.000 sys

Maximum Resident Size: 0 KB

Page faults with physical i/o: 0

 

Para solucionar esto, bastará con dirigirnos al archivo de configuración de Squid situado en “/etc/squid/squid.conf” e insertar en el tag “visible_hostname” el nombre de nuestro equipo.

Nota: Para facilitar la búsqueda de etiquetas, si desde la línea de comandos utilizamos vi (o vim) para realizar las modificaciones en el archivo de configuración, podremos utilizar “/palabra_a_buscar” para realizar búsquedas en el documento abierto. En este caso, introduciremos “/visible_hostname” y encontraremos esa cadena en el documento. Para encontrar la siguiente solo debemos pulsar “n”.

# TAG: visible_hostname

# If you want to present a special hostname in error messages, etc,

# define this. Otherwise, the return value of gethostname()

# will be used. If you have multiple caches in a cluster and

# get errors about IP-forwarding you must set them to have individual

# names with this setting.

#

#Default:

visible_hostname nombreEquipo

 

Introduciendo esto, veremos cómo hemos solucionado el problema anterior. Pero esto no es todo si volvemos a ejecutar Squid como usuario root es posible que obtengamos el siguiente mensaje de error:

WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log

/usr/local/squid/var/logs/cache.log: Permission denied

messages will be sent to ‘stderr’.

WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log

/usr/local/squid/var/logs/cache.log: Permission denied

messages will be sent to ‘stderr’.

2008/11/01 13:28:44| WARNING: Closing open FD 2

2008/11/01 13:28:44| Starting Squid Cache version 3.0.STABLE9 for i686-pc-linux-gnu…

2008/11/01 13:28:44| Process ID 31136

2008/11/01 13:28:44| With 1024 file descriptors available

2008/11/01 13:28:44| DNS Socket created at 0.0.0.0, port 49479, FD 4

2008/11/01 13:28:44| Adding nameserver 80.58.0.33 from /etc/resolv.conf

2008/11/01 13:28:44| Adding nameserver 80.58.32.97 from /etc/resolv.conf

FATAL: Cannot open ‘/usr/local/squid/var/logs/access.log’ for writing.

    The parent directory must be writeable by the

    user ‘nobody’, which is the cache_effective_user

    set in squid.conf.

Squid Cache (Version 3.0.STABLE9): Terminated abnormally.

CPU Usage: 0.020 seconds = 0.008 user + 0.012 sys

Maximum Resident Size: 0 KB

Page faults with physical i/o: 0

 

Esto es debido a que de forma predeterminada, si Squid es llamado como root, éste será ejecutado como usuario nobody, con lo cual, no tendrá los permisos necesarios para tener acceso al directorio de logs. Una posible solución, es cambiar el usuario “nobody” por otro que tengamos en nuestro sistema (o crear un usuario expresamente) y darle los permisos necesarios sobre el directorio de logs. Una posible solución es mostrada a continuación.

Cambiamos el usuario predeterminado en el archivo de configuración de Squid:

# TAG: cache_effective_user

# If you start Squid as root, it will change its effective/real

# UID/GID to the user specified below. The default is to change

# to UID of nobody.

# see also; cache_effective_group

#

#Default:

cache_effective_user nombreUser

 

Y damos permisos en el directorio de logs a ese usuario. En este ejemplo lo hemos puesto como propietario pero solo con concederle permiso sería necesario:

     # chown nombreUser /usr/local/squid/var/logs/

 

Perfecto, ahora ya no obtenemos este error pero… Es posible que encontremos uno más (si hasta el momento no has obtenido ninguno de los errores anteriores, eres un/a ti@ afortunad@…).

El error en cuestión es el siguiente:

FATAL:     Failed to verify one of the swap directories, Check cache.log

    for details. Run ‘squid -z’ to create swap directories

    if needed, or if running Squid for the first time.

 

Para solucionar esto, deberemos crear los directorios de swap introduciendo el comando:

     # /usr/local/squid/sbin/squid -z

2008/11/01 13:32:41| Creating Swap Directories

FATAL: Failed to make swap directory /usr/local/squid/var/cache: (13) Permission denied

 

Vaya, por lo visto aparece un nuevo error, tranquilo, este ya es el último… El único problema que tenemos aquí es que no encuentra dichos directorios y, por lo tanto, debemos crearlos a mano nosotros mismos y darle permiso al usuario especificado anteriormente en el archivo de configuración.

     # mkdir /usr/local/squid/var/cache

     # chown nombreUser /usr/local/squid/var/cache/

 

Ahora si:

     # /usr/local/squid/sbin/squid -z

2008/11/01 13:33:32| Creating Swap Directories

2008/11/01 13:33:32| /usr/local/squid/var/cache exists

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/00

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/01

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/02

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/03

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/04

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/05

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/06

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/07

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/08

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/09

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0A

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0B

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0C

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0D

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0E

2008/11/01 13:33:32| Making directories in /usr/local/squid/var/cache/0F

 

Iniciamos ahora squid y cruzamos los dedos…

     # /usr/local/squid/sbin/squid -N -d 1 -D

 

Parece que funciona! Ahora que vemos que todo funciona correctamente podemos detenerlo y darle la configuración mínima para que funcione correctamente y podamos empezar a usarlo. Vamos a detener Squid y procederemos a realizar la configuración mínima:

 

Para detener Squid:

     # /usr/local/squid/sbin/squid -k shutdown

 

Vamos ahora a configurar los parámetros básicos para empezar a utilizar nuestro proxy. Para ello, debemos indicarle que puerto debe escuchar, es decir, a que puerto deberán conectarse los equipos clientes que vayan a usar nuestro proxy.

Por defecto utilizaremos el puerto 3128 con lo que deberemos acceder de nuevo al archivo de configuración, buscar la etiqueta http_port y añadir el puerto a continuación

http_port 3128

 

Seguidamente añadiremos una ACL (access list) que nos informará sobre qué red conectada al servidor será la que tendrá permiso para utilizar nuestro proxy. Para ello añadiremos en el lugar correspondiente del archivo de configuración:

acl localnet src 192.168.1.0/255.255.255.0

 

Esta línea será la usada en la mayoría de casos pero dependerá de cada red.

Finalmente, diremos a Squid que acepte la acl con nombre “localnet” creada anteriormente:

 

# Example rule allowing access from your local networks.

# Adapt localnet in the ACL section to list your (internal) IP networks

# from where browsing should be allowed

http_access allow localnet

 

Y rechazaremos el resto

http_access deny all

 

Además deberemos añadir:

icp_access allow localnet

 

Y nada más, en estos momentos ya podemos salir del archivo de configuración, ejecutar Squid y empezar a utilizarlo. Recordad que para que los equipos utilicen nuestro proxy deberemos informar a sus navegadores sobre la dirección IP de nuestro Proxy y su puerto predeterminado.

Anuncios

One Response to Instalación Proxy Squid

  1. Pingback: Aitor Rigada » Squid Rewrite Program

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: