InfraGuard

Conexiones de puerto (PORT OVERVIEW)

Pantalla insignia de monitorización de puertos: tarjetas por puerto con la distribución de estados TCP por servidor, las principales IP de origen y el número de orígenes, en vivo.

Resumen: qué hace

Conexiones de puerto es la pantalla insignia de Infraestructura ▸ Conectividad y tráfico: el PORT OVERVIEW. Dibuja una tarjeta por cada puerto monitorizado (por ejemplo 80, 443, 22, 3306 …) definido en la Política de operaciones y, dentro de cada tarjeta, descompone por servidor las sesiones TCP asociadas a ese puerto en una barra apilada al 100 % por estado. El objetivo: ver de un vistazo «quién está conectado ahora mismo a este puerto, cuántas sesiones y en qué estado».

El origen es la base de datos de tráfico heredada (conexión legacy_glory), tabla traffic_session_ct, que alimenta periódicamente el recolector check_ct.js. Aquí la aplicación es de solo lectura: esta pantalla no escribe nada.

Cada mosaico de servidor muestra:

Cuándo usarla

Disposición

Controles superiores

Elemento Comportamiento
Temporizador 1 min / 5 min / 1 hora Ancho de la ventana de agregación de sesiones. La elección se guarda en localStorage (infr:timer:traffic-ports) y se conserva entre visitas.
Fichas de puerto La lista de puertos monitorizados (Política de operaciones). Al hacer clic en una ficha se muestra u oculta su tarjeta. All alterna entre seleccionar y deseleccionar todo. El filtrado es solo de la sesión (no se guarda): el estado inicial de cada visita nueva es siempre todos los puertos.
Hora de la instantánea La marca de tiempo de la última instantánea que ancla la ventana actual (corregida a la zona horaria de visualización).
Actualizar / sondeo Sondea automáticamente /infra/traffic/ports/live cada 30 segundos para refrescar las tarjetas.

Tarjetas de puerto (mampostería)

Las tarjetas se reordenan arrastrándolas y el orden se guarda en localStorage (infr:order:traffic-ports). Como su altura varía, se colocan sin huecos mediante mampostería por filas (el mixin sortable_masonry). Dentro de una tarjeta, los mosaicos de servidor se ordenan por número de IP de origen distintas → sesiones totales → índice de servidor.

Leyenda de estados TCP

Los colores de la barra apilada provienen de tokens CSS semánticos (var(--infr-state-*)). La leyenda asocia cada color a un estado.

Token Etiqueta Significado
established ESTABLISHED Conexión establecida con normalidad
listen LISTEN A la escucha (socket de servidor)
syn_sent SYN SENT Intento de conexión (cliente)
syn_recv SYN RECV SYN recibido / semiabierta: un aumento sugiere una inundación SYN
fin_wait FIN WAIT Cerrándose (FIN_WAIT1/2 combinados)
close_wait CLOSE WAIT El par ha cerrado, la aplicación no: su acumulación indica una fuga de conexiones
time_wait TIME WAIT Espera posterior al cierre
other Other Cualquier estado fuera de los siete anteriores

Cómo usarla

  1. Elija un temporizador: use 1min para el lote de instantáneas más ajustado y reciente; 5min/1hour para tendencias más suaves.
  2. Acote a los puertos que le interesan con las fichas; por ejemplo, deje solo 80·443 para vigilar la web.
  3. Lea la barra apilada: una proporción baja de ESTABLISHED junto con valores altos de SYN_RECV/TIME_WAIT es una señal de anomalía.
  4. Haga clic en el círculo SRC: abre la ventana emergente con la lista de IP de origen de ese servidor·puerto (IP remota, puertos remotos, sesiones, primera y última vez vista).
  5. Haga clic en una IP → investigación de una sola IP: desglosa a qué servidores·puertos·estados llega, geolocalización/ASN e historial (agregación de 5 minutos · por hora · diaria). Desde aquí puede continuar con la consulta de reputación o el bloqueo.
  6. Reordene las tarjetas: arrastre arriba los puertos que consulta con más frecuencia; el orden se guarda.

Por el diseño de la agregación, el historial diario (1day) se agrupa por el rango /24 (256 IP) de la IP y no por la IP individual. Cuando la ventana emergente muestra una etiqueta CIDR como by 211.224.128.0/24, ese valor es la suma de todo el rango.

Fuentes de datos

Todas las consultas se ejecutan en la conexión legacy_glory y están aisladas en App\Repositories\TrafficRepository como llamadas del constructor de consultas con parámetros vinculados (sin interpolación de cadenas).

Anclaje de la ventana

La ventana de visualización no se ancla al now() de la aplicación, sino a la última instantánea de datos (MAX(snapshot_ts)). El reloj de escritura del recolector puede ir horas por detrás del reloj de la aplicación, así que anclar en now() dejaría la ventana fuera de los datos y la pantalla en blanco.

Temporizador Límite SQL (snapshot_ts)
1min startOfMinute … endOfMinute del minuto de la última instantánea
5min startOfMinute de (última − 4 min) … endOfMinute de la última
1hour startOfMinute de (última − 59 min) … endOfMinute de la última

El límite WHERE sobre snapshot_ts usa la hora almacenada en bruto en el sistema heredado. Solo a la hora de instantánea mostrada en pantalla se le suma el desplazamiento de visualización de la Política de operaciones (traffic_tz_offset_hours).

Consulta principal: portOverview()

SELECT a.local_port, a.server_name, a.server_index, a.remote_ip,
       a.state_code, b.state_name,
       SUM(a.session_count) AS total_sessions
FROM traffic_session_ct AS a
LEFT JOIN protocol_state AS b ON a.state_code = b.state_code
WHERE a.snapshot_ts BETWEEN :min AND :max
  AND a.local_port IN (:ports)          -- puertos monitorizados de la Política de operaciones
GROUP BY a.local_port, a.server_name, a.server_index,
         a.remote_ip, a.state_code, b.state_name;

Tablas relacionadas

Tabla Conexión Función Alimentada por
traffic_session_ct legacy_glory Instantáneas de sesiones (host/remoto/estado/recuento) check_ct.js
protocol_state legacy_glory Búsqueda de código de estado TCP → nombre —
traffic_session_ct_5min/_1hour/_1day legacy_glory Historial por intervalos para la ventana emergente de investigación de IP aggregate.js
ip_info_loop legacy_glory Enriquecimiento geo/ASN/ISP para la ventana emergente de IP —

Forma de la respuesta del servidor (extracto)

{
  "ports": [80, 443, 22],
  "timer": 1,
  "snapshot": "2026-08-13 10:24:00",
  "ports_data": [
    { "port": 443, "server_data": [
      { "alias": "web1", "idx": 12, "host_count": 84,
        "top_req": [ { "remote_ip": "203.0.113.10", "session_count": 61 } ],
        "connections": [ { "state": "established", "count": 420, "pct": 78 } ],
        "total": 538 }
    ] }
  ]
}

portsData() se almacena en caché durante 20 segundos (con clave formada por el temporizador y un hash de la lista de puertos) para reducir los viajes de ida y vuelta remotos.

Acceso

El área de rol Infraestructura se puede consultar con user_level 1 (visor) como mínimo. Conexiones de puerto es de solo lectura, así que no hay una barrera de escritura aparte: demo (1), personal (5) y administrador (10) pueden verla. La ruta solo exige la autenticación de sesión infr.auth.

Acción Nivel requerido
Ver conexiones de puerto, sondear, abrir la ventana emergente de investigación de IP 1 (cualquier usuario autenticado)
Editar la lista de puertos monitorizados (Política de operaciones) 10 (Administración): Política de operaciones

La acción de bloqueo que se deriva de la ventana emergente de investigación de IP se traspasa a Seguridad ▸ Lista de bloqueo, que exige user_level de escritura 2 o superior y un registro de auditoría. Esta pantalla no realiza ningún bloqueo por sí misma.

Resolución de problemas y preguntas frecuentes

Aparecen las tarjetas, pero los datos de servidor están vacíos. En esa ventana no había sesiones asociadas a ese puerto. Amplíe el temporizador a 5min/1hour o compruebe que el puerto está realmente abierto y con tráfico.

Todas las tarjetas están vacías con «No hay instantánea de conexiones». La tabla traffic_session_ct de legacy_glory no tiene ninguna instantánea reciente (el recolector check_ct.js se ha detenido o ha fallado la conexión a la base de datos). Si no se muestra ninguna hora de última instantánea, revise el recolector.

No aparece un puerto que quiero ver. Si no está en la lista de puertos monitorizados (infra_monitored_ports), no se crea ninguna tarjeta. Añádalo como CSV en Administración ▸ Política de operaciones (1–65535, máximo 30, se conserva el orden de entrada). Valor por defecto:

infra_monitored_ports = 80,443,22,3306,25,465,27017,21,53,3030,8080,6379,6001

La hora de la instantánea se desvía varias horas. Cuando el reloj de almacenamiento de la base de datos heredada difiere de su zona horaria de visualización, defina traffic_tz_offset_hours (±14 h) en la Política de operaciones para corregir la hora mostrada. Se aplica solo a la visualización, nunca a los límites de la consulta.

El historial diario está vacío. La agregación _1day puede llevar un día de retraso y se agrupa por rango /24. Consulte en su lugar la granularidad de 5 minutos o por hora.

Contenido relacionado

포트 연결 — PORT OVERVIEW
포트 연결 — PORT OVERVIEW