# Kit del curso 11 · Taller de arquitectura: diseña y documenta un caso resuelto

## Qué es

La carpeta del caso de Conservas Ejemplo del Norte, S. L. (empresa ficticia) tal como la usan las terminales del taller, `~/ejemplo-conservas`: el ADR-0003 completo, el registro de riesgos (10 riesgos) y la matriz de controles (11 controles; falta C09 a propósito, la terminal lo añade), las reglas de nftables con su laboratorio de espacios de red, la configuración de SSH y los dos servicios de systemd, la zona de DNS de prueba y el laboratorio del WAF (nginx + ModSecurity + OWASP CRS).

Ficheros: `ejemplo-conservas/adr/0003-copia-fuera-de-linea.md` (753 bytes), `ejemplo-conservas/adr/_plantilla.md` (417 bytes), `ejemplo-conservas/dns/db.ejemplo-conservas` (730 bytes), `ejemplo-conservas/linux/ejemplo-conservas-export-duro.service` (663 bytes), `ejemplo-conservas/linux/ejemplo-conservas-export.service` (196 bytes), `ejemplo-conservas/linux/sshd_ejemplo-conservas.conf` (512 bytes), `ejemplo-conservas/red/ejemplo-conservas.nft` (850 bytes), `ejemplo-conservas/red/lab-red.sh` (2.4 KB), `ejemplo-conservas/red/probe.sh` (387 bytes), `ejemplo-conservas/riesgos/controles.csv` (727 bytes), `ejemplo-conservas/riesgos/riesgos.csv` (732 bytes), `ejemplo-conservas/waf/index.html` (232 bytes), `ejemplo-conservas/waf/lab-waf.sh` (1.3 KB), `ejemplo-conservas/waf/modsecurity-ejemplo-conservas.conf` (656 bytes), `ejemplo-conservas/waf/nginx-waf.conf` (953 bytes).

Todo es ficticio: empresas, personas, dominios `.example`/`example.com` y direcciones de documentación (RFC 5737). No hay datos reales ni personales.

## Requisitos

Ubuntu (o WSL2) y permisos de root para las prácticas de red, Linux y WAF. Paquetes: `nftables`, `iproute2`, `netcat-openbsd`, `openssh-server`, `systemd`, `bind9-dnsutils` y `bind9-utils` (dig, named-checkzone), `nginx`, `libnginx-mod-http-modsecurity`, `modsecurity-crs`, `python3`, `curl`. Las terminales del registro de riesgos, de la matriz y del ADR solo piden `awk`, `sort`, `comm`, `column` y `cat`.

## Cómo usarlo

Descomprime el kit y copia la carpeta del caso a tu casa: `cp -r 11-taller-arquitectura/ejemplo-conservas ~/`. Crea las carpetas vacías `diagramas/` y `docs/` si las quieres. Cada terminal indica en su prompt la subcarpeta (`~/ejemplo-conservas/riesgos`, `…/red`, `…/linux`, `…/dns`, `…/waf`): entra en ella. Laboratorio de red: `sudo bash lab-red.sh up`, `sudo bash lab-red.sh cargar`, `source probe.sh` (como root o con `sudo -i`) y, al terminar, `sudo bash lab-red.sh down`. Laboratorio WAF: `sudo bash lab-waf.sh iniciar`; para pasar a bloqueo, cambia `SecRuleEngine DetectionOnly` por `SecRuleEngine On` en `modsecurity-ejemplo-conservas.conf` y `sudo bash lab-waf.sh reiniciar`; al terminar, `sudo bash lab-waf.sh parar`.

## Qué terminales cubre

Con ficheros de este kit:

| Terminal (diapositiva) | Ficheros del kit | Qué usa y qué variará |
|---|---|---|
| Terminal: ordenar el registro por exposición («El registro de riesgos de Ejemplo del Norte») | `riesgos/riesgos.csv` | El registro de riesgos ficticio. **Qué variará:** Nada (salida idéntica) |
| Terminal: reglas nftables con denegar por defecto («Zonas y reglas del cortafuegos») | `red/ejemplo-conservas.nft`, `red/lab-red.sh`, `red/probe.sh` | Los espacios de red `fw`, `usr`, `srv` y `dmz`, y las reglas (root en Linux o WSL). **Qué variará:** El contador de la última regla (`packets 4 bytes 240`) puede variar unos paquetes según los tiempos |
| Terminal: SSH y un servicio con menos privilegios («Linux concreto: SSH, núcleo y servicios») | `linux/sshd_ejemplo-conservas.conf`, `linux/ejemplo-conservas-export.service`, `linux/ejemplo-conservas-export-duro.service` | Los tres ficheros y OpenSSH + systemd (root). **Qué variará:** Las puntuaciones de `systemd-analyze` dependen de la versión de systemd (aquí la 259) |
| Terminal: SPF, DKIM y DMARC en el DNS («Correo: SPF, DKIM y DMARC») | `dns/db.ejemplo-conservas` | La zona de prueba y `dig`/`named-checkzone`; las dos primeras órdenes consultan `example.com`. **Qué variará:** El orden de las dos líneas TXT de `example.com` |
| Terminal: WAF en solo detección y en bloqueo («Tienda online: proxy inverso y WAF») | `waf/nginx-waf.conf`, `waf/modsecurity-ejemplo-conservas.conf`, `waf/lab-waf.sh`, `waf/index.html` | nginx con ModSecurity y OWASP CRS 3.3.8 del paquete de Ubuntu, en 127.0.0.1. **Qué variará:** Nada si usas el paquete de Ubuntu; otras versiones de CRS pueden dar otros identificadores de regla |
| Terminal: ADR-0003 completo («Cinco decisiones de arquitectura (ADR) con alternativas») | `adr/0003-copia-fuera-de-linea.md` | El ADR ficticio. **Qué variará:** Nada (salida idéntica) |
| Terminal: huecos y controles huérfanos («Matriz de controles y huecos») | `riesgos/riesgos.csv`, `riesgos/controles.csv` | El registro de riesgos y la matriz de controles. **Qué variará:** Nada (salida idéntica) |

Otras terminales del curso, que **no necesitan ficheros** del kit:

| Terminal (diapositiva) | Qué usa | Qué variará |
|---|---|---|
| Terminal: Windows LAPS en Active Directory («Active Directory y Windows: niveles, LAPS y reglas ASR») | Windows LAPS con un dominio de Active Directory | No reproducible con ficheros: necesita Active Directory (la diapositiva usa el ejemplo oficial de Microsoft) |

## Avisos

- Los ficheros originales del autor no se guardaron en el repositorio: se han reconstruido a partir de las lecciones y de lo que muestran las terminales. Todas las salidas de las terminales de este kit coinciden con las diapositivas (comprobado en Ubuntu 26.04 sobre WSL2).
- Propietarios de `riesgos.csv`: OPE = Operaciones, DIR = Dirección General, COM = Comercial, FIN = Finanzas, PRO = Producción, TI = Tecnologías de la información. La escala es 1-3 y la exposición, probabilidad × impacto.
- Direcciones de documentación (RFC 5737): usuarios 192.0.2.0/25, servidores 192.0.2.128/26 (el ERP, en 192.0.2.130) y DMZ 198.51.100.0/26. Los espacios de red están aislados: no tocan tu cortafuegos ni tus interfaces.
- `adr/_plantilla.md` no sale en las lecciones: es una plantilla mínima añadida para el kit. Los ADR 0001, 0002, 0004, 0005 y 0006 los escribes tú en el taller.
- El laboratorio WAF escucha solo en 127.0.0.1 y no debe apuntarse a sitios ajenos. Un `lab-red.sh up` sin `down` deja espacios de red creados hasta que reinicies o los borres.
- No reproducible con ficheros: la terminal de Windows LAPS (necesita Active Directory).
- Verificación: las órdenes de cada terminal reproducible se ejecutaron el 10 y 11-10-2026 en Ubuntu 26.04 (WSL2), Git Bash y Windows PowerShell 5.1 (las pruebas de red, siempre dentro de `ip netns` y de 127.0.0.1), y la salida coincide con la diapositiva salvo lo indicado en «Qué variará». Las terminales marcadas «sin verificar» o «no reproducible» se indican aparte, con su motivo.
