Squid es un servidor proxy para web con caché. Es una de las aplicaciones más populares y de referencia para esta función, software libre publicado bajo licencia GPL. Entre sus utilidades está la de mejorar el rendimiento de las conexiones de empresas y particulares a Internet guardando en caché peticiones recurrentes a servidores web y DNS, acelerar el acceso a un servidor web determinado o añadir seguridad realizando filtrados de tráfico.

Aunque orientado principalmente a HTTP y HTTPS soporta también otros protocolos como FTP e incluso Gopher. Implementa cifrado SSL/TLS tanto en la conexión al servidor web como a los navegadores y cualquier cliente web que lo soporte.

Instalación de SQUID

Antes de realizar ninguna configuración vamos a instalar el paquete apt install squid3 y ahora procedemos a la configuración del proxy

Configuración proxy en firefox

Nos dirigimos a Preferencias - Avanzado - Red - Conexión - Configuración y tiene que quedar asi:

Especificaciones configuración

Queremos instalar un servidor proxy/cache en nuestro servidor. Con ello vamos a poder controlar las páginas web a las que accedamos, además de acelerar nuestra navegación.

Nos piden la configuración de un proxy/cache/filtro en nuestra infraestrucutra. Hemos elegido como proxy/cache squid3, y como filtro de contenido dansguardian. Tenemos que tener en cuenta las siguientes consideraciones:

El proxy/cache solo admite conexiones de la red local

Vamos a editar el fichero de configuración /etc/squid3/squid.conf, introducimos lo siguiente:

#Acl:

acl localnet src 172.22.0.0/16

#Y en la seccion de access:

http_access allow localnet

Creación de usuarios y credenciales

Ahora creamos los usuarios y le asignamos una contraseña:

#Profesor
htpasswd -c /etc/squid3/passwd profesor
New password: 
Re-type new password: 
Adding password for user profesor

#Alumnos
htpasswd /etc/squid3/passwd alumno
New password: 
Re-type new password: 
Adding password for user alumno

Deniega cualquier conexión que no este autentificada con los usuarios creados anteriormente

Para la autenticación descomentamos y completamos estas lineas en el fichero /etc/squid3/squid.conf:

#Primero añadimos, arriba del documento 

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

#Mas abajo añadimos la siguiente linea(Justo debajo de acl safe_ports)

acl usuario proxy_auth REQUIRED

#Y por ultimo añadimos la siguiente linea(Justo debajo de insert)

http_access allow usuario

Info! Los http_access una vez se cumple la condición lo que se encuentra abajo no se comprueba.

Se quieren limitar las siguientes conexiones

Anteriormente hemos añadido una acl en la cual englobamos los dos usuarios, ahora vamos a crear dos acl mas en la cual vamos a separar alumnos y profesores:

acl alumnos proxy_auth alumno  
acl profesores proxy_auth profesor

Para los profesores y alumnos

No se pueden bajar ficheros que se puedan instalar (exe,msi,rar,zip,bin,iso).

#Donde se encuentran todas las acl (Debajo de acl CONNECT)

acl archivos urlpath_regex -i .zip .exe .msi .iso .bin .rar

#Donde se encuentra los http_access (Justo debajo de INSERT...)

http_reply_access deny archivos

Y reinicio el servicio systemctl restart squid3

Al intentar descargar un archivo por ejemplo .exe o .zip

No tienen acceso a Internet los fines de semana

#Donde se encuentran todas las acl (Debajo de acl CONNECT)

acl weekend time AS 00:00-23:59

#Donde se encuentra los http_access (Justo debajo de INSERT...)

http_reply_access deny weekend

Y reinicio el servicio systemctl restart squid3

Para los alumnos

No pueden ver contenido multimedia

#Donde se encuentran todas las acl (Debajo de acl CONNECT)

acl archivos_multimedia urlpath_regex -i \.mp3$ \.mp4$ \.wma$ \.avi$ \.wmv$ \.mov$ \.mpg$ \.mpeg$ \.ram$ \.vob$
acl req_mimetype_audio req_mime_type -i ^audio/mp3$ ^audio/mp4$ ^audio/mpeg$ ^audio/wav$ ^audio/x-mp3$ ^audio/x-mp4$
acl rep_mimetype_audio rep_mime_type -i ^audio/mp3$ ^audio/mp4$ ^audio/mpeg$ ^audio/wav$ ^audio/x-mp3$ ^audio/x-mp4$
acl req_mimetype_video req_mime_type -i ^video/avi$ ^audio/mpeg$ ^video/ogg$ ^video/quicktime$ ^video/x-ms-wmv$
acl rep_mimetype_video rep_mime_type -i ^video/avi$ ^audio/mpeg$ ^video/ogg$ ^video/quicktime$ ^video/x-ms-wmv$
acl req_mimetype_flash req_mime_type -i ^video/flash$ ^video/flv$ ^video/x-flv$ ^video/x-shockwave-flash$ ^video/x-swf$
acl rep_mimetype_flash rep_mime_type -i ^video/flash$ ^video/flv$ ^video/x-flv$ ^video/x-shockwave-flash$ ^video/x-swf$

#Donde se encuentra los http_access (Justo debajo de INSERT...)

http_access deny archivos_multimedia alumnos
http_access deny req_mimetype_audio alumnos
http_access deny req_mimetype_video alumnos
http_access deny req_mimetype_flash alumnos
http_reply_access deny rep_mimetype_audio alumnos
http_reply_access deny rep_mimetype_video alumnos
http_reply_access deny rep_mimetype_flash alumnos

Y reinicio el servicio systemctl restart squid3

Cuando intentemos acceder a un video con formato .mp4 nos solicitara un nuevo logueo, como solo hemos prohibido a los alumnos si te logueas como profesor podras ver el video.

Sólo tienen conexión de 8:00 h. a 14:00 h.

#Donde se encuentran todas las acl (Debajo de acl CONNECT)

acl horario_1 time MTWHF 14:01-23:59
acl horario_2 time MTWHF 00:00-07:59

#Donde se encuentra los http_access (Justo debajo de INSERT...)

http_reply_access deny horario_1
http_reply_access deny horario_2

Y reinicio el servicio systemctl restart squid3

Filtrar dominios por medio de un fichero

Para poder filtar varios dominios a la vez vamos a crear una lista negra la cual vamos a llamar black_domain.acl y añadimos las siguiente lineas en el fichero /etc/squid3/squid.conf:

#Donde se encuentran todas las acl (Debajo de acl CONNECT)

acl no_domain url_regex "/etc/squid3/black_domain.acl"

#Donde se encuentra los http_access (Justo debajo de INSERT...)

http_access deny no_domain

Creamos el fichero /etc/squid3/black_domain.acl y insertamos la siguiente linea:

.youtube.com

Y reinicio el servicio systemctl restart squid3

Orden de http_access

Es muy importante el orden de los http_access por lo tanto todo lo explicado anteriormente tendrá el siguiente orden para que funcione a la perfección.

Asi quedaria el fichero sin los comentarios

#Parámetros autentificación
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

#ACL
acl archivos urlpath_regex -i \.zip$ \.exe$ \.msi$ \.iso$ \.bin$ \.rar$
acl usuario proxy_auth REQUIRED
acl alumnos proxy_auth alumno
acl profesores proxy_auth profesor
acl weekend time AS 00:00-23:59
acl horario_1 time MTWHF 14:01-23:59
acl horario_2 time MTWHF 00:00-07:59
acl no_domain url_regex "/etc/squid3/black_domain.acl"
acl archivos_multimedia urlpath_regex -i \.mp3$ \.mp4$ \.wma$ \.avi$ \.wmv$ \.mov$ \.mpg$ \.mpeg$ \.ram$ \.vob$
acl req_mimetype_audio req_mime_type -i ^audio/mp3$ ^audio/mp4$ ^audio/mpeg$ ^audio/wav$ ^audio/x-mp3$ ^audio/x-mp4$
acl rep_mimetype_audio rep_mime_type -i ^audio/mp3$ ^audio/mp4$ ^audio/mpeg$ ^audio/wav$ ^audio/x-mp3$ ^audio/x-mp4$
acl req_mimetype_video req_mime_type -i ^video/avi$ ^audio/mpeg$ ^video/ogg$ ^video/quicktime$ ^video/x-ms-wmv$
acl rep_mimetype_video rep_mime_type -i ^video/avi$ ^audio/mpeg$ ^video/ogg$ ^video/quicktime$ ^video/x-ms-wmv$
acl req_mimetype_flash req_mime_type -i ^video/flash$ ^video/flv$ ^video/x-flv$ ^video/x-shockwave-flash$ ^video/x-swf$
acl rep_mimetype_flash rep_mime_type -i ^video/flash$ ^video/flv$ ^video/x-flv$ ^video/x-shockwave-flash$ ^video/x-swf$

#HTTP_ACCESS
http_access deny weekend
http_reply_access deny horario_1 alumnos
http_reply_access deny horario_2 alumnos
http_access deny archivos_multimedia alumnos
http_access deny archivos
http_access deny req_mimetype_audio alumnos
http_access deny req_mimetype_video alumnos
http_access deny req_mimetype_flash alumnos
http_reply_access deny rep_mimetype_audio alumnos
http_reply_access deny rep_mimetype_video alumnos
http_reply_access deny rep_mimetype_flash alumnos
http_access deny no_domain
Info! Recomiendo no eliminar todo el fichero dado que existen «acl» por defecto y son necesarias para la navegación.