servidor proxy en Linux y filtrado web

Configurar un servidor Proxy con Squid en Linux para filtrado web

Un servidor Proxy ofrece una solución para el filtrado web y control de la navegación en Internet, en cualquier red datos empresarial, u doméstica. Con esta solución, las empresas enfocan el uso del Internet a los objetivos del negocio. En este tutorial aprendemos a configurar un servidor Proxy con Squid en Linux.

Con Squid Proxy, el administrador de la red puede definir un esquema de control llamado Listas de Control de Acceso (ACL), esquema centralizado para regular la navegación de los usuarios. Además, le permite segmentar el canal en velocidades de descarga, teniendo así un sistema de Control de Tráfico incluido. Por lo tanto, con esta solución el administrador de la red puede:

  • Aplicar filtrado web
  • Prevenir visualización de material inapropiado
  • Reducir la exposición a amenazas informáticas
  • Controlar puertos de navegación
  • Registrar el tráfico (auditoría)
  • Hacer web caché
  • Control de Tráfico (prevenir congestión en la red)

La función de Registrar el tráfico consiste en una bitácora de registros de navegación de cada una de las direcciones IP de nuestra red. Esta bitácora es básicamente un log, y Squid lo guarda en un archivo llamado “access.log”. El análisis de dicho log nos ayuda generar una estadística de uso del tráfico de la red, y podemos hacerlo fácilmente con un complemento llamado SARG, que podemos configurar tal como lo indicamos en el siguiente artículo.

Monitoreo de tráfico de red con SARG

¿Por qué usar Squid?… Porque es software libre, es muy completo, es estable, maduro, tiene una comunidad que lo mantiene al día y no necesita licenciamientos de pago.

Volviendo a nuestro tema, debemos mencionar que Squid es un servicio que se administra por la línea de comandos, aunque también vía web con el paquete Webmin.

Configurar un servidor Proxy con Squid en Linux

Topología típica de un servidor Proxy

En la imagen anterior vemos un topología típica de un servicio de red con Proxy. Por un lado la red local, y por otro lado la conexión a Internet.

Para este tutorial hemos usado la distribución GNU/Linux llamada Ubuntu.

Como se supone que somos principiantes en este tema, podemos hacer la instalación de Squid Proxy en cualquier computador, incluso un computador desktop con procesador i3, y 4 GB de RAM puede servirnos para un red pequeña, de unos 20 usuarios. Pero ya para algo productivo y más serio, podemos emplear un computador o servidor más sofisticado que no estemos usando. En el siguiente artículo podemos revisar el hardware de un servidor proxy en Linux:

El hardware de un servidor proxy en Linux

En este caso el servidor también funciona como default gateway de la red local. Así que los usuarios en su configuración de red tienen al mismo servidor Proxy como default gateway:

Y el servidor Proxy tiene como default gateway al router del proveedor del servicio de Internet (en la interfaz que conecta con Internet):

Podemos ver cómo convertir a Linux en un router.

Convertir a Linux en un router

Ingredientes necesarios para configurar nuestro servidor Proxy


Estos son los componentes básicos para armar nuestro servidor Proxy:

  • Una máquina (workstation, PC o servidor) con al menos dos tarjetas de red, 4 GB de RAM y procesador al menos Dual Core
  • Distribución GNU/Linux Ubuntu Desktop 22.04 (si eres principiante no importa si es la versión Desktop, igual nos entendemos con el kernel)
  • Paquete o tarball de Squid Proxy. Lo descargamos en su página oficial aquí.

Configurar un servidor proxy en Linux


Abrimos una consola de terminal, y ejecutamos los siguientes pasos:

Paso 1 – Crear el usuario y grupo squid para asignarlo como propietario de los archivos comprometidos en la administración del servicio:

sudo groupadd squid
sudo useradd -s /bin/false -g squid squid

Paso 2 – Instalar la última versión estable de Squid (para éste caso la versión 6.14) soportada por Webmin.

¿Cómo instalar programas en Linux desde un tarball?

En este ejemplo instalamos a Squid Proxy en el directorio /opt, aunque puede ser en cualquiera de nuestra preferencia. Sin embargo, debemos seguir unos estándares. Recomiendo la lectura sobre la “instalación de programas desde un tarball” (el botón verde justo arriba)

Paso 3 – Descomprimimos el tarball de Squid. Esto genera un directorio con el nombre de squid más su versión, por ejemplo squid-6.14. Entonces entramos a ese directorio y procedemos a compilarlo e instalarlo:

Nota: Antes de comenzar con el proceso de compilado, asegurémonos de instalar las librerías SSL, así como las herramientas de compilación GCC y G++, así:

sudo apt install g++ libcrypto++-dev

Otro paquetes necesarios antes de compilar Squid:

sudo apt install libssl-dev
sudo apt install devscripts

Paso 4 – Ahora sí, procedemos a entrar a la carpeta squid-6.14 y  acto seguido compilamos e instalamos (en el video se ve la versión 5.18 de Squid, pero los pasos son los mismos para cualquier versión de Squid):

play-sharp-fill

cd squid-6.14
./configure --sysconfdir=/etc/squid 
--prefix=/opt/squid --exec-prefix=/opt/squid 
--enable-delay-pools --enable-cache-digests 
--enable-epoll --disable-ident-lookups --enable-truncate 
--enable-removal-policies --enable-ssl --enable-icap-client 
--enable-nf-transparent --enable-ssl-crtd --with-openssl --enable-storeio=ufs,aufs,diskd,rock
(lo anterior es una sola línea de comando)
sudo make
sudo make install

Ármate de paciencia porque el proceso de compilado (make) puede llevar algo de tiempo (40 min, 1 hora…). En una máquina como la mía, con procesador AMD Opteron Dual Core de 1.8 GHz y 7 GB de RAM, toma 30 minutos. Con un AMD Ryzen 5 5500U de 2.1 GHZ toma la mitad de ese tiempo.

Con este proceso hemos generado dos directorios principales; /etc/squid que contiene el archivo de configuración del Proxy; /opt/squid que contiene el binario y los directorios de caché. Ambos directorios deben tener permisos de lectura y escritura para el usuario propietario squid.

Si hemos seguido este procedimiento al pie de la letra, debemos ver un árbol de directorios bajo /opt/squid como el siguiente:

Configurar un servidor Proxy con Squid en Linux

Archivo de configuración squid.conf


El archivo de configuración /etc/squid/squid.conf lo definimos en el paso 4, y es donde radica las directivas y parámetros que determina el comportamiento de Squid Proxy. En este archivo adicionaremos algunos parámetros que explico enseguida.

client_request_buffer_max_size 8192 KB

Este parámetro le dice a Squid Proxy que nos permita cargar archivos de hasta 8 MB, cuando estemos navegando en internet y diligenciando formularios que requiera algún cargue de archivos (tales como fotos, PDFs, documentos comprimidos).

visible_hostname “nombre_de_mi_proxy”

Este parámetro hace que Squid muestre su nombre en el navegador cuando se presente alguna novedad. Aprovechamos de una vez para cambiar el método de gestión de objetos en caché, es decir, cambiar de UFS a AUFS. Esto lo hacemos comentando la linea cache_dir ufs y, debajo de ella, adicionamos la siguiente:

cache_dir aufs /opt/squid/var/cache/squid 2048 16 256

La diferencia entre ambos, es que UFS es el método antiguo y poco eficiente con alto tráfico, pues lo gestiona un solo demonio. En cambio AUFS lanza múltiples demonios para la lectura, escritura, borrado, etc.

Archivos de logs


El siguiente paso es crear tres archivos en el directorio /opt/squid/var/logs (y deben tener los mismo permisos ya mencionados arriba) :

access.log
cache.log
store.log

El archivo access.log es donde Squid registra toda actividad de navegación en Internet. Por otra parte, el archivo cache.log registra todo el comportamiento del servicio.

Verificar el funcionamiento del servicio


Ya en este punto podemos probar el avance de este procedimiento, colocando en marcha el Proxy. Con lo siguientes comandos levantamos el servicio.

sudo -u squid /opt/squid/sbin/squid -z /etc/squid/squid.conf
sudo -u squid /opt/squid/sbin/squid &

Para verificarlo

sudo ps -A | grep squid

Detenerlo

sudo -u squid /opt/squid/sbin/squid -k shutdown //puede tardar 10 segundos en detenerse

Para aplicar cambios después de modificar el archivo squid.conf

sudo -u squid /opt/squid/sbin/squid -k reconfigure -f /etc/squid/squid.conf

Instalación de Webmin para gestionar el Proxy


Gestionar a Squid Proxy desde la línea de comandos es común, pero podemos terminar de configurar un servidor Proxy con Squid, desde Webmin, para más agilidad.

Con Webmin, administrar la operación de Squid es más sencillo desde un navegador (Webmin también sirve para gestionar otros servicios de red, tales como DHCP, FTP, Samba, MySQL, etc).

Bien, ahora descargamos la última versión de Webmin en formato Debian. Lo instalamos de la siguiente manera:

wget https://github.com/webmin/webmin/releases/download/2.105/webmin_2.105_all.deb
sudo dpkg -i webmin-2.105_all.deb

Si en el proceso de instalación salen errores de dependencias, solucionelo con el comando apt-get install -f. Finalmente podemos entrar a Webmin por medio del navegador, así:

https://ip_del_servidor_proxy:10000

Luego. con el botón Inicializar Cache en Webmin, creamos los directorios y estructuras de caché necesarias antes de que Squid pueda funcionar correctamente):

Recuerda que podemos inicializar la caché con el comando sudo /opt/squid/sbin/squid -f /etc/squid/squid.conf -z (que es lo que hace Webmin por debajo)

NOTA: Aún no debemos poner en producción el servicio Squid hasta completar el paso 8.

Debemos preparar los puertos de trabajo del servidor Proxy. Vamos al menú “Puertos y Trabajo en Red”. El puerto de escucha por defecto en Squid es el 3128. Sin embargo para este caso lo cambiamos a 8080 tanto para HTTP como para HTTPS.

Entonces, guardamos y aplicamos los cambios que hagamos en la configuración del servidor Squid, haciendo clic en el botón “Salvar” y “Aplicar cambios” (Apply changes).

Estas versiones nuevas de Webmin traen ya instalado el mòdulo de gestión de Squid Proxy, por lo que debemos estar atentos cuando comencemos su configuración, y no darle la instrucción de instalar Squid Proxy nuevamente.

Tal vez le interese ver: Migrar de Windows a Linux

Creación de los certificados SSL para el servidor Proxy


Adicionalmente necesitamos en el servidor Proxy un par de certificados para trabajar con tráfico seguro SSL (HTTPS). La ubicación de dichos certificados se la indicamos en el módulo “Opciones de puerto”. Entonces, para crearlos ejecutamos los siguientes pasos:

Creamos el directorio ssl y entramos en él:

sudo mkdir /etc/squid/ssl && cd /etc/squid/ssl

Generamos el certificado:

Ejecutamos el siguiente comando para generar el formato de almacenado criptográfico:

sudo openssl req -new -newkey rsa:2048 -days 5 -nodes -x509 -keyout squid.pem -out squid.pem

Entonces en el archivo de configuración de Squid, habilitamos el protocolo HTTPS con la directiva, así:

https_port 8080 cert=/etc/squid/ssl/squid.pem


En el siguiente gráfico mostramos la configuración final para que Squid nos soporte tráfico HTTPS:

servidor proxy

También podemos declarar la ruta de la llave y el certificado directamente en el archivo de configuración de Squid, así: https_port 8080 cert=/etc/squid/ssl/squid.crt key=/etc/squid/ssl/squid.key

Seguidamente entramos a la configuración del módulo para especificarle a Webmin la ubicación del ejecutable de Squid, y su archivo de configuración. Además, Webmin debe saber la ruta del script de inicio de Squid (más adelante veremos la configuración de ese script):

Ya aquí en este punto del proceso, podemos iniciar Squid por medio de Webmin.

 

Segunda Parte >

 


Valora este artículo:

Servidor Proxy en Linux - Primera Parte
5,0 rating based on 12.345 ratings
Overall rating: 5 out of 5 based on 1 reviews.
Nombres
Email
Titulo
Calificanos
Contenido

Buena explicación

★★★★★
“ Muy buena la explicación, todo claro.”
- Jhon J. Tapia
Comparte esto en
Publicado en Servidor Proxy.