# Guía rápida — Ciberseguridad y Bastionado de Sistemas (CETI-BRS · CIPFP Mislata)


## Objetivo de la asignatura
Formar en **bastionado (hardening) de sistemas y redes**: asegurar la configuración de redes TCP/IP, desplegar VPNs, levantar servicios de red seguros, construir una PKI propia, implementar control de acceso multifactor, cifrar discos/archivos y securizar el acceso remoto por SSH, incluyendo detección y respuesta ante intrusiones.

## Descripción breve
El contenido corresponde a 6 unidades didácticas (UD1–UD6) de un módulo de ciberseguridad/administración de sistemas, con teoría, esquemas, comandos de laboratorio (Rocky Linux, Windows Server, OPNsense) y tests de autoevaluación con cientos de preguntas.

## Temas principales
1. Redes TCP/IP, subnetting, VLAN/DMZ y VPN (OpenVPN, WireGuard, SSH-VPN, L2TP/IPsec)
2. Servicios de red seguros: SSH, HTTP/HTTPS, FTP/FTPS, PKI básica, VPN en OPNsense
3. Criptografía aplicada: SSL/TLS/DTLS, OpenSSL, PKI de dos niveles, PKCS, revocación (CRL/OCSP), CA en Windows (AD CS)
4. Control de acceso: modelos DAC/MAC/RBAC/ABAC, OTP/TOTP, PAM, gestores de contraseñas (KeePass/KeePassXC), Passkeys
5. Cifrado de sistemas: BitLocker (+AD), EFS, LUKS, VeraCrypt, bloqueo de USB (Windows y USBGuard en Linux), políticas de PowerShell
6. OpenSSH avanzado y hardening: claves, agente, certificados SSH, KRL, Match/2FA, Fail2ban, ICMP, copias de seguridad

## Tecnologías principales
TCP/IP, VLAN 802.1Q, IPsec, TLS/DTLS, OpenSSL, OpenSSH, PAM, TOTP/HOTP, SELinux, BitLocker, EFS, LUKS2/dm-crypt, VeraCrypt, PowerShell 5.1/7+, Active Directory (AD DS / AD CS), OPNsense, systemd.

## Herramientas principales
`nmcli`, `ip`, `firewall-cmd`, `openvpn`/EasyRSA, `wg`/WireGuard-tools, `ssh`/`sshd`, `openssl`, `cryptsetup`, `manage-bde`, `cipher.exe`, `google-authenticator`, `usbguard`, `fail2ban-client`, KeePass/KeePassXC, VeraCrypt, YubiKey Manager.

## Nivel aproximado
Ciclo formativo de grado superior en ciberseguridad / administración de sistemas informáticos en red — nivel intermedio-avanzado.


## Resultado esperado / qué debería saber hacer al terminar
- Configurar direccionamiento IP, subredes, VLAN y DMZ.
- Desplegar y elegir entre 4+ tecnologías VPN según el caso de uso.
- Levantar servicios SSH/HTTP(S)/FTP(S) bastionados con certificados propios.
- Construir una PKI de dos niveles con OpenSSL y gestionar su ciclo de vida (emisión, formatos, revocación).
- Implementar 2FA con TOTP y PAM en SSH/sudo/su/login, y usar gestores de contraseñas de forma segura.
- Cifrar discos y archivos con las herramientas nativas de cada SO y controlar el uso de USB.
- Endurecer un servidor OpenSSH (claves, certificados, KRL, Match, Fail2ban) y aplicar buenas prácticas de copias de seguridad.

---

## Mapa visual de contenidos

```text
Asignatura (Ciberseguridad / Bastionado de Sistemas)
├── UD1 · Redes TCP/IP y VPN
│   ├── Subnetting / VLAN / DMZ
│   ├── OpenVPN, WireGuard, SSH-VPN, L2TP/IPsec
│   └── Wifi (WPA2/WPA3)
├── UD2 · Servicios de red seguros
│   ├── OpenSSH, HTTP/HTTPS
│   ├── PKI básica (AC propia)
│   ├── FTP/FTPS (vsftpd)
│   └── OpenVPN/WireGuard en OPNsense
├── UD3 · Criptografía, OpenSSL y PKI
│   ├── SSL/TLS/DTLS
│   ├── Hash, simétrico/asimétrico
│   ├── OpenSSL (claves, firma, PKI de 2 niveles)
│   ├── PKCS/PEM/DER
│   ├── Revocación CRL/OCSP
│   └── AD CS (Windows)
├── UD4 · Control de acceso y contraseñas
│   ├── DAC / MAC / RBAC / ABAC
│   ├── OTP/TOTP + PAM (SSH, sudo, su, login)
│   ├── KeePass (Windows) / KeePassXC (Linux)
│   └── Passkeys / FIDO2
├── UD5 · Cifrado y seguridad de sistemas
│   ├── BitLocker (+ Active Directory)
│   ├── EFS
│   ├── LUKS / VeraCrypt
│   ├── Bloqueo USB (Windows GPO / USBGuard)
│   └── Políticas PowerShell (Execution Policy, scopes)
└── UD6 · OpenSSH avanzado y hardening
    ├── Instalación segura del SO / reducción de superficie
    ├── Hardening de procesos, ICMP
    ├── Claves y agente SSH
    ├── Certificados SSH y KRL
    ├── Match / 2FA en sshd_config
    ├── Fail2ban
    └── Copias de seguridad (regla 3-2-1)
```

Dependencias explícitas (deducidas del contenido):

```text
UD1 (redes/VPN) → UD2 (servicios+VPN en OPNsense) → UD3 (PKI a fondo con OpenSSL)
                                                            ↘
UD4 (control acceso/OTP) ← usa PAM/SELinux visto en UD6 ← UD6 (SSH avanzado, usa certificados de UD3)
                                                            ↘
                                                    UD5 (cifrado de sistemas, independiente pero complementaria)
```

---

# Temario

## UD1 — Bastionado: Configuración de redes TCP/IP y VPN
[Resumen UD01](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema1.html)

- **Objetivo:** Configurar IP/subredes, segmentación lógica (VLAN/DMZ) y desplegar 4 tecnologías VPN distintas.
- **Conceptos clave:** clase de red, máscara/CIDR, DHCP/APIPA, VLAN tagged/untagged (802.1Q), DMZ, WPA2/WPA3 (SAE), IPsec.
- **Tecnologías:** TCP/IP, VLAN 802.1Q, OpenVPN, WireGuard, SSH-VPN (tun/tap), L2TP/IPsec, IKEv2.
- **Herramientas:** `nmcli`, `ip`, PowerShell (`New-NetIPAddress`), EasyRSA, `wg`, `firewall-cmd`, `ike-scan`.
- **Archivos/formatos relevantes:** `wg0.conf`, `server.conf` (OpenVPN), `sshd_config` (Match Address/PermitTunnel), `ipsec.conf`.
- **Recursos asociados:** ninguno con URL (sección "Recursos y enlaces" del HTML explícitamente marcada como pendiente de rellenar). ⚠️ Información incompleta en el material original.
- **Qué debería saber hacer:** fijar IP estática en Linux/Windows, resolver subnetting, levantar OpenVPN con PKI propia, WireGuard con claves Curve25519, un túnel sobre OpenSSH y L2TP/IPsec con PSK.

## UD2 — Servicios de red seguros y acceso remoto por VPN (OPNsense)
[Resumen UD02](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema2.html)

- **Objetivo:** Instalar y bastionar SSH, HTTP/HTTPS, FTP/FTPS y desplegar VPN de acceso remoto en un cortafuegos OPNsense.
- **Conceptos clave:** clave de host SSH, mod_ssl, CA/CSR/SAN, chroot FTP, TLS static key (tls-auth), Allowed IPs.
- **Tecnologías:** OpenSSH, Apache (httpd), vsftpd, PKI propia, OpenVPN y WireGuard sobre OPNsense.
- **Herramientas:** `systemctl`, `firewall-cmd`, `openssl`, `curl`, OPNsense (interfaz web), exportador de cliente OpenVPN.
- **Archivos/formatos relevantes:** `/etc/httpd/conf.d/ssl.conf`, `vsftpd.conf`, `.ovpn`.
- **Recursos asociados:** ninguno con URL en el material. ⚠️ Información incompleta.
- **Qué debería saber hacer:** habilitar/verificar servicios con systemd, montar HTTPS con certificado propio, configurar FTPS con chroot y crear una VPN de acceso remoto completa (OpenVPN y WireGuard) en OPNsense.

## UD3 — Criptografía, OpenSSL y PKI
[Resumen UD03](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema3.html)

- **Objetivo:** Dominar SSL/TLS/DTLS, los fundamentos criptográficos y construir/gestionar una PKI real con OpenSSL, incluida su revocación.
- **Conceptos clave:** handshake TLS, hash (SHA-2/3, Argon2), cifrado simétrico/asimétrico/híbrido, X.509, basicConstraints/keyUsage/SAN, CRL, OCSP.
- **Tecnologías:** TLS 1.2/1.3, OpenSSL 3.x, PKCS#1/5/7/8/10/11/12, AD CS (Windows).
- **Herramientas:** `openssl` (genrsa, req, ca, x509, ocsp, pkcs12, dgst, pkeyutl), `certutil`/`pk12util` (NSS), IIS/`certsrv.msc`.
- **Archivos/formatos relevantes:** `index.txt`, `serial`, `crlnumber`, `.pem/.der/.p7b/.p12`.
- **Recursos asociados:** ninguno con URL en el material. ⚠️ Información incompleta.
- **Qué debería saber hacer:** montar una PKI de dos niveles (CA raíz + intermedia), emitir/firmar certificados, convertir entre formatos PKCS/PEM/DER, revocar certificados (CRL y OCSP) y crear una CA en Windows con AD CS.

## UD4 — Control de Acceso, OTP y Gestión de Contraseñas
[Resumen UD04](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema4.html)

- **Objetivo:** Implementar autenticación multifactor (OTP/TOTP) vía PAM y gestionar credenciales con KeePass/KeePassXC.
- **Conceptos clave:** modelos DAC/MAC/RBAC/ABAC, factores de autenticación, TOTP/HOTP, tipos de control PAM (`required`/`sufficient`/…), SELinux (`auth_home_t`).
- **Tecnologías:** PAM, Google Authenticator (TOTP), SELinux, KeePass 2.x, KeePassXC, WebAuthn/FIDO2 (Passkeys).
- **Herramientas:** `google-authenticator`, `sudoedit`/`/etc/pam.d/*`, `semanage`/`restorecon`, KeePass, KeePassXC, YubiKey Manager.
- **Archivos/formatos relevantes:** `~/.ga/.google_authenticator`, `/etc/pam.d/{sshd,sudo,su,system-auth}`, `.kdbx`, `.keyx`.
- **Recursos asociados:** ninguno con URL en el material. ⚠️ Información incompleta.
- **Qué debería saber hacer:** activar 2FA con TOTP en SSH/sudo/su/login sin pedirlo dos veces, resolver bloqueos de SELinux, y usar KeePass/KeePassXC con múltiples factores (contraseña, keyfile, YubiKey) y agente SSH integrado.

## UD5 — Cifrado y Seguridad de Sistemas
[Resumen UD05](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema5.html)

- **Objetivo:** Cifrar volúmenes y archivos en Windows y Linux, integrarlo con Active Directory y controlar dispositivos USB.
- **Conceptos clave:** TPM 1.2/2.0, FEK (EFS), LUKS1 vs LUKS2 (Argon2id), volumen oculto/PIM (VeraCrypt), ImplicitPolicyTarget (USBGuard), scopes de Execution Policy.
- **Tecnologías:** BitLocker, EFS, LUKS/dm-crypt, VeraCrypt, USBGuard, PowerShell 5.1/7+.
- **Herramientas:** `manage-bde`, cmdlets `*-BitLocker*`, `cipher.exe`, `cryptsetup`, VeraCrypt GUI, `usbguard` (CLI/daemon), `Set-ExecutionPolicy`.
- **Archivos/formatos relevantes:** `/etc/crypttab`, `/etc/usbguard/rules.conf`, atributos AD `ms-FVE-*`.
- **Recursos asociados:** ninguno con URL en el material. ⚠️ Información incompleta.
- **Qué debería saber hacer:** activar BitLocker con guardado de claves en AD DS vía GPO, cifrar archivos con EFS en dominio, cifrar particiones con LUKS2 y VeraCrypt (incluidos volúmenes ocultos), bloquear USB en Windows y Linux, y gestionar Execution Policy por scope/GPO.

## UD6 — OpenSSH avanzado, certificados y hardening
[Resumen UD06](https://alyraluca.github.io/cibersecurity/Bastionado%20de%20Redes/bastionado_tema6.html)

- **Objetivo:** Endurecer un servidor OpenSSH de extremo a extremo: claves, certificados, revocación, 2FA, Fail2ban y copias de seguridad.
- **Conceptos clave:** principio de mínimo privilegio, ASLR, ICMP (riesgos/mitigación), tipos de clave SSH, `authorized_keys` (opciones), `Match`, `AuthenticationMethods` (AND/OR), principals, KRL, regla 3-2-1.
- **Tecnologías:** OpenSSH (certificados propios, distinto de X.509), Fail2ban, firewalld, sysctl.
- **Herramientas:** `ssh-keygen`, `ssh-agent`/`ssh-add`, `sshd -t/-T`, `fail2ban-client`, `firewall-cmd`, `sysctl`.
- **Archivos/formatos relevantes:** `~/.ssh/config`, `authorized_keys`, `known_hosts`, `*-cert.pub`, `sshd_config`/`sshd_config.d/*.conf`, `jail.conf/.local`.
- **Recursos asociados:** ninguno con URL en el material. ⚠️ Información incompleta.
- **Qué debería saber hacer:** generar y fortificar claves SSH, usar el agente, crear una CA SSH propia y firmar certificados de host/usuario, revocarlos con KRL, configurar 2FA real con `Match`/`AuthenticationMethods`, instalar Fail2ban y aplicar la regla 3-2-1 de copias de seguridad.

---

# Herramientas y tecnologías

| Herramienta / Tecnología | Categoría | Para qué sirve | Tema | URL oficial | Recursos |
|---|---|---|---|---|---|
| nmcli / ip | CLI / Terminal | Configurar IP, rutas e interfaces en Linux | UD1, UD6 | No indicada en el material | — |
| firewall-cmd (firewalld) | Seguridad | Gestión de zonas, servicios y reglas de cortafuegos | UD1, UD2, UD6 | No indicada en el material | — |
| OpenVPN + EasyRSA | VPN / PKI | VPN con PKI propia (CA, certificados, TLS-auth) | UD1, UD2 | No indicada en el material | — |
| WireGuard (`wg`) | VPN | VPN moderna basada en claves Curve25519 | UD1, UD2 | No indicada en el material | — |
| OpenSSH (`ssh`/`sshd`) | Seguridad / CLI | Acceso remoto cifrado, túneles, SFTP/SCP, certificados propios | UD1, UD2, UD6 | No indicada en el material | — |
| L2TP/IPsec | VPN | Túnel (L2TP) + cifrado/autenticación (IPsec-PSK) | UD1 | No indicada en el material | — |
| Apache (httpd) + mod_ssl | Servidor web | Servir contenido HTTP/HTTPS | UD2 | No indicada en el material | — |
| vsftpd | Servidor FTP | Servicio FTP/FTPS con chroot | UD2 | No indicada en el material | — |
| OPNsense | Cortafuegos / Plataforma | Firewall/router con OpenVPN y WireGuard integrados | UD2 | No indicada en el material | — |
| OpenSSL | Criptografía | Gestión de claves, certificados, PKI, firma, revocación | UD3 | No indicada en el material | — |
| LibreSSL / BoringSSL | Criptografía | Forks de OpenSSL surgidos tras Heartbleed | UD3 | No indicada en el material | — |
| AD CS (Active Directory Certificate Services) | PKI / Windows | CA corporativa integrada en Active Directory | UD3 | No indicada en el material | — |
| NSS (certutil/pk12util) | Criptografía | Almacén de certificados de Mozilla | UD3 | No indicada en el material | — |
| PAM | Autenticación | Framework de módulos de autenticación intercambiables en Linux | UD4 | No indicada en el material | — |
| Google Authenticator (TOTP) | Autenticación / IA-adyacente | Códigos OTP de un solo uso (RFC 6238) | UD4 | No indicada en el material | — |
| SELinux | Seguridad (MAC) | Control de acceso obligatorio en el kernel Linux | UD4, UD6 | No indicada en el material | — |
| KeePass | Gestor de contraseñas | Base de datos de contraseñas cifrada (.kdbx), Windows | UD4 | No indicada en el material | — |
| KeePassXC | Gestor de contraseñas | Fork multiplataforma de KeePass con TOTP y agente SSH nativos | UD4 | No indicada en el material | — |
| YubiKey / YubiKey Manager | Hardware / Seguridad | Token físico Challenge-Response / FIDO2 | UD4 | No indicada en el material | — |
| WebAuthn / FIDO2 (Passkeys) | Autenticación | Autenticación sin contraseña resistente a phishing | UD4 | No indicada en el material | — |
| BitLocker (`manage-bde`) | Cifrado de disco | Cifrado de volúmenes completos en Windows con TPM | UD5 | No indicada en el material | — |
| EFS (`cipher.exe`) | Cifrado de archivos | Cifrado de archivos individuales en NTFS | UD5 | No indicada en el material | — |
| LUKS / dm-crypt (`cryptsetup`) | Cifrado de disco | Estándar de cifrado de discos en Linux | UD5 | No indicada en el material | — |
| VeraCrypt | Cifrado de disco | Cifrado multiplataforma con volúmenes ocultos | UD5 | No indicada en el material | — |
| USBGuard | Seguridad / Dispositivos | Autorización de dispositivos USB en Linux | UD5 | No indicada en el material | — |
| PowerShell 5.1 / PowerShell 7+ (pwsh) | CLI / Automatización | Shell de administración; políticas de ejecución de scripts | UD5 | No indicada en el material | — |
| Fail2ban | Seguridad / IDS | Bloqueo automático de IPs tras fuerza bruta | UD6 | No indicada en el material | — |
| sysctl | CLI / Sistema | Ajustes del kernel (ASLR, ICMP, forwarding…) | UD1, UD6 | No indicada en el material | — |
| Active Directory (AD DS) | Plataforma / Directorio | Directorio corporativo; almacén de claves BitLocker/EFS | UD3, UD5 | No indicada en el material | — |
| Rocky Linux | Sistema operativo | SO Linux usado en todas las prácticas de laboratorio | UD1–UD6 | No indicada en el material | — |
| Windows Server (RRAS / IIS) | Sistema operativo | SO Windows usado para VPN L2TP, IIS, AD CS, AD DS | UD1, UD3, UD5 | No indicada en el material | — |


---


## Referencias
- RFC 1918 — Address Allocation for Private Internets (mencionada por nombre en UD1, sin enlace).
- RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (mencionada por nombre en UD4, sin enlace).
- RFC 4226 — HOTP: HMAC-Based One-Time Password Algorithm (mencionada por nombre en UD4, sin enlace).
- RFC 5280 — X.509 (mencionada por nombre en UD3, sin enlace).
- RFC 3161 — Time-Stamp Protocol / TSA (mencionada por nombre en UD3, sin enlace).
- RFC 8709 — Ed25519 en SSH (mencionada por nombre en UD6, sin enlace).
- RFC 5656 — ECDSA en SSH (mencionada por nombre en UD6, sin enlace).


---

# Recursos por tema

## UD1 — Redes TCP/IP y VPN
### Herramientas
nmcli, ip, PowerShell (NetTCPIP), EasyRSA, wg, firewalld, ike-scan


## UD2 — Servicios de red seguros
### Herramientas
systemctl, firewall-cmd, openssl, curl, OPNsense

## UD3 — Criptografía, OpenSSL y PKI
### Herramientas
openssl, certutil/pk12util, IIS/certsrv.msc

## UD4 — Control de acceso y contraseñas
### Herramientas
google-authenticator, semanage/restorecon, KeePass, KeePassXC, YubiKey Manager

## UD5 — Cifrado y seguridad de sistemas
### Herramientas
manage-bde, cmdlets BitLocker, cipher.exe, cryptsetup, VeraCrypt, usbguard

## UD6 — OpenSSH avanzado y hardening
### Herramientas
ssh-keygen, ssh-agent/ssh-add, sshd, fail2ban-client, firewall-cmd, sysctl

---

# Checklist de conocimientos

## 🟢 Básico
- [ ] Rangos de IP privadas (RFC 1918) y cálculo de subredes (CIDR)
- [ ] Configurar IP estática en Linux (nmcli/ip) y Windows (PowerShell)
- [ ] Diferencia entre VLAN tagged/untagged y concepto de DMZ
- [ ] Activar/parar servicios con systemctl y abrir puertos con firewalld
- [ ] Conceptos de hash, cifrado simétrico y asimétrico
- [ ] Generar un par de claves SSH y copiar la pública al servidor
- [ ] Factores de autenticación (algo que sabes/tienes/eres) y qué es 2FA/MFA
- [ ] Diferencia entre cifrado de disco completo (BitLocker/LUKS) y de archivo individual (EFS)

## 🟡 Intermedio
- [ ] Desplegar OpenVPN y WireGuard con PKI/claves propias
- [ ] Configurar HTTPS con certificado propio y FTPS con chroot
- [ ] Construir una PKI de dos niveles con OpenSSL (CA raíz + intermedia)
- [ ] Convertir entre formatos PEM/DER/PKCS#7/PKCS#12
- [ ] Configurar 2FA con TOTP vía PAM en SSH, sudo, su y login sin duplicar peticiones
- [ ] Resolver bloqueos de SELinux (contextos, `semanage`, `restorecon`)
- [ ] Cifrar una partición con LUKS2 (Argon2id) y automatizar el desbloqueo (`crypttab`)
- [ ] Configurar `authorized_keys` con restricciones (`from=`, `no-pty`, `command=`)
- [ ] Configurar bloques `Match` y `AuthenticationMethods` (AND vs OR) en sshd_config
- [ ] Instalar y ajustar Fail2ban (bantime/findtime/maxretry)

## 🔴 Avanzado
- [ ] Integrar BitLocker con Active Directory (GPO + atributos `ms-FVE-*`)
- [ ] Emitir, revocar (CRL/OCSP) y auditar certificados X.509 con OpenSSL
- [ ] Crear una CA SSH propia, firmar certificados de host/usuario con `principals` y revocarlos con KRL
- [ ] Configurar USBGuard con reglas por `vendor:product`, puerto e interfaz
- [ ] Gestionar Execution Policy de PowerShell por scope y GPO (MachinePolicy vs LocalMachine)
- [ ] Diseñar una estrategia de copias de seguridad con la regla 3-2-1 y tipos completo/incremental/diferencial
- [ ] Configurar EFS en dominio con DRA y plantilla de CA personalizada

---

# Prácticas

## 🟢 Nivel 1 — Fundamentos

### Práctica 1 — Direccionamiento IP y subnetting
**Objetivo:** Configurar IP estática en Linux y Windows y resolver un ejercicio de subnetting real.
**Qué practicar:** cálculo de subredes CIDR, asignación de IP/gateway/DNS.
**Herramientas:** nmcli, ip, PowerShell (`New-NetIPAddress`).
**Tareas:**
1. Fijar una IP estática permanente en Linux con `nmcli`.
2. Repetir la configuración con el comando `ip` (temporal) y comparar.
3. Configurar IP + DNS en Windows con PowerShell.
4. Resolver una tabla de subnetting para 5 departamentos × 20 hosts.
**Resultado esperado:** interfaz con IP fija que sobrevive a un reinicio, y tabla de subredes correcta.
**Conceptos que refuerza:** CIDR, máscara de red, DHCP vs estática.

### Práctica 2 — Generar y verificar claves SSH
**Objetivo:** Crear un par de claves Ed25519 y comprobar su fingerprint.
**Qué practicar:** `ssh-keygen`, fingerprint SHA256 vs randomart.
**Herramientas:** ssh-keygen.
**Tareas:**
1. Generar una clave Ed25519 con contraseña.
2. Mostrar el fingerprint (`-l`) y el randomart (`-l -v`).
3. Copiar la clave pública a un servidor con `ssh-copy-id`.
**Resultado esperado:** acceso SSH sin contraseña al servidor de prueba.
**Conceptos que refuerza:** PKI, claves de usuario vs de host.

### Práctica 3 — Bastionado básico de ICMP
**Objetivo:** Bloquear el ping de forma temporal y permanente.
**Qué practicar:** `sysctl`, `firewall-cmd --add-icmp-block`.
**Herramientas:** sysctl, firewalld.
**Tareas:**
1. Comprobar el estado actual de `icmp_echo_ignore_all`.
2. Bloquear el ping temporalmente con `sysctl -w`.
3. Bloquear solo `echo-request` con firewalld en una zona concreta.
**Resultado esperado:** el host deja de responder a ping pero mantiene el resto de tráfico.
**Conceptos que refuerza:** superficie de ataque, diferencia sysctl (global) vs firewalld (por zona).

### Práctica 4 — Activar HTTPS con certificado propio
**Objetivo:** Servir contenido HTTPS con un certificado autofirmado.
**Qué practicar:** `mod_ssl`, `openssl req`.
**Herramientas:** Apache (httpd), openssl.
**Tareas:**
1. Instalar httpd y mod_ssl.
2. Generar clave y certificado con `openssl req -newkey`.
3. Configurar `SSLCertificateFile`/`SSLCertificateKeyFile` en `ssl.conf`.
4. Probar con `curl -sk https://IP`.
**Resultado esperado:** acceso HTTPS funcional (con aviso de certificado no confiable, esperado).
**Conceptos que refuerza:** TLS, certificados autofirmados.

### Práctica 5 — Cifrar un fichero con OpenSSL
**Objetivo:** Cifrar y descifrar un fichero con clave simétrica derivada por contraseña.
**Qué practicar:** `openssl enc -aes-256-cbc -pbkdf2`.
**Herramientas:** openssl.
**Tareas:**
1. Cifrar un fichero de texto con AES-256-CBC y PBKDF2.
2. Descifrarlo con `-d` y verificar que el contenido es idéntico.
3. Repetir usando `openssl rand` para generar una clave aleatoria.
**Resultado esperado:** fichero cifrado y correctamente recuperado.
**Conceptos que refuerza:** IV, salt, PBKDF2, cifrado simétrico.

### Práctica 6 — Activar 2FA con Google Authenticator en SSH
**Objetivo:** Exigir código TOTP además de la clave/contraseña al conectar por SSH.
**Qué practicar:** PAM, `KbdInteractiveAuthentication`.
**Herramientas:** google-authenticator, PAM.
**Tareas:**
1. Instalar `google-authenticator` y ejecutarlo como el usuario a proteger.
2. Añadir `pam_google_authenticator.so` en `/etc/pam.d/sshd`.
3. Activar `KbdInteractiveAuthentication yes`.
4. Probar la conexión y resolver el error de SELinux si aparece.
**Resultado esperado:** SSH pide código OTP de 6 dígitos tras la clave.
**Conceptos que refuerza:** TOTP, PAM, SELinux (`auth_home_t`).

### Práctica 7 — Cifrar una partición con LUKS2
**Objetivo:** Crear y montar una partición cifrada en Linux.
**Qué practicar:** `cryptsetup luksFormat`, `luksOpen`, `crypttab`.
**Herramientas:** cryptsetup.
**Tareas:**
1. Formatear una partición nueva como LUKS2.
2. Abrirla y crear un sistema de archivos dentro.
3. Añadirla a `/etc/crypttab` para desbloqueo con contraseña al arrancar.
**Resultado esperado:** partición cifrada que pide contraseña al arrancar.
**Conceptos que refuerza:** dm-crypt, Argon2id, keyslots.

### Práctica 8 — Bloquear USB con USBGuard
**Objetivo:** Bloquear por defecto los dispositivos USB no autorizados.
**Qué practicar:** `usbguard generate-policy`, `allow-device`, `block-device`.
**Herramientas:** usbguard.
**Tareas:**
1. Instalar USBGuard y generar la política inicial con los dispositivos legítimos conectados.
2. Habilitar el servicio y comprobar `ImplicitPolicyTarget=block`.
3. Conectar un USB nuevo y comprobar que queda bloqueado; permitirlo con `allow-device -p`.
**Resultado esperado:** solo los USB autorizados explícitamente funcionan.
**Conceptos que refuerza:** políticas implícitas, reglas por vendor/product ID.

---

## 🟡 Nivel 2 — Consolidación

### Práctica 1 — VPN de acceso remoto con OpenVPN y PKI propia
**Objetivo:** Levantar un servidor OpenVPN con su propia CA y clientes en Windows/Linux.
**Contexto:** Servidor Rocky Linux con red interna 172.18.0.0/16; clientes en red externa.
**Herramientas:** OpenVPN, EasyRSA, firewalld.
**Requisitos:** conocer PKI básica y `systemctl`.
**Tareas:**
1. Crear la CA con EasyRSA y firmar certificado de servidor y cliente.
2. Generar la clave TLS-auth (`ta.key`).
3. Configurar el servidor (`server.conf`) con la ruta a la red interna.
4. Configurar NAT/masquerade en firewalld y `ip_forward=1`.
5. Conectar desde Windows, Linux (systemd) y NetworkManager.
**Resultado esperado:** ping permanente a la red interna desde los tres tipos de cliente.
**Conceptos practicados:** PKI, tls-auth, NAT.
**Posibles ampliaciones:** migrar a WireGuard y comparar rendimiento.

### Práctica 2 — VPN WireGuard con claves y preshared key
**Objetivo:** Configurar un túnel WireGuard con clave precompartida adicional.
**Contexto:** Mismo laboratorio que la práctica de OpenVPN.
**Herramientas:** wg, wg-quick, NetworkManager.
**Requisitos:** conceptos de criptografía asimétrica.
**Tareas:**
1. Generar claves pública/privada del servidor y del cliente.
2. Generar una preshared key opcional.
3. Configurar `wg0.conf` (servidor) y el perfil del cliente.
4. Levantar el servicio con `wg-quick@wg0` y verificar con `wg show`.
**Resultado esperado:** túnel activo con handshake reciente visible en `wg show`.
**Conceptos practicados:** Curve25519, AllowedIPs, keepalive.
**Posibles ampliaciones:** forzar todo el tráfico del cliente por el túnel (`0.0.0.0/0`).

### Práctica 3 — PKI de dos niveles con OpenSSL
**Objetivo:** Construir una CA raíz y una CA intermedia, y emitir un certificado de servidor.
**Contexto:** Laboratorio de criptografía con estructura de directorios estándar.
**Herramientas:** openssl.
**Requisitos:** conocer PEM/DER y extensiones X.509.
**Tareas:**
1. Generar la clave y certificado autofirmado de la CA raíz (RSA 4096 o ECDSA P-384).
2. Generar clave y CSR de la CA intermedia; firmarla con la raíz (`pathlen:0`).
3. Emitir un certificado de servidor firmado por la intermedia con SAN.
4. Verificar la cadena completa con `openssl verify`.
**Resultado esperado:** certificado de servidor válido y verificable contra la cadena.
**Conceptos practicados:** basicConstraints, policy_strict/loose, SAN.
**Posibles ampliaciones:** exportar todo a PKCS#12 y probarlo en un navegador.

### Práctica 4 — Revocación de certificados con CRL y OCSP
**Objetivo:** Revocar un certificado y comprobar su estado por dos vías distintas.
**Contexto:** Continuación de la práctica de PKI de dos niveles.
**Herramientas:** openssl (ca, gencrl, ocsp).
**Requisitos:** tener una CA intermedia operativa.
**Tareas:**
1. Revocar un certificado con `openssl ca -revoke` indicando el motivo.
2. Generar una nueva CRL con `openssl ca -gencrl`.
3. Levantar un respondedor OCSP de pruebas y consultar el estado del certificado.
4. Verificar el certificado contra la CRL con `openssl verify -crl_check`.
**Resultado esperado:** el certificado aparece como revocado por ambos mecanismos.
**Conceptos practicados:** motivos de revocación, OCSP Stapling, noCheck.
**Posibles ampliaciones:** comparar el comportamiento de Firefox vs Chrome ante OCSP.

### Práctica 5 — 2FA diferenciado por usuario y por servicio
**Objetivo:** Configurar 2FA solo para ciertos usuarios/redes usando `Match` en sshd_config.
**Contexto:** Servidor SSH con varios usuarios y redes de origen distintas.
**Herramientas:** sshd_config, PAM.
**Requisitos:** tener TOTP funcionando (nivel 1).
**Tareas:**
1. Crear un bloque `Match User` que fuerce solo autenticación FIDO2/PKI para un usuario.
2. Crear un bloque `Match Address` que restrinja grupos según la red de origen.
3. Configurar `AuthenticationMethods publickey,keyboard-interactive:pam` (2FA real, AND).
4. Verificar con `sshd -T -C addr=...,user=...`.
**Resultado esperado:** cada usuario/red tiene una política de autenticación distinta y verificable.
**Conceptos practicados:** Match, AND vs OR en AuthenticationMethods.
**Posibles ampliaciones:** añadir Fail2ban sobre el mismo servicio.

### Práctica 6 — BitLocker centralizado con Active Directory
**Objetivo:** Forzar BitLocker por GPO y recuperar la clave desde AD DS.
**Contexto:** Entorno de dominio con varios clientes Windows.
**Herramientas:** GPO, manage-bde, PowerShell, RSAT.
**Requisitos:** cliente unido a dominio.
**Tareas:**
1. Crear una OU y una GPO que fuerce el guardado de la clave en AD DS antes de activar BitLocker.
2. Activar BitLocker en un cliente de la OU.
3. Consultar la clave de recuperación desde AD (RSAT o `Get-ADObject`).
**Resultado esperado:** clave de recuperación visible desde el controlador de dominio.
**Conceptos practicados:** atributos `ms-FVE-*`, GPO, TPM.
**Posibles ampliaciones:** forzar TPM+PIN por GPO.

### Práctica 7 — Cifrado de volumen oculto con VeraCrypt
**Objetivo:** Crear un volumen VeraCrypt con negación plausible.
**Contexto:** Equipo con espacio libre en disco o USB.
**Herramientas:** VeraCrypt.
**Requisitos:** entender el concepto de PIM y keyfile.
**Tareas:**
1. Crear un volumen contenedor "señuelo" con datos falsos.
2. Crear un volumen oculto dentro con datos reales.
3. Configurar un PIM personalizado y un keyfile.
4. Montar ambos volúmenes con sus contraseñas respectivas.
**Resultado esperado:** dos volúmenes independientes accesibles con contraseñas distintas.
**Conceptos practicados:** negación plausible, PIM, keyfiles.
**Posibles ampliaciones:** hacer backup del keyfile y comprobar qué ocurre si se modifica un byte.

---

## 🔴 Nivel 3 — Avanzado

### Proyecto 1 — Laboratorio VPN comparativo multi-protocolo
**Objetivo:** Desplegar y comparar en un mismo laboratorio OpenVPN, WireGuard, SSH-VPN y L2TP/IPsec.
**Problema a resolver:** decidir qué protocolo VPN usar según prioridad (seguridad, velocidad, compatibilidad).
**Tecnologías:** OpenVPN, WireGuard, OpenSSH, L2TP/IPsec, firewalld/OPNsense.
**Requisitos:** laboratorio con router intermedio, servidor y cliente en redes distintas.
**Funcionalidades mínimas**
- [ ] Los 4 túneles funcionan simultáneamente sin solaparse en direccionamiento.
- [ ] Cada túnel permite ping estable a la red interna.
- [ ] Documentación de puertos y protocolos usados por cada VPN.
**Funcionalidades opcionales**
- [ ] Medir throughput de cada VPN con una misma herramienta.
- [ ] Migrar toda la infraestructura a gestión centralizada en OPNsense.
**Criterios de éxito**
- [ ] Los 4 túneles resisten reinicio del servicio sin intervención manual.
- [ ] Documento comparativo con recomendación justificada por escenario.
**Conceptos que se practican:** comparación de protocolos VPN, PKI, NAT, criptografía asimétrica.

### Proyecto 2 — Infraestructura PKI corporativa completa
**Objetivo:** Construir una PKI de dos niveles y usarla para firmar certificados SSH, TLS y de host.
**Problema a resolver:** eliminar avisos de confianza en web, FTPS y SSH usando una única cadena de confianza.
**Tecnologías:** OpenSSL, OpenSSH (certificados propios), Apache, vsftpd.
**Requisitos:** CA raíz air-gapped, CA intermedia operativa.
**Funcionalidades mínimas**
- [ ] CA raíz + intermedia con buenas prácticas (validez, tamaño de clave, permisos).
- [ ] Certificado TLS para Apache firmado por la intermedia, sin avisos tras importar la CA.
- [ ] Certificado FTPS firmado por la misma cadena.
- [ ] CA SSH independiente que firma certificados de host y usuario.
**Funcionalidades opcionales**
- [ ] Publicar CRL y respondedor OCSP accesibles desde los clientes.
- [ ] Automatizar la emisión de certificados con un script.
**Criterios de éxito**
- [ ] Ningún cliente muestra avisos de certificado no confiable tras importar la CA raíz.
- [ ] Revocar un certificado deja de permitir el acceso en menos de 5 minutos.
**Conceptos que se practican:** PKI de dos niveles, certificados X.509 y certificados SSH, revocación.

### Proyecto 3 — Servidor SSH bastionado con 2FA, certificados, KRL y Fail2ban
**Objetivo:** Endurecer un servidor OpenSSH combinando todas las técnicas de UD6.
**Problema a resolver:** exponer un servidor SSH a una red no confiable con el máximo nivel de bastionado posible.
**Tecnologías:** OpenSSH, PAM/TOTP, Fail2ban, certificados SSH, KRL.
**Requisitos:** servidor Linux con SELinux activo.
**Funcionalidades mínimas**
- [ ] Autenticación solo por clave pública o certificado (contraseña deshabilitada).
- [ ] 2FA obligatorio para el grupo de administradores (`Match Group`).
- [ ] Certificados de host y usuario emitidos por una CA propia.
- [ ] Fail2ban activo con `jail.local` personalizado.
- [ ] Al menos un certificado revocado mediante KRL y verificado con `ssh-keygen -Q`.
**Funcionalidades opcionales**
- [ ] Restricciones por IP y por comando en `authorized_keys` para cuentas de servicio.
- [ ] Alertas por email desde Fail2ban.
**Criterios de éxito**
- [ ] Un intento de fuerza bruta queda bloqueado automáticamente.
- [ ] Un certificado revocado no puede autenticarse aunque sea válido temporalmente.
- [ ] `sshd -T` refleja toda la configuración esperada sin errores de sintaxis.
**Conceptos que se practican:** certificados SSH, KRL, Match/2FA, Fail2ban, principio de mínimo privilegio.

### Proyecto 4 — Puesto de trabajo cifrado y controlado (Windows + Linux)
**Objetivo:** Bastionar un puesto de usuario en ambos sistemas operativos: cifrado, control de acceso y USB.
**Problema a resolver:** proteger datos ante robo/pérdida del equipo y ante exfiltración por USB.
**Tecnologías:** BitLocker+AD, EFS, LUKS2, USBGuard, GPO/PowerShell policies.
**Requisitos:** un cliente Windows en dominio y un cliente Linux.
**Funcionalidades mínimas**
- [ ] Windows: BitLocker activado con clave en AD DS + EFS para una carpeta de datos sensibles.
- [ ] Linux: partición de datos cifrada con LUKS2 y desbloqueo por keyfile.
- [ ] Bloqueo de USB por defecto en ambos sistemas (GPO en Windows, USBGuard en Linux).
- [ ] Execution Policy de PowerShell en `AllSigned` o `RemoteSigned` vía GPO.
**Funcionalidades opcionales**
- [ ] Firma de scripts PowerShell con certificado Code Signing propio.
- [ ] Excepciones de USB por Hardware ID (Windows) y por vendor ID (USBGuard).
**Criterios de éxito**
- [ ] Un USB no autorizado es rechazado en ambos sistemas.
- [ ] La clave de recuperación de BitLocker es recuperable desde AD sin el usuario.
- [ ] Un script PowerShell no firmado no se ejecuta en el cliente Windows.
**Conceptos que se practican:** BitLocker+AD, EFS, LUKS2, USBGuard, Execution Policy.

---

# Proyecto final

## Proyecto final — "Bastión": infraestructura de laboratorio segura de extremo a extremo
**Objetivo:** Integrar los seis bloques de la asignatura en un único laboratorio funcional que demuestre el dominio completo del bastionado de sistemas y redes.

**Problema que resuelve:** simula una pequeña infraestructura corporativa (servidor + DMZ + clientes) que debe quedar protegida frente a accesos no autorizados, fuga de datos y fuerza bruta, con gestión centralizada de identidades y claves.

**Tecnologías utilizadas:** TCP/IP + VLAN/DMZ (UD1), OpenVPN/WireGuard en OPNsense (UD1-UD2), Apache/FTPS con PKI propia (UD2), PKI de dos niveles con OpenSSL y revocación (UD3), 2FA con TOTP/PAM y KeePassXC (UD4), BitLocker+AD / LUKS2 / USBGuard (UD5), OpenSSH bastionado con certificados, KRL y Fail2ban (UD6).

**Conocimientos necesarios:** todo el temario de UD1 a UD6.

**Funcionalidades mínimas**
- [ ] Red segmentada (LAN/DMZ) con VPN de acceso remoto operativa (OpenVPN o WireGuard).
- [ ] Servicios web/FTP en la DMZ con certificados emitidos por una CA propia de dos niveles.
- [ ] Acceso administrativo únicamente por SSH con certificados, 2FA y Fail2ban activo.
- [ ] Al menos un cliente con disco cifrado (BitLocker+AD o LUKS2) y USB controlado.
- [ ] Gestión de credenciales de administración con KeePassXC (incluida clave SSH en el agente).

**Funcionalidades avanzadas**
- [ ] Revocación demostrable de un certificado (SSH y/o TLS) con efecto inmediato.
- [ ] Alertas o logging centralizado de intentos de intrusión (Fail2ban + journalctl).
- [ ] Automatización de la emisión/revocación de certificados con scripts.

**Entregables**
- Diagrama de red final (LAN/DMZ/VPN).
- Documentación de la PKI (estructura de CAs, políticas, procedimiento de revocación).
- Capturas o demo de cada control de seguridad funcionando (2FA, VPN, cifrado, USB, Fail2ban).
- Informe final justificando las decisiones (por qué cada protocolo/herramienta elegida).

**Criterios para considerar que está bien realizado**
- [ ] Ningún servicio expuesto usa autenticación solo por contraseña.
- [ ] Un ataque de fuerza bruta simulado queda bloqueado automáticamente.
- [ ] La pérdida de un dispositivo cliente no compromete los datos (cifrado activo y verificado).
- [ ] Toda la cadena de confianza PKI es coherente y revocable.

**Posibles ampliaciones**
- Integrar Passkeys/FIDO2 para el acceso administrativo web.
- Añadir copias de seguridad automatizadas siguiendo la regla 3-2-1.
- Migrar la gestión de políticas a un SIEM básico.

---

# Ruta de aprendizaje

```text
01. Fundamentos de redes (IP, subnetting, VLAN/DMZ)
       ↓
02. Servicios de red básicos (SSH, HTTP/HTTPS, FTP/FTPS)
       ↓
03. VPN (OpenVPN, WireGuard, SSH-VPN, L2TP/IPsec)
       ↓
04. Criptografía y PKI con OpenSSL (claves, certificados, revocación)
       ↓
05. Control de acceso y 2FA (PAM, TOTP, gestores de contraseñas)
       ↓
06. Cifrado de sistemas (BitLocker/EFS, LUKS/VeraCrypt) y control de USB
       ↓
07. OpenSSH avanzado y hardening final (certificados SSH, KRL, Fail2ban)
       ↓
08. Proyecto final integrador
```

**Etapas explicadas:**
1. **Fundamentos de redes:** sin dominar IP/subnetting/VLAN no se pueden diseñar los laboratorios de VPN y DMZ posteriores.
2. **Servicios de red básicos:** aprender a levantar y asegurar servicios antes de meterlos en una VPN.
3. **VPN:** conecta clientes remotos a la infraestructura ya asegurada.
4. **Criptografía y PKI:** base necesaria para entender los certificados usados en HTTPS, FTPS, OpenVPN y SSH.
5. **Control de acceso y 2FA:** añade una capa de autenticación fuerte sobre los servicios ya desplegados.
6. **Cifrado de sistemas:** protege los datos en reposo de los clientes/servidores.
7. **OpenSSH avanzado:** culmina el bastionado del canal de administración remota.
8. **Proyecto final:** integra todo lo anterior en un entorno realista.

---

# Cheat Sheet de la asignatura

| Tema | Conceptos clave | Herramientas | Recursos principales | Práctica |
|---|---|---|---|---|
| Redes/VPN (UD1) | CIDR, VLAN 802.1Q, DMZ, tipos de VPN | nmcli, wg, EasyRSA, firewalld | ⚠️ No indicados en el material | P1-P5 del laboratorio UD1 |
| Servicios de red (UD2) | SSH, HTTPS, FTPS, PKI básica, VPN en OPNsense | systemctl, openssl, OPNsense | ⚠️ No indicados en el material | Práctica 4 (HTTPS) |
| Criptografía/PKI (UD3) | TLS, hash, PKI de 2 niveles, PKCS, CRL/OCSP | openssl, AD CS | ⚠️ No indicados en el material | Práctica 3-4 (Nivel 2) |
| Control de acceso (UD4) | DAC/MAC/RBAC/ABAC, TOTP, PAM, KeePassXC | google-authenticator, KeePassXC | ⚠️ No indicados en el material | Práctica 6 (Nivel 1) |
| Cifrado de sistemas (UD5) | BitLocker+AD, EFS, LUKS2, VeraCrypt, USBGuard | manage-bde, cryptsetup, usbguard | ⚠️ No indicados en el material | Práctica 6-7 (Nivel 2) |
| OpenSSH/hardening (UD6) | claves/certificados SSH, KRL, Match/2FA, Fail2ban | ssh-keygen, fail2ban-client | ⚠️ No indicados en el material | Proyecto 3 (Nivel 3) |

---
