Verwenden Sie die Tools iptables und firewalld, um Verbindungsregeln für die Linux-Firewall zu verwalten

Verwenden Sie die Tools iptables und firewalld, um Verbindungsregeln für die Linux-Firewall zu verwalten

Firewall

Eine Firewall ist eine Reihe von Regeln. Wenn ein Paket einen geschützten Netzwerkbereich betritt oder verlässt, wird der Inhalt des Pakets (insbesondere Informationen zu seiner Quelle, seinem Ziel und dem geplanten Protokoll) anhand der Firewall-Regeln geprüft, um zu bestimmen, ob das Paket passieren darf. Hier ist ein einfaches Beispiel:

Firewalls können Anforderungen anhand protokoll- oder zielbasierter Regeln filtern.

Einerseits ist iptables ein Tool zum Verwalten von Firewall-Regeln auf Linux-Rechnern.

Andererseits ist Firewalld auch ein Tool zum Verwalten von Firewall-Regeln auf Linux-Rechnern.

Haben Sie eine Meinung dazu? Was wäre, wenn ich Ihnen sagen würde, dass es ein anderes Tool namens nftable gibt?

Okay, ich gebe zu, dass die ganze Sache ein bisschen komisch riecht, also lassen Sie es mich erklären. Alles beginnt mit Netfilter, das den Zugriff auf den Netzwerkstapel auf der Ebene des Linux-Kernelmoduls steuert. Jahrzehntelang war der iptables-Regelsatz das wichtigste Befehlszeilentool zum Verwalten von Netfilter-Hooks.

Da die zum Aufrufen dieser Regeln erforderliche Syntax etwas kryptisch sein kann, wurden verschiedene benutzerfreundliche Implementierungen wie UFW und Firewalld als Netfilter-Interpreter auf hoher Ebene eingeführt. UFW und Firewalld wurden jedoch in erster Linie entwickelt, um die Art von Problemen zu lösen, mit denen eigenständige Computer konfrontiert sind. Für den Aufbau umfassender Netzwerklösungen sind in der Regel die zusätzlichen Funktionen von iptables oder seit 2014 dessen Ersatz nftables (über das Befehlszeilentool nft) erforderlich.
iptables bleibt bestehen und wird immer noch häufig verwendet. Tatsächlich können Sie davon ausgehen, dass Sie in Ihrer Arbeit als Administrator noch viele Jahre lang auf durch iptables geschützte Netzwerke stoßen werden. Aber nftables bringt einige wichtige neue Funktionen mit sich, indem es das klassische Netfilter-Toolset erweitert.

Von nun an werde ich anhand von Beispielen zeigen, wie Firewalld und iptables einfache Verbindungsprobleme lösen können.

Konfigurieren des HTTP-Zugriffs mit Firewalld

Wie der Name schon vermuten lässt, ist Firewalld ein Mitglied der systemd-Familie. Firewalld kann auf Debian-/Ubuntu-Rechnern installiert werden, ist jedoch auf RedHat und CentOS standardmäßig installiert. Wenn auf Ihrem Computer ein Webserver wie Apache ausgeführt wird, können Sie die ordnungsgemäße Funktion der Firewall überprüfen, indem Sie zum Webstammverzeichnis des Servers navigieren. Wenn die Site nicht erreichbar ist, erledigt Firewalld seine Arbeit.

Sie verwenden das Tool Firewall-cmd, um die Firewalld-Einstellungen über die Befehlszeile zu verwalten. Fügen Sie den Parameter --state hinzu, um den aktuellen Firewall-Status zurückzugeben:

# Firewall-Befehl --state
läuft

Standardmäßig ist Firewalld aktiv und lehnt den gesamten eingehenden Datenverkehr mit wenigen Ausnahmen wie SSH ab. Dadurch wird Ihre Website nicht zu stark besucht und Sie sparen auf jeden Fall eine Menge Kosten für die Datenübertragung. Da dies jedoch wahrscheinlich nicht das ist, was Sie sich unter einem Webserver vorgestellt haben, müssen Sie die HTTP- und HTTPS-Ports öffnen, die üblicherweise als 80 bzw. 443 bezeichnet werden. Firewalld bietet hierfür zwei Möglichkeiten. Eine Möglichkeit ist der Parameter --add-port, der direkt auf die Portnummer und das zu verwendende Netzwerkprotokoll verweist (in diesem Fall TCP). Der Parameter --permanent weist Firewalld an, diese Regel bei jedem Serverstart zu laden:

# Firewall-Befehl --permanent --add-port=80/tcp
# Firewall-cmd --permanent --add-port=443/tcp

Der Parameter --reload wendet diese Regeln auf die aktuelle Sitzung an:

# Firewall-cmd --reload

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

# Firewall-Befehl --list-services
dhcpv6-client http https ssh

Vorausgesetzt, Sie haben wie zuvor beschrieben Browserzugriff hinzugefügt, sollten jetzt alle HTTP-, HTTPS- und SSH-Ports geöffnet sein (dhcpv6-Client). Dadurch kann Linux eine IPv6-IP-Adresse von einem lokalen DHCP-Server anfordern.

Konfigurieren eines gesperrten Kundenkiosks mit iptables

Sie haben bestimmt schon Kioske gesehen – das sind Tablets, Touchscreens und Geldautomaten-ähnliche PCs in einer Box, die man überall in Flughäfen, Bibliotheken und Geschäftsräumen findet und die Kunden und Passanten einladen, sich die Inhalte anzusehen. Das Problem bei den meisten Kiosken besteht darin, dass die Benutzer ihre Geräte im Allgemeinen nicht so behandeln sollen, als wären es ihre eigenen zu Hause. Sie werden normalerweise nicht zum Surfen, Ansehen von YouTube-Videos oder Starten von Denial-of-Service-Angriffen auf das Pentagon verwendet. Um sicherzustellen, dass sie nicht missbraucht werden, müssen Sie sie wegschließen.

Eine Möglichkeit besteht darin, eine Art Kioskmodus anzuwenden, entweder durch geschickten Einsatz des Linux-Display-Managers oder auf Browserebene. Um sicherzustellen, dass alle Schwachstellen geschlossen sind, können Sie jedoch auch einige harte Netzwerkkontrollen über eine Firewall hinzufügen. Im nächsten Abschnitt beschreibe ich, wie Sie dies mit iptables erreichen.

Bei der Verwendung von iptables müssen Sie zwei wichtige Dinge beachten: Die Reihenfolge, in der Sie die Regeln angeben, ist entscheidend, und die Iptable-Regeln allein überstehen einen Neustart nicht. Ich werde sie hier einzeln durchgehen.

Kiosk-Engineering <br /> Um dies alles zu veranschaulichen, stellen wir uns vor, wir arbeiten in einer großen Ladenkette namens BigMart. Es gibt sie schon seit Jahrzehnten; tatsächlich sind unsere imaginären Großeltern wahrscheinlich schon als Kinder dort eingekauft. Doch dieser Tage zählen die Leute in der Unternehmenszentrale von BigMart wahrscheinlich nur die Stunden, bis Amazon sie endgültig aus dem Sortiment nimmt.

Dennoch tut die IT-Abteilung von BigMart ihr Bestes und hat Ihnen gerade einige WLAN-fähige Kioskgeräte geschickt, die Sie an strategischen Standorten im gesamten Geschäft installieren können. Die Idee dahinter ist, dass sie einen Webbrowser anzeigen, der bei einer Produktseite von BigMart.com angemeldet ist und es ihnen ermöglicht, Artikelmerkmale, Gangpositionen und Lagerbestände nachzuschlagen. Diese Kioske erfordern auch Zugriff auf bigmart-data.com, wo viele der Bild- und Videomedien gespeichert sind.

Darüber hinaus möchten Sie auch Updates und ggf. Paketdownloads ermöglichen. Letztendlich möchten Sie eingehenden SSH-Zugriff nur von Ihrer lokalen Arbeitsstation aus zulassen und alle anderen blockieren. Das folgende Diagramm veranschaulicht, wie das Ganze funktioniert:

Der Verkehrsfluss des Kiosks wird durch iptables gesteuert.

Skript

So fügen Sie dies alles in ein Bash-Skript ein:

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

Die grundlegende Anatomie unserer Regel beginnt mit -A und teilt iptables mit, dass wir die folgende Regel hinzufügen möchten. OUTPUT: Dies bedeutet, dass diese Regel Teil der Ausgabekette sein sollte. -p gibt an, dass diese Regel nur für Pakete gilt, die das TCP-Protokoll verwenden, während -d uns mitteilt, dass das Ziel bigmart.com ist. Das Flag -j weist auf ACCEPT als die auszuführende Aktion hin, wenn ein Paket der Regel entspricht. In der ersten Regel besteht die Aktion darin, die Anfrage zuzulassen oder anzunehmen. Auf einer niedrigeren Ebene können Sie jedoch Anfragen sehen, die entfernt oder abgelehnt werden.

Denken Sie daran, dass die Reihenfolge wichtig ist. Dies liegt daran, dass iptables eine Anforderung über alle seine Regeln hinaus ausführt, aber nur, bis eine Übereinstimmung gefunden wird. Eine ausgehende Browseranfrage an beispielsweise youtube.com durchläuft die ersten vier Regeln, wird aber gelöscht, wenn sie die Regel --dport 80 oder --dport 443 erreicht – je nachdem, ob es sich um eine HTTP- oder HTTPS-Anfrage handelt. Iptables macht sich nicht die Mühe, noch einmal nachzuprüfen, da es eine Übereinstimmung gibt.

Wenn das System hingegen bei ubuntu.com ein Software-Upgrade anfordert, wird dies durchgeführt, wenn die entsprechende Regel erfüllt ist. Offensichtlich lassen wir hier nur das Senden von HTTP- oder HTTPS-Anfragen an unser BigMart- oder Ubuntu-Ziel zu und an keine anderen Ziele.

Die letzten beiden Regeln verarbeiten eingehende SSH-Anfragen. Da sie nicht Port 80 oder 443, sondern 22 verwenden, werden sie von den beiden vorherigen DROP-Regeln nicht abgelehnt. In diesem Fall werden Anmeldeanforderungen von meiner Arbeitsstation akzeptiert, Anforderungen von anderen Orten werden jedoch gelöscht. Dies ist wichtig: Stellen Sie sicher, dass die IP-Adresse, die Sie für die Port-22-Regel verwenden, mit der Adresse des Computers übereinstimmt, mit dem Sie sich anmelden. Andernfalls werden Sie sofort gesperrt. Das ist natürlich kein großes Problem, da Sie bei der aktuellen Konfiguration einfach den Server neu starten können und die iptables-Regeln entfernt werden. Wenn Sie einen LXC-Container als Server verwenden und sich von Ihrem LXC-Host aus anmelden, verwenden Sie die IP-Adresse, die Ihr Host für die Verbindung mit dem Container verwendet, und nicht seine öffentliche Adresse.

Wenn sich die IP meines Computers jemals ändert, müssen Sie daran denken, diese Regel zu aktualisieren. Andernfalls werden Sie ausgesperrt.

Zu Hause spielen (hoffentlich auf einer ausrangierten VM)? Großartig zum Erstellen eigener Skripte. Jetzt kann ich das Skript speichern, mit chmod ausführbar machen und als sudo ausführen. Machen Sie sich wegen des Fehlers „bigmart-data.com nicht gefunden“ keine Sorgen – die Datei kann natürlich nicht gefunden werden, sie existiert nicht.

chmod +X Skriptname.sh
sudo ./Skriptname.sh

Sie können cURL von der Befehlszeile aus verwenden. Die Anforderung von ubuntu.com funktioniert, aber manning.com schlägt fehl.

curl ubuntu.com
curl.manning.com

Konfigurieren Sie iptables so, dass es beim Systemstart geladen wird

Wie erreiche ich nun, dass diese Regeln bei jedem Start des Automaten automatisch geladen werden? Der erste Schritt besteht darin, das Tool iptables-save zu verwenden. Dadurch wird in Ihrem Stammverzeichnis eine Datei mit einer Liste von Regeln erstellt. Dieses Pipe-Zeichen, gefolgt vom Tee-Befehl, wendet meine Sudo-Berechtigungen auf den zweiten Teil der Zeichenfolge an: das tatsächliche Speichern der Datei im ansonsten eingeschränkten Stammverzeichnis.

Ich kann dem System dann sagen, dass es bei jedem Booten ein Programm namens „iptables-restore“ ausführen soll. Normale Cron-Jobs, wie wir sie in den vorherigen Modulen gesehen haben, helfen nicht, da sie zu festgelegten Zeiten ausgeführt werden, wir jedoch nicht wissen, wann unser Computer abstürzt und neu startet.

Es gibt viele Möglichkeiten, mit diesem Problem umzugehen. Hier ist eines:

Auf meiner Linux-Box werde ich ein Programm namens Anacron installieren, das eine Datei namens Anacrontab im Verzeichnis /etc/ bereitstellt. Ich würde diese Datei bearbeiten und den folgenden iptables-restore-Befehl hinzufügen, der sie anweist, die aktuellen Werte dieser .Rule-Datei jeden Tag (falls erforderlich) eine Minute nach dem Booten in iptables zu laden. Ich gebe dem Job eine Kennung (iptables-restore) und füge dann den Befehl selbst hinzu. Da Sie mit mir zu Hause spielen, sollten Sie Ihr System neu starten, um das Ganze zu testen.

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

Ich hoffe, diese praktischen Beispiele haben veranschaulicht, wie Sie mit iptables und firewalld Verbindungsprobleme auf einer Linux-basierten Firewall beheben können.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Analysieren Sie die grundlegenden Modulverwaltungs- und Zeitverwaltungsvorgänge des Linux-Kernels
  • So ermitteln Sie die Ausführungszeit eines Befehls oder Prozesses in Linux
  • Detaillierte Erläuterung von 2 Methoden zum Synchronisieren der Netzwerkzeit im Linux/CentOS-System
  • So führen Sie einen Befehl zu einem bestimmten Zeitpunkt in Linux aus
  • 15 Linux-Befehlsaliase, die Ihnen Zeit sparen
  • Freigabe von Befehlen zur Synchronisierung der Datums- und Uhrzeiteinstellung unter Linux
  • Detaillierte Erläuterung der Zeitsynchronisierungseinstellungen des Linux NTP-Servers
  • Linux-Batch-Befehl zum Löschen von Dateien nach Zeit (Dateien vor N Tagen löschen)
  • Tutorial zum Konfigurieren und Verwenden des i3-Fenstermanagers unter Linux
  • 8 Befehle zur effektiven Verwaltung von Prozessen in Linux
  • Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers

<<:  Protokollieren Sie ein langsames Abfrageereignis, das durch eine Fehleinschätzung des Online-MySQL-Optimierers verursacht wurde.

>>:  Lassen Sie uns über das v-on-Parameterproblem in Vue sprechen

Artikel empfehlen

Implementierung eines einfachen Karussells auf Basis von JavaScript

In diesem Artikel wird der spezifische JavaScript...

So erstellen Sie mit Docker ein Basisimage der Python-Laufzeitumgebung

1. Vorbereitung 1.1 Laden Sie das Python-Installa...

JS Asynchronous Stack Tracing: Warum „await“ besser ist als „Promise“

Überblick Der grundlegende Unterschied zwischen a...

Einführung in die MySQL-Optimierung für die Unternehmensproduktion

Im Vergleich zu anderen großen Datenbanken wie Or...

Detaillierte Erklärung zur Verwendung von Filtereigenschaften in CSS3

Als ich kürzlich das Intranet-Portal änderte, sti...

Beispiele für die korrekte Verwendung von Karten in WeChat-Miniprogrammen

Inhaltsverzeichnis Vorwort 1. Vorbereitung 2. Tat...

MySQL-Triggerprinzip und Analyse von Anwendungsbeispielen

Dieser Artikel erläutert anhand von Beispielen di...

Erklärung zur Verwendung von JavaScript ECharts

Ich habe ECharts schon einmal bei einem Projekt v...

So schreiben Sie hochwertigen JavaScript-Code

Inhaltsverzeichnis 1. Einfach zu lesender Code 1....

Detaillierter Code zur Implementierung einer 3D-Tag-Cloud in Vue

Vorschau: Code: Seitenabschnitte: <Vorlage>...