Introducción

Los Capture The Flag se han convertido en uno de los métodos más eficaces para aprender ciberseguridad de manera práctica. La posibilidad de enfrentarse a retos reales en un entorno controlado permite a estudiantes y profesionales experimentar con técnicas de pentesting sin riesgos. En este artículo se describe el diseño de un laboratorio orientado a CTFs multiusuario, construido sobre Oracle VirtualBox y OPNsense, donde cada participante dispone de un entorno completamente aislado del resto.

La arquitectura de cada laboratorio incluye un firewall OPNsense y dos máquinas virtuales que simulan un pequeño entorno corporativo. OPNsense actúa como núcleo de la infraestructura, gestionando las redes internas y la conexión de los usuarios mediante OpenVPN. La primera de las máquinas virtuales se conecta tanto a la red DMZ como a la red interna, convirtiéndose en el punto inicial de exposición y ataque. La segunda máquina, en cambio, solo es accesible desde la red interna, lo que obliga al participante a realizar técnicas de pivoting para alcanzarla.

Las redes del laboratorio están cuidadosamente segmentadas. Cada entorno cuenta con su propia red DMZ, destinada a exponer únicamente la primera máquina, y con una red interna donde reside la segunda. A través de OPNsense se definen las reglas que limitan estrictamente las comunicaciones, tanto entre redes como entre laboratorios, garantizando que cada usuario trabaja únicamente dentro de su espacio. Esta separación permite tener múltiples entornos simultáneos sin riesgo de interferencias.

El acceso de los participantes se realiza mediante un túnel OpenVPN gestionado por OPNsense. Al conectarse, cada usuario obtiene acceso exclusivo a su entorno virtual, comenzando por la primera máquina. Esta VM aloja una instalación de WordPress vulnerable que requiere autenticación previa, diseñada para servir como punto de partida del CTF. Gracias a vulnerabilidades conocidas, es posible obtener ejecución remota limitada. A partir de ahí, el usuario puede realizar una elevación de privilegios basada en las técnicas documentadas, reforzando conocimientos de post-explotación en sistemas Linux.

Una vez comprometida la primera máquina, el siguiente paso consiste en acceder a la segunda, ubicada en la red interna y sin exposición directa hacia el exterior. Para ello, el participante debe aplicar técnicas de pivoting y redirección de tráfico, empleando herramientas. Esta fase introduce un escenario más realista de movimiento lateral, en el que el usuario debe comprender cómo funcionan los túneles, proxys y saltos entre redes aisladas.

La segunda máquina ofrece un entorno pensado para fomentar la enumeración y el análisis de servicios internos. En ella se encuentra un servidor FTP accesible mediante credenciales anónimas, donde se almacena un archivo kdbx. Este archivo, al ser procesado adecuadamente, permite obtener información crítica que proporciona acceso privilegiado a la máquina a través de SSH. Con ello, el participante completa un ciclo completo de intrusión: entrada inicial, consolidación, pivoting y compromiso final de un sistema interno.

La clave de todo este diseño es el aislamiento estricto entre los diferentes laboratorios de usuarios. OPNsense permite definir reglas de firewall que segmentan completamente cada entorno, evitando cualquier comunicación entre laboratorios incluso en fases avanzadas de explotación. Complementado con la configuración propia de las máquinas virtuales, este enfoque garantiza que cada participante disponga de un entorno independiente, seguro y totalmente replicable.

En conjunto, este laboratorio ofrece un entorno realista y completo para practicar habilidades de ciberseguridad, desde explotación web hasta técnicas avanzadas de post-explotación en redes segmentadas. Su diseño modular facilita escalar el número de usuarios, reutilizar los escenarios y adaptarlos a distintos cursos, talleres o competiciones.

Instalación de OPNsense

En primer lugar se instalará la máquina virtual de OPNsense, que tendrá los requerimientos de 2 núcleos de CPU, 4 GB de RAM, y 8 GB de almacenamiento. Se configurarán cuatro interfaces:

  • La primera de las interfaces será la de la red WAN, es decir, la red desde la cual se dispondrá de acceso a Internet y desde la cual estarán conectados los usuarios del CTF. En este caso será una red de tipo NAT, para ello crearemos una red NAT de VirtualBox en la subred 10.0.0.0/24.
  • La segunda de las interfaces será la de la red LAN de OPNsense, que se utilizará principalmente para el acceso a la administración de OPNsense vía web, por lo que no se conectarán otros dispositivos a ella. Dispondrá de la subred 10.0.10.0/24, y será una red de tipo interna con el nombre LanNetwork, en la que OPNsense actuará como servidor DHCP.
  • La tercera de las interfaces será la red DMZ a la que tendrán acceso los usuarios del CTF tras conectarse a la VPN. Dispondrá de la subred 192.168.0.0/24, y será una red de tipo interna con el nombre DmzNetwork, en la que OPNsense actuará como servidor DHCP.
  • La cuarta de las interfaces será la red DMZ a la que tendrán acceso los usuarios del CTF tras conectarse a la VPN. Dispondrá de la subred 172.16.0.0/24, y será una red de tipo interna con el nombre InternalNetwork, en la que OPNsense actuará como servidor DHCP. Tras la configuración de las interfaces de red iniciaremos la máquina e instalaremos OPNsense siguiendo las instrucciones del asistente con las credenciales installer:opnsense hasta que el sistema se reinicie y podamos acceder al menú inicial de opciones con las credenciales predeterminadas root:opnsense.

Configuración de OPNsense

La asignación de interfaces inicial que se realiza es incorrecta, por lo que se reconfigurarán mediante la opción Assign interfaces y Set interface IP address. Se muestra la configuración para la interfaz WAN y la interfaz LAN. La configuración para las otras dos interfaces es similar a la de la red LAN. Ya se encuentra realizada la configuración. Ahora podemos configurar otra máquina virtual con una interfaz de red asociada a la red interna LanNetwork para continuar con la configuración de OPNsense utilizando la interfaz web y su asistente gráfico. Comprobamos que la dirección IP se ha configurado correctamente.

$ ip a
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a3:ac:c9 brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.218/24 brd 10.0.10.255 scope global dynamic noprefixroute enp0s3
       valid_lft 85914sec preferred_lft 85914sec
    inet6 fe80::ef8e:54:5663:49c3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Accedemos a la interfaz web desde la puerta de enlace y realizamos la configuración inicial con los ajustes como el nombre del sistema, la zona horaria o los DNS. Al utilizar en este caso la red WAN rangos de direcciones IP privadas es necesario desactivar desde el menú Interfaces > [WAN] la opción Block private networks para que la conectividad sea correcta.

Configuración del servidor OpenVPN

A continuación configuraremos el servidor OpenVPN mediante la configuración de una autoridad de certificación primero desde la sección System > Trust > Authorities. Es necesario indicar un Common Name. También necesitamos generar el certificado del servidor VPN desde System > Trust > Certificates. Es necesario indicar un que es un certificado de servidor, su nombre común y que el emisor del certificado sea la autoridad de certificación creada anteriormente. Después ya podemos configurar la instancia de OpenVPN desde VPN > OpenVPN > Instances. Configuramos el modo servidor, su descripción, su puerto y dirección IP de escucha y el rango de direcciones de los clientes VPN. Luego configuramos el certificado de servidor VPN y la obligación a verificar el certificado del servidor. Configuramos la red a la que los clientes VPN tendrán acceso, en este caso la red DMZ. Activamos la configuración avanzada de la instancia mediante el botón advanced mode y configuramos la opción Keep alive interval en 60 segundos y Keep alive timeout en 120 segundos para evitar desconexiones de las sesiones SSH por VPN. Nos movemos a configurar la configuración específica del primer cliente VPN desde el menú VPN > OpenVPN > Client Specific Overrides. Configuramos el servidor VPN, la descripción de la configuración específica del cliente, el nombre común del usuario, y la dirección de red que tendrá el cliente en la subred VPN. Luego configuramos un usuario nuevo en el sistema con el nombre que generamos anteriormente, desde el menú System > Access > Users. Configuramos el nombre de usuario y la opción Scrambled Password para que el usuario no se pueda utilizar para otros usos. Tras crearse el usuario, crearemos su certificado, primero pulsaremos en el botón próximo a la fila del usuario, Search certificates by username. Ahora creamos una entrada similar a la del servidor VPN creada anteriormente, destacando el emisor del certificado. Ahora ya disponemos de la opción para descargar el archivo .ovpn con el cuál podremos conectarnos al servidor OpenVPN desde la sección VPN > OpenVPN > Client Export. Hay que configurar el servidor VPN a utilizar, el tipo de exportación a solo un archivo, como nombre de host especificamos la dirección IP de la interfaz WAN, y el puerto. Al final de la página aparecerán las descargas. Podremos descargar el archivo y comprobar si funciona correctamente la conexión.

$ sudo openvpn OpenVPN_Lab_client1.ovpn
UDPv4 link remote: [AF_INET]10.0.0.3:1194
[OpenVPN Lab Server] Peer Connection Initiated with [AF_INET]10.0.0.3:1194
TUN/TAP device tun0 opened
net_iface_mtu_set: mtu 1500 for tun0
net_iface_up: set tun0 up
net_addr_v4_add: 100.100.100.2/24 dev tun0
Initialization Sequence Completed

Con el mensaje Initialization Sequence Completed observamos que la conexión ha sido correcta. Nos movemos a configurar los parámetros correspondientes a las dos máquinas virtuales que vamos a crear, en primer lugar vamos a crear asignaciones estáticas de dirección IP desde el servidor DHCP.

Configuración del servidor DHCP

Para cada grupo de máquinas replicadas, es necesario establecer tres asignaciones estáticas de direcciones IP en el servidor DHCP, configurando las redes correspondientes. Dos de estas asignaciones estarán destinadas a la máquina Linux VM1 (en las redes DMZ e interna), mientras que las otras dos se asignarán a la máquina Linux VM2 (en la red interna). Se hará desde la sección Services > Dnsmasq DNS & DHCP > Hosts. Por cada asignación indicaremos dirección MAC y dirección IP. Al no haber configurado todavía las máquinas introduciremos direcciones MAC aleatorias y las direcciones IP. A continuación habilitaremos el servidor DHCP en las interfaces de la DMZ (OPT1) y de la red interna (OPT2) por si no estuviera activado en la sección General. La máquina VM1 solo podrá recibir conexiones procedentes de la red LAN, de la máquina VM1 y del cliente VPN. Para ello será necesario configurar unas reglas de cortafuegos desde OPNsense y otras desde las propias máquinas. Configuramos las reglas desde el menú Firewall > Rules.

Configuración del cortafuegos

Por defecto, y a causa de la configuración del cortafuegos, el usuario no tiene acceso a ninguna red (aunque dispone de las rutas preconfiguradas). Será necesario darle acceso mediante una reglas de cortafuegos a la máquina web Linux. También la máquina Linux debe poder acceder al cliente VPN.

Desde las reglas de la interfaz OpenVPN damos acceso al usuario de la VPN a la máquina Linux de la red DMZ. Sabemos la dirección IP VPN del usuario como origen y la de la máquina Linux como destino. Desde las reglas de la interfaz DMZ damos acceso a la máquina Linux web de la red CTF al usuario VPN. Sabemos la dirección IP VPN del usuario como destino y la de la máquina Linux VM1 como origen. Abrimos el puerto de OpenVPN para que sea accesible desde la red WAN. Especificamos como destino el servidor VPN, como protocolo VPN y como puerto de destino OpenVPN. Para que se pueda acceder a los puertos abiertos del cortafuegos tenemos que activar la opción Disable reply-to accesible desde Firewall > Settings > Advanced.

Conclusión

Tras completar la configuración de la red de laboratorio en OPNsense, el entorno queda plenamente segmentado y preparado para soportar múltiples usuarios sin interferencias entre sí. Como siguientes pasos, se encontraría la instalación y configuración de las máquinas virtuales vulnerables.