Laboratorios de ejemplo: laboratorios de contenedores y de máquina virtual para enseñar

Todos los laboratorios de aquí se ejecutan en el navegador y dan a cada alumno una copia privada con un terminal al lado, así que no hay nada que instalar ni nada en el ordenador del alumno que pueda estropearse. Cada uno tiene su propia página en este manual con instrucciones, qué pedir a los alumnos que entreguen y su código fuente en GitHub, que puedes bifurcar y modificar.

Algunos son laboratorios de contenedores, escritos como un archivo compose, y otros son laboratorios de máquina virtual, en los que cada alumno recibe una máquina Ubuntu propia. Inicia cualquiera para probarlo, o cópialo en un módulo y asígnalo como trabajo.

Bases de datos y APIs

PostgreSQL y PostgREST: una base de datos Postgres y una API web que convierte cada tabla en endpoints REST, con psql y curl en el terminal. Enseña SQL, REST, volúmenes y copias de seguridad.

MySQL y phpMyAdmin: MySQL con una base de datos de ejemplo de una tienda, de ocho tablas y unos cientos de filas, y phpMyAdmin con la sesión ya iniciada, con trece ejercicios de SQL que van desde un primer SELECT hasta subconsultas y transacciones.

Control de versiones

Git y Gitea: un servidor Git propio del alumno, con un repositorio en el que clonar, hacer commit y push desde el terminal, y que luego se encuentra en una interfaz web como la de GitHub, sin cuenta de GitHub.

Seguridad de aplicaciones web

OWASP Juice Shop, DVWA y WebGoat: tres aplicaciones web vulnerables a propósito, cada una en la copia privada del propio alumno. Los alumnos atacan la aplicación, explican el fallo y entregan pruebas. La página de resumen, Laboratorios de seguridad, trata la regla del alcance y dónde encaja cada uno en un curso.

OWASP Mutillidae II añade una segunda aplicación PHP vulnerable a propósito, con una base de datos y un servicio de directorio, OWASP WrongSecrets enseña la gestión de secretos escondiendo secretos erróneos en el código y la configuración para que el alumno los encuentre, e «Inyección SQL: encuéntrala y corrígela» da al alumno una pequeña aplicación débil nuestra para explotarla y después repararla.

DevOps y servidores web

Endurecer un servidor web: un sitio nginx con una configuración débil que hay que encontrar y corregir desde el terminal, con una comprobación que dice PASS o FAIL. Fundamentos de Docker: una pequeña pila con un servicio roto, en la que el alumno lee los registros, ejecuta un comando dentro de un contenedor, lo corrige y lo reinicia. Observabilidad: Prometheus y Grafana vigilando un pequeño servidor web, con una regla de alertas que escribe el alumno.

Administración de Linux y operaciones de seguridad

Administración de Linux, Respuesta a incidentes y Ansible son laboratorios de máquina virtual: el alumno recibe una máquina Ubuntu propia y un README. La administración de Linux tiene cuatro tareas pequeñas: usuarios, una carpeta compartida, una entrada de cron y un archivo de servicio. La respuesta a incidentes da un conjunto de registros de una máquina comprometida para investigar, y Ansible pide al alumno que termine un playbook que configura la máquina. Cada uno tiene una comprobación que califica la máquina guardada.

Redes de ordenadores

Enrutamiento estático, OSPF y BGP: tres laboratorios de máquina virtual en los que cada router y cada equipo de una red pequeña se construyen dentro de la única máquina virtual del alumno y los routers ejecutan FRRouting, con una comprobación que califica el laboratorio por ti.

NAT, DHCP y DNS, VLAN y WireGuard profundizan del mismo modo: una pasarela NAT con enmascaramiento y un reenvío de puerto, un servidor DHCP y DNS con dnsmasq, un conmutador y un router on a stick para las VLAN, y un túnel WireGuard entre dos sedes.

Una lección básica para cada laboratorio

Cada laboratorio tiene una lección pequeña hecha en él. Los seis primeros laboratorios de contenedores tienen dos: Git Basics y Git Basics 2, SQL Basics y SQL Basics 2, API Basics y API Basics 2, Juice Shop Basics y Juice Shop Basics 2, DVWA Basics y DVWA Basics 2, WebGoat Basics y WebGoat Basics 2. Los demás tienen una cada uno: Static Routing Basics, OSPF Basics, BGP Basics, Mutillidae Basics, WrongSecrets Basics, SQL Injection Fix Basics, Web Server Hardening Basics, Docker Basics, Observability Basics, Linux Administration Basics, Privilege Escalation Basics, Incident Response Basics, Ansible Basics, Hadoop Basics, Spark Basics, Kafka Basics, Valkey Basics, NAT Basics, DHCP and DNS Basics, VLAN Basics y WireGuard Basics. Una lección hecha en un laboratorio tiene un paso en palabras y un botón Ejecutar que escribe el comando en el terminal del propio alumno, en un contenedor o en una máquina virtual Ubuntu, así que un docente ve a la vez qué es una lección y qué puede hacer un laboratorio. Son breves a propósito.

Están disponibles en todas partes: una cuenta personal gratuita recibe todas en el módulo Basics, que está en Inicio, cada centro puede copiarlas de la carpeta Basics de la Biblioteca en un módulo propio, y un centro nuevo se abre con ellas en sus módulos de ejemplo, Basics (Sample), Database (Sample), Lab Basics (Sample), Networking Basics (Sample), Security Labs (Sample), DevOps Labs (Sample) y Linux Labs (Sample).

La barra del laboratorio en la parte superior de una lección hecha en un laboratorio, bajo el título de la lección, con un botón para iniciar el laboratorio y los primeros pasos de la lección debajo
Una lección hecha en un laboratorio tiene la barra del laboratorio sobre sus pasos: inicia el laboratorio una vez y cada botón Ejecutar escribe en su terminal.

Ejecuta cualquiera de ellos en el navegador

Los laboratorios de contenedores se inician desde la página Contenedor: el de Git y el de SQL sin cuenta, y todos los demás con una cuenta gratuita. Los de máquina virtual se añaden a un módulo como tarea de laboratorio y se inician desde el ejemplo de la página del laboratorio.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Pulsa «Iniciar» en un ejemplo. La tarjeta «Laboratorios de ejemplo» lista todos los laboratorios de contenedores. «Iniciar» ejecuta uno con una pulsación, y «Editar el archivo primero» te deja cambiarlo antes de iniciarlo.
  3. Asigna uno como trabajo. Copia un laboratorio en tu módulo como «Laboratorio de contenedores» o «Laboratorio de máquina virtual Ubuntu», publícalo, prueba tu propia copia y asígnalo como cualquier tarea.
La sección Laboratorios prácticos de la página de recursos gratuitos: un título de tema y una tarjeta por cada laboratorio de seguridad web, con sus lecciones gratuitas y enlaces a su página del manual y a su código
Cada laboratorio aparece por tema en la página de recursos gratuitos, con las lecciones gratuitas que se hacen en él.

El código es público

Cada laboratorio está en un repositorio público de mitsurutech en GitHub, con un README que lleva la lección. Los archivos compose y las definiciones de laboratorio tienen licencia MIT: cópialos, modifícalos, enseña con ellos. Las aplicaciones que hay dentro, Juice Shop, DVWA, WebGoat y las demás, conservan sus propias licencias y se descargan de las imágenes de sus propios proyectos, sin que nosotros las redistribuyamos nunca.

Preguntas frecuentes

¿Tienen que instalar algo los alumnos?
No. Todos los laboratorios se ejecutan en nuestras máquinas y se abren en el navegador, con un terminal al lado. No se instala nada en el ordenador del alumno.
¿Puedo modificar un laboratorio o escribir el mío?
Sí. Haz un fork del repositorio y apunta un laboratorio a tu fork, o copia el archivo en un laboratorio escrito en la página. La guía de laboratorios de contenedores explica qué puede decir un archivo compose.
¿Hay una lección para cada laboratorio?
Sí: cada laboratorio tiene una lección básica breve hecha en él, y los seis primeros laboratorios de contenedores tienen una segunda, gratuita para cada cuenta personal y cada centro. En un laboratorio de máquina virtual, Ejecutar escribe en el terminal de la máquina virtual Ubuntu.
¿Se califican solos los laboratorios?
La mayoría de los de máquina virtual sí: cada uno tiene un script de comprobación que ejecutas sobre la máquina guardada de un alumno. El de escalada de privilegios en Linux es la excepción, porque un alumno en esa máquina podría falsear cualquier prueba, así que lees una entrega escrita. Los laboratorios de contenedores los calificas tú a partir de lo que entrega el alumno, y algunos, como el de endurecer un servidor web, tienen una comprobación que ejecuta el propio alumno.
¿Puedo usarlos fuera de la plataforma?
Los laboratorios de contenedores se ejecutan en tu propio ordenador con docker compose, y cada README explica cómo. Los de máquina virtual son definiciones para los laboratorios de máquina virtual de la plataforma.