Zum Hauptinhalt springen
Zurück zur Kategorie

Port-Zugriffsprobleme: Firewall- und Dienstprüfung

Anleitung zur Diagnose von Port-Zugriffsproblemen mit netstat, ss, iptables, ufw und Dienstüberwachung.

Lesezeit: 13 min Fehlerbehebung
PortFirewallnetstatssiptablesufwDienst

Inhaltsverzeichnis

Einführung

Wenn Sie von außen nicht auf einen Dienst zugreifen können, der auf Ihrem Server läuft, liegt dies in der Regel an Port-Zugriffsproblemen. In dieser Anleitung erklären wir Ihnen ausführlich die Werkzeuge und Methoden zur systematischen Diagnose und Behebung von Port-Zugriffsproblemen.

Port-Status prüfen

Port-Prüfung mit dem ss-Befehl

Der ss-Befehl wird auf modernen Linux-Systemen zur Anzeige von Socket-Statistiken verwendet:

hljs bash
# Alle lauschenden TCP-Ports auflisten
ss -tlnp

# Alle lauschenden UDP-Ports auflisten
ss -ulnp

# Bestimmten Port prüfen
ss -tlnp | grep :80
ss -tlnp | grep :443
ss -tlnp | grep :3306

# Alle Verbindungen anzeigen (lauschend + verbunden)
ss -tanp

# Detaillierte Socket-Informationen
ss -tlnp -e

ss-Ausgabe interpretieren

hljs bash
# Beispielausgabe:
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       128     0.0.0.0:22          0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
LISTEN  0       511     0.0.0.0:80          0.0.0.0:*          users:(("nginx",pid=5678,fd=6))
LISTEN  0       128     127.0.0.1:3306      0.0.0.0:*          users:(("mysqld",pid=9012,fd=22))
FeldBeschreibung
State LISTENPort lauscht aktiv
0.0.0.0:portVon allen Schnittstellen erreichbar
127.0.0.1:portNur von localhost erreichbar
ProcessProzessinformation des lauschenden Dienstes

Wenn ein Dienst auf 127.0.0.1 lauscht, ist er von außen nicht erreichbar. Sie müssen die bind-address- oder listen-Direktive in der Dienstkonfiguration auf 0.0.0.0 ändern.

netstat-Befehl (ältere Systeme)

hljs bash
# Alle lauschenden Ports auflisten
netstat -tlnp

# Alle Ports einschließlich UDP
netstat -tulnp

# Bestimmten Port prüfen
netstat -tlnp | grep :8080

# Verbindungsanzahl anzeigen
netstat -an | grep :80 | wc -l

Firewall-Prüfung

Prüfung mit iptables

hljs bash
# Alle Regeln auflisten
sudo iptables -L -n -v

# INPUT-Kette prüfen
sudo iptables -L INPUT -n -v --line-numbers

# NAT-Tabelle prüfen
sudo iptables -t nat -L -n -v

# Nach Regeln für bestimmten Port suchen
sudo iptables -L -n -v | grep 80

Ports mit iptables öffnen

hljs bash
# TCP-Port 80 öffnen
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# TCP-Port 443 öffnen
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Port-Zugriff von bestimmter IP
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT

# Port-Bereich öffnen
sudo iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT

# Regeln speichern
sudo iptables-save > /etc/iptables/rules.v4
sudo netfilter-persistent save

UFW (Uncomplicated Firewall)

hljs bash
# UFW-Status prüfen
sudo ufw status verbose

# Nummerierte Regeln auflisten
sudo ufw status numbered

# Ports öffnen
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp

# Port-Zugriff von bestimmter IP
sudo ufw allow from 192.168.1.100 to any port 3306

# Port-Bereich öffnen
sudo ufw allow 8000:9000/tcp

# Regel löschen
sudo ufw delete allow 8080/tcp

# UFW aktivieren
sudo ufw enable

# UFW neu laden
sudo ufw reload

firewalld

hljs bash
# Aktive Zone prüfen
sudo firewall-cmd --get-active-zones

# Alle Regeln auflisten
sudo firewall-cmd --list-all

# Port öffnen (temporär)
sudo firewall-cmd --add-port=80/tcp

# Port öffnen (permanent)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

Dienst-Lausch-Konfiguration

Nginx

hljs nginx
server {
    listen 80;              # Auf allen Schnittstellen lauschen
    listen [::]:80;         # Einschließlich IPv6
    server_name example.com;
}

MySQL/MariaDB

hljs ini
[mysqld]
bind-address = 0.0.0.0    # Auf allen Schnittstellen lauschen
# bind-address = 127.0.0.1  # Nur localhost (Standard, sicher)
port = 3306

PostgreSQL

hljs ini
listen_addresses = '*'    # Alle Schnittstellen
port = 5432

Redis

hljs ini
bind 0.0.0.0
port 6379
protected-mode yes
requirepass STARKES_PASSWORT

Verwenden Sie beim Freigeben von Datenbank- und Cache-Diensten nach außen immer starke Passwörter und IP-Beschränkungen.

Externer Port-Test

hljs bash
# Remote-Port-Test vom lokalen Rechner
nc -zv SERVER_IP 80
nc -zv SERVER_IP 443

# Detaillierter Port-Scan mit nmap
nmap -p 80,443,3306,5432,6379 SERVER_IP

# Dienstversionserkennung
nmap -sV -p 80,443 SERVER_IP

# HTTP-Port-Test mit curl
curl -I http://SERVER_IP:80

REXE Path Panel Integration

Auf REXE-Servern sind alle Ports offen, solange eine IP keine einzige Regel hat. Sobald Ihre IP mindestens eine Regel hat, wird automatisch Default Block aktiviert und nur die erlaubten Ports bleiben offen. Um externen Zugriff auf Ihren Dienst zu ermöglichen, müssen Sie eine Filterregel für den entsprechenden Port im Path Panel erstellen:

1. Melden Sie sich im Path Panel an (x.rexe.tr)
2. Klicken Sie auf die entsprechende IP-Adresse
3. Klicken Sie auf "Neue Regel hinzufügen"
4. Protokoll: TCP (oder UDP)
5. Richtung: Symmetric (bidirektional)
6. Zielport: Der Port, den Sie öffnen möchten
7. Aktion: Allow
8. Speichern Sie die Regel und warten Sie auf den propagated-Status

Auch wenn die Regel im Panel noch als nicht verteilt (nicht aktualisiert) angezeigt wird, wurde die Regel höchstwahrscheinlich bereits innerhalb von 2-5 Minuten ausgerollt. Der Status kann sich verzögert aktualisieren – etwa wegen des Statusabfrage-Intervalls des Panels oder der Zeit, die die Regel benötigt, um auf der Path-Seite auf allen Nodes (außer unserem) angewendet zu werden. Dies ist nur eine visuelle Verzögerung im Panel; der Port ist im System tatsächlich bereits geöffnet.

Fehlerbehebungs-Skript

hljs bash
#!/bin/bash
PORT=$1
SERVER_IP=$2

if [ -z "$PORT" ] || [ -z "$SERVER_IP" ]; then
    echo "Verwendung: $0 <port> <server_ip>"
    exit 1
fi

echo "=== Port $PORT Zugriffsprüfung ==="

echo -e "\n[1] Dienst-Lausch-Prüfung:"
ss -tlnp | grep ":$PORT" || echo "Port $PORT lauscht nicht!"

echo -e "\n[2] Firewall-Prüfung:"
if command -v ufw &> /dev/null; then
    sudo ufw status | grep "$PORT"
else
    sudo iptables -L -n | grep "$PORT"
fi

echo -e "\n[3] Externer Zugriffstest:"
nc -zv -w 5 $SERVER_IP $PORT 2>&1

echo -e "\n=== Prüfung abgeschlossen ==="

Häufige Probleme und Lösungen

ProblemUrsacheLösung
Port lauscht nichtDienst läuft nichtsystemctl start dienstname
Lauscht auf 127.0.0.1Bind-Adresse ist localhostIn Konfiguration auf 0.0.0.0 ändern
Firewall blockiertKeine Port-RegelPort mit iptables/ufw/firewalld öffnen
Path Panel blockiertKeine FilterregelRegel im Path Panel erstellen
Connection refusedDienst-Port geändertDienstkonfiguration prüfen

Fazit

Um Port-Zugriffsprobleme zu lösen, müssen Sie eine dreischichtige Prüfung durchführen: Dienst-Lausch-Status, Server-Firewall-Regeln und REXE Path Panel-Regeln. Stellen Sie zunächst sicher, dass der Dienst auf dem richtigen Port und der richtigen Schnittstelle lauscht, prüfen Sie dann die Firewall-Regeln und erstellen Sie schließlich die erforderlichen Regeln im Path Panel.