
Máquina virtual Linux del lado del cliente que se ejecuta en el navegador mediante WebAssembly, con redes de Tailscale, imágenes personalizadas basadas en Dockerfile y soporte para desafíos CTF para educación y desarrollo en seguridad.
Este repositorio alberga el código fuente de https://webvm.io, una máquina virtual Linux que se ejecuta en tu navegador.
Prueba el nuevo entorno gráfico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM es un entorno virtual sin servidor que se ejecuta completamente del lado del cliente en HTML5/WebAssembly. Está diseñado para ser compatible con ABI de Linux y ejecuta una distribución Debian sin modificar, incluyendo muchas cadenas de herramientas de desarrollo nativas.
WebVM funciona gracias al motor de virtualización CheerpX, que proporciona:
[!NOTE] Visita https://webvm.io para empezar de inmediato en tu navegador. Sin configuración previa.
Para configuración local, compilaciones de imágenes personalizadas y guía de bifurcación/despliegue, consulta Desarrollo y personalización.
WebVM soporta integración con Tailscale. De esta forma, tu máquina virtual en el navegador puede acceder a tu red privada y, con un nodo de salida, también a Internet público.
[!NOTE] Algunas operaciones de red de bajo nivel (especialmente ICMP usado por
ping) no están disponibles actualmente en este entorno. Para comprobaciones de conectividad, usacurlowget.
¡WebVM ahora tiene acceso a todas las máquinas de tu red Tailscale!
[!TIP] En conexiones lentas puede haber una breve demora antes de la inicialización. El estado de la conexión se muestra como un punto de color en el botón: naranja = red local, verde = global/Internet. El texto del botón muestra tu dirección IP de Tailscale una vez conectado.
Para acceder a Internet público desde WebVM, configura un Nodo de salida en otro dispositivo de tu red Tailscale:
Como alternativa al inicio de sesión interactivo, añade tu clave de autenticación de Tailscale al fragmento de URL:
https://webvm.io/#authKey=<tu-clave-efímera>
Esto equivale a la opción --login-server de Tailscale.
[!TIP] Si también necesitas un servidor de control personalizado, añade
controlUrlen el mismo fragmento de URL y separa los valores con&, por ejemplo:#authKey=...&controlUrl=....
También soportamos headscale, una implementación de código abierto autoalojada del servidor de control de Tailscale. Como Headscale no añade cabeceras CORS por defecto, necesitarás un proxy delante de él. Consulta la documentación de configuración de proxy inverso de Headscale para ver un ejemplo.
Una vez listo, añade la siguiente línea a tu bloque location / en el archivo de configuración de nginx.
if ($http_origin = "https://tudominio.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Luego accede a WebVM con:
https://tudominio.com/#controlUrl=<tu-url-de-headscale>
[!NOTE] Los usuarios tienen privilegios de root por defecto.
sudono está instalado, aunque se puede añadir fácilmente al Dockerfile si es necesario.
Este es un flujo de trabajo simple, apto para principiantes. Para alojamiento local y personalización, consulta más abajo Servicio local y configuración de imagen.
Bifurca (fork) el repositorio de WebVM para desplegar tu propia versión en GitHub Pages:
Deploy desde Actionsdeploy_to_github_pages
El mismo flujo de trabajo Deploy también compila imágenes de disco .ext2 personalizadas a partir de un Dockerfile. Puedes apuntarlo a dockerfiles/debian_mini u otro Dockerfile, y luego publicar el resultado como un activo de lanzamiento de GitHub o desplegar la compilación de Pages desde tu bifurcación.
[!NOTE]
dockerfiles/debian_largees una imagen demasiado grande para GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/Este repositorio incluye un directorio persistente custom-disk-images/ para archivos .ext2 locales.
Para usar la imagen oficial Debian mini, descárgala de los lanzamientos:
debian_mini_20230519_5022088024.ext2
También puedes copiar una imagen que hayas compilado tú mismo.
Edita config_public_terminal.js:
export const diskImageUrl =
"/custom-disk-images/debian_mini_20230519_5022088024.ext2";
export const diskImageType = "bytes";
npm install
npm run build
nginx -p . -c nginx.conf
Luego abre http://127.0.0.1:8081 y ¡disfruta de tu WebVM local!
Para el entorno de escritorio Alpine completo, consulta leaningtech/alpine-image.
Para más detalles, consulta la documentación de imágenes personalizadas de CheerpX.
[!TIP] Para el REPL de Python3, el flujo de trabajo
Deploytiene en cuenta elCMDespecificado en el Dockerfile.Para construir un REPL, simplemente cambia
CMD [ "/bin/bash" ]porCMD [ "/usr/bin/python3" ]y despliega.
Para acceder a Claude AI, necesitas una clave API. Sigue estos pasos para empezar:
"Resuelve el desafío CTF en /home/user/chall1.bin. Ten en cuenta que el binario lee de stdin."
Importante: Tu clave API es privada y nunca debe compartirse. No tenemos acceso a tu clave; solo se almacena localmente en tu navegador.
Reportar problemas: Usa GitHub Issues para reportar errores o solicitar funciones.
Chatea con nosotros: Únete a nuestra comunidad de Discord para discutir sobre WebVM, compartir ideas y obtener ayuda.
Artículos y recursos:
Ejemplo de despliegue:
Tecnología detrás de WebVM:
Este proyecto está impulsado por:
Versionado:
WebVM utiliza el paquete NPM CheerpX, que se actualiza en cada lanzamiento.
Cada compilación es inmutable. Si una versión específica funciona bien para ti hoy, seguirá funcionando para siempre.
WebVM se publica bajo la Licencia Apache, Versión 2.0.
Eres bienvenido a usar, modificar y redistribuir el contenido de este repositorio.
El despliegue público de CheerpX se proporciona tal cual y es de uso gratuito para exploración tecnológica, pruebas y uso por parte de individuos. Cualquier otro uso por parte de organizaciones, incluyendo sin ánimo de lucro, academia y sector público, requiere una licencia. No se permite descargar una compilación de CheerpX con el propósito de alojarla en otro lugar sin una licencia comercial.
Lee más aquí sobre nuestras prácticas de licencias.
Si deseas construir un producto basado en CheerpX/WebVM, consulta nuestras otras opciones de licencia: Licencias de CheerpX o ponte en contacto: [email protected]