15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
30.10.2024

Ü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

  1. Ports und ihre Typen verstehen
  2. Ports mit netstat überprüfen
  3. Ports mit ss überprüfen
  4. Vergleich netstat vs. ss
  5. Weitere Tools zur Überprüfung offener Ports
  6. Sicherheitsbest Practices für die Verwaltung offener Ports
  7. 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

BereichKategorieBeschreibung
0–1023Well-Known PortsReserviert für Standard-Systemdienste (HTTP, SSH, FTP, etc.)
1024–49151Registered PortsVerwendet von Anwendungen und Middleware (MySQL, PostgreSQL, etc.)
49152–65535Dynamic/Ephemeral PortsTemporä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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux:

sudo pacman -S net-tools

Grundlegende netstat-Syntax

sudo netstat [options]

Alle abhörenden TCP- und UDP-Ports überprüfen

sudo netstat -tuln

Flag-Erklärung:

FlagBedeutung
-tTCP-Verbindungen und Ports anzeigen
-uUDP-Verbindungen und Ports anzeigen
-lNur abhörende Sockets anzeigen (Ports, die auf Verbindungen warten)
-nNumerische 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.0 bedeutet, dass der Dienst auf allen verfügbaren Schnittstellen abhört; 127.0.0.1 bedeutet, 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 -tulnp

Beispielausgabe 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 -tunp

Routing-Tabelle anzeigen

sudo netstat -r

Netzwerk-Schnittstellenstatistiken anzeigen

sudo netstat -i

3. 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 -tuln

Die Flags haben die gleiche Bedeutung wie bei netstat:

FlagBedeutung
-tTCP-Sockets anzeigen
-uUDP-Sockets anzeigen
-lNur abhörende Sockets anzeigen
-nNumerische 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 -tulnp

Beispielausgabe:

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 -tl

Nur abhörende UDP-Ports anzeigen:

ss -ul

Alle TCP-Verbindungen anzeigen (einschließlich etablierter):

ss -t

Erweiterte 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 = :22

Nach Zielport filtern:

ss -tuln dport = :3306

Alle Sockets im ESTABLISHED-Zustand anzeigen:

ss -t state established

Alle Sockets im LISTEN-Zustand anzeigen:

ss -t state listening

Nach Quell-IP-Adresse filtern:

ss -tuln src 192.168.1.100

Verbindungen zu einem bestimmten Remote-Host anzeigen:

ss -t dst 203.0.113.50

Mehrere 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 -tm

Timer-Informationen anzeigen

ss -to

Dies 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:

Featurenetstatss
Paketnet-tools (oft nicht vorinstalliert)iproute2 (auf modernen Distributionen vorinstalliert)
GeschwindigkeitLangsamer (liest aus /proc/net/)Schneller (verwendet Netlink-Kernel-Schnittstelle)
Leistung bei großem UmfangVerschlechtert sich bei Tausenden von VerbindungenVerarbeitet große Verbindungsmengen effizient
Erweiterte FilterungErfordert Piping zu grepIntegrierte ausdrucksbasierte Filterung
AusgabedetailGutDetaillierter (Speicher, Timer, etc.)
IPv6-UnterstützungAngemessenAusgezeichnet
WartungsstatusVeraltetAktiv gepflegt
LernkurveVertraut für langjährige AdministratorenEtwas andere Syntax, aber gut dokumentiert

Wann netstat verwenden

  • Bei der Verwaltung älterer Linux-Systeme (CentOS 6, Debian 7, etc.), auf denen ss mö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 :443

Alle Netzwerkverbindungen auflisten:

sudo lsof -i

Alle TCP-abhörenden Sockets auflisten:

sudo lsof -i TCP -s TCP:LISTEN

Beispielausgabe:

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 -y

Alle TCP-Ports auf localhost scannen:

sudo nmap -sT localhost

Nach offenen Ports mit OS-Erkennung scannen:

sudo nmap -sT -O localhost

Einen bestimmten Port-Bereich scannen:

sudo nmap -p 1-1024 localhost

UDP-Ports scannen (erfordert root):

sudo nmap -sU localhost

Einen 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/udp

Beachten 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.1

Eine 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 22

Regelmäß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).txt

Dienste 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

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen