Cómo Instalar un Servidor Proxy en Linux con Squid

Un servidor Proxy, es básicamente un dispositivo o aplicación que hace las veces de intermediario entre los equipos de una red local, y el acceso a Internet. Una vez instalado el servidor proxy, es posible darle permiso a todos o solo a algunos dispositivos de la red para navegar hacia internet a través de el. Esto aumenta en gran medida la seguridad de la información, y el ancho de banda ya que se crea una caché de los sitios web visitados y la navegación aumenta en un buen porcentaje su velocidad para los demás equipos. Para una mayor información sobre la definición de lo que es un Proxy y como funciona, recomiendo leer este artículo publicado por es.kioskea.net.

En este tutorial, se muestra en varios y sencillos pasos como montar un servidor Proxy en un sistema operativo Linux, usando Squid3 como herramienta de instalación. Fue probado en Ubuntu 9.10, 8.10 y 9.04. Funciona para cualquier distribución basada en Ubuntu, como Linux Mint u otras.

Importante: Los comandos mostrados a lo largo de este tutorial tienen al inicio el “sudo” para ejecutarlos como super usuario. Pueden omitirse ejecutando en la consola el comando “sudo -i” antes de comenzar el manual para hacer todo como administrador. También se debe tener en cuenta que la ubicación de los archivos cambian para todos, en mi caso la mayoría de cosas las guardé en mi Escritorio (/home/juan/Escritorio). Esto cambia para cada uno, y cambian también los códigos de ejecución. Por último, recomiendo mucha paciencia y dedicación para terminar el manual lo más rápido posible y su servidor quede al mismo tiempo bien configurado y funcional! :D.

Manual para instalar Proxy con Squid3.

  • Instalar los compiladores de C y el mysql server necesario para guardar los usuarios y contraseñas con los siguientes comandos:

apt-get install gcc g++ make

apt-get install mysql-server

Hay que tener en cuenta que al instalar el Mysql se nos pedirá una contraseña. Recuerden muy bien la contraseña que van a escribir para que posteriormente no sea confundida con otras que se deben asignar en el procedimiento de la instalación. En mi caso la contraseña que puse fue ubuntu:

  • El siguiente paso es crear la base de datos e ingresar el o los usuarios a usar:

Primero entramos al mysql con el comando:

sudo mysql -p

Luego creamos la base de datos llamada “squid”:

create database squid;

use squid;

El comando use squid, sirve para usar la base de datos que acabamos de crear como la actual, para poder actualizarla.

  • El siguiente paso es crear la tabla donde se almacenará la información de los usuarios que navegarán a través del proxy. Se usa el siguiente comando:

CREATE TABLE `passwd` (

`user` varchar(32) NOT NULL default ”,

`password` varchar(35) NOT NULL default ”,

`enabled` tinyint(1) NOT NULL default ‘1’,

`fullname` varchar(60) default NULL,

`comment` varchar(60) default NULL,

PRIMARY KEY (`user`)

);

  • Luego de esto se insertan los datos del usuario en la tabla anteriormente creada, con el siguiente comando:

insert into passwd values(‘usuario-linux’,’prueba-linux’,1,’prueba de usuario’,’Esto es una prueba’);

Para este caso “usuario-linux” es el nombre de usuario y “prueba-linux” es la contraseña. Estos dos datos son los primordiales para el seguimiento del manual, así que se deben tener muy en cuenta. Si se quieren agregar más usuarios, se debe repetir el comando pero con nombres de usuario diferentes.

  • Por ultimo salimos del prompt de mysql con el comando:

exit

Recomiendo descargar el archivo directamente al escritorio de su Distribución de Linux para una mejor ubicación y seguimiento del manual.

Después de esto ingresamos al directorio de descarga, en mi caso (cd /home/juan/Escritorio) y lo descomprimimos con el siguiente comando.

sudo tar -zxvf squid-3.1.11-20110317.tar.gz

Vamos a ingresar al directorio que acabamos de descomprimir con el comando:

cd squid-3.1.11-20110317

Una vez allí, se procede a compilar y entrar al modo de configuración del Squid para generar los archivos que necesitamos. Este procedimiento se hace con 3 comandos, que se ejecutan uno tras otro. Se debe tener en cuenta que el tiempo de ejecución de cada comando puede tomar algunos minutos por lo que hay que ser paciente. Los comandos son los siguientes:

./configure –enable-basic-auth-helpers=DB

sudo make

sudo make install

Luego de algunos minutos de haber terminado con el procedimiento anterior, copiamos el archivo squid_db_auth que se encuentra en /usr/local/squid/libexec/ al Escritorio o un lugar que recuerdes fácilmente en tu pc:

sudo cp /usr/local/squid/libexec/squid_db_auth /home/tu_nombre/Escritorio

Luego se borran los archivos de configuración del Squid:

sudo rm -rf squid-3.1.11-20110317

sudo rm -rf /usr/local/squid

El siguiente paso es instalar el Squid3 y mover de nuevo el archivo de configuración que sacamos al escritorio al compilar (squid_db_auth), al directorio que se especifica en el segundo comando:

sudo apt-get install squid3

sudo mv /home/juan/Escritorio/squid_db_auth  /usr/lib/squid3

Ahora configuramos el archivo de configuración del squid3. Este archivo debe quedar muy bien configurado, ya que de el depende que funcione o no nuestro servidor Proxy. Se deben adicionar a este archivo las siguientes líneas de código y justo donde se indicará:

Para arbir el archivo de configuración se ejecuta el siguiente comando:

sudo gedit /etc/squid3/squid.conf

Una vez abierto el archivo, habrán mas de 4500 líneas, en donde un 95% son comentarios y el resto son códigos útiles para la funcionalidad del Squid. Dentro de los comentarios se encuentran muchas claves para una futura configuración de su Squid y ejemplo de como pueden hacerlo. Para este manual vamos a colocar solo lo necesario para la correcta utilización del Proxy. Las siguientes son las líneas que debemos agregar al archivo de configuración:

Al rededor de la línea 3020 se encuentra el siguiente texto:

#  TAG: unique_hostname
#    If you want to have multiple machines with the same
#    ‘visible_hostname’ you must give each machine a different
#    ‘unique_hostname’ so forwarding loops can be detected.
#
#Default:
# none

Justo encima de estos comentarios, si no está, se debe colocar la siguiente línea:

visible_hostname localhost

Al rededor de la línea 88 se encuentra el siguiente texto:

#    “children” numberofchildren
#    The number of authenticator processes to spawn. If you start too few
#    Squid will have to wait for them to process a backlog of credential
#    verifications, slowing it down. When password verifications are
#    done via a (slow) network you are likely to need lots of
#    authenticator processes.
#    auth_param basic children 5

Justo encima de estos comentarios, se deben colocar las siguientes líneas de código:

auth_param basic program /usr/lib/squid3/squid_db_auth –user root –password ubuntu –plaintext –persist
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute
auth_param basic casesensitive off

En la primera línea de este bloque, nos autenticamos en la base de datos existente y se llama el archivo que copiamos desde la compilación. Deben reemplazar root y ubuntu por su usuario y su contraseña de acceso al Mysql (Estos NO son los datos que introdujimos en la base de datos para el Squid, sino los de acceso al MySQL como tal)

Al rededor de la línea 594, se encuentra el siguiente texto:

#Recommended minimum configuration:
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

Justo debajo de estas líneas se deben agregar los siguientes comandos:

acl db-auth proxy_auth REQUIRED
http_access allow db-auth
http_access allow localhost
http_access deny all
http_port 192.168.1.66:3128

Allí requerimos obligatoriamente la autenticación para poder navegar a través del proxy, damos acceso al localhost, y se deniega el acceso a todos los que no se autentiquen previamente. La última línea permite que el servidor sea accesible desde la red local donde se encuentre, por lo que es vital colocarlo. Deben reemplazar la dirección que allí se muestra por la de su equipo servidor (Averíguala con el comando ifconfig). El puerto 3128 se deja así ya que es el por defecto del squid. Al terminar guardamos el archivo y lo cerramos.

Luego de esto solo basta con reiniciar el servicio:

sudo /etc/init.d/squid3 restart

Para probarlo, hacemos la autenticación con el siguiente comando, todo va en una sola línea:

sudo /usr/lib/squid/squid_db_auth –user root –password ubuntu –plaintext –persist

Recuerden cambiar root y ubuntu por su usuario y clave de MySQL. Al ejecutar el comando no pasa nada, y la linea de la consola queda en blanco. Allí escribiremos el usuario del Squid seguido de la contraseña separados por un espacio. En este caso el unico usuario creado fue usuario-linux.

Debe quedar así:

Al salir OK todo está perfecto.

Laboratorio con los equipos y los navegadores:

Hasta acá, el servidor ya está montado y está funcionando bien, si se han seguido bien los pasos. Ahora vamos a hacer el trabajo desde los navegadores. En mi caso tengo una red administrada por un Router inalámbrico, que cuenta además con 4 puertos Ethernet. El servidor (Con SO Ubuntu) se encuentra conectado a un puerto Ethernet, y tengo a mi disposición dos portátiles (Con Windows) que acceden a internet mediante la red inalámbrica.

Para todos los casos el procedimiento es igual, accedemos en esta ocasión a Firefox y hacemos lo siguiente:

Entramos al navegador, y escogemos del menú Editar/preferencias (En firefox con Windows se escoge Herramientas/opciones), luego escogemos en avanzado, y en la pestaña de red, damos click a configuración, al frente de conexión:

Allí habilitamos el proxy, y colocamos nuestra dirección ip, es decir la del servidor que acabamos de instalar, el puerto por defecto del proxy que es 3128 y esto es todo.

Al tratar de acceder a una página en internet desde cualquier equipo al que hayamos realizado la anterior configuración en el navegador, nos saldrá la siguiente pantalla:

Se debe tener en cuenta que para que el proxy funcione, todos los equipos que estén detrás de el, tienen que estar en la misma red. Espero que este tutorial sea de mucha ayuda para ustedes y para una mejor resolución de las dudas que se puedan presentar, les recomiendo publicarlas en el Foro donde se puso como tema este artículo.

Saludos!

Puedes seguir los comentarios de esta entrada a través de RSS 2.0 Usted puede dejar un comentario, o trackback.

Acerda de Juan Sebastián

Ingeniero de Sistemas y Telecomunicaciones de la Universidad de Manizales (Colombia) con énfasis en Redes y Seguridad Informática. Creador y administrador de ComuSOFT.com y apasionado del mundo de las redes de telecomunicaciones, el Software libre, Linux y la Seguridad de la Información. Actualmente me desempeño como Help Desk Engineer en una importante Multinacional de Seguridad Informática en Latino América. En lo que pueda colaborarte, lo haré con gusto!
Escribe un Comentario

4 Respuestas

  • Jonathan says:

    Hola Juan.
    Antes que nada gracias por el tutorial.

    Ahora…escribo porque tengo un problema, al crear la tabla, ya que recibo este error:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘”,

    `password` varchar(35) NOT NULL default ”,

    `enabled` tinyint(1) NOT NUL’ at line 3

    Pense que podría ser un problema de codificación al copiar y pegar, pero probé todo lo que se me ocurrió sin éxito.

    Gracias de antemano,

    Jonathan

  • Hola jonathan, probaste cambiar todas las comillas simples y dobles?? A veces al copiar y pegar las comillas cambian por tildes y queda con error de sintaxis, cámbialas todas. Cuéntame como te va y si sigue el error escríbeme de nuevo. Saludos

  • Angel says:

    Gracias por el tutorial, estaba buscando específicamente como implementar una DB con squid, para no tener que reiniciar el servicio cada vez que se agregara un usuario.

    Una pregunta:

    ¿ En el access.log de squid, saldra entonces el usuario y la pagina que esta viendo? Por que cuando se maneja por IP, los datos son la IP + pagina, pero me interesa saber si cambia el formato en que se presenta la información.

    P.D:

    Jonathan, no se tu, pero en mysql al menos los nombres de las columnas no las pongo con comillas, sino

    user varchar(10) not null primary key,
    password varchar(20) not null;

    Gracias de antemano.

  • marco says:

    el codifo que piden es:

    CREATE TABLE `passwd` (
    `user` varchar(32) NOT NULL default ”,
    `password` varchar(35) NOT NULL default ”,
    `enabled` tinyint(1) NOT NULL default ‘1’,
    `fullname` varchar(60) default NULL,
    `comment` varchar(60) default NULL,
    PRIMARY KEY (`user`)
    );



Escribe un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *