Cómo configurar un servidor Proxy con Squid

Squid es un servidor proxy para Linux, que además de actuar como servidor de caché web, permite filtrar contenidos. O sea que por medio de diversas directivas podemos bloquear la navegación a ciertas webs, dominios, tipos de archivos, palabras …

 
Squid, servidor proxy y filtro de contenidos

Atribución de la imagen: Squid-cache.org

Web oficial de SQUID PROXY: http://www.squid-cache.org/

 

 
En este artículo:
 

 

 

Qué es SQUID Proxy

 
Squid  actuará por defecto como servidor Proxy transparente y servidor proxy caché, así que nos permite gestionar el acceso a cliente y nos permite crear ACL´s para Squid (Access Control list), o sea listas de control de acceso para host grupos redes … a los cuales autorizar hemos o no la navegación y además podemos prohibir concretamente la navegación a sitios concretos .

Como decíamos antes los servidores Proxy transparentes también pueden actuar como filtro de contenidos porque es un servidor intermediario (proxy). Este filtro de contenidos lo haremos por medio de diversas directivas que utiliza Squid.
 

 

INSTALANDO proxy transparente SQUID

  • Instalaremos Squid en CentOS con:
1
yum -y install squid

 

  • En Debian, instalaremos Squid con:
1
sudo apt install squid

 

  • Si recibimos errores en CentOS por problemas de repositorios:
1
yum update --disablerepo=epel\*

o

1
yum -y install epel-release

 

 

CONFIGURAR SQUID

 

Para configurar Squid, hemos de editar el archivo /etc/squid/squid.conf. Vamos a crear una configuración básica.

Lo primero vemos que el archivo squid.conf.default muestra lo siguiente:

#
# Recommended minimum configuration:
#
 
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
 
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
 
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
 
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
 
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
 
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
 
# 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
http_access allow localhost
 
# And finally deny all other access to this proxy
http_access deny all
 
# Squid normally listens to port 3128
http_port 3128
 
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
 
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
 
#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

 
Esta es la configuración por defecto de Squid. Interesa que guardemos una copia de backup del archivo por si hemos de restaurarla en caso de desastre.

Hecha la copia del archivo, comenzamos a configurar el archivo /etc/squid/squid.conf, que es el que realmente utilizará Squid para funcionar.
 

 

CONFIGURACIÓN BÁSICA DE SERVIDOR PROXY SQUID PARA PROBAR SU FUNCIONAMIENTO

 

Qué va a hacer Squid en nuestro caso:

 

  • Permitir la navegación en un rango de red concreto (y cachear la navegación web en dicho rano de red).
  • Bloquear algunos dominios (Por ahora veremos una configuración muy básica para empezar).

 

Configurando Squid (Configuración básica)

 

  • Creamos una acl para nuestra red local (pondremos la red 192.168.8.0/24 en este caso, aunque es muy común que sea la 192.168.1.0/24 o la 192.168.0.0/24). Importante que la máscara de red la pongamos en notación de prefijo de red, o sea /24 en lugar de 255.25.255.0:
1
acl miredlocal src 192.168.8.0/24

 

  • Y permitimos la navegación a dicha acl:
1
http_access allow miredlocal

 

 

BLOQUEO DE CONTENIDOS (Bloquear Dominios con Squid)

 

  • Y ahora probamos el bloqueo de algunos contenidos, por ejemplo de alguna red social (en este caso hemos elegido facebook), ya que no queremos que en el trabajo la usen los empleados.

Lo haremos así, con la directiva dstdomain:

Declaramos la acl, que nos remite a un archivo, en el cual constarán los dominios que queremos bloquear:

1
acl dominios-denegados dstdomain "/etc/squid/dominiosdenegados"

 

Y declaramos el comportamiento de dicha acl, deny o allow, en este caso deny (denegar)

1
http_access deny dominios-denegados

 

Contenido del archivo /etc/squid/dominios bloqueados:

1
.facebook.com

 
Vemos el contenido del archivo dominios denegados , que leerá la directiva dstdom en squid.
 

 

BLOQUEO DE CONTENIDOS (Bloquear por expresiones regulares)

 
Usaremos la directiva url_regex

Creamos la acl:

1
acl expresiones-denegadas url_regex "/etc/squid/expresiones-denegadas"

y le denegamos el trafico:

1
http_access deny expresiones-denegadas

 

Y el contenido del archivo “/etc/squid/expresiones-denegadas”, será simplemente:

1
torrent

 
Así que si Squid encuentra esta expresión en una url, la bloqueará (Esta directiva es muy configurable y avanzada, así que vamos a mostrar lo que hace con este ejemplo simple):

squid filtro contenidos con directiva url_regex
 

 

BLOQUEO DE CONTENIDOS (Bloquear tipos de archivos)

 
Lo haremos con la directiva urlpath_regex

así:

1
acl archivos urlpath_regex "/etc/squid/archivos"
1
http_access deny archivos

 

Y el archivo “/etc/squid/archivos” contiene:

1
2
3
4
.ppt
.mp3$
.avi$
.mov$

 
filtro contenidos squid tipo archivos
 

Ahora intentamos acceder a una URL que contiene un archivo con extensión .PPT, y comprobamos que ha sido bloqueada:

squid directiva urlpath_regex  - bloqueo de tipo de archivos
 

 

Así queda el archivo Squid.conf con la configuración básica

 
En la imagen vemos la ACL que permite el tráfico desde nuestra red local, y la ACL que bloquea dominios concretos.

Como extra, podríamos también añadir las directivas antes mencionadas:

url_regex 

urpath_regex

archivo de configuracion basica de servidor Proxy Squid: squid.conf
 

 

CONFIGURAR LA CACHÉ DE SQUID

 
El servidor Proxy Squid nos permite configurar el directorio donde alamcenará los archivos de la caché. En nuestro caso elegimos el directorio por defecto, así que casi al final del archivo squid.conf, encontraremos la directiva cache_dir.

Descomentamos la linea y reiniciamos Squid, y comenzará a cachear las páginas web en dicho directorio:

1
2
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256

 

– ufs: sistema de almacenamiento que utilizará.
– /var/spool/squid: unidad y carpeta donde se guardarán los ficheros de la caché.
– 100: tamaño máximo que tendrá la caché (en MB), en el ejemplo 100MB.
– 16: número de carpetas de primer nivel.
– 256: número de subcarpetas de segundo nivel.
 
Configurar directorio de la caché del servidor Proxy SQUID

 

 

INICIAR EL SERVICIO DE SQUID Y COMPROBAR SU STATUS

 

iniciamos el servicio de squid:

1
systemctl start squid

 

y comprobamos su status, y que no hay errores:

1
systemctl status squid

 

Si queremos habilitar Squid para que cargue al inicio del sistema, además ejecutaremos:

1
systemctl enable squid

 

iniciar servicio squid y comprobar status :
systemctl start squid y systemctl status squid
 

 

TESTEANDO SQUID DESDE UN CLIENTE WEB

 

Configurando el cliente para usar el Proxy Squid

 
Para usar el Proxy, configuraremos un navegador para que realice las peticiones a la IP de la máquina donde funciona Squid.

Vamos a utilizar el navegador Firefox.

Accedemos a las opciones de Firefox desde la esquina superior derecha: Menú y después a Opciones

firefox menu opciones
 

 
A continuación, en la pestaña de General, nos desplazamos abajo del todo y buscamos Configuración de conexión, y pulsamos el botón de Configurar:

firefox opciones/general/configuracion de conexion

 

 
Y en la ventana que se abrirá, elegimos la opción de Configuración manual de proxy.

En Proxy HTTP colocamos la IP de la máquina que está ejecutando Squid, y el puerto de Squid, que por defecto será el 3128.

Importante marcar la pestaña inferior de “Usar el mismo proxy globalmente

firefox: configuracion manual de proxy, para usar Squid Proxy
 

 

Probando la navegación desde el cliente conectado al Proxy Squid

 
Como hemos bloqueado el dominio facebook.com, comprobamos la navegación accediendo a dicho dominio, y vemos que aparece el mensaje de que el Proxy está bloqueando la navegación:

El servidor proxy está rechazando las conexiones

 

squid proxy linux el servidor proxy esta rechazando las conexiones
 

 

COMPROBANDO EL LOG DE SQUID

 
Y en el log vemos que Squid ha denegado la petición:

Ejecutamos

1
tail -f /var/log/squid/access.log

 

Y comprobamos que el tráfico hacia el dominio a bloquear, colocado en la directiva dstdomain de Squid, que en este caso era facebook.com, ha sido bloqueado:

1
192.168.1.2 TCP_DENIED/403 4026 CONNECT www.facebook.com:443

 

squid proxy tcp denied squid log