Die Paketfilter-Firewall von OpenWrt
Dieser Artikel basiert auf dem Modell der Iptables-Firewall bei OpenWrt, welches ich in einem älteren Artikel beschrieben habe.
Alle Ausführungen hier beschränken sich auf IPv4. Für IPv6 müssen diese, zum Beispiel mit der in dem anderen Artikel beschriebenen Herangehensweise, verifiziert werden. Außerdem muss das Paket ip6tables installiert sein, damit OpenWrt überhaupt IPv6 filtern kann.
Network -> Interfaces
Bevor wir uns den Einstellungen der Firewall zuwenden, schauen wir in den Menüpunkt Network/Interfaces:
Jedes hier definierte Netzwerk kann im Menüpunkt
Network->Firewall->Zone als Covered Network
verwendet werden.
Network -> Firewall
Wenden wir uns nun den Firewalleinstellungen zu.
Die Hauptseite für die Firewall hat einen Bereich für die allgemeinen Einstellungen, einen für Firewallzonen und je einen für Weiterleitungen und Regeln.
General Settings
- Enable SYN-flood protection
- Ein Haken hier erzeugt die Kette
syn_flood
in der Tabelle filter, die ausINPUT
heraus bei TCP-Paketen mit gesetztem FIN-, SYN-, RST- oder ACK-SYN-Flag angesprungen wird. In der Kette ist eine Regel, die die Anzahl solcher Pakete pro Zeiteinheit limitiert und ansonsten zurückspringt. Das dient dem Schutz vor SYN-Flood-Attacken. - Drop invalid packets
- Ein Haken hier erzeugt am Anfang der Kette
INPUT
die Regel-m state --state INVALID -j DROP
. Ungültige Datenpakete werden somit gleich verworfen. - Input, Output, Forward
- Hier kann ich die Policy (
ACCEPT
,DROP
,REJECT
) für die jeweilige Kette in der Tabelle filter festlegen.
Custom Rules
Hier können Regeln angegeben werden, die mit allen anderen Einstellungen nicht erstellt werden können. Was hier eingegeben wird, landet in der Datei /etc/firewall.user.
Diese Datei wird nach der Konfiguration der Regeln
entsprechend dem Webinterface aufgerufen. Da das ein Shell-Script ist,
muss vor den Regeln der Befehl iptables
stehen, mit denen diese
gesetzt werden.
Weil in etlichen Ketten bereits die endgültigen Targets ACCEPT
, DROP
,
REJECT
oder auch RETURN
angesprungen werden, ist es oft nicht
sinnvoll, Regeln mit -A kette
anzufügen. Einfügen am Anfang mit
-I kette
ist sicherer.
Im Zweifelsfall ist es angebracht, sich die aktuelle Firewallkonfiguration zu visualisieren und damit eine geeignete Stelle in den Regelketten für die zusätzlichen Regeln zu bestimmen.
Zones
- Input, Output, Forward
- Legt die Input-, Output- oder Forward-Policy dieser Zone fest. Das heisst
konkret, ob am Ende der Kette
zone_$zone
(Input),output
(Output) oderzone_$zone_forward
nachzone_$zone_ACCEPT
,zone_$zone_DROP
oderzone_$zone_REJECT
gesprungen wird. Das ist auf den ersten Blick etwas verwirrend, aber notwendig, da beliebige, auch mehrere Interfaces einer Zone zugeordnet werden können und so eine gemeinsame Policy festgelegt werden kann. - Masquerading
- Ein Haken hier erzeugt in der Tabelle nat einen Sprung zu
MASQUERADE
in der Kettezone_$zone_nat
. Das heisst, Pakete, die aus den zugehörigen Schnittstellen gesendet werden haben die Schnittstellenadresse als Absender, egal woher sie kommen. - MSS clamping
- Ein Haken hier erzeugt in der Tabelle mangle eine Kette
zone_$zone_MSSFIX
mit entsprechendem Eintrag und Sprung zuTCPMSS
mit Option--clamp-mss-to-pmtu
. Das ist zum Beispiel für PPPoE Interfaces bei DSL-Routern sinnvoll, damit die PMTU auf darüberlaufenden TCP-Verbindngen automatisch korrekt eingestellt wird.
Über den Button Add kann eine neue Zone angelegt werden. Darüber, oder über Button mit dem Stift hinter einer Zone kommt man zu den allgemeinen Einstellungen der Zone.
General Settings
- Name
- legt
$zone
für die Namen der Ketten in dieser Beschreibung der Regeln fest. - Input, Output, Forward
- Entspricht effektiv der Zonen-Policy auf der Übersichtsseite.
- Masquerading, MSS clamping
- entspricht Angabe in Zonenübersicht
- Covered networks
- Die in Network->Interfaces definierten Netzwerke, welche zu dieser Zone dazu zählen.
Inter zone forwarding
- Allow forward to destination zones
- Ein Haken bei einer Zone
$zone2
erzeugt in der Kettezone_$zone_forward
der Tabelle filter einen Sprung zur Kettezone_$zone2_ACCEPT
, was effektiv Datenverkehr aus $zone nach $zone2 erlaubt. - Allow forward from source zones
- Das ist das Gegenstück zu obigem Eintrag bei der jeweils anderen Zone $zone2. Mit anderen Worten es wird Datenverkehr aus $zone2 nach $zone erlaubt.
Advanced Settings
- Restrict to address family
- Hier können die Einstellungen auf die Protokollversion IPv4, IPv6 oder beide eingeschränkt werden. Nicht vergessen, für IPv6 die entsprechenden Pakete zu installieren.
- Restrict Masquerading to ...
- Wirkt nur bei eingeschaltetem Masquerading. Fügt Beschränkungen in
Tabelle nat bei den Regeln in der Kette
zone_$zone_nat
hinzu. Werden mehrere Netze angegeben, so wird je eine Regel für jede Kombination von Quell- und Zielnetz angelegt. - Force connection tracking
- Hier waren für mich keine Auswirkungen auf iptables-Regeln ersichtlich. Eventuell beeinflussen die Einstellungen hier das Verfolgen von Verbindungen z.B. für die Freischaltung von FTP Ports.
- Enable logging on this zone
- Fügt in den Ketten
zone_$zone_MSSFIX
(mangle),zone_$zone_DROP
(filter) undzone_$zone_REJECT
(filter) LOG-Regeln ein und aktiviert den nächsten Punkt. - Limit log messages
- Ermöglicht, den Parameter
--limit
der LOG-Regeln zu ändern und damit die Anzahl der Protokollnachrichten pro Zeiteinheit zu ändern.
Redirections
Weiterleitungen sind für ankommenden Verkehr bei Masquerading.
Über den Button Add können wir eine Weiterleitung anlegen.
General Settings
- Name
- zur Kommentierung
- Source zone
- Die Zone, auf die sich die Weiterleitung bezieht ($zone).
- Protocol
- Das weitergeleitete Protokoll:
TCP+UDP
,TCP
,UDP
undcustom
. - External port
- Der Port für den ankommenden Verkehr.
- Internal IP address
- Die IPv4-Adresse, an die der Verkehr weitergeleitet werden soll.
- Internal port
- Der Port an der internen Adresse, zu dem weitergeleitet werden soll (0-65535 bedeutet: derselbe wie der externe).
Bei DNAT
(Advanced Settings) werden 3 Regeln in der Tabelle nat angelegt:
- In Kette
zone_$zone_prerouting
ein Redirekt für alle auf den Zielrechner im internen Netz. - In Kette
nat_reflection_in
ein Redirekt für alle aus der Zone lan, die auf die Kombination externe Adresse/externer Port zugreifen auf interne Adresse/interner Port als Zieladresse. - In Kette
nat_reflection_out
wird für alle Zugriffe auf den Zielrechner/Zielport aus der Zone lan die Quelladresse auf die Adresse des Routers im Zielnetz geändert.
Die erste Regel ist klar und gilt für alle Adressen, die von aussen kommen. Die zweite und dritte Regel sind notwendig, damit die Kombination externe Adresse/Port auch für Rechner aus dem gleichen Netz wie der Zielrechner funktioniert. Damit der Router auch die Antwortpakete bekommt (und die Adressen entsprechend verbiegen kann) muss er die Quelladresse auf seine eigene ändern. Falls die Weiterleitung in eine andere Zone als lan geht, dann ist es sinnvoll, in den Advanced Settings die Destination zone entsprechend anzupassen.
Bei SNAT
(Advanced Settings) wird nur eine Regel in der Kette
zone_$zone_nat
der Tabelle nat für die Zone des Zielnetzes angelegt.
Wenn ein passendes Paket den Router verlässt, wird die Absenderadresse
geändert.
Advanced Settings
- Redirection type
- Welche Adresse umgesetzt werden soll, entweder
DNAT
(voreingestellt) oderSNAT
. - Destination zone
- Hiermit wird die Zielzone für die letzten beiden Regeln der General Settings festgelegt. Voreingestellt ist die Zone lan. Wenn der Redirekt in eine andere Zone geht, ist es sinnvoll, hier auch die Destination zone auf diese andere Zone zu stellen.
- Intended destination address
- Das hat eine Doppelbedeutung, entsprechend der Einstellung beim
Redirection type:
Bei
DNAT
wird die Regel nur ausgeführt, wenn die Zieladresse zur hier angegebenen passt. BeiSNAT
wird die Quelladresse auf die hier angegebene umgesetzt. - Source MAC address, Source IP address, Source port
- Erlauben es die passenden Datenpakete genauer zu spezifizieren.
- Enable NAT loopback
- Nur bei
DNAT
. Hier muss der Haken gesetzt werden, damit dienat_reflection_{in,out}
Regeln gesetzt werden, um den Verkehr aus dem gleichen Netz wie den Zielrechner auf die Originaladresse auch umzuleiten.
Rules
In diesem Bereich kann man spezielle Regeln für die einzelnen Zonen vorgeben. Mit dem Button Add oder durch Anklicken des Editier-Buttons (mit dem Stift) können die Regeln bearbeitet werden.
General Settings
- Name
- zur Kommentierung
- Source zone
- Die hier ausgewählte Zone bestimmt die Regelkette (
zone_$zone
) in der Tabelle filter, in der die Regeln abgelegt werden. - Protocol; Source address, port; Destination address, port; Match ICMP type; Action
- Damit werden die Parameter der Regel festgelegt. Einige Einstellungen öffnen sich erst, wenn das betreffende Protokoll ausgewählt wurde.
Advanced Settings
- Destination zone
- Das ist auf Device voreingestellt. Ändert man das auf eine der
anderen Zonen, dann endet die Regel nicht in einem Sprung auf
die Standardtargets
ACCEPT
,DROP
oderREJECT
, sondern in einem Sprung zuzone_$zone_ACCEPT
,zone_$zone_DROP
beziehungsweisezone_$zone_REJECT
. - Source MAC address
- Damit kann man die Quelladresse weiter einschränken.
- Restrict to address family
- Erlaubt es, die Regel auf IPv4, IPv6 oder beide Protokollversionen einzuschränken.
Updates
20150123: Buch zu Paketfilter bei OpenWrt
Ich plane im Moment die Informationen zum Paketfilter von OpenWrt in einem Buch zusammen zu fassen. Dieses soll zunächst bei Leanpub herauskommen. Dafür benötige ich Feedback, ob daran interesse besteht.
Posted 2012-02-24