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
.
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.
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.
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:
icmp-host-prohibited
oder icmp6-adm-prohibited
zurückgewiesen.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.
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.
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:
- 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.
- sudo systemctl enable firewalld
- 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:
- sudo firewall-cmd --state
Outputrunning
Dies zeigt an, dass unsere Firewall mit der Standardkonfiguration einsatzbereit und erreichbar ist.
Bevor wir mit den Modifikationen beginnen, sollten wir uns mit der Standardumgebung und den Regeln von firewalld vertraut machen.
Wir können sehen, welche Zone derzeit als Standard ausgewählt ist, indem wir eingeben:
- firewall-cmd --get-default-zone
Outputpublic
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:
- firewall-cmd --get-active-zones
Outputpublic
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:
- sudo firewall-cmd --list-all
Outputpublic (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.
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:
- firewall-cmd --get-zones
Outputblock 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:
- sudo firewall-cmd --zone=home --list-all
Outputhome
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:
- sudo firewall-cmd --list-all-zones | less
Als Nächstes werden wir uns mit der Zuweisung von Zonen zu Netzwerkschnittstellen befassen.
Wenn Sie Ihre Netzwerkschnittstellen nicht anders konfiguriert haben, wird jede Schnittstelle beim Start der Firewall in die Standardzone gesetzt.
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:
- sudo firewall-cmd --zone=home --change-interface=eth0
Outputsuccess
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:
- firewall-cmd --get-active-zones
Outputhome
interfaces: eth0
public
interfaces: eth1
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:
- sudo firewall-cmd --set-default-zone=home
Outputsuccess
Lassen Sie uns die grundlegende Methode zur Definition von Firewall-Ausnahmen für die Dienste, die Sie zur Verfügung stellen möchten, durchgehen.
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:
- firewall-cmd --get-services
OutputRH-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:
<?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:
- 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:
- sudo firewall-cmd --zone=public --list-services
Outputcockpit 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:
- sudo firewall-cmd --zone=public --add-service=http --permanent
Outputsuccess
Alternativ dazu können Sie das Flag --runtime-to-permanent
verwenden, um die aktuell laufende Firewall-Konfiguration in der dauerhaften Konfiguration zu speichern:
- 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:
- sudo firewall-cmd --zone=public --list-services --permanent
Outputcockpit 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:
- sudo firewall-cmd --zone=public --add-service=https
- sudo firewall-cmd --zone=public --add-service=https --permanent
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.
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:
- sudo firewall-cmd --zone=public --add-port=5000/tcp
Outputsuccess
Wir können überprüfen, ob dies erfolgreich war, indem wir die Operation --list-ports
verwenden:
- sudo firewall-cmd --zone=public --list-ports
Output5000/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:
- 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:
- sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
- sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
- sudo firewall-cmd --zone=public --permanent --list-ports
Outputsuccess
success
5000/tcp 4990-4999/udp
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:
- 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
:
- sudo vi /etc/firewalld/services/example.xml
Zu Beginn enthält die Datei die SSH-Definition, die Sie kopiert haben:
<?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:
<?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:
- sudo firewall-cmd --reload
Sie können sehen, dass er sich jetzt in der Liste der verfügbaren Dienste befindet:
- firewall-cmd --get-services
OutputRH-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.
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:
- sudo firewall-cmd --permanent --new-zone=publicweb
- sudo firewall-cmd --permanent --new-zone=privateDNS
Sie können überprüfen, ob diese in Ihrer dauerhaften Konfiguration vorhanden sind, indem Sie sie eingeben:
- sudo firewall-cmd --permanent --get-zones
Outputblock 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:
- firewall-cmd --get-zones
Outputblock dmz drop external home internal public trusted work
Laden Sie die Firewall neu, um diese neuen Zonen in die aktive Laufzeitkonfiguration einzubinden:
- sudo firewall-cmd --reload
- firewall-cmd --get-zones
Outputblock 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:
- sudo firewall-cmd --zone=publicweb --add-service=ssh
- sudo firewall-cmd --zone=publicweb --add-service=http
- sudo firewall-cmd --zone=publicweb --add-service=https
- sudo firewall-cmd --zone=publicweb --list-all
Outputpublicweb
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:
- sudo firewall-cmd --zone=privateDNS --add-service=dns
- sudo firewall-cmd --zone=privateDNS --list-all
OutputprivateDNS
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:
- sudo firewall-cmd --zone=publicweb --change-interface=eth0
- 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:
- 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:
- sudo firewall-cmd --reload
Bestätigen Sie, dass die richtigen Zonen zugewiesen wurden:
- firewall-cmd --get-active-zones
OutputprivateDNS
interfaces: eth1
publicweb
interfaces: eth0
Und prüfen Sie, ob die entsprechenden Dienste für beide Zonen verfügbar sind:
- sudo firewall-cmd --zone=publicweb --list-services
Outputhttp https ssh
- sudo firewall-cmd --zone=privateDNS --list-services
Outputdns
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:
- sudo firewall-cmd --set-default-zone=publicweb
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.
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!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.