weidner/archives/2012/02/

Die Paketfilter-Firewall von OpenWrt

  1. Network -> Interfaces
  2. Network -> Firewall
    1. General Settings
    2. Custom Rules
    3. Zones
    4. Redirections
    5. Rules
  3. Updates
    1. 20150123: Buch zu Paketfilter bei 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:

Webinterface: 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.

Webinterface: Network -> Firewall

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 aus INPUT 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) oder zone_$zone_forward nach zone_$zone_ACCEPT, zone_$zone_DROP oder zone_$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 Kette zone_$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 zu TCPMSS 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

Webinterface: Network -> Firewall->Zone->General

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 Kette zone_$zone_forward der Tabelle filter einen Sprung zur Kette zone_$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

Webinterface: Network -> Firewall->Zone->Advanced

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) und zone_$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

Webinterface: Network -> Firewall->Redirect->General

Name : zur Kommentierung

Source zone : Die Zone, auf die sich die Weiterleitung bezieht ($zone).

Protocol : Das weitergeleitete Protokoll: TCP+UDP, TCP, UDP und custom.

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:

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

Webinterface: Network -> Firewall->Redirect->Advanced

Redirection type : Welche Adresse umgesetzt werden soll, entweder DNAT (voreingestellt) oder SNAT.

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. Bei SNAT 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 die nat_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

Webinterface: Network -> Firewall->Rule->General

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

Webinterface: Network -> Firewall->Rule->Advanced

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 oder REJECT, sondern in einem Sprung zu zone_$zone_ACCEPT, zone_$zone_DROP beziehungsweise zone_$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.