InfraGuard

Connexions de ports (PORT OVERVIEW)

Écran phare de surveillance des ports : une carte par port affichant en direct la répartition des états TCP par serveur, les principales IP sources et le nombre de sources.

Vue d’ensemble — à quoi sert cet écran

Connexions de ports est l’écran phare d’Infrastructure ▸ Connectivité et trafic — le PORT OVERVIEW. Il affiche une carte par port surveillé (par exemple 80, 443, 22, 3306 …) défini dans la Politique d’exploitation et, à l’intérieur de chaque carte, il décompose par serveur les sessions TCP rattachées à ce port sous forme de barre empilée à 100 % par état. L’objectif : voir d’un seul coup d’œil « qui est connecté à ce port en ce moment, combien de sessions et dans quel état ».

La source est l’ancienne base de trafic (connexion legacy_glory), table traffic_session_ct, alimentée périodiquement par le collecteur check_ct.js. Ici, l’application est en lecture seule : cet écran n’écrit rien.

Chaque tuile de serveur affiche :

Quand l’utiliser

Disposition

Commandes du haut

Élément Comportement
Minuteur 1 min / 5 min / 1 heure Largeur de la fenêtre d’agrégation des sessions. Le choix est conservé dans localStorage (infr:timer:traffic-ports) d’une visite à l’autre.
Puces de port La liste des ports surveillés (Politique d’exploitation). Cliquez sur une puce pour afficher ou masquer sa carte. All bascule entre tout sélectionner et tout désélectionner. Le filtrage vaut uniquement pour la session (il n’est pas conservé) : à chaque nouvelle visite, l’état initial est toujours « tous les ports ».
Heure de l’instantané L’horodatage du dernier instantané qui ancre la fenêtre courante (corrigé selon le fuseau d’affichage).
Actualisation / interrogation Interroge automatiquement /infra/traffic/ports/live toutes les 30 secondes pour rafraîchir les cartes.

Cartes de port (maçonnerie)

Les cartes sont réordonnables par glisser-déposer et l’ordre est enregistré dans localStorage (infr:order:traffic-ports). Comme leur hauteur varie, elles sont disposées sans espace vide grâce à une maçonnerie par lignes (le mixin sortable_masonry). Au sein d’une carte, les tuiles de serveur sont triées par nombre d’IP sources distinctes → total des sessions → index du serveur.

Légende des états TCP

Les couleurs de la barre empilée proviennent de jetons CSS sémantiques (var(--infr-state-*)). La légende associe chaque couleur à un état.

Jeton Libellé Signification
established ESTABLISHED Connexion normalement établie
listen LISTEN En écoute (socket serveur)
syn_sent SYN SENT Tentative de connexion (client)
syn_recv SYN RECV SYN reçu / semi-ouverte — une flambée suggère une inondation SYN
fin_wait FIN WAIT Fermeture en cours (FIN_WAIT1/2 fusionnés)
close_wait CLOSE WAIT Le pair a fermé, pas l’application — une accumulation signale une fuite de connexions
time_wait TIME WAIT Attente après fermeture
other Other Tout état en dehors des sept ci-dessus

Comment l’utiliser

  1. Choisissez un minuteur — utilisez 1min pour le lot d’instantanés le plus resserré et le plus récent, 5min/1hour pour des tendances plus lissées.
  2. Restreignez aux ports qui vous intéressent à l’aide des puces — par exemple ne gardez que 80·443 pour surveiller le web.
  3. Lisez la barre empilée — une faible part d’ESTABLISHED avec beaucoup de SYN_RECV/TIME_WAIT est un signal d’anomalie.
  4. Cliquez sur le cercle SRC — cela ouvre la fenêtre contextuelle de la liste des IP sources pour ce serveur·port (IP distante, ports distants, sessions, première et dernière apparition).
  5. Cliquez sur une IP → investigation d’une seule IP — le détail des serveurs·ports·états qu’elle atteint, la géolocalisation/l’ASN et l’historique (agrégation 5 min · par heure · par jour). De là, vous pouvez poursuivre vers la consultation de réputation ou le blocage.
  6. Réordonnez les cartes — faites glisser vers le haut les ports que vous surveillez le plus souvent ; l’ordre est enregistré.

En raison de la conception de l’agrégation, l’historique journalier (1day) est agrégé par plage /24 (256 IP) de l’adresse plutôt que par IP individuelle. Lorsque la fenêtre contextuelle affiche un libellé CIDR tel que by 211.224.128.0/24, cette valeur est la somme sur toute la plage.

Sources de données

Toutes les requêtes s’exécutent sur la connexion legacy_glory et sont isolées dans App\Repositories\TrafficRepository sous forme d’appels au constructeur de requêtes à paramètres liés (aucune interpolation de chaîne).

Ancrage de la fenêtre

La fenêtre d’affichage n’est pas ancrée sur le now() de l’application mais sur le dernier instantané de données (MAX(snapshot_ts)). L’horloge d’écriture du collecteur peut accuser plusieurs heures de retard sur celle de l’application : un ancrage sur now() sortirait donc de la plage des données et donnerait un écran vide.

Minuteur Borne SQL (snapshot_ts)
1min startOfMinute … endOfMinute de la minute du dernier instantané
5min startOfMinute de (dernier − 4 min) … endOfMinute du dernier
1hour startOfMinute de (dernier − 59 min) … endOfMinute du dernier

La borne WHERE sur snapshot_ts utilise l’heure brute telle qu’enregistrée par l’ancien système. Seule l’heure d’instantané affichée à l’écran se voit ajouter le décalage d’affichage de la Politique d’exploitation (traffic_tz_offset_hours).

Requête principale — 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)          -- ports surveillés de la Politique d’exploitation
GROUP BY a.local_port, a.server_name, a.server_index,
         a.remote_ip, a.state_code, b.state_name;

Tables associées

Table Connexion Rôle Alimentée par
traffic_session_ct legacy_glory Instantanés de sessions (hôte/distant/état/nombre) check_ct.js
protocol_state legacy_glory Correspondance code d’état TCP → nom —
traffic_session_ct_5min/_1hour/_1day legacy_glory Historique par plage de temps pour la fenêtre d’investigation IP aggregate.js
ip_info_loop legacy_glory Enrichissement géo/ASN/FAI pour la fenêtre IP —

Forme de la réponse serveur (extrait)

{
  "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() met en cache pendant 20 secondes (clé composée du minuteur et d’un hachage de la liste des ports) afin de limiter les allers-retours distants.

Accès

Le domaine de rôle Infrastructure est consultable à partir du user_level 1 (lecteur). Connexions de ports est en lecture seule, il n’y a donc pas de contrôle d’écriture distinct : démo (1), personnel (5) et administrateur (10) peuvent tous le consulter. La route exige uniquement l’authentification de session infr.auth.

Action Niveau requis
Consulter les connexions de ports, interroger, ouvrir la fenêtre d’investigation IP 1 (tout utilisateur authentifié)
Modifier la liste des ports surveillés (Politique d’exploitation) 10 (Administration) — Politique d’exploitation

L’action de blocage qui découle de la fenêtre d’investigation IP est transmise à Sécurité ▸ Liste de blocage, qui exige un user_level d’écriture de 2 ou plus ainsi qu’un journal d’audit. Cet écran n’effectue lui-même aucun blocage.

Dépannage et FAQ

Les cartes apparaissent mais les données de serveur sont vides. Aucune session n’était rattachée à ce port dans la fenêtre. Élargissez le minuteur à 5min/1hour, ou vérifiez que le port est réellement ouvert et qu’il reçoit du trafic.

Toutes les cartes sont vides avec « Aucun instantané de connexions ». La table traffic_session_ct sur legacy_glory n’a aucun instantané récent (le collecteur check_ct.js s’est arrêté, ou la connexion à la base a échoué). Si aucune heure de dernier instantané n’est affichée, vérifiez le collecteur.

Un port que je veux voir n’apparaît pas. S’il ne figure pas dans la liste des ports surveillés (infra_monitored_ports), aucune carte n’est créée. Ajoutez-le en CSV dans Administration ▸ Politique d’exploitation (1–65535, 30 au maximum, ordre de saisie conservé). Valeur par défaut :

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

L’heure de l’instantané est décalée de plusieurs heures. Lorsque l’horloge de stockage de l’ancienne base diffère de votre fuseau d’affichage, réglez traffic_tz_offset_hours (±14 h) dans la Politique d’exploitation pour corriger l’heure affichée. Le décalage s’applique uniquement à l’affichage, jamais aux bornes de requête.

L’historique journalier est vide. L’agrégation _1day peut accuser un jour de retard et regroupe par plage /24. Consultez plutôt la granularité 5 minutes ou par heure.

Voir aussi

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