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 |
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 |
2.3. Arquitectura
Multipass se compone de tres elementos:
-
Cliente
multipass: la orden que ejecuta el usuario. Se comunica con el servicio a través de un socket local. -
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. -
Controlador de virtualización: el hipervisor nativo de cada plataforma, que ejecuta las máquinas.
| Plataforma | Controlador por defecto | Alternativas |
|---|---|---|
Linux |
QEMU con KVM |
|
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: |
Última LTS |
|
Nombre de la instancia |
Nombre aleatorio |
|
Número de CPU virtuales |
|
|
Memoria, con sufijo |
|
|
Tamaño del disco |
|
|
Fichero o URL con la configuración de cloud-init |
Ninguno |
|
Interfaz de red adicional |
Solo la red por defecto |
|
Directorio del anfitrión montado en la instancia |
Ninguno |
|
Segundos de espera para el arranque y cloud-init |
|
|
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
|
|
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 |
|---|---|
|
Primera línea obligatoria; identifica el formato del fichero |
|
Actualiza los índices y los paquetes, e instala los indicados |
|
Crea usuarios. |
|
Bloquea la contraseña del usuario, que solo podrá acceder con clave pública |
|
Claves públicas autorizadas para el usuario |
|
Crea ficheros con el contenido y los permisos indicados |
|
Órdenes que se ejecutan al final del primer arranque, como |
multipass launch 24.04 --name servidor --cloud-init servidor.yaml --timeout 600
|
No elimine el usuario Multipass accede a la instancia como |
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 |
|
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 |
|
Implementado por Multipass sobre SSH; disponible en todas las plataformas |
Nativo |
|
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 |
|
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 |
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 |
|
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 |
|---|---|
|
Controlador de virtualización |
|
Recursos de una instancia |
|
Interfaz física usada por |
|
Permite o impide los montajes de directorios |
|
Frase de paso que deben presentar los clientes no autorizados |
|
Nombre de la instancia |
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 |
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 |
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 |
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 |
Imágenes desactualizadas |
Incluya |
|
Multipass solo comprueba la integridad de las imágenes oficiales que descarga de Canonical. Al usar imágenes personalizadas mediante una URL |
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 |
|---|---|---|
|
cloud-init tarda más de lo previsto, por ejemplo al actualizar paquetes |
Aumentar |
La instancia queda en estado |
El servicio perdió el contacto con la máquina |
|
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 |
|
Virtualización desactivada en el firmware o en el hipervisor externo |
Activar VT-x o AMD-V, o la virtualización anidada |
|
Se eliminó el usuario |
Recrear la instancia incluyendo |
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 |
|
Crear una instancia |
|
Crear con cloud-init |
|
Listar instancias |
|
Información detallada |
|
Sesión interactiva |
|
Ejecutar una orden |
|
Copiar ficheros |
|
Montar un directorio |
|
Parar y arrancar |
|
Instantánea |
|
Restaurar |
|
Clonar |
|
Cambiar recursos |
|
Eliminar definitivamente |
|
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 |
| Nº | Ejercicio | Competencia que desarrolla |
|---|---|---|
1 |
Crear, consultar, detener y eliminar instancias |
|
2 |
Automatizar la configuración inicial de una instancia |
|
3 |
Transferir ficheros y valorar el riesgo de los montajes |
|
4 |
Conectar instancias y acceder por SSH con clave propia |
|
5 |
Volver a un estado limpio tras un error |
|
6 |
Integrar cloud-init, instantáneas y scripts |
|
7 |
Eliminar instancias, instantáneas y ficheros |
14.1. Ejercicio 1. Primera instancia y ciclo de vida
Realice los siguientes pasos:
-
Compruebe la versión de Multipass, el controlador en uso y las imágenes disponibles.
-
Cree la instancia
pruebacon 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. -
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
sudosin contraseña y explique qué implica para la seguridad. -
Suspenda la instancia, compruebe su estado y reanúdela. Elimínela después y verifique que sigue apareciendo en
multipass listhasta que se purga.
14.2. Ejercicio 2. Laboratorio reproducible con cloud-init
Realice los siguientes pasos:
-
Cree el directorio
~/lab_multipassy genere en él un par de clavesed25519específico para el laboratorio, llamadolab_key. -
Escriba el fichero
servidor.yamla partir del ejemplo de la sección 5.1, sustituyendo la clave pública de ejemplo por el contenido delab_key.pub. Omita el paquetelynisy la actualización completa de paquetes para acelerar la creación. -
Cree la instancia
servidorcon 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. -
Compruebe que se han creado el usuario
alumnoy el fichero de configuración de SSH con permisos600, y que la configuración efectiva desshdrefleja sus directivas. -
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:
-
Cree en el anfitrión un script
auditoria.shque muestre los usuarios con UID 0 y los permisos de/etc/shadow. Transfiéralo aservidory ejecútelo con privilegios. -
Obtenga en el anfitrión una copia de
/etc/shadowde la instancia como evidencia de una práctica. Compruebe primero quetransferno puede leerlo directamente y explique por qué, a diferencia de/var/log/auth.log, que el usuarioubuntusí puede transferir por pertenecer al grupoadm. -
Monte el directorio
~/lab_multipass/compartidoenservidor, 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:
-
Cree la instancia
auditorcon 1 GB de memoria e instale en ellanmap. -
Obtenga la dirección IP de
servidoren formato JSON y compruebe desdeauditorqué puertos y servicios tiene expuestos. -
Conéctese desde el anfitrión a
servidorpor SSH comoalumnocon la clavelab_key. Intente después la conexión forzando la autenticación por contraseña y razone el resultado. -
Cree un alias
nmapque ejecutenmapenauditory 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:
-
Detenga
servidor, cree la instantáneaantes_pamcon un comentario descriptivo y arranque de nuevo la instancia. -
Simule un error grave de bastionado: sustituya
/etc/pam.d/common-authpor una pila que solo contengaauth requisite pam_deny.so. Compruebe que el usuarioalumnoya no puede iniciar sesión por SSH. -
Restaure la instantánea descartando el estado actual y verifique que
common-authvuelve a ser el original y quealumnopuede acceder de nuevo. -
Clone
servidorcomoservidor-copia, compruebe que su dirección IP es distinta y compare el contenido de/etc/machine-idy 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:
-
Elimine las instancias
servidor,servidor-copiayauditor, y reproduzca en~/lab_multipass/laboratorio-sshlos ficheros del ejemplo de la sección 11. -
Despliegue el laboratorio con
./lab.sh upy compruebe que existen las instantáneasinicialde ambas instancias. -
Audite la configuración de SSH del servidor desde
auditorconnmapyssh-audit, y anote los algoritmos débiles y las directivas inseguras detectadas. -
Aplique el bastionado en el servidor según la sección 11, verifique la configuración efectiva con
sshd -Ty repita la auditoría conssh-audit. Compare ambos informes. -
Restaure las dos instancias al estado inicial con
./lab.sh resety compruebe quessh-auditvuelve 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:
-
Liste todas las instancias y elimine definitivamente las creadas durante la práctica:
servidor,auditory cualquier clon. Conserve las que ya existieran antes de empezar. -
Compruebe que no quedan instancias ni instantáneas de la práctica y que el espacio en disco se ha liberado.
-
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
-
Páginas de manual del sistema:
man cloud-init,man sshd_config.
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.