Page 1

Servidor Proxy Web en Linux (Squid) 1

Introducción

La palabra proxy, en términos informáticos, tiene un sentido de intermediario. Así, un proxy suele ser un software que se coloca entre un equipo cliente y otro servidor, interceptando las comunicaciones entre ambos. De ellos, el más famoso es el servidor proxy web (comúnmente conocido solamente como proxy). Este proxy Intercepta la navegación de los clientes por páginas web, por varios motivos posibles: seguridad, rendimiento, anonimato, etc. Aunque también existen proxies para otros protocolos, como el proxy de FTP.

2

Squid: servidor proxy web

Squid es el servidor proxy web más conocido en Linux. La función de squid es centralizar el tráfico de una red local hacia el exterior (Internet). Sólo el equipo que incorpora el servicio proxy debe disponer de conexión a Internet y el resto de equipos salen a través de él. ¿Qué es un servidor proxy-caché? Es un servidor proxy situado entre la máquina del usuario y otra red (a menudo Internet), que actúa como protección separando las dos redes y como zona caché, acelerando el acceso a páginas web. Squid además de funcionar como proxy autorizando la comunicación entre las 2 redes, también funciona como caché, acelerando el acceso a las páginas web visitadas.

Como las peticiones hacía Internet de los equipos de la red local son interceptadas por el servidor proxy, éste puede realizar una tarea de filtrado de accesos, impidiendo aquellos destinos que estén expresamente prohibidos en los archivos de configuración del servicio. En la intranet se suele utilizar este servicio ya que permite llevar un control sobre la actividad de la red hacia el exterior. En este caso lo usual es que el equipo que hace la función de servidor proxy disponga de dos interfaces de red. Una de ellas es utilizada para atender a la red local y la otra proporciona la conexión con Internet. Las peticiones de páginas web que se realizan desde la intranet son interceptadas por la interfaz interna y reenviadas a la interfaz externa si cumplen los requisitos establecidos desde el servicio proxy. Hay que tener en cuenta que la mayoría de los servidores web permiten la configuración como proxy-caché (Apache, IIS,...), pero Squid sólo es un proxy y no puede servir páginas por sí mismo. Cuando decimos que Squid también funciona como caché significa que está guardando copia de los datos obtenidos de otras peticiones y de esa forma acelera el acceso a estos datos si se producen peticiones similares. Sólo se accederá de nuevo a las páginas originales cuando se detecte que se han producido modificaciones, es decir los datos almacenados difieren de los datos en el servidor web de origen. La página oficial de SQUID es http://www.squid-cache.org/.


3

Funciones de Squid

Como resumen, las principales funciones de Squid son las siguientes:  Permite el acceso web a máquinas privadas (IP privada) que no están conectadas directamente a Internet.  Controla el acceso web aplicando reglas.  Registra el tráfico web desde la red local hacia el exterior.  Controla el contenido web visitado y descargado.  Controla la seguridad de la red local ante posibles ataques, intrusiones en el sistema, etc.  Funciona como una caché de páginas web. Es decir, almacena las páginas web visitadas por los usuarios y de esta manera las puede enviar a otros usuarios sin tener que acceder a Internet de nuevo.  Guarda en caché las peticiones DNS e implementa una caché para las conexiones fallidas.  Registra logs de todas las peticiones cursadas. Como consecuencia de estas funciones, la implantación de un servidor proxy-caché en una red proporciona las siguientes ventajas:       

4

Reduce los tiempos de respuesta. Si la página web que se solicita está en la caché del servidor, ésta se sirve sin necesidad de acceder de nuevo al servidor original, con lo cual se ahorra tiempo. Disminuye el tráfico en la red y el consumo de ancho de banda. Si la página web está almacenada en la caché del servidor, la petición no sale de la red local y no será necesario hacer uso de la línea exterior consiguiendo así un ahorro en la utilización del ancho de banda. Cuando se utiliza un servidor proxy-caché, éste comunica con el exterior, y puede funcionar como cortafuegos, lo cual aumentará la seguridad del usuario respecto a la información a la que se acceda. Filtrado de servicios. Es posible configurar el servidor proxy-caché dejando sólo disponibles aquellos servicios (HTTP, FTP,...) que se consideren necesarios, impidiendo la utilización del resto.

Instalación y arranque de squid

Para instalar squid tan sólo tendremos que abrir la terminal y escribir: sudo apt-get install squid

Los componentes de Squid se instalan en los siguientes directorios: Para arrancar squid escribimos: Archivos/Directorios /usr/bin /var/log/squid /var/spool/squid /etc/squid /usr/share/doc/squid

Descripción Directorio del ejecutable Directorio de logs Directorio caché Archivos de configuración Documentación

/etc/init.d/squid start

Para pararlo: /etc/init.d/squid stop

Y para reiniciarlo: /etc/init.d/squid restart


5

Configuración básica de squid

El archivo de configuración es /etc/squid/squid.conf. Algunos de los parámetros de configuración son los siguientes:       

http_port: Establece el puerto de escucha para squid (por defecto es el 3128). dns_nameservers: indica las direcciones IP de los servidores DNS, dónde el servidor proxy realizará las consultas de nombres. visible_hostname: nombre del equipo. acl: a cada lista de control de acceso (ACL) se le hace corresponder una regla de control de acceso (http_access) que es la que permite o deniega las conexiones. cache_effective_user y cache_effective_group: indica el propietario y el grupo de los directorios donde se almacena la caché. cache_mem: establece la cantidad de memoria RAM dedicada para almacenar los bloques más solicitados. Es una buena norma asignar N/3, siendo N la RAM del equipo. cache_dir: Establece la localización y el tamaño de la caché en el disco duro. Ejemplo: cache_dir ufs /var/spool/squid 1024 16 256 ufs es el sistema de almacenamiento que utiliza squid. 1024 indica el tamaño en megas de la caché (1 GB), 16 indica el nivel de subdirectorios de primer nivel y 256 el segundo nivel de subdirectorios por cada directorio de primer nivel. httpd_accel: las peticiones de Internet de los usuarios se almacenan en la caché de Squid. Si otros usuarios solicitan la misma petición y el elemento en caché no ha sufrido ninguna modificación, Squid muestra el de la caché y no vuelve a descargarlo de Internet con lo cual se aumenta la rapidez en la navegación. Por ejemplo, para un proxy convencional, las opciones para proxy acelerado son: httpd_accel_host virtual httpd_accel_port 0 httpd_accel_with_proxy on

Donde: o httpd_accel_host indica el nombre del servidor web que se quiere acelerar. Si se escribe 'virtual' se está indicando que se quiere acelerar más de un servidor. o httpd_accel_port indica el puerto donde escucha el servidor que se quiere acelerar. o httpd_accel_with_proxy permite al proxy trabajar como proxy y como acelerador al mismo tiempo ya que con la primera opción (httpd_accel_host) Squid deja de actuar como proxy.

5.1 Las listas de control de acceso (ACL) Las listas de control de acceso nos permitirán designar qué máquinas o redes tienen permitido, o no, acceder al servidor. A cada lista de control de acceso (ACL) creada se le hace corresponder una regla de control de acceso (http_access) que es la que permite o deniega las acciones. El siguiente ejemplo muestra una lista de control de acceso que identifica a nuestra red de área local (suponiendo que tiene la dirección de red 192.168.1.0 y máscara 255.255.255.0). acl red_local src 192.168.1.0/255.255.255.0

Tras acl se indica el nombre que se le asigna a la lista de control de acceso. Las listas de control de acceso emplean algunos parámetros como los siguientes:    

src: hace referencia a la IP de un ordenador o red que hace la petición. dst: hace referencia a la IP de un ordenador o red a la que se quiere acceder. time: permite denegar conexiones dentro de un rango horario. srcdomain y dstdomain: permiten denegar conexiones a un determinado dominio web origen y destino.


url_regex: permite especificar expresiones regulares para comprobar una URL completa, desde el http:// inicial. Por ejemplo, para establecer una acl que contemple a todos los servidores cuyo nombre sea adserver: url_regex serv_publicidad ^http://adserver.* Otro ejemplo, para verificar peticiones de ficheros MP3: url_regex ficheros_mp3 -i mp3$

5.2 Las reglas de control de acceso Las reglas de control de acceso especifican si se permite el acceso o se deniega a las listas de control de acceso. La sintaxis es la siguiente: http_access allow|deny [!]acl ...

Observemos que cada acl puede ir precedida por el símbolo !, que indica que la acl no se verifica. Por ejemplo, si queremos permitir el acceso al servidor proxy a todos los ordenadores de la red, tendríamos que escribir la siguiente línea en el archivo de configuración de squid (/etc/squid/squid.conf): http_access allow red_local

Y si queremos denegar el acceso: http_access deny red_local

6

Configuración de los clientes

Para que cada uno de los clientes de la red puedan comunicarse con Squid, debemos configurar el navegador en cada uno de ellos para que salgan a Internet a través del proxy. En Mozilla Firefox, por ejemplo, debemos ir a Editar/Preferencias/Avanzado/Red/Configuración. Seleccionamos a continuación “Configuración manual del proxy” e introducimos la IP y puerto de escucha del proxy.


7

Modificación de los mensajes de error de Squid

Por lo general Squid viene preconfigurado con mensajes en inglés, podemos modificarlo para que estos mensajes de error salgan en español o poner los nuestros propios. Si queremos que aparezcan en español, en el archivo de configuración de squid pondremos: error_directory /usr/share/squid/errors/Spanish

Si queremos modificar por ejemplo el mensaje de error que aparece al impedir el acceso a una determinada página editaremos el archivo ERR_ACCESS_DENIED.

8

Ejemplos

8.1 Ejemplo 1 Configurar squid para denegar el acceso a todos los equipos a la dirección www.google.es: visible_hostname ubuntu-desktop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl no_permitido1 dstdomain www.google.es acl localhost src 127.0.0.1 #definición de permisos a las listas http_access deny no_permitido1 !localhost

En este ejemplo construimos la acl llamada localhost que representa el servidor proxy. Observa que en http_access se ha puesto !localhost para denegar el acceso a todos los ordenadores de la red menos al ordenador local. De esta manera el ordenador en el que está instalado squid puede acceder a la página www.google.es.

8.2 Ejemplo 2 Crear un archivo de configuración que deniegue el acceso a las direcciones www.as.com y www.marca.com: visible_hostname ubuntu-desktop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1 acl no_permitido1 dstdomain www.marca.com www.as.com #definición de permisos a las listas http_access deny no_permitido1 !localhost

En este caso el fichero de configuración es similar al caso anterior. Tan sólo hay que poner www.as.com después de www.marca.com en la acl no_permitido1.

8.3 Ejemplo 3 Crea en tu carpeta personal un archivo llamado no_permitidos que contenga las direcciones de los tres siguientes dominios: www.google.es http://es.yahoo.com/ http://es.msn.com/


Para crear este archivo puedes abrir el terminal (Aplicaciones/Accesorios/Terminal) y escribir: gedit /home/nombre_de_usuario/no_permitidos

A continuación crea un archivo de configuración squid.conf que deniegue las conexiones a las direcciones que se encuentran en el archivo no_permitidos. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1 acl no_permitido1 url_regex “/home/rafa/no_permitidos” #definición de permisos a las listas http_access deny no_permitido1 !localhost

8.4 Ejemplo 4 Se dispone de una red local con dirección 192.168.1.0 y máscara 255.255.255.0. Crear un archivo de configuración squid.conf que permita el acceso a Squid a todos los ordenadores de la red y no lo permita a los restantes. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl todalared src 192.168.1.0/255.255.255.0 acl localhost src 127.0.0.1 #definición de permisos a las listas http_access allow todalared http_access deny all !localhost

8.5 Ejemplo 5 Se dispone de una red de área local con dirección 192.168.1.0 y máscara 255.255.255.0. Se desea permitir el acceso a Squid a los ordenadores con las IP que están comprendidas en el rango 192.168.1.1 y 192.168.1.10 (ambas incluidas). Crea en tu directorio personal un fichero llamado ip_permitidas que tenga estas direcciones (cada dirección en una línea diferente). A continuación indica que fichero de configuración para Squid crearías para permitir el acceso a Squid a todas estas direcciones y denegar el acceso a las restantes. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl red_local src “home/nombre_usuario/ip_permitidas” acl localhost src 127.0.0.1 #definición de permisos a las listas http_access allow red_local http_access deny all !localhost


8.6 Ejemplo 6 Impide la conexión a Internet a todos los equipos en horario de 18:00 a 21:00 horas. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1 acl horario time 18:00-21:00 #definición de permisos a las listas http_access deny horario !localhost

8.7 Ejemplo 7 Deniega las conexiones a todos los equipos en horario de 18:00 a 21:00 horas, pero sólo los lunes, martes y miércoles. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl horario time MTW 18:00-21:00 #definición de permisos a las listas http_access deny horario !localhost

8.8 Ejemplo 8 Deniega el acceso a Squid al equipo con IP 192.168.1.5. Permite el resto de accesos a Squid. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl equipo5 src 192.168.1.5 #definición de permisos a las listas http_access deny equipo5 http_access allow all

8.9 Ejemplo 9 Deniega el acceso a Squid al equipo con IP 192.168.1.5 en horario de 18:00 a 21:00 horas. Permite el resto de accesos a Squid. visible_hostname alex-laptop http_port 8080 #definición acl all src acl equipo5 acl horario

de las listas 0.0.0.0/0.0.0.0 src 192.168.1.5 18:00-21:00

#definición de permisos a las listas http_access deny equipo5 horario http_access allow all


8.10 Ejemplo 10 Deniega el acceso a Squid al equipo con IP 192.168.1.5 en horario de 18:00 a 21:00 horas. Para el resto de equipos permitir el acceso sólo en horario de 10:00 a 14:00 horas. Se supone que los equipos pertenecen a la red 192.168.1.0 con máscara 255.255.255.0. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl red_local src 192.168.1.0/255.255.255.0. acl equipo5 src 192.168.1.5 acl horario1 18:00-21:00 acl horario2 10:00-14:00 #definición http_access http_access http_access http_access

de los permisos de las listas deny equipo5 horario1 allow red_local horario2 allow equipo5 deny red_local

8.11 Ejemplo 11 En el archivo /etc/squid/permitidos se tiene una lista de todas las direcciones IP de la red local. El equipo10 tiene la dirección IP 192.168.1.10. Se permite el acceso a Internet al equipo10 de lunes a miércoles de 9:00 a 14:00 horas. También se permite el acceso a los equipos de la red local de lunes a miércoles. Se prohíbe el acceso en el resto de casos. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1 acl redlocal src “/etc/squid/permitidos” acl equipo10 src 192.168.1.10 acl horario time MTWHF 9:00-14:00 acl horario2 time MTW #definición http_access http_access http_access http_access

de los permisos de las listas allow equipo10 horario allow redlocal horario2 allow localhost deny all

8.12 Ejemplo 12 Restringe el acceso a todo el contenido con extensión .mp3 a los ordenadores de la red. visible_hostname alex-laptop http_port 8080 #definición de las listas acl all src 0.0.0.0/0.0.0.0 acl redlocal src 192.168.1.0/255.255.255.0 acl musica urlpath_regex \.mp3 #extensión de ficheros #definición de los permisos de las listas http_access allow redlocal !musica http_access deny all


9

Anexo: Expresiones regulares

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Utilízalas en las búsquedas para describir conceptos como "frases que comiencen por 'El'" y "valores de atributo que contengan un número". La tabla siguiente contiene los caracteres especiales de las expresiones regulares, su significado y ejemplos de uso. Para buscar texto que contenga uno de los caracteres especiales de la tabla, anula el valor del carácter colocando una barra invertida delante de él. Por ejemplo, para buscar el asterisco en el texto: rojo verde*, el modelo de búsqueda deberá ser el siguiente: verde\*. Si no anulas el valor del asterisco, encontrarás todas las apariciones de "verde" (así como de "appl", "applyy" y "applyyy"), no sólo las que van seguidas de asterisco. Carácter

Texto buscado

^

Principio de entrada o línea.

$

Fin de entrada o línea.

*

El carácter anterior 0 o más veces.

+

El carácter anterior 1 o más veces.

?

El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).

.

Cualquier carácter individual, salvo el de salto de línea.

x|y

x o y.

{n}

Exactamente n apariciones del carácter anterior.

{n,m} [abc]

[^abc] \b \B \d \D \f \n \r \s \S \t \w \W

Como mínimo n y como máximo m apariciones del carácter anterior. Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]). Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]). Límite de palabra (como un espacio o un retorno de carro). Cualquiera que no sea un límite de palabra. Cualquier carácter de dígito. Equivalente a [0-9]. Cualquier carácter que no sea de dígito. Equivalente a [^0-9]. Salto de página. Salto de línea. Retorno de carro. Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea). Cualquier carácter individual que no sea un espacio en blanco. Tabulación. Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_]. Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].

Ejemplo ^T encontrará "T" en "This good earth", pero no en "Uncle Tom's Cabin" h$ encontrará "h" en "teach", pero no en "teacher" um* encontrará "um" en "rum", "umm" en "yummy" y "u" en "huge" um+ encontrará "um" en "rum" y "umm" en "yummy", pero no en "huge" st?on encontrará "son" en "Johnson" y "ston" en "Johnston", pero no en "Appleton" o "tension" .an encontrará "ran" y "can" en la frase "bran muffins can be tasty" FF0000|0000FF encontrará "FF0000" en bgcolor="#FF0000" y "0000FF'" en font color="#0000FF" o{2} encontrará "oo" en "loom" y las dos primeras oes de "mooooo", pero no "money" F{2,4} encontrará "FF" en "#FF0000" y las cuatro primeras efes de #FFFFFF [e-g] encontrará "e" en "bed", "f" en "folly", y "g" en "guard" [^aeiou] encontrará inicialmente "r" en "orange", "b" en "book" y "k" en "eek!" \bb encontrará "b" en "book", pero no en "goober" ni "snob" \Bb encontrará "b" en "goober", pero no en "book" \d encontrará "3" en "C3PO" y "2" en "apartment 2G" \D encontrará "S" en "900S" y "Q" en "Q45"

\sbook encontrará "book" en "blue book", pero no en "notebook" \Sbook encontrará "book" en "notebook", pero no en "blue book" b\w* encontrará "barking" en "the barking dog" y "big" y "black" en "the big black dog" \W encontrará "&" en "Jake&Mattie" y "%" en "100%"

Configracion Proxy Squid  

En este turorial aprenderemos a cerar un proxy para linux.

Read more
Read more
Similar to
Popular now
Just for you