Sistema integral para la visualización y gestión de vulnerabilidades. Arquitectura desacoplada con Docker para paridad entre desarrollo y producción.
| Componente | Tecnología |
|---|---|
| Frontend | React 19 + Vite 8 + Lucide |
| Backend | Java 21 + Spring Boot 4.x |
| Base de datos | PostgreSQL 16 (Alpine) |
| Orquestación | Docker + Docker Compose |
| DevSecOps | Jenkins, SonarQube, OWASP ZAP, Dependency Check, Grafana, Prometheus |
Para programar con cambios en caliente.
- Frontend: puerto 5173 (Vite)
- Backend: puerto 8080 (Spring DevTools)
docker compose up --buildFrontend con Nginx, backend con JAR. Sin hot reload.
- Frontend: puerto 80
- Backend: puerto 8080
docker compose -f docker-compose_prod.yml up --build -dIncluye app, Jenkins, Grafana, Prometheus y SonarQube.
docker compose up -d| Servicio | Puerto | URL |
|---|---|---|
| App frontend | 5173 | http://localhost:5173 |
| App backend | 8080 | http://localhost:8080 |
| Jenkins | 8081 | http://localhost:8081 |
| Grafana | 3000 | http://localhost:3000 |
| Prometheus | 9090 | http://localhost:9090 |
| SonarQube | 9000 | http://localhost:9000 |
| OWASP ZAP (API) | 8090 | http://localhost:8090 |
| OWASP Dependency Check | — | Contenedor CLI (docker exec vuln-dependency-check ...) |
- Docker y Docker Compose
- Git
Copia .env.example a .env en la raíz y ajusta valores (no subas .env al repo):
cp .env.example .envMínimo: DB_USERNAME, DB_PASSWORD. Opcional: GRAFANA_ADMIN_USER, GRAFANA_ADMIN_PASSWORD, SONAR_DB_PASSWORD. En producción usa contraseñas fuertes y distintas.
Con el entorno levantado (modo desarrollo o stack completo):
| Campo | Valor |
|---|---|
| Usuario | admin.seguridad (dominio @usach.cl se añade automáticamente) |
| Contraseña | admin123 |
Cada servicio tiene dos variantes:
Dockerfile.dev— JDK/Node, volúmenes montados, compilación en tiempo real.Dockerfile— Multi-stage: JRE + Nginx, imágenes ligeras para producción.
El pipeline de Jenkins cubre el ciclo DevSecOps con herramientas 100 % gratuitas y open source (sin licencias ni suscripciones de pago):
| Fase | Herramienta / práctica |
|---|---|
| Secretos | Gitleaks (detección en repo) |
| Build | Maven, npm |
| Test | JUnit |
| SAST | SonarQube (Community Edition) |
| SCA | OWASP Dependency Check (backend y frontend) |
| Imágenes | Trivy (vulnerabilidades en imágenes Docker) |
| DAST | OWASP ZAP (escaneo dinámico contra la app) |
| Operate | Grafana + Prometheus |
Cobertura del ciclo: docs/DEVSECOPS_CICLO.md. Configuración del pipeline y reportes: docs/JENKINS_PIPELINE.md.
- Redes: BD de la app en red interna (
app_internal) sin internet; solo el backend la alcanza. SonarQube y su BD en red aparte;sonar-dbsin puertos publicados. - Contenedores:
no-new-privileges, todos los puertos en127.0.0.1, tmpfs en/tmpdonde aplica. - App: Cabeceras de seguridad (X-Frame-Options, CSP, etc.) en backend y frontend (Nginx); backend en producción corre como usuario no root.
- Credenciales:
.env(ver.env.example); en producción usar contraseñas fuertes.
Detalle y opciones para TLS/producción: docs/SEGURIDAD_RED_CONTENEDORES.md.
| Acción | Comando |
|---|---|
| Logs del backend | docker logs -f vuln-backend |
| Reiniciar y borrar DB | docker compose down -v |
| Consola PostgreSQL | docker exec -it vuln-db psql -U admin -d vulncheck |