Weiter Zur�ck [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

12.11 Operationen auf eine ganze chain

Eine sehr n�tzliche Eigenschaft von ipchains ist die F�higkeit, Regeln in chains zu definieren, die sich auf ganze Gruppen von Hosts beziehen. Die chains k�nnen mit beliebigen Namen bezeichnet werden, solange sie nicht mit den internen chains kollidieren (input, output und forward oder den Anweisungen (MASQ,REDIRECT, ACCEPT, DENY, REJECT oder RETURN). Man sollte keine Gro�buchstaben als chain Namen verwenden, da diese sp�teren Erweiterungen vorbehalten sind. Der Name einer chain darf maximal nur 8 Buchstaben lang sein.

Anlegen einer neuen chain

Die chain sollte den Namen test bekommen:

ipchains -N test

Ok, nun k�nnen Regeln in diese chain eingef�gt werden.

L�schen einer chain

Das L�schen einer chain ist ebenfalls einfach:

ipchains -X test
Warum -X ? Nun es waren keine guten Buchstaben mehr �brig.....

Beim L�schen von chains sind einige Restriktionen zu beachten: Sie d�rfen keine Regeln mehr enthalten, L�schen einer chain und sie d�rfen in einer Anweisung einer Regel in einer anderen chain enthalten sein. Hier ein paar Beispiele f�r chains, die nicht gel�scht werden k�nnen:

L�schen einer chain

Der einfachste Weg, alle Regeln in einer chain zu l�schen, ist die Verwendung der Option -F:

# ipchains -F forward

Wenn nicht explizit eine chain angegeben wird, wird angenommen, da� alle chains gel�scht werden sollen, also Vorsicht !

Anzeigen einer chain

Die eingetragenen Regeln in einer chain k�nnen mit der Option -L angezeigt werden:

# ipchains -L input
Chain input (refcnt = 1): (policy ACCEPT)
target     prot opt    source                destination           ports
ACCEPT     icmp -----  anywhere              anywhere              any
# ipchains -L test
Chain test (refcnt = 0):
target     prot opt    source                destination           ports
DENY       icmp -----  localnet/24           anywhere              any
#

Der refcnt, der in test angezeigt wird, ist die Zahl der Regeln, die test als Anweisung angegeben haben. Diese Zahl mu� NULL sein, bevor eine chain gel�scht werden kann.

Wenn keine Name der chain angegeben wird, werden alle chains, darunter auch die leeren chains, angezeigt.

Es gibt drei Optionen, die zusammen mit -L aufgerufen werden k�nnen. Die Option -n (numeric) ist sinnvoll um ipchains daran zu hindern die IP - Nummer aufzul�sen, welche bei jedem Zugriff lange Wartezeiten verursachen kann, falls der DNS-Server nicht im caching mode arbeitet. Im schlimmsten Falle kostet es Telefongeb�hren. Der Nachteil ist, da� die Ausgabe in Logfiles mit IP - Nummern erfolgt.

Die Option -v zeigt alle Details der Regel, darunter auch die Paket- und Byte-Z�hlerst�nde, die TOS Bits, das Interface und die Paketmarkierungen.

# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx  ifname mark source   destination ports
   10   840 ACCEPT icmp ----- 0xFF 0x00  lo          anywhere anywhere    any

Die Paket- und Bytez�hler benutzen die Anh�nge K, M, G als Abk�rzungen f�r 1000, 1 Million und 1 Gigabyte. Die Option -x gibt die echten Zahlen aus, unabh�ngig davon, wie gro� diese sind.

Reset von Z�hlern.

Z�hler k�nnen mit der Option -Z auf Null gesetzt werden:

# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx ifname mark source   destination ports
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo          anywhere anywhere    any
# ipchains -Z input
# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx ifname mark source   destination ports
    0     0 ACCEPT icmp ----- 0xFF 0x00 lo          anywhere anywhere    any
#

Das Problem bei dieser Vorgehensweise ist, da� man manchmal die Z�hlerst�nde ablesen mu�, bevor diese resettet werden. In obigem Beispiel k�nnen die Optionen -L und -Z zusammen angewendet werden, um die Z�hlerst�nde beim Ablesen zu resetten. Ungl�cklicherweise ist das nicht m�glich, wenn sich die Befehle auf eine einzige chain beziehen. Hierbei m�ssen dann alle chains zugleich resettet werden.

# ipchains -L -v -Z
Chain input (policy ACCEPT):
 pkts bytes target prot opt   tosa tosx ifname mark source   destination ports
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo          anywhere anywhere    any

Chain forward (refcnt = 1): (policy ACCEPT)
Chain output (refcnt = 1): (policy ACCEPT)
Chain test (refcnt = 0):
    0     0 DENY   icmp ----- 0xFF 0x00 ppp0        localnet/24 anywhere  any
# ipchains -L -v
Chain input (policy ACCEPT):
 pkts bytes target prot opt   tosa tosx  ifname mark source   destination ports
   10   840 ACCEPT icmp ----- 0xFF 0x00  lo          anywhere anywhere    any

Chain forward (refcnt = 1): (policy ACCEPT)
Chain output (refcnt = 1): (policy ACCEPT)
Chain test (refcnt = 0):
    0     0 DENY   icmp ----- 0xFF 0x00  ppp0        localnet/24 anywhere any
#

Setzen der Policy

In den vorangehenden Abschnitten wurde die Problematik der Regeln beschrieben, deren Anweisungen auf chains zeigen, und wie diese chains ohne Sinn durchlaufen werden. Siehe auch Kapitel Definition einer Anweisung. In diesem Fall bestimmt die policy einer chain das Schicksahl eines Paketes. Nur die eingebauten chains (input, output und forward) besitzen policies. Wenn ein Paket am Ende einer Userdefinierten chain "herausf�llt", dann werde die Regeln der vorangegengenen chain weiter durchlaufen.

Die Policy kann eine der vier ersten speziellen Anweisungen sein: ACCEPT, DENY, REJECT oder MASQ. MASQ ist nur f�r die forward chain definiert.

Es ist wichtig, zu erw�hnen, da� die Anweisung RETURN in einer Regel in einer der eingebauten chains durchaus sinnvoll ist, wenn das Paket eine Regel erf�llt. In diesem Falle werden die Anweisungen der policy ausgef�hrt.

Optionen f�r Masquerading

Es gibt f�r Masquerading einige anwendbare Parameter. Sie werden zusammen mit ipchains ausgef�hrt, weil es nicht notwendig ist, hierf�r ein neues Toolkit zu benutzen.

Der Befehl zur Aktivierung von Masquerading ist -M, der mit der Option -L kombiniert werden kann, um eventuell gerade maskierte Verbindungen anzuzeigen, oder mit -S, um die Parameter neu zu setzen.

Die Option -L kann mit -n kombiniert werden, um nur IP - Nummern anzuzeigen, oder mit der Option -v, um die Abst�nde der Sequenznummern (SSN) der TCP Pakete (Seriennummer der TCP Pakete, damit diese nach eintreffen richtig einsortiert werden k�nnen)

Der Option -S sollten drei Timeout Werte folgen, jede in Sekunden angegeben: F�r einfache TCP Verbindungen, f�r TCP Verbindungen nach eintreffen eines FIN-Paketes, und f�r UDP Pakete. Um die Default Einstellungen zu verwenden, kann stets eine Null angegeben werden.

Die Defaultwerte sind in der Datei /usr/include/net/ip_masq.h, die auf 15 Minuten, 2 Minuten und 5 Minuten eingestellt sind.

Der allgemein am Meisten ge�nderte Wert ist der erste, insbesondere f�r FTP Verbindungen. Siehe auch FTP Probleme.

Die Problematik mit Timeout - Werten wird auch in dem Anschnitt Kann keine Timeouts f�r Masquerading setzen !.

Pr�fen einer Regel

In einigen F�llen ist es von Interesse, die Firewall chains zu debuggen. Hierf�r wurde die Option -C f�r das ipchains Werkzeug eingef�hrt. Hierbei werden dieselben Routinen aufgerufen, die der Kernel selber verwendet, um Pakete zu analysieren.

Hierbei mu� nur der Name der chain angegeben werden, gefolgt von der Option -C. W�hrend der Kernel selber stets bei den chains input, output oder forward chains beginnt, kann der User jede chain angeben

Die Einzelheiten der Pakete werden in der selben Syntax angegeben, die schon f�r die Definition der Firewallregeln benutzt wurde. Das schlie�t auch die Angabe der Optionen -p, -s, -d, -i mit ein. Falls ein Paket von dem Typ TCP oder UDP ist, dann m�ssen eine einzige Quell und Ziel-IP - Nummer angegeben werden. F�r ICMP mu� die Code Nummer mit angegeben werden (ohne die Option -f, die nicht erlaubt ist, in diesem Zusammenhang)

Wenn das Protokoll TCP ist, das Flag -f mu� das -y Flag mit angegeben werden, um anzuzeigen, da� das Testpaket das SYN Bit gesetzt werden soll. Dies ist zum Testen unerl��lich.

Hier nun endlich ein praktisches Beispiel, um zu testen, ob ein TCP Paket mit SYN Flag (Initiierung einer Verbindung) von unserem Host aus dem Intranet, Port 60000 zu dem Host 192.168.1.2 auf Port 80 (www) auf dem Interface eth0 eingehend, in die input chain hineingelassen wird. Dieses entspricht einem einfachen Verbindungsaufbau f�r WWW.

# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
packet accepted
# 
Es sollte stets auch nicht vergessen werden, alle Quellports durchzuprobieren, um sicherzugehen, da� sich kein trojanisches Pferd eingeschlichen hat, wie zuletzt im TCP Wrapper (kleine Anmerkung....)

Das Testen von vielen Regeln zugleich

Manchmal kann ein einziger Test auf mehrere Regeln zutreffen. Dies kann auf zwei verschiedene Weisen erfolgen. Zuerst mu� ein Hostname angegeben werden, der in mehrere IP-Adressen sich aufl�st (Siehe Netscape Server: 1 Name = 20 IP - Nummern). ipchains wird daraufhin so reagieren, als w�ren verschiedenste IP - Nummern einzeln getestet worden.

Wenn also der Host Name "www.netscape.com" in 20 IP - Nummern sich aufl�st, und der Name "www.intra.net" in 2 IP - Nummern, dann wird der Befehl ipchains -A input -j reject -s www.intra.net -d www.netscape.com direkt 40 Regeln auf der input chain ausgeben, testen und anzeigen.

Der andere Weg, ipchains dazu zu bewegen, mehrere Regeln zugleich zu testen, ist die Angabe des Flags -b, f�r bidirektional. Diese Regel l��t ipchains sich so verhalten, als wenn der Befehl zweimal eingegeben worden w�re, einmal in der einen Richtung, und einmal in der anderen Richtung, also f�r eingehende und ausgehende Pakete nacheinander:

# ipchains -b -A forward -j reject -s 192.168.1.1
# 

Die Option -b kann zusammen mit den Optionen -I und -D, sowie -A und -C (Insert, Delete, Append und Check) angewendet werden.

Ein weiteres sinnvolles Flag ist -v, welches angibt, was ipchains mit dem Befehl macht. Zum Beispiel werden hier das Verhalten von Fragmenten zwischen Host 192.168.1.1 und 192.168.1.2 untersucht:

# ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo
  tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.1  -> 192.168.1.2    * ->   *
packet accepted
  tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.2  -> 192.168.1.1    * ->   *
packet accepted
# 


Weiter Zur�ck [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING