GhostAcademy
GhostAcademy
Ejercicio guiado · Firewalls: iptables, conntrack, NAT, Nmap y Windows Defender
Ejercicio guiado · Seguridad perimetral
Entiende por qué un firewall
deja pasar un paquete

Un firewall Linux con tres patas (Internet, LAN y DMZ) y un Windows Defender Firewall, simulados en el navegador con el comportamiento real de netfilter: cadenas, conntrack, DNAT y MASQUERADE. Con CyberFirewall Lab vas a trazar paquetes regla a regla, romper la configuración para ver qué pasa, escanearla con Nmap, publicar servicios nuevos y resolver los cuatro retos del laboratorio.

⏱ 2-3 sesiones (≈ 4 h)🎓 SMR · ASIR · Certificados IFCT🧰 Solo navegador📤 Entrega: .sh + .json + reflexión

Qué vas a aprender

  • Por qué un paquete va a la cadena INPUT, FORWARD u OUTPUT, y qué pasa cuando ninguna regla coincide.
  • Que en Linux el orden de las reglas importa y en Windows no.
  • Cómo conntrack deja volver las respuestas con una sola regla, y qué pasa si falta.
  • Qué hacen DNAT y MASQUERADE, y por qué el filtrado ve la dirección ya traducida.
  • Leer un escaneo de Nmap (open, closed, filtered, unfiltered, open|filtered) y saber qué regla lo provoca.
  • Exportar las reglas a un script iptables / nftables real.

Cómo usar esta guía

i
Lee la teoría antes de tocar el laboratorio
Las secciones 1 a 5 explican lo necesario. El ejercicio te remitirá a ellas.
i
Trabaja con dos ventanas
Abre el laboratorio con ▶ Abrir el laboratorio y colócalo junto a esta guía.
i
Sigue las fases en orden
Cada fase parte de cómo dejaste las reglas en la anterior: los números de regla (#12, #13…) y las notas de la auditoría de la guía solo coinciden si haces las fases en orden.
ℹ El laboratorio sí guardaTus reglas se guardan en este navegador (localStorage): si cierras la pestaña y vuelves, siguen ahí. Para empezar de cero se usa el botón ↺ Reset, que restaura las reglas de ejemplo de los dos motores.
Antes de empezar
🗺️ Mapa del laboratorio
Pantalla principal de CyberFirewall Lab con la topología, la tabla de reglas y el trazador
Pantalla principal: barra superior, topología con el recorrido por netfilter, tabla de reglas y, a la derecha, el inyector y trazador con su veredicto.

La barra superior

MotorLinux (iptables/nftables) o Windows Defender. Cada motor tiene sus propias reglas.
PolíticasQué pasa si ninguna regla coincide: INPUT, FORWARD y OUTPUT en Linux (DROP o ACCEPT); Perfil, Entrada y Salida en Windows.
Herramientas⚡ Nmap (escáner simulado), 🛡 Auditoría (nota de buenas prácticas), 🎯 Retos, 0 pkts (contadores a cero), ⇩ Exportar, ↺ Reset y Descargar .html (el laboratorio para usar sin conexión).
LógicaUn recuadro que resume cómo decide el motor activo, con los botones Demo «first match» (abre los retos) y Calculadora CIDR.

El centro de la pantalla

TopologíaLas cuatro cajas (WAN, firewall, DMZ y LAN) y el RECORRIDO POR NETFILTER: las etapas por las que pasa el paquete se iluminan al trazarlo.
ReglasLa tabla en el orden en que se evalúan. Por fila: ▲ ▼ para mover, 🟢/⚪ para activar o desactivar, ✎ editar y 🗑 borrar. + Nueva regla abre el formulario, con plantillas arriba.
Inyector y trazadorElige un paquete en Paquetes de ejemplo… o rellena origen, destino, protocolo y flags. ▶ Trazar paquete lo recorre regla a regla; Instantáneo da el resultado de golpe; ⇄ Respuesta prepara el paquete de vuelta.
VeredictoACEPTADO, DESCARTADO o RECHAZADO, la regla que decidió y el apartado Qué ha pasado: interfaz, cadena, estado conntrack, NAT y por qué cada regla coincide (✔) o no (✘).

La parte de abajo

ScriptPestañas iptables, nftables, PowerShell y netsh con tus reglas traducidas, y botón Copiar.
ConsolaPestañas Registros (líneas como las del kernel), conntrack (tabla de conexiones) y NAT (MASQUERADE y port forwarding). En la pestaña conntrack, el botón conntrack -F vacía la tabla.
Teoría — 01
🏰 El firewall y las zonas

Un firewall decide qué tráfico pasa entre redes de distinta confianza.

ZONA NO CONFIABLE
WAN · eth0
Internet. El firewall tiene aquí la IP pública 203.0.113.1. Los atacantes del laboratorio están en 198.51.100.x.
ZONA SEMIEXPUESTA
DMZ · eth2
172.16.0.0/24. Servidores que se publican a Internet: srv-web 172.16.0.10 (TCP 22, 80, 443 y UDP 53).
ZONA DE CONFIANZA
LAN · eth1
192.168.1.0/24. Equipos internos: pc-50 192.168.1.50, un Windows con 135, 445 y 3389.

Por qué existe la DMZ

Los servidores que dan servicio a Internet son los que más ataques reciben. Si uno cae, el atacante no debe poder saltar desde él a la red interna. Por eso se colocan en una red aparte (la DMZ), con una regla de oro: Internet puede llegar a lo publicado en la DMZ, la LAN puede llegar a la DMZ, pero la DMZ no puede abrir conexiones hacia la LAN.

Firewall de red y firewall de host

Firewall de redFirewall de host
ProtegeRedes enteras, desde el punto por donde pasa el tráficoSolo al propio equipo
EjemploUn Linux con iptables/nftables entre WAN, LAN y DMZWindows Defender Firewall, ufw en un servidor
Filtra el tráfico que lo atraviesaSí (cadena FORWARD)No
Las direcciones del laboratorio son de documentación (203.0.113.0/24 y 198.51.100.0/24, RFC 5737) o privadas (RFC 1918). No existen en Internet.
Teoría — 02
⛓️ Cadenas y primera coincidencia

La cadena no se elige: la decide el destino

CadenaPaquetes que recorreEjemplo
INPUTLos que van al propio firewall (a una de sus IP)SSH al firewall, ping al firewall
FORWARDLos que lo atraviesan de una red a otraLa LAN navega, Internet visita la web de la DMZ
OUTPUTLos que genera el firewallEl firewall consulta un DNS

Antes y después del filtrado hay dos etapas de NAT: PREROUTING (al entrar, donde se hace el DNAT) y POSTROUTING (al salir, donde se hace el SNAT o MASQUERADE).

RECORRIDO POR NETFILTER
enrutado:     PREROUTING (DNAT) → Enrutamiento → FORWARD → POSTROUTING (SNAT)
al firewall:  PREROUTING → Enrutamiento → INPUT → proceso local
desde él:     proceso local → OUTPUT → POSTROUTING

Cómo decide una cadena

  1. Mira las reglas de esa cadena de arriba abajo.
  2. La primera que coincide en todos sus campos decide (first match). Las de debajo ya no se miran.
  3. Si ninguna coincide, se aplica la política de la cadena.
AcciónQué hace
ACCEPTDeja pasar.
DROPDescarta en silencio: el que envía no recibe nada.
REJECTDescarta y avisa: por defecto con un ICMP port-unreachable; con --reject-with tcp-reset (solo TCP), con un RST.
Un buen firewall usa política DROP en INPUT y FORWARD (lo que no está permitido, no pasa: lista blanca) y reglas ACCEPT para lo necesario. Una regla que nunca podrá decidir porque otra de arriba la cubre entera se llama sombreada (si la de arriba hace lo contrario) o redundante (si hace lo mismo).

Los campos de una regla

Interfaz de entrada (-i) y de salida (-o), protocolo, IP o red de origen y destino (con CIDR: 192.168.1.0/24), puertos (uno, lista 80,443 o rango 1024-65535) y estado conntrack. Un campo en ANY coincide con todo. Los puertos solo existen en TCP y UDP; en INPUT no hay interfaz de salida y en OUTPUT no hay interfaz de entrada.

Teoría — 03
🔁 conntrack: el estado de cada conexión

Una conexión tiene dos sentidos: la ida (el cliente pide) y la vuelta (el servidor responde). Sin memoria, haría falta una regla para cada sentido, y la de vuelta abriría agujeros. El módulo conntrack apunta cada conexión en una tabla y etiqueta cada paquete con un estado:

EstadoSignifica
NEWAbre una conexión que no estaba en la tabla (un SYN, el primer paquete UDP).
ESTABLISHEDPertenece a una conexión ya vista, en cualquiera de los dos sentidos.
RELATEDRelacionado con una conexión existente (por ejemplo, un error ICMP sobre ella).
INVALIDNo encaja con nada (un SYN+ACK que nadie pidió). Se descarta.

El patrón de todo firewall con estado

  1. Al principio de cada cadena: ESTABLISHED,RELATED → ACCEPT. Una sola regla deja volver todas las respuestas.
  2. Después: INVALID → DROP.
  3. Después: una regla NEW → ACCEPT por cada cosa que se permita abrir.
  4. Política DROP para el resto.
Si falta la regla de vuelta en FORWARD, la ida sale pero la respuesta muere en el firewall: «no funciona nada» aunque las reglas de ida sean correctas. Y si alguien la «arregla» aceptando todo lo que viene de una zona, abre esa zona entera (lo verás en el reto 1).

Una rareza real: tcp_loose

Por defecto, Linux tiene nf_conntrack_tcp_loose=1: un ACK suelto, sin SYN previo, se acepta como NEW para no romper conexiones si el firewall se reinicia. Por eso conviene exigir el flag SYN en las reglas NEW. El laboratorio reproduce este comportamiento.

Teoría — 04
🔀 NAT y Windows Defender

Dos traducciones

MASQUERADE (SNAT)DNAT (port forwarding)
Para quéQue la LAN y la DMZ salgan a Internet con la IP públicaPublicar un servidor interno en la IP pública
Qué cambiaLa IP de origen: 192.168.1.50 → 203.0.113.1La IP (y puerto) de destino: 203.0.113.1:443 → 172.16.0.10:443
DóndePOSTROUTING, al salir por eth0PREROUTING, nada más entrar por eth0
La respuestaconntrack la deshace al volver (de-SNAT)conntrack la deshace al volver (de-DNAT)
Como el DNAT ocurre en PREROUTING, antes de FORWARD, las reglas de filtrado ven el paquete con el destino ya traducido (172.16.0.10), no con la IP pública. Una regla de FORWARD escrita contra 203.0.113.1 nunca coincide (reto 4). Por la misma razón, un DNAT puede publicar un puerto público distinto del interno: 8080 por fuera, 80 por dentro.

Windows Defender Firewall: otra lógica

Linux (iptables / nftables)Windows Defender Firewall
Qué filtraLo que llega, lo que sale y lo que atraviesaSolo lo que llega al equipo o sale de él
OrdenImporta: gana la primera regla que coincideNo importa: bloqueo explícito > permiso explícito > acción predeterminada
Si nada coincidePolítica de la cadenaAcción predeterminada de entrada o salida del perfil
RespuestasHace falta la regla ESTABLISHED,RELATEDEntran solas si la conexión se permitió
RechazarDROP calla; REJECT respondeBloquear siempre descarta en silencio

Windows aplica además perfiles según la red a la que está conectado: Dominio, Privado o Público. Una regla puede valer para todos o solo para uno.

Teoría — 05
📡 Cómo ve Nmap tu firewall

Técnicas de escaneo

OpciónEnvíaSirve para
-sSUn SYN y no completa la conexión (half-open)Saber qué puertos están abiertos
-sTConexión completa con connect()Lo mismo, sin privilegios de root
-sAUn ACK sueltoMapear el firewall: no dice si un puerto está abierto, sino si está filtrado
-sUDatagramas UDPPuertos UDP (DNS, NTP, SNMP…)

Los estados y qué los provoca

EstadoRespuesta (REASON)Causa típica
opensyn-ack / udp-responseUna regla deja pasar y hay un servicio escuchando
closedresetSe llega al equipo pero no escucha nadie, o un REJECT --reject-with tcp-reset
filteredno-response o port-unreachDROP (silencio) o REJECT genérico (ICMP)
unfilteredreset a un -sAEl ACK atraviesa el firewall y alguien responde RST
open|filteredno-response en UDPEn UDP, el silencio puede ser un puerto abierto que no contesta o un DROP
La columna TTL también delata a quien responde. El firewall responde con TTL 64; un servidor de la DMZ, con 63, porque su respuesta atraviesa el firewall y pierde un salto.
Ejercicio — Fase 0 · 5 min
⚙️ Preparar el laboratorio
0.1
Parte de las reglas de ejemplo

Pulsa ▶ Abrir el laboratorio. Comprueba que está activo Linux (iptables/nftables) y pulsa ↺ Reset. El navegador pregunta si quieres restaurar las reglas de ejemplo: Aceptar.

Cabecera: MOTOR: LINUX (NETFILTER) · Gana la primera coincidencia. Políticas: INPUT DROP · FORWARD DROP · OUTPUT ACCEPT. Tabla: 11 REGLAS.
0.2
La nota de partida

Pulsa 🛡 Auditoría.

100/100 · Nota A, con 10 comprobaciones en verde: políticas en DROP, la LAN navega, Internet no llega a la LAN, la DMZ no llega a la LAN, SSH cerrado a Internet, se descartan los INVALID, sin reglas de «permitir todo» y sin reglas sombreadas.

La configuración de ejemplo es correcta. En este ejercicio vas a entender por qué, romperla para ver las consecuencias y ampliarla sin perder el 100.

Ejercicio — Fase 1 · 15 min · Guiado total
🔍 Reconoce el firewall
1.1
Lee la tabla de reglas

Usa el desplegable Todas las cadenas de la tabla para ver solo INPUT, después solo FORWARD. Vuelve a Todas las cadenas.

INPUT: #1 (vuelta), #4 SSH desde la LAN, #5 ping desde la LAN, #6 DNS para la LAN, #7 SSH desde Internet en DROP. FORWARD: #2 (vuelta), #3 INVALID en DROP, #8 la LAN sale a Internet, #9 la LAN usa la web de la DMZ, #10 Internet → web de la DMZ, #11 la DMZ no abre conexiones a la LAN (REJECT).

Compara con el patrón de la teoría 3. ¿Qué reglas son las de vuelta? ¿Por qué hay dos?

Ver respuesta
La #1 y la #2 (ESTABLISHED,RELATED → ACCEPT). Hay una por cadena: la #1 para las respuestas que llegan al firewall (INPUT) y la #2 para las que lo atraviesan (FORWARD). Cada cadena se evalúa por separado.
1.2
Practica el CIDR

Pulsa Calculadora CIDR. Haz estas tres pruebas con Comprobar bit a bit:

Red de la reglaIP a comprobar
192.168.1.0/24192.168.1.45
172.16.0.0/12172.31.5.5
172.16.0.0/12172.32.0.1
1.ª: ✔ La IP pertenece a la red (rango 192.168.1.0 – 192.168.1.255, 256 direcciones). 2.ª: ✔ pertenece. 3.ª: ✘ La IP está fuera de la red: el rango de un /12 es 172.16.0.0 – 172.31.255.255.
El firewall no compara textos: hace IP AND máscara y mira si sale la red. Por eso 172.32.0.1 no es privada aunque «se parezca» a 172.16.
Ejercicio — Fase 2 · 30 min · Guiado total
🧭 Traza paquetes regla a regla
2.1
La LAN visita la web de la DMZ

En INYECTOR Y TRAZADOR, elige LAN → web de la DMZ (SYN) en Paquetes de ejemplo… y pulsa ▶ Trazar paquete. Mira cómo se iluminan las reglas una a una.

ACEPTADO (ACCEPT) · Regla #9 · La LAN usa la web de la DMZ. Ruta: eth1 (LAN) → FORWARD → eth2 (DMZ). conntrack: NEW. Debajo: ✘ #2 … estado NEW no está en ESTABLISHED,RELATED · ✘ #3 … · ✘ #8 La LAN sale a Internet: salida por eth0 y el paquete sale por eth2 · ✔ #9 … coinciden todos los campos → ACCEPT.

¿Por qué no se mira la regla #10 ni la #11?

Ver respuesta
Por la primera coincidencia: la #9 ya decidió. Las reglas de debajo ya no se miran. Y las reglas de INPUT (#1, #4…) no aparecen porque el paquete va por FORWARD.
2.2
La respuesta del servidor

Pulsa ⇄ Respuesta: el formulario se rellena con el paquete de vuelta (de 172.16.0.10:80 a 192.168.1.50:51200, flags SYN+ACK). Pulsa ▶ Trazar paquete.

ACEPTADO · Regla #2 · Vuelta de conexiones ya aceptadas. Ruta: eth2 (DMZ) → FORWARD → eth1 (LAN). conntrack: ESTABLISHED — Respuesta de la conexión #N (vista en los dos sentidos).
No hay ninguna regla «la DMZ puede hablar con la LAN». La respuesta entra porque conntrack la reconoce como parte de una conexión que la LAN abrió.
2.3
La LAN sale a Internet (MASQUERADE)

Traza LAN → web de Internet (sale con MASQUERADE) y después su ⇄ Respuesta.

Ida: ACEPTADO por la regla #8, con POSTROUTING SNAT: 192.168.1.50:51320 → 203.0.113.1:51320. Respuesta: el formulario trae destino 203.0.113.1:51320; el trazado da ACEPTADO por la regla #2 y PREROUTING de-SNAT: 203.0.113.1:51320 → 192.168.1.50:51320.

¿Por qué la respuesta de Internet va dirigida a 203.0.113.1 y no a 192.168.1.50?

Ver respuesta
Porque el servidor de Internet nunca vio la IP privada: el MASQUERADE cambió el origen por la IP pública. Al volver, conntrack consulta su tabla y deshace la traducción para entregarla al PC.
2.4
Internet visita la web publicada (DNAT)

Traza Internet → 203.0.113.1:443 (DNAT a la DMZ) y su respuesta.

Ida: PREROUTING DNAT: 203.0.113.1:443 → 172.16.0.10:443, ruta eth0 (WAN) → FORWARD → eth2 (DMZ), ACEPTADO por la regla #10. Respuesta: ACEPTADO por la #2, con POSTROUTING de-DNAT: 172.16.0.10:443 → 203.0.113.1:443.

El paquete iba a la IP del firewall (203.0.113.1). ¿Por qué recorre FORWARD y no INPUT?

Ver respuesta
Porque el DNAT en PREROUTING cambia el destino a 172.16.0.10 antes de la decisión de enrutamiento. Cuando el kernel decide la cadena, el paquete ya no va al firewall, sino a la DMZ.
2.5
Tres formas de no pasar

Traza estos tres paquetes de ejemplo y apunta quién decide:

Paquete de ejemploVeredicto
Internet → SSH del firewallDESCARTADO (DROP) · Regla #7 (cadena INPUT)
Internet → RDP de un PC de la LANDESCARTADO (DROP) · Política de FORWARD: DROP
DMZ comprometida → SMB de la LANRECHAZADO (REJECT) · Regla #11 · responde con ICMP port-unreachable

El RDP desde Internet no tiene ninguna regla de bloqueo. ¿Por qué no pasa?

Ver respuesta
Porque nada lo permite: ninguna regla de FORWARD coincide y se aplica la política DROP. Es la lista blanca de la teoría 2: no hace falta prohibir cada cosa.
2.6
Paquetes raros

Traza los tres últimos de la lista:

Paquete de ejemploVeredicto
ACK suelto desde Internet (sondeo -sA)DESCARTADO · Regla #7. conntrack: NEW, con la explicación de nf_conntrack_tcp_loose=1
SYN+ACK sin conexión previa (INVALID)DESCARTADO · Regla #3. conntrack: INVALID
IP de la LAN entrando por la WAN (spoofing)DESCARTADO · Política de FORWARD: DROP

El paquete falsificado lleva origen 192.168.1.50 y entra por eth0. ¿Por qué no lo acepta la regla #9 («La LAN usa la web de la DMZ»)?

Ver respuesta
Porque la #9 exige entrada por eth1. Poner la interfaz en las reglas, y no solo la IP, impide que un atacante de Internet se haga pasar por un equipo interno.
2.7
La tabla de conexiones

Abajo, abre la pestaña conntrack y después NAT. Mira también Registros y la columna TRÁFICO de la tabla de reglas.

conntrack: una fila por conexión, con su estado (ASSURED las que tuvieron respuesta, UNREPLIED las que no), el sentido original y la respuesta esperada, marcada [SNAT] o [DNAT]. NAT: las traducciones activas, como DNAT 198.51.100.25:50500 ➔ 203.0.113.1:443 ➔ 172.16.0.10:443. Registros: líneas del kernel como [CFW r10 ACCEPT] IN=eth0 OUT=eth2 … PROTO=TCP … DPT=443 … SYN.

Pulsa conntrack -F para vaciar la tabla antes de seguir.

⚠ Vacía conntrack antes de cada experimentoSi repites un paquete que ya está en la tabla, conntrack lo verá como ESTABLISHED, no como NEW, y el resultado cambia. En la fase siguiente vacía la tabla antes de cada prueba.
Ejercicio — Fase 3 · 20 min · Guiado
🔨 Rompe el firewall y observa
3.1
Quita la regla de vuelta

Con la tabla conntrack vacía, pulsa el 🟢 de la regla #2 (FORWARD, vuelta): pasa a ⚪ (desactivada). Traza LAN → web de Internet y después su ⇄ Respuesta. Abre la 🛡 Auditoría.

Ida: ACEPTADO por la #8. Respuesta: DESCARTADO (DROP) · Política de FORWARD: DROP, aunque conntrack la marca ESTABLISHED. Auditoría: 88/100 · Nota B, con ✘ La LAN navega y recibe las respuestas — La petición sale pero la respuesta se descarta: falta la regla ESTABLISHED,RELATED en FORWARD.

Vuelve a activar la #2 (⚪ → 🟢) y vacía conntrack.

Auditoría: 100/100 · Nota A.

Un usuario dice: «tengo Internet a medias: el navegador conecta pero nunca carga nada». ¿Qué regla revisarías primero?

Ver respuesta
La de vuelta (ESTABLISHED,RELATED) en FORWARD: que exista y que esté por encima de cualquier DROP. Conntrack sabe que es una respuesta, pero alguna regla tiene que aceptarla.
3.2
Cambia la política de FORWARD

En la barra superior, cambia FORWARD a ACCEPT. Traza Internet → RDP de un PC de la LAN y abre la Auditoría.

Trazado: ACEPTADO (ACCEPT) · Política FORWARD (ACCEPT), con la explicación Ninguna regla de FORWARD coincide → se aplica la política por defecto de la cadena: ACCEPT. Auditoría: 67/100 · Nota C, con tres fallos: Política de FORWARD en DROP, Internet no puede abrir conexiones hacia la LAN y SSH de los servidores de la DMZ no expuesto.

Vuelve a poner FORWARD en DROP y vacía conntrack.

Auditoría: 100/100 · Nota A.
Con política ACCEPT el firewall pasa de lista blanca a lista negra: todo lo que no hayas prohibido expresamente pasa. Bastan una regla olvidada o un servicio nuevo para quedar expuesto.
Ejercicio — Fase 4 · 25 min · Guiado
📡 Escanea tu firewall con Nmap
Nmap simulado contra la IP pública del firewall con la explicación de cada puerto
El Nmap simulado: el comando, la tabla de puertos con su REASON y, debajo, POR QUÉ CADA RESULTADO.
4.1
El escaneo de un atacante

Pulsa ⚡ Nmap. Objetivo 203.0.113.1 · IP pública del firewall, técnica -sS · SYN (half-open), desde Internet (198.51.100.99). Pulsa Ejecutar escaneo.

Comando sudo nmap -Pn -sS --reason -p 21,22,23,53,80,135,443,445,3389,8080 203.0.113.1. 80/tcp open y 443/tcp open con syn-ack ttl 63; los otros 8 puertos, filtered con no-response. En POR QUÉ CADA RESULTADO: el 22, DROP en la regla #7; el resto, política DROP de INPUT.

El escaneo va a la IP del firewall, pero 80 y 443 responden con TTL 63. ¿Quién está respondiendo?

Ver respuesta
El servidor web de la DMZ (172.16.0.10), gracias al DNAT. Responde con TTL 64 y al atravesar el firewall pierde un salto: 63 (teoría 5).
4.2
DROP frente a REJECT con RST

Pulsa + Nueva regla y, arriba del formulario, la plantilla Rechazar con RST. Rellena: Rechazar TCP 8080 con RST, cadena INPUT, acción REJECT, TCP, entra por eth0 · WAN, puerto de destino 8080. Pulsa Guardar regla y repite el escaneo.

La tabla tiene 12 REGLAS. Nmap: 8080/tcp closed con reset ttl 64 — REJECT --reject-with tcp-reset (regla #12): el firewall finge que el puerto está cerrado.

¿Por qué ahora el TTL es 64?

Ver respuesta
Porque el RST lo genera el propio firewall, no un equipo que esté detrás de él.
4.3
REJECT genérico

Escanea 192.168.1.50 · pc-50 (LAN) con -sS desde DMZ (172.16.0.66): es lo que haría un atacante que ha tomado el servidor web.

Los 10 puertos filtered con port-unreach ttl 64: REJECT (regla #11) devuelve ICMP port-unreachable: con TCP Nmap lo interpreta como filtrado.
Tres maneras de decir «no»: DROP calla (filtered, no-response); REJECT genérico avisa con ICMP (filtered, port-unreach); REJECT con tcp-reset imita un puerto cerrado (closed, reset).
4.4
Mapear el firewall con -sA

Vuelve a escanear 203.0.113.1 desde Internet, ahora con -sA · ACK (mapear reglas).

80, 443 y 8080 unfiltered (reset); el resto, filtered. Para el 80 y el 443: El ACK atraviesa el firewall (como NEW por tcp_loose) y el equipo responde RST.

Con -sA el 8080 aparece igual que el 80 y el 443. ¿Qué información pierde el atacante y cuál gana?

Ver respuesta
-sA no distingue abierto de cerrado: solo dice si algo responde (unfiltered) o si hay un firewall que calla (filtered). Sirve para dibujar qué puertos filtra el firewall, no qué servicios hay.
4.5
UDP

Escanea 203.0.113.1 desde Internet con -sU · UDP.

Puertos 53, 67, 123, 137 y 161: todos open|filtered con no-response — Nmap no recibe nada y no puede distinguir abierto de filtrado.
Ejercicio — Fase 5 · 30 min · Semiguiado
🚀 Publica servicios nuevos

A partir de aquí la guía te dice qué conseguir y dónde, pero ya no cada clic.

5.1
La web también por el 8080

Publica la web de la DMZ también en el puerto público 8080: en la pestaña NAT de abajo, añade un port forwarding TCP 8080 ➔ 172.16.0.10 : 80 (botón Añadir). No toques las reglas de filtrado. Escanea otra vez 203.0.113.1 desde Internet con -sS.

La tabla de port forwarding tiene tres filas (80, 443 y 203.0.113.1:8080 → 172.16.0.10:80). Nmap: 8080/tcp open con syn-ack ttl 63.

Dos preguntas. ¿Qué regla de FORWARD deja pasar el 8080, si no has creado ninguna? ¿Y por qué la regla #12 (REJECT del 8080) ya no actúa?

Pista
Traza un SYN de 198.51.100.25:50700 a 203.0.113.1:8080 y lee las líneas de NAT y de la cadena.
Ver solución
El trazado muestra PREROUTING DNAT: 203.0.113.1:8080 → 172.16.0.10:80 y lo acepta la regla #10, que permite el puerto 80: el filtrado ve el puerto ya traducido. Y la #12 está en INPUT; tras el DNAT, el paquete ya no va al firewall sino a la DMZ, así que recorre FORWARD.
5.2
Publica el DNS de la DMZ

El servidor de la DMZ también es DNS (UDP 53). Publícalo en la IP pública y compruébalo con -sU desde Internet. Hazlo en dos pasos y escanea después de cada uno.

  1. Port forwarding UDP 53 ➔ 172.16.0.10 : 53.
  2. Una regla de filtrado que lo permita. En el formulario, prueba primero a dejar el protocolo en Cualquiera con puerto de destino 53.
Tras el paso 1: 53/udp open|filtered — política DROP de FORWARD. Con el protocolo en Cualquiera, el formulario no guarda: Puerto destino: los puertos solo existen en TCP y UDP (elige el protocolo).
Pista
Fíjate en la regla #10: cadena FORWARD, entra por eth0, sale por eth2, destino 172.16.0.10, estado NEW. Lo mismo, pero en UDP y puerto 53.
Ver solución
Nombre Internet → DNS de la DMZ (tras el DNAT), cadena FORWARD, ACCEPT, UDP, entra por eth0 · WAN, sale por eth2 · DMZ, estado NEW, destino 172.16.0.10, puerto de destino 53.
Con la regla (#13, 13 REGLAS): 53/udp open con udp-response ttl 63. Auditoría: 100/100.
5.3
Una regla que nunca se aplica

Crea esta regla: Bloquear HTTPS de la DMZ desde Internet, FORWARD, DROP, TCP, entra por eth0, sale por eth2, NEW, destino 172.16.0.10, puerto 443. Queda la última de la tabla.

La regla #14 lleva la etiqueta SOMBREADA por #10 (pasa el ratón por encima para leer por qué). Auditoría: 96/100 · Nota A, con aviso en Sin reglas sombreadas ni redundantes.

Súbela con ▲ hasta que quede justo encima de la #10 (son 4 pulsaciones) y escanea 203.0.113.1 con -sS desde Internet.

La etiqueta desaparece. Nmap: 80/tcp open y 443/tcp filtered — DROP en la regla #14.

Bórrala con 🗑.

13 REGLAS y auditoría 100/100.

Abajo, la #14 no hacía nada; arriba, cambió el resultado. ¿Por qué la #10 no se marcó como sombreada cuando la #14 estaba encima?

Ver respuesta
Porque la #14 solo cubre el 443 y la #10 permite 80 y 443: la #10 sigue decidiendo el puerto 80. Una regla es sombreada solo si otra anterior la cubre entera.
5.4
Exporta tu firewall

Mira la pestaña iptables del panel de script y después nftables.

iptables: iptables -A INPUT -i eth0 -p tcp --dport 8080 … -j REJECT --reject-with tcp-reset, iptables -A FORWARD -i eth0 -o eth2 -p udp -d 172.16.0.10 --dport 53 … -j ACCEPT y, en la sección NAT, -j DNAT --to-destination 172.16.0.10:80 (8080) y 172.16.0.10:53 (UDP). nftables: policy drop en input y forward, reject with tcp reset y dnat to 172.16.0.10:80.

Pulsa ⇩ Exportar y descarga iptables .sh y Copia de seguridad .json: se guardan cyberfirewall-iptables.sh y cyberfirewall-config.json. Son parte de la entrega, y el .json lo necesitarás en la fase 8.

✖ No lo apliques en un equipo de verdad sin revisarloEl script empieza vaciando todas las reglas (iptables -F) y pone la política en DROP. En una máquina remota te dejaría sin acceso si las interfaces no se llaman igual.
Ejercicio — Fase 6 · 30 min · Con pistas
🧩 Los retos de Linux
Ventana de retos guiados con el resultado de una comprobación
Los retos: cada uno carga una configuración rota y «Comprobar» lanza conexiones completas de ida y vuelta.
⚠ Cargar un reto sustituye tus reglasPor eso exportaste el .json en el paso 5.4. Si no lo hiciste, hazlo ahora (⇩ Exportar → Copia de seguridad .json).
6.1
Reto 2 · La trampa del orden

Pulsa 🎯 Retos y, en el RETO 2, Cargar reto. Lee las tres reglas y pulsa Comprobar (vuelve a abrir Retos).

La regla #3 está marcada SOMBREADA por #2. Comprobar: ✘ Todavía no · ✘ Internet → 203.0.113.1:80 llega a la web — Descartado en FORWARD (regla #2).

Arréglalo solo reordenando (sin borrar ni desactivar) y comprueba.

Pista
En Linux gana la primera regla que coincide. ¿Qué regla debe ir antes del bloqueo general?
Ver solución
Pulsa ▲ en la regla #3: el orden queda #1, #3, #2. Comprobar: ✔ ¡Reto superado! (Conecta (ida: regla #3; vuelta aceptada) y el SSH de la DMZ sigue Descartado en FORWARD (regla #2)).
6.2
Reto 4 · DNAT: filtra la dirección traducida

Carga el RETO 4 y comprueba. Después vacía conntrack y traza un SYN de 198.51.100.25:50900 a 203.0.113.1:443.

Comprobar: ✘ Internet → 203.0.113.1:443 llega a la web — Descartado en FORWARD (política DROP). Trazado: PREROUTING DNAT: 203.0.113.1:443 → 172.16.0.10:443 y ✘ #2 HTTPS publicado: destino 172.16.0.10 fuera de 203.0.113.1.
Pista
Repasa el paso 2.4 y la teoría 4. Edita la regla con ✎: solo hay que cambiar un campo.
Ver solución
En la regla #2 cambia la IP o red de destino de 203.0.113.1 a 172.16.0.10 y guarda. Comprobar: ✔ ¡Reto superado!, y Internet sigue sin llegar al SSH de la DMZ ni a la LAN.
6.3
Reto 1 · Aislar la DMZ

Carga el RETO 1 y comprueba.

✔ LAN → web DMZ (443) con respuesta, pero ✘ DMZ → LAN SMB (445) bloqueado — La ida pasa (regla #2) pero la respuesta se descarta en FORWARD, y lo mismo con RDP (3389).

La respuesta del PC no vuelve. ¿Significa eso que el ataque ha fallado?

Ver respuesta
No. El SYN del atacante ya ha llegado al PC de la LAN: el firewall lo dejó pasar. Que no vuelva la respuesta es casualidad de esta configuración, no una protección. Por eso el reto lo cuenta como fallo.

Prueba a desactivar la regla #2 y comprueba otra vez.

Ahora fallan al revés: los ataques desde la DMZ se bloquean, pero ✘ LAN → web DMZ (443) con respuesta — La ida pasa (regla #1) pero la respuesta se descarta en FORWARD.
Pista
Las respuestas no necesitan una regla por zona. ¿Qué plantilla del formulario de nueva regla resuelve las vueltas de todas las conexiones?
Ver solución
Borra la #2 y crea una regla con la plantilla Respuestas (ESTABLISHED,RELATED) (FORWARD, estado ESTABLISHED,RELATED, ACCEPT). Comprobar: ✔ ¡Reto superado!: la LAN usa la web y la DMZ queda Descartado en FORWARD (política DROP) hacia la LAN.
Ejercicio — Fase 7 · 25 min · Semiguiado
🪟 Windows Defender Firewall
Modo Windows Defender Firewall con SMB bloqueado desde Internet
Modo Windows: perfil, acciones predeterminadas, reglas de entrada y salida, y una conexión SMB bloqueada.
7.1
Cambia de motor

Pulsa Windows Defender. Los retos de Linux no han tocado sus reglas.

Cabecera: WINDOWS DEFENDER FIREWALL · El bloqueo explícito gana. Perfil Público, Entrada Bloquear, Salida Permitir. 5 REGLAS: HTTPS (permitir), RDP solo desde la LAN (perfil Private), bloquear SMB, ping desde la LAN y bloquear Telnet saliente. Auditoría: 100/100.
7.2
Recorre los paquetes de ejemplo

Traza los ocho paquetes de ejemplo de Windows.

PaqueteVeredicto
Internet → HTTPS del servidorPERMITIDO · Regla #1
Internet → SMB (445)BLOQUEADO · Regla #3
Internet → RDP (3389)BLOQUEADO · Acción predeterminada
LAN → RDP (3389)BLOQUEADO · Acción predeterminada
Ping desde la LANPERMITIDO · Regla #4
El servidor abre Telnet hacia fueraBLOQUEADO · Regla #5
El servidor navega (HTTPS saliente)PERMITIDO · acción de salida
Tráfico que solo atraviesa el equipoNO LO EVALÚA

La regla #2 permite RDP desde la LAN. ¿Por qué se bloquea «LAN → RDP»? ¿Y por qué no evalúa el último paquete?

Pista
Traza otra vez «LAN → RDP (3389)» y lee la línea de la regla #2. Después cambia el Perfil de la barra superior.
Ver solución
La #2 dice solo se aplica al perfil Private (activo: Public). Con el perfil en Privado, «LAN → RDP» pasa a PERMITIDO · Regla #2, y desde Internet sigue bloqueado porque el origen no está en 192.168.1.0/24. El último paquete va de la LAN a la DMZ: Windows es un firewall de host y no filtra lo que solo lo atraviesa. Deja el perfil en Público.
7.3
El orden no importa, el bloqueo sí

Traza Internet → HTTPS del servidor y su ⇄ Respuesta. Después crea un permiso: SMB para la LAN, Entrada, permitir, TCP, origen 192.168.1.0/24, puerto de destino 445, perfil Todos. Traza un SYN de 192.168.1.50:50510 a 192.168.1.1:445 y abre la Auditoría.

Respuesta HTTPS: PERMITIDO · Respuesta de una conexión ya permitida, sin ninguna regla de vuelta. La regla nueva (#6) aparece como ANULADA por #3. Trazado SMB: BLOQUEADO · Regla #3. Auditoría: 93/100.

Borra la regla #6.

5 REGLAS y auditoría 100/100.

En Linux, ¿qué habría pasado si pones ese permiso encima del bloqueo?

Ver respuesta
En Linux, ganaría el permiso porque está antes (first match). En Windows la posición no cuenta: un bloqueo que coincide gana siempre. Para un permiso parcial hay que acotar el bloqueo (por ejemplo, bloquear SMB solo desde fuera de la LAN), no añadir un permiso.
7.4
Reto 3 · Windows: el bloqueo siempre gana

Carga el RETO 3 y comprueba.

La regla #1 (permiso para 198.51.100.10) aparece ANULADA por #2. Comprobar: ✘ Administración 198.51.100.10 → RDP permitido — Descartado en INPUT (regla #2).
Pista
¿Hace falta la regla #2 si la acción predeterminada de entrada ya es «Bloquear»?
Ver solución
Borra la regla #2. Comprobar: ✔ ¡Reto superado!: el administrador Conecta (ida: regla #1; vuelta aceptada) y el atacante 198.51.100.99 queda Descartado en INPUT (política DROP).
Ejercicio — Fase 8 · 10 min · Autónomo
💾 Restaura tu firewall
8.1
Recupera tu configuración

Los retos han sustituido tus reglas. Recupéralas con el archivo cyberfirewall-config.json de la fase 5.

Pista
⇩ Exportar → Restaurar desde un .json.
✔ Configuración restaurada. Motor Linux con 13 REGLAS, port forwarding con cuatro filas (TCP 80, 443, 8080 → :80 y UDP 53) y auditoría 100/100 · Nota A. En Windows vuelven a estar las 5 REGLAS de ejemplo.
8.2
Prueba final sin guía

Sin mirar la guía, predice el resultado de estos tres paquetes y después trázalos (vacía conntrack antes):

  1. TCP SYN de 198.51.100.40:51000 a 203.0.113.1:8080.
  2. UDP de 198.51.100.40:52000 a 203.0.113.1:53.
  3. TCP SYN de 172.16.0.10:39000 a 192.168.1.50:3389.
Ver solución
1: ACEPTADO por la #10, tras el DNAT a 172.16.0.10:80. 2: ACEPTADO por la #13, tras el DNAT a 172.16.0.10:53. 3: RECHAZADO por la #11 (la DMZ no abre conexiones a la LAN).
Para terminar
📤 Entrega y autoevaluación

Qué entregas

  1. cyberfirewall-iptables.sh y cyberfirewall-config.json de la fase 5.
  2. Las respuestas a estas preguntas, con tus propias palabras:
📝 Preguntas de reflexión
  1. Explica por qué un paquete dirigido a la IP pública del firewall puede acabar en la cadena FORWARD y no en INPUT.
  2. Tu firewall tiene la regla de vuelta en INPUT pero no en FORWARD. ¿Qué funciona y qué no? Usa lo que viste en la fase 3.
  3. Un compañero quiere bloquear el puerto 8080 desde Internet y se debate entre DROP, REJECT y REJECT con tcp-reset. Explica qué vería un atacante con Nmap en cada caso y cuál elegirías.
  4. En el reto 1, el ataque de la DMZ a la LAN «no recibía respuesta». Explica por qué eso no es seguridad.
  5. Explica con el reto 3 por qué en Windows no basta con añadir un permiso encima de un bloqueo, y cómo resolverías «RDP solo para una IP».

Autoevaluación

Marca lo que eres capaz de hacer sin mirar la guía:

✓
Decir por qué cadena pasa un paquete y qué ocurre si ninguna regla coincide.
✓
Explicar la primera coincidencia y detectar una regla sombreada.
✓
Explicar los estados de conntrack y por qué basta una regla ESTABLISHED,RELATED.
✓
Publicar un servicio con DNAT y la regla FORWARD correcta (con la IP traducida).
✓
Leer un escaneo de Nmap y relacionar cada estado con DROP, REJECT o ACCEPT.
✓
Explicar las diferencias entre iptables y Windows Defender Firewall.

Tu progreso en esta guía

—

Referencia
📖 Glosario
TérminoSignificado
ACCEPT / DROP / REJECTDejar pasar, descartar en silencio, descartar avisando.
CadenaLista de reglas que se evalúa en un punto del recorrido: INPUT, FORWARD u OUTPUT.
CIDRNotación de red con prefijo: 192.168.1.0/24.
conntrackSeguimiento de conexiones del kernel Linux: da a cada paquete su estado.
DMZRed separada para los servidores publicados a Internet.
DNATTraducción de la dirección de destino; publica un servicio interno (port forwarding).
ESTABLISHED / RELATEDPaquete de una conexión ya vista / relacionado con ella.
First matchEn iptables decide la primera regla que coincide.
INVALIDPaquete que conntrack no puede asociar a ninguna conexión.
MASQUERADESNAT automático con la IP de la interfaz de salida.
NEWPaquete que abre una conexión nueva.
nftablesSucesor de iptables en Linux, con la misma base (netfilter).
Perfil (Windows)Dominio, Privado o Público: conjunto de reglas según la red conectada.
PolíticaAcción de una cadena cuando ninguna regla coincide.
PREROUTING / POSTROUTINGEtapas de NAT al entrar (DNAT) y al salir (SNAT).
Regla sombreadaRegla que nunca decide porque otra anterior la cubre entera con otra acción.
RSTFlag TCP que rechaza una conexión; Nmap lo lee como puerto cerrado.
tcp_looseOpción de conntrack que acepta un ACK suelto como NEW.
TTLContador de saltos de IP; delata cuántos routers ha cruzado una respuesta.