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

Linux-Firewalls:Was Sie über iptables und firewalld wissen müssen

Dieser Artikel ist ein Auszug aus meinem Buch „Linux in Action“ und einem zweiten Manning-Projekt, das noch veröffentlicht werden muss.

Die Firewall

Eine Firewall ist eine Reihe von Regeln. Wenn sich ein Datenpaket in oder aus einem geschützten Netzwerkbereich bewegt, wird sein Inhalt (insbesondere Informationen über seinen Ursprung, sein Ziel und das zu verwendende Protokoll) anhand der Firewall-Regeln getestet, um festzustellen, ob es durchgelassen werden sollte. Hier ist ein einfaches Beispiel:

Auf der einen Seite ist iptables ein Tool zum Verwalten von Firewall-Regeln auf einem Linux-Rechner.

Andererseits ist firewalld auch ein Tool zum Verwalten von Firewall-Regeln auf einem Linux-Rechner.

Hast du ein Problem damit? Und würde es Ihnen den Tag verderben, wenn ich Ihnen sagen würde, dass es ein anderes Tool namens nftables gibt?

OK, ich gebe zu, dass das Ganze etwas komisch riecht, also lass es mich erklären. Alles beginnt mit Netfilter, das den Zugriff auf und vom Netzwerkstapel auf der Ebene des Linux-Kernelmoduls steuert. Jahrzehntelang war das primäre Befehlszeilentool zum Verwalten von Netfilter-Hooks der iptables-Regelsatz.

Das Linux-Terminal

  • Die 7 besten Terminalemulatoren für Linux
  • 10 Befehlszeilentools für die Datenanalyse unter Linux
  • Jetzt herunterladen:SSH-Spickzettel
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Linux-Befehlszeilen-Tutorials

Da die zum Aufrufen dieser Regeln erforderliche Syntax etwas geheimnisvoll wirken konnte, wurden verschiedene benutzerfreundliche Implementierungen wie ufw und firewalld als übergeordnete Netfilter-Interpreter eingeführt. Ufw und firewalld sind jedoch in erster Linie darauf ausgelegt, die Art von Problemen zu lösen, mit denen Einzelcomputer konfrontiert sind. Der Aufbau von Netzwerklösungen in voller Größe erfordert oft die zusätzliche Kraft von iptables oder, seit 2014, seinen Ersatz, nftables (über das nft-Befehlszeilentool).

iptables ist nirgendwo hingegangen und wird immer noch häufig verwendet. Tatsächlich sollten Sie davon ausgehen, dass Sie bei Ihrer Arbeit als Administrator noch viele Jahre lang auf iptables-geschützte Netzwerke stoßen werden. Aber nftables hat durch das Hinzufügen zum klassischen Netfilter-Toolset einige wichtige neue Funktionen gebracht.

Von hier an zeige ich anhand von Beispielen, wie firewalld und iptables einfache Verbindungsprobleme lösen.

Konfigurieren Sie den HTTP-Zugriff mit Firewalld

Wie Sie vielleicht anhand des Namens erraten haben, ist Firewalld Teil der Systemd-Familie. Firewalld kann auf Debian/Ubuntu-Rechnern installiert werden, ist aber standardmäßig auf Red Hat und CentOS vorhanden. Wenn auf Ihrem Computer ein Webserver wie Apache ausgeführt wird, können Sie bestätigen, dass die Firewall funktioniert, indem Sie zum Webstammverzeichnis Ihres Servers navigieren. Wenn die Site nicht erreichbar ist, erledigt Firewalld seine Arbeit.

Sie verwenden das firewall-cmd Tool zum Verwalten von Firewalld-Einstellungen über die Befehlszeile. Hinzufügen des –state Argument gibt den aktuellen Firewall-Status zurück:

# firewall-cmd --state
running

Standardmäßig ist firewalld aktiv und weist den gesamten eingehenden Datenverkehr mit einigen Ausnahmen wie SSH zurück. Das bedeutet, dass Ihre Website nicht zu viele Besucher bekommt, was Ihnen sicherlich eine Menge Kosten für die Datenübertragung erspart. Da dies jedoch wahrscheinlich nicht das ist, was Sie für Ihren Webserver im Sinn hatten, sollten Sie die HTTP- und HTTPS-Ports öffnen, die per Konvention als 80 bzw. 443 bezeichnet werden. Firewalld bietet zwei Möglichkeiten, dies zu tun. Einer ist durch den –add-port -Argument, das die Portnummer direkt zusammen mit dem verwendeten Netzwerkprotokoll (in diesem Fall TCP) referenziert. Der –permanent Argument weist Firewalld an, diese Regel jedes Mal zu laden, wenn der Server bootet:

# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp

Der –reload Argument wendet diese Regeln auf die aktuelle Sitzung an:

# firewall-cmd --reload

Neugierig auf die aktuellen Einstellungen Ihrer Firewall? Führen Sie –list-services aus :

# firewall-cmd --list-services
dhcpv6-client http https ssh

Angenommen, Sie haben den Browserzugriff wie zuvor beschrieben hinzugefügt, sollten die HTTP-, HTTPS- und SSH-Ports jetzt alle offen sein – zusammen mit dhcpv6-client , wodurch Linux eine IPv6-IP-Adresse von einem lokalen DHCP-Server anfordern kann.

Konfigurieren Sie einen gesperrten Kundenkiosk mit iptables

Ich bin sicher, Sie haben Kioske gesehen – das sind die Tablets, Touchscreens und geldautomatenähnlichen PCs in einer Kiste, die Flughäfen, Bibliotheken und Unternehmen herumliegen lassen und Kunden und Passanten zum Durchsuchen von Inhalten einladen. Die Sache mit den meisten Kiosken ist, dass Sie normalerweise nicht möchten, dass sich die Benutzer wie zu Hause fühlen und sie wie ihre eigenen Geräte behandeln. Sie sind im Allgemeinen nicht zum Surfen, Anzeigen von YouTube-Videos oder zum Starten von Denial-of-Service-Angriffen gegen das Pentagon gedacht. Um sicherzustellen, dass sie nicht missbraucht werden, müssen Sie sie sperren.

Eine Möglichkeit besteht darin, eine Art Kioskmodus anzuwenden, sei es durch die geschickte Verwendung eines Linux-Display-Managers oder auf Browserebene. Aber um sicherzustellen, dass Sie alle Löcher gestopft haben, möchten Sie wahrscheinlich auch einige harte Netzwerkkontrollen durch eine Firewall hinzufügen. Im folgenden Abschnitt beschreibe ich, wie ich es mit iptables machen würde.

Es gibt zwei wichtige Dinge, die Sie bei der Verwendung von iptables beachten sollten:Die Reihenfolge, die Sie Ihren Regeln geben, ist entscheidend, und iptables-Regeln überleben einen Neustart nicht. Ich werde diese hier einzeln ansprechen.

Das Kiosk-Projekt

Stellen wir uns zur Veranschaulichung vor, wir arbeiten für ein Geschäft, das Teil einer größeren Kette namens BigMart ist. Es gibt sie schon seit Jahrzehnten; Tatsächlich sind unsere imaginären Großeltern wahrscheinlich mit dem Einkaufen dort aufgewachsen. Aber heutzutage zählen die Leute in der BigMart-Unternehmenszentrale wahrscheinlich nur die Stunden, bevor Amazon sie endgültig in den Abgrund treibt.

Nichtsdestotrotz gibt die IT-Abteilung von BigMart ihr Bestes und hat Ihnen gerade einige WLAN-fähige Kioskgeräte geschickt, die Sie voraussichtlich an strategischen Stellen in Ihrem Geschäft installieren werden. Die Idee ist, dass sie einen Webbrowser anzeigen, der auf den Produktseiten von BigMart.com angemeldet ist, sodass sie Warenmerkmale, Gangpositionen und Lagerbestände nachschlagen können. Die Kioske benötigen außerdem Zugriff auf bigmart-data.com, wo viele der Bild- und Videomedien gespeichert sind.

Außerdem möchten Sie Updates und, falls erforderlich, Paket-Downloads zulassen. Schließlich möchten Sie den eingehenden SSH-Zugriff nur von Ihrer lokalen Workstation aus zulassen und alle anderen blockieren. Die folgende Abbildung zeigt, wie das alles funktionieren wird:

Das Skript

So passt das alles in ein Bash-Skript:

#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

Der grundlegende Aufbau unserer Regeln beginnt mit -A , indem Sie iptables mitteilen, dass wir die folgende Regel hinzufügen möchten. OUTPUT bedeutet, dass diese Regel Teil der OUTPUT-Kette werden soll. -p gibt an, dass diese Regel nur für Pakete gilt, die das TCP-Protokoll verwenden, wobei -d sagt uns, das Ziel ist bigmart.com. Das -j Flag zeigt auf ACCEPT als Aktion, die ausgeführt werden soll, wenn ein Paket mit der Regel übereinstimmt. In dieser ersten Regel besteht diese Aktion darin, die Anforderung zuzulassen oder anzunehmen. Aber weiter unten sehen Sie Anfragen, die verworfen oder abgelehnt werden.

Denken Sie daran, dass die Reihenfolge wichtig ist. Und das liegt daran, dass iptables eine Anfrage über jede seiner Regeln hinaus laufen lässt, aber nur bis es eine Übereinstimmung erhält. Eine ausgehende Browseranfrage für beispielsweise youtube.com übergibt also die ersten vier Regeln, aber wenn sie zu einem der –dport 80 gelangt oder –dport 443 Regel – je nachdem, ob es sich um eine HTTP- oder HTTPS-Anfrage handelt – wird sie verworfen. iptables wird nicht weiter nachsehen, weil das eine Übereinstimmung war.

Andererseits wird eine Systemanfrage an ubuntu.com für ein Software-Upgrade durchkommen, wenn sie auf die entsprechende Regel trifft. Was wir hier tun, ist offensichtlich, ausgehende HTTP- oder HTTPS-Anforderungen nur an unsere BigMart- oder Ubuntu-Ziele und an keine anderen zuzulassen.

Die letzten beiden Regeln behandeln eingehende SSH-Anfragen. Sie wurden nicht bereits von den beiden vorherigen Drop-Regeln abgelehnt, da sie nicht die Ports 80 oder 443, sondern 22 verwenden. In diesem Fall werden Anmeldeanforderungen von meiner Workstation akzeptiert, Anforderungen für andere werden jedoch verworfen. Das ist wichtig:Stellen Sie sicher, dass die IP-Adresse, die Sie für Ihre Port-22-Regel verwenden, mit der Adresse des Computers übereinstimmt, den Sie zum Anmelden verwenden – wenn Sie das nicht tun, werden Sie sofort gesperrt. Es ist natürlich keine große Sache, denn so wie es derzeit konfiguriert ist, könnten Sie den Server einfach neu starten und die iptables-Regeln werden alle gelöscht. Wenn Sie einen LXC-Container als Server verwenden und sich von Ihrem LXC-Host aus anmelden, verwenden Sie die IP-Adresse, die Ihr Host verwendet, um sich mit dem Container zu verbinden, nicht seine öffentliche Adresse.

Sie müssen daran denken, diese Regel zu aktualisieren, wenn sich die IP-Adresse meines Computers jemals ändert. andernfalls werden Sie gesperrt.

Zu Hause mitspielen (hoffentlich auf einer Art Wegwerf-VM)? Toll. Erstellen Sie Ihr eigenes Skript. Jetzt kann ich das Skript speichern, benutze chmod um es ausführbar zu machen, und führen Sie es als sudo aus . Machen Sie sich keine Sorgen darüber, dass bigmart-data.com not found wird Fehler – natürlich nicht gefunden; es existiert nicht.

chmod +X scriptname.sh
sudo ./scriptname.sh

Sie können Ihre Firewall über die Befehlszeile mit cURL testen . Das Anfordern von ubuntu.com funktioniert, aber bemannen.com schlägt fehl.

curl ubuntu.com
curl manning.com

Konfigurieren von iptables zum Laden beim Systemstart

Das Linux-Terminal

  • Die 7 besten Terminalemulatoren für Linux
  • 10 Befehlszeilentools für die Datenanalyse unter Linux
  • Jetzt herunterladen:SSH-Spickzettel
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Linux-Befehlszeilen-Tutorials

Wie bekomme ich nun, dass diese Regeln jedes Mal automatisch geladen werden, wenn der Kiosk startet? Der erste Schritt besteht darin, die aktuellen Regeln mit iptables-save in einer .rules-Datei zu speichern Werkzeug. Dadurch wird eine Datei im Stammverzeichnis erstellt, die eine Liste der Regeln enthält. Die Pipe, gefolgt vom tee-Befehl, ist notwendig, um mein sudo anzuwenden Berechtigung für den zweiten Teil der Zeichenfolge:das tatsächliche Speichern einer Datei im ansonsten eingeschränkten Stammverzeichnis.

Ich kann das System dann anweisen, ein verwandtes Tool namens iptables-restore auszuführen jedes Mal, wenn es bootet. Ein normaler Cron-Job, wie wir ihn im vorherigen Modul gesehen haben, hilft nicht, weil er zu festgelegten Zeiten ausgeführt wird, aber wir haben keine Ahnung, wann unser Computer abstürzen und neu starten könnte.

Es gibt viele Möglichkeiten, dieses Problem zu lösen. Hier ist einer:

Auf meinem Linux-Rechner installiere ich ein Programm namens anacron, das uns eine Datei namens anacrontab im Verzeichnis /etc/ zur Verfügung stellt. Ich werde die Datei bearbeiten und diese iptables-restore hinzufügen Befehl, der ihm mitteilt, die aktuellen Werte dieser .rules-Datei jeden Tag (falls erforderlich) eine Minute nach dem Booten in iptables zu laden. Ich gebe dem Job eine Kennung (iptables-restore ) und fügen Sie dann den Befehl selbst hinzu. Da du zu Hause mit mir spielst, solltest du das alles testen, indem du dein System neu startest.

sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules

Ich hoffe, diese praktischen Beispiele haben gezeigt, wie man iptables und firewalld verwendet, um Verbindungsprobleme auf Linux-basierten Firewalls zu verwalten.


Linux
  1. Was Linux-Benutzer und Paketierer über Podman 4.0 auf Fedora wissen müssen

  2. Zugriffskontrolllisten und externe Laufwerke unter Linux:Was Sie wissen müssen

  3. 15 Dinge, die Sie über die Linux-Verzeichnisstruktur wissen müssen

  4. Was Sie über IPv6 wissen müssen

  5. Was ist ein VPN? Alles, was Sie über VPNs wissen müssen

Alles, was Sie über Black Lab Linux wissen müssen

Alles, was Sie über die Linux Mint-Distribution wissen müssen

Alles, was Sie über Inodes in Linux wissen müssen

Alles Wichtige, was Sie über Hard Link in Linux wissen müssen

Alles Wichtige, was Sie über UID in Linux wissen müssen

Alles, was Sie über das Linux /tmp-Verzeichnis wissen müssen