VERT en Docker: conversor privado con Tailscale y CSP

Arquitectura privada de VERT con Docker, Nginx, Tailscale y auditoría CSP

1. Introducción: un conversor privado dentro de nuestro servidor

Convertir una imagen, transformar un documento o preparar un archivo para compartirlo suele implicar instalar aplicaciones o subir contenido a un servicio externo. Aunque existen muchas herramientas gratuitas, no siempre resulta sencillo determinar dónde se procesan los archivos, qué conexiones realiza el navegador o durante cuánto tiempo conserva los datos el proveedor. Para quienes administramos un servidor propio, disponer de un conversor autoalojado es una alternativa interesante.

En este proyecto utilizamos VERT, una aplicación web de conversión de archivos, y la desplegamos sobre Debian mediante Docker. El objetivo no consistía únicamente en conseguir que la interfaz funcionase: queríamos controlar el acceso, limitar la conectividad de los contenedores, endurecer su ejecución, registrar posibles infracciones de seguridad del navegador y poder apagar toda la aplicación cuando no estuviera en uso.

El punto de partida era una instalación de VERT que ya funcionaba en el servidor. Esa versión original utilizaba el puerto 5098 y debía mantenerse intacta durante el desarrollo. Para evitar interrupciones, construimos una segunda instalación independiente, denominada vert-privado, accesible inicialmente a través del puerto 5107.

La nueva arquitectura se divide en tres servicios Docker. El primero ejecuta VERT, el segundo actúa como proxy inverso Nginx y el tercero recibe informes de Content Security Policy, o CSP. Una red interna conecta los componentes necesarios sin ofrecerles conectividad exterior directa a través de esa red. El proxy dispone de una segunda conexión a la red Docker compartida del entorno. El acceso desde los dispositivos autorizados se realiza mediante Tailscale Serve, sin publicar el puerto de la aplicación directamente en todas las interfaces del servidor.

También aplicamos medidas de endurecimiento a los contenedores: sistemas de archivos raíz de solo lectura, directorios temporales controlados, límites de memoria, restricciones de privilegios y una política de reinicio desactivada. Esta última decisión es importante porque VERT está pensado como una herramienta bajo demanda: cuando detenemos el proyecto, sus tres contenedores dejan de ejecutarse y Docker no debe iniciarlos automáticamente después de reiniciar el equipo.

Para simplificar su utilización integramos el proyecto en Herramientas Jesanre, un panel web propio que ya gestionaba otras aplicaciones. Añadimos VERT a una lista cerrada de herramientas autorizadas, incorporamos su configuración al backend Python y preparamos una tarjeta en JavaScript con los controles Iniciar, Detener y Abrir. El resultado permite administrar el conversor desde un Samsung Galaxy S24 conectado a la red privada de Tailscale.

La validación incluyó conversiones reales de JPG a PNG y de JPG a WebP, comprobaciones de las cabeceras CSP, envío de informes de auditoría, revisión del estado de los contenedores y pruebas completas de parada y arranque desde el navegador. También detectamos y corregimos un conflicto de resolución de nombres entre la instalación antigua y la nueva, una incidencia especialmente útil para comprender cómo funcionan las redes compartidas de Docker.

Esta guía documenta el despliegue realizado, los archivos utilizados, las decisiones de seguridad y las pruebas verificadas. Incluye comandos de diagnóstico y mantenimiento, advertencias sobre los cambios que podrían afectar a otros servicios y recomendaciones para adaptar la solución a instalaciones diferentes. No debe interpretarse como una garantía absoluta de privacidad: el comportamiento real de cada formato y de cada función de conversión debe evaluarse por separado.

Guía completa: Leer la guía técnica completa en Jesanre Stack

Publicar un comentario

0 Comentarios