Ü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 wichtigsten 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 stark frequentierte 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 beiden am weitesten verbreiteten Befehlszeilenwerkzeugen zur Port-Inspektion unter Linux – zusammen mit ergänzenden Tools und bewährten Praktiken aus der Praxis.
Inhaltsverzeichnis
- Ports und ihre Typen verstehen
- Ports mit netstat überprüfen
- Ports mit ss überprüfen
- Vergleich netstat vs. ss
- Weitere Tools zur Überprüfung offener Ports
- Sicherheitsbest Practices für die Verwaltung offener Ports
- Fazit
1. Ports und ihre Typen verstehen {#understanding-ports}
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 Dienst auf einem Host verbunden ist. Ports ermöglichen es einem einzelnen Server mit einer IP-Adresse, mehrere Netzwerkdienste 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-Systemdienste (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 Dienst wartet aktiv auf eingehende Verbindungen.
- ESTABLISHED – Eine aktive Verbindung besteht 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. Wird von HTTP, HTTPS, SSH, FTP und den meisten Anwendungsschicht-Protokollen verwendet.
- UDP (User Datagram Protocol): Verbindungslos, schneller, aber ohne Zustellungsgarantien. Wird von DNS, NTP, DHCP und Streaming-Diensten verwendet.
2. Ports mit netstat überprüfen {#netstat}
Was ist netstat?
netstat (Netzwerkstatistiken) ist ein klassisches Befehlszeilenprogramm, das aktive Netzwerkverbindungen, Routing-Tabellen, Schnittstellenstatistiken und abhörende Ports anzeigt. Obwohl es auf modernen Linux-Distributionen offiziell zugunsten von ss veraltet ist, bleibt netstat weit verbreitet – besonders auf Legacy-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 überspringen für Geschwindigkeit) |
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:*Die 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 zugänglich ist. - Foreign Address – Die Adresse des Remote-Clients (für abhörende Ports ohne aktive Verbindung als
0.0.0.0:*angezeigt). - State – Der Verbindungszustand (
LISTEN,ESTABLISHED,TIME_WAIT, etc.).
Prozessinformationen einschließen
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 die 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 zu sehen, lassen Sie das -l-Flag weg:
sudo netstat -tunpRouting-Tabelle anzeigen
sudo netstat -rNetzwerk-Schnittstellenstatistiken anzeigen
sudo netstat -i3. Ports mit ss überprüfen {#ss}
Was ist ss?
ss (Socket-Statistiken) 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 auf praktisch allen modernen Linux-Distributionen standardmäßig installiert, einschließlich Ubuntu 18.04+, CentOS 7+, Debian 9+ und deren Derivaten.
Grundlegende ss-Syntax
ss [options] [filter]Alle abhörenden 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 abhörende 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 einschließen
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 abhörende TCP-Ports anzeigen:
ss -tlNur abhörende UDP-Ports anzeigen:
ss -ulAlle TCP-Verbindungen anzeigen (einschließlich etablierter):
ss -tErweiterte Filterung mit ss
Eines der mächtigsten Features von ss ist seine integrierte ausdrucksbasierte Filterung, die es Ihnen ermöglicht, nach Port, Adresse, Zustand und mehr zu filtern – ohne sich auf grep verlassen zu müssen.
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-Zustand anzeigen:
ss -t state establishedAlle Sockets im LISTEN-Zustand 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, was für die Diagnose von Verbindungsstabilitätsproblemen von unschätzbarem Wert ist.
4. Vergleich netstat vs. ss {#comparison}
Beide Tools erreichen das gleiche grundlegende Ziel, aber es gibt aussagekräftige Unterschiede, die Ihre Wahl leiten sollten:
| Feature | netstat | ss |
|---|---|---|
| Paket | net-tools (oft nicht vorinstalliert) | iproute2 (auf modernen Distributionen vorinstalliert) |
| Geschwindigkeit | Langsamer (liest aus /proc/net/) | Schneller (verwendet Netlink-Kernel-Schnittstelle) |
| Leistung bei großem Umfang | 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 verwenden
- 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 Dokumentationen, die bereits
netstat-Syntax verwenden. - Wenn Sie sich mit seinem Ausgabeformat wohler fühlen und keine erweiterte Filterung benötigen.
Wann ss verwenden
- Auf jeder modernen Linux-Distribution (Ubuntu 18.04+, CentOS 7+, Debian 9+ und neuere).
- Bei der Verwaltung von Servern mit hohem 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, wo Leistung wichtig ist.
5. Weitere Tools zur Überprüfung offener Ports {#other-tools}
Neben netstat und ss sind mehrere andere Dienstprogramme für Port-Inspektion und Netzwerkanalyse unter Linux nützlich.
lsof – List Open Files (einschließlich Sockets)
lsof (List Open Files) behandelt Netzwerk-Sockets als Dateien (konsistent mit Linux’s „alles ist eine Datei”-Philosophie) 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, welcher Prozess Port 80 verwendet:
sudo lsof -i :80Überprüfen, welcher Prozess Port 443 verwendet:
sudo lsof -i :443Alle Netzwerkverbindungen auflisten:
sudo lsof -iAlle TCP-abhörenden 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-Scanning-Tool, das für Sicherheitsaudits, Netzwerkerkennung und Port-Scanning verwendet wird. Im Gegensatz zu ss und netstat (die das lokale System inspizieren), 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 localhostNach offenen Ports mit OS-Erkennung scannen:
sudo nmap -sT -O localhostEinen bestimmten Port-Bereich 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 explizite Genehmigung haben. Unbefugtes 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 Scripting-Zwecke können Sie Port-Informationen 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 für menschliche Lesbarkeit konvertiert werden müssen. Tools wie ss und netstat analysieren diese Daten automatisch.
6. Sicherheitsbest Practices für die Verwaltung offener Ports {#security}
Zu wissen, wie man offene Ports überprüft, ist nur die halbe Miete. Das Handeln nach diesen Informationen ist das, was Ihren Server sicher hält. Hier sind umsetzbare Best Practices, die jeder Linux-Administrator befolgen sollte:
Prinzip der minimalen Exposition
Exponieren Sie nur Ports, die absolut notwendig sind, damit Ihre Anwendung funktioniert. Jeder offene Port ist ein potenzieller Angriffsvektor. Überprüfen Sie regelmäßig Ihre abhörenden Ports und schließen oder firewallen Sie alles, das nicht öffentlich zugänglich sein muss.
Dienste an bestimmte Schnittstellen binden
Vermeiden Sie das Binden von Diensten an 0.0.0.0 (alle Schnittstellen), sofern nicht erforderlich. Beispielsweise sollte ein MySQL-Datenbankserver nur auf 127.0.0.1 abhören, wenn er nur lokal zugegriffen wird:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Eine Firewall verwenden
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äßig abhörende Ports überprüfen
Planen Sie regelmäßige Port-Audits mit Cron-Jobs oder Monitoring-Tools. Ein plötzlich neuer abhörender 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).txtDienste mit SSL/TLS sichern
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-Zert
