Introducción a Squid
Squid es un proxy web HTTP que funciona como caché y reenviador de solicitudes. Este software escrito en C++ bajo licencia GNU GPL ofrece múltiples funcionalidades para diversas situaciones, como acelerar servidores web mediante el almacenamiento en caché de solicitudes repetidas, cachear búsquedas web y DNS, filtrar tráfico y bloquear sitios web. Squid es considerado uno de los software más fiables para control de contenido y ha sido utilizado por numerosas organizaciones durante las últimas dos décadas.
Requisitos del Entorno
Nuestro entorno de prueba consiste en una máquina virtual CentOS 8.2 con las siguientes especificaciones:
- CPU - 3.4 GHz (1 núcleo)
- Memoria RAM - 1 GB
- Almacenamiento - 20 GB
- Sistema Operativo - CentOS 8.2
- Nombre de Host - proxy-squid.ejemplo.local
- Dirección IP - 192.168.10.50/24
Instalación de Squid en CentOS 8
Conéctese a su servidor mediante SSH como usuario root:
ssh root@proxy-squid.ejemplo.local
El paquete de Squid está disponible en los repositorios estándar de yum, por lo que procederemos con su instalación:
[root@proxy-squid ~]# dnf install -y squid
Last metadata expiration check: 2:12:45 ago on Thu 17 Dec 2020 09:03:48 PM CST.
Dependencies resolved.
============================================================================================
Package Arch Version Repository Size
============================================================================================
Installing:
squid x86_64 7:4.4-8.module_el8.2.0+319+d18e041f.1 AppStream 3.5 M
Installing dependencies:
libecap x86_64 1.0.1-2.module_el8.2.0+319+d18e041f AppStream 29 k
Enabling module streams:
squid 4
Transaction Summary
============================================================================================
Install 2 Packages
Total download size: 3.6 M
Installed size: 12 M
Downloading Packages:
(1/2): libecap-1.0.1-2.module_el8.2.0+319+d18e041f.x86_64.rpm 1.5 MB/s | 29 kB 00:00
(2/2): squid-4.4-8.module_el8.2.0+319+d18e041f.1.x86_64.rpm 41 MB/s | 3.5 MB 00:00
--------------------------------------------------------------------------------------------
Total 40 MB/s | 3.6 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Running scriptlet: squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64 1/1
Preparing : 1/1
Installing : libecap-1.0.1-2.module_el8.2.0+319+d18e041f.x86_64 1/2
Running scriptlet: libecap-1.0.1-2.module_el8.2.0+319+d18e041f.x86_64 1/2
Running scriptlet: squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64 2/2
Installing : squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64 2/2
Running scriptlet: squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64 2/2
Verifying : libecap-1.0.1-2.module_el8.2.0+319+d18e041f.x86_64 1/2
Verifying : squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64 2/2
Installed products updated.
Installed:
libecap-1.0.1-2.module_el8.2.0+319+d18e041f.x86_64
squid-7:4.4-8.module_el8.2.0+319+d18e041f.1.x86_64
Complete!
Habilite e inicie el servicio de proxy Squid:
[root@proxy-squid ~]# systemctl enable --now squid.service
Created symlink /etc/systemd/system/multi-user.target.wants/squid.service → /usr/lib/systemd/system/squid.service.
[root@proxy-squid ~]# systemctl status squid.service
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-12-17 23:17:24 CST; 8s ago
Docs: man:squid(8)
Process: 3894564 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, statu>
Process: 3894559 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUC>
Main PID: 3894566 (squid)
Tasks: 3 (limit: 23840)
Memory: 14.2M
CGroup: /system.slice/squid.service
├─3894566 /usr/sbin/squid -f /etc/squid/squid.conf
├─3894573 (squid-1) --kid squid-1 -f /etc/squid/squid.conf
└─3894582 (logfile-daemon) /var/log/squid/access.log
Dec 17 23:17:24 proxy-squid.ejemplo.local systemd[1]: Starting Squid caching proxy...
[root@proxy-squid ~]# netstat -antpl| grep squid
tcp6 0 0 :::3128 :::* LISTEN 3894573/(squid-1)
[root@proxy-squid ~]# ss -antpl| grep squid
LISTEN 0 4096 *:3128 *:* users:(("squid",pid=3894573,fd=13))
Permita el servicio de proxy Squid en el firewall de CentOS 8:
[root@proxy-squid ~]# firewall-cmd --permanent --add-service=squid
success
[root@proxy-squid ~]# firewall-cmd --reload
success
Configuración del Proxy Web Squid
El archivo de configuración global de Squid Web Proxy es /etc/squid/squid.conf. Podemos personalizarlo según nuestras necesidades:
[root@proxy-squid ~]# vi /etc/squid/squid.conf
Añada las siguientes directivas en el archivo:
dns_v4_first on
Reinicie el servicio de proxy Squid para cargar los cambios:
[root@proxy-squid ~]# systemctl restart squid
Configuración del Navegador del Cliente
Para configurar el navegador del cliente para que utilice el proxy Squid, siga estos pasos:
- Abra su navegador web (Firefox, Chrome, etc.)
- Acceda a la configuración de red o conexión
- Ingrese la dirección IP del proxy Squid (192.168.10.50) y el puerto (3128)
- Guarde la configuración
Para verificar, visite un sitio web como https://www.ejemplo.com. El contenido debería servirse a través de su servidor proxy Squid.
Configuración de Autenticación de Clientes Squid
Puede configurar la autenticación basada en usuarios para su servidor proxy Squid utilizando autenticación HTTP básica. Primero, instale las herramientas necesarias:
[root@proxy-squid ~]# dnf install -y httpd-tools
Last metadata expiration check: 2:41:04 ago on Thu 17 Dec 2020 09:03:48 PM CST.
Dependencies resolved.
=======================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================
Installing:
httpd-tools x86_64 2.4.37-21.module_el8.2.0+494+1df74eae AppStream 103 k
Installing dependencies:
apr x86_64 1.6.3-9.el8 AppStream 125 k
apr-util x86_64 1.6.1-6.el8 AppStream 105 k
Installing weak dependencies:
apr-util-bdb x86_64 1.6.1-6.el8 AppStream 25 k
apr-util-openssl x86_64 1.6.1-6.el8 AppStream 27 k
Enabling module streams:
httpd 2.4
Transaction Summary
=======================================================================================================================
Install 5 Packages
Total download size: 385 k
Installed size: 750 k
Downloading Packages:
(1/5): apr-util-bdb-1.6.1-6.el8.x86_64.rpm 9.8 MB/s | 25 kB 00:00
(2/5): apr-1.6.3-9.el8.x86_64.rpm 22 MB/s | 125 kB 00:00
(3/5): apr-util-openssl-1.6.1-6.el8.x86_64.rpm 11 MB/s | 27 kB 00:00
(4/5): apr-util-1.6.1-6.el8.x86_64.rpm 15 MB/s | 105 kB 00:00
(5/5): httpd-tools-2.4.37-21.module_el8.2.0+494+1df74eae.x86_64.rpm 36 MB/s | 103 kB 00:00
-----------------------------------------------------------------------------------------------------------------------
Total 33 MB/s | 385 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : apr-1.6.3-9.el8.x86_64 1/5
Running scriptlet: apr-1.6.3-9.el8.x86_64 1/5
Installing : apr-util-bdb-1.6.1-6.el8.x86_64 2/5
Installing : apr-util-openssl-1.6.1-6.el8.x86_64 3/5
Installing : apr-util-1.6.1-6.el8.x86_64 4/5
Running scriptlet: apr-util-1.6.1-6.el8.x86_64 4/5
Installing : httpd-tools-2.4.37-21.module_el8.2.0+494+1df74eae.x86_64 5/5
Running scriptlet: httpd-tools-2.4.37-21.module_el8.2.0+494+1df74eae.x86_64 5/5
Verifying : apr-1.6.3-9.el8.x86_64 1/5
Verifying : apr-util-1.6.1-6.el8.x86_64 2/5
Verifying : apr-util-bdb-1.6.1-6.el8.x86_64 3/5
Verifying : apr-util-openssl-1.6.1-6.el8.x86_64 4/5
Verifying : httpd-tools-2.4.37-21.module_el8.2.0+494+1df74eae.x86_64 5/5
Installed products updated.
Installed:
apr-1.6.3-9.el8.x86_64 apr-util-1.6.1-6.el8.x86_64
apr-util-bdb-1.6.1-6.el8.x86_64 apr-util-openssl-1.6.1-6.el8.x86_64
httpd-tools-2.4.37-21.module_el8.2.0+494+1df74eae.x86_64
Complete!
Cree un archivo de contraseñas y agregue un usuario llamado proxyuser:
[root@proxy-squid ~]# htpasswd -c /etc/squid/passwd proxyuser
New password:
Re-type new password:
Adding password for user proxyuser
Cambie el propietario del archivo de contraseñas:
[root@proxy-squid ~]# chown squid.squid /etc/squid/passwd
Edite el archivo de configuración de Squid para agregar la configuración de autenticación:
[root@proxy-squid ~]# vi /etc/squid/squid.conf
Añada las siguientes directivas después de las ACL de puerto:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Autenticación Básica de Squid
auth_param basic credentialsttl 2 horas
acl usuarios_autenticados proxy_auth REQUIRED
http_access allow usuarios_autenticados
Reinicie el servicio de proxy Squid para aplicar los cambios:
[root@proxy-squid ~]# systemctl restart squid
Al inetntar acceder a cualquier sitio web desde el cliente, ahora se le solicitará autenticación.
Creación de Lista Negra Personalizada
Para crear una lista de sitios bloqueados a través del proxy Squid:
[root@proxy-squid ~]# vi /etc/squid/bloqueados
Añada los siguientes dominios al archivo:
.redes-sociales.com
.noticias-sensacionalistas.com
Edite el archivo de configuración de Squid para agregar la configuración de la lista negra:
[root@proxy-squid ~]# vi /etc/squid/squid.conf
Añada las siguientes directrices después de las ACL de puerto:
acl sitios_bloqueados dstdomain "/etc/squid/bloqueados"
http_access deny sitios_bloqueados
Reinicie el servicio de proxy Squid para cargar los cambios:
[root@proxy-squid ~]# systemctl restart squid
Al intentar visitar http://www.redes-sociales.com desde el cliente, el acceso debería ser denegado.
Verificación de los Registros de Squid
Puede verificar los registros de Squid para confirmar el bloqueo de sitios:
[root@proxy-squid ~]# tail -f /var/log/squid/access.log
1608220657.698 15460 192.168.10.25 TCP_MISS/503 4192 GET http://www.redes-sociales.com/ proxyuser HIER_DIRECT/2408:4001:f10::8 text/html
1608220657.804 0 192.168.10.25 TCP_HIT/200 13102 GET http://proxy-squid.ejemplo.local:3128/squid-internal-static/icons/SN.png proxyuser HIER_NONE/- image/png
1608220676.642 15562 192.168.10.25 TCP_MISS/503 4262 GET http://www.redes-sociales.com/favicon.ico proxyuser HIER_DIRECT/2408:4001:f10::8 text/html
1608220729.378 15325 192.168.10.25 TCP_MISS/503 4192 GET http://www.redes-sociales.com/ proxyuser HIER_DIRECT/2408:4001:f10::8 text/html