fwbuilder
ist zweifellos unter ihnen eines der besten.
iptables
und ip6tables
gesteuert werden. Der Unterschied zwischen diesen beiden Befehlen besteht darin, dass ersterer auf das IPv4-Netzwerk einwirkt, letzterer auf IPv6. Da beide Netzwerk-Protokoll-Stapel wahrscheinlich noch viele Jahre in Gebrauch sein werden, müssen beide Hilfsprogramme parallel verwendet werden.
filter
betrifft Filterregeln (ein Paket annehmen, zurückweisen oder ignorieren);
nat
betrifft die Übersetzung von Quell- oder Zieladressen und der Ports von Paketen;
mangle
betrifft sonstige Änderungen an den IP-Paketen (einschließlich des ToS — Type of Service — Feldes und seiner Optionen);
raw
ermöglicht andere manuelle Veränderungen an Paketen, bevor sie das Verbindungsverfolgungssystem erreichen.
security
is used for Mandatory Access Control networking rules, implemented by Linux Security Modules such as SELinux.
filter
enthält drei Standardketten:
INPUT
: betrifft Pakete, deren Ziel die Firewall selbst ist;
OUTPUT
: betrifft Pakete, die von der Firewall ausgesandt werden;
FORWARD
: betrifft Pakete, die die Firewall durchqueren (die weder ihre Quelle noch ihr Ziel ist).
nat
enthält ebenfalls drei Standardketten:
PREROUTING
: um Pakete zu verändern, sobald sie eintreffen;
POSTROUTING
: um Pakete zu verändern, wenn sie für die Versendung bereit sind;
INPUT
: to modify packets destined for local sockets;
OUTPUT
: um von der Firewall selbst erzeugte Pakete zu verändern.
-j
für „jump“ in den Befehlen) sie zu der angegebenen Aktion, um die Bearbeitung dort fortzusetzen. Die gebräuchlichsten Verhaltensweisen sind standardisiert, und es gibt fest zugeordnete Aktionen für sie. Die Ausführung einer dieser Standardaktionen bricht die Bearbeitung der Kette ab, da das Schicksal des Pakets bereits besiegelt ist (abgesehen von einer weiter unten genannten Ausnahme):
ACCEPT
: erlaube dem Paket, seinen Weg fortzusetzen;
REJECT
: weise das Paket mit einem ICMP-Fehlerpaket zurück (die Option --reject-with Typ
in Verbindung mit dem Befehl iptables
ermöglicht es, den Fehlertyp auszuwählen);
DROP
: lösche (ignoriere) das Paket;
LOG
: protokolliere (mittels syslogd
) eine Meldung mit einer Beschreibung des Pakets; man beachte, dass hierdurch die Verarbeitung nicht abgebrochen wird und die Ausführung der Kette mit der nächsten Regel weitergeht, weshalb das Protokollieren zurückgewiesener Pakete sowohl die LOG-Regel als auch die REJECT/DROP-Regel erfordert;
NFLOG
: log a message via the loaded logging backend (usually nfnetlink_log), which can be better adapted and more efficient than syslogd
for handling large numbers of messages; note that this action, like LOG, also returns processing to the next rule in the calling chain;
RETURN
: beende die Verarbeitung der aktuellen Kette und kehre zu der aufrufenden Kette zurück; falls die aktuelle Kette eine Standardkette ist, gibt es keine aufrufende Kette, und so wird stattdessen die voreingestellte Aktion (die durch die Option -P
des Befehls iptables
festgelegt wird) ausgeführt;
SNAT
(nur in der Tabelle nat
): wende Source NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
DNAT
(nur in der Tabelle nat
): wende Destination NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
MASQUERADE
(nur in der Tabelle nat
): wende masquerading an (ein Sonderfall von Source NAT);
REDIRECT
(nur in der Tabelle nat
): lenke das Paket an einen vorgegebenen Port der Firewall selbst um; dies kann dazu benutzt werden, einen transparenten Webproxy aufzusetzen, der auf der Clientseite ohne Konfiguration funktioniert, da der Client davon ausgeht, dass er direkt mit dem Empfänger verbunden ist, während der Nachrichtenaustausch in Wirklichkeit durch den Proxy läuft.
mangle
-Tabelle betreffen, liegen außerhalb des Rahmens dieses Textes. Die Handbuchseiten iptables(8) und ip6tables(8) enthalten umfangreiche Auflistungen.
iptables
und ip6tables
können Tabellen, Ketten und Regeln gehandhabt werden. Ihre Option -t tabelle
zeigt an, welche Tabelle bearbeitet werden soll (die Voreinstellung ist filter
).
-N chain
option creates a new chain. The -X chain
deletes an empty and unused chain. The -A chain rule
adds a rule at the end of the given chain. The -I chain rule_num rule
option inserts a rule before the rule number rule_num. The -D chain rule_num
(or -D chain rule
) option deletes a rule in a chain; the first syntax identifies the rule to be deleted by its number, while the latter identifies it by its contents. The -F chain
option flushes a chain (deletes all its rules); if no chain is mentioned, all the rules in the table are deleted. The -L chain
option lists the rules in the chain; if no chain is mentioned, all chains are listed. Finally, the -P chain action
option defines the default action, or “policy”, for a given chain; note that only standard chains can have such a policy.
bedingungen -j aktionaktions_optionen
dargestellt. Werden mehrere Bedingungen in derselben Regel angegeben, dann ist das Kriterium die Verknüpfung (das logische und) der Bedingungen, die wenigstens so restriktiv ist wie jede einzelne Bedingung.
-p protokoll
vergleicht das Protokollfeld des IP-Pakets. Die häufigsten Werte sind tcp
, udp
, icmp
und icmpv6
. Ein vorangestelltes Ausrufezeichen kehrt die Bedingung um, die dann dem Ausdruck „alle Pakete mit einem anderen als dem angegebenen Protokoll“ entspricht. Dieser Umkehrungsmechanismus ist nicht auf die Option -p
beschränkt, sondern kann auch auf alle anderen Bedingungen angewendet werden.
-s adresse
oder -s network/mask
vergleicht die Quelladresse des Pakets. Dementsprechend vergleicht die Bedingung -d adresse
oder -d network/mask
die Zieladresse.
-i schnittstelle
wählt Pakete, die von der angegebenen Netzwerkschnittstelle kommen. -o schnittstelle
wählt Pakete, die von einer bestimmten Schnittstelle abgehen.
-p tcp
um Bedingungen für die TCP-Ports ergänzt werden durch Ausdrücke wie --source-port port
und --destination-port port
.
--state status
vergleicht den Status eines Pakets in einer Verbindung (hierbei ist das Kernelmodul ipt_conntrack
zur Verbindungsverfolgung erforderlich). Der Status NEW
bezeichnet ein Paket, das eine neue Verbindung eröffnet; ESTABLISHED
gilt für Pakete, die zu einer bereits bestehenden Verbindung gehören, und RELATED
entspricht Paketen, die eine neue Verbindung im Zusammenhang mit einer bestehenden eröffnen (dies ist nützlich für die ftp-data
-Verbindungen im „aktiven“ Modus des FTP-Protokolls).
LOG
hat zum Beispiel folgende Optionen:
--log-level
, mit dem voreingestellten Wert warning
, gibt die Priorität des syslog
-Schweregrads an;
--log-prefix
ermöglicht es, einen Text-Vorspann festzulegen, um protokollierte Meldungen unterscheiden zu können;
--log-tcp-sequence
, --log-tcp-options
und --log-ip-options
kennzeichnen zusätzliche Daten zur Einbindung in die Meldung, und zwar die TCP-Sequenznummer, die TCP-Optionen und die IP-Optionen.
DNAT
bietet die Option --to-destination addresse:port
an, mit der die neue IP-Zieladresse und der neue Zielport gekennzeichnet werden. Genauso bietet SNAT
die Option --to-source addresse:port
an, mit der die neue IP-Quelladresse und der neue Quellport gekennzeichnet werden.
REDIRECT
(nur wenn NAT verfügbar ist) bietet die Option --to-ports port(s)
an, mit der der Port oder der Portbereich gekennzeichnet werden, an den die Pakete umgelenkt werden sollen.
iptables
/ip6tables
aufgerufen werden. Da es mühsam ist, diese Befehle von Hand einzugeben, werden sie normalerweise in einem Skript gespeichert, so dass bei jedem Rechnerstart automatisch dieselbe Konfiguration eingerichtet wird. Dieses Skript kann von Hand geschrieben werden, aber es kann auch interessant sein, es mit einem hochentwickelten Hilfsprogramm wie fwbuilder
zu erstellen.
#
apt install fwbuilder
fwbuilder
die Regeln je nach den Adressen, die den Objekten zugewiesen sind, übersetzen lassen.
fwbuilder
kann dann ein Skript zur Konfigurierung der Firewall in Übereinstimmung mit den festgelegten Regeln erstellen. Seine modulare Architekt bietet die Möglichkeit, Skripte für unterschiedliche Systeme zu erstellen (iptables
für Linux, ipf
für FreeBSD und pf
für OpenBSD).
up
-Anweisung der Datei /etc/network/interfaces
einzutragen. Im folgenden Beispiel ist das Skript unter /usr/local/etc/arrakis.fw
gespeichert.
Beispiel 14.1. Aufruf eines Firewallskripts durch eine interfaces
-Datei
auto eth0 iface eth0 inet static address 192.168.0.1 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 up /usr/local/etc/arrakis.fw