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 …
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
- Cómo instalar proxy transparente Squid
- Configurar Squid
- CONFIGURACIÓN BÁSICA DE SERVIDOR PROXY SQUID PARA PROBAR SU FUNCIONAMIENTO
- Configurando Squid (Configuración básica)
- BLOQUEO DE CONTENIDOS (Bloquear Dominios con Squid)
- BLOQUEO DE CONTENIDOS (Bloquear por expresiones regulares)
- BLOQUEO DE CONTENIDOS (Bloquear tipos de archivos)
- Así queda el archivo Squid.conf con la configuración básica
- CONFIGURAR LA CACHÉ DE SQUID
- INICIAR EL SERVICIO DE SQUID Y COMPROBAR SU STATUS
- TESTEANDO SQUID DESDE UN CLIENTE WEB
- COMPROBANDO EL LOG DE SQUID
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 |
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):
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$ |
Ahora intentamos acceder a una URL que contiene un archivo con extensión .PPT, y comprobamos que ha sido bloqueada:
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
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.
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 |
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
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”
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”
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 |