InfraGuard

Conexiones IP

Vista de host de las IP remotas por servidor mediante puntos de intensidad por puerto, con una ventana emergente de investigación de IP que abarca el desglose de conexiones, el historial de agregados, geo/ASN, la reputación y un enlace directo de bloqueo.

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.

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

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

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.

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.

  1. 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.
  2. 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

  1. Fije la ventana (1/5/60 min) con el temporizador. Cuanto más corta, más cerca está de «conectado ahora mismo».
  2. Restrinja la vista a los servidores que le interesan con las fichas de servidor (todos de forma predeterminada).
  3. 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.
  4. Haga clic en la fila de la IP sospechosa para abrir la ventana emergente de investigación.
  5. 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.
  6. 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 _1day por clase C. Por eso la ventana emergente muestra una etiqueta de alcance CIDR como 211.224.128.0/24 para dejar el alcance explícito. 5min y 1hour usan la IP individual tal cual.

Enlaces directos

/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

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

IP 연결 — 서버별 원격 peer
IP 연결 — 서버별 원격 peer