Was ist die Linux-iptables-basierte Ferm-Firewall und wie wird sie konfiguriert?

In Linux-basierte Betriebssysteme, die Firewall par excellence, die Sie verwenden, ist iptables, es ist jedoch auch möglich, dass Sie nftables verwenden, die Weiterentwicklung von iptables, viel effizienter und mit einer viel „menschlicheren“ Syntax, jedoch verwendet nicht die ganze Welt noch nftables. Heute erklären wir, wie man eine Firewall auf Linux-Servern mit Ferm (For Easy Rule Making) konfiguriert, einem iptables-Frontend, mit dem wir sehr einfach, schnell und einfach Regeln zur Firewall hinzufügen können, ohne die Syntax von iptables.

Was ist die Ferm-Firewall und wozu dient sie?

Was ist die Linux-iptables-basierte Ferm-Firewall?

Ferm (For Easy Rule Making) ist ein Frontend von iptables, das bedeutet, dass es tatsächlich iptables verwendet, um Verkehr zuzulassen oder zu verweigern, aber es ermöglicht uns, die Firewall auf sehr fortgeschrittene Weise zu konfigurieren, ohne die Syntax von lernen zu müssen iptables oder erstellen Sie verschiedene Skripte mit iptables, aber wir werden dies direkt mit Ferm tun. Dieses Tool kann die Regeln aus einer Konfigurationsdatei lesen, die wir definieren werden, und später wird es iptables „aufrufen“, um die verschiedenen Regeln nacheinander hinzuzufügen und sie in Echtzeit in den Kernel einzufügen.

Ferms Ziel ist es, System- und Netzwerkadministratoren eine einfache Möglichkeit zu bieten, alle Firewall-Regeln zu lesen und zu schreiben effizient wie möglich. Ferm verwendet eine sehr einfache, aber sehr fortgeschrittene Konfigurationssprache, wir können Variablen, Funktionen, Arrays und sogar Blöcke verwenden. Andere sehr interessante Optionen von Ferm sind, dass es uns ermöglicht, andere Konfigurationsdateien in ein Verzeichnis aufzunehmen und alle diese Regeln automatisch zu importieren und anzuwenden.

Ferm ist immer noch ein iptables-Frontend. Wenn wir dieses Tool verwenden, können wir die Firewall immer direkt mit den iptables-Befehlen bearbeiten und konfigurieren. Tatsächlich kann Ferm die aktuellen iptables-Regeln importieren und automatisch in die Konfigurationsdatei einfügen, um sie später zu bearbeiten oder zu erweitern.

Eines der beliebtesten iptables-Frontends ist ufw, das häufig von System- und Netzwerkadministratoren verwendet wird, um ihre Firewalls einfach und schnell zu konfigurieren.

Installation und Inbetriebnahme von Ferm

Die Installation von Ferm ist wirklich einfach, sie befindet sich derzeit in den meisten Repositorys der verschiedenen Linux-basierten Distributionen. In unserem Fall haben wir die neueste Version von Debian verwendet, um alle Tests durchzuführen, die wir Ihnen beibringen werden. Um dieses Programm, das ein iptables-Frontend ist, zu installieren, müssen wir den folgenden Befehl ausführen:

sudo apt install ferm

Sobald wir diesen Befehl ausführen, sollten wir so etwas sehen, wo uns die zusätzlichen Pakete angezeigt werden, die wir installieren müssen. Im Grunde müssen wir Perl installieren, um dieses Programm korrekt ausführen zu können.

Das Ferm-Installationsprogramm teilt uns mit, dass es die Firewall-Regeln während des Starts aus dem Pfad /etc/ferm/ferm.conf lädt, dh alles in dieser Datei wird automatisch an iptables übergeben, um Netzwerkverkehr zuzulassen oder zu verweigern. Die Standardkonfiguration dieser Firewall ermöglicht uns den Zugriff per SSH aus der Ferne über Port 22, wenn Sie SSH auf diesem Port nicht konfiguriert haben, müssen Sie die Standardwerte bearbeiten und auf „Nein“ klicken, damit es nicht startet , andernfalls verlieren Sie die Verbindung.

Sobald wir Ja oder Nein gewählt haben, beendet apt die Installation aller zusätzlichen Pakete, die wir benötigen, damit dieses Programm funktioniert.

Nach der Installation können wir zum Pfad /etc/ferm/ gehen und sehen sowohl die Konfigurationsdatei namens ferm.conf als auch ein Verzeichnis namens ferm.d, in das wir unsere ferm-Konfigurationsdateien einbinden können, um sie zu importieren wir haben eine größere Modularität.

Ferm kommt bereits standardmäßig mit einer Liste von Regeln, die wir jederzeit entfernen können, aber dies wird uns helfen, mit der Syntax dieses iptables-Frontends umzugehen, daher wird es sehr hilfreich sein. Wenn wir uns die Syntax ansehen, sehen wir, dass sie nftables ähnelt, aber auf iptables basiert.

Im folgenden Screenshot können Sie sehen, wie die Domänen, in denen es konfiguriert werden soll (iptables oder ip6tables), die Tabellen und die Ketten sowie die Regeln, die wir innerhalb der verschiedenen Ketten haben, deklariert werden.

Wir können auch sehen, dass wir standardmäßig mehrere Regeln haben:

  • In der INPUT-Kette ist die Richtlinie DROP, Localhost-Traffic ist erlaubt, ICMP-Traffic und die Verbindung ist über IPsec und auch über SSH mit den Standardports erlaubt. In Bezug auf den Status der Verbindungen werden ungültige Verbindungen GELÖSCHT, und die hergestellten und verwandten Verbindungen sind zulässig, aber die neuen sind nicht zulässig, mit Ausnahme der speziell definierten.

In der OUTPUT-Kette ist definiert, dass die Richtlinie alles akzeptieren soll und der Zustand der Verbindung die hergestellten und verwandten zulässt. In der FORWARD-Kette wird der Datenverkehr durch die Richtlinie verweigert, ungültige Verbindungen werden ausdrücklich blockiert, aber hergestellte und zugehörige Verbindungen werden zugelassen.

Als nächstes sehen Sie diese Konfigurationsdatei im Textformat:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# Verbindungsverfolgung
Mod-Zustandszustand INVALID DROP;
Mod-Zustandszustand (BEZOGEN) ACCEPT;

# lokales Paket zulassen
Schnittstelle, was AKZEPTIEREN;

# auf Ping antworten
proto icmp AKZEPTIEREN;

# IPsec zulassen
proto udp dport 500 AKZEPTIEREN;
@if @eq ($-DOMÄNE, ip) {
proto (besonders ah) AKZEPTIEREN;
} @anders {
proto (bes.) AKZEPTIEREN;
}

# SSH-Verbindungen zulassen
proto tcp dport ssh AKZEPTIEREN;
}
Kette AUSGANG {
Politik AKZEPTIEREN;

# Verbindungsverfolgung
#mod Zustandszustand INVALID DROP;
Mod-Zustandszustand (BEZOGEN) ACCEPT;
}
Kette VORWÄRTS {
Politik DROP;

# Verbindungsverfolgung
Mod-Zustandszustand INVALID DROP;
Mod-Zustandszustand (BEZOGEN) ACCEPT;
}
}
}

@include ferm.d /;

Der interessanteste Teil ist das "@include ferm.d /", das wir im letzten Teil haben. Dies bedeutet, dass alle Konfigurationsdateien importiert werden, die wir in diesem fraglichen Verzeichnis haben.

Diese Ferm-Firewall unten verwendet daher iptables, wenn wir den folgenden Befehl ausführen:

iptables -L

Wir können den aktuellen Zustand von iptables mit allen Regeln sehen, die es in die Firewall integriert hat:

Sobald wir die Standard-Ferm-Konfiguration gesehen haben, werden wir verschiedene Konfigurationsbeispiele sehen, die wir durchführen können.

Ferm-Grundkonfiguration

Die Syntax von Ferm ist sehr einfach und flexibel, aber wir müssen sie lernen, um eine korrekte Konfiguration vorzunehmen. Wir empfehlen Ihnen Greifen Sie auf das offizielle Ferm-Handbuch zu wo Sie alle Details über die zu verwendende Syntax finden und wie die verschiedenen Regeln in der Konfigurationsdatei deklariert werden sollten, können wir diese Firewall dank dieses offiziellen Handbuchs ohne viele Probleme konfigurieren.

Das erste, was Sie beachten sollten, ist, dass alle Ferm-Regeln mit geschweiften Klammern beginnen und enden und die Regeln mit einem Semikolon enden, daher ist es eine bekannte Syntax in der Programmierung. Andere interessante Funktionen sind, dass Zeilenumbrüche ignoriert werden und Sie Kommentare überall einfügen können, indem Sie „#“ an das Ende der Zeile setzen.

Bezüglich der Syntax von iptables und ferm gibt es einige Unterschiede:

  • Eingabeschnittstelle definieren: Schnittstelle (if)
  • Exit-Schnittstelle definieren: Außenfläche (von)
  • Um einen Ursprung zu definieren: saddr
  • Um ein Ziel zu definieren: Papa
  • So definieren Sie ein Protokoll: proto
  • Herkunftshafen: Sport
  • Zielhafen: dport
  • Laden Sie ein Modul: mod
  • Zu einer benutzerdefinierten Regel springen: jump

In Ferm gibt es keine Befehle wie -A, -I, -C, -R oder -D, da alles in eine Konfigurationsdatei geschrieben wird, passiert das gleiche mit den Befehlen einen neuen String hinzuzufügen, umzubenennen oder zu löschen, jetzt verschwindet hier komplett. Andere Funktionen sind, dass ferm Ihnen ermöglicht, verschiedene Regeln zu erben, die in anderen Regeln verwendet werden, und die in der Konfigurationsdatei verschachtelt sind.

Sobald wir ungefähr wissen, wie die Syntax ist, werden wir einige Beispiele sehen, die sie mit iptables vergleichen, in allen werden wir an der Tabelle «filter» in der Kette «INPUT» arbeiten.

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

In ferm würde dies wie folgt geschrieben (Hinzufügen der Richtlinie der OUTPUT- und FORWARD-Kette aus der Filtertabelle):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

Ferm ermöglicht es uns, einfach und schnell die gleichen Regeln in INPUT und OUTPUT zu definieren, ohne die Regeln immer wieder wiederholen zu müssen. Stellen wir uns zum Beispiel vor, dass wir nun das TCP-Protokoll sowohl in der INPUT-Kette als auch in der OUTPUT-Kette akzeptieren wollen, dies wäre in iptables wie folgt:

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

Mit Ferm ist es so einfach wie folgt:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

Wie Sie sehen, ist es viel schneller und einfacher, dieselbe Regel sowohl auf den INPUT als auch auf den OUTPUT anzuwenden.

Diese Firewall enthält auch sehr interessante Funktionen, zum Beispiel können wir überprüfen, ob eine Variable oder Funktion definiert ist, wir können überprüfen, ob zwei Werte gleich oder unterschiedlich sind, einen Booleschen Wert verweigern, Domänen direkt aus Ferm lösen, Parameter und ein langes verketten Liste der Funktionen.

Ferm ermöglicht es Ihnen auch, die iptables-Module zu „laden“, um sie zu verwenden, und die Firewall auf erweiterte Weise zu konfigurieren, zum Beispiel haben wir Folgendes:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

Das können wir in die gesamte Konfigurationsdatei einfügen.

Um die in Ferm eingeführten Regeln anzuwenden, müssen wir den folgenden Befehl ausführen:

ferm -i -t 10 /etc/ferm/ferm.conf

Importieren Sie iptables-Regeln in Ferm

Ferm ermöglicht es uns, die iptables-Regeln, die wir derzeit ausführen, einfach und schnell in eine Ferm-Datei zur späteren Änderung zu importieren. Um dies tun zu können, müssen wir lediglich die iptables-Regeln in den Speicher laden (derzeit verwendet) und diesen Befehl ausführen:

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

Wenn wir es ausführen, können wir die iptables-Regeln direkt in der Syntax von Ferm sehen.

Wenn Sie die iptables-Regeln, die Sie in einer Textdatei haben, in Ferm umwandeln möchten, können Sie den folgenden Befehl ausführen:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

Wie Sie gesehen haben, ist ferm ein großartiges iptables-Frontend, das es uns ermöglicht, es auf fortgeschrittene Weise zu konfigurieren, ohne die Syntax von iptables lernen und die Regeln korrekt in einer Konfigurationsdatei organisieren zu müssen. Wir glauben jedoch, dass die korrekte Konfiguration eines Bash-Skripts mit allen iptables-Regeln kein Frontend oder zusätzliche Software erfordert, obwohl es für einige Leute nützlich sein kann. Wir müssen daran denken, dass Nftables bereits die Möglichkeit beinhaltet, die Regeln direkt in einer Konfigurationsdatei zu konfigurieren, und nicht nur interaktiv über Konsolenbefehle.