Firewalls sind ein wesentlicher Bestandteil der Netzwerksicherheit, daher ist es wichtig, dass ein Systemadministrator mit ihrer Funktionsweise vertraut ist. Wenn Sie sich mit Firewalls auskennen, können Sie Ihr Netzwerk schützen, indem Sie intelligente Entscheidungen über den ein- und ausgehenden Datenverkehr treffen.
Da „Firewall“ ein so aufregender Name ist, stellen sich die Leute oft eine komplizierte Neonschlacht im Tron-Stil vor, die am Rande eines Netzwerks stattfindet, wobei Pakete mit unerwünschten Daten in Brand gesteckt werden, um die Techno-Festung Ihrer Benutzer zu schützen. In Wirklichkeit ist eine Firewall nur eine Software, die den eingehenden und ausgehenden Netzwerkverkehr steuert.
Anschlüsse
Eine Firewall kann diesen Datenverkehr verwalten, indem sie Netzwerkports überwacht. In der Welt der Firewalls ist der Begriff Port bezieht sich nicht auf eine physische Verbindung wie einen USB-, VGA- oder HDMI-Anschluss. Für Firewalls ein Port ist ein künstliches Konstrukt, das vom Betriebssystem erstellt wird, um einen Pfad für einen bestimmten Datentyp darzustellen. Dieses System hätte beliebig heißen können, wie „Kontakte“, „Verbindungen“ oder sogar „Pinguine“, aber die Ersteller verwendeten „Ports“, und das ist der Name, den wir heute noch verwenden. Der Punkt ist, dass Ports nichts Besonderes sind; Sie sind nur eine Möglichkeit, eine Adresse anzugeben, an der die Datenübertragung stattfindet.
Es gibt eine Reihe von Portierungen, die bekannt sind, aber auch das sind nur Konventionen. Beispielsweise wissen Sie vielleicht, dass HTTP-Datenverkehr auf Port 80 stattfindet, HTTPS-Datenverkehr Port 443 verwendet, FTP Port 21 verwendet und SSH Port 22 verwendet. Wenn Ihr Computer Daten an einen anderen Computer überträgt, fügt er den Daten ein Präfix hinzu, um anzuzeigen, welcher Port, auf den es zugreifen möchte. Wenn der Port auf der Empfängerseite Daten desselben Protokolls wie die von Ihnen gesendeten Daten akzeptiert, wurden die Daten erfolgreich ausgetauscht.
Sie können diesen Prozess in Aktion sehen, indem Sie zu einer beliebigen Website gehen. Öffnen Sie einen Webbrowser und navigieren Sie zu example.com:80
, wodurch Ihr Computer eine HTTP-Anforderung an Port 80 des Computers sendet, der die Website example.com bedient. Sie erhalten eine Webseite zurück. Bei Webbrowsern müssen Sie jedoch nicht jedes Mal den Port eingeben, auf den Sie zugreifen möchten, wenn Sie zu einer URL navigieren, da davon ausgegangen wird, dass HTTP-Verkehr auf Port 80 oder 443 zugreift.
Sie können diesen Vorgang mit einem terminalbasierten Webbrowser testen:
$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
<title>Example Domain</title>
Mit der gleichen Notation können Sie die Ablehnung erzwingen, indem Sie zu einer Website navigieren, die einen nicht standardmäßigen Port verwendet. Navigieren Sie zu einem beliebigen Port, example.com:79
zum Beispiel. Ihre Anfrage für eine Webseite wurde abgelehnt:
$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable
Die Korrelation zwischen Ports und Protokollen sind lediglich Konventionen, auf die sich eine Standardisierungsgruppe und eine Benutzerbasis gegenseitig geeinigt haben. Diese Einstellungen können auf einzelnen Computern geändert werden. Tatsächlich dachten viele Leute in den Pioniertagen der Computer, dass eine einfache Änderung der Portnummer beliebter Dienste einen Angriff abwehren würde. Heutzutage sind Angriffe viel raffinierter. Es macht wenig Sinn, einen automatisierten Port-Scanner zu überraschen, indem man ändert, auf welchem Port ein Dienst lauscht.
Stattdessen regelt eine Firewall, welche Aktivitäten an einem bestimmten Port erlaubt sind.
[ Kostenloser Download:Spickzettel für fortgeschrittene Linux-Befehle. ]
Die Firewall-cmd-Schnittstelle
Ihre Infrastruktur verfügt möglicherweise über einen Server in einem Rack mit dem alleinigen Zweck, eine Firewall auszuführen, oder Sie haben möglicherweise eine in den Router – oder Modem – eingebettete Firewall, die als Ihr primäres Gateway zum Internet fungiert. Sie haben wahrscheinlich auch eine Firewall auf Ihrer persönlichen Workstation oder Ihrem Laptop. Alle diese Firewalls verfügen über eine eigene Konfigurationsoberfläche. Dieser Artikel behandelt den firewall-cmd
terminal-Befehl, der auf den meisten Linux-Distributionen zu finden ist.
Firewall-cmd ist ein Front-End-Tool zum Verwalten der firewalld
Daemon, der mit dem Netfilter-Framework des Linux-Kernels interagiert. Dieser Stapel ist wahrscheinlich nicht auf den eingebetteten Modems vorhanden, die in kleinen und mittleren Unternehmen üblich sind, aber er ist auf oder verfügbar für jede Linux-Distribution, die systemd
verwendet .
Ohne aktive Firewall, firewall-cmd
nichts zu kontrollieren hat, also ist der erste Schritt sicherzustellen, dass firewalld
läuft:
$ sudo systemctl enable --now firewalld
Dieser Befehl startet den Firewall-Daemon und stellt ihn so ein, dass er beim Neustart automatisch geladen wird.
Blockiere (fast) alles
Ein allgemeiner Ratschlag bei der Konfiguration einer Firewall lautet, zuerst alles zu blockieren und dann die Ports zu öffnen, von denen Sie wissen, dass Sie sie tatsächlich benötigen. Das bedeutet jedoch, dass Sie wissen müssen, was Sie brauchen, und das herauszufinden, ist manchmal ein ganz eigener Nachmittagsjob.
Wenn Ihre Organisation beispielsweise einen eigenen DNS- oder DNS-Caching-Dienst betreibt, müssen Sie daran denken, den Port (normalerweise 53) zu entsperren, der die DNS-Kommunikation abwickelt. Wenn Sie sich auf SSH verlassen, um Ihre Server remote zu konfigurieren, dürfen Sie diesen Port nicht blockieren. Sie müssen jeden Dienst berücksichtigen, der auf Ihrer Infrastruktur ausgeführt wird, und Sie müssen verstehen, ob dieser Dienst nur intern ist oder ob er mit der Außenwelt interagieren muss.
Bei proprietärer Software können Anrufe an die Außenwelt getätigt werden, von denen Sie nicht einmal wissen. Wenn einige Anwendungen schlecht auf eine kürzlich eingerichtete strenge Firewall reagieren, müssen Sie möglicherweise ein Reverse Engineering durchführen (oder mit der Support-Hotline der Anwendung sprechen), um herauszufinden, welche Art von Datenverkehr sie zu erstellen versucht und warum. In der Open-Source-Welt ist dieses Problem weniger verbreitet, aber es ist nicht außerhalb des Bereichs der Möglichkeiten, insbesondere im Fall komplexer Software-Stacks (zum Beispiel telefonieren heute sogar Mediaplayer mit dem Internet, und sei es nur, um Albumcover zu holen oder eine Titelliste).
Firewall-cmd verwendet Zonen als Voreinstellungen, sodass Sie vernünftige Standardeinstellungen auswählen können. Auf diese Weise müssen Sie keine Firewall von Grund auf neu erstellen. Zonen gelten für eine Netzwerkschnittstelle, sodass Sie auf einem Server mit zwei Ethernet-Schnittstellen möglicherweise eine Zone haben, die eine Ethernet-Schnittstelle steuert, und eine andere Zone, die die andere steuert.
Es lohnt sich, sich Zeit zu nehmen, um sich mit den auf Ihrem System bereitgestellten Zonen vertraut zu machen. Um alle verfügbaren Zonen anzuzeigen, verwenden Sie:
$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
So sehen Sie, was in einer bestimmten Zone freigegeben ist:
$ sudo firewall-cmd --zone work --list-all
work
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Verwenden Sie eine der vorhandenen Zonen als Ausgangspunkt für Ihre eigenen Firewall-Regeln oder erstellen Sie einfach Ihre eigenen.
Zone erstellen
Um eine neue Zone zu erstellen, verwenden Sie --new-zone
Option.
Alle firewall-cmd
Aktionen bestehen nur, bis die Firewall oder der Computer, auf dem sie ausgeführt wird, neu gestartet wird. Alles, was dauerhaft sein soll, muss von --permanent
begleitet werden Flagge.
Erstellen Sie beispielsweise eine neue permanente Zone namens corp
, und laden Sie dann die Firewall-Regeln neu, damit Ihre neue Zone aktiviert wird:
$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload
Bevor Sie dieser neuen Zone eine Netzwerkschnittstelle zuweisen, fügen Sie ssh
hinzu Dienst, damit Sie aus der Ferne darauf zugreifen können. Verwenden Sie den --permanent
Option, um diese Hinzufügung über Neustarts hinweg bestehen zu lassen:
$ sudo firewall-cmd --zone corp --add-service ssh --permanent
Ihre neue Zone namens corp
, ist jetzt aktiv, lehnt den gesamten Datenverkehr außer SSH ab und ist keiner bestimmten Netzwerkschnittstelle zugewiesen. Um corp
zu erstellen die aktive Zone und die Standardzone für die Netzwerkschnittstelle, die Sie schützen möchten (ens3
in diesem Beispiel) verwenden Sie --change-interface
Möglichkeit:
$ firewall-cmd --change-interface ens3 \
--zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success
Indem Sie corp
erstellen der Standardzone, alle zukünftigen Befehle werden auf corp
angewendet es sei denn, die --zone
Option gibt eine andere Zone an. Ob Sie corp
festlegen möchten als Standard hängt davon ab, ob Sie diese Zone als Ihre neue primäre Zone planen. Wenn ja, funktioniert Folgendes:
$ sudo firewall-cmd --set-default corp
Um die aktuell jeder Schnittstelle zugewiesenen Zonen anzuzeigen, verwenden Sie --get-active-zones
Möglichkeit:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens3
work
interfaces: ens4
Dienste hinzufügen und entfernen
Jetzt, da Sie alles außer SSH blockiert haben, können Sie die Ports öffnen, auf die Ihr Netzwerk angewiesen ist. Die schnelle und einfache Möglichkeit, Datenverkehr durch Ihre Firewall zuzulassen, besteht darin, einen vordefinierten Dienst hinzuzufügen.
Die Liste der verfügbaren vordefinierten Dienste ist umfangreich. Um es anzuzeigen, verwenden Sie:
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]
Angenommen, Sie müssen einen Webserver betreiben. Zuerst würden Sie den Webserver installieren, den Sie verwenden möchten (der httpd
Paket auf RHEL oder Fedora, apache2
auf Ubuntu und Debian). Für dieses Beispiel verwenden wir httpd
:
$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd
Testen Sie dann Ihren Webserver lokal:
$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Versuchen Sie als Nächstes, von einem externen Browser aus eine Verbindung zu Ihrem Webserver herzustellen. Die Verbindung schlägt fehl, was zeigt, dass die Firewall wirksam ist:
$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds
Entsperren Sie einen Dienst
Um HTTP-Datenverkehr durch Ihre Firewall zuzulassen, fügen Sie http
hinzu Dienst:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
Testen Sie dann von einer externen Quelle:
$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Jetzt, da Sie wissen, wie man einen Dienst hinzufügt, ist das Entfernen ziemlich intuitiv:
$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload
Ports hinzufügen und entfernen
Manchmal existiert ein vordefinierter Dienst nicht oder er geht von Standardwerten aus, die nicht zu Ihrem Netzwerk passen. Anstatt einen Dienst hinzuzufügen, können Sie eine Portnummer und einen Protokolltyp direkt mit --add-port
hinzufügen .
Wenn Sie beispielsweise den nicht standardmäßigen Port 1622 für SSH zu Ihrer benutzerdefinierten Zone hinzufügen müssen (wenn Ihre benutzerdefinierte Zone nicht die Standardzone für Ihre Befehle ist, fügen Sie --zone
hinzu Option):
$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Verwenden Sie zum Entfernen dieses Ports --remove-port
:
$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Feuerwände
Mit firewall-cmd
können Sie noch viel mehr tun , wie das Definieren eigener Dienste, ICMP-Blockierung und das Definieren von Quellen für zulässigen eingehenden Datenverkehr. Am besten lernt man durch Experimentieren, also installieren Sie Red Hat Enterprise Linux oder Fedora in GNOME-Boxen und experimentieren Sie mit der Gestaltung des Datenverkehrs durch alle Optionen firewall-cmd
bietet.