GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sichern Sie Ihr Linux-Netzwerk mit firewall-cmd

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.


Linux
  1. So sichern Sie Ihre Linux-E-Mail-Dienste mit SSL/TLS

  2. Erstellen Sie mit Fluxion unter Kali Linux einen bösen Zwilling Ihres Netzwerks

  3. Sichern Sie Ihren Linux-Server mit Fail2Ban [Anfängerleitfaden]

  4. 6 unverzichtbare Open-Source-Tools zur Sicherung Ihres Linux-Servers

  5. Überprüfen Sie Ihre Netzwerkverbindungen unter Linux

Machen Sie Linux mit Firewalls stärker

Schützen Sie Ihre Online-Privatsphäre mit diesen Linux-Distributionen

So sichern Sie Linux-Server mit SE Linux

Network Manager unter Linux mit Beispielen

So sichern Sie eine Linux-Firewall mit IPTables-Regeln

5 Best Practices für Linux SSH-Sicherheit zum Schutz Ihrer Systeme