| Allgemeine Erläuterung | Die Syntax von IPCHAINS | Ein Beispiel |
Was tut eine Firewall unter Linux?
Die Firewall unter Linux ist direkt in den Kernel eingebaut und filtert anhand vom Benutzer vorzugebender Regeln TCP/IP-Pakete, beziehungsweise leitet sie weiter ans interne Netz (Man kann dies als Routing bezeichnen, heissen tuts IP-Forwarding).
Welche Programme stehen zur Konfiguration der Linux Firewall zur Verfügung?
In der Kernelreihe 2.2.x steht für die Firewallkonfiguration das Programm ipchains zur verfügung.
Nach welchen Kriterien werde die TCP/IP-Pakete untersucht?
Zu ersteinmal: TCP/IP ist eine Protokollsuite, die Sitzungsbasierte Verbindungen im Internet, über die Datenströme zwischen
entfernten Rechnern transportiert werden, ermöglicht. IP - Internetprotokoll - ist ein verbindungsloses Protokoll, das
sich nur darum kümmert, dass ein Datenpaket - sprich eine festgelegte Menge an Daten, versehen mit einem Header - über das Inter-/Intranet von Rechner A zum Rechner B gelangt.
IP kümmert sich nicht darum, ob die Pakete in der richtigen Reihenfolge ankommen, ob die VErbindung hergestellt worden ist, ob der Kommunikationspartner
die Pakete überhaupt empfängt - um diese Dinge kümmert sich TCP - Transport Control Protocol. Dieses protokol kümmert sich, auf IP aufsitzend, darum,
dass die Daten den richtigen Applikationen zugeordnet und dass die fehlenden Daten nachgeliefert werden. Dies ist grob umrissen die Tätigkeit der
TCP-IP-Protokoll-Suite.
Die Firewall inspiziert den Header von TCP/IP: Empfängeradresse/SenderAdresse, Empfängerport (Die Applikation, die
das Paket empfängt), Senderport (die Applikation, die das Paket absendet), Statusbits des TCP-Headers (Syn/ACK, etc...).
Keinesfalls jedoch inspiziertd ie Firewall denInhalt der Pakete, wenn man mal von den sündhaft teuren Firewalls
absieht, die STATEFUL INSPECTION betreiben, also auch den Inhalt der Pakete untersuchen.
Die Kriterien, nach denen die Paket-Header untersucht werden, legt man mittels Kommandos fest. Diese Kommandos
beschreiben Inhalte des TCP/IP-Headers, nach denen die Firewall entscheidet, ob ein Paket weitergeleitet, verworfen ode rabgelehnt wird.
Bei der Konfiguration der Firewall muss man folgendes beachten: Ein TCP/IPPaket trifft ein, und die Regeln in der Firewall-Regelliste werden eine
nach der anderen auf Zutreffen überprüft. Sobald eine Regel zutrifft, wird diese Regel auf das TCP/IP-Paket angewandt, und das Paket wird entweder
abgewiesen (reject/deny) oder angenommen (accept). Das nächste TCP/IP-Paket wird überprüft. Die Regeln müssen daher sogestaltet sein, dass allgemeine
DInge gleich zu Beginn der Regelliste angeführt werden (DNS, DHCP, FTP, MAIL, HTTP, ANTI-Spoofing etc), und Besondere Dinge wie zb. das Sperren einzelner
IP-Adressen eher am ende der Regeln steht. Wichtig: Trifft keine Regel in auf ein Paket zu, so wird die allgemeine POLICY der jeweiligen Regel-Chain,
in IPChains Input, Foprward, Output, darauf angewandt, dh. es wird entweder verworfen oder angenommen per default.
Aus letzterem Satz folgt, dass man besonders bei der Chain INPUT generell die Policy DENY setzen und anschliessend deklarieren sollte, was man durchlassen
will an TCP/IP-Paketen. Gleiches kann man bei der Chain OUTPUT tun, während man die Chain Forward, die fürs Masquerading geeignet ist, ruhig auf der
Default Policy ACCEPT stehen lassen kann.
DIESE Chains ...
Die "Chains" von ipchains fassen die Regeln für eingehende, ausgehende und weitergeleitete Pakete zusammen:
| Allgemeine Erläuterung | Die Syntax von IPCHAINS | Ein Beispiel |
Wie schaut das IPCHAINS-Kommando aus?
die Syntax geht so:
ipchains -A|-I [Chain]
[-i Interface]
[-p Protokoll]
[[!]-y]
[-s Adresse [Port[:Port]]]
[-d Adresse [Port[:Port]]]
-j Policy
[-l]
Die Optionen im einzelnen:
-A[Chain] : hängt eine Regel ans Ende einer Chain an. Wenn kein Chain angegeben wird, gilt die neue Regel für alle Chains.
-I[Chain]: Fügt eine Regel vor dem Anfang einer Chain ein.Wenn keine Chain angegeben wird, gilt die Regel für alle Chains.
-i [interface]: Netzwerk-Interface, für das die Regel gilt. Wenn die Option -i nicht angegeben wird, gilt die Regel für alle Interfaces. Typische Namen für Interfaces: eth0,eth1,lo,ppp0
-p Protokoll: IP-Protokoll, für das die Regel gilt. Wird die Option -p nicht angegeben, gilt die Regel für alle Protokolle.Mögliche Protokolle: TCP,UDP,ICMP,ALL, sowie alle Namen und Nummern aus /etc/protocols
-y : Das SYN-Flag einer TCP-Nachricht muss gesetzt, das ACK-Flag darf nciht gesetzt sein, d.h. das Paket muss das Erste Paket des HANDSHAKES für den Verbindungsaufbau sein. Wenn weder -y noch !-y angegeben sind, werden die TCP-Flags nicht überprüft.
!-y: Das ACK-Flag einer TCP-Nachrift muss gesetzt sein, d.h. das Paket muss eine Antwort im Handshake für den Verbindungsaufbau darstellen oder Teil einer bereits bestehenden Verbindung sein.
-s Adresse[Port]: Absender-Adresse des Paketes. Wenn keine Absenderadresse angegeben ist, sind alle unicast adressen erlaubt. Wenn zusätzlich eine Portnummer oder ein Portnummern-Bereich angegeben wird, gilt diese Regel für den Port respektive den Portnummern-Bereich. Eine Regel ohne explizite Portangabe gilt für alle Ports. Port-Bereiche werrden durch Port:Port angegeben. --> von-Port:bis-Port.
-d Adresse[Port]: Empfänger-Adresse des Paketes. Wenn keine Empfängeradresse angegeben ist, sind alle unicast adressen erlaubt. Wenn zusätzlich eine Portnummer oder ein Portnummern-Bereich angegeben wird, gilt diese Regel für den Port respektive den Portnummern-Bereich. Eine Regel ohne explizite Portangabe gilt für alle Ports. Port-Bereiche werrden durch Port:Port angegeben. --> von-Port:bis-Port.
-j Policy: Was soll mit dem Paket geschehen: ACCEPT: Das Paket annehmen; REJECT: Das Paket zurückweisen mit ICMP-Nachricht an Sender; DENY: Das Paket verwerfen; MASQ: Network Adress Translation auf dieses Paket anwenden (geht nur in der Forward Chain).
-l: Logging: Wenn eine Regel auf ein Paket zutrifft, dies im Systemlog aufzeichnen. (Meldung der facility kern mit Priorität info landet im syslog. Das findet man dann in /var/log/messages od. ähnlichem Verzeichnis)
| Allgemeine Erläuterung | Die Syntax von IPCHAINS | Ein Beispiel |