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; man beachte, dass es diese Tabelle nur für IPv4 gibt;
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;
ketten_name
: springe zu der angegebenen Kette und werte ihre Regeln aus;
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
, daher nur in IPv4 bei Wheezy — NAT-Unterstützung für IPv6 kam mit dem Linux-Kernel 3.7 auf): wende Source NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
DNAT
(nur in der Tabelle nat
, daher nur in IPv4 bei Wheezy): wende Destination NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
MASQUERADE
(nur in der Tabelle nat
, daher nur in IPv4 bei Wheezy): wende masquerading an (ein Sonderfall von Source NAT);
REDIRECT
(nur in der Tabelle nat
, daher nur in IPv4 bei Wheezy): 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 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_nummer
regel
fügt eine Regel vor der Regel mit der Nummer regel_nummer
ein. Die Option -D kette
regel_nummer
(oder -D kette
regel
) 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 aktion
aktions_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-priority
, mit dem voreingestellten Wert warning
, gibt die Priorität der syslog
-Meldung 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
(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.
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).
#
aptitude install fwbuilder
/etc/ppp/ip-up.d/0iptables
zu installieren (man beachte, dass nur Dateien ohne Punkt in ihrem Namen berücksichtigt werden). Die Firewall wird auf diese Weise jedes Mal wieder geladen, wenn eine PPP-Verbindung hergestellt wird.
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