Atribución de la imagen: Squid-cache.org
Web oficial de SQUID PROXY: http://www.squid-cache.org/
En este artículo:
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.
yum -y install squid
sudo apt install squid
yum update --disablerepo=epel\*
o
yum -y install epel-release
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.
acl miredlocal src 192.168.8.0/24
http_access allow miredlocal
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:
acl dominios-denegados dstdomain "/etc/squid/dominiosdenegados"
Y declaramos el comportamiento de dicha acl, deny o allow, en este caso deny (denegar)
http_access deny dominios-denegados
Contenido del archivo /etc/squid/dominios bloqueados:
.facebook.com
Usaremos la directiva url_regex
Creamos la acl:
acl expresiones-denegadas url_regex "/etc/squid/expresiones-denegadas"
y le denegamos el trafico:
http_access deny expresiones-denegadas
Y el contenido del archivo “/etc/squid/expresiones-denegadas”, será simplemente:
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):
Lo haremos con la directiva urlpath_regex
así:
acl archivos urlpath_regex "/etc/squid/archivos"
http_access deny archivos
Y el archivo “/etc/squid/archivos” contiene:
.ppt
.mp3$
.avi$
.mov$
Ahora intentamos acceder a una URL que contiene un archivo con extensión .PPT, y comprobamos que ha sido bloqueada:
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
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:
# 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.
iniciamos el servicio de squid:
systemctl start squid
y comprobamos su status, y que no hay errores:
systemctl status squid
Si queremos habilitar Squid para que cargue al inicio del sistema, además ejecutaremos:
systemctl enable 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
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:
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”
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”
Y en el log vemos que Squid ha denegado la petición:
Ejecutamos
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:
192.168.1.2 TCP_DENIED/403 4026 CONNECT www.facebook.com:443