fwbuilder
ist zweifellos unter ihnen eines der besten.
iptables
and ip6tables
commands. The difference between these two commands is that the former acts on the IPv4 network, whereas the latter acts on IPv6. Since both network protocol stacks will probably be around for many years, both tools will need to be used in parallel.
filter
betrifft Filterregeln (ein Paket annehmen, zurückweisen oder ignorieren);
nat
concerns translation of source or destination addresses and ports of packages;
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.
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;
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;
ULOG
: protokolliere eine Meldung mittels ulogd
, das für die Verarbeitung einer hohen Anzahl von Meldungen anpassungsfähiger und effizienter ist als syslogd
; man beachte, dass dieser Vorgang, wie bei LOG, die weitere Verarbeitung an die nächste Regel in der aufrufenden Kette zurückgibt;
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
(only in the nat
table): apply Source NAT (extra options describe the exact changes to apply);
DNAT
(only in the nat
table): apply Destination NAT (extra options describe the exact changes to apply);
MASQUERADE
(only in the nat
table): apply masquerading (a special case of Source NAT);
REDIRECT
(only in the nat
table): redirect a packet to a given port of the firewall itself; this can be used to set up a transparent web proxy that works with no configuration on the client side, since the client thinks it connects to the recipient whereas the communications actually go through the proxy.
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 kette
erzeugt eine neue Kette. Die Option -X kette
löscht eine leere und unbenutzte Kette. Die Option -A kette_regel
fügt am Ende der angegebenen Kette eine Regel an. Die Option -I kette regel_nummerregel
fügt eine Regel vor der Regel mit der Nummer regel_nummer ein. Die Option -D ketteregel_nummer
(oder -D ketteregel
) löscht eine Regel in der Kette; die erste Syntax identifiziert die zu löschende Regel durch ihre Nummer, während letztere sie durch ihren Inhalt identifiziert. Die Option -F kette
leert eine Kette (löscht alle ihre Regeln); wenn keine Kette angegeben wird, werden alle Regeln der Tabelle gelöscht. Die Option -L kette
listet alle Regeln der Kette auf. Schließlich legt die Option -P kette_aktion
die voreingestellte Aktion oder „Richtlinie“ einer gegebenen Kette fest; man beachte, dass nur Standardketten eine derartige Richtlinie haben können.
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
, with default value warning
, indicates the syslog
severity level;
--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
(bei Wheezy nur für NAT verfügbar — also nur für IPv4 verfügbar) 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