Proyecto Servidor Linux (III): Instalación y Configuración de Squid en Ubuntu Server

He instalado Ubuntu Server por primera vez, y le instalé Guest Additions de VirtualBox; el sistema corre en una máquina virtual y actualmente no proporciona ningún servicio aparte de alimentar mi ego, pero es un paso adelante.


Mientras continuaba investigando sobre este proyecto, decidí que la red de máquinas virtuales tenía que estar aislada de la red de mi casa, para estar un poco más cerca de la realidad de una red física independiente. Para ello voy a preparar el servidor Ubuntu para que funcione como gateway y servidor DHCP de los equipos virtuales; así me aseguro que todos tengan la misma salida a Internet, y reciban direcciones IP sin necesidad de configurar la red de cada equipo manualmente.

Voy a empezar instalando y configurando Squid, un proxy caché que soporta HTTP, HTTPS, FTP y más. Squid ayuda a reducir el uso del ancho de banda y mejorar los tiempos de respuesta almacenando y reutilizando páginas web frecuentemente visitadas. Hay un artículo en la documentación de Ubuntu Server sobre este proceso, pueden revisarlo aquí.

Para implementar un servidor proxy es necesario que el equipo donde va a correr tenga dos tarjetas de red, una apuntando hacia el router/gateway y las segunda se utilizará para comunicarse con el resto de equipos de la red local. La primera tarjeta funcionará con DHCP y la segunda debe tener una dirección IP física asignada.

Antes de encender la VM de Ubuntu, hay que agregar la segunda tarjeta de red seleccionando la VM en la pantalla principal de VirtualBox, y luego haciendo clic en el botón "Configuración" en la parte de arriba:

Una vez la configuración está abierta, hay que seleccionar la opción "Red" del lado izquierdo, hacer clic en la ficha "Adaptador 2" y marcar la casilla "Habilitar adaptador de red".

La nueva tarjeta será de tipo "Red interna", con el fin de que se comunique únicamente con otros dispositivos virtuales, pero no con el sistema anfitrión.

Luego de iniciar sesión en Ubuntu Server hay que confirmar que el sistema reconoce la nueva tarjeta de red, para eso se usa el comando "ip a":

El nuevo dispositivo de red es "enp0s8". La configuración de red de Ubuntu Server se hace a través de una utilidad llamada Netplan, para que la nueva tarjeta funcione hay que agregar datos al archivo de configuración de esta utilidad; este archivo se encuentra en el directorio /etc/netplan:

cd /etc/netplan ls

Este es el resultado de esos comandos:

El nombre del archivo es "50-cloud-init.yaml"; antes de hacer cambios voy a guardar una copia del archivo, en caso que algo salga mal:

sudo cp 50-cloud-init.yaml 50-cloud-init.bak

Ahora hay dos archivos bajo /etc/netplan:

Se necesitan privilegios de administrador para abrir el archivo de configuración, lo voy a abrir con el editor de texto Nano:

sudo nano 50-cloud-init.yaml

El archivo se ve así:

Hay que agregar la información del nuevo dispositivo de red. Me llevó varios días completar ese paso, porque el archivo de configuración es un tanto quisquilloso con la estructura y el indentado. Al final pude editar este archivo y guardarlo sin recibir mensajes de error al aplicar la configuración:

network: ethernets: enp0s3: dhcp4: true enp0s8: dhcp4: false dhcp6: false addresses: - 192.168.100.1/24 version: 2

Para guardar el archivo hay que usar la combinación de teclas "Ctrl+O", después "Ctrl+X" para salir del editor de texto. Finalmente hay que correr este comando para guardar la configuración del dispositivo de red:

sudo netplan apply

Al revisar los dispositivos de red tiene que aparecer la segunda tarjeta con la dirección IP asignada en el archivo de configuración:

Ahora hay que instalar Squid:

sudo apt install squid

Igual que el archivo de configuración de Netplan, es recomendable hacer una copia del archivo de configuración de Squid:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

Ahora hay que abrir el archivo de configuración:

sudo nano /ect/squid/squid.conf

El archivo es enorme, y tiene una cantidad obscena de opciones que se pueden modificar; no voy a revisarlas todas, me voy a enfocar en los valores para obtener una configuración básica. El primer valor a modificar es el puerto utilizado para tráfico HTTP, llamado "http_port"; por defecto Squid utiliza el valor 3128, voy a cambiarlo a 8080:

http_port 8080

En su configuración básica Squid almacena toda la información en la RAM del equipo donde corre, pero es posible crear un directorio para almacenar información en el disco local. Esto es útil cuando múltiples usuarios o equipos de la red se conectan frecuentemente a los mismos sitios web, así Squid guardará una copia de algunos datos sin que sea necesario actualizar constantemente esas páginas. Para habilitar ese almacenamiento hay que "descomentar" la línea con el valor "cache_dir", esto se logra removiendo el símbolo "#" al inicio de la línea:

cache_dir ufs /var/spool/squid 100 16 256

Con eso se asignan 100MB al directorio /var/spool/squid para se utilicen como memoria caché del proxy.

Otro valor muy útil es "reply_body_max_size", que se utiliza para asignar un límite al tamaño de los archivos que se pueden descargar a través de Squid:

reply_body_max_size 30 MB

Squid proporciona control sobre los dispositivos que van a tener acceso a Internet a través de "Listas de Control de Acceso", también conocidas como ACLs. Hay una sección dentro de squid.conf dedicada para ello, se ve algo así:

Voy a desactivar la entrada para la red 192.168.0.0, y voy a agregar mi red local a la lista:

#acl localnet src 192.168.0.0/24 acl localnet src 192.168.100.0/24

Finalmente, hay que permitir el acceso a la ACL localnet; para ello hay que remover el símbolo "#" de la línea:

http_access allow localnet

Existen muchas opciones más, pueden tomarse el tiempo de revisar la documentación de Squid y el archivo de configuración para encontrar otros valores que pueden ser útiles en su situación particular. Para aplicar estos cambios hay que guardarlos en el archivo de configuración y reiniciar el servicio Squid en el equipo:

sudo service squid restart

Es tiempo de probar si el proxy funciona correctamente; voy a abrir mi segunda máquina virtual y le voy a asignar una IP dentro del rango 192.168.100.XXX:

También hay que configurar el navegador manualmente:

Si intento abrir Google.com desde el navegador con el servidor proxy apagado, no funciona:

Esto es lo que ocurre con el servidor proxy encendido:

Como dijo una vez un gran sabio, "YES!"

Esta es la configuración más básica de Squid, como tal es un buen punto de partida. Toma tiempo, pero vale la pena revisar la documentación para sacar el mejor provecho de esta herramienta, y abre la puerta para implementar muchas más soluciones, como un servidor de archivos e impresores por ejemplo. El siguiente paso será implementar DHCP y DNS para la red local, y cuando tenga oportunidad se lo mencionaré al almirante Ackbar; puede que se decide a implementarlo en su organización.

Hasta pronto. Hasta entonces, Enjoy!

 

Comments

Popular posts from this blog

Proyecto Servidor Linux (II.1): Instalación de VirtualBox Guest Additions en Ubuntu Server

Proyecto Servidor Linux (I): Instalación de VirtualBox

Proyecto Servidor Linux (II): Instalación de Ubuntu Server 24.04.1 LTS en VirtualBox