15%

15% auf alle Hosting-Dienste sparen

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

Benutze den Code:

Skills
Anfangen
01.11.2024

Wie man eine Firewall mit Firewalld unter Linux konfiguriert (Vollständiger Leitfaden)

Die Sicherung Ihres Linux-Servers gegen unbefugten Zugriff und böswilligen Datenverkehr ist nicht optional — sie ist eine grundlegende Verantwortung für jeden Systemadministrator. Egal ob Sie ein persönliches Projekt, eine Geschäftsanwendung oder einen produktiven Webserver betreiben, eine ordnungsgemäß konfigurierte Firewall ist Ihre erste und kritischste Verteidigungslinie. Firewalld ist eines der leistungsstärksten und flexibelsten Firewall-Management-Tools unter Linux und bietet dynamische Regelverwaltung, zonenbasierte Datenverkehrskontrolle und umfangreiche Regelunterstützung — alles ohne dass ein vollständiger Service-Neustart erforderlich ist, wenn Änderungen angewendet werden.

Dieser umfassende Leitfaden führt Sie durch alles, was Sie wissen müssen: Installation von Firewalld, Verständnis von Zonen, Verwaltung von Diensten und Ports, Schreiben von Rich Rules und Echtzeit-Überwachung Ihrer Firewall. Wenn Sie auf einem VPS oder Dedicated Server von AlexHost hosten, hilft Ihnen dieser Leitfaden, Ihre Umgebung zu sichern und eine starke, adaptive Sicherheitslage zu bewahren.

Was ist Firewalld und warum sollten Sie es verwenden?

Firewalld ist ein dynamischer Firewall-Management-Daemon, der auf den meisten großen Linux-Distributionen verfügbar ist, einschließlich CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux und zunehmend auch auf Debian und Ubuntu. Im Gegensatz zum älteren iptables Ansatz — bei dem jede Regeländerung das Leeren und Neuladen des gesamten Regelsatzes erforderte — wendet Firewalld Änderungen dynamisch zur Laufzeit an, ohne aktive Verbindungen zu unterbrechen.

Wichtigste Vorteile von Firewalld

  • Zonenbasierte Architektur — weisen Sie verschiedenen Netzwerkschnittstellen oder IP-Bereichen unterschiedliche Vertrauensstufen zu
  • Dynamische Regelaktualisierungen — wenden Sie Änderungen an, ohne die Firewall neu zu starten oder bestehende Verbindungen zu unterbrechen
  • Service-Abstraktion — verwalten Sie Datenverkehr nach Dienstnamen (z. B. http, ssh) statt nach rohen Portnummern
  • Rich Rules — schreiben Sie komplexe, bedingte Regeln für spezifische IPs, Protokolle und Aktionen
  • D-Bus-Integration — ermöglicht anderen Anwendungen und Diensten, programmgesteuert mit der Firewall zu interagieren
  • IPv4- und IPv6-Unterstützung — verwalten Sie beide Protokollfamilien über eine einzige Schnittstelle

Voraussetzungen

Stellen Sie vor dem Fortfahren sicher, dass Sie folgendes haben:

  • Einen Linux-Server mit CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian oder Ubuntu
  • Root- oder sudo Zugriff auf den Server
  • Grundlegende Kenntnisse von Linux-Terminal-Befehlen
  • Eine aktive SSH-Sitzung (halten Sie diese während der gesamten Änderung der Firewall-Regeln offen)

> Kritische Warnung: Stellen Sie immer sicher, dass SSH (standardmäßig Port 22) in Ihren Firewall-Regeln explizit erlaubt ist, bevor Sie Firewalld aktivieren. Sich selbst aus einem Remote-Server auszusperren ist ein häufiger und vermeidbarer Fehler.

Schritt 1: Installation von Firewalld

Firewalld ist in den Standard-Repositories der meisten großen Linux-Distributionen enthalten. Verwenden Sie den entsprechenden Paketmanager für Ihr System.

Auf CentOS / RHEL / Rocky Linux / AlmaLinux

sudo yum install firewalld -y

Oder auf neueren Versionen mit DNF:

sudo dnf install firewalld -y

Auf Fedora

sudo dnf install firewalld -y

Auf Debian / Ubuntu

Obwohl Firewalld am häufigsten mit RHEL-basierten Systemen verbunden ist, wird es vollständig auf Debian-basierten Distributionen unterstützt:

sudo apt update
sudo apt install firewalld -y

> Hinweis für Ubuntu/Debian-Benutzer: Wenn ufw derzeit auf Ihrem System aktiv ist, deaktivieren Sie es vor der Aktivierung von Firewalld, um Konflikte zu vermeiden:

> “`bash

> sudo ufw disable

> “`

Schritt 2: Starten und Aktivieren von Firewalld

Starten Sie nach der Installation den Firewalld-Dienst und konfigurieren Sie ihn so, dass er beim Systemstart automatisch gestartet wird:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Überprüfen Sie, dass der Dienst ordnungsgemäß läuft:

sudo systemctl status firewalld

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since ...

Wenn der Status active (running) anzeigt, ist Firewalld betriebsbereit und kann konfiguriert werden.

Schritt 3: Verständnis von Firewalld-Zonen

Das zonenbasierte Modell ist der Eckpfeiler der Firewalld-Architektur. Eine Zone definiert eine Vertrauensstufe für eine Netzwerkverbindung oder Schnittstelle. Jede Zone enthält ihre eigenen Regeln, die bestimmen, welcher Datenverkehr erlaubt oder blockiert wird.

Integrierte Firewalld-Zonen

ZoneVertrauensstufeTypischer Anwendungsfall
dropNiedrigsteAlle eingehenden Verbindungen werden ohne Antwort verworfen
blockSehr niedrigEingehende Verbindungen werden mit einer ICMP-Nachricht abgelehnt
publicNiedrigStandardzone für nicht vertrauenswürdige öffentliche Netzwerke
externalNiedrigFür externe Schnittstellen mit NAT-Masquerading
dmzMittelServer, die von außen erreichbar sind, aber intern isoliert
workMittel-HochArbeitsnetzwerke mit moderatem Vertrauen
homeHochHeimnetzwerke, in denen andere Hosts vertraut werden
internalHochInterne Netzwerke, ähnlich wie Heimnetzwerke
trustedHöchsteAlle Verbindungen werden akzeptiert

Überprüfen Sie die aktuelle Standardzone

sudo firewall-cmd --get-default-zone

Alle verfügbaren Zonen auflisten

sudo firewall-cmd --get-zones

Aktive Zonen und ihre Schnittstellen anzeigen

sudo firewall-cmd --get-active-zones

Beispielausgabe:

public
  interfaces: eth0

Schritt 4: Ändern der Standardzone

Beispiel 1 — Festlegen der Standardzone auf public (Empfohlen für VPS/Dedicated Server)

Für die meisten internetgestützten Server ist public die geeignete Standardzone. Sie wendet eine konservative Vertrauensstufe an und erlaubt nur explizit zulässigen Datenverkehr:

sudo firewall-cmd --set-default-zone=public

Überprüfen Sie die Änderung:

sudo firewall-cmd --get-default-zone

Erwartete Ausgabe:

public

Beispiel 2 — Festlegen der Standardzone auf home

Wenn Ihr Server in einem vertrauenswürdigen privaten Netzwerk betrieben wird (z. B. ein Home Lab oder interne Entwicklungsumgebung), ermöglicht die home Zone eine permissivere Kommunikation zwischen vertrauenswürdigen Hosts:

sudo firewall-cmd --set-default-zone=home

Überprüfen Sie:

sudo firewall-cmd --get-default-zone

Erwartete Ausgabe:

home

Beispiel 3 — Festlegen der Standardzone auf work

Für Server in einem Unternehmens- oder Arbeitsnetzwerk, in dem moderates Vertrauen angemessen ist:

sudo firewall-cmd --set-default-zone=work

Überprüfen Sie:

sudo firewall-cmd --get-default-zone

Erwartete Ausgabe:

work

Schritt 5: Verwaltung von Diensten mit Firewalld

Firewalld enthält eine Bibliothek vordefinierter Service-Definitionen, die Service-Namen ihren entsprechenden Ports und Protokollen zuordnen. Dies macht es viel einfacher, Regeln nach Absicht statt nach rohen Portnummern zu verwalten.

Alle vordefinierten Dienste auflisten

sudo firewall-cmd --get-services

Einen Dienst in einer Zone erlauben

Um HTTP-Datenverkehr (Port 80/TCP) in der public Zone dauerhaft zu erlauben:

sudo firewall-cmd --zone=public --add-service=http --permanent

Um HTTPS-Datenverkehr (Port 443/TCP) zu erlauben:

sudo firewall-cmd --zone=public --add-service=https --permanent

Um SSH (Port 22/TCP) zu erlauben — stellen Sie immer sicher, dass dies erlaubt ist, bevor Sie andere Änderungen vornehmen:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Änderungen durch Neuladen von Firewalld anwenden

Das --permanent Flag schreibt die Regel in die persistente Konfiguration, wendet sie aber nicht sofort auf die laufende Firewall an. Laden Sie immer nach permanenten Änderungen neu:

sudo firewall-cmd --reload

Dienste in einer Zone überprüfen

sudo firewall-cmd --zone=public --list-services

Beispielausgabe:

dhcpv6-client http https ssh

Einen Dienst aus einer Zone entfernen

Um HTTPS aus der public Zone zu entfernen:

sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reload

Schritt 6: Direkte Verwaltung von Ports

In Fällen, in denen ein Dienst keine vordefinierte Firewalld-Definition hat, können Sie spezifische Ports direkt öffnen oder schließen.

Einen bestimmten Port öffnen

Um Port 8080 über TCP in der public Zone zu öffnen:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Um einen UDP-Port zu öffnen (z. B. Port 53 für DNS):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Um einen Portbereich zu öffnen (z. B. 6000–6100 TCP):

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Einen bestimmten Port schließen

Um Port 8080 zu schließen:

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Alle offenen Ports in einer Zone auflisten

sudo firewall-cmd --zone=public --list-ports

Schritt 7: Erweiterte Konfiguration mit Rich Rules

Rich Rules geben Ihnen granulare, bedingte Kontrolle über Datenverkehr — weit über das hinaus, was einfache Service- oder Port-Regeln ermöglichen. Sie unterstützen Filterung nach Quell-IP, Ziel-IP, Protokoll, Port und Aktion (akzeptieren, ablehnen, verwerfen, protokollieren).

Rich Rule Syntax

rule [family="<ipv4|ipv6>"]
     [source address="<IP/CIDR>"]
     [destination address="<IP/CIDR>"]
     [service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
     [log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
     [accept|reject|drop]

Beispiel 1 — SSH nur von einer bestimmten IP-Adresse erlauben

Dies ist eine der wichtigsten Sicherheitskonfigurationen für jeden Remote-Server. Wenn Sie Ihren Server von einer festen IP-Adresse aus verwalten, beschränken Sie SSH-Zugriff ausschließlich auf diese IP:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Beispiel 2 — Alle Datenverkehr von einer bestimmten IP-Adresse blockieren

Um eine IP-Adresse, die böswilligen Datenverkehr erzeugt, vollständig zu blockieren:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Beispiel 3 — HTTP von einem bestimmten Subnetz erlauben

Um HTTP-Datenverkehr nur von einem vertrauenswürdigen internen Subnetz zu erlauben (z. B. 192.168.1.0/24):

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reload

Beispiel 4 — SSH-Verbindungen zur Brute-Force-Prävention drosseln

Protokollieren und begrenzen Sie SSH-Verbindungsversuche, um die Anfälligkeit für Brute-Force-Angriffe zu verringern:

sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reload

Beispiel 5 — Einen bestimmten Port von einer bestimmten IP erlauben

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

Alle Rich Rules in einer Zone auflisten

sudo firewall-cmd --zone=public --list-rich-rules

Eine Rich Rule entfernen

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Schritt 8: Überwachung und Audit Ihrer Firewall

Die regelmäßige Überprüfung Ihrer Firewall-Konfiguration ist wesentlich für die Aufrechterhaltung einer starken Sicherheitslage. Firewalld bietet mehrere Befehle zur Überprüfung des aktuellen Zustands Ihrer Regeln.

Die vollständige Konfiguration für die Standardzone anzeigen

sudo firewall-cmd --list-all

Beispielausgabe:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="203.0.113.50" service name="ssh" accept

Konfiguration für alle Zonen anzeigen

sudo firewall-cmd --list-all-zones

Konfiguration für eine bestimmte Zone anzeigen

sudo firewall-cmd --zone=dmz --list-all

Überprüfen Sie, ob ein bestimmter Dienst erlaubt ist

sudo firewall-cmd --zone=public --query-service=http

Überprüfen Sie, ob ein bestimmter Port offen ist

sudo firewall-cmd --zone=public --query-port=8080/tcp

Schritt 9: Runtime vs. Permanente Regeln — Verständnis des Unterschieds

Firewalld arbeitet mit zwei unterschiedlichen Konfigurationsebenen:

EbeneFlagPersistenzAnwendungsfall
Runtime*(kein Flag)*Geht bei Neuladen/Neustart verlorenRegeln temporär testen
Permanent--permanentÜberlebt Neuladen und NeustartProduktionskonfigurationen

Best Practice Workflow

  1. Testen Sie die Regel zuerst zur Laufzeit (ohne --permanent), um zu überprüfen, ob sie wie erwartet funktioniert
  2. Fügen Sie die Regel dauerhaft hinzu, sobald bestätigt
  3. Laden Sie Firewalld neu, um die Runtime- und permanente Konfigurationen zu synchronisieren
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http

# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent

# Step 3: Reload to sync
sudo firewall-cmd --reload

Alternativ wenden Sie eine permanente Regel an und laden sofort in einem Workflow neu:

sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reload

Schritt 10: Zuweisen von Netzwerkschnittstellen zu Zonen

Wenn Ihr Server mehrere Netzwerkschnittstellen hat (häufig auf Dedicated Servern mit öffentlichen und privaten NICs), können Sie jede Schnittstelle einer anderen Zone mit unterschiedlichen Vertrauensstufen zuweisen.

Weisen Sie eine Schnittstelle einer Zone zu

sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reload

Ändern Sie die Zone einer Schnittstelle

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Entfernen Sie eine Schnittstelle aus einer Zone

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Schritt 11: Aktivieren von IP-Masquerading und Port-Weiterleitung

Für Server, die als Gateways fungieren oder NAT (Network Address Translation) ausführen, unterstützt Firewalld Masquerading und Port-Weiterleitung nativ.

Masquerading aktivieren (NAT)

sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload

Einen Port weiterleiten (z. B. externen Port 80 zu internem Port 8080 weiterleiten)

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload

Datenverkehr zu einem anderen Host weiterleiten

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reload

Praktische Sicherheitskonfigurationen für AlexHost-Server

Wenn Sie einen Webserver, Datenbankserver oder Anwendungsserver auf AlexHost-Infrastruktur betreiben, finden Sie hier empfohlene Baseline-Firewalld-Konfigurationen:

Baseline-Webserver-Konfiguration

# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent

# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# Reload to apply
sudo firewall-cmd --reload

# Verify
sudo firewall-cmd --list-all

> Pro-Tipp: Kombinieren Sie Ihre Firewall-Konfiguration mit einem gültigen SSL-Zertifikat, um sicherzustellen, dass der gesamte Webdatenverkehr end-to-end verschlüsselt ist. AlexHost bietet SSL-Zertifikate für alle Hosting-Umgebungen.

Baseline-Datenbankserver-Konfiguration (MySQL/MariaDB)

# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent

# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null

sudo firewall-cmd --reload

Baseline-cPanel/WHM-Server-Konfiguration

Wenn Sie einen

15%

15% auf alle Hosting-Dienste sparen

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

Benutze den Code:

Skills
Anfangen