Skip to content

JuanEntrena18/proyecto_ansible

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Visual/\nsible - Gestión de Aulas con Ansible

Interfaz visual basada en nodos para gestionar y ejecutar playbooks de Ansible en aulas informáticas. Escanea la red, detecta equipos Windows y Linux, y permite ejecutar tareas de automatización con un simple arrastrar y soltar.

Stack Tecnológico

Capa Tecnología
Frontend HTML5 + jQuery + AdminLTE 3 + Drawflow
Backend Python 3.12 + FastAPI + Uvicorn/Gunicorn
Proxy Nginx (con HTTPS y headers de seguridad)
Automatización Ansible Core + WinRM + SSH
Escaneo Nmap
Contenedores Docker + Docker Compose
Seguridad JWT + bcrypt + Fernet + HTTPS

Arquitectura

flowchart TD
    %% Título General
    Titulo["Arquitectura Completa del Sistema Visual/\nsible"]

    %% --------------------------------------------------------
    %% 1. CAPA PROXY
    %% --------------------------------------------------------
    subgraph CapaProxy ["1. CAPA PROXY (Puerta de Entrada)"]
        direction TB
        Nginx["Nginx (Reverse Proxy)"]
        Seguridad["Escudo: Rate Limiting & SSL/TLS"]
        
        Nginx --- Seguridad
    end

    %% --------------------------------------------------------
    %% 2. CAPA LÓGICA
    %% --------------------------------------------------------
    subgraph CapaLogica ["2. CAPA LÓGICA (Orquestación y API)"]
        direction TB
        Backend["Backend FastAPI (Privilegios NET_RAW)"]
        Motores["Motores de Ejecución: Ansible + Nmap"]
        Creds["Inyección de Clave Maestra (KeePass)"]
        
        Backend --- Motores
        Backend --- Creds
    end

    %% --------------------------------------------------------
    %% 3. CAPA DE PERSISTENCIA
    %% --------------------------------------------------------
    subgraph CapaDatos ["3. CAPA DE PERSISTENCIA (Volúmenes Host)"]
        direction TB
        Carpetas["Directorios Físicos: /data, /config, /ansible"]
        BasesDatos["Bases de Datos: usuarios.db e inventory.json"]
        
        Carpetas --- BasesDatos
    end

    %% --------------------------------------------------------
    %% 4. CAPA DE CONTINUIDAD
    %% --------------------------------------------------------
    subgraph CapaContinuidad ["4. CAPA DE CONTINUIDAD (Protección DRP)"]
        direction TB
        Alpine["Servicio Alpine (Aislado)"]
        Scripts["Ejecución Cron: backup.sh + Exportación SCP"]
        
        Alpine --- Scripts
    end

    %% ========================================================
    %% RELACIONES VERTICALES (Fuerzan el diseño de Arriba a Abajo)
    %% ========================================================
    CapaProxy == "Enruta peticiones seguras hacia la API" ==> CapaLogica
    CapaLogica == "Actualiza inventarios y lee credenciales" ==> CapaDatos
    CapaContinuidad -. "Comprime datos en modo Solo Lectura" .-> CapaDatos

    %% ========================================================
    %% ESTILOS VISUALES (Optimizados para GitHub)
    %% ========================================================
    style CapaProxy fill:#e0f2fe,stroke:#0284c7,stroke-width:3px,color:#0f172a
    style CapaLogica fill:#ede9fe,stroke:#7c3aed,stroke-width:3px,color:#0f172a
    style CapaDatos fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
    style CapaContinuidad fill:#fef9c3,stroke:#ca8a04,stroke-width:3px,color:#0f172a
    style Titulo fill:none,stroke:none,font-size:22px,font-weight:bold
Loading

Funcionalidades

  • Escaneo de red: Detección automática de equipos Windows y Linux via Nmap
  • Playbooks predefinidos: 10 plantillas listas para usar (instalación de software, firewall, usuarios, Docker, XAMPP, etc.)
  • Ejecución drag and drop: Arrastra un playbook sobre un host y se ejecuta al instante
  • Streaming en tiempo real: La salida de Ansible se muestra en el navegador mientras se ejecuta
  • Playbooks personalizados: Crea y guarda tus propios playbooks desde la interfaz
  • Multiplataforma: Soporta hosts Windows (WinRM) y Linux (SSH) simultaneamente
  • Logs de auditoría: Historial completo de todas las ejecuciones

Seguridad

  • Autenticación JWT: Dos roles: admin (control total) y operador (solo lectura)
  • HTTPS obligatorio: Puerto 80 redirige a 443 con certificado SSL
  • Credenciales cifradas: credentials.json se cifra en disco con Fernet
  • Headers de seguridad: HSTS, CSP, X-Frame-Options, X-Content-Type-Options
  • Contraseñas nunca en cliente: Las contraseñas de los hosts viajan solo del frontend al backend, nunca al reves
  • Validación de entrada: Regex en IPs, rutas, nombres de archivo y usuarios
  • Tokens efímeros: JWT con expiración de 24 horas

Despliegue Rápido (Docker)

# Clonar repositorio
git clone https://github.com/JuanEntrena18/proyecto_ansible
cd proyecto_ansible/github

# Generar clave de cifrado para credenciales
export CREDENTIALS_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")

# Construir y arrancar
sudo docker compose up -d --build

Accede a https://<IP-del-servidor> con usuario admin y contraseña admin.

API REST

Metodo Endpoint Auth Descripción
POST /login - Inicio de sesión (devuelve JWT)
GET /me JWT Información del usuario
GET /scan?subnet=X.X.X.X/XX JWT Escanea una subred con Nmap
GET /playbooks JWT Lista los playbooks disponibles
GET /playbooks/{tipo}/{nombre} JWT Lee el contenido de un playbook
POST /playbooks Admin Guarda un playbook personalizado
POST /execute Admin Ejecuta un playbook en uno o varios hosts
GET /credentials Admin Obtiene los usuarios configurados
POST /credentials Admin Guarda credenciales de acceso a hosts
GET /logs Admin Historial de ejecuciones

Playbooks Disponibles

Playbook SO Descripción
instalar_software Linux + Windows Instala paquetes desde group_vars
instalar_docker Linux Instala Docker CE
instalar_xampp Linux + Windows Instala XAMPP / LAMP
instalar_libreoffice Linux + Windows Instala LibreOffice
crear_usuario Linux + Windows Crea usuario alumno
habilitar_rdp Windows Habilita escritorio remoto (RDP)
configurar_firewall Linux + Windows Abre puertos en firewall
actualizar_sistema Linux + Windows Actualiza paquetes del sistema
renombrar_equipos Linux + Windows Renombra equipos segun IP
desinstalar_todo Linux + Windows Desinstala todo el software instalado

Estructura del Proyecto

github/
+-- backend/
|   +-- main.py              # API FastAPI (JWT + cifrado)
|   +-- requirements.txt     # Dependencias Python
|   +-- Dockerfile           # Imagen del backend
+-- frontend/
|   +-- index.html           # Interfaz de usuario
+-- config/
|   +-- nginx.conf           # Proxy HTTPS con seguridad
|   +-- ssl/                 # Certificados SSL
|   +-- credentials.json     # Credenciales cifradas
+-- ansible/
|   +-- ansible.cfg          # Configuracion de Ansible
|   +-- inventory/           # Inventarios y group_vars
|   +-- playbooks/
|   |   +-- templates/       # Playbooks predefinidos
|   |   +-- custom/          # Playbooks del usuario
|   +-- roles/               # Roles de Ansible
|   +-- logs/                # Historial de ejecuciones
+-- scripts/
|   +-- backup.sh            # Backup automático diario
+-- docker-compose.yml       # Orquestación de contenedores
+-- README.md

Variables de Entorno

Variable Descripción Obligatoria
CREDENTIALS_KEY Clave Fernet para cifrar credentials.json Recomendada (se autogenera si no existe)

Despliegue Tradicional (sin Docker)

Consulta la Guia de Despliegue para instalación en Ubuntu Server 22.04/24.04 sin Docker.

Equipo

Nombre Rol GitHub
Juan Fco. Entrena Garrido Desarrollo @JuanEntrena18
Diego Toribio Perea Desarrollo @DiegoToribio06
Daniel Palacios Melguizo Desarrollo @dpalmel1312
Marina Jimenez Egea Desarrollo @Marjieg
Felix David Romero Lopez Desarrollo @felixdavid28

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages