Übersicht – was dieser Bildschirm leistet
Port-Verbindungen ist der zentrale Bildschirm von Infrastruktur ▸ Konnektivität und Traffic – die PORT OVERVIEW. Er stellt für jeden in der Betriebsrichtlinie definierten überwachten Port (z. B. 80, 443, 22, 3306 …) eine Karte dar und schlüsselt innerhalb jeder Karte die an diesen Port gebundenen TCP-Sitzungen je Server in einem zu 100 % gestapelten Balken nach Zustand auf. Das Ziel: auf einen Blick erfassen, „wer gerade mit diesem Port verbunden ist, wie viele Sitzungen es sind und in welchem Zustand sie sich befinden“.
Die Quelle ist die alte Traffic-Datenbank (Verbindung legacy_glory), Tabelle traffic_session_ct, die der Collector check_ct.js regelmäßig befüllt. Die Anwendung arbeitet hier nur lesend – dieser Bildschirm schreibt nichts.
Jede Server-Kachel zeigt:
- Zu 100 % gestapelter Balken der TCP-Zustände – die Anteile von ESTABLISHED / LISTEN / SYN SENT / SYN RECV / FIN WAIT / CLOSE WAIT / TIME WAIT (alles Übrige fällt unter
other). ESTABLISHED steht immer an erster Stelle, der Rest folgt in absteigender Sitzungszahl. - SRC-Kreis – die Anzahl verschiedener Quell-IPs (
remote_ip), die an diesen Server·Port gebunden sind. Ein Klick öffnet das Pop-up mit der Liste der Quell-IPs. - Die 3 häufigsten Quell-IPs – die drei entfernten IPs mit den meisten Sitzungen, jeweils mit Anzahl.
Wann Sie ihn einsetzen
- Verbindungsspitzen und auffällige Zustände erkennen: Ein sprunghafter Anstieg von SYN_RECV (halb offen) oder TIME_WAIT auf einem Port deutet auf SYN-Floods, Verbindungsstürme oder Verbindungslecks der Anwendung hin.
- Sehen, welcher Server die Last trägt: Die Sitzungsverteilung unterscheidet sich selbst bei gleichem Port von Server zu Server – das legt eine Schieflage des Load Balancers oder einen überlasteten Knoten offen.
- Verdächtige Quellen verfolgen: Klicken Sie auf eine der häufigsten Quell-IPs oder auf den SRC-Kreis, um aufzuschlüsseln, welche Server·Ports sie in welchem Umfang trifft, dazu Geo/ASN und Verlauf – und übergeben Sie anschließend an die Reputationsabfrage oder an die Sperrung.
- Einstieg über Deep Link: Kommen Sie von einem anderen Bildschirm (z. B. Service ▸ Web) mit
?src_ip=…&port=…, wird automatisch auf diesen Port gefiltert und das Pop-up zur IP-Untersuchung geöffnet.
Aufbau
Bedienelemente oben
| Element | Verhalten |
|---|---|
| Timer 1 Min. / 5 Min. / 1 Stunde | Breite des Aggregationsfensters für Sitzungen. Die Auswahl wird in localStorage (infr:timer:traffic-ports) gespeichert und bleibt über Besuche hinweg erhalten. |
| Port-Chips | Die Liste der überwachten Ports (Betriebsrichtlinie). Ein Klick auf einen Chip blendet die zugehörige Karte ein oder aus. All schaltet zwischen „alle auswählen“ und „alle abwählen“ um. Das Filtern gilt nur für die Sitzung (es wird nicht gespeichert) – die Voreinstellung bei jedem neuen Besuch sind stets alle Ports. |
| Zeitpunkt der Momentaufnahme | Der Zeitstempel der jüngsten Momentaufnahme, an der das aktuelle Fenster verankert ist (um die Anzeigezeitzone korrigiert). |
| Aktualisieren / Polling | Ruft alle 30 Sekunden automatisch /infra/traffic/ports/live ab, um die Karten aufzufrischen. |
Port-Karten (Masonry)
Die Karten lassen sich per Ziehen umsortieren, und die Reihenfolge wird in localStorage (infr:order:traffic-ports) gespeichert. Da die Kartenhöhen variieren, werden sie über zeilenübergreifendes Masonry (das Mixin sortable_masonry) lückenlos angeordnet. Innerhalb einer Karte werden die Server-Kacheln nach Anzahl verschiedener Quell-IPs → Gesamtsitzungen → Serverindex sortiert.
Legende der TCP-Zustände
Die Farben des gestapelten Balkens stammen aus semantischen CSS-Token (var(--infr-state-*)). Die Legende ordnet jeder Farbe einen Zustand zu.
| Token | Bezeichnung | Bedeutung |
|---|---|---|
established |
ESTABLISHED | Normal aufgebaute Verbindung |
listen |
LISTEN | Lauschend (Server-Socket) |
syn_sent |
SYN SENT | Verbindungsversuch (Client) |
syn_recv |
SYN RECV | SYN empfangen / halb offen – ein Anstieg deutet auf einen SYN-Flood hin |
fin_wait |
FIN WAIT | Wird geschlossen (FIN_WAIT1/2 zusammengefasst) |
close_wait |
CLOSE WAIT | Die Gegenstelle hat geschlossen, die Anwendung nicht – eine Anhäufung signalisiert ein Verbindungsleck |
time_wait |
TIME WAIT | Wartezeit nach dem Schließen |
other |
Other | Jeder Zustand außerhalb der sieben oben genannten |
Vorgehen
- Wählen Sie einen Timer –
1minfür den engsten, aktuellsten Stapel an Momentaufnahmen,5min/1hourfür geglättete Trends. - Grenzen Sie mit den Chips auf die Ports ein, die Sie interessieren – behalten Sie z. B. nur 80·443, um das Web zu beobachten.
- Lesen Sie den gestapelten Balken – ein niedriger ESTABLISHED-Anteil bei großen SYN_RECV-/TIME_WAIT-Werten ist ein Anomaliesignal.
- Klicken Sie auf den SRC-Kreis – das öffnet das Pop-up mit der Liste der Quell-IPs für diesen Server·Port (entfernte IP, entfernte Ports, Sitzungen, erste und letzte Sichtung).
- Klicken Sie auf eine IP → Untersuchung einer einzelnen IP – aufgeschlüsselt nach den getroffenen Servern·Ports·Zuständen, dazu Geo/ASN und Verlauf (Rollup 5 Min. · stündlich · täglich). Von hier aus können Sie zur Reputationsabfrage oder zur Sperrung übergehen.
- Karten umsortieren – ziehen Sie häufig beobachtete Ports nach oben; die Reihenfolge wird gespeichert.
Der Tagesverlauf (
1day) wird aufgrund des Rollup-Aufbaus nach dem /24-Bereich (256 IPs) der IP aggregiert und nicht nach der einzelnen IP. Zeigt das Pop-up eine CIDR-Bezeichnung wieby 211.224.128.0/24, ist dieser Wert die Summe über den gesamten Bereich.
Datenquellen
Sämtliche Abfragen laufen über die Verbindung legacy_glory und sind in App\Repositories\TrafficRepository als Query-Builder-Aufrufe mit gebundenen Parametern gekapselt (keine String-Interpolation).
Verankerung des Fensters
Das Anzeigefenster ist nicht am now() der Anwendung verankert, sondern an der jüngsten Datenmomentaufnahme (MAX(snapshot_ts)). Die Schreibuhr des Collectors kann der Anwendungsuhr um Stunden nachlaufen; eine Verankerung an now() läge damit außerhalb der Daten und ergäbe einen leeren Bildschirm.
| Timer | SQL-Grenze (snapshot_ts) |
|---|---|
| 1min | startOfMinute … endOfMinute der Minute der jüngsten Momentaufnahme |
| 5min | startOfMinute von (jüngste − 4 Min.) … endOfMinute der jüngsten |
| 1hour | startOfMinute von (jüngste − 59 Min.) … endOfMinute der jüngsten |
Die WHERE-Grenze auf
snapshot_tsverwendet die rohe, im Altsystem gespeicherte Zeit. Nur auf die am Bildschirm angezeigte Zeit der Momentaufnahme wird der Anzeige-Offset der Betriebsrichtlinie (traffic_tz_offset_hours) aufgeschlagen.
Kernabfrage – 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) -- überwachte Ports aus der Betriebsrichtlinie
GROUP BY a.local_port, a.server_name, a.server_index,
a.remote_ip, a.state_code, b.state_name;
traffic_session_ct⋈protocol_statelöst den numerischen Zustandscode in einen lesbaren Zustandsnamen für Legende und gestapelten Balken auf.- Ein eng gefasstes
snapshot_ts BETWEEN-Fenster zusammen mit der Positivlistelocal_port INgrenzt die große Momentaufnahmen-Tabelle (rund 605.000 Zeilen) ein.
Zugehörige Tabellen
| Tabelle | Verbindung | Aufgabe | Befüllt von |
|---|---|---|---|
traffic_session_ct |
legacy_glory | Sitzungs-Momentaufnahmen (Host/Gegenstelle/Zustand/Anzahl) | check_ct.js |
protocol_state |
legacy_glory | Nachschlagetabelle TCP-Zustandscode → Name | — |
traffic_session_ct_5min/_1hour/_1day |
legacy_glory | Zeitraumverlauf für das Pop-up zur IP-Untersuchung | aggregate.js |
ip_info_loop |
legacy_glory | Anreicherung um Geo/ASN/ISP für das IP-Pop-up | — |
Aufbau der Serverantwort (Auszug)
{
"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() wird 20 Sekunden lang zwischengespeichert (Schlüssel aus Timer plus einem Hash der Portliste), um entfernte Roundtrips zu vermeiden.
Zugriff
Der Rollenbereich Infrastruktur ist ab user_level 1 (Betrachter) einsehbar. Port-Verbindungen ist nur lesend, daher gibt es keine gesonderte Schreibsperre – Demo (1), Mitarbeitende (5) und Administrierende (10) können den Bildschirm alle aufrufen. Die Route verlangt lediglich die Sitzungsauthentifizierung infr.auth.
| Aktion | Erforderliche Stufe |
|---|---|
| Port-Verbindungen ansehen, abrufen, Pop-up zur IP-Untersuchung öffnen | 1 (jede angemeldete Person) |
| Liste der überwachten Ports bearbeiten (Betriebsrichtlinie) | 10 (Verwaltung) – Betriebsrichtlinie |
Die Sperr-Aktion, die sich aus dem Pop-up zur IP-Untersuchung ergibt, wird an Sicherheit ▸ Sperrliste übergeben; dort sind Schreibrechte ab
user_level2 sowie ein Audit-Protokoll erforderlich. Dieser Bildschirm selbst nimmt keine Sperrung vor.
Fehlerbehebung und FAQ
Die Karten erscheinen, aber die Serverdaten sind leer.
In diesem Fenster waren keine Sitzungen an den Port gebunden. Erweitern Sie den Timer auf 5min/1hour oder prüfen Sie, ob der Port tatsächlich geöffnet ist und Traffic führt.
Alle Karten sind leer und zeigen „Keine Verbindungs-Momentaufnahme“.
traffic_session_ct auf legacy_glory enthält keine aktuelle Momentaufnahme (der Collector check_ct.js ist gestoppt oder die Datenbankverbindung ist fehlgeschlagen). Wird gar kein Zeitpunkt der jüngsten Momentaufnahme angezeigt, prüfen Sie den Collector.
Ein Port, den ich sehen möchte, fehlt.
Steht er nicht in der Liste der überwachten Ports (infra_monitored_ports), wird keine Karte erzeugt. Fügen Sie ihn als CSV unter Verwaltung ▸ Betriebsrichtlinie hinzu (1–65535, maximal 30, Eingabereihenfolge bleibt erhalten). Standardwert:
infra_monitored_ports = 80,443,22,3306,25,465,27017,21,53,3030,8080,6379,6001
Der Zeitpunkt der Momentaufnahme weicht um mehrere Stunden ab.
Weicht die Speicheruhr der Altdatenbank von Ihrer Anzeigezeitzone ab, setzen Sie traffic_tz_offset_hours (±14 Std.) in der Betriebsrichtlinie, um die angezeigte Zeit zu korrigieren. Der Wert wirkt ausschließlich auf die Anzeige, niemals auf die Abfragegrenzen.
Der Tagesverlauf ist leer.
Das _1day-Rollup kann einen Tag hinterherhinken und aggregiert nach /24-Bereich. Prüfen Sie stattdessen die Granularität 5 Minuten oder stündlich.
Verwandte Themen
- IP-Verbindungen (Host-Sicht) – IPs entfernter Gegenstellen × Portstärke je Server
- Traffic (Netzwerk-E/A) – Zeitreihen der ein- und ausgehenden Bytes·Pakete aus server_traffic
- Betriebsrichtlinie – Liste der überwachten Ports und Einstellung des Zeitzonen-Offsets
- IP-Reputation – AbuseIPDB-Reputation aus dem Untersuchungs-Pop-up
- Firewall (Angriffsfläche) – Überwachung der physischen Exposition offener Ports
- Sperrliste und Reputation – IP-Sperrung im Anschluss an das Untersuchungs-Pop-up
