Firewall mit firewalld
firewalld ist der Standard-Firewall-Daemon auf RHEL und Fedora. Er verwaltet
nftables-Regeln (früher iptables) über ein Zonen-Konzept und lässt sich sowohl
über die Kommandozeile (firewall-cmd) als auch grafisch verwalten.
Installation und Start
Abschnitt betitelt „Installation und Start“sudo dnf install firewalldsudo systemctl enable --now firewalldfirewall-cmd --state # runningDas Zonen-Konzept
Abschnitt betitelt „Das Zonen-Konzept“Jede Netzwerkschnittstelle ist einer Zone zugeordnet. Die Zone bestimmt, welcher Verkehr erlaubt ist:
| Zone | Vertrauen | Typischer Einsatz |
|---|---|---|
drop | keins | alles verwerfen (kein Reset) |
block | keins | alles ablehnen (mit Reset) |
public | gering | Internet, öffentliche Netze — Default |
dmz | mittel | Server in der DMZ |
home | hoch | Heimnetz |
internal | hoch | internes Firmennetz |
trusted | vollständig | alles erlaubt |
firewall-cmd --get-default-zone # aktive Standard-Zonefirewall-cmd --get-active-zones # Zonen mit ihren Schnittstellenfirewall-cmd --list-all # alle Regeln der Standard-Zonefirewall-cmd --list-all --zone=public # bestimmte ZoneDienste
Abschnitt betitelt „Dienste“firewalld kennt vordefinierte Dienste mit Namen (einfacher als Portnummern):
firewall-cmd --get-services # alle verfügbaren Dienstefirewall-cmd --list-services # aktive Dienste der Standard-Zone
# Dienst erlaubensudo firewall-cmd --add-service=httpsudo firewall-cmd --add-service=httpssudo firewall-cmd --add-service=ssh
# Dienst entfernensudo firewall-cmd --remove-service=httpEigene Dienst-Definitionen liegen in /usr/lib/firewalld/services/ (System)
bzw. /etc/firewalld/services/ (eigene).
Für Dienste ohne vordefinierten Namen direkt Ports freigeben:
sudo firewall-cmd --add-port=8080/tcpsudo firewall-cmd --add-port=3000/tcpsudo firewall-cmd --add-port=5000-5010/tcp # Port-Bereichsudo firewall-cmd --remove-port=8080/tcpPermanente Regeln
Abschnitt betitelt „Permanente Regeln“Alle bisherigen Änderungen gelten nur bis zum nächsten Neustart von firewalld.
Für dauerhafte Regeln: --permanent + --reload:
# Permanent hinzufügensudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --permanent --add-port=8080/tcp
# Änderungen laden (übernimmt permanente Regeln in laufende Konfiguration)sudo firewall-cmd --reload
# Kurzform: direkt permanent + sofort aktivsudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reloadHäufige Szenarien
Abschnitt betitelt „Häufige Szenarien“Webserver freigeben
Abschnitt betitelt „Webserver freigeben“sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reloadSSH auf anderen Port verlegen
Abschnitt betitelt „SSH auf anderen Port verlegen“sudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --permanent --remove-service=ssh # Port 22 schließensudo firewall-cmd --reloadZugriff auf eine IP beschränken
Abschnitt betitelt „Zugriff auf eine IP beschränken“# Nur 192.168.1.0/24 darf auf Port 3306 (MariaDB) zugreifensudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'sudo firewall-cmd --reloadPanic-Modus (Notfall)
Abschnitt betitelt „Panic-Modus (Notfall)“sudo firewall-cmd --panic-on # sofort ALLES blockierensudo firewall-cmd --panic-off # wieder freigebensudo firewall-cmd --query-panic # Status prüfenÜbersicht: aktuelle Regeln
Abschnitt betitelt „Übersicht: aktuelle Regeln“firewall-cmd --list-all # Standard-Zonefirewall-cmd --list-all-zones # alle Zonenfirewall-cmd --list-services # aktive Dienstefirewall-cmd --list-ports # aktive PortsSELinux und Ports
Abschnitt betitelt „SELinux und Ports“Auf RHEL überwacht SELinux zusätzlich, welche Ports Dienste nutzen dürfen. Wenn ein Dienst auf einem nicht-standardmäßigen Port läuft, muss SELinux informiert werden:
# Beispiel: Apache soll auf Port 8080 lauschensudo semanage port -a -t http_port_t -p tcp 8080