Analyse von Iptables-Firewalls

Manchmal muss ich eine mir bisher unbekannte Iptables-Firewall analysieren. Sei es dass ich eine bestehende fremde Firewall übernehmen, warten oder erweitern soll, oder dass ich einen Audit mache, ob die Firewall die Vorgaben einer Sicherheitsrichtlinie erfüllt.

Dann benötige ich eine Aufstellung aller Regeln und Ketten, wie ich sie mit iptables-save oder ip6tables-save bekomme. Um die Regeln in den richtigen Kontext setzen zu können brauche ich außerdem Informationen über die angeschlossenen Netze und die Routen.

Falls vorhanden, lege ich mir die Sicherheitsrichtlinien, die für diese Firewall gelten, bereit.

Dann hängt mein weiteres Vorgehen von den Antworten auf zwei Fragen ab:

  • Kenne ich die Struktur der Regelketten dieser Firewall?
  • Kenne ich die Sicherheitsrichtlinie, der diese Firewall unterliegt?

Die Frage nach der Struktur bestimmt mein Vorgehen bei der Analyse der Regeln in den einzelnen Ketten.

Gibt es nur die vordefinierten Ketten oder kenne ich die Struktur, wie zum Beispiel für OpenWrt in diesem Buch beschrieben, kann ich mich sofort an die Analyse der Regeln in den Ketten machen.

Gibt es benutzerdefinierte Ketten und ist mir deren Zusammenspiel nicht klar, beginne ich damit, die Struktur der Regelketten zu analysieren.

Eine Sicherheitsrichtlinie kann mir bei der Interpretation der Regeln helfen. Ist mir die Richtlinie bekannt, kann ich jede Regel danach bewerten, ob sie zu deren Durchsetzung beiträgt und notieren, welchen Teil der Richtlinie sie unterstützt.

Kenne ich die Sicherheitsrichtlinie nicht, muss ich mir bei der Analyse der Regeln nebenher eine Ad-hoc-Richtlinie erarbeiten, um den Sinn der Regeln vielleicht am Ende zu verstehen.

Damit habe ich die Vorbereitungen abgeschlossen und kann beginnen, den Paketfilter zu analysieren. Ich betrachte die Tabellen raw, mangle, nat und filter jeweils für sich und berücksichtige dabei die Erkenntnisse aus den anderen Tabellen.

Struktur der Regelketten

Benutzerdefinierte Regelketten sind ein zweischneidiges Schwert: sie können Paketfilterregeln vereinfachen und übersichtlicher machen oder die Analyse des Paketfilters erschweren, wenn mir der Zusammenhang zwischen den Ketten nicht klar ist.

Für OpenWrt habe ich den Zusammenhang zwischen den Regelketten im Kapitel “Modell der Firewall-Regeln bei OpenWrt” erläutert. Bei einer anderen Firewall oder vielleicht schon einer anderen Version von OpenWrt können ganz andere Ketten im Spiel sein. Dann muss ich deren Struktur erst analysieren.

Damit eine benutzerdefinierte Regelkette überhaupt berücksichtigt wird, muss es einen Sprung aus einer anderen Kette, die selbst berücksichtigt wird, zu ihr geben. Die vordefinierten Ketten werden auf jeden Fall berücksichtigt, sie sind die Einsprungspunkte im Kernel.

Diese Sprünge sind für mich als Graphen - mit den Regelketten als Knoten und den Sprung-Regeln als Kanten dazwischen - am anschaulichsten. Solche Graphen kann ich aus der Ausgabe von iptables-save und ip6tables-save gewinnen. Das Perl-Modul App::Iptables2Dot enthält ein Programm, welches mir die Ausgabe von iptables-save für das Programm dot von Graphviz aufbereitet. Mit dot kann ich mir den Graph als Bild in verschiedenen Formaten ausgeben lassen.

Damit bekomme ich eine graphische Übersicht über die Struktur der Regelketten. Mit dieser graphischen Übersicht kann ich auf einen Blick erkennen, von welcher Kette es zu welcher anderen geht und ob es Regelketten gibt, die überhaupt nicht erreicht werden.

Nun kann ich mir die Regeln anschauen und darüber auf den Zweck der einzelnen Regelketten schließen.

Nachdem ich mich auf diese Art mit der Struktur der Regelketten vertraut gemacht habe, kann ich mit der detaillierten Analyse der einzelnen Ketten beginnen.

Analyse der Regeln in den Ketten

Ich beginne mit den vordefinierten Regelketten. Nacheinander betrachte ich alle Regeln einer Kette und vergleiche meine Erkenntnisse mit der Sicherheitsrichtlinie. Steht mir keine Richtlinie zur Verfügung, formuliere ich eine Ad-Hoc-Richtlinie an Hand der Regeln.

Stelle ich dabei fest, dass eine Regel nur im Verbund mit anderen Regeln arbeiten kann, mache ich mir eine Notiz und schaue später nach, ob die anderen Regeln vorhanden sind.

Bin ich fertig mit allen Regeln einer Kette, mache ich mit der ersten angesprungenen benutzerdefinierten Kette weiter, dann mit den anderen bis ich alle Regelketten abgearbeitet habe. Am Ende habe ich alle Regeln betrachtet und Notizen und Anmerkungen zur Sicherheitsrichtlinie.

Habe ich Regeln gefunden, die von der Sicherheitsrichtlinie nicht gedeckt sind, überlege ich, ob diese Regeln entfernt werden können. Dabei ist es hilfreich, die Meinung anderer Betroffener zu hören. Gibt es ein Change Management, finde ich vielleicht in den Aufzeichnungen Informationen zu diesen Regeln.

Finde ich hingegen Teile der Sicherheitsrichtlinie, die nicht durch Paketfilterregeln abgedeckt sind, überlege ich, mit welchen Regeln ich die Firewall ergänzen kann.