En este conjunto de prácticas se propone la instalación y configuración de un servidor Squid sobre Ubuntu Server para estudiar el funcionamiento de los servidores proxy.
El recorrido comienza con un proxy básico y avanza progresivamente hacia la configuración de caché, filtrado, autenticación, monitorización, análisis de logs y configuración de clientes.
1. Topología
La infraestructura utilizada será:
INTERNET
│
▼
┌──────────────┐
│ Router │
│ 192.168.1.1 │
└──────┬───────┘
│
ether1
│
┌───────▼────────┐
│ MikroTik │
│ 192.168.88.1 │
│ Firewall + NAT │
└───────┬────────┘
│
192.168.88.0/24
│
┌──────────┴──────────┐
│ │
Ubuntu + Squid Cliente
192.168.88.10 192.168.88.x
:3128
El servidor proxy utilizará:
IP: 192.168.88.10
Puerto: 3128
2. Práctica 1. Instalación y configuración de un servidor proxy
Objetivos
- Comprender el funcionamiento de un proxy.
- Instalar Squid.
- Configurar un proxy HTTP/HTTPS.
- Configurar un cliente.
- Comprobar las peticiones realizadas a través del proxy.
2.1. Configurar Ubuntu
Asignar al servidor Ubuntu:
IP: 192.168.88.10
Máscara: 255.255.255.0
Gateway: 192.168.88.1
DNS: 192.168.88.1
Comprobar la configuración:
ip addr
ip route
Probar el gateway:
ping 192.168.88.1
Comprobar Internet:
ping 8.8.8.8
2.2. Instalar Squid
sudo apt update
sudo apt install squid
Comprobar el servicio:
sudo systemctl status squid
Comprobar que está escuchando:
sudo ss -lntp | grep 3128
2.3. Realizar una copia de seguridad
Antes de modificar la configuración:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
Editar:
sudo nano /etc/squid/squid.conf
Una configuración inicial sencilla:
http_port 3128
acl red_local src 192.168.88.0/24
http_access allow red_local
http_access deny all
cache_dir ufs /var/spool/squid 100 16 256
Comprobar la configuración:
sudo squid -k parse
Si no aparecen errores:
sudo systemctl restart squid
3. Configurar un cliente
El cliente debe utilizar:
Proxy HTTP: 192.168.88.10
Puerto: 3128
Por ejemplo, en Firefox:
Ajustes → Configuración de red → Configuración
Seleccionar:
Configuración manual del proxy
Y configurar:
Proxy HTTP: 192.168.88.10
Puerto: 3128
Probar desde terminal
Utilizando curl:
curl -x http://192.168.88.10:3128 http://example.com
También:
curl -x http://192.168.88.10:3128 https://example.com
Mientras tanto, en el servidor:
sudo tail -f /var/log/squid/access.log
Deberían aparecer las peticiones realizadas por el cliente.
4. Práctica 2. Configuración de la caché
Objetivo
Configurar el almacenamiento en caché de Squid y analizar su funcionamiento.
La caché permite almacenar determinados contenidos para poder reutilizarlos cuando sea apropiado.
4.1. Configurar el almacenamiento
En:
/etc/squid/squid.conf
añadir o modificar:
cache_dir ufs /var/spool/squid 500 16 256
En este ejemplo:
500 MB
16 directorios de primer nivel
256 directorios de segundo nivel
Comprobar:
sudo squid -k parse
Reiniciar:
sudo systemctl restart squid
4.2. Consultar información de la caché
sudo squidclient mgr:info
También:
sudo squidclient mgr:storedir
Y:
sudo squidclient mgr:objects
Actividad
El alumno debe:
- Acceder a un recurso mediante el proxy.
- Consultar
access.log. - Volver a solicitar el recurso.
- Analizar las respuestas de Squid.
- Identificar posibles accesos desde caché.
- Explicar las ventajas y limitaciones de utilizar una caché.
5. Práctica 3. Filtrado mediante Squid
Objetivo
Configurar políticas para controlar qué contenidos pueden consultar los clientes.
Se trabajará:
- Filtrado por dominio.
- Filtrado por URL.
- Filtrado por extensión.
- Filtrado por horario.
5.1. Bloquear determinados dominios
Crear un archivo:
sudo nano /etc/squid/bloqueados.txt
Por ejemplo:
example.org
example.net
En squid.conf:
acl dominios_bloqueados dstdomain "/etc/squid/bloqueados.txt"
http_access deny dominios_bloqueados
La regla debe situarse antes de la autorización general:
acl red_local src 192.168.88.0/24
acl dominios_bloqueados dstdomain "/etc/squid/bloqueados.txt"
http_access deny dominios_bloqueados
http_access allow red_local
http_access deny all
Comprobar:
sudo squid -k parse
Reiniciar:
sudo systemctl restart squid
5.2. Bloquear determinadas extensiones
Por ejemplo:
acl archivos_bloqueados urlpath_regex -i \.(exe|msi|iso)$
http_access deny archivos_bloqueados
Esto permite trabajar con diferentes tipos de filtrado:
Dominio
↓
URL
↓
Extensión
5.3. Filtrado por horario
Crear una ACL:
acl horario_clase time MTWHF 08:00-14:00
Podemos combinarla con los dominios bloqueados:
acl dominios_bloqueados dstdomain "/etc/squid/bloqueados.txt"
http_access deny dominios_bloqueados horario_clase
De esta forma, una política puede aplicarse únicamente durante determinadas franjas horarias.
6. Práctica 4. Autenticación de usuarios
Objetivo
Configurar autenticación para que los clientes tengan que identificarse antes de utilizar el proxy.
Se utilizará autenticación básica mediante usuarios locales.
6.1. Instalar htpasswd
sudo apt install apache2-utils
Crear el primer usuario:
sudo htpasswd -c /etc/squid/passwd alumno1
Añadir usuarios adicionales:
sudo htpasswd /etc/squid/passwd alumno2
Por ejemplo:
sudo htpasswd /etc/squid/passwd profesor
6.2. Configurar Squid
En squid.conf:
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy
acl usuarios proxy_auth REQUIRED
http_access allow usuarios
http_access deny all
Podemos combinar la autenticación con la red local:
acl red_local src 192.168.88.0/24
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy
acl usuarios proxy_auth REQUIRED
http_access allow red_local usuarios
http_access deny all
Comprobar:
sudo squid -k parse
Reiniciar:
sudo systemctl restart squid
Actividad
Crear:
alumno1
alumno2
profesor
Después:
- Intentar navegar sin autenticación.
- Introducir credenciales incorrectas.
- Introducir credenciales válidas.
- Comprobar el acceso.
- Revisar los registros.
7. Práctica 5. Monitorización y logs
Objetivo
Analizar la actividad registrada por Squid.
Los principales archivos de registro son:
/var/log/squid/access.log
/var/log/squid/cache.log
7.1. Monitorizar las peticiones
sudo tail -f /var/log/squid/access.log
Consultar el log completo:
sudo less /var/log/squid/access.log
Consultar errores:
sudo tail -f /var/log/squid/cache.log
7.2. Buscar accesos bloqueados
sudo grep "TCP_DENIED" /var/log/squid/access.log
Buscar accesos que hayan utilizado caché:
sudo grep "TCP_HIT" /var/log/squid/access.log
Buscar peticiones que hayan tenido que obtenerse del exterior:
sudo grep "TCP_MISS" /var/log/squid/access.log
Actividad
A partir de los registros, identificar:
Fecha
Hora
IP del cliente
Destino
Método HTTP
Código de respuesta
Tamaño
Resultado de Squid
Por ejemplo:
TCP_DENIED
TCP_HIT
TCP_MISS
8. Práctica 6. Generación de informes
Objetivo
Generar informes a partir de los registros de Squid.
Una herramienta que puede utilizarse es SARG.
Instalación:
sudo apt update
sudo apt install sarg
Editar:
sudo nano /etc/sarg/sarg.conf
Indicar el archivo de registro:
access_log /var/log/squid/access.log
Generar un informe:
sudo sarg
Los informes pueden utilizarse para analizar:
- Usuarios.
- Sitios visitados.
- Volumen de tráfico.
- Número de peticiones.
- Actividad por periodos.
- Información registrada por el proxy.
9. Práctica 7. Configuración de clientes proxy
Objetivo
Configurar diferentes clientes para utilizar el servidor Squid.
Firefox
Configurar:
Proxy HTTP: 192.168.88.10
Puerto: 3128
curl
Realizar una petición mediante el proxy:
curl -x http://192.168.88.10:3128 https://example.com
También se puede especificar usuario y contraseña cuando la autenticación esté activada:
curl -x http://usuario:contraseñ[email protected]:3128 https://example.com
Variables de entorno
Configurar:
export http_proxy=http://192.168.88.10:3128
export https_proxy=http://192.168.88.10:3128
Comprobar:
curl https://example.com
Eliminar la configuración:
unset http_proxy
unset https_proxy
10. Práctica 8. Comparación entre conexión directa y conexión mediante proxy
Objetivo
Comprobar las diferencias entre navegar directamente y utilizar un servidor proxy.
Sin proxy
Cliente
│
▼
MikroTik
│
▼
Internet
Con proxy
Cliente
│
▼
MikroTik
│
▼
Squid
│
▼
Internet
Los alumnos deberán comparar:
- Conectividad.
- Logs.
- Filtrado.
- Autenticación.
- Caché.
- Peticiones realizadas.
- Comportamiento del cliente.
11. Práctica final. Implementación completa de un proxy
Como actividad final se puede integrar toda la configuración anterior.
Escenario
INTERNET
│
▼
Router principal
192.168.1.1
│
ether1
│
┌────────▼────────┐
│ MikroTik │
│ 192.168.88.1 │
└────────┬────────┘
│
┌──────────┴──────────┐
│ │
Ubuntu + Squid Clientes
192.168.88.10 Wi-Fi
:3128
El servidor deberá implementar:
Proxy
192.168.88.10:3128
Caché
cache_dir
Filtrado
Bloqueo de determinados dominios:
/etc/squid/bloqueados.txt
Autenticación
alumno1
alumno2
profesor
Logs
/var/log/squid/access.log
/var/log/squid/cache.log
Informes
Utilización de SARG:
sudo sarg
Clientes
Configurar:
- Firefox.
curl.- Variables de entorno
http_proxyyhttps_proxy.
12. Relación con los contenidos
| Contenido | Práctica |
|---|---|
| Tipos de proxy | 1 |
| Características y funciones | 1 |
| Instalación de Squid | 1 |
| Configuración del proxy | 1 |
| Almacenamiento en caché | 2 |
| Configuración de filtros | 3 |
| Autenticación | 4 |
| Monitorización | 5 |
| Registros de actividad | 5 |
| Informes sobre logs | 6 |
| Configuración de clientes | 7 |
| Integración de contenidos | 8 |
13. Configuración mínima de referencia
Como punto de partida para las prácticas, una configuración sencilla de Squid puede ser:
http_port 3128
acl red_local src 192.168.88.0/24
http_access allow red_local
http_access deny all
cache_dir ufs /var/spool/squid 500 16 256
Comprobar:
sudo squid -k parse
Reiniciar:
sudo systemctl restart squid
Y comprobar:
sudo systemctl status squid
14. Secuencia recomendada
La progresión completa queda:
Práctica 1
Instalación y configuración básica
↓
Práctica 2
Caché
↓
Práctica 3
Filtros
↓
Práctica 4
Autenticación
↓
Práctica 5
Logs y monitorización
↓
Práctica 6
Informes
↓
Práctica 7
Configuración de clientes
↓
Práctica 8
Proyecto final
De esta forma, cada práctica introduce una funcionalidad nueva de Squid y al terminar el recorrido se dispone de un servidor proxy completo con caché, filtrado, autenticación, registros, informes y clientes configurados.