Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |
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.
Die chain sollte den Namen test bekommen:
ipchains -N test
Ok, nun können Regeln in diese chain eingefügt werden.
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:
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 !
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.
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
#
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.
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 !.
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....)
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
#
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |