Está en la página 1de 25

Unidad 15: Servidor Proxy - Squid

UNIDAD 15: SERVIDOR PROXY - SQUID

15.1 ¿ Qué es Squid ?

Squid es un programa que implementa un servidor proxy y un demonio para caché1 de datos obtenidos en
Internet. Realiza este trabajo aceptando peticiones de los objetos que los usuarios quieren descargar y
realizando estas peticiones a la red en su nombre. Squid se conecta con el servidor correspondiente y pide
el objeto. De forma transparente, este objeto se entrega a la máquina cliente, pero al mismo tiempo,
guarda una copia. La próxima vez que alguna máquina cliente de squid solicite la misma página, squid
simplemente le transfiere su copia almacenada en memoria o disco, acelerando considerablemente la
transferencia y ahorrando ancho de banda en la conexión a Internet.

15.1.1 Características de Squid

Actualmente, Squid es capaz de hacer proxy-caché de los protocolos HTTP, FTP, GOPHER, SSL y
WAIS. No soporta POP, NNTP, RealAudio y otros.

El servidor proxy Squid guarda los datos cacheados en la memoria RAM, realiza caché de consultas DNS
y no guarda en el caché las peticiones que son rechazadas.

Squid también soporta SSL (Secure Socket Layer) con lo que también acelera las transacciones cifradas,
y es capaz de ser configurado con amplios controles de acceso sobre las peticiones de usuarios, lo que es
muy útil, por ejemplo, en un centro educativo para permitir o denegar el acceso al servidor a diferentes
grupos de usuarios. Al utilizar el protocolo de caché de Internet, Squid puede ahorrar un considerable
ancho de banda. Mejorando la velocidad de acceso a Internet en estos protocolos.

Este software consta de un programa servidor principal llamado Squid, un programa de búsqueda de
nombres en el DNS llamado dnsserver, un programa para recuperar ficheros vía FTP, llamado ftpget, y
algunas herramientas de mantenimiento y programas cliente. Cuando arranca, levanta un número
configurable de procesos dnsserver, cada uno de los cuales realiza una búsqueda en el sistema DNS, lo
que reduce el tiempo que la caché espera por la resolución de nombres.

Squid es resultado del esfuerzo de numerosas personas individuales de la comunidad en Internet y, al


igual que el sistema operativo Linux, es software libre.

1 Una caché es un conjunto de datos duplicados de otros originales, con la propiedad de que los datos originales son
costosos de acceder, normalmente en tiempo, respecto a la copia en el caché. Cuando se accede por primera vez a un
dato, se hace una copia en el caché, haciendo que el tiempo de acceso medio al dato sea menor en accesos siguientes que
se realizan a dicha copia.

Manual Administración GNU/Linux 237


Unidad 15: Servidor Proxy - Squid

15.2 Conceptos básicos

15.2.1 ¿ Qué es un proxy ?

En el contexto de las redes informáticas, el término proxy hace referencia a un programa o dispositivo que
realiza una acción en representación de otro (un intermediario). La finalidad más habitual es la de
servidor proxy, que sirve para permitir el acceso a Internet a todos los equipos de una organización
cuando sólo se puede disponer de un único equipo conectado directamente a Internet, esto es, una única
dirección IP.

15.2.2 ¿ Qué es web caché ?

Se llama caché web al caché que almacena documentos web (es decir, páginas, imágenes, etc.) para
reducir el ancho de banda consumido, la carga de los servidores y el retardo en la descarga. Un caché web
almacena copias de los documentos que pasan por él, de forma que subsiguientes peticiones pueden ser
respondidas por el propio caché, si se cumplen ciertas condiciones.

15.2.2.1 Tipos de cachés web

Los cachés web pueden utilizarse de diversas formas. Los cachés de agente de usuario (User-Agent),
como los presentes en los navegadores web, son cachés privados, que funcionan sólo para un único
usuario. También existen paquetes específicos que se instalan como proxy local y actúan como caché
además de realizar otras tareas.

Los intermediarios en la comunicación cliente-servidor también pueden implementar cachés


compartidos, también llamados proxy-cachés directos, que sirvan páginas a varios usuarios. Los proxy-
cachés suelen ser usados por los proveedores de servicios de Internet (ISP), universidades y empresas
para ahorrar ancho de banda. La intermediación de estos proxy-cachés difieren de la de los privados en
que los clientes no necesitan ser explícitamente configurados para usarlos.

Los cachés pasarela (llamados también proxy-cachés inversos o aceleradores web) funcionan a cargo del
propio servidor original, de forma que los clientes no distinguen unos de otros. Puede hacerse funcionar
conjuntamente varios cachés pasarela para implementar una Content Delivery Network (CDN) o Red de
Entrega de Contenido, como es el caso de Akamai.

Los intermediarios que funcionan como caché realizan con frecuencia otras tareas, tales como la
autenticación de usuarios y el filtrado de contenidos. Varios cachés pueden ser coordinados entre sí con la
ayuda de protocolos específicos tales como ICP o HTCP.

Manual Administración GNU/Linux 238


Unidad 15: Servidor Proxy - Squid

15.3 Instalación y Configuración

15.3.1 Instalación de Squid

Se instalará Squid por consola:

# aptitude install squid

La instalación y configuración ocurren automáticamente. A veces, el programa da un error de host, que


aparece con el nombre de VISIBLE_HOST (fallo en host visible). En éste caso, lo que ocurre es que
Squid no es capaz de determinar el host de la máquina. La solución es agregar el nombre de la máquina o
host al archivo de configuración squid.conf en la línea:

visible_hostname nombre_de_la_máquina

Acto seguido squid arrancará con una configuración básica.

15.3.2 Configuración de Squid

Squid utiliza el fichero de configuración localizado en /etc/squid/squid.conf. Existen un gran número de


parámetros, de los cuales recomendamos configurar los siguientes:
 http_port
 cache_mem
 ftp_user
 cache_dir
 Al menos una Lista de Control de Acceso
 http_acces
 httpd_accel_host
 httpd_accel_port
 httpd_accel_with_proxy

Toda vez que se realicen modificaciones en el archivo de configuración, es necesario reiniciar el servidor
Squid para que los cambios se hagan efectivos:

# service squid restart

 http_port:

Es el puerto que Squid utilizará para funcionar. Por defecto, Squid utiliza el puerto 3128 para atender
peticiones, pero puede especificarse que lo haga en cualquier otro puerto disponible o bien que lo haga en
varios puertos disponibles a la vez.

Manual Administración GNU/Linux 239


Unidad 15: Servidor Proxy - Squid

Algunos ejemplos:
Regularmente algunos programas utilizados comúnmente por los usuarios suelen traer de modo
predefinido el puerto 8080 (servicio de cacheo WWW) para utilizarse al configurar que Servidor
Intermediario (Proxy) utilizar. Si se quisiera aprovechar esto, se podría especificar que Squid escuche
peticiones en dicho puerto también. Siendo así, localizar la sección de definición de http_port, y
especificar:
# You may specify multiple socket addresses on multiple lines.
#
# Squid normally listens to port 3128
http_port 3128
http_port 8080

Si se desea incrementar la seguridad, por ejemplo, puede vincularse el servicio a una dirección IP que
solo se pueda acceder desde la red local. Considerando que el servidor utilizado posee una IP
192.168.1.254, puede hacerse lo siguiente:
# You may specify multiple socket addresses on multiple lines.
#
# Squid normally listens to port 3128
http_port 192.168.1.254:3128
http_port 192.168.1.254:8080

Cuando se configure una computadora cualquiera para acceder a Internet a través del proxy, será
necesario configurar el puerto definido en el menú del navegador. Mas adelante se verá como hacerlo.

 cache_mem:

Este parámetro establece la cantidad ideal de memoria para lo siguiente:


• Objetos en tránsito (In-Transit objects).
• Objetos frecuentemente utilizados (Hot objects).
• Objetos negativamente almacenados en el caché (Negative-Cached objects).
Los datos de estos objetos se almacenan en bloques de 4 Kb. El parámetro cache_mem especifica un
límite máximo en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor
prioridad. Sin embargo los objetos Hot y aquellos negativamente almacenados en el caché podrán utilizar
la memoria no utilizada hasta que esta sea requerida. De ser necesario, si un objeto en tránsito es mayor a
la cantidad de memoria especificada, Squid excederá lo que sea necesario para satisfacer la petición.
Este parámetro no determina la cantidad máxima de memoria del proceso Squid, sino que limita la
cantidad máxima de memoria que squid utilizará para almacenar objetos.

De modo predefinido se establecen 8 MB. Puede especificarse una cantidad mayor si así se considera
necesario, dependiendo esto de los hábitos de los usuarios o necesidades establecidas por el
administrador.

Manual Administración GNU/Linux 240


Unidad 15: Servidor Proxy - Squid

Si se posee un servidor con al menos 128 MB de RAM, se podría establecer 16 MB como valor para este
parámetro:
cache_mem 16 MB

 ftp_user:

Determina el usuario que accederá a un servidor FTP de manera anónima. De modo predefinido, Squid
enviará como clave de acceso Squid@. Si se desea que el acceso anónimo a los servidores FTP sea más
informativo, o bien si se desea acceder a servidores FTP que validan la autenticidad de la dirección de
correo especificada como clave de acceso, puede especificarse la dirección de correo electrónico que se
considere pertinente:

ftp_user proxy@su-dominio.net

 cache_dir:

Este parámetro se utiliza para establecer el tamaño de la caché en el disco duro que utilizará Squid para
almacenar información. Para entender esto un poco mejor, habría que responder a la siguiente pregunta:
¿Cuanto se desea almacenar de Internet en el disco duro? De modo predefinido, Squid utilizará un caché
de 100 MB, de modo tal que se encontrará la siguiente línea:
cache_dir ufs /var/spool/squid 100 16 256

Se puede incrementar el tamaño del caché hasta donde lo desee el administrador. Mientras más grande
sea el caché, más objetos se almacenarán en éste y por lo tanto se utilizará menos el ancho de banda. La
sintaxis general es:
cache_dir ufs /var/spool/squid [tamaño] 16 256

Los números 16 y 256 significan que el directorio del caché contendrá 16 directorios subordinados con
256 niveles cada uno. Estos números no deben modificarse, no hay necesidad de hacerlo.
Es muy importante considerar que si se especifica un determinado tamaño de caché y éste excede al
espacio real disponible en el disco duro, Squid se bloqueará inevitablemente.

 Lista de Control de Acceso o ACL:

Es necesario establecer Listas de Control de Acceso que definan una red o bien ciertas máquinas en
particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso
a Squid, es decir, determina quien accederá a Internet a través del servidor proxy y quien no.
La sintaxis de la instrucción para definir una lista acl es:

Manual Administración GNU/Linux 241


Unidad 15: Servidor Proxy - Squid

acl [nombre de la lista] src [lo que compone a la lista]


o
acl [nombre de la lista] src [ruta]

src Especifica una dirección origen de una conexión en formato IP/máscara.

Si se desea establecer una lista de control de acceso que abarque a toda la red local, basta definir la IP
correspondiente a la red y la máscara de la sub-red. Por ejemplo, si se tiene una red donde las máquinas
tienen direcciones IP 192.168.1.n con máscara de sub-red 255.255.255.0, se puede utilizar lo siguiente:
acl miredlocal src 192.168.1.0/255.255.255.0

También puede definirse una Lista de Control de Acceso especificando un fichero localizado en cualquier
parte del disco duro, y la cual contiene una lista de direcciones IP. Ejemplo:
acl permitidos src /etc/squid/permitidos

El fichero /etc/squid/permitidos contendría algo como lo siguiente:


192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.15
192.168.1.16
192.168.1.20
192.168.1.40

Lo anterior estaría definiendo que la Lista de Control de Acceso denominada permitidos estaría
compuesta por las direcciones IP incluidas en el fichero /etc/squid/permitidos.

Nota: El orden de las reglas es importante en ACL.


Durante el proceso de control, primero se listan todas las reglas de denegación. Se ejecuta la primer regla
coincidente. El resto de las reglas se ignora. La última regla debería ser: permite todo.

 http_acces: Reglas de Control de Acceso

Estas definen si se permite o no el acceso hacia el servidor Squid. Se aplican a las Listas de Control de
Acceso. Deben colocarse en la sección de reglas de control de acceso definidas por el administrador, es
decir, a partir de donde se localiza la siguiente leyenda:
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

Manual Administración GNU/Linux 242


Unidad 15: Servidor Proxy - Squid

La sintaxis básica es la siguiente:

http_access [deny o allow] [lista de control de acceso]

En el siguiente ejemplo, se considera una regla que establece acceso permitido a Squid a la Lista de
Control de Acceso denominada permitidos:
http_access allow permitidos

También pueden definirse reglas valiéndose de la expresión !, la cual significa no. Pueden definirse, por
ejemplo, dos listas de control de acceso, una denominada lista1 y otra denominada lista2, en la misma
regla de control de acceso, en donde se asigna una expresión a una de estas. Lo siguiente, establece que se
permite el acceso a Squid a lista1 pero no a lista2:
http_access allow lista1 !lista2

Este tipo de reglas son útiles cuando se tiene un gran grupo de direcciones IP dentro de un rango de red al
que se debe permitir acceso, y otro grupo dentro de la misma red al que se debe denegar el acceso.

Algunos ejemplos de uso de Listas y Reglas de Control de Acceso:

1. Se dispone de una red 192.168.1.0/255.255.255.0, y se desea definir la red local completa. La sección
de listas de control de acceso debe quedar más o menos del siguiente modo:
#
# Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl todalared src 192.168.1.0/255.255.255.0

A continuación se aplicarán las reglas de control de acceso:


Habiendo hecho lo anterior, la zona de reglas de control de acceso debería quedar más o menos de este
modo:
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow todalared
http_access deny all

La regla http_access allow todalared permite el acceso a Squid a la Lista de Control de Acceso
denominada todalared, la cual está conformada por 192.168.1.0/255.255.255.0. Esto significa que
cualquier máquina desde 192.168.1.1 hasta 192.168.1.254 podrá acceder a Squid.

Manual Administración GNU/Linux 243


Unidad 15: Servidor Proxy - Squid

2. Si solo se desea permitir el acceso a Squid a ciertas direcciones IP de la red local, se debe crear un
fichero que contenga dicha lista. Si el archivo se crea en el siguiente directorio: /etc/squid/listas/redlocal,
las secciones de Listas y Reglas de Control de Acceso quedarían de la siguiente manera:
#
# Recommended minimum configuration:
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 redlocal src "/etc/squid/listas/redlocal"

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow redlocal
http_access deny all

Esto significa que cualquier máquina no incluida en /etc/squid/listas/redlocal no tendrá acceso a Squid.

 httpd_accel: Proxy acelerado

Cuando un usuario hace petición hacia un objeto en Internet, este es almacenado en el caché de Squid. Si
otro usuario hace petición hacia el mismo objeto, y este no ha sufrido modificación alguna desde que lo
accedió el usuario anterior, Squid mostrará el que ya se encuentra en el caché en lugar de volver a
descargarlo desde Internet.
Esta función permite navegar rápidamente cuando los objetos ya están en el caché de Squid y optimiza
enormemente la utilización del ancho de banda.
En la sección HTTPD-ACCELERATOR OPTIONS del archivo de configuración, deben habilitarse los
siguientes parámetros:
httpd_accel_host virtual
httpd_accel_port 0
httpd_accel_with_proxy on

15.4 Profundizando el filtrado con Squid

Como se vio anteriormente, utilizando las Listas y Reglas de control de acceso de Squid, es posible filtrar
por:
• dominios de cliente o servidor
• subredes IP del cliente o servidor
• ruta URL
• URLs completas, incluyendo parámetros
• palabras clave

Manual Administración GNU/Linux 244


Unidad 15: Servidor Proxy - Squid

• protocolos: HTTP, FTP


• métodos: GET, POST, HEAD, CONECT
• día y hora
• tipo de navegador
• nombre de usuario

Además de los parámetros ya explicados en la sección anterior, se mencionarán algunos más que se
utilizan para definir distintos tipos de ACL.
dst:

Especifica una dirección destino de una conexión en formato IP/máscara. Por ejemplo:
acl google_es dst 216.239.0.0/24
acl google_es2 dst 216.239.59.104/32 216.239.39.104/32 216.239.57.104/32

Las definiciones son idénticas a las ACL de tipo src salvo que se aplican al destino de las conexiones, no
al origen.

dstdomain:

Especifica un nombre de dominio que se comprueba con el dominio que se haya especificado en la
petición de página web. Define un dominio de Internet. Por ejemplo:
acl google_com dstdomain google.com

srcdomain:
Especifica un nombre de dominio de origen y se determina por resolución DNS inversa de la IP de la
máquina (tiene que haber en la red local un servidor DNS).

srcdom_regex y dstdom_regex:
Especifican una expresión regular2 que verifica los dominio origen o destino, respectivamente. La
expresión regular hace distinción entre mayúsculas y minúsculas salvo que se incluya la opción -i que
evita dicha distinción. Por ejemplo,
acl google_todos dstdom_regex -i google\..*

time:
Permite especificar una franja horaria concreta dentro de una semana.

2 Una expresión regular es una plantilla formada por unos meta caracteres con significado propio que se utiliza para
especificar patrones regulares sobre cadenas de texto. Un ejemplo de algo parecido a un expresión regular serían las
plantillas para nombres de ficheros usando * y ?; en este caso, *.txt expresaría todos los ficheros cuyo nombre termina
en .txt. Una expresión regular se puede construir, para concordar con, por ejemplo, una dirección de correo electrónico,
un número, una fecha, una url, una etiqueta HTML, etc., es decir, cualquier cadena que cumpla unas determinadas
características de regularidad.

Manual Administración GNU/Linux 245


Unidad 15: Servidor Proxy - Squid

url_regex:
Permite especificar expresiones regulares para comprobar una url completa, desde el http:// inicial. Por
ejemplo, la siguiente expresión se verificará con todos los servidores cuyo nombre sea adserver:
url_regex serv_publicidad ^http://adserver.*
urlpath_regex:
Igual que la anterior, sólo que se empieza a evaluar a partir del primer / que se encuentre por detrás del
nombre de dominio.

15.4.1 Listas de Control de Acceso por Horarios

Restringir el acceso a la red en ciertos horarios permite administrar racionalmente el ancho de banda con
el que se dispone.
La sintaxis para crear Listas de control de acceso que definan horarios es la siguiente:

acl [nombre del horario] time [días de la semana] hh:mm-hh:mm

Los días de la semana se definen con letras de la manera siguiente:


• S - Domingo
• M - Lunes
• T - Martes
• W - Miércoles
• H - Jueves
• F - Viernes
• A - Sábado

Ejemplo:
acl semana time MTWHF 09:00-21:00

Esta regla define a la lista semana, la cual comprende un horario de 09:00 a 21:00 horas desde el Lunes
hasta el Viernes.
Este tipo de listas se aplican en las Reglas de Control de Acceso con una mecánica similar a la siguiente:
se permite o deniega el acceso en el horario definido en la Lista de Control de Acceso denominada X para
las entidades definidas en la Lista de Control de Acceso denominada Y. Lo anterior expresado en una
Regla de Control de Acceso, quedaría del siguiente modo:

http_access [allow | deny] [nombre del horario] [lista de entidades]

Ejemplo:
Se quiere establecer que los miembros de la Lista de Control de Acceso denominada
clase_turno_mañana tengan permitido acceder a Internet en un horario denominado como
turno_mañana, que comprende de lunes a viernes de 08:00 a 12:00 horas.

Manual Administración GNU/Linux 246


Unidad 15: Servidor Proxy - Squid

acl clase_turno_mañana src 192.168.1.0/255.255.255.0


acl turno_mañana time MTWHF 08:00-12:00

La definición de la Regla de Control de Acceso sería:

http_access allow turno_mañana clase_turno_mañana

Lo anterior, en resumen, significa que quienes conformen clase_turno_mañana podrán acceder a Internet
de Lunes a Viernes de 08:00-12:00 horas.

15.4.2 Listas de Control de Acceso a Sitios de Red

Utilizando Listas de Control de Acceso es posible restringir el acceso a nombres de dominio o


direcciones Web específicas o que contengan patrones en común.

Lo primero será definir un dominio específico utilizando la instrucción dstdomain en una lista de control
de acceso, por ejemplo:

acl red1 dstdomain .gmail.com


acl red1 dstdomain .paginasamarillas.es
acl red2 dstdomain .paginabonita.es
acl red2 dstdomain .adslzone.net

Lo siguiente es especificar las reglas para esas listas:

http_access allow mi_lista_permitidos red1


http_access allow mi_lista_permitidos2 red2

Si la dirección IP 192.168.1.6 está en mi_lista_permitidos y la dirección IP 192.168.1.7 en


mi_lista_permitidos2, la primera accederá a gmail y páginas amarillas, y la segunda a paginabonita y
adslzone.

También se podría hacer:

http_acces allow !mi_lista_permitidos

Lo que significa que se dejaría acceder a todo lo que no estuviera en la lista, es decir, todas las
direcciones menos 192.1.168.6.

Manual Administración GNU/Linux 247


Unidad 15: Servidor Proxy - Squid

15.4.3 Listas de Control de Acceso según léxico contenido en Sitios de Red

Si se quiere dejar acceso libre a Internet, a excepción de las páginas pornográficas, por ejemplo. Sería una
auténtica tarea agotadora buscar páginas pornográficas en Internet e incluirlas en la lista. Además,
siempre se encontraría una no definida y con acceso. Para evitar eso, se definen patrones regulares que
permitan contener el acceso. Un patrón o regular es una serie de reglas que definen una palabra. Por
ejemplo, para definir todas las palabras que tengan en medio la palabra “sexo”, se podría hacer: * sexo *.
Existen muchos patrones regulares y formas de expresarlos. En Squid, para configurar los patrones
regulares se utiliza la instrucción: url_regex. Ésta instrucción indica las palabras que se denegarán (o que
se permitirán, según el caso). Se define una lista de control (etc/squid/patrones_denegados) con los
patrones que se identificarán:

sexo
porn
massexo
masporn
porno

Paso a paso:

acl patrones_denegados url_regex “/etc/squid/patronesdenegados”

y ahora, la regla de control de acceso:

http_acces deny patrones_denegados

Como advertencia, es necesario que ésta regla de control, aparezca antes que cualquier otra que permita o
niegue acceso a otras listas. Si fuera al revés el filtro no sería útil.
Si se quisiera permitir sólo un patrón regular, se crea la lista patrones_no_negados, con el contenido:
infosexo :::>>página necesaria y no de sexo

acl patrones_no_negados url_regex “/etc/squid/patrones_no_negados”

y la regla de control de acceso:

http_acces deny patrones_denegados !patrones_no_negados

El signo de admiración indica que el acceso a todo lo que no esté en esa lista es denegado.

Otro ejemplo:

Generar una lista, en /etc/squid/sitios_denegados, con las direcciones que se quiere restringir y palabras
usualmente utilizadas en nombres de ciertos dominios. Por ejemplo:

Manual Administración GNU/Linux 248


Unidad 15: Servidor Proxy - Squid

www.sitioporno.com
www.otrositioporno.com
sitioindeseable.com
otrositioindeseable.com
napster
sex
porn
mp3
xxx
adult
warez
celebri

Luego, definir ésta lista en el archivo de configuración utilizando la instrucción url_regex. Con ésta
instrucción la lista de control de acceso, denominada sitios_denegados, se definirían de la siguiente
manera:
#
# Recommended minimum configuration:
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 redlocal src 192.168.1.0/255.255.255.0
acl sitios_denegados url_regex "/etc/squid/sitios_denegados"

A continuación, se modificará una Regla de Control de Acceso existente, agregando con un símbolo de !
que denegará el acceso a la Lista de Control de Acceso denominada sitios_denegados:
http_access allow redlocal !sitios_denegados

15.4.4 Listas de Control de Acceso a Descarga de Archivos según extensión

Denegar el acceso a ciertos tipos de extensiones de fichero permite hacer un uso más racional del ancho
de banda con el que se dispone.

Definir los elementos de la lista de control de acceso con las extensiones de fichero que el administrador
considere pertinentes (/etc/squid/extensiones):

\.avi$ \.rpm$ \.ace$


\.mp4$ \.vob$ \.bat$
\.mp3$ \.wma$ \.exe$
\.mp4$ \.wmv$ \.lnk$
\.mpg$ \.wav$ \.pif$
\.mpeg$ \.doc$ \.scr$
\.mov$ \.xls$ \.sys$
\.ra$ \.mbd$ \.zip$
\.ram$ \.ppt$ \.rar$
\.rm$ \.pps$

Manual Administración GNU/Linux 249


Unidad 15: Servidor Proxy - Squid

Agregar al archivo de configuración, en la sección de Listas de Control de Acceso algo como lo siguiente:
#
# Recommended minimum configuration:
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 redlocal src 192.168.1.0/255.255.255.0
acl password proxy_auth REQUIRED
acl sitios_denegados url_regex "/etc/squid/sitiosdenegados"
acl lista_extensiones urlpath_regex "/etc/squid/extensiones"

A continuación se modificará una Regla de Control de Acceso existente agregando un símbolo ! que
deniega el acceso a la Lista de Control de Acceso denominada extensiones:
http_access allow redlocal !lista_extensiones

La regla anterior permite el acceso a la Lista de Control de Acceso denominada redlocal, pero le niega el
acceso a todo lo que coincida con lo especificado en la Lista de Control de Acceso denominada
lista_extensiones.

Ejemplos:

1. Se crea una ACL denominada musica que define a todos los ficheros con extensión .mp3:
acl clase_turno_tarde src 192.168.1.0/255.255.255.0
acl musica urlpath_regex \.mp3$

Y se quiere denegar el acceso a todo contenido con extensión .mp3, al grupo clase_turno_tarde:
http_access allow clase_turno_tarde !musica

2. Se quiere restringir parcialmente el acceso a cierto tipo de contenido en ciertos horarios. Pueden
combinarse distintos tipos de reglas:

acl clase_matutina src 192.168.1.0/255.255.255.0


acl matutino time MTWHF 08:00-12:00
acl musica urlpath_regex \.mp3$

http_access allow matutino clase_matutina !musica

La Regla de Control de Acceso anterior especifica acceso permitido en el horario definido como
matutino a quienes integran la Lista de Control de Acceso denominada clase_matutina a todo contenido
(por omisión) excepto a los contenidos que coincidan con los definidos en la Lista de Control de Acceso
denominada musica.

Manual Administración GNU/Linux 250


Unidad 15: Servidor Proxy - Squid

15.5 Acceso por autenticación

La autenticación es el proceso de intento de verificar la identidad digital del remitente de una


comunicación, como una petición para conectarse. El proceso general de autenticación consta de los
siguientes pasos:
1. El usuario solicita acceso a un sistema.
2. El sistema solicita al usuario que se autentique.
3. El usuario aporta las credenciales que le identifican y permiten verificar la autenticidad de
la identificación.
4. El sistema valida según sus reglas si las credenciales aportadas son suficientes para dar
acceso al usuario o no.

En un servidor intermediario (proxy), otra manera de control de acceso es establecer un sistema de


autenticación para poder acceder hacia Internet, pues esto permite controlar quienes si y quienes no
accederán a Internet sin importar desde que máquina de la red local lo hagan. De ésta manera, se tendrá
un doble control, primero por dirección IP y segundo por nombre de usuario y clave de acceso.

Hay varias maneras de configurar el acceso por autenticación: a) a través de un fichero de texto simple
con claves de acceso creadas con htpasswd; b) utilizando PAM (Pluggable Authentication Module), un
mecanismo que proporciona una interfaz entre las aplicaciones de usuario y diferentes métodos de
autenticación; c) a través de un servidor LDAP, lo cual constituye una solución más robusta (ésta opción
se discutirá en la Unidad 16).

15.5.1 Autenticación a través del módulo ncsa_auth

El módulo ncsa_auth, de la NCSA (National Center for Supercomputing Applications), viene incluido
como parte del paquete principal de Squid en la mayoría de las distribuciones actuales. Este módulo
provee una autenticación muy sencilla a través de un fichero de texto simple cuyas claves de acceso
fueron creadas con htpasswd.
Para su configuración se requiere:

A) La creación previa de un fichero de claves de acceso que contiene los nombres de usuarios y sus
correspondientes contraseñas (cifradas). El fichero puede localizarse en cualquier lugar del sistema, con
la única condición que sea asequible para el usuario squid.

Manual Administración GNU/Linux 251


Unidad 15: Servidor Proxy - Squid

Se creará un fichero /etc/squid/claves:

# touch /etc/squid/claves

Este fichero debe tener permisos de lectura y escritura únicamente para el usuario squid:

# chmod 600 /etc/squid/claves


# chown squid:squid /etc/squid/claves

A continuación se deben dar de alta las cuentas que sean necesarias, utilizando el mandato htpasswd. Por
ejemplo:

# htpasswd /etc/squid/claves joseperez

Lo anterior solicitará teclear una nueva clave de acceso para el usuario joseperez y confirmar tecleando
ésta de nuevo. Se repite este procedimiento para cada cuenta que se quiera dar de alta.
Todas las cuentas que se den de alta de este modo son independientes a las ya existentes en el sistema
(shell, correo y Samba). Al dar de alta una cuenta o cambiar una clave de acceso se lo estará haciendo
exclusivamente para el acceso al servidor Proxy.

B) Especificar que programa de autenticación se utilizará. En el archivo de configuración de Squid, es


preciso localizar la sección que corresponde a la etiqueta auth_param basic program. Por defecto, no hay
ningún programa especificado.
Por otro lado, se buscará donde se encuentra el fichero ncsa_auth:

$ find / -name ncsa_auth

Normalmente se encuentra en /usr/lib/squid/ncsa_auth. Considerando ésto, se procederá a añadir el


siguiente parámetro:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/claves

/usr/lib/squid/ncsa_auth corresponde a la localización del programa para autenticar y /etc/squid/claves al


fichero que contiene las cuentas y sus claves de acceso.

C) Definir una Lista de Control de Acceso, denominada, en éste caso, password, que será configurada
para utilizar obligatoriamente la autenticación de acceso a Squid. Debe localizarse la sección de Listas de
Control de Acceso y añadirse la siguiente línea:

Manual Administración GNU/Linux 252


Unidad 15: Servidor Proxy - Squid

#
# Recommended minimum configuration:
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 redlocal src 192.168.1.0/255.255.255.0


acl password proxy_auth REQUIRED

D) Definir una Regla de Control de Acceso para la lista, o modificar la regla de control de accesos previa
que se tenía para permitir el acceso a Internet. Donde antes decía:
http_access allow redlocal

Se añade password, la definición de la Lista de Control de Acceso que requiere utilizar clave de acceso,
de modo que quede como se muestra a continuación:
http_access allow redlocal password

15.5.2 Autenticación de usuarios en Squid con PAM

PAM permite comunicar a aplicaciones con los métodos de autenticación que se deseen de una forma
transparente. Utiliza una arquitectura conectable y modular, que otorga al administrador del sistema una
gran flexibilidad en establecer las políticas de autenticación para el sistema.
En la mayoría de los casos, el archivo de configuración PAM predeterminado para una aplicación que
soporta PAM es suficiente. Sin embargo, a veces se quiere almacenar los usuarios en una base de datos
para centralizar algunos servicios.
Para instalarlo, lo recomendable es compilarlo desde el código fuente. Una vez instalado, hay que
configurarlo para funcionar con Squid.
El directorio /etc/pam.d/ contiene los archivos de configuración de PAM para cada aplicación tipo PAM.
En versiones antiguas de PAM se utilizaba /etc/pam.conf, pero este archivo ya no se utiliza y solamente
es usado si el directorio /etc/pam.d/ no existe. Cada aplicación tipo PAM o servicios tiene un archivo
dentro del directorio /etc/pam.d/. Cada uno de estos archivos lleva el nombre del servicio para el cual
controla el acceso. Depende del programa tipo PAM definir el nombre de su servicio e instalar su archivo
de configuración en el directorio /etc/pam.d/.
Entonces, dentro del directorio /etc/pam.d/ debería existir el archivo squid, en caso que no exista, será
necesario crearlo y editarlo para que quede con las siguientes dos líneas:

auth required /lib/security/pam_unix.so


account required /lib/security/pam_unix.so

Manual Administración GNU/Linux 253


Unidad 15: Servidor Proxy - Squid

El parámetro auth provee una comprobación de que el usuario es realmente quien dice ser.
El parámetro account maneja la cuenta sin basarse en autenticación. Típicamente se usa para
restringir/permitir el acceso a un servicio basado en la hora o quizás desde donde se registra el usuario.

Configurar Squid:
A) Buscar donde se encuentra el archivo pam_auth. Usualmente, se localiza en /usr/lib/squid/pam_auth.
B) Editar el archivo de configuración /etc/squid/squid.conf definiendo el programa que Squid utilizará
para autenticación. Buscar la entrada auth_param basic program y modificar la línea de modo que
apunte al programa pam_auth:

auth_param basic program /usr/lib/squid/pam_auth

C) Lo siguiente es definir una lista de control de acceso que use autenticación (aquí nombre_lista es el
nombre de la lista, pero podría ser cualquier otro):

acl nombre_lista proxy_auth REQUIRED

D) Aplicar la regla de control de acceso:


http_access allow nombre_lista

Esta configuración básica permite autenticar el proxy con las cuentas locales, es decir, las cuentas de
usuarios definidas en el sistema.

15.6 Servidor Proxy Transparente

Muchas organizaciones (incluyendo empresas, colegios y familias) usan los proxies para reforzar las
políticas de uso de la red o para proporcionar seguridad y servicios de caché. Normalmente, un proxy
Web o NAT no es transparente a la aplicación cliente, puesto que debe ser configurada manualmente para
usar el proxy. Por lo tanto, el usuario puede evadir el proxy cambiando simplemente la configuración.
Un proxy transparente no necesita ninguna configuración especial en los clientes. Se denomina
transparente porque el cliente en realidad no sabe que lo está usando, es transparente para el usuario. Este
es el tipo de proxy que utilizan los proveedores de servicios de Internet (ISP).

En el caso de un Servidor Intermediario (Proxy) Transparente, regularmente se utilizará el puerto 80


o el 8080 y se valdrá del re-direccionamiento de peticiones de modo tal que no habrá necesidad alguna de
modificar la configuración de los clientes HTTP para utilizar el Servidor Intermediario (Proxy).

Manual Administración GNU/Linux 254


Unidad 15: Servidor Proxy - Squid

Bastará con utilizar como puerta de enlace al servidor. Es importante recordar que los Servidores HTTP,
como Apache, también utilizan dicho puerto, por lo que será necesario volver a configurar el servidor
HTTP para utilizar otro puerto disponible, o bien desinstalar o desactivar el servidor HTTP.
Hoy en día puede no ser del todo práctico el utilizar un Servidor Intermediario (Proxy) Transparente,
a menos que se trate de un servicio de Café Internet u oficina pequeña, siendo que uno de los principales
problemas con los que lidian los administradores es el mal uso y/o abuso del acceso a Internet por parte
del personal. Es por esto que puede resultar más conveniente configurar un Servidor Intermediario
(Proxy) con restricciones por clave de acceso, lo cual no puede hacerse con un Servidor Intermediario
(Proxy) Transparente, debido a que se requiere un diálogo de nombre de usuario y clave de acceso.

La configuración de Squid como Servidor Intermediario (Proxy) Transparente solo requiere


complementarse utilizando una regla de iptables que se encargará de redireccionar peticiones haciéndolas
pasar por el puerto 8080. No se puede hacer Servidor Intermediario (Proxy) Transparente para los
protocolos HTTPS, FTP, GOPHER ni WAIS, por lo que dichos protocolos tendrán que ser filtrados a
través del NAT.
Considerando para este ejemplo, que a la red local se accede a través de una interfaz eth0, el siguiente
esquema ejemplifica un re-direccionamiento a través de iptables. :

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port


8080

Lo anterior, que requiere un guión de cortafuegos funcional en un sistema con dos interfaces de red, hace
que cualquier petición hacia el puerto 80 (servicio HTTP) hecha desde la red local hacia el exterior, se re-
direccione hacia el puerto 8080 del servidor.

15.7 Depuración de errores

Cualquier error al inicio de Squid solo significa que hubo errores de sintaxis, errores de tipeo o que se
están citando incorrectamente las rutas hacia los ficheros de las Listas de Control de Acceso.
Puede realizarse un diagnóstico de problemas indicándole a Squid que vuelva a leer la configuración, lo
cual devolverá los errores que existan en el archivo /etc/squid/squid.conf:

service squid reload

Cuando se trata de errores graves que no permiten iniciar el servicio, puede examinarse el contenido del
archivo /var/log/squid/squid.out con el mandato less, more o cualquier otro visor de texto:

Manual Administración GNU/Linux 255


Unidad 15: Servidor Proxy - Squid

less /var/log/squid/squid.out

15.8 Filtrado de contenidos con SquidGuard

SquidGuard es el filtro asociado al proxy Squid, que utiliza una base de datos con miles de direcciones
web clasificadas en grupos (porno, violencia, publicidad, etc.). Hay múltiples opciones de configuración:
bloqueo por grupo o por palabra clave, identificación del cliente por su dirección IP o por nombre de
usuario, creación de horarios, actualización de la base de datos por un robot, etc. SquidGuard funciona
asociado al proxy Squid que permite registrar las páginas web visitadas en ficheros .log y además hace de
caché acelerando el acceso a las páginas visitadas recientemente.

A) Instalación:

sudo aptitude install squidguard

B) Configuración:

Lo primero será conectar SquidGuard a Squid. Para ésto, editar el archivo de configuración de Squid
/etc/squid/squid.conf, buscar la entrada redirect_program y agregar la siguiente línea.

redirect _program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

15.8.1 Base de datos de contenidos para filtrar

El archivo con la base de datos se puede descargar del siguiente modo:

http://ftp.tdcnorge.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz

Se obtiene un paquete comprimido que es necesario desempaquetar. Los archivos extraídos deben quedar
en la carpeta /var/lib/squidguard/db para que SquidGuard pueda encontrarlos; de otra manera, podría
modificarse el archivo de configuración /etc/squid/squidGuard.conf para definir otra ubicación. Es
importante, asegurarse de tener los permisos de lectura para estos archivos y directorios.

El paso siguiente, es editar el archivo de configuración de SquidGuard /etc/squid/squidguard.conf y


añadir una entrada por cada uno de los temas que se encuentran en el archivo de la base de datos
recientemente descargado, que sea de interés bloquear. Por ejemplo:

Manual Administración GNU/Linux 256


Unidad 15: Servidor Proxy - Squid

#----------------------------------------------------------------
# SquidGuard CONFIGURATION FILE
#----------------------------------------------------------------

# DIRECTORIOS DE CONFIGURACION
dbhome /usr/share/squidGuard-1.2.0/db
logdir /var/log/squidGuard

# GRUPOS DE DIRECCIONES
dest porn {
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
}
dest audio-video {
domainlist audio-video/domains
urllist audio-video/urls
}
dest hacking {
domainlist hacking/domains
urllist hacking/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}
dest ads {
domainlist ads/domains
urllist ads/urls
# la publicidad es reemplazada por una imagen vacia
redirect http://127.0.0.1/nulbanner.png
}
dest aggressive {
domainlist aggressive/domains
urllist aggressive/urls
}
dest drugs {
domainlist drugs/domains
urllist drugs/urls
}
dest gambling {
domainlist gambling/domains
urllist gambling/urls
}
# permitimos los servidores gratuitos de correo
#dest mail {
# domainlist mail/domains
#}
dest proxy {
domainlist proxy/domains
urllist proxy/urls
}
dest violence {
domainlist violence/domains
urllist violence/urls

Manual Administración GNU/Linux 257


Unidad 15: Servidor Proxy - Squid

expressionlist violence/expressions
}

# CONTROL DE ACCESO
acl {
# por defecto bloqueamos los grupos de direcciones creados
default {
pass !porn !audio-video !hacking !warez !ads !aggressive !drugs !gambling !proxy !
violence all
# redireccionamos a una pagina web disuasoria
redirect http://127.0.0.1/prohibit.html
}
}

Las páginas bloqueadas deben redireccionarse hacia una página web creada con el nombre prohibit.html
en /var/www/html/prohibit.html. También hay que copiar la imagen vacía nullbanner.png para la
publicidad:

# cp /var/www/cgi-bin/nullbanner.png /var/www/html

15.8.2 El log de SquidGuard

Es importante crear un directorio log en /var/log/squidguard/squidguard.log para detectar errores en la


configuración de SquidGuard. El propietario de éste archivo debe ser el usuario squid.
Para chequear que el sistema de filtrado está funcionando correctamente, hay una serie de pasos que se
pueden seguir:

1. Comprobar que SquidGuard tenga cinco procesos corriendo (que es el número por defecto):

# ps -e | grep squidGuard

2. Compror el log:

# cat /var/log/squidguard/squidguard.log

Al final, debe salir el mensaje "squidGuard ready for requests"

3. Comprobar también que la base de datos de direcciones se haya cargado correctamente:

#cat /var/log/squidGuard/log/squidGuard.log

Si hubiera algún problema, aparecería el mensaje "Emergency mode...". En modo de emergencia, el filtro
queda desactivado.

Manual Administración GNU/Linux 258


Unidad 15: Servidor Proxy - Squid

15.9 Informes de uso en Squid: Sarg

Sarg (Squid Analysis Report Generator) es una herramienta, desarrollada por el brasileño Pedro Orso, que
permite saber “dónde han estado navegando los usuarios en Internet”, a través del análisis del
fichero de log access.log de Squid. Sarg es una herramienta muy poderosa que permite saber qué
usuarios accedieron a qué sitios, a qué horas, cuantos bytes han sido descargados, relación de sitios
denegados, errores de autenticación, etc.

Para configurar SARG de manera que genere los reportes diarios de los accesos de Squid, es necesario
que Squid esté configurado para generar los logs de acceso en el fichero access.log. Esto se consigue con
la siguiente línea en el archivo de configuración squid.conf:

cache_acces_log /var/log/squid/access.log

Para instalar Sarg:

# aptitude install sarg

Configuración de Sarg:

Se crearán los siguientes archivos en /etc/sarg:

# touch exclude.hosts
# touch exclude.strings
# touch exclude.users

exclude.host
En éste archivo, cada línea tendrá un Dominio/URL que NO se mostrará en el informe. Es útil cuando se
insertan direcciones, por ejemplo, direcciones de descarga de la Intranet que pasan por el Squid, pero que
no consumen ancho de banda de Internet.

exclude.strings
Si alguna línea del archivo de log contiene alguna cadena de este archivo (una cadena por línea), esa
línea del log, será ignorada por el informe. Con esto se podrá filtrar del informe lo que se desee.

exclude.users:
Los usuarios que figuren en este fichero no estarán incluidos en el reporte.

A continuación se creará el archivo de configuración para SARG: /etc/sarg/sarg-dia.conf


Lo siguiente es un ejemplo de configuración básica para obtener un reporte diario:

Manual Administración GNU/Linux 259


Unidad 15: Servidor Proxy - Squid

#Idioma utilizado (pueden seleccionarse otros idiomas)


language Spanish
#
#Fichero log de Squid
access_log /var/log/squid/access.log
#
#Titulo de la página HTML
title “Reporte Diario del Proxy”
#
# --- Visual ---
#
# Aquí se colocan algunas variables que se pueden cambiar
# para modificar el aspecto de los informes
font_face Arial
header_color darkblue
header_bgcolor blanchedalmond
header_font_size -1
background_color white
text_color black
text_bgcolor beige
title_color green
#
# --- Fin parte Visual
#
# Directorio Temporal
temporary_dir /tmp
#
# Directorio dónde se generarán los reportes
# Generalmente deben estar dentro del directorio raiz del webserver
output_dir /var/www/html/squid-report/dia
#
# Qué criterio de orden para la sección TOPUSER : USER/CONNECT/BYTES/TIME
# Con esto se organizará el reporte de la seccion TOPUSER
topuser_sort_field BYTES reverse
#
#
# Criterio de orden para la seccion USER: SITE/CONNECT/BYTES/TIME
# Con esto se organizará la sección de usuarios del mismo modo que el item anterior
user_sort_field BYTES reverse
#
#
# Fichero de los usuariso que NO aparecerán en el reporte
exclude_users /etc/sarg/exclude.users
#
#
# Fichero que contiene los hosts que NO aparecerán en el reporte
exclude_hosts /etc/sarg/exclude.hosts
#
#
# Formato de fecha (e=dd/mm/yy, u=mm/dd/yy, w=yy/ww)
date_format e
# Limite de logs hasta que los antiguos sean eliminados. Cuando existan mas
# de N reportes, el más antiguo es automáticamente eliminado.
# Así(lastlg 0) indica que no se debe eliminar nunca.
lastlog 0

Manual Administración GNU/Linux 260


Unidad 15: Servidor Proxy - Squid

Generar un reporte:

# sarg -f /etc/sarg/sarg-dia.conf -d dd/mm/yy-dd/mm/yy

Dependiendo de la cantidad de accesos al proxy y del tamaño del fichero de log, el proceso se puede
demorar. Cuando esta operación termina, es posible acceder al informe ubicado en el directorio
configurado en la línea (output_dir /var/www/html/squid-report/dia ) desde el navegador web.

Estos reportes pueden generarse automáticamente configurando crontab.

15.10 Configuración de navegadores para usar Squid

Si no se utiliza un proxy transparente, será necesario configurar los clientes para que naveguen a través
del proxy. Es una tarea rápida y fácil de llevar a cabo.

Mozilla Firefox:

Hay que conocer la dirección IP de la máquina donde funciona Squid y el puerto en el que funciona. Y
colocarlos en: Editar => Preferencias => Red => Opciones

Manual Administración GNU/Linux 261

También podría gustarte