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:
- Barra apilada al 100 % de estados TCP: proporciones de ESTABLISHED / LISTEN / SYN SENT / SYN RECV / FIN WAIT / CLOSE WAIT / TIME WAIT (cualquier otro estado va a
other). ESTABLISHED se coloca siempre primero y el resto en orden descendente de número de sesiones. - Círculo SRC: el número de IP de origen distintas (
remote_ip) asociadas a ese servidor·puerto. Al hacer clic se abre la ventana emergente con la lista de IP de origen. - Las 3 principales IP de origen: las tres IP remotas con más sesiones, con sus recuentos.
Cuándo usarla
- Detectar picos de conexiones o estados anómalos: un aumento repentino de SYN_RECV (semiabiertas) o TIME_WAIT en un puerto apunta a inundaciones SYN, tormentas de conexiones o fugas de conexiones de la aplicación.
- Ver qué servidor soporta la carga: la distribución de sesiones varía entre servidores aunque el puerto sea el mismo, lo que revela desequilibrios del balanceador o un nodo sobrecargado.
- Seguir orígenes sospechosos: haga clic en una IP de origen destacada o en el círculo SRC para profundizar en qué servidores·puertos alcanza y con qué intensidad, además de geolocalización/ASN e historial, y de ahí pasar a la consulta de reputación o al bloqueo.
- Entrada por enlace directo: al llegar desde otra pantalla (por ejemplo Servicio ▸ Web) con
?src_ip=…&port=…se filtra automáticamente a ese puerto y se abre la ventana emergente de investigación de IP.
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
- Elija un temporizador: use
1minpara el lote de instantáneas más ajustado y reciente;5min/1hourpara tendencias más suaves. - Acote a los puertos que le interesan con las fichas; por ejemplo, deje solo 80·443 para vigilar la web.
- 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.
- 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).
- 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.
- 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 comoby 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_tsusa 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;
traffic_session_ct⋈protocol_stateresuelve el código numérico de estado en un nombre legible para la leyenda y la barra apilada.- Una ventana ajustada de
snapshot_ts BETWEENmás la lista blancalocal_port INacotan la enorme tabla de instantáneas (≈605 000 filas).
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_levelde 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
- Conexiones IP (vista por host): IP de pares remotos × intensidad de puerto por servidor
- Tráfico (E/S de red): series temporales de bytes·paquetes de entrada/salida de server_traffic
- Política de operaciones: lista de puertos monitorizados y ajustes de desplazamiento horario
- Reputación de IP: reputación de AbuseIPDB desde la ventana emergente de investigación
- Cortafuegos (superficie de ataque): monitorización de la exposición física de puertos abiertos
- Lista de bloqueo y reputación: bloqueo de IP derivado de la ventana emergente de investigación
