Grundlagen
Keywords: Buch

> Nächste Seite: Grundlagen der Firewalltechnik Aufwärts: Crashkurs Firewallaufbau unter Linux Vorherige Seite: Vorwort Inhalt
> Unterabschnitte
> - Das OSI Referenzmodell
>   - Die Bitübertragungsschicht
>   - Die Sicherungsschicht
>   - Die Vermittlungsschicht
>   - Die Transportschicht
>   - Die Sitzungsschicht
>   - Die Darstellungsschicht
>   - Die Anwendungsschicht
> - Das TCP/IP Referenzmodell
>   - Die Vermittlungsschicht
>     - Das Internet Controll Message Protocol (ICMP)
>   - Die Transportschicht
>     - Das UDP-Message Format
>     - Das TCP-Segment Format
> - Kommunikationsablauf einer TCP-Verbindung

> # Grundlagen

> Der Begriff Firewall hat keine eindeutige Definition und keine standardisierte Bedeutung. Es handelt sich vielmehr um ein Modell zur Absicherung eines Computernetzes gegenüber anderen - meist öffentlichen - Netzen. Im Rahmen dieser Anforderung kommen - je nach Größe und Konzept des zu schützenden Netzes - verschiedene Lösungsansätze in Frage. In jedem Fall muß die gewünschte Sicherheit in verschiedenen Schichten angegangen werden, ein einziger Mechanismus, wie etwa nur eine Paket-Firewall alleine ist nie genug.

> Im Allgemeinen wird beim Thema Firewall zwischen dem zu schützenden Netz (internes LAN oder auch sicheres Netz) und dem öffentlichen Netz (meist das Internet oder auch unsicheres Netz) unterschieden. Im einfachsten Fall ist die Firewall hier ein physikalischer Rechner, der mit zwei Netzwerkverbindungen (Netzwerkkarten, ISDN-Karten, Modems,...) ausgestattet ist. Eine davon ist mit dem sicheren, die andere mit dem unsicheren Netz verbunden. Der einzige Weg, der beide Netze verbindet, ist eben die Firewall. Auf diesem Verbindungsrechner werden nun Strategien implementiert, die die Sicherheit des zu schützenden Netzes - aber auch die Regeln, die beschreiben, wer im sicheren Netz was im unsicheren Netz machen darf - festlegen. Dazu zählen insbesondere:

> - Welche Internet-Dienste dürfen vom lokalen Netz aus genützt werden?
> - Welche Dienste darf die ganze Welt in Anspruch nehmen?
> - Welche Dienste dürfen ausgewählte Benutzer oder Computer in Anspruch nehmen?
> - Welche Dienste dürfen nur lokal genutzt werden?
> Der grundlegende Ansatz zur Implementierung dieser Strategien ist die sogenannte Paketfilter-Firewall. Im weiteren Verlauf dieser Darstellung wird es also hauptsächlich um die Konzeption und Wartung einer solchen Paketfilter-Firewall gehen, implementiert mit einem Linux-System. Linux bietet für diese Aufgabe alle notwendigen Werkzeuge bereits im Betriebssystem-Kern, es ist also nicht notwendig, komplizierte Zusatzinstallationen vorzunehmen, die ein System nur instabiler werden lassen.

> Auf der anderen Seite wurde ja schon erwähnt, daß eine hinreichende Sicherheit nur über verschiedene, aufeinander aufbauende Mechanismen herzustellen ist. Auch für diese höhergelegenen Sicherheitsstufen sind unter Linux alle Werkzeuge bereits in der Standard-Installation vorhanden. Zunächst gilt unser Augenmerk jedoch den Mechanismen des Paketfilterns. Um grundsätzlich diesen Vorgang verstehen zu können, ist es notwendig ein paar grundlegende Begriffe und Techniken der Computervernetzung zu beschreiben. Was ist überhaupt Kommunikation in Netzwerken, wie läuft sie ab und welche Mittel des Eingreifens stehen uns also zur Verfügung?

> # Das OSI Referenzmodell

> Ende der siebziger Jahre wurde ein theoretisches Referenzmodell für die Vernetzung von Computern entworfen, das auch heute noch vielen Darstellungen zugrunde liegt. Es handelt sich dabei um das sogenannte OSI-Referenzmodell. OSI steht für Open System Interconnection, also etwa Verbindung offener Systeme untereinander. Dieses Modell ist ein Schichtenmodell mit sieben Schichten, die die Kommunikation der Computer untereinander beschreiben. Es ist sehr akademisch angelegt und wurde von keinem real existierenden Netzwerksystem vollständig implementiert. Trotzdem wird es zur Darstellung der verschiedenen Mechanismen noch heute benutzt. Daher folgt hier eine kurze Beschreibung dieses Modells:

> Bild 2..1: Das OSI-Referenzmodell

> Die beiden untersten Schichten sind - im Falle einer herkömmlichen Netzverbindung etwa über Ethernet-Karten - auf der Netzwerkkarte selbst implementiert. Sie sind also nicht Bestandteil der Software oder des Betriebssystems.

> Von unten nach oben betrachtet kommen den verschiedenen Schichten die folgenden Aufgaben zu:

> ## Die Bitübertragungsschicht

> Die Bitübertragungsschicht (physical Layer) ist verantwortlich für die Übertragung der einzelnen Bits, sie hat also einfach die Aufgabe dafür zu sorgen, daß wo eine 1 gesendet wurde auch eine 1 empfangen wird und wo eine 0 gesendet wurde eben eine 0 empfangen wird. Typische Fragen dieser Schicht sind die Spannungen, die jeweils einer 1 oder 0 entsprechen und wielange diese Spannungen aufrecht erhalten werden müssen, damit ein Bit gesendet wird. Diese Schicht ist immer direkt mit der Hardware verbunden, ihre Konstruktion ist also Aufgabe des Hardwareherstellers.

> ## Die Sicherungsschicht

> Die Sicherungsschicht (data link layer) verarbeitet die übertragenen Rohdaten indem sie eine Datenreihe daraus erstellt und diese Datenreihe gewöhnlichermaßen in einen sogenannten Datenübertragungsrahmen (data frame) packt. Die Sicherungsschicht kommuniziert mit ihrer gegenüberliegenden Sicherungsschicht durch sogenannte Quittungsrahmen, die korrekt verarbeitet werden müssen.

> Um das Ganze einmal im Detail zu sehen folgt hier die Darstellung der Framestruktur eines Datenrahmens (engl. frame) der IEEE 802.3 Norm, also der Norm, die unser Ethernet benutzt:

> Bild 2..2: Das 802.3 Frameformat

> Die beiden Adressfelder enthalten dabei die Hardwareadresse (MAC-Adresse) der jeweiligen Netzwerkkarten. Das Datenfeld enthält die eigentlichen Daten, falls es weniger als 46 Byte sind, so wird das Pad-Feld benutzt um die (physikalisch notwendigen) 46 Byte aufzufüllen. Die Prüfsumme ist schließlich eine Möglichkeit, Fehler bei der Übermittlung direkt zu erkennen und ein fehlerhaftes Paket gegebenenfalls nochmal anzufordern.

> ## Die Vermittlungsschicht

> Diese Schicht (Network Layer) steuert die verschiedenen Transportwege innerhalb des Netzes. In kleinen LAN ist diese Schicht also verhältnismäßig dünn, in großen Netzen (z.B. dem Internet) hat sie sehr umfangreiche Aufgaben. Die Wahl der verschiedenen möglichen Routen vom Sender zum Empfänger, das optimale Ausnutzen der bestehenden Verbindungen und ähnliches sind ihre Aufgaben.

> ## Die Transportschicht

> Die Aufgabe der Transportschicht (Transport Layer) ist es, den Datenstrom von der Sitzungsschicht zur Vermittlungsschicht weiterzugeben, eventuell in kleinere Pakete zu packen und dafür zu sorgen, daß alle Teile in der korrekten Reihenfolge ankommen. Die Transportschicht baut eine direkte Kommunikation zwischen Sender und Empfänger auf, und arbeitet mit einem entsprechenden direkten Protokoll. Man spricht hier von einer Ende-zu-Ende Schicht, im Gegensatz dazu waren die bisher besprochenen Schichten sogenannte gekettete Schichten. Das heißt, daß sie nicht unbedingt eine direkte Kommunikation mit der Zielmaschine betrieben, sondern nur mit den zwischen Sender und Empfänger liegenden Zwischenstationen (Gateways, Bridges,...)

> Viele Computer arbeiten heute im Multitasking-Betrieb, es kann also sein, daß zwischen zwei Rechnern mehrere unabhängige Netzwerkverbindungen bestehen. Auch die Koordination dieser Tatsache ist Aufgabe der Transportschicht.

> ## Die Sitzungsschicht

> Die Sitzungsschicht (Session Layer) hat ähnliche Aufgaben wie die Transportschicht, jedoch in einer etwas gehobeneren Form. Sie muß zum Beispiel abgebrochene Transferversuche an der Stelle wiederaufnehmen, an der sie abgebrochen wurden. Insgesamt könnte man es damit zusammenfassen, daß die Sitzungsschicht zuständig für die Dialogsteuerung ist.

> ## Die Darstellungsschicht

> Die Darstellungsschicht (Presentation Layer) ist zuständig für die korrekte Darstellung der Daten. Diese Schicht wird z.B. dadurch notwendig, daß verschiedene Computer verschiedene Formen der Darstellung für Ganz- und Kommazahlen haben. Es gibt etwa die sogenannten Big-Endian Systeme, die in einer 16-Bit Ganzzahl das höherwertige Byte zuerst anführen, während die Little-Endian Systeme es genau anders herum machen. Würden Computer miteinander kommunizieren, die diese Darstellung unterschiedlich handhaben, so kämen zwar Ganzzahlen am Zielrechner an, er würde sie aber gänzlich falsch interpretieren.

> ## Die Anwendungsschicht

> Die letzte Schicht des OSI-Modells (Application Layer) enthält nun die verschiedenen Anwendungen, die sich gegenseitig über das Netz verständigen. Diese Schicht ist in der Regel direkt in das Anwenderprogramm programmiert und enthält die jeweiligen Protokolle, mit denen die Programme kommunizieren.

> # Das TCP/IP Referenzmodell

> Nachdem das OSI-Modell ein eher akademisches Modell ist und von keiner Netzwerksoftware wirklich hundertprozentig implementiert wird, ist es jetzt an der Zeit, das Modell zu betrachten, das tatsächlich heute im Internet (und allen lokalen Netzsystemen) verwendet wird, TCP/IP. Im Gegensatz zum OSI-Modell kommt TCP/IP mit nur vier Schichten aus, um den Datentransfer zu erklären:

> Bild 2..3: Das TCP/IP-Schichtenmodell

> Diese vier Schichten kommunizieren nicht genau mit denen des OSI-Modells, vereinfacht kann man sagen, daß die Netzzugriffsschicht die beiden untersten Schichten des OSI-Modells enthalten, die Internetschicht entspricht genau der Vermittlungsschicht, die Transportschicht von TCP/IP erfüllt im Wesentlichen die Aufgaben der Transportschicht des OSI-Modells und die restlichen drei Schichten von OSI sind in der Anwendungsschicht von TCP/IP integriert.

> Auf all diesen vier Schichten arbeiten unterschiedliche Protokolle zur Datenübertragung. Vereinfacht könnte das etwa wie folgt dargestellt werden:

> Bild 2..4: Protokolle des TCP/IP-Schichtenmodells

> In der Anwendungsschicht arbeiten also sehr viele verschiedene Protokolle, in der Transportschicht gerade noch zwei, in der Vermittlungsschicht nur eines und auch auf der Netzzugriffsschicht eines (allerdings eines aus vielen möglichen).

> Jede Schicht dieses Modells muß Informationen besitzen, an welche Abteilung der über ihr liegenden Schicht sie den Datenstrom beim Empfang weitergeben soll. Von unten nach oben betrachtet ergibt sich damit folgender Vorgang:

> - Die Netzzugriffsschicht bekommt ein Paket aus dem Netz. Sie hat kein Problem mit der Weitergabe, denn die über ihr liegende Schicht enthält nur ein Protokoll, IP.
> - Das Internet-Protokoll (IP) der Vermittlungsschicht muß aufgrund der ihr übermittelten Information schon entscheiden, wem sie das Paket weitergibt. Es stehen hier drei Möglichkeiten zur Auswahl:
>   - Das Paket bleibt in der Vermittlingsschicht und wird vom Internet Control Message Protocol (ICMP) weiterverarbeitet (z.B. ping)
>   - Das Paket Gehört zu einem TCP-Datenstrom und muß an das Transmission Control Protocol (TCP) der Transportschicht weitergeleitet werden.
>   - Das Paket enthält ein UDP-Datagram und muß daher an das User Datagram Protocol (UDP) der Transportschicht weitergegeben werden.
>   Diese Information muß IP aus dem IP-Datagram-Header gewinnen. Das Format dieses Headers ist weiter unten erklärt.
> - Die Protokolle der Transportschicht (TCP und UDP) haben die größte Aufgabe, denn sie müssen aus einer Vielzahl von möglichen Anwendungen auswählen, für welche dieser Anwendungen das empfangene Paket ist, also an welche Anwendung sie die Daten weiterleiten. Zu diesem Zweck besitzt jede Anwendung der Anwendungsschicht eine Kennummer, die sogenannte Portnummer. Diese Nummer legt genau fest, welche Anwendung das Paket erhält.

> Die beiden Schichten, die uns jetzt genauer interessieren, sind die mittleren, also vermittlungsschicht und Transportschicht. Hier finden die Mechanismen statt, die für das Verständnis einer Firewall unerlässlich sind.

> ## Die Vermittlungsschicht

> Auf der Vermittlungsschicht (Internet-Schicht) von TCP/IP arbeitet im Wesentlichen nur ein Protokoll, das IP (Internet Protocol). Dieses Protokoll arbeitet nicht mit den physikalischen Adressen von Netzwerkkarten, sondern mit logischen Adressen, eben den allseits bekannten IP-Adressen. Diese Schicht fügt den eigentlich zu übermittelnden Daten noch Verwaltungsinformationen hinzu. Dieses Format wird als Datagram-Format bezeichnet und hat die folgende Struktur:

> Bild 2..5: Das IP-Datagram Format

> Die Bedeutung der einzelnen Felder ist

> Version
>   Ein vier Bit breites Feld, daß die Versionsnummer von IP enthält. Im Augenblick wird hier meist eine 4 stehen, in der neuen Version IPV6 folgerichtig dann eine 6.
> IHL
>   Internet Header Length - 4 Bit. Gibt die Länge des Headers in 32 Bit Worten an. Damit kann ermittelt werden, ob Optionen gesetzt sind. Normalerweise (ohne Optionen) hat dieses Feld den Wert 5.
> Diensttyp
>   TOS (Type of Service) - 8 Bit. Enthält Flags, die zur Steuerung der Zuverlässigkeit des Netzes dienen. Sie werden automatisch erstellt.
> Gesamtlänge
>   Enthält die Gesamtlänge des Datagramms (incl. Kopf) in Byte. Aus der Breite dieses Feldes (16 Bit) ergibt sich so eine maximale Größe von Datagrammen von 65535 Byte. Dieser Wert liegt weit über dem maximalen Wert der einzelnen Netzsysteme, daher reichen 16 Bit aus.
> Kennung
>   Jedes IP-Datagramm muß eine eigene Kennung haben, um beim Wiederzusammenbau richtig eingeordnet zu werden.
> Flags
>   Ein Drei-Bit-Feld das Flags zur Steuerung der Fragmentierung enthält.
> Lebensdauer
>   In Netzen wie dem Internet, in denen viele Datagramme auf unterschiedlchsten Wegen versuchen zum Ziel zu kommen, muß eine maximale Lebensdauer haben, sonst werden sie unendlich oft geroutet. Dieses Feld enthält eine Zahl, die vom Sender eingetragen wurde. Jeder Gateway muß diese Zahl um eins herunterzählen, wenn er ein Datagramm routet. Ist der Wert Null, so darf kein Router das Datagramm mehr weiterleiten. Übliche Startwerte sind 32 oder 4 (nur lokale Netze setzen so niedrige Lebensdauer an)
> Protokoll
>   Dieses Feld gibt an, von welchem Protokoll der Transportschicht dieses Datagramm kommt. Das ist wichtig für den Empfänger, weil auf der Transportschicht mehrere Protokolle arbeiten bzw. es auch Pakete gibt, die gar nicht bis zur Transportschicht weitergeleitet werden sollen. Nur durch diese Information kann das Empfänger IP das Datagramm an das richtige Transportschichtprotokoll weiterleiten. Übliche Werte sind:
>   - 17 - UDP
>   - 6 - TCP
>   - 1 - ICMP
> Kopf-Prüfsumme
>   Prüfsumme über den Inhalt des Headers, nicht der Daten. Die Überprüfung der Daten wird von der Transportschicht erledigt.
> Sender IP-Adresse
>   32 Bit IP-Adresse des Senders
> Empfänger IP-Adresse
>   32 Bit IP-Adresse des Empfängers
> Optionen
>   Hier können verschiedene Optionen gesetzt werden, die mit Debugging (Fehlersuche) oder Routenprüfung zu tun haben.
> Füllzeichen
>   Füllt den Bereich zwischen den jeweils gesetzten Optionen und dem Ende des 32 Bit Wortes auf.

> ### Das Internet Controll Message Protocol (ICMP)

> Das Internet Control Message Protocol (ICMP) ist ein integraler Bestandteil von IP und dient zur Übermittlung technischer Meldungen, die übers Netz gehen, aber nicht über die IP-Schicht hinauskommen müssen. D.h., daß dieses Protokoll in der Lage ist, Pakete zu schicken, die nicht an ein Transportprotokoll der Transportschicht gebunden sind, sondern eben nur von Vermittlungsschicht zu Vermittlungsschicht gehen.

> Die Aufgaben, die dieses Protokoll zu erfüllen hat sind hier kurz aufgelistet:

> Flußkontrolle
>   Wenn ein Rechner Datagramme so schnell schickt, daß der Empfänger sie nicht rechtzeitig verarbeiten kann, so schickt der Empfänger über ICMP eine Meldung an den Sender, daß die Sendungen vorübergehend stoppen sollen. Nachdem der Empfänger alle anstehenden Datagramme verarbeitet hat, schickt er erneut eine Meldung, daß er wieder empfangsbereit ist.
> Erkennen von unerreichbaren Zielrechnern
>   Wenn ein Gateway erkennt, daß ein bestimmter Rechner nicht erreichbar ist, so schickt er an den Absender des Paketes eine Destination unreachable Meldung über ICMP
> Routenoptimierung
>   Wenn ein Gateway erkennt, daß er einen Umweg darstellt, so schickt er an den Absender eine Meldung, in der die schnellere Route steht. Der Absender (bzw. seine IP-Schicht) kann dann das nächste Paket schon über den besseren Weg übermitteln.
> Überprüfen von erreichbaren Hosts
>   Mit Hilfe des ICMP Echo Message kann ein Rechner überprüfen ob ein Empfänger ansprechbar ist. Das ping-Kommando nutzt diese Echo-Meldung.

> ## Die Transportschicht

> Auf der Transportschicht von TCP/IP arbeiten zwei verschiedene Protokolle, TCP und UDP. Der wesentliche Unterschied zwischen den beiden Protokollen ist die Frage der Kommunikationssteuerung. TCP (Transmission Control Protocol) arbeitet verbindungsorientiert, es baut also einen Datenstrom zwischen Empfänger und Sender auf, der über mehrere Pakete verteilt ist und dessen korrekter Empfang permanent durch Quittungspakete vom Empfänger bestätigt werden muß. Im Gegensatz dazu arbeitet UDP (User Datagram Protocol) verbindungslos, das heißt, es werden einfach Pakete (Datagramme) vom Sender zum Empfänger geschickt, ohne daß dieser den Empfang quittieren muß.

> Beide Protokolle arbeiten wieder mit einem sogenannten Header, der dem eigentlichen Datenpaket vorangestellt wird. Beiden Headerformen ist eins gemeinsam, sie enthalten einen Eintrag für die Portnummer des Senderprozesses und die des Empfängerprozesses. Diese Portnummern werden uns im nächsten Abschnitt noch genauer beschäftigen. Im folgenden werden beide Headerformate kurz dargestellt:

> ### Das UDP-Message Format

> Die interne Struktur des UDP-Headers ist sehr einfach. Als datagramorientiertes (verbindungsloses) Protokoll benötigt UDP keinerlei Informationen über Sequenznummern oder ähnliches, der benötigte Header ist also sehr klein:

> Bild 2..6: Das UDP-Message Format

> Die Bedeutung der einzelnen Felder ist

> Quellportnummer
>   bezeichnet die Portnummer des Anwenderschichtprogrammes, von dem die UDP-Message abgeschickt wurde.
> Zielportnummer
>   bezeichnet die Portnummer des Empfängerprogramms auf der Anwendungsschicht.
> Länge
>   Hier steht die Länge der gesamten UDP-Message (incl. Header)
> Prüfsumme
>   Eine Prüfsumme über das Datenfeld
> UDP wird überall dort verwendet, wo entweder die Datenmenge so klein ist, daß es sich nicht lohnen würde, einen großen Header zu benutzen, weil der größer als die eigentlichen Daten wäre oder wo die Anwendungen selbst noch Überprüfungen des Paketinhaltes vornehmen.

> Lohnenswert ist der Einsatz auch dort, wo reine Frage-Antwort Mechanismen auftreten. Dort ist kein verbindungsorientiertes Protokoll nötig, weil ja nach dem Senden einer Frage klar ist, wenn nach einer bestimmten Zeit keine Antwort eingeht, so wird das Paket verlorengegangen sein und die Frage muß nochmal gestellt werden.

> ### Das TCP-Segment Format

> TCP ist im Gegensatz zu UDP ein verbindungsorientiertes Protokoll, das Datenströme verarbeitet, die von der Anwendungsschicht kommen. TCP garantiert die Versendung von Daten durch eingebaute Handshake-Mechanismen.

> TCP bietet einen verlässlichen Datentransfer durch die Verwendung eines Mechanismus, der Datenpakete (sogenannte Segmente) an einen Empfänger schickt und auf eine Bestätigung des Empfangs seitens des Empfängers wartet. Dabei überprüft der Empfänger auch wieder mittels einer Prüfsumme, ob das Paket fehlerfrei angekommen ist.

> Das Format des Headers ist zwangsläufig also wesentlich komplexer als das von UDP:

> Bild 2..7: Das TCP-Segment Format

> Die Bedeutung der einzelnen Felder ist

> Absender Portnummer
>   bezeichnet die Portnummer des Anwenderschichtprogramms, von dem der Datenstrom abgeschickt wurde.
> Empfänger Portnummer
>   bezeichnet die Portnummer des Empfängerprogramms auf der Anwendungsschicht.
> Sequenznummer
>   Gibt die Position im Datenstrom an, an der dieses Segment eingefügt werden soll.
> Bestätigungsnummer
>   Dient zur Bestätigung des Empfangs eines Segments. Dieses Feld enthält immer die Nummer, die im nächsten Segment als Sequenznummer stehen soll.
> Daten-Offset
>   Gibt die Größe des Headers in 32 Bit Worten an. Ohne Optionen sind es 5. Damit kann genau bestimmt weden, wo der Datenbereich des Segments beginnt.
> Flags
>   Verschiedene Flags zur Kommunikationssteuerung (SYN,ACK,...)
> Fenster
>   Mit diesem Wert wird die Größe des Buffers angezeigt, der von einem Endknoten für diese Verbindung reserviert wurde. Der sendende Knoten darf keinesfalls mehr Daten als die angegebene Puffergröße senden, ohne auf den Eingang einer Bestätigung zu warten.
> Prüfsumme
>   Eine Prüfsumme über das gesamte Segment (Daten und Header)
> Dringlichkeitszeiger
>   Wird bei besonders dringend zu verarbeitenden Paketen gesetzt. Wenn gesetzt enthält dieses Feld als Wert die Endadresse des Datenfeldes, das als dringlich gilt
> Optionen
>   Verschiedene Optionen zur Kommunikation wie etwa die maximale Segmentgröße
> Füllzeichen
>   Zum Auffüllen der Optionszeile auf 32 Bit

> #
> Kommunikationsablauf einer TCP-Verbindung

> Die meisten Netzwerkdienste im Internet arbeiten mit TCP als Transportprotokoll. Aus diesem Grund soll hier einmal detailliert der Kommunikationsablauf einer typischen TCP-Verbindung beschrieben werden. Das Verständnis dieses Ablaufs macht uns später das Einrichten einer Firewall erheblich leichter und vermeidet Fehler, die sonst auftreten könnten.

> Eine typische Verbindung mit TCP wäre die Kommunikation eines Web-Browsers mit einem Webserver über das Hypertext Transfer Protocol (HTTP). Die Portnummer des Webservers ist standardmäßig die 80, der Web-Client (also der Browser) nimmt sich eine beliebige freie Portnummer ab der 1024. In unserem Beispiel wird es die Portnummer 12345 sein.

> Der erste Schritt der Kommunikation zwischen Web-Client und Webserver besteht darin, daß der Benutzer des Clients eine Adresse in den Browser - also den Client - eingibt. Diese Adresse wird in eine IP-Adresse umgewandelt und der Client bekommt vom Betriebssystem einen freien Port oberhalb 1024 (also einen sogenannten unprivilegierten Port)zugewiesen. In unserem Beispiel ist das der Port 12345. Mun schickt jetzt der Client ein HTTP-Paket an den Server. Die Transportschicht und ihr Protokoll TCP erkennt, daß es sich um eine neue Verbindung handelt und setzt das sogenannte SYN-Flag im Flag-Bereich des TCP-Segment-Headers. Webserver benutzen - sofern nicht anders angegeben - standardmäßig den Port 80. Es ergibt sich also folgendes Bild:

> Bild 2..8: Client bittet um Verbindungsaufbau

> Der Client schickt in dem Header neben dem SYN-Flag - also der Bitte um Verbindung - auch eine Sequenznummer. Auf der Basis dieser Nummer wird die weitere Verbindung abgewickelt.

> Das abgeschickte Paket kommt jetzt auf dem Server an und gelangt bis zur Anwendungsschicht und dort zum Port 80. Dort nimmt ein Serverprogramm (hier der Webserver httpd) den Datenstrom entgegen. Der Server erkennt aufgrund des SYN-Flags, daß es sich um eine neue Verbindung handelt und reserviert einen neuen Socket für die Kommunikation mit dem Client. Er schickt jetzt ein Paket zurück, das sowohl das ACK-Flag (Acknowledge - Bestätigung), als auch wiederum ein SYN-Flag gesetzt hat. Man spricht jetzt von einer halb-offenen Verbindung.

> Bild 2..9: Bestätigung der Bitte um Verbindungsaufbau

> Die Sequenznummer des Paketes, das der Server in Bild 2..9 dem Client zurückschickt ist die Sequenznummer des ersten Paketes plus eins. Damit bestätigt der Server den Erhalt des letzten Paketes und macht gleichzeitig klar, welche Sequenznummer er im nächsten Paket erwartet. Damit kann der Client das erste Paket jetzt wegwerfen, da er den Erhalt ja jetzt bestätigt bekommen hat.

> Diese erste Antwort vom Server hat beide Flags (ACK und SYN) gesetzt. Von nun an wird der gesamte Datenverkehr immer nur noch mit dem ACK-Flag ablaufen. Die Tatsache, daß in allen Paketen des Servers das ACK-Flag gesetzt ist, in der ersten Anfrage des Clients jedoch nicht, wird beim Aufbau einer Firewall ein wichtiges Kriterium sein.

> Im nächsten Schritt bestätigt der Client seinerseits den Empfang der Antwort des Servers. Von nun an wird nur noch das ACK-Flag gesetzt sein. Weder Server, noch Client werden im Lauf der Verbindung das SYN-Flag nochmal benutzen.

> Bild 2..10: Die Verbindung ist hergestellt

> Bei jeder weiteren Bestätigung (also jedem weiter erhaltenen ACK-Flag) erhöhen sowohl Client, als auch Server die Sequenznummern des letzten empfangenen Paketes. Damit bestätigen sie also den Empfang des Paketes und geben gleichzeitig bekannt, welches Paket sie als nächstes erwarten. Die jeweilige Gegenseite kann also alle Pakete mit nierigeren Sequenznummern wegwerfen.

> Um eine Verbindung abzubauen wird ein weiteres Flag benutzt, das aber für den Aufbau von Firewallsystemen unwichtig ist. Zusammenfassend können wir also festhalten:

> Das SYN-Flag ist gesetzt, wenn Client und Server jeweils ihr erstes Paket schicken. Bei allen folgenden Paketen ist das ACK-Flag gesetzt. Ein Paket, in dem nur das SYN-Flag gesetzt ist muß zwangsläufig eine Anfrage eines Clients an einen Server sein.

> Nachdem nun die Grundlagen der TCP/IP-Kommunikation geklärt sind, ist es an der Zeit, die Grundlagen der Firewall-Techniken anzusprechen. Die in diesem Kapitel besprochenen Felder der TCP- und IP-Header werden dabei Kriterien für die Auswahl sein.

> Nächste Seite: Grundlagen der Firewalltechnik Aufwärts: Crashkurs Firewallaufbau unter Linux Vorherige Seite: Vorwort Inhalt