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 :
- Barre empilée à 100 % des états TCP — proportions d’ESTABLISHED / LISTEN / SYN SENT / SYN RECV / FIN WAIT / CLOSE WAIT / TIME WAIT (tout le reste va dans
other). ESTABLISHED est toujours placé en premier, le reste par nombre de sessions décroissant. - Cercle SRC — le nombre d’IP sources distinctes (
remote_ip) rattachées à ce serveur·port. Un clic ouvre la fenêtre contextuelle listant les IP sources. - Les 3 principales IP sources — les trois IP distantes totalisant le plus de sessions, avec leur nombre.
Quand l’utiliser
- Repérer les pics de connexions ou les états anormaux : une flambée de SYN_RECV (semi-ouvertes) ou de TIME_WAIT sur un port évoque une inondation SYN, une tempête de connexions ou une fuite de connexions applicative.
- Voir quel serveur encaisse la charge : la répartition des sessions diffère d’un serveur à l’autre même sur un port identique, ce qui révèle un déséquilibre du répartiteur de charge ou un nœud surchargé.
- Suivre les sources suspectes : cliquez sur une IP source principale ou sur le cercle SRC pour explorer quels serveurs·ports elle atteint et dans quelle mesure, ainsi que la géolocalisation/l’ASN et l’historique, puis enchaînez sur la consultation de réputation ou le blocage.
- Entrée par lien direct : en arrivant depuis un autre écran (par exemple Service ▸ Web) avec
?src_ip=…&port=…, le filtre se positionne automatiquement sur ce port et la fenêtre d’investigation IP s’ouvre.
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
- Choisissez un minuteur — utilisez
1minpour le lot d’instantanés le plus resserré et le plus récent,5min/1hourpour des tendances plus lissées. - Restreignez aux ports qui vous intéressent à l’aide des puces — par exemple ne gardez que 80·443 pour surveiller le web.
- Lisez la barre empilée — une faible part d’ESTABLISHED avec beaucoup de SYN_RECV/TIME_WAIT est un signal d’anomalie.
- 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).
- 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.
- 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 queby 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_tsutilise 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;
traffic_session_ct⋈protocol_statetraduit le code d’état numérique en un nom d’état lisible pour la légende et la barre empilée.- Une fenêtre
snapshot_ts BETWEENresserrée, associée à la liste blanchelocal_port IN, restreint la volumineuse table d’instantanés (environ 605 000 lignes).
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_leveld’é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
- Connexions IP (vue par hôte) — IP des pairs distants × intensité par port et par serveur
- Trafic (E/S réseau) — séries temporelles des octets·paquets entrants/sortants de server_traffic
- Politique d’exploitation — liste des ports surveillés et réglage du décalage de fuseau
- Réputation d’IP — réputation AbuseIPDB depuis la fenêtre d’investigation
- Pare-feu (surface d’attaque) — surveillance de l’exposition physique des ports ouverts
- Liste de blocage et réputation — blocage d’IP découlant de la fenêtre d’investigation
