Descripción general — qué hace
Conexiones IP es la segunda pantalla de Infraestructura ▸ Conectividad y tráfico (la host view). Mientras que Conexiones de puerto pivota sobre «puerto → servidor», esta pantalla pivota sobre «servidor (host) → IP remota». Cada tarjeta de servidor enumera las IP remotas conectadas en ese momento a ese servidor, ordenadas por intensidad de conexión, y muestra un punto de intensidad de sesiones por cada puerto monitorizado para cada IP. El objetivo es ver de un vistazo qué IP golpea qué servidor, en qué puerto y con qué fuerza.
Al hacer clic en una IP remota se abre la ventana emergente de investigación de IP compartida, donde se puede examinar el desglose de conexiones de esa IP (qué servidor / puerto / estado TCP / número de sesiones), un minigráfico del historial de conexiones agregado, el enriquecimiento geo/ASN/ISP, un enlace de reputación externo y un enlace directo de bloqueo hacia la Lista de bloqueo, todo en un mismo lugar.
- Rutas:
/infra/traffic/ips(página) ·/infra/traffic/ips/live(JSON de sondeo) ·/infra/traffic/ip-detail(JSON de investigación) - Controlador:
App\Http\Controllers\Infra\TrafficController@ips - Constructor:
App\Services\Traffic\SessionQueryService::ipsData()+ipDetail() - Consultas de origen:
App\Repositories\TrafficRepository(conexión heredadalegacy_glory, solo lectura) - Tablas de origen:
traffic_session_ct(más los agregadostraffic_session_ct_5min/_1hour/_1dayy el enriquecimientoip_info_loop)
Todos los datos se leen en solo lectura desde la base de datos heredada de tráfico (
legacy_glory). Esta pantalla nunca escribe nada: las acciones de escritura, como el bloqueo, se delegan mediante un enlace directo de la ventana emergente a la pantalla Lista de bloqueo, donde se produce la escritura.
Cuándo usarla
- Detectar un servidor que atrae un número anómalo de IP remotas (escaneos, botnets, avalanchas de rastreadores).
- Descubrir patrones de propagación lateral en los que una sola IP golpea varios servidores o puertos a la vez.
- Rastrear desde el ángulo del tráfico una IP que ha surgido de una alerta de IDS o del cortafuegos (qué servidor, puerto y estado tuvieron realmente sesiones).
- Verificar el volumen de conexiones, el historial, la geolocalización y la reputación de una IP antes de decidir bloquearla.
- Analizar en profundidad una IP de origen que llega desde el círculo SRC de Conexiones de puerto.
Disposición
Cabecera · temporizador
En la parte superior derecha se encuentran el selector de temporizador (1 min / 5 min / 1 hora) que fija la ventana de visualización, la marca de tiempo de la última instantánea y un botón de actualización manual. El temporizador es la longitud de la ventana de consulta anclada a la última instantánea.
| temporizador | Ventana de consulta |
|---|---|
1 (predeterminado) |
Únicamente el minuto de la última instantánea |
5 |
Últimos 5 minutos desde la última instantánea |
60 |
Últimos 60 minutos desde la última instantánea |
El temporizador elegido se conserva en localStorage['infr:timer:traffic-ips'] entre visitas. Solo se permiten 1/5/60; cualquier otro valor se fuerza a 1.
Leyenda de intensidad + fichas de servidor
- Leyenda de intensidad: el color del punto codifica el tramo de número de sesiones por puerto:
1–9(good) ·10–49(warn) ·50+(crit). - Fichas de servidor: un filtro para elegir qué servidores (hosts) se muestran. De forma predeterminada están todos seleccionados y el filtro de fichas es solo de sesión (no se conserva en localStorage), por lo que una visita nueva vuelve a mostrarlos todos. La ficha
[All]alterna entre seleccionar todo y limpiar la selección.
Tarjetas de servidor (host)
Una tarjeta por cada servidor seleccionado. La cabecera muestra el nombre de host y el número de IP remotas; el cuerpo es una tabla.
- Fila (IP remota) = una IP remota. Columnas:
Remote IP·Total(total de sesiones) · y a continuación un punto de intensidad por cada puerto monitorizado (los 8 primeros puertos monitorizados). - Las IP remotas se ordenan por número total de conexiones (sesiones), de mayor a menor, y se muestran hasta 100 por servidor.
- Los puntos de intensidad codifican por color cuántas sesiones mantiene esa IP en cada puerto (véase la tabla).
- Al hacer clic en una fila se abre la ventana emergente de investigación de esa IP.
Las tarjetas se pueden reordenar arrastrándolas por el asa (el orden se conserva en infr:order:traffic-ips), se recolocan con una disposición tipo masonry por filas y se paginan de 20 en 20.
Colores del punto de intensidad por puerto
| Sesiones | Token | Color | Significado |
|---|---|---|---|
0 |
none | tenue | Sin conexión en este puerto |
1–9 |
good | verde | Intensidad baja |
10–49 |
warn | ámbar | Intensidad media |
50+ |
crit | rojo | Intensidad alta |
Ventana emergente de investigación de IP
La gobiernan el mixin compartido mixins/ip_detail.js y la vista parcial infra/partials/ip-detail-modal.blade.php. Tiene dos modos.
- modo sources: la lista de IP de origen dentro de una ventana (servidor, puerto). Se entra desde el círculo SRC de Conexiones de puerto.
- modo investigate (la entrada predeterminada de esta pantalla): un análisis en profundidad de una sola IP. Se entra haciendo clic en la fila de una IP remota.
Lo que muestra el modo investigate:
| Área | Contenido | Origen |
|---|---|---|
| KPI de resumen | Total de sesiones · número de servidores · número de puertos · primera/última vez vista | ipSeenSpan() (MIN/MAX(created_at) de toda la retención) |
| Geo | País · ciudad · ASN · ISP | ip_info_loop (ipEnrichment()) |
| Historial de conexiones | minigráfico por granularidad (5min / 1hour / 1day) | tablas de agregados (ipHistory()) |
| Desglose de conexiones | Sesiones por servidor × puerto × estado TCP · puertos remotos · primera/última | traffic_session_ct (ipBreakdown()) |
Acciones del pie de la ventana emergente (investigate): Copiar IP · Ver IP (volver a investigar en esta página mediante ?src_ip=) · Reputación ↗ (AbuseIPDB externo, pestaña nueva) · Bloquear IP (enlace directo a la Lista de bloqueo mediante ?add=).
El botón Reputación ↗ de la ventana emergente es un simple enlace que abre el sitio externo
abuseipdb.com/check/…en una pestaña nueva. La ventana emergente de reputación integrada que muestra un indicador de confianza y el historial de denuncias dentro de la consola es una función de las pantallas de Seguridad; véase Reputación de IP.
Cómo usarla
Flujo básico
- Fije la ventana (1/5/60 min) con el temporizador. Cuanto más corta, más cerca está de «conectado ahora mismo».
- Restrinja la vista a los servidores que le interesan con las fichas de servidor (todos de forma predeterminada).
- En una tarjeta de servidor, busque IP remotas con un punto de intensidad rojo (50 sesiones o más) o IP que abarcan varios puertos.
- Haga clic en la fila de la IP sospechosa para abrir la ventana emergente de investigación.
- En la ventana emergente use el desglose de conexiones para ver qué servidor, puerto y estado golpeó, el historial para calibrar la persistencia (puntual frente a recurrente) y geo/ASN para conocer el origen.
- Si hace falta, consulte el historial de denuncias externo con Reputación ↗ y, si es maliciosa, entréguela a la Lista de bloqueo con Bloquear IP.
Cambiar la granularidad del historial
Cambiar la granularidad en la sección de historial de la ventana emergente cambia la tabla de agregados utilizada. La granularidad predeterminada es horaria (1hour), el mejor equilibrio entre densidad y velocidad.
5min → traffic_session_ct_5min · IP individual · ventana de −6h desde la última instantánea
1hour → traffic_session_ct_1hour · IP individual · ventana de −3d desde la última instantánea (predeterminada)
1day → traffic_session_ct_1day · bloque /24 · ventana de −120d desde la última instantánea
El historial diario (
1day) se agrega por el bloque /24 de la IP (los 3 primeros octetos, 256 IP) y no por la IP individual, porque el recolector de agregados almacena_1daypor clase C. Por eso la ventana emergente muestra una etiqueta de alcance CIDR como211.224.128.0/24para dejar el alcance explícito. 5min y 1hour usan la IP individual tal cual.
Enlaces directos
?src_ip=203.0.113.10: al cargar la página, abre automáticamente la ventana emergente de investigación de esa IP (se usa al llegar desde otra pantalla o desde una alerta).?alias=…/?servers=…/?server=…: preaplica el filtro de fichas de servidor (separados por comas o espacios, coincidencia sin distinción de mayúsculas y minúsculas). Se aplica solo a esta visita; no se conserva.
/infra/traffic/ips?src_ip=203.0.113.10
/infra/traffic/ips?servers=glory,blue
Sondeo
La página consulta /infra/traffic/ips/live cada 30 segundos para actualizarse automáticamente (no es Reverb: el recolector escribe en la base de datos fuera de Laravel, así que el sondeo es la opción sensata). Al actualizar, si estaban todos seleccionados incluye automáticamente los servidores que aparezcan de nuevo y quita de la selección los que hayan desaparecido.
Orígenes de datos
Anclaje de la ventana
La ventana de visualización se ancla a la última instantánea de los datos (MAX(snapshot_ts)), no al now() de la aplicación. El reloj de almacenamiento del recolector puede desviarse hasta unas 9 horas por detrás del reloj de la aplicación, de modo que una ventana basada en now() caería fuera de los datos y se mostraría vacía.
Consulta de la vista de host (ipPeers)
-- TrafficRepository::ipPeers (con parámetros enlazados)
SELECT server_name, remote_ip, local_port, SUM(session_count) AS total_sessions
FROM traffic_session_ct
WHERE snapshot_ts BETWEEN :min AND :max
AND local_port IN (:ports) -- OpsPolicy::monitoredPorts()
GROUP BY server_name, remote_ip, local_port;
Los monitored ports no están codificados de forma fija: proceden de infra_monitored_ports (CSV) en la Política de operaciones. El resultado de ipsData() se almacena en caché durante 20 segundos (clave infr:traffic:ips:v1:{timer}:{ports}).
Consultas de la ventana emergente de investigación
| Método | Tabla | Qué hace |
|---|---|---|
ipSeenSpan() |
traffic_session_ct |
MIN/MAX(created_at) = intervalo real de observación (retención de unas 8 h), MAX(snapshot_ts) = el último lote de la propia IP (ancla del desglose) |
ipBreakdown() |
traffic_session_ct |
Sumas de sesiones por servidor×puerto×estado · puertos remotos · primera/última (LIMIT 200) |
ipHistory() |
3 agregados | Historial de sesiones por granularidad (LIMIT 400) |
ipEnrichment() |
ip_info_loop |
País · ciudad · ASN · ISP (devuelve null sin error si no existe) |
El desglose de conexiones se ancla al último lote de instantánea de la propia IP, no a la última ventana global. Es deliberado, para que una IP que no está conectada ahora mismo pero que nos golpeó en el pasado siga mostrando su distribución, reconstruida a partir de su último momento observado.
Advertencia sobre los índices de los agregados (crítico para el rendimiento)
ipHistory() siempre especifica direction IN ('inbound','outbound').
-- _1day usa el índice compuesto t_ip(direction, remote_ip).
-- Sin una direction explícita solo recorre el rango de created_at → más de 12 s.
-- Con ella, el índice entra en juego → unos 20 ms (medido el 2026-08-06).
SELECT created_at, SUM(session_count) AS sessions
FROM traffic_session_ct_1day
WHERE direction IN ('inbound','outbound')
AND remote_ip = :cclass_key -- el nivel diario usa la clave de los 3 primeros octetos /24
AND created_at >= :since
GROUP BY created_at
ORDER BY created_at
LIMIT 400;
Los agregados son enormes (_5min ≈ 209M · _1hour ≈ 112M · _1day ≈ 24M), así que una ventana created_at >= ajustada más un LIMIT es obligatoria. Los resultados de la ventana emergente están protegidos por cachés: investigate 25 s, sources 20 s.
Acceso
- Esta pantalla pertenece al área de rol de Infraestructura (
user_levelmínimo 1); es de solo lectura, por lo que cualquier usuario con sesión iniciada (demo=1) puede verla. - La página,
/livey/ip-detailestán todas bajoinfr.auth(inicio de sesión), sin ninguna barrera de nivel adicional. - Aquí no se escribe nada. El botón Bloquear IP de la ventana emergente es un enlace directo a la pantalla Lista de bloqueo; el bloqueo real (una escritura en
blacklist_info) se realiza allí conuser_level≥ 2 y un registro de auditoría.
Resolución de problemas y preguntas frecuentes
Las tarjetas están vacías y solo aparece «no hay IP remotas en esta ventana».
Significa que la última instantánea no tiene conexiones en los puertos monitorizados. (1) Amplíe el temporizador a 5 o 60, (2) confirme que los puertos de servicio reales están registrados en infra_monitored_ports de la Política de operaciones y (3) compruebe que las instantáneas recientes están llegando a traffic_session_ct (recolector check_ct.js).
Todo está vacío y no hay marca de tiempo de instantánea.
Es probable que la conexión legacy_glory o la propia tabla traffic_session_ct estén vacías. Verifique las credenciales de la base de datos legacy_glory en .env y que el recolector de tráfico esté en marcha. Si la consulta falla, la respuesta lleva error:true.
Solo el historial diario muestra «no hay historial de agregado diario para este bloque /24». La agregación diaria puede retrasarse un día y se indexa por bloque /24. Consulte primero las granularidades de 5min y horaria. Si el bloque aún no tiene agregado, es lo esperado.
He hecho clic en una IP pero el desglose de conexiones está vacío. Esa IP no tiene sesiones en la instantánea reciente, pero sí observaciones pasadas. Use la primera y última vez vista del KPI de resumen y el historial de conexiones para confirmar la actividad pasada (el desglose se reconstruye a partir del último lote de instantánea de la IP).
El botón «Reputación ↗» de la ventana emergente abre una pestaña nueva en lugar de mostrarlo en línea. Es lo previsto. Esta ventana emergente de tráfico usa un enlace externo a AbuseIPDB. Para ver el indicador de confianza y el historial de denuncias dentro de la consola, use la ventana emergente de reputación integrada de las pantallas de Seguridad.
¿Qué determina los colores del punto de intensidad? El tramo del número de sesiones por puerto: 1–9 verde · 10–49 ámbar · 50+ rojo · 0 es un punto tenue. Solo se muestran como columnas los 8 primeros puertos monitorizados.
Relacionado
- Conexiones de puerto: el PORT OVERVIEW de puerto → servidor (barras de estado, círculo SRC)
- Tráfico (E/S de red): bytes de entrada/salida y rendimiento de paquetes por servidor
- Lista de bloqueo y reputación: el destino del enlace directo «Bloquear IP» de la ventana emergente (escritura + auditoría)
- Reputación de IP: la ventana emergente con el indicador de confianza de AbuseIPDB dentro de la consola
- Política de operaciones: configurar los puertos monitorizados (
infra_monitored_ports) - Alertas: enviar SMS o correo a los responsables cuando se supera un umbral
