Beim Arbeiten mit Netzwerken unter Linux kann es notwendig sein, einen Netzwerkport zu öffnen oder zu schließen. Das Port-Management ist ein wesentlicher Bestandteil der Sicherheit: Je weniger Ports in einem System geöffnet sind, desto weniger potenzielle Angriffsvektoren gibt es. Außerdem kann ein Angreifer keine Informationen über den Dienst auf einem bestimmten Port sammeln, wenn dieser geschlossen ist.
In dieser Anleitung wird erklärt, wie du Ports öffnen oder schließen kannst und wie du offene Ports unter Linux-Distributionen wie Ubuntu/Debian und CentOS/RHEL mit Firewalls wie ufw, firewalld und iptables überprüfst.
Wir demonstrieren diesen Prozess anhand von zwei Linux-Distributionen: Ubuntu 22.04 und CentOS 9, die auf einem Hostman VPS ausgeführt werden. Alle hier aufgeführten Befehle funktionieren auf allen Debian- oder RHEL-basierten Distributionen.
Ports werden verwendet, um auf bestimmte Anwendungen und Protokolle zuzugreifen. Ein Server kann beispielsweise sowohl einen Webserver als auch eine Datenbank hosten – Ports leiten den Datenverkehr an den entsprechenden Dienst weiter. Technisch gesehen ist ein Netzwerkport eine nichtnegative Ganzzahl im Bereich von 0 bis 65535.
Reservierte Ports (0–1023): Werden von bekannten Protokollen und Netzwerkdiensten wie SSH (Port 22), FTP (Port 21), HTTP (Port 80) und HTTPS (Port 443) verwendet.
Registrierte Ports (1024–49151): Können von bestimmten Anwendungen für die Kommunikation verwendet werden.
Auf Debian-basierten Systemen (Ubuntu, Debian, Linux Mint usw.) kannst du ufw
(Uncomplicated Firewall) verwenden.
ufw
ist auf den meisten APT-basierten Distributionen bereits vorinstalliert. Überprüfe die Installation mit:
ufw version
Wenn eine Versionsnummer angezeigt wird, ist ufw installiert. Andernfalls installiere es mit:
apt update && apt -y install ufw
Standardmäßig ist ufw
inaktiv, was bedeutet, dass alle Ports geöffnet sind. Den Status kannst du mit folgendem Befehl prüfen:
ufw status
Um ufw zu aktivieren:
ufw enable
Du musst die Aktivierung mit y
bestätigen. Beachte, dass das Aktivieren von ufw
aktive SSH-Verbindungen unterbrechen kann. Standardmäßig blockiert ufw
allen eingehenden Verkehr und erlaubt allen ausgehenden Verkehr.
Überprüfe die Standardrichtlinie mit:
cat /etc/default/ufw
Um einen Port zu öffnen:
ufw allow <port_number>
Beispiel – Port 22 für SSH öffnen:
ufw allow 22
Mehrere Ports kannst du mit Kommas trennen und das Protokoll angeben (tcp
oder udp
):
ufw allow 80,443,8081,8443/tcp
ufw allow 80,443,8081,8443/udp
Anstelle von Portnummern kannst du auch den Dienstnamen verwenden (wie in /etc/services definiert
).
Beispiel – Telnet (Port 23) öffnen:
ufw allow telnet
Hinweis: Mehrere Dienstnamen können nicht gleichzeitig angegeben werden, sonst gibt ufw
einen Fehler aus:
Um einen Portbereich zu öffnen:
ufw allow <start_port>:<end_port>/<protocol>
Beispiel:
ufw allow 8000:8080/tcp
Um einen Port zu schließen:
ufw deny <port_number>
Beispiel – Port 80 schließen:
ufw deny 80
Auch hier kannst du statt der Portnummer den Dienstnamen verwenden. Beispiel – Port 21 (FTP) schließen:
ufw deny ftp
Um alle offenen und geschlossenen Ports im System aufzulisten:
ufw status
Oder eine detailliertere Ansicht:
ufw status verbose
RHEL-basierte Distributionen (CentOS 7+, RHEL 7+, Fedora 18+, OpenSUSE 15+) verwenden standardmäßig firewalld.
Überprüfe, ob firewalld
installiert ist:
firewall-offline-cmd -V
Wenn eine Version angezeigt wird, ist firewalld
installiert. Andernfalls installiere es:
dnf install firewalld
Standardmäßig ist firewalld
deaktiviert. Status prüfen:
firewall-cmd --state
Zum Aktivieren:
systemctl start firewalld
Port 8080 für das TCP-Protokoll öffnen:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
--zone=public
: Gibt die Zone an, für die die Regel gilt.--add-port=8080/tcp
: Gibt Port und Protokoll an.--permanent
: Speichert die Regel dauerhaft (überlebt Neustarts).Alternativ kannst du auch einen Dienstnamen angeben, z. B. HTTP (Port 80):
firewall-cmd --zone=public --add-service=http --permanent
Änderungen übernehmen:
firewall-cmd --reload
Um einen Port zu schließen (nach Nummer):
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Oder nach Dienstname:
firewall-cmd --zone=public --remove-service=http --permanent
Danach immer neu laden:
firewall-cmd --reload
Alle offenen Ports anzeigen:
firewall-cmd --list-ports
Im Gegensatz zu ufw
und firewalld
ist iptables
bei vielen Distributionen (Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux) bereits vorinstalliert.
Um Port 8182 für eingehende Verbindungen zu öffnen:
iptables -A INPUT -p tcp --dport 8182 -j ACCEPT
-A INPUT
: Fügt eine Regel zur Eingabekette hinzu.-p tcp
: Gibt das Protokoll an.--dport 8182
: Gibt den zu öffnenden Port an.-j ACCEPT
: Erlaubt Verkehr durch diesen Port.Für ausgehende Verbindungen:
iptables -A OUTPUT -p tcp --dport 8182 -j ACCEPT
Um einen Portbereich zu öffnen:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j ACCEPT
Um einen Port zu schließen:
iptables -A INPUT -p tcp --dport 8182 -j DROP
Portbereich schließen:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j DROP
Standardmäßig gehen iptables
-Regeln nach einem Neustart verloren. Um sie dauerhaft zu speichern, installiere iptables
-persistent:
Für APT-basierte Systeme:
apt update && apt -y install iptables-persistent
Für DNF-basierte Systeme:
dnf -y install iptables-persistent
Regeln speichern:
iptables-save
Nach dem nächsten Neustart werden die Regeln automatisch geladen.
Alle aktuellen Regeln und offenen Ports auflisten:
iptables -L -v -n
Nur IPv4-Regeln anzeigen:
iptables -S
Nur IPv6-Regeln anzeigen:
ip6tables -S
In dieser Anleitung haben wir gezeigt, wie man Netzwerkports unter Linux öffnet und schließt und wie man aktuell offene Ports mit drei verschiedenen Tools überprüft: ufw
, firewalld
und iptables
. Eine korrekte Verwaltung von Ports verringert das Risiko potenzieller Netzwerkangriffe und hilft, Informationen über die auf diesen Ports laufenden Dienste zu verbergen.