firewalld
Siehe auch
CentOS 7 ersetzt iptables durch firewalld, welches erstmalig in Fedora 18 zum Einsatz kam. Die Regelsyntax von firewalld ist inkompatibel zu dem von iptables; firewalld ist einfacher, schneller und kommt besser mit Änderungen am Regelwerk zurecht. Ab CentOS 8 nutzt firewalld im Backend nftables, nftables wird also als Abhängigkeit mitinstalliert.Tools zur Konvertierung von iptables-Regelwerken nach firewalld werden diskutiert, sind aber Stand 2020 nicht verfügbar.
Die beiden Firewall-Management-Konzepte können nicht parallel existieren. Wer firewalld einsetzt, für den gilt:
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
yum -y install firewalld
systemctl enable --now firewalld
firewalld arbeitet mit Zonen, von denen „public“ die Default-Zone ist. Die Zonen sind vorkonfiguriert und kommen mit unterschiedlichen Eigenschaften daher. Eine Zone definiert den Trust-Level einer Netzwerkverbindung, eines Interfaces und einer Quell-Adresse. Sie kombiniert Dienste, Ports, Protokolle, Masquerading, Port/Paket-Forwarding, ICMP-Filter und Rich Rules und kann an Interfaces und Quell-Adressen gebunden werden.
Die Zonen im Einzelnen:
drop
Eingehende Verbindungen werden verworfen (drop); ausgehende Verbindungen sind erlaubt.
block
Eingehende Verbindungen werden zurückgewiesen (reject); ausgehende Verbindungen sind erlaubt.
public
Eingehend sind Verbindungen auf ssh, mdns und dhcpv6-client erlaubt; ausgehende Verbindungen sind erlaubt.
external
Nur ausgewählte eingehende Verbindungen sind erlaubt; Rechner wird zum Router, da Masquerading aktiviert ist.
dmz
Limitierter Zugriff auf das interne Netzwerk, eingehend ist nur SSH erlaubt.
work
Anderen Rechnern wird grundsätzlich vertraut; eingehend sind Verbindungen auf ssh, mdns, ipp-client und dhcpv6-client erlaubt.
home
Wie „work“ plus samba-client.
internal
Wie „home“.
trusted
Alles erlaubt.
Die Zonen lassen sich um eigene erweitern - in der Praxis genügen auf einem Server meist zwei bis drei selbst-definierte Zonen wie „trusted“, „untrusted“ und evtl. noch „dmz“. Wer die vordefinierten Zonen löschen möchte, findet die dazu gehörigen XML-Dateien in /usr/lib/firewalld/zones
.
firewalld lässt sich über zwei Tools konfigurieren: das GNOME-GUI firewall-config
und firewall-cmd
. Das GNOME-GUI ist intuitiv, insbesondere die Definition von Rich Rules ist gelungen. Wer die Firewall unter GNOME editiert und seine Änderungen persistent einrichten will, muss die Firewall-Konfiguration von „Runtime“ auf „Permanent“ umstellen und die Firewall anschliessend neu laden. Änderungen im Runtime-Modus sind sofort aktiv, aber eben nur zur Laufzeit.
Firewall-Definitionen werden durch firewall-cmd
in /etc/firewalld/zones
abgelegt. Beispiel mit kleiner Rich Rule:
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Trusted</short>
<description>My personal zone</description>
<service name="http"/>
<service name="ssh"/>
<rule family="ipv4">
<source address="10.26.6.99/32"/>
<service name="ssh"/>
<log level="notice"/>
<accept/>
</rule>
<port protocol="tcp" port="54321"/>
</zone>
Umgang mit firewalld
Umgesetzt mit firewall-cmd
:
# list all services
firewall-cmd --get-services
# list the ruleset
firewall-cmd --list-all
# permit a host and net
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
# allow a port (in a zone)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --zone=dmz --add-port=54321/tcp
# allow all ports in a network
firewall-cmd --permanent --zone=public --add-source=10.80.32.0/24
firewall-cmd --permanent --zone=public --add-port=1-65535/tcp
firewall-cmd --permanent --zone=public --add-port=1-65535/udp
# deny outbound traffic, excluding DNS
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport 53 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 3 -j DROP
Beispiel-Regelwerk: Alles zulassen
firewalld so konfigurieren, dass der Dienst läuft und sämtlicher Netzwerkverkehr zugelassen wird (Netz entsprechend anpassen):
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --set-log-denied=all
firewall-cmd --permanent --zone=public --add-source=10.80.32.0/24
firewall-cmd --permanent --zone=public --add-port=1-65535/tcp
firewall-cmd --permanent --zone=public --add-port=1-65535/udp
firewall-cmd --reload
firewall-cmd --list-all
Logging
Zur Laufzeit:
firewall-cmd --set-log-denied=all
Persistent:
LogDenied=all
Built on 2023-03-17