1. Objetivos

Los objetivos que se pretenden alcanzar con este tutorial son los siguientes:

  • Comprender la arquitectura de Multipass y su lugar frente a otras soluciones de virtualización y contenedores.

  • Crear, administrar y eliminar máquinas virtuales Ubuntu desde la línea de órdenes en Linux, macOS y Windows.

  • Automatizar la configuración inicial de las máquinas con cloud-init para obtener laboratorios reproducibles.

  • Intercambiar ficheros con el anfitrión, conectar varias máquinas en red y acceder a ellas mediante SSH con claves propias.

  • Utilizar instantáneas y clones para volver a un estado limpio antes y después de cada práctica de bastionado.

  • Identificar los riesgos de seguridad del propio entorno de laboratorio y aplicar las medidas que los mitigan.

2. Introducción

2.1. Por qué un laboratorio de máquinas virtuales desechables

Las prácticas de bastionado modifican componentes críticos del sistema operativo: PAM, sudoers, la configuración de SSH, el cortafuegos o las opciones de montaje. Un error en cualquiera de ellos puede dejar el sistema inaccesible, y realizarlos sobre el equipo de trabajo del estudiante es inaceptable. El laboratorio ideal cumple estas condiciones:

  • Aislamiento: los cambios y los errores no afectan al equipo anfitrión.

  • Reproducibilidad: cualquier estudiante obtiene exactamente el mismo punto de partida a partir de un fichero de configuración.

  • Reversibilidad: es posible volver a un estado anterior en segundos.

  • Bajo coste: crear y destruir una máquina debe ser cuestión de una orden y de menos de un minuto.

2.2. ¿Qué es Multipass?

Multipass es una herramienta de Canonical que crea y gestiona máquinas virtuales Ubuntu con una sola orden. A diferencia de un hipervisor de escritorio como VirtualBox, no requiere instalar el sistema operativo a partir de una imagen ISO: descarga imágenes cloud de Ubuntu ya instaladas y las personaliza en el primer arranque mediante cloud-init, el mismo mecanismo que utilizan los proveedores de nube pública como AWS, Azure o Google Cloud.

Herramienta Tipo de aislamiento Sistemas invitados Puesta en marcha Uso habitual

Multipass

Máquina virtual completa

Ubuntu

Una orden, menos de un minuto

Laboratorios Linux ligeros y reproducibles

VirtualBox, VMware

Máquina virtual completa

Cualquiera

Instalación manual o plantillas

Entornos gráficos, Windows, sistemas heterogéneos

Vagrant

Máquina virtual sobre un proveedor

Cualquiera con box disponible

Fichero Vagrantfile

Entornos de desarrollo multiplataforma

Docker, Podman

Contenedor que comparte el núcleo del anfitrión

Espacio de usuario Linux

Segundos

Empaquetado y despliegue de aplicaciones

EVE-NG, GNS3

Emulación de redes

Equipos de red y máquinas virtuales

Diseño de topologías

Laboratorios de redes

Máquina virtual frente a contenedor

Un contenedor comparte el núcleo del anfitrión. Para practicar el bastionado del sistema operativo, por ejemplo módulos del núcleo, parámetros sysctl, systemd, opciones de montaje o el arranque, se necesita un núcleo propio, y eso solo lo proporciona una máquina virtual. Multipass ofrece esa máquina virtual con una experiencia de uso tan ágil como la de un contenedor.

2.3. Arquitectura

Arquitectura de Multipass: cliente
Figura 1. Arquitectura de Multipass: cliente, servicio, hipervisor e instancias

Multipass se compone de tres elementos:

  1. Cliente multipass: la orden que ejecuta el usuario. Se comunica con el servicio a través de un socket local.

  2. Servicio multipassd: proceso con privilegios que descarga las imágenes, crea las máquinas, gestiona la red y almacena las claves SSH con las que accede a ellas.

  3. Controlador de virtualización: el hipervisor nativo de cada plataforma, que ejecuta las máquinas.

Plataforma Controlador por defecto Alternativas

Linux

QEMU con KVM

libvirt; LXD, obsoleto

macOS

QEMU con el framework de virtualización de Apple

VirtualBox en equipos con procesador Intel

Windows

Hyper-V, disponible en las ediciones Pro, Enterprise y Education

VirtualBox en la edición Home

Cada máquina virtual se denomina instancia. Todas parten de una imagen cloud de Ubuntu con un usuario por defecto, ubuntu, que puede usar sudo sin contraseña y al que el servicio accede mediante una clave SSH propia.

3. Instalación y verificación

3.1. Requisitos

  • Procesador con extensiones de virtualización, Intel VT-x o AMD-V, activadas en el firmware del equipo. En Linux puede comprobarse con grep -cE 'vmx|svm' /proc/cpuinfo, que debe devolver un valor mayor que cero.

  • Al menos 8 GB de memoria y 20 GB libres de disco para trabajar con dos o tres instancias simultáneas.

  • Si el anfitrión es a su vez una máquina virtual, el hipervisor externo debe tener activada la virtualización anidada.

3.2. Instalación

  • Linux, mediante el paquete snap oficial:

    sudo snap install multipass
  • macOS, mediante el instalador de la web oficial o con Homebrew:

    brew install --cask multipass
  • Windows: mediante el instalador de la web oficial. Si Hyper-V no está disponible, el instalador ofrece utilizar VirtualBox, que debe instalarse previamente.

3.3. Verificación

multipass version            # Versión del cliente y del servicio
multipass get local.driver   # Controlador de virtualización en uso
multipass find               # Imágenes disponibles
Image                       Aliases           Version          Description
22.04                       jammy             20261004         Ubuntu 22.04 LTS
24.04                       noble             20261017         Ubuntu 24.04 LTS
26.04                       resolute,lts      20260927         Ubuntu 26.04 LTS
daily:26.10                 stonking,devel    20261011         Ubuntu 26.10

La imagen por defecto es la última versión LTS, con alias lts. Este tutorial utiliza Ubuntu 24.04, ya que es la versión de referencia del CIS Benchmark empleado en las guías del curso. La sección Blueprint que también muestra find corresponde a plantillas de aplicación que Canonical ha declarado obsoletas.

4. Ciclo de vida de una instancia

4.1. Creación con launch

multipass launch 24.04 --name servidor --cpus 2 --memory 2G --disk 15G
Opción Descripción Valor por defecto

Imagen

Versión, nombre en clave o alias de Ubuntu: 24.04, noble, lts

Última LTS

-n, --name

Nombre de la instancia

Nombre aleatorio

-c, --cpus

Número de CPU virtuales

1

-m, --memory

Memoria, con sufijo K, M o G

1G

-d, --disk

Tamaño del disco

5G

--cloud-init

Fichero o URL con la configuración de cloud-init

Ninguno

--network

Interfaz de red adicional

Solo la red por defecto

--mount

Directorio del anfitrión montado en la instancia

Ninguno

--timeout

Segundos de espera para el arranque y cloud-init

300

El disco es dinámico: solo ocupa en el anfitrión el espacio que realmente utiliza la instancia. Aun así, conviene ajustar memoria y CPU a lo necesario, ya que se reservan mientras la instancia está en ejecución.

4.2. Consulta del estado

multipass list
multipass info servidor
Name:           servidor          (1)
State:          Running           (2)
Snapshots:      0                 (3)
IPv4:           192.168.252.4     (4)
Release:        Ubuntu 24.04.3 LTS
Image hash:     a1b2c3d4e5f6 (Ubuntu 24.04 LTS)
CPU(s):         2
Load:           0.08 0.03 0.01
Disk usage:     2.1GiB out of 14.4GiB
Memory usage:   312.5MiB out of 1.9GiB
Mounts:         --                (5)
1 Nombre de la instancia, que se usa en todas las órdenes.
2 Estado: Running, Stopped, Suspended, Starting, Deleted o Unknown.
3 Número de instantáneas disponibles.
4 Dirección IP en la red privada que crea Multipass.
5 Directorios del anfitrión montados en la instancia.

Las órdenes list e info admiten --format json, yaml o csv, lo que permite procesar su salida en scripts:

multipass info servidor --format json | jq -r '.info.servidor.ipv4[0]'

4.3. Acceso y ejecución de órdenes

multipass shell servidor                          # Sesión interactiva como ubuntu
multipass exec servidor -- uname -a               # Orden única
multipass exec servidor -- sudo apt-get update    # Orden con privilegios
multipass exec servidor -- bash -c 'id; hostname' # Varias órdenes

El separador -- indica dónde terminan las opciones de multipass y empieza la orden que se ejecutará en la instancia.

4.4. Arranque, parada y eliminación

multipass stop servidor          # Apagado ordenado
multipass start servidor         # Arranque
multipass restart servidor       # Reinicio
multipass suspend servidor       # Suspensión, conservando la memoria
multipass stop --all             # Apaga todas las instancias

multipass delete servidor        # Marca la instancia como eliminada
multipass recover servidor       # Recupera una instancia eliminada
multipass purge                  # Elimina definitivamente las instancias marcadas
multipass delete --purge servidor  # Eliminación definitiva en un solo paso

multipass delete no libera el espacio en disco: la instancia permanece en estado Deleted hasta que se ejecuta multipass purge. Las instancias olvidadas en ese estado acumulan varios gigabytes y, si contienen claves o datos de prácticas, siguen almacenadas en el equipo.

4.5. La instancia primary

Si se ejecuta multipass shell sin indicar ninguna instancia, Multipass crea o arranca una instancia llamada primary, en la que monta automáticamente el directorio personal del usuario del anfitrión en ~/Home. Es cómoda para tareas rápidas, pero ese montaje da a la instancia acceso de escritura a todos los ficheros del usuario, por lo que no debe utilizarse para prácticas de seguridad. El nombre de esta instancia se configura con multipass set client.primary-name=…​.

Con los conceptos explicados hasta aquí, ya puede realizar el Ejercicio 1. Primera instancia y ciclo de vida.

5. Configuración automática con cloud-init

cloud-init se ejecuta durante el primer arranque de la instancia y aplica una configuración declarativa en formato YAML, denominada user-data. Permite crear usuarios, instalar paquetes, escribir ficheros y ejecutar órdenes, de modo que un único fichero describe por completo el estado inicial de un laboratorio.

5.1. Un fichero user-data para un laboratorio de bastionado

#cloud-config
hostname: servidor
timezone: Europe/Madrid
locale: es_ES.UTF-8

package_update: true
package_upgrade: true
packages:
  - openssh-server
  - auditd
  - libpam-pwquality
  - lynis

users:
  - default
  - name: alumno
    gecos: Alumno de bastionado
    groups: [sudo]
    shell: /bin/bash
    sudo: "ALL=(ALL) ALL"
    lock_passwd: true
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... alumno@anfitrion

write_files:
  - path: /etc/ssh/sshd_config.d/10-laboratorio.conf
    permissions: "0600"
    content: |
      PermitRootLogin no
      PasswordAuthentication no

runcmd:
  - systemctl restart ssh
  - echo "Laboratorio preparado el $(date -Is)" > /etc/motd
Clave Función

#cloud-config

Primera línea obligatoria; identifica el formato del fichero

package_update, package_upgrade, packages

Actualiza los índices y los paquetes, e instala los indicados

users

Crea usuarios. default conserva el usuario ubuntu que necesita Multipass

lock_passwd

Bloquea la contraseña del usuario, que solo podrá acceder con clave pública

ssh_authorized_keys

Claves públicas autorizadas para el usuario

write_files

Crea ficheros con el contenido y los permisos indicados

runcmd

Órdenes que se ejecutan al final del primer arranque, como root

multipass launch 24.04 --name servidor --cloud-init servidor.yaml --timeout 600

No elimine el usuario default

Multipass accede a la instancia como ubuntu con su propia clave SSH. Si la lista users no incluye default, el usuario ubuntu no se crea y multipass shell, exec, transfer y mount dejan de funcionar.

5.2. Verificación de la ejecución

multipass exec servidor -- cloud-init status --wait --long
multipass exec servidor -- sudo tail -n 30 /var/log/cloud-init-output.log
multipass exec servidor -- sudo cloud-init schema --system   # Validación de la sintaxis

cloud-init status devuelve done si la configuración se aplicó correctamente o error en caso contrario. El fichero cloud-init-output.log recoge la salida de las órdenes y la instalación de paquetes, y es el primer lugar que debe revisarse ante cualquier problema.

El user-data queda almacenado en la instancia

cloud-init guarda una copia del fichero en /var/lib/cloud/instance/. No incluya en él contraseñas, claves privadas ni tokens: cualquiera con privilegios de root en la instancia, o con acceso a sus discos, podrá leerlos. Las contraseñas de los usuarios deben definirse, si es imprescindible, con un hash en el campo passwd y nunca en claro con plain_text_passwd.

Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 2. Laboratorio reproducible con cloud-init.

6. Intercambio de ficheros con el anfitrión

6.1. Copia con transfer

multipass transfer informe.txt servidor:/home/ubuntu/            # Del anfitrión a la instancia
multipass transfer servidor:/var/log/syslog ./syslog_servidor    # De la instancia al anfitrión
multipass transfer -r ./scripts servidor:/home/ubuntu/scripts    # Directorio completo
multipass transfer -p auditoria.sh servidor:/opt/lab/auditoria.sh  # Crea los directorios intermedios

transfer actúa con la identidad del usuario ubuntu, por lo que solo accede a los ficheros que ese usuario puede leer o escribir. El usuario ubuntu pertenece al grupo adm, de modo que sí puede leer los registros de /var/log, pero no un fichero de acceso exclusivo de root como /etc/shadow. Para transferir un fichero protegido de ese tipo, primero debe copiarse a un directorio accesible con multipass exec …​ sudo install.

6.2. Montaje de directorios con mount

multipass mount ./practicas servidor:/home/ubuntu/practicas
multipass info servidor | grep -A1 Mounts
multipass umount servidor:/home/ubuntu/practicas
Tipo Opción Características

Clásico

--type classic, por defecto

Implementado por Multipass sobre SSH; disponible en todas las plataformas

Nativo

--type native

Usa el mecanismo del hipervisor; mejor rendimiento, solo con la instancia detenida y no en todos los controladores

Un montaje rompe el aislamiento de la máquina virtual

Un directorio montado es accesible en escritura desde la instancia. Si la instancia se compromete, por ejemplo al exponer un servicio vulnerable durante una práctica, podrían modificarse los ficheros del anfitrión, incluidos scripts que el estudiante ejecutará después en su equipo. En prácticas de seguridad, prefiera transfer para copias puntuales y, si el equipo es compartido, desactive los montajes con multipass set local.privileged-mounts=false.

Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 3. Intercambio de ficheros y evidencias.

7. Redes y acceso SSH

7.1. La red por defecto

Cada instancia recibe una dirección en una red privada creada por Multipass, con salida a Internet mediante NAT a través del anfitrión. En esta red:

  • El anfitrión puede conectarse a cualquier puerto de las instancias usando su dirección IP.

  • Las instancias pueden comunicarse entre sí, lo que permite montar laboratorios con varias máquinas, como un servidor y un equipo auditor.

  • Los demás equipos de la red local no pueden acceder a las instancias, ya que estas quedan detrás del NAT del anfitrión.

multipass list
multipass exec auditor -- ping -c 3 192.168.252.4

Las direcciones IP dependen de la plataforma y pueden cambiar al reiniciar una instancia. En los scripts de laboratorio, obténgalas siempre con multipass info --format json en lugar de escribirlas a mano.

7.2. Interfaces adicionales y modo puente

Algunas prácticas, como las de NAC o las de detección de intrusiones, requieren que la instancia esté en la misma red que otros equipos físicos. Para ello se añade una interfaz en modo puente, conectada a una interfaz física del anfitrión:

multipass networks                                      # Interfaces disponibles
multipass launch 24.04 --name sensor --network en0      # Interfaz adicional en puente
multipass set local.bridged-network=en0                 # Interfaz puente por defecto
multipass launch 24.04 --name sensor2 --bridged         # Usa la interfaz por defecto

La disponibilidad de esta función depende del controlador y de la plataforma; multipass networks muestra las interfaces que admite el sistema.

Una instancia en modo puente es accesible desde toda la red local, como cualquier otro equipo. No conecte en modo puente instancias con configuraciones deliberadamente inseguras y respete siempre la política de uso de la red del centro.

7.3. Acceso SSH con una clave propia

multipass shell es suficiente para el trabajo interactivo, pero muchas prácticas necesitan acceder por SSH estándar: herramientas de automatización como Ansible, túneles, ProxyJump o la verificación de la propia configuración de SSH. Para ello se autoriza una clave del estudiante mediante cloud-init, como en la sección 5.1, o en una instancia ya creada:

ssh-keygen -t ed25519 -f ~/.ssh/lab_multipass -C "laboratorio multipass"
multipass exec servidor -- bash -c "echo '$(cat ~/.ssh/lab_multipass.pub)' >> ~/.ssh/authorized_keys"
ssh -i ~/.ssh/lab_multipass ubuntu@"$(multipass info servidor --format json | jq -r '.info.servidor.ipv4[0]')"

La clave que usa el propio servicio multipassd se almacena en un directorio accesible solo para root, como /var/snap/multipass/common/data/multipassd/ssh-keys/ en Linux. No es necesario ni recomendable utilizarla directamente.

Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 4. Laboratorio con dos instancias en red.

8. Instantáneas y clones

8.1. Instantáneas

Una instantánea guarda el estado completo del disco y de la configuración de una instancia. Es la herramienta clave de un laboratorio de bastionado: se toma una instantánea antes de cada práctica y, si algo sale mal, se restaura en segundos.

multipass stop servidor
multipass snapshot servidor --name limpio --comment "Recién creado con cloud-init"
multipass list --snapshots
multipass info servidor --snapshots

multipass restore servidor.limpio                 # Pregunta si se guarda el estado actual
multipass restore --destructive servidor.limpio   # Descarta el estado actual
multipass delete --purge servidor.limpio          # Elimina una instantánea

Multipass solo permite crear y restaurar instantáneas con la instancia detenida. Las instantáneas se guardan en el equipo anfitrión, junto al disco de la instancia: no son una copia de seguridad, y desaparecen al eliminar definitivamente la instancia.

8.2. Clones

clone crea una instancia nueva e independiente a partir de otra detenida. Permite, por ejemplo, preparar una instancia base y obtener a partir de ella una copia por cada práctica:

multipass stop base
multipass clone base --name practica-ssh
multipass start practica-ssh

El clon recibe una nueva dirección MAC y, por tanto, una nueva dirección IP. Conserva, sin embargo, el mismo contenido de disco, incluidas las claves SSH de host y el identificador /etc/machine-id, algo que debe tenerse en cuenta si ambas instancias se usan a la vez en prácticas que dependen de esos identificadores.

Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 5. Instantáneas antes de una práctica de bastionado.

9. Configuración del servicio y de las instancias

multipass get y multipass set consultan y modifican la configuración del servicio y de cada instancia:

multipass get --keys                          # Lista de claves disponibles
multipass stop servidor
multipass set local.servidor.cpus=4           # Requiere la instancia detenida
multipass set local.servidor.memory=4G
multipass set local.servidor.disk=30G         # El disco solo puede ampliarse
multipass start servidor
Clave Descripción

local.driver

Controlador de virtualización

local.<instancia>.cpus, memory, disk

Recursos de una instancia

local.bridged-network

Interfaz física usada por --bridged

local.privileged-mounts

Permite o impide los montajes de directorios

local.passphrase

Frase de paso que deben presentar los clientes no autorizados

client.primary-name

Nombre de la instancia primary

Los alias permiten ejecutar una orden de una instancia como si fuera local:

multipass alias auditor:nmap nmap
nmap -sV 192.168.252.4          # Se ejecuta en la instancia auditor
multipass unalias nmap

10. Seguridad del propio laboratorio

Un laboratorio de seguridad es en sí mismo un activo que hay que proteger. Las siguientes medidas reducen su superficie de ataque:

Riesgo Medida

El usuario ubuntu puede usar sudo sin contraseña

Aceptable solo en un laboratorio aislado. No reutilice las instancias como servidores reales

Servicios vulnerables accesibles desde la red

Mantenga las instancias en la red NAT por defecto y use el modo puente solo cuando la práctica lo exija

Directorios del anfitrión montados en la instancia

Use transfer o monte solo directorios específicos de la práctica, nunca el directorio personal

Secretos en ficheros de cloud-init

Utilice solo claves públicas y hashes de contraseñas en el user-data

Instancias eliminadas sin purgar

Ejecute multipass purge al terminar cada práctica

Otros usuarios del anfitrión controlan las instancias

En Linux, el acceso al socket del servicio se concede a los miembros de los grupos administrativos; en equipos compartidos, configure local.passphrase

Imágenes desactualizadas

Incluya package_upgrade: true en cloud-init o actualice las instancias al crearlas

Multipass solo comprueba la integridad de las imágenes oficiales que descarga de Canonical. Al usar imágenes personalizadas mediante una URL file:// o https://, la verificación de su procedencia es responsabilidad del usuario.

11. Ejemplo completo: laboratorio de bastionado de SSH

Este ejemplo integra todo lo anterior en un laboratorio reproducible con dos instancias: un servidor con una configuración de SSH deliberadamente débil y un auditor desde el que se analiza su exposición. El script lab.sh crea y destruye el laboratorio con una sola orden.

laboratorio-ssh/
├── lab.sh
├── servidor.yaml
└── auditor.yaml

servidor.yaml:

#cloud-config
hostname: servidor
packages: [openssh-server]
write_files:
  - path: /etc/ssh/sshd_config.d/10-debil.conf
    content: |
      PermitRootLogin yes
      X11Forwarding yes
      Ciphers +aes128-cbc
      MACs +hmac-sha1
runcmd:
  - systemctl restart ssh

auditor.yaml:

#cloud-config
hostname: auditor
packages: [nmap, ssh-audit]

lab.sh:

#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")"

case "${1:-}" in
  up)
    multipass launch 24.04 --name servidor --cloud-init servidor.yaml --timeout 600
    multipass launch 24.04 --name auditor  --cloud-init auditor.yaml  --timeout 600
    for vm in servidor auditor; do
      multipass stop "$vm"
      multipass snapshot "$vm" --name inicial
      multipass start "$vm"
    done
    multipass list
    ;;
  reset)
    for vm in servidor auditor; do
      multipass stop "$vm"
      multipass restore --destructive "$vm.inicial"
      multipass start "$vm"
    done
    ;;
  down)
    multipass delete --purge servidor auditor
    ;;
  *)
    echo "Uso: $0 {up|reset|down}"; exit 1 ;;
esac

Con el laboratorio en marcha, el análisis desde el auditor y la aplicación del bastionado siguen el esquema de doble vertiente, configuración y auditoría, del resto del curso:

IP=$(multipass info servidor --format json | jq -r '.info.servidor.ipv4[0]')

# Auditoría inicial de la exposición del servicio desde el equipo auditor
multipass exec auditor -- nmap -sV -p 22 "$IP"
multipass exec auditor -- ssh-audit "$IP"

# Bastionado en el servidor: sustituir la configuración débil por una segura
multipass exec servidor -- sudo rm /etc/ssh/sshd_config.d/10-debil.conf
multipass exec servidor -- bash -c 'printf "%s\n" "PermitRootLogin no" "PasswordAuthentication no" "X11Forwarding no" | sudo tee /etc/ssh/sshd_config.d/00-bastionado.conf'
multipass exec servidor -- sudo sshd -t
multipass exec servidor -- sudo systemctl reload ssh

# Verificación de la configuración efectiva y nueva auditoría comparativa
multipass exec servidor -- sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication|x11forwarding) '
multipass exec auditor -- ssh-audit "$IP"

La segunda ejecución de ssh-audit debe mostrar que ya no se ofrecen los algoritmos débiles aes128-cbc ni hmac-sha1 y que se ha deshabilitado el acceso directo de root, lo que permite contrastar de forma objetiva el efecto del bastionado.

Con este ejemplo, ya puede realizar el Ejercicio 6. Laboratorio automatizado de bastionado de SSH.

12. Resolución de problemas

Síntoma Causa probable Solución

launch failed: …​ timed out

cloud-init tarda más de lo previsto, por ejemplo al actualizar paquetes

Aumentar --timeout y revisar cloud-init status

La instancia queda en estado Unknown

El servicio perdió el contacto con la máquina

multipass restart nombre o reiniciar el servicio multipassd

Sin conexión a Internet en la instancia

Conflicto con una VPN o con el cortafuegos del anfitrión

Desconectar la VPN y revisar las reglas del cortafuegos

virtualization not supported

Virtualización desactivada en el firmware o en el hipervisor externo

Activar VT-x o AMD-V, o la virtualización anidada

multipass shell deja de funcionar tras cloud-init

Se eliminó el usuario default o se modificó su clave

Recrear la instancia incluyendo default en users

Registros del servicio:

sudo journalctl -u 'snap.multipass*' -f             # Linux
sudo tail -f /Library/Logs/Multipass/multipassd.log  # macOS

En Windows, los registros se consultan en el Visor de eventos, en Registros de aplicaciones y servicios.

13. Resumen de comandos

Tarea Orden

Imágenes disponibles

multipass find

Crear una instancia

multipass launch 24.04 -n vm -c 2 -m 2G -d 15G

Crear con cloud-init

multipass launch 24.04 -n vm --cloud-init fichero.yaml

Listar instancias

multipass list

Información detallada

multipass info vm

Sesión interactiva

multipass shell vm

Ejecutar una orden

multipass exec vm — orden

Copiar ficheros

multipass transfer origen vm:destino

Montar un directorio

multipass mount origen vm:destino

Parar y arrancar

multipass stop vm, multipass start vm

Instantánea

multipass snapshot vm --name nombre

Restaurar

multipass restore --destructive vm.nombre

Clonar

multipass clone vm --name copia

Cambiar recursos

multipass set local.vm.memory=4G

Eliminar definitivamente

multipass delete --purge vm

14. Ejercicios prácticos

Los ejercicios están diseñados para realizarse en orden, ya que algunos reutilizan instancias y ficheros creados en los anteriores. Todos los ficheros se crean en el directorio ~/lab_multipass del equipo anfitrión. El último ejercicio elimina todas las instancias y deja el equipo en su estado original.

Compruebe con multipass list las instancias que ya existen antes de empezar, para no eliminar por error ninguna que no pertenezca a la práctica.

Nº Ejercicio Competencia que desarrolla

1

Primera instancia y ciclo de vida

Crear, consultar, detener y eliminar instancias

2

Laboratorio reproducible con cloud-init

Automatizar la configuración inicial de una instancia

3

Intercambio de ficheros y evidencias

Transferir ficheros y valorar el riesgo de los montajes

4

Laboratorio con dos instancias en red

Conectar instancias y acceder por SSH con clave propia

5

Instantáneas antes de una práctica de bastionado

Volver a un estado limpio tras un error

6

Laboratorio automatizado de bastionado de SSH

Integrar cloud-init, instantáneas y scripts

7

Limpieza del entorno

Eliminar instancias, instantáneas y ficheros

14.1. Ejercicio 1. Primera instancia y ciclo de vida

Realice los siguientes pasos:

  1. Compruebe la versión de Multipass, el controlador en uso y las imágenes disponibles.

  2. Cree la instancia prueba con Ubuntu 24.04, 1 CPU, 1 GB de memoria y 8 GB de disco, y consulte su dirección IP, su versión de Ubuntu y su uso de disco.

  3. Sin abrir una sesión interactiva, muestre el núcleo de la instancia, el usuario con el que se ejecutan las órdenes y su pertenencia a grupos. Compruebe si puede usar sudo sin contraseña y explique qué implica para la seguridad.

  4. Suspenda la instancia, compruebe su estado y reanúdela. Elimínela después y verifique que sigue apareciendo en multipass list hasta que se purga.


14.2. Ejercicio 2. Laboratorio reproducible con cloud-init

Realice los siguientes pasos:

  1. Cree el directorio ~/lab_multipass y genere en él un par de claves ed25519 específico para el laboratorio, llamado lab_key.

  2. Escriba el fichero servidor.yaml a partir del ejemplo de la sección 5.1, sustituyendo la clave pública de ejemplo por el contenido de lab_key.pub. Omita el paquete lynis y la actualización completa de paquetes para acelerar la creación.

  3. Cree la instancia servidor con 2 GB de memoria a partir de este fichero y espere a que cloud-init termine. Verifique el resultado en el registro de cloud-init.

  4. Compruebe que se han creado el usuario alumno y el fichero de configuración de SSH con permisos 600, y que la configuración efectiva de sshd refleja sus directivas.

  5. Localice en la instancia la copia del user-data que guarda cloud-init y razone qué información no debería figurar nunca en ese fichero.


14.3. Ejercicio 3. Intercambio de ficheros y evidencias

Realice los siguientes pasos:

  1. Cree en el anfitrión un script auditoria.sh que muestre los usuarios con UID 0 y los permisos de /etc/shadow. Transfiéralo a servidor y ejecútelo con privilegios.

  2. Obtenga en el anfitrión una copia de /etc/shadow de la instancia como evidencia de una práctica. Compruebe primero que transfer no puede leerlo directamente y explique por qué, a diferencia de /var/log/auth.log, que el usuario ubuntu sí puede transferir por pertenecer al grupo adm.

  3. Monte el directorio ~/lab_multipass/compartido en servidor, cree en él un fichero desde la instancia y compruebe que aparece en el anfitrión. Desmonte el directorio y razone el riesgo que supondría montar el directorio personal completo.


14.4. Ejercicio 4. Laboratorio con dos instancias en red

Realice los siguientes pasos:

  1. Cree la instancia auditor con 1 GB de memoria e instale en ella nmap.

  2. Obtenga la dirección IP de servidor en formato JSON y compruebe desde auditor qué puertos y servicios tiene expuestos.

  3. Conéctese desde el anfitrión a servidor por SSH como alumno con la clave lab_key. Intente después la conexión forzando la autenticación por contraseña y razone el resultado.

  4. Cree un alias nmap que ejecute nmap en auditor y utilícelo desde el anfitrión. Elimine después el alias.


14.5. Ejercicio 5. Instantáneas antes de una práctica de bastionado

Realice los siguientes pasos:

  1. Detenga servidor, cree la instantánea antes_pam con un comentario descriptivo y arranque de nuevo la instancia.

  2. Simule un error grave de bastionado: sustituya /etc/pam.d/common-auth por una pila que solo contenga auth requisite pam_deny.so. Compruebe que el usuario alumno ya no puede iniciar sesión por SSH.

  3. Restaure la instantánea descartando el estado actual y verifique que common-auth vuelve a ser el original y que alumno puede acceder de nuevo.

  4. Clone servidor como servidor-copia, compruebe que su dirección IP es distinta y compare el contenido de /etc/machine-id y la huella de la clave SSH de host en ambas instancias.


14.6. Ejercicio 6. Laboratorio automatizado de bastionado de SSH

Realice los siguientes pasos:

  1. Elimine las instancias servidor, servidor-copia y auditor, y reproduzca en ~/lab_multipass/laboratorio-ssh los ficheros del ejemplo de la sección 11.

  2. Despliegue el laboratorio con ./lab.sh up y compruebe que existen las instantáneas inicial de ambas instancias.

  3. Audite la configuración de SSH del servidor desde auditor con nmap y ssh-audit, y anote los algoritmos débiles y las directivas inseguras detectadas.

  4. Aplique el bastionado en el servidor según la sección 11, verifique la configuración efectiva con sshd -T y repita la auditoría con ssh-audit. Compare ambos informes.

  5. Restaure las dos instancias al estado inicial con ./lab.sh reset y compruebe que ssh-audit vuelve a mostrar la configuración débil, lo que confirma la reversibilidad del laboratorio.


14.7. Ejercicio 7. Limpieza del entorno

Para terminar, revierta los cambios realizados durante la práctica.

Realice los siguientes pasos:

  1. Liste todas las instancias y elimine definitivamente las creadas durante la práctica: servidor, auditor y cualquier clon. Conserve las que ya existieran antes de empezar.

  2. Compruebe que no quedan instancias ni instantáneas de la práctica y que el espacio en disco se ha liberado.

  3. Elimine el directorio de trabajo y la clave del laboratorio del anfitrión.

Con la realización de estos ejercicios se consolidan los procedimientos esenciales para crear, automatizar, proteger y revertir laboratorios de máquinas virtuales con Multipass, una base imprescindible para abordar con seguridad el resto de prácticas de bastionado del curso.

15. Referencias

16. Licencia

Licencia CC BY-NC-ND 4.0

Esta página forma parte del curso Bastionado de Redes y Sistemas © 2026 de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Esta licencia exige que quienes reutilicen el material otorguen el debido crédito al autor. Permite copiar y redistribuir el material en cualquier medio o formato, únicamente en su forma original, y solo para fines no comerciales.