InfraGuard

Cortafuegos (superficie de ataque)

Un mapa de exposición que contrasta las reglas de cortafuegos de cada host con los servicios registrados y colorea cada puerto abierto según su riesgo.

Resumen — qué hace

Seguridad ▸ Cortafuegos (/security/firewall) dibuja todos los puertos que el parque de servidores deja abiertos en un único mapa de exposición. Colorea cada puerto abierto según su riesgo (crit / warn / ok / unknown) y distingue si se trata de un servicio registrado (managed) o de una apertura inesperada (unmanaged), de modo que se vea de inmediato «qué es visible desde fuera y por qué».

Combina tres fuentes:

infr_instance_firewall   (per-instance firewall rules = open ports/services)
        ×  infr_instance  (host meta — public IP · criticality · env · status)
        ×  infr_service   (registered logical services — instance_id · port)
        →  classified by FirewallLore →  exposure map

Límite de responsabilidad: esta página observa la apertura y exposición física de los puertos (superficie de ataque). La accesibilidad lógica de los servicios (comprobaciones de estado) corresponde a Servicio ▸ Catálogo. El mismo puerto se mira con un enfoque distinto en cada sitio.

Cuándo usarla

Disposición

Cabecera (HERO)

Título/subtítulo (Ports your fleet leaves open — attack-surface exposure map), marca de tiempo de la última recopilación, conmutador LIVE / PAUSED (sondeo de 30 s activado o desactivado) y botón de pantalla completa.

Estado vacío

Si no hay ninguna regla de cortafuegos, aparece un panel de incorporación: el botón Go to Instances lleva a /asset/instances. Importa un resultado de firewall-cmd desde Instancias ▸ [fw], o recopila los puertos abiertos mediante emulación remota, y el mapa se completará.

Franja de KPI (5 tarjetas)

KPI Etiqueta Definición Se calcula como
ports Puertos abiertos Total de filas de puertos abiertos en todos los hosts recuento de reglas clasificadas
hosts Hosts expuestos Máquinas que abren al menos un puerto instance_id distintos
crit Exposición peligrosa Puertos clasificados como crit risk == 'crit'
unmanaged Exposición sin gestionar Puertos que NO son un servicio registrado Y cuyo riesgo no es ok !managed && risk != 'ok'
public_crit Pública · crit Puertos crit abiertos en un host que tiene IP pública crit && public

Pública · crit es un doble recuento deliberado. Un puerto crit en una IP pública ya aparece en Risky exposure y (si no es un servicio registrado) también en Unmanaged exposure; pero como esa intersección (public × crit) es la peor exposición de todo el parque, se muestra otra vez como KPI propio para que nada se escape. Si esta tarjeta no está a cero, corrígela primero.

Franja de riesgo de exposición

Una barra apilada de cuatro colores (crit·warn·ok·unknown) muestra la composición del riesgo. La leyenda inferior es un filtro por clic: pulsa un nivel de riesgo para conservar solo ese nivel (púlsalo de nuevo para quitarlo). Junto a la franja, coverage (p. ej. 7 / 12 hosts collected) es el número de hosts que tienen reglas de cortafuegos frente al total de instancias.

Barra de herramientas · filtros

Vista por puerto

Una cuadrícula de tarjetas de puerto. Cada tarjeta muestra puerto/protocolo · etiqueta de servicio · distintivo de riesgo, las fichas de host que abren ese puerto (hasta 8 + +N) y un pie con número de hosts · número de exposiciones públicas · categoría. Al pulsar una tarjeta se abre el modal de detalle del puerto y explicación del riesgo. Ordenado por riesgo → número de hosts → número de puerto.

Vista por host

Una cuadrícula de tarjetas de host. Cada tarjeta muestra nombre de host · alias · env · criticidad, un distintivo de pública, las fichas de puerto que abre esa máquina (coloreadas por riesgo, con marca check-decagram si es un servicio registrado) y un pie con los recuentos por riesgo · número total de puertos. Al pulsar una ficha de puerto se abre el mismo modal de detalle. Ordenado por número de crit → número de warn → número de puertos.

Modal de detalle del puerto y explicación del riesgo

Puerto/protocolo · nombre del servicio · distintivo de riesgo · categoría, más la explicación de fwlore en tres partes:

Debajo, la lista de hosts que abren este puerto (env · criticidad · zona · pública/interna · distintivos gestionado/sin gestionar) y un enlace Manage in Instances ▸ [fw].

Cómo usarla

  1. Si LIVE está activo, la página se refresca cada 30 segundos. Si los valores en movimiento distraen durante una investigación, cambia a PAUSED.
  2. Comprueba primero el KPI Pública · crit: si no está a cero, pulsa crit en la leyenda de riesgo para acotar la vista por puerto y aborda antes los hosts que llevan la ficha de pública (icono de globo).
  3. Usa Solo sin gestionar para aislar las «aperturas inesperadas». Si aparecen aquí una base de datos (3306/5432/27017), una caché (6379/11211), Docker (2375) o una administración remota (23/3389/VNC) que no es un servicio registrado, acótalas de inmediato.
  4. Pulsa una tarjeta de puerto, lee why/best en el modal de explicación y sigue después Manage in Instances ▸ [fw] para endurecer la regla o registrarla como servicio.
  5. Cerrar realmente un puerto o editar una regla no se hace aquí, sino en el cortafuegos del host de destino y en Instancias ▸ [fw]. Esta página es un mapa y una herramienta de auditoría.

Reglas de clasificación de riesgo (FirewallLore)

Una cadena de puerto puede ser un valor único (8080) o un rango (6081-6100). Un rango se contrasta con el mapa de puertos conocidos por su puerto inicial.

risk rank significado ejemplos
crit 3 Peligro inmediato si se expone: almacén de datos · administración remota · comparticiones de archivos · contenedores MySQL 3306, Redis 6379, RDP 3389, SMB 445, Docker 2375, k8s-api 6443
warn 2 Vigilar: gestión · heredado · no estándar SSH 22, SMTP 25, 8080/8443, SNMP 161, Grafana 3000
ok 1 Servicio público estándar HTTP 80, HTTPS 443, DNS 53, NTP 123, WireGuard 51820
unknown 0 Sin mapear: requiere revisión puertos/rangos que no están en el catálogo

Determinación de gestionado

El mapa de servicios registrados se indexa por infr_service.instance_id : port. Si la instancia tiene un servicio registrado en ese puerto, la regla está gestionada (marca check-decagram, managed_name). Los puertos de rango coinciden por su puerto inicial (low). Sin un servicio registrado la regla queda sin gestionar y, si su riesgo no es ok, entra en el KPI Unmanaged exposure.

Fuentes de datos

Tabla / fuente Función Alimentada por
infr_instance_firewall Reglas de puertos/servicios abiertos por instancia (registro) Activos ▸ Instancias ▸ [fw]: CRUD manual / importación de texto en bruto de firewall-cmd --list-all / importación JSON de scripts/infr_firewall_probe.cjs
infr_instance Metadatos del host: name · alias · env · criticality · status · ip_public Activos ▸ Instancias
infr_service Servicios lógicos registrados (instance_id · port · name · kind) → comprobación de gestionado Servicio ▸ Catálogo
App\Support\FirewallLore Fuente canónica de la clasificación puerto → {key,label,category,risk,icon} (independiente del idioma) código
resources/lang/{ko,en}/fwlore.php Explicaciones what/why/best por nivel de riesgo y por categoría paquete de idioma

Forma de la regla de infr_instance_firewall (UNIQUE instance_id, zone, proto, port):

{
  "zone": "public",
  "ports": [
    { "port": "22",         "proto": "tcp", "service": "ssh" },
    { "port": "443",        "proto": "tcp", "service": "https" },
    { "port": "3306",       "proto": "tcp", "service": "mysql" },
    { "port": "6081-6100",  "proto": "tcp", "service": "" }
  ]
}

El importador de [fw] también analiza el texto en bruto de firewall-cmd --list-all (cabecera de zona → correspondencia de services: → ports: directamente):

public (active)
  services: http https ssh
  ports: 8080/tcp 6081-6100/tcp 3306/tcp

El panel construido se almacena en caché en el servidor durante 30 segundos (infr:sec:firewall:dashboard). Si no hay ninguna regla, devuelve una carga vacía (empty=true) que renderiza el estado de incorporación.

Acceso

Resolución de problemas y preguntas frecuentes

Solo veo la pantalla vacía («Todavía no hay datos de cortafuegos»). Significa que infr_instance_firewall no tiene ninguna regla. Pega un resultado de firewall-cmd --list-all en Activos ▸ Instancias ▸ [fw] para importarlo, o recopila los puertos abiertos mediante emulación remota.

Un puerto aparece como Unknown service. El puerto no está en el catálogo de FirewallLore (riesgo unknown). Si es un servicio legítimo, regístralo en Servicio ▸ Catálogo o añade una etiqueta en service/note de la regla [fw]. Si no hace falta, ciérralo.

Es un servicio registrado, pero aparece como unmanaged. La comprobación de gestionado exige un infr_service en la misma instancia y en ese puerto. Si el servicio está en otro host o en otro puerto, no coincidirá. Los puertos de rango solo coinciden por su puerto inicial.

Risky exposure no está a cero, pero Public · crit es 0. Significa que todos los hosts con puertos crit abiertos son solo internos (sin ip_public): un radio de exposición pequeño y, por tanto, relativamente más seguro. Aun así, acótalos igualmente por las amenazas internas y el movimiento lateral.

Los valores no son en tiempo real. Puede que LIVE esté en PAUSED o que la pestaña esté en segundo plano. El panel se almacena en caché 30 segundos en el servidor, así que hasta 30 segundos después de cambiar una regla en [fw] es posible que sigas viendo los valores antiguos.

¿Puedo cerrar un puerto desde aquí? No. Esta página es un mapa de solo lectura. El bloqueo real se hace en el cortafuegos del host de destino, y las actualizaciones del registro de reglas, en Instancias ▸ [fw].

Relacionado

방화벽 — 오픈 포트 노출 지도
방화벽 — 오픈 포트 노출 지도