Tutorial

Einrichten einer Firewall mit firewalld unter CentOS 8

Published on May 12, 2020
Deutsch
Einrichten einer Firewall mit firewalld unter CentOS 8

Einführung

firewalld ist eine für viele Linux-Distributionen verfügbare Firewall-Verwaltungssoftware, die als Frontend für die kernelinternen nftables- oder iptables-Paketfiltersysteme von Linux dient.

In diesem Leitfaden zeigen wir Ihnen, wie Sie eine Firewall für Ihren CentOS 8-Server einrichten, und behandeln die Grundlagen der Verwaltung der Firewall mit dem Verwaltungstool firewall-cmd.

Voraussetzungen

Um dieses Tutorial zu absolvieren, benötigen Sie einen Server, auf dem CentOS 8 ausgeführt wird. Wir gehen davon aus, dass Sie als non-root user, aber mit sudo-Berechtigungen bei diesem Server angemeldet sind. Folgen Sie zur Einrichtung unserem Leitfaden zur Ersteinrichtung des Servers für CentOS 8.

Grundkonzepte in firewalld

Bevor wir damit beginnen, über die tatsächliche Verwendung des Dienstprogramms firewall-cmd zur Verwaltung Ihrer Firewall-Konfiguration zu sprechen, sollten wir uns mit einigen Konzepten vertraut machen, die das Tool vorstellt.

Zonen

Der Daemon firewalld verwaltet Gruppen mithilfe von Entitäten, die Zonen genannt werden. Zonen sind Regelwerke die vorgeben, welcher Datenverkehr abhängig von der Vertrauensstufe, die Sie im Netzwerk haben, zugelassen werden soll. Netzwerkschnittstellen werden einer Zone zugeordnet, um das Verhalten zu bestimmen, das die Firewall zulassen soll.

Für Computer, die häufig zwischen Netzwerken hin- und herwechseln (wie Laptops), bietet diese Art der Flexibilität eine gute Methode, Ihre Regeln je nach Umgebung zu ändern. Möglicherweise haben Sie strenge Regeln, die den meisten Datenverkehr verbieten, wenn Sie in einem öffentlichen WLAN-Netzwerk arbeiten, während Sie entspanntere Einschränkungen zulassen, wenn Sie mit Ihrem Heimnetzwerk verbunden sind. Für einen Server sind diese Zonen oft nicht so wichtig, da sich die Netzwerkumgebung selten, wenn überhaupt, ändert.

Unabhängig davon, wie dynamisch Ihre Netzwerkumgebung auch sein mag, ist es dennoch nützlich, sich mit der allgemeinen Idee hinter jeder der vordefinierten Zonen für firewalld vertraut zu machen. Die vordefinierten Zonen innerhalb von firewalld sind in der Reihenfolge von am wenigsten vertrauenswürdig bis am meisten vertrauenswürdig:

  • drop: die niedrigste Vertrauensstufe. Alle eingehenden Verbindungen werden ohne Antwort verworfen und nur ausgehende Verbindungen sind möglich.
  • block: Ähnlich wie oben, aber statt Verbindungen einfach zu vewerfen, werden eingehende Anfragen mit einer Nachricht icmp-host-prohibited oder icmp6-adm-prohibited zurückgewiesen.
  • public: Repräsentiert öffentliche, nicht vertrauenswürdige Netzwerke. Sie vertrauen anderen Computern nicht, können aber von Fall zu Fall ausgewählte eingehende Verbindungen zulassen.
  • external: Externe Netzwerke für den Fall, dass Sie die Firewall als Gateway verwenden. Es ist für NAT-Maskierung konfiguriert, sodass Ihr internes Netzwerk privat, aber erreichbar bleibt.
  • internal: Die andere Seite der externen Zone, die für den internen Teil eines Gateway verwendet wird. Die Computer sind recht vertrauenswürdig und einige zusätzliche Dienste sind verfügbar.
  • dmz: Wird für Computer verwendet, die sich in einer DMZ befinden (isolierte Computer, die keinen Zugriff auf den Rest Ihres Netzwerks haben). Es sind nur bestimmte eingehende Verbindungen erlaubt.
  • work: Wird für Arbeitscomputer verwendet. Vertrauen Sie den meisten Computern im Netzwerk. Einige weitere Dienste können zugelassen sein.
  • home: Eine private Umgebung. Im Allgemeinen setzt dies voraus, dass Sie den meisten anderen Computern vertrauen und dass einige weitere Dienste akzeptiert werden.
  • trusted: Vertrauen Sie allen Rechnern im Netzwerk. Die offenste der verfügbaren Optionen. Sie sollte sparsam eingesetzt werden.

Wir können zur Verwendung der Firewall Regeln erstellen und die Eigenschaften unserer Zonen ändern und dann unsere Netzwerkschnittstellen den am besten geeigneten Zonen zuweisen.

Regeldauerhaftigkeit

In firewalld können Regeln auf den aktuellen Laufzeit-Regelsatz angewendet oder dauerhaft festgelegt werden. Wenn eine Regel hinzugefügt oder geändert wird, wird standardmäßig nur die aktuell laufende Firewall geändert. Nach dem nächsten Neustart – oder Neuladen des Dienstes firewalld – bleiben nur die dauerhaften Regeln erhalten.

Die meisten firewall-cmd-Operationen können mit einem Flag --permanent gekennzeichnet werden, um anzuzeigen, dass die Änderungen auf die dauerhafte Konfiguration angewendet werden sollen. Zusätzlich kann die aktuell laufende Firewall mit dem Befehl firewall-cmd --runtime-to-permanent in der dauerhaften Konfiguration gespeichert werden.

Diese Trennung von Laufzeit und permanenter Konfiguration bedeutet, dass Sie die Regeln in Ihrer aktiven Firewall gefahrlos testen und bei Problemen erneut laden können, um neu zu beginnen.

Installieren und Aktivieren von firewalld

firewalld ist standardmäßig auf einigen Linux-Distributionen installiert, darunter viele Images von CentOS 8. Es kann jedoch erforderlich sein, dass Sie firewalld selbst installieren müssen:

  1. sudo dnf install firewalld

Nach der Installation von firewalld können Sie den Dienst aktivieren und Ihren Server neu starten. Denken Sie daran, dass die Aktivierung von firewalld dazu führt, dass der Dienst beim Systemstart gestartet wird. Es empfiehlt sich, Ihre Firewall-Regeln zu erstellen und bei dieser Gelegenheit zu testen, bevor Sie dieses Verhalten konfigurieren, um mögliche Probleme zu vermeiden.

  1. sudo systemctl enable firewalld
  2. sudo systemctl start firewalld

Wenn der Server neu startet, sollte Ihre Firewall hochgefahren werden, Ihre Netzwerkschnittstellen sollten in die von Ihnen konfigurierten Zonen gelegt werden (oder auf die konfigurierte Standardzone zurückgreifen), und alle mit der oder den Zonen verknüpften Regeln werden auf die verknüpften Schnittstellen angewendet.

Wir können die Ausführung und Erreichbarkeit des Dienstes prüfen, indem wir eingeben:

  1. sudo firewall-cmd --state
Output
running

Dies zeigt an, dass unsere Firewall mit der Standardkonfiguration einsatzbereit und erreichbar ist.

Vertrautmachen mit den aktuellen Firewall-Regeln

Bevor wir mit den Modifikationen beginnen, sollten wir uns mit der Standardumgebung und den Regeln von firewalld vertraut machen.

Erkunden der Standardeinstellungen

Wir können sehen, welche Zone derzeit als Standard ausgewählt ist, indem wir eingeben:

  1. firewall-cmd --get-default-zone
Output
public

Da wir firewalld keine Befehle zum Abweichen von der Standardzone gegeben haben und keine unserer Schnittstellen so konfiguriert ist, dass sie sich an eine andere Zone bindet, wird diese Zone auch die einzige active Zone sein (die Zone, die den Verkehr für unsere Schnittstellen steuert). Wir können dies überprüfen, indem wir eingeben:

  1. firewall-cmd --get-active-zones
Output
public interfaces: eth0 eth1

Hier können wir sehen, dass unser Beispielserver zwei Netzwerkschnittstellen hat, die von der Firewall kontrolliert werden (eth0 und eth1). Beide werden derzeit gemäß den für die Zone public definierten Regeln verwaltet.

Woher wissen wir aber, welche Regeln mit der Zone public verbunden sind? Wir können die Konfiguration der Standardzone ausgeben, indem wir eingeben:

  1. sudo firewall-cmd --list-all
Output
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Aus der Ausgabe können wir erkennen, dass diese Zone sowohl die Standardzone als auch die aktive Zone ist und dass die Schnittstellen eth0 und eth1 mit dieser Zone verbunden sind (all dies wussten wir bereits aus unseren früheren Anfragen). Wir können jedoch auch erkennen, dass diese Zone den Verkehr für einen DHCP-Client (für die Zuweisung von IP-Adressen), für SSH (zur Fernverwaltung) und für Cockpit (eine webbasierte Konsole) zulässt.

Erkunden alternativer Zonen

Jetzt haben wir eine gute Vorstellung von der Konfiguration für die Standardzone und die aktive Zone. Wir können auch Informationen über andere Zonen erhalten.

Um eine Liste der verfügbaren Zonen zu erhalten, geben Sie folgendes ein:

  1. firewall-cmd --get-zones
Output
block dmz drop external home internal public trusted work

Wir können die mit einer Zone verbundene spezifische Konfiguration sehen, indem wir den Parameter --zone= in unseren Befehl --list-all aufnehmen:

  1. sudo firewall-cmd --zone=home --list-all
Output
home target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Sie können alle Zonendefinitionen ausgeben, indem Sie die Option --list-all-zones verwenden. Wahrscheinlich werden Sie die Ausgabe zur einfacheren Anzeige in einen Pager leiten wollen:

  1. sudo firewall-cmd --list-all-zones | less

Als Nächstes werden wir uns mit der Zuweisung von Zonen zu Netzwerkschnittstellen befassen.

Auswählen von Zonen für Ihre Schnittstellen

Wenn Sie Ihre Netzwerkschnittstellen nicht anders konfiguriert haben, wird jede Schnittstelle beim Start der Firewall in die Standardzone gesetzt.

Ändern der Zone einer Schnittstelle

Sie können eine Schnittstelle während einer Sitzung zwischen Zonen verschieben, indem Sie den Parameter --zone= in Kombination mit dem Parameter --change-interface= verwenden. Wie bei allen Befehlen, die die Firewall verändern, müssen Sie sudo verwenden.

Wir können zum Beispiel unsere eth0-Schnittstelle in die Zone home verschieben, indem wir Folgendes eingeben:

  1. sudo firewall-cmd --zone=home --change-interface=eth0
Output
success

Anmerkung: Wann immer Sie eine Schnittstelle in eine neue Zone verschieben, sollten Sie sich bewusst sein, dass Sie wahrscheinlich ändern, welche Dienste einsatzbereit sein werden. Hier geht es zum Beispiel um die Verschiebung in die Zone home, in der SSH verfügbar ist. Das bedeutet, dass unsere Verbindung nicht unterbrochen werden sollte. In einigen anderen Zonen ist SSH nicht standardmäßig aktiviert, und der Wechsel zu einer dieser Zonen könnte dazu führen, dass Ihre Verbindung abstürzt und Sie sich nicht mehr bei Ihrem Server anmelden können.

Wir können überprüfen, ob dies erfolgreich war, indem wir die aktiven Zonen erneut anfordern:

  1. firewall-cmd --get-active-zones
Output
home interfaces: eth0 public interfaces: eth1

Anpassen der Standardzone

Wenn alle Ihre Schnittstellen von einer einzigen Zone gut verarbeitet werden können, ist es wahrscheinlich am einfachsten, einfach die beste Zone als Standard zu bestimmen und diese dann für Ihre Konfiguration zu verwenden.

Sie können die Standardzone mit dem Parameter --set-default-zone= ändern. Dadurch wird jede Schnittstelle, die die Standardzone verwendet, sofort geändert:

  1. sudo firewall-cmd --set-default-zone=home
Output
success

Festlegen von Regeln für Ihre Anwendungen

Lassen Sie uns die grundlegende Methode zur Definition von Firewall-Ausnahmen für die Dienste, die Sie zur Verfügung stellen möchten, durchgehen.

Hinzufügen eines Dienstes zu Ihren Zonen

Die einfachste Methode besteht darin, die von Ihnen benötigten Dienste oder Ports zu den von Ihnen benutzten Zonen hinzuzufügen. Sie können eine Liste der verfügbaren Dienstdefinitionen mit der Option --get-services erhalten:

  1. firewall-cmd --get-services
Output
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

Anmerkung: Sie können weitere Einzelheiten über jeden dieser Dienste erhalten, indem Sie sich die zugehörige .xml-Datei im Verzeichnis /usr/lib/firewalld/services ansehen. Zum Beispiel ist der SSH-Dienst wie folgt definiert:

/usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

Sie können einen Dienst für eine Zone mit dem Parameter --add-service= aktivieren. Die Operation zielt auf die Standardzone oder die durch den Parameter --zone= angegebene Zone ab. Standardmäßig wird dadurch nur die aktuelle Firewallsitzung angepasst. Sie können die dauerhafte Firewall-Konfiguration anpassen, indem Sie das Flag --permanent einfügen.

Wenn wir beispielsweise einen Webserver betreiben, der konventionellen HTTP-Verkehr bedient, können wir diesen Verkehr vorübergehend für Schnittstellen in unserer Zone public zulassen, indem wir eingeben:

  1. sudo firewall-cmd --zone=public --add-service=http

Wenn Sie die Standardzone ändern möchten, können Sie das Flag --zone= weglassen. Wir können überprüfen, ob die Operation erfolgreich war, indem wir die Operationen --list-all oder --list-services verwenden:

  1. sudo firewall-cmd --zone=public --list-services
Output
cockpit dhcpv6-client http ssh

Nachdem Sie die Funktionsfähigkeit geprüft haben, werden Sie wahrscheinlich die Regeln der dauerhaften Firewall so ändern wollen, dass Ihr Dienst auch nach einem Neustart noch verfügbar ist. Wir können unsere vorherige Änderung dauerhaft machen, indem wir sie neu eingeben und das Flag --permanent hinzufügen:

  1. sudo firewall-cmd --zone=public --add-service=http --permanent
Output
success

Alternativ dazu können Sie das Flag --runtime-to-permanent verwenden, um die aktuell laufende Firewall-Konfiguration in der dauerhaften Konfiguration zu speichern:

  1. sudo firewall-cmd --runtime-to-permanent

Seien Sie damit vorsichtig, da alle an der laufenden Firewall vorgenommenen Änderungen dauerhaft übernommen werden.

Welche Methode Sie auch immer gewählt haben, Sie können überprüfen, ob sie erfolgreich war, indem Sie das Flag --permanent zur Operation --list-services hinzufügen. Sie müssen sudo für alle --permanent Operationen verwenden:

  1. sudo firewall-cmd --zone=public --list-services --permanent
Output
cockpit dhcpv6-client http ssh

Ihre Zone public erlaubt nun HTTP-Webverkehr auf Port 80. Wenn Ihr Webserver für die Verwendung von SSL/TLS konfiguriert ist, werden Sie auch den Dienst https hinzufügen wollen. Diesen können wir der aktuellen Sitzung und dem dauerhaften Regelsatz hinzufügen, indem wir eingeben:

  1. sudo firewall-cmd --zone=public --add-service=https
  2. sudo firewall-cmd --zone=public --add-service=https --permanent

Was, wenn kein passender Dienst verfügbar ist?

Die Dienste, die mit der Installation von firewalld mitgeliefert werden, stellen viele der häufigsten Anwendungen dar, auf die Sie den Zugriff erlauben möchten. Es wird jedoch wahrscheinlich Szenarien geben, in denen diese Dienste nicht Ihren Anforderungen entsprechen.

In dieser Situation haben Sie zwei Möglichkeiten.

Öffnen eines Port für Ihre Zonen

Der einfachste Weg, Unterstützung für Ihre spezifische Anwendung hinzuzufügen, besteht darin, die von ihr verwendeten Ports in der oder den entsprechenden Zonen zu öffnen. Dies geschieht durch Angabe des Ports oder Portbereichs und des zugehörigen Protokolls (TCP oder UDP) für die Ports.

Wenn unsere Anwendung beispielsweise auf Port 5000 läuft und TCP verwendet, könnten wir diese mit dem Parameter --add-port= vorübergehend zur Zone public hinzufügen. Protokolle können entweder als tcp oder udp zugewiesen werden:

  1. sudo firewall-cmd --zone=public --add-port=5000/tcp
Output
success

Wir können überprüfen, ob dies erfolgreich war, indem wir die Operation --list-ports verwenden:

  1. sudo firewall-cmd --zone=public --list-ports
Output
5000/tcp

Es ist auch möglich, einen sequentiellen Bereich von Ports anzugeben, indem der Anfangs- und Endport in dem Bereich durch einen Bindestrich getrennt wird. Wenn unsere Anwendung zum Beispiel die UDP-Ports 4990 bis 4999 verwendet, könnten wir diese für public freigeben, indem wir eingeben:

  1. sudo firewall-cmd --zone=public --add-port=4990-4999/udp

Nach dem Testen würden wir diese wahrscheinlich der dauerhaften Firewall hinzufügen wollen. Verwenden Sie dazu sudo firewall-cmd --runtime-to-permanent oder führen Sie die Befehle mit dem Flag --permanent erneut aus:

  1. sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
  2. sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
  3. sudo firewall-cmd --zone=public --permanent --list-ports
Output
success success 5000/tcp 4990-4999/udp

Definieren eines Dienstes

Das Öffnen von Ports für Ihre Zonen ist eine unkomplizierte Lösung, aber es kann schwierig sein, den Überblick darüber zu behalten, wofür die einzelnen Ports vorgesehen sind. Wenn Sie jemals einen Dienst auf Ihrem Server außer Betrieb nehmen, fällt es Ihnen vielleicht schwer, sich daran zu erinnern, welche geöffneten Ports noch benötigt werden. Um diese Situation zu vermeiden, kann ein neuer Dienst definiert werden.

Dienste sind Sammlungen von Ports mit einem zugehörigen Namen und einer Beschreibung. Die Verwendung von Diensten ist einfacher zu verwalten als Ports, erfordert aber ein wenig Vorarbeit. Der einfachste Weg, damit zu beginnen, besteht darin, ein vorhandenes Skript (zu finden in /usr/lib/firewalld/services) in das Verzeichnis /etc/firewalld/services zu kopieren, in dem die Firewall nach Nicht-Standard-Definitionen sucht.

Wir könnten zum Beispiel die SSH-Dienstdefinition kopieren, um sie so für unsere Dienstdefinition example zu verwenden. Der Dateiname abzüglich des .xml-Suffix diktiert den Namen des Dienstes innerhalb der Liste der Firewall-Dienste:

  1. sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

Jetzt können Sie die in der kopierten Datei gefundene Definition anpassen. Öffnen Sie sie zunächst in Ihrem bevorzugten Texteditor. Wir verwenden hier vi:

  1. sudo vi /etc/firewalld/services/example.xml

Zu Beginn enthält die Datei die SSH-Definition, die Sie kopiert haben:

/etc/firewalld/services/example.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

Der Großteil dieser Definition sind eigentlich Metadaten. Sie werden den Kurznamen für den Dienst innerhalb der Tags <short> ändern wollen. Dies ist ein von Menschen lesbarer Name für Ihren Dienst. Sie sollten auch eine Beschreibung hinzufügen, damit Sie über zusätzliche Informationen verfügen, falls Sie den Dienst jemals überprüfen müssen. Die einzige Konfiguration, die Sie vornehmen müssen und die sich tatsächlich auf die Funktionalität des Dienstes auswirkt, wird wahrscheinlich die Port-Definition sein, in der Sie die Port-Nummer und das Protokoll identifizieren, die Sie öffnen möchten. Es können mehrere <port/>-Tags angegeben werden.

Stellen Sie sich für unseren Dienst example vor, dass wir Port 7777 für TCP und 8888 für UDP öffnen müssen. Wir können die bestehende Definition mit etwas wie dem Folgenden modifizieren:

/etc/firewalld/services/example.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Example Service</short>
  <description>This is just an example service. It probably shouldn't be used on a real system.</description>
  <port protocol="tcp" port="7777"/>
  <port protocol="udp" port="8888"/>
</service>

Speichern und schließen Sie die Datei.

Laden Sie Ihre Firewall neu, um Zugriff auf Ihren neuen Dienst zu erhalten:

  1. sudo firewall-cmd --reload

Sie können sehen, dass er sich jetzt in der Liste der verfügbaren Dienste befindet:

  1. firewall-cmd --get-services
Output
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server example finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

Sie können diesen Dienst nun in Ihren Zonen wie gewohnt nutzen.

Erstellen Ihrer eigenen Zonen

Während die vordefinierten Zonen für die meisten Benutzer wahrscheinlich mehr als ausreichend sein werden, kann es hilfreich sein, eigene Zonen zu definieren, die ihre Funktion besser beschreiben.

Sie könnten zum Beispiel eine Zone für Ihren Webserver erstellen, die publicweb genannt wird. Möglicherweise möchten Sie jedoch eine andere Zone für den DNS-Dienst konfiguriert haben, den Sie in Ihrem privaten Netzwerk anbieten. Vielleicht möchten Sie dafür eine Zone namens „privateDNS“ einrichten.

Wenn Sie eine Zone hinzufügen, müssen Sie sie zur dauerhaften Firewall-Konfiguration hinzufügen. Sie können dann neu laden, um die Konfiguration in Ihre laufende Sitzung zu übernehmen. Wir könnten zum Beispiel die beiden oben besprochenen Zonen erstellen, indem wir Folgendes eingeben:

  1. sudo firewall-cmd --permanent --new-zone=publicweb
  2. sudo firewall-cmd --permanent --new-zone=privateDNS

Sie können überprüfen, ob diese in Ihrer dauerhaften Konfiguration vorhanden sind, indem Sie sie eingeben:

  1. sudo firewall-cmd --permanent --get-zones
Output
block dmz drop external home internal privateDNS public publicweb trusted work

Wie bereits erwähnt, werden diese in der Laufzeit-Firewall noch nicht verfügbar sein:

  1. firewall-cmd --get-zones
Output
block dmz drop external home internal public trusted work

Laden Sie die Firewall neu, um diese neuen Zonen in die aktive Laufzeitkonfiguration einzubinden:

  1. sudo firewall-cmd --reload
  2. firewall-cmd --get-zones
Output
block dmz drop external home internal privateDNS public publicweb trusted work

Jetzt können Sie damit beginnen, Ihren Zonen die entsprechenden Dienste und Ports zuzuweisen. Es ist normalerweise eine gute Idee, die Laufzeit-Firewall anzupassen und diese Änderungen nach dem Testen in der dauerhaften Konfiguration zu speichern. Für die Zone publicweb könnten Sie beispielsweise die SSH-, HTTP- und HTTPS-Dienste hinzufügen:

  1. sudo firewall-cmd --zone=publicweb --add-service=ssh
  2. sudo firewall-cmd --zone=publicweb --add-service=http
  3. sudo firewall-cmd --zone=publicweb --add-service=https
  4. sudo firewall-cmd --zone=publicweb --list-all
Output
publicweb target: default icmp-block-inversion: no interfaces: sources: services: http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Ebenso können wir den DNS-Dienst zu unserer Zone privateDNS hinzufügen:

  1. sudo firewall-cmd --zone=privateDNS --add-service=dns
  2. sudo firewall-cmd --zone=privateDNS --list-all
Output
privateDNS target: default icmp-block-inversion: no interfaces: sources: services: dns ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Wir könnten dann unsere Schnittstellen auf diese neuen Zonen umstellen, um sie zu testen:

  1. sudo firewall-cmd --zone=publicweb --change-interface=eth0
  2. sudo firewall-cmd --zone=privateDNS --change-interface=eth1

An dieser Stelle haben Sie die Möglichkeit, Ihre Konfiguration zu testen. Wenn diese Werte für Sie funktionieren, werden Sie diese Regeln der dauerhaften Konfiguration hinzufügen wollen. Das könnten Sie tun, indem Sie alle Befehle mit angehängtem Flag --permanent erneut ausführen, aber in diesem Fall werden wir das Flag --runtime-to-permanent verwenden, um unsere gesamte Laufzeitkonfiguration dauerhaft zu speichern:

  1. sudo firewall-cmd --runtime-to-permanent

Nachdem Sie diese Regeln dauerhaft angewendet haben, laden Sie die Firewall neu, um zu testen, ob die Änderungen bestehen bleiben:

  1. sudo firewall-cmd --reload

Bestätigen Sie, dass die richtigen Zonen zugewiesen wurden:

  1. firewall-cmd --get-active-zones
Output
privateDNS interfaces: eth1 publicweb interfaces: eth0

Und prüfen Sie, ob die entsprechenden Dienste für beide Zonen verfügbar sind:

  1. sudo firewall-cmd --zone=publicweb --list-services
Output
http https ssh
  1. sudo firewall-cmd --zone=privateDNS --list-services
Output
dns

Sie haben Ihre eigenen Zonen erfolgreich eingerichtet! Wenn Sie eine dieser Zonen zum Standard für andere Schnittstellen machen wollen, denken Sie daran, dieses Verhalten mit dem Parameter --set-default-zone= zu konfigurieren:

  1. sudo firewall-cmd --set-default-zone=publicweb

Zusammenfassung

Sie sollten nun ein recht umfassendes Verständnis davon haben, wie Sie den Dienst firewalld auf Ihrem CentOS-System für den täglichen Gebrauch verwalten.

Der Dienst firewalld ermöglicht es Ihnen, wartbare Regeln und Regelsätze zu konfigurieren, die Ihre Netzwerkumgebung berücksichtigen. Er ermöglicht Ihnen den nahtlosen Übergang zwischen verschiedenen Firewall-Richtlinien durch die Verwendung von Zonen und gibt Administratoren die Möglichkeit, die Portverwaltung in freundlichere Dienstdefinitionen zu abstrahieren. Wenn Sie sich mit diesem System vertraut machen, können Sie die Flexibilität und Leistungsfähigkeit, die dieses Tool bietet, nutzen.

Weitere Informationen zu firewalld finden Sie in der offiziellen Dokumentation zu firewalld.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.