Überprüfung offener und abhörender Ports unter Linux mit netstat und ss
Die Überwachung offener und abhörender Ports auf einem Linux-System ist eine der kritischsten Praktiken zur Aufrechterhaltung der Serversicherheit, zur Diagnose von Netzwerkproblemen und zur effektiven Verwaltung Ihrer Infrastruktur. Durch regelmäßige Audits, welche Ports offen sind und welche Dienste an sie gebunden sind, können Sie proaktiv unbefugte Zugriffversuche identifizieren, Fehlkonfigurationen erkennen und unnötige Angriffsflächen beseitigen, bevor sie zu ernsthaften Sicherheitslücken werden.
Egal ob Sie eine hochfrequente Anwendung auf einem VPS Hosting Plan ausführen oder eine Flotte von Bare-Metal-Maschinen verwalten, das Verständnis der Netzwerkexposition Ihres Linux-Servers ist unverzichtbar. Dieser Leitfaden bietet eine umfassende, technisch genaue Anleitung zur Verwendung von netstat und ss — den zwei am weitesten verbreiteten Befehlszeilenwerkzeugen zur Port-Inspektion auf Linux — zusammen mit zusätzlichen Tools und Best Practices aus der Praxis.
1. Verständnis von Ports und deren Typen
Bevor wir uns den Tools selbst zuwenden, ist es wichtig, ein klares Verständnis dafür zu schaffen, was Ports sind, wie sie kategorisiert werden und warum ihre Überwachung wichtig ist.
Was ist ein Netzwerk-Port?
Ein Netzwerk-Port ist ein logischer Kommunikationsendpunkt, der mit einem bestimmten Prozess oder Service auf einem Host verbunden ist. Ports ermöglichen es einem einzelnen Server mit einer IP-Adresse, mehrere vernetzte Services gleichzeitig auszuführen — zum Beispiel einen Webserver auf Port 80, einen SSH-Daemon auf Port 22 und eine Datenbank auf Port 3306.
Port-Kategorien
| Bereich | Kategorie | Beschreibung |
|---|---|---|
| 0–1023 | Well-Known Ports | Reserviert für Standard-Systemservices (HTTP, SSH, FTP, etc.) |
| 1024–49151 | Registered Ports | Verwendet von Anwendungen und Middleware (MySQL, PostgreSQL, etc.) |
| 49152–65535 | Dynamic/Ephemeral Ports | Temporär zugewiesen für ausgehende Client-Verbindungen |
Port-Zustände, auf die Sie treffen werden
- LISTEN — Der Port ist offen und ein Service wartet aktiv auf eingehende Verbindungen.
- ESTABLISHED — Eine aktive Verbindung existiert zwischen zwei Endpunkten.
- TIME_WAIT — Die Verbindung wird geschlossen; das System wartet, um sicherzustellen, dass das Remote-Ende die letzte Bestätigung erhalten hat.
- CLOSE_WAIT — Das Remote-Ende hat die Verbindung geschlossen; die lokale Anwendung hat ihre Seite noch nicht geschlossen.
Transport-Protokolle
- TCP (Transmission Control Protocol): Verbindungsorientiert, zuverlässig, mit Fehlerprüfung und garantierter Zustellung. Verwendet von HTTP, HTTPS, SSH, FTP und den meisten Anwendungsschicht-Protokollen.
- UDP (User Datagram Protocol): Verbindungslos, schneller, aber ohne Zustellungsgarantien. Verwendet von DNS, NTP, DHCP und Streaming-Services.
2. Ports mit netstat überprüfen
Was ist netstat?
netstat (Netzwerkstatistiken) ist ein klassisches Befehlszeilenprogramm, das aktive Netzwerkverbindungen, Routing-Tabellen, Schnittstellenstatistiken und abhörende Ports anzeigt. Obwohl es zugunsten von ss auf modernen Linux-Distributionen offiziell veraltet ist, wird netstat weiterhin häufig eingesetzt – besonders auf älteren Systemen und in Umgebungen, in denen Administratoren mit seiner Syntax vertraut sind.
netstat installieren
netstat ist Teil des net-tools-Pakets, das auf vielen modernen Distributionen nicht mehr standardmäßig installiert ist. Installieren Sie es wie folgt:
Debian / Ubuntu:
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux:
sudo pacman -S net-toolsGrundlegende netstat-Syntax
sudo netstat [options]Alle abhörenden TCP- und UDP-Ports überprüfen
sudo netstat -tulnFlag-Erklärung:
| Flag | Bedeutung |
|---|---|
-t | TCP-Verbindungen und Ports anzeigen |
-u | UDP-Verbindungen und Ports anzeigen |
-l | Nur abhörende Sockets anzeigen (Ports, die auf Verbindungen warten) |
-n | Numerische IP-Adressen und Portnummern anzeigen (DNS-Auflösung für Geschwindigkeit überspringen) |
Beispielausgabe:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Ausgabe lesen:
- Proto — Das verwendete Protokoll (tcp, udp, tcp6, udp6).
- Local Address — Die IP-Adresse und Portnummer, auf der der Dienst abhört.
0.0.0.0bedeutet, dass der Dienst auf allen verfügbaren Schnittstellen abhört;127.0.0.1bedeutet, dass er nur lokal erreichbar ist. - Foreign Address — Die Adresse des Remote-Clients (wird als
0.0.0.0:*für abhörende Ports ohne aktive Verbindung angezeigt). - State — Der Verbindungsstatus (
LISTEN,ESTABLISHED,TIME_WAIT, usw.).
Prozessinformationen einbeziehen
Um zu sehen, welcher Prozess jeden abhörenden Port besitzt, fügen Sie das -p-Flag hinzu:
sudo netstat -tulnpBeispielausgabe mit Prozessinformationen:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Hinweis: Sie müssen diesen Befehl mit sudo ausführen, um Prozessnamen für alle Benutzer zu sehen, nicht nur für Ihre eigenen.
Ausgabe für bestimmte Ports oder Dienste filtern
Verwenden Sie grep, um Ergebnisse auf einen bestimmten Port oder Dienst einzugrenzen:
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Alle aktiven Verbindungen anzeigen (nicht nur abhörende)
Um alle aktiven Verbindungen einschließlich etablierter Verbindungen zu sehen, lassen Sie das -l-Flag weg:
sudo netstat -tunpRouting-Tabelle anzeigen
sudo netstat -rNetzwerkschnittstellenstatistiken anzeigen
sudo netstat -i3. Ports mit ss überprüfen
Was ist ss?
ss (socket statistics) ist der moderne Ersatz für netstat, entwickelt als Teil des iproute2 Pakets. Es kommuniziert direkt mit dem Linux-Kernel über Netlink-Sockets, was es erheblich schneller und effizienter macht als netstat — besonders auf Systemen mit Tausenden gleichzeitiger Verbindungen.
ss ist standardmäßig auf praktisch allen modernen Linux-Distributionen installiert, einschließlich Ubuntu 18.04+, CentOS 7+, Debian 9+ und deren Derivaten.
Grundlegende ss-Syntax
ss [options] [filter]Alle lauschenden TCP- und UDP-Ports überprüfen
ss -tulnDie Flags haben die gleiche Bedeutung wie bei netstat:
| Flag | Bedeutung |
|---|---|
-t | TCP-Sockets anzeigen |
-u | UDP-Sockets anzeigen |
-l | Nur lauschende Sockets anzeigen |
-n | Numerische Adressen anzeigen (keine DNS-Auflösung) |
Beispielausgabe:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*Prozessinformationen einbeziehen
sudo ss -tulnpBeispielausgabe:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Nach Protokoll filtern
Nur lauschende TCP-Ports anzeigen:
ss -tlNur lauschende UDP-Ports anzeigen:
ss -ulAlle TCP-Verbindungen anzeigen (einschließlich etablierter):
ss -tErweitertes Filtern mit ss
Eine der mächtigsten Funktionen von ss ist das integrierte ausdrucksbasierte Filtern, das es ermöglicht, nach Port, Adresse, Status und mehr zu filtern — ohne sich auf grep zu verlassen.
Nach spezifischer Portnummer filtern:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Nach Zielport filtern:
ss -tuln dport = :3306Alle Sockets im ESTABLISHED-Status anzeigen:
ss -t state establishedAlle Sockets im LISTEN-Status anzeigen:
ss -t state listeningNach Quell-IP-Adresse filtern:
ss -tuln src 192.168.1.100Verbindungen zu einem bestimmten Remote-Host anzeigen:
ss -t dst 203.0.113.50Mehrere Filter kombinieren:
ss -t state established '( dport = :443 or sport = :443 )'Socket-Speichernutzung anzeigen
ss kann auch detaillierte Speichernutzung pro Socket anzeigen, was zur Diagnose von Leistungsproblemen nützlich ist:
ss -tmTimer-Informationen anzeigen
ss -toDies zeigt Retransmission-Timer und Keepalive-Timer für TCP-Verbindungen an, was für die Diagnose von Verbindungsstabilitätsproblemen von unschätzbarem Wert ist.
4. netstat vs. ss vergleichen
Beide Tools verfolgen das gleiche grundlegende Ziel, aber es gibt aussagekräftige Unterschiede, die Ihre Wahl leiten sollten:
| Funktion | netstat | ss |
|---|---|---|
| Paket | net-tools (oft nicht vorinstalliert) | iproute2 (auf modernen Distros vorinstalliert) |
| Geschwindigkeit | Langsamer (liest aus /proc/net/) | Schneller (nutzt Netlink-Kernel-Schnittstelle) |
| Leistung bei großem Maßstab | Verschlechtert sich bei Tausenden von Verbindungen | Verarbeitet große Verbindungsmengen effizient |
| Erweiterte Filterung | Erfordert Piping zu grep | Integrierte ausdrucksbasierte Filterung |
| Ausgabedetail | Gut | Detaillierter (Speicher, Timer, etc.) |
| IPv6-Unterstützung | Angemessen | Ausgezeichnet |
| Wartungsstatus | Veraltet | Aktiv gepflegt |
| Lernkurve | Vertraut für langjährige Administratoren | Etwas andere Syntax, aber gut dokumentiert |
Wann netstat verwendet werden sollte
- Bei der Verwaltung älterer Linux-Systeme (CentOS 6, Debian 7, etc.), auf denen
ssmöglicherweise nicht verfügbar ist. - Bei der Arbeit mit Skripten oder Dokumentation, die bereits
netstat-Syntax verwenden. - Wenn Sie sich mit seinem Ausgabeformat wohler fühlen und keine erweiterte Filterung benötigen.
Wann ss verwendet werden sollte
- Auf jeder modernen Linux-Distribution (Ubuntu 18.04+, CentOS 7+, Debian 9+ und neuere).
- Bei der Verwaltung von Servern mit einem hohen Volumen gleichzeitiger Verbindungen – wie solche, die auf Dedicated Servers unter hoher Last laufen.
- Wenn Sie erweiterte Filterung, Timer-Informationen oder Socket-Speicherstatistiken benötigen.
- Für Automatisierung und Scripting, bei dem Leistung wichtig ist.
5. Weitere Tools zur Überprüfung offener Ports
Neben netstat und ss gibt es mehrere andere Dienstprogramme, die für die Portprüfung und Netzwerkanalyse unter Linux nützlich sind.
lsof — List Open Files (Einschließlich Sockets)
lsof (List Open Files) behandelt Netzwerk-Sockets als Dateien (konsistent mit der Linux-Philosophie „alles ist eine Datei”) und kann anzeigen, welcher Prozess einen bestimmten Port offen hat.
lsof installieren:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yÜberprüfen Sie, welcher Prozess Port 80 verwendet:
sudo lsof -i :80Überprüfen Sie, welcher Prozess Port 443 verwendet:
sudo lsof -i :443Alle Netzwerkverbindungen auflisten:
sudo lsof -iAlle TCP-Listening-Sockets auflisten:
sudo lsof -i TCP -s TCP:LISTENBeispielausgabe:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap ist ein leistungsstarkes Netzwerk-Scan-Tool, das für Sicherheitsprüfungen, Netzwerkerkennung und Port-Scanning verwendet wird. Im Gegensatz zu ss und netstat (die das lokale System prüfen) kann nmap sowohl lokale als auch Remote-Hosts scannen.
nmap installieren:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yAlle TCP-Ports auf localhost scannen:
sudo nmap -sT localhostOffene Ports mit Betriebssystemerkennung scannen:
sudo nmap -sT -O localhostEinen bestimmten Portbereich scannen:
sudo nmap -p 1-1024 localhostUDP-Ports scannen (erfordert Root):
sudo nmap -sU localhostEinen Remote-Server scannen:
sudo nmap -sT 203.0.113.50> Wichtig: Scannen Sie nur Systeme, die Sie besitzen oder für die Sie eine ausdrückliche Genehmigung haben. Nicht autorisiertes Port-Scanning kann gegen Gesetze und Nutzungsbedingungen verstoßen.
fuser — Prozesse identifizieren, die Dateien oder Sockets verwenden
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Direkte Kernel-Schnittstelle
Für Skriptingzwecke können Sie Portinformationen direkt aus dem virtuellen Dateisystem des Linux-Kernels lesen:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpBeachten Sie, dass Adressen und Ports in /proc/net/tcp hexadezimal angezeigt werden und eine Konvertierung für menschliche Lesbarkeit erfordern. Tools wie ss und netstat analysieren diese Daten automatisch.
6. Sicherheitsbest Practices für die Verwaltung offener Ports
Zu wissen, wie man offene Ports überprüft, ist nur die halbe Miete. Das Handeln auf der Grundlage dieser Informationen ist das, was Ihren Server sicher hält. Hier sind umsetzbare Best Practices, die jeder Linux-Administrator befolgen sollte:
Prinzip der minimalen Exposition
Geben Sie nur Ports frei, die absolut notwendig sind, damit Ihre Anwendung funktioniert. Jeder offene Port ist ein potenzieller Angriffsvektor. Überprüfen Sie regelmäßig Ihre lauschenden Ports und schließen oder firewallen Sie alles, das nicht öffentlich zugänglich sein muss.
Dienste an spezifische Schnittstellen binden
Vermeiden Sie es, Dienste an 0.0.0.0 (alle Schnittstellen) zu binden, es sei denn, dies ist erforderlich. Beispielsweise sollte ein MySQL-Datenbankserver nur auf 127.0.0.1 lauschen, wenn er nur lokal zugegriffen wird:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Verwenden Sie eine Firewall
Verwenden Sie ufw (Ubuntu) oder firewalld / iptables (CentOS/RHEL), um den Zugriff auf offene Ports nach IP-Adresse, Subnetz oder Netzwerkschnittstelle zu beschränken:
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Regelmäßige Überprüfung lauschender Ports
Planen Sie regelmäßige Port-Audits mit Cron-Jobs oder Überwachungstools. Ein plötzlich neuer lauschender Port kann auf einen kompromittierten Dienst, eine Fehlkonfiguration oder – im schlimmsten Fall – Malware hindeuten:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtSichern Sie Dienste mit SSL/TLS
Jeder Dienst, der dem Internet ausgesetzt ist – Webserver, Mail-Server, Kontrollpanels – sollte verschlüsselte Verbindungen verwenden. Kombinieren Sie Ihre offenen Ports mit gültigen SSL-Zertifikaten, um Daten während der Übertragung zu schützen und Man-in-the-Middle-Angriffe zu verhindern.
Überwachen Sie auf unerwartete Änderungen
Verwenden Sie Intrusion-Detection-Tools wie AIDE, Tripwire oder auditd, um Sie zu benachrichtigen, wenn neue Prozesse auf Ports lauschen. Integrieren Sie mit zentralisiertem Logging (z. B. ELK Stack, Graylog) für umfassende Sichtbarkeit.
Deaktivieren Sie ungenutzte Dienste
Wenn ein Dienst nicht benötigt wird, stoppen Sie ihn und deaktivieren Sie ihn vom Booten:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Schnellreferenz: Nützlichste Befehle
| Aufgabe | netstat Befehl | ss Befehl | |
|---|---|---|---|
| Alle abhörenden TCP/UDP-Ports | sudo netstat -tuln | sudo ss -tuln | |
| Alle abhörenden Ports mit PIDs | sudo netstat -tulnp | sudo ss -tulnp | |
| Nur abhörende TCP-Ports | sudo netstat -tln | sudo ss -tl | |
| Nur abhörende UDP-Ports | sudo netstat -uln | sudo ss -ul | |
| Nach Port 80 filtern | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Alle etablierten Verbindungen | sudo netstat -tunp | sudo ss -t state established | |
| Routing-Tabelle anzeigen | sudo netstat -r | ip route show |
Fazit
Die Überwachung offener und abhörender Ports ist eine grundlegende Fähigkeit für jeden Linux-Systemadministrator oder DevOps-Ingenieur. Ob Sie einen produktiven Webserver sichern, ein Konnektivitätsproblem beheben oder eine routinemäßige Sicherheitsprüfung durchführen – netstat und ss geben Ihnen sofortige, umsetzbare Transparenz über die Netzwerkexposition Ihres Systems.
Zusammenfassung der wichtigsten Erkenntnisse:
- Verwenden Sie
ssals Ihr primäres Tool auf jeder modernen Linux-Distribution – es ist schneller, funktionsreicher und aktiv gepflegt. - Verwenden Sie
netstatbei der Arbeit mit älteren Systemen oder wenn bestehende Skripte und Workflows davon abhängen. - Ergänzen Sie mit
lsofundnmapfür tiefere Inspektionen auf Prozessebene und externe Port-Scans. - Handeln Sie immer nach Ihren Erkenntnissen – schließen Sie unnötige Ports, binden Sie Services an die richtigen Schnittstellen und erzwingen Sie Firewall-Regeln.
- Sichern Sie exponierte Services mit ordnungsgemäßen SSL-Zertifikaten und Zugriffskontrolle.
Wenn Sie eine Hosting-Umgebung suchen, die Ihnen vollständigen Root-Zugriff für die Implementierung dieser Sicherheitspraktiken bietet, bieten AlexHost’s VPS-Hosting-Pläne vollständige Kontrolle über Ihre Linux-Serverkonfiguration – einschließlich Firewall-Verwaltung, Service-Härtung und Netzwerküberwachung. Für Teams, die maximale Leistung und dedizierte Ressourcen benötigen, liefern unsere Dedicated Server die rohe Leistung und Isolation, die für Enterprise-grade-Sicherheitsvorgänge erforderlich sind. Und wenn Sie eine verwaltete Umgebung mit einer vertrauten Benutzeroberfläche bevorzugen, erkunden Sie unsere VPS mit cPanel-Optionen für optimierte Serververwaltung ohne Kontrollverlust.
Regelmäßige Port-Audits in Kombination mit einer gehärteten Serverkonfiguration sind eine der wirksamsten Verteidigungsmaßnahmen gegen unbefugten Zugriff und Datenverletzungen. Machen Sie es zu einem regelmäßigen Teil Ihrer Systemadministrationspraxis.
bei allen Hosting-Diensten