Linux IP Firewalling Chains - IPCHAINS

Vortrag für das 26. Treffen der Chemnitz Linux User Group (CLUG) am 1998-10-09.

Autor : Alexander Schreiber

als@informatik.tu-chemnitz.de

1. Einführung

Linux ipchains ist eine Weiterentwicklung des alten Linux IPv4 Kernel-Level Firewall Codes welcher weitestgehend von BSD übernommen wurde sowie eine Weiterentwicklung des ipfwadm Tools welches seinerseits vom BSD ipfw Tool abstammt.

Mit der Kernelversion 2.1.102 löst ipchains das alte ipfwadm-System offiziell ab. Ebenfalls verfügbar sind Patches für die aktuellen production-Kernel (2.0.x).

Gründe für die Entwicklung von ipchains gibt es mehrere, speziell Schwächen des alten Firewalling-Codes :

Die offizielle Homepage des IPCHAINS-Projektes findet sich unter http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html. Weiterhin gibt es auch eine Mailingliste : ipchains, subscribe erfolgt via Mail an ipchains-request@wantree.com.au, die Liste selbst ist unter ipchains@wantree.com.au erreichbar.

Dieser Vortrag basiert auf dem aktuellen IPCHAINS-Howto.

2. Grundlagen von IPCHAINS

Ich werde an dieser Stelle nicht tiefer in die Grundlagen des Firewalling mit all seinen Möglichkeiten eindringen als im Sinne der Erläuterung von ipchains notwendig. Stattdessen will ich die Gelegenheit nutzen alle an diesem Thema Interessierten auf das 27. CLUG-Treffen am 1998-11-06 hinzuweisen das sich ausgiebig mit diesem Thema beschäftigen wird.

Grundlage von ipchains ist das Filtern auf Paketebene. Dabei durchlaufen die Pakete mehrere Filterebenen. Der Kernel beginnt dabei mit 3 Regellisten, diese werden als Firewall-Ketten (firewall chains) oder auch einfach nur als chains bezeichnet. Diese 3 anfänglichen chains sind :

Wenn ein Paket, z.B. durch ein Ethernet-Interface, hereinkommt so durchläuft es zuerst zwei Tests : einen Prüfsummen-Test um sicherzustellen daß das Paket unbeschädigt ist sowie einen Sanity-Test der ''verdrehte'' Pakete, die ansonsten die Filterlogik verwirren könnten, wegwirft und dies im syslog vermerkt. Erst dann verwendet der Kernel die Regeln der input chain um über das weitere Schicksal dieses Paketes zu entscheiden. Wenn es diese Stufe ''überlebt'', dann wird anhand der Routingtabellen über den weiteren Weg des Paketes entschieden. Ist es für eine andere Maschine bestimmt, so wird die forward chain konsultiert. Schließlich, bevor es die Maschine verläßt, werden die Regeln der output chain angewendet.

Jede chain besteht dabei aus einem Satz Regeln die das weitere Schicksal des Paktes anhand der Paketheader entscheiden. Wenn keine Regel auf das Paket zutrifft so testet der Kernel die nächste Regel in der chain. Bleibt keine Regel zum Testen mehr übrig so wird schließlich die chain policy befragt.

3. Einsatz von IPCHAINS

Man kann mit ipchains eine ganze Menge anstellen :

4. Operationen mit IPCHAINS

Das Manipulieren einzelner Regeln ist eigentlich die Elementaroperation von ipchains. Dazu werden typischerweise die -D (delete) und die -A (append) Kommandos benutzt deren Konzepte durch die Kommandos -I (insert) und -R (replace) lediglich erweitert werden. Dabei beschreibt jede Regel einen Satz an Bedingungen die das Paket erfüllen muß und was in diesem Falle mit dem Paket geschehen soll.

4.1 Filterspezifikationen

Mit ipchains ist es möglich sehr exakte Paketspezifikationen aufzubauen :

4.2 Seiteneffekte beim Filtern

Wann immer eine Regel auf ein Paket zutrifft passiert folgendes :
  1. Der Bytezähler für diese Regel wird erhöht (volle Paketlänge)
  2. Der Paketzähler für diese Regel wird erhöht
  3. Wenn die Regel dies erfordert wird das Paket geloggt (syslog)
  4. Wenn die Regel dies erfordert wird das Paket markiert (nicht in den 2.0.x-Kerneln)
  5. Die Targetangabe der Regel wird untersucht um festzustellen wie mit dem Paket weiter zu verfahren ist

4.3 Angabe eines Targets

Um festzulegen wie dem Paket weiter verfahren werden soll kann man bei den Regeln mit der -j (jump) Option Targets angeben. Dafür sind folgende Werte möglich :

4.4 Loggen von Paketen

Mit der Option -l können Pakete geloggt werden. Dabei werden die Parameter des Paketes sowie das Target im syslog vermerkt.

4.5 TOS-Manipulation

Ebenfalls möglich ist die Manipulation des TOS-Feldes (Type Of Service) im IP-Header mittels der -t Option. Dabei mögliche Werte sind :

4.5 Setzen der Policy

Mit dem Kommando -P kann die Policy einer chain gesetzt werden. Dafür mögliche Werte sind ACCEPT, DENY, REJECT oder MASQ, dabei ist MASQ jedoch nur für die forward chain zulässig.

4.6 Testen eines Paketes

Mit dem -C Kommando ist es möglich die Behandlung eines bestimmten Paketes durch eine bestimmte chain zu testen. Zum Beispiel :

  # ipchains -C input -p tcp -y -s 192.168.1.1 60000 -d 192.168.1.2 www
  packet accepted
  # 

5. IPCHAINS und ipfwadm

Neben der anderen Kommandosyntax gibt es noch weitere Unterschiede zwischen alten und neuem Firewalling-Code :

Um den Übergang von ipfwadm auf ipchains zu vereinfachen gibt es auch ein Wrapper-Script : ipfwadm-wrapper welches die Kommandos von ipfwadm-Syntax auf ipchains-Syntax umsetzt.

Weiterhin sind in der Utility-Sammlung noch die beiden Tools ipchains-save und ipchains-restore mit denen die gesetzten ipchains-Regeln in eine Datei gesichert und aus ihr wieder hergestellt werden können.