Suche im Katalog
Linux Netzwerker-Handbuch

Linux Netzwerker-Handbuch


Tony Bautts, Terry Dawson & Gregor N. Purdy
3. Auflage Juli 2005
ISBN 3-89721-414-8
382 Seiten
Weitere Informationen zur gedruckten Version des Buches finden Sie unter:
www.oreilly.de/catalog/linag3ger/

Zur Übersicht aller OpenBooks


TOC PREV NEXT INDEX

Kapitel 1

Einführung in das Arbeiten mit Netzwerken

Historisches

Die Idee der Vernetzung ist wahrscheinlich so alt wie die Telekommunikation selbst. Denken Sie beispielsweise an die Menschen aus der Steinzeit, die Trommeln verwendeten, um damit Nachrichten auszutauschen. Stellen Sie sich vor, Höhlenmensch A möchte Höhlenmenschen B einladen, sich gegenseitig mit Steinen zu bewerfen. Nun leben die beiden zu weit voneinander entfernt, als dass B hören könnte, was A trommelt. Welche Möglichkeiten hat A nun? Er könnte 1. zu B hinübergehen, sich 2. eine größere Trommel zulegen oder 3. C, der auf halber Strecke zwischen A und B wohnt, bitten, die Nachricht weiterzuleiten. Diese letzte Variante wird Netzwerk genannt.

Natürlich haben die Geräte und Hilfsmittel unserer Vorfahren eine lange Entwicklung durchgemacht. Heutzutage unterhalten sich Computer über gigantische Kabelstränge, Lichtwellenleiter, Mikrowellen und dergleichen, damit wir uns für das samstägliche Fußballspiel verabreden können.1 In der folgenden Beschreibung wollen wir uns damit befassen, mit welchen Mitteln und auf welchen Wegen das erreicht wird. Dabei lassen wir den Teil mit den Kabeln ebenso weg wie den mit dem Fußball.

Wir definieren ein Netzwerk als eine Ansammlung von Hosts, die in der Lage sind, miteinander zu kommunizieren. Oft sind diese Rechner von den Diensten einer Reihe von dedizierten Hosts abhängig, die Daten zwischen den Teilnehmern übertragen. Hosts sind häufig Computer, müssen es aber nicht unbedingt sein. Auch X-Terminals oder intelligente Drucker können Hosts sein. Eine Ansammlung von Hosts wird auch als Site bezeichnet.

Kommunikation ist ohne so etwas wie eine Sprache oder einen Code nicht möglich. In Computernetzwerken werden diese Sprachen insgesamt als Protokolle bezeichnet. Nun sollten Sie dabei nicht an geschriebene Protokolle denken, sondern vielmehr an eine sehr formalisierte Art von Verhalten, wie es beispielsweise bei Staatsempfängen zu beobachten ist. Ähnlich sind auch die in Computernetzwerken verwendeten Protokolle nichts anderes als sehr strenge Regeln für den Austausch von Nachrichten zwischen zwei oder mehreren Computern.

TCP/IP-Netzwerke

Modernen Netzwerkanwendungen liegt ein sehr hoch entwickeltes Konzept zugrunde, um Daten von einer Maschine zu einer anderen zu übertragen. Wenn Sie ein Linux-System mit vielen Anwendern verwalten, die gleichzeitig Verbindungen zu entfernten Hosts aufnehmen wollen, müssen Sie dafür sorgen, dass alle Ihre Netzwerkverbindung benutzen können, ohne sich gegenseitig zu stören. Ein von vielen modernen Netzwerkprotokollen verwendeter Ansatz ist die paketorientierte Datenübertragung oder Paketvermittlung (packet switching). Ein Paket ist ein kleines Datenbündel, das über ein Netzwerk von einer Maschine auf eine andere übertragen wird. Das Weiterreichen der Pakete über die einzelnen Stationen des Netzwerks wird als Vermittlung bezeichnet. Ein paketorientiertes Netzwerk verwendet eine einzige Netzwerkleitung für mehrere Benutzer, indem die Pakete für die einzelnen Benutzer abwechselnd über diese Leitung gesendet werden.

Die Lösung, die von vielen Unix-Systemen - und vielen Nicht-Unix-Systemen - übernommen wurde, ist als TCP/IP bekannt. Wenn Sie sich mit TCP/IP-Netzwerken befassen, wird Ihnen der Begriff Datagramm begegnen, der oft als Synonym für Paket verwendet wird. In diesem Abschnitt werden wir die den TCP/IP-Protokollen zugrunde liegenden Konzepte betrachten.

Einführung in TCP/IP-Netzwerke

Die Ursprünge von TCP/IP liegen in einem Forschungsprojekt, das im Jahre 1969 von der United States Defense Advanced Research Projects Agency (DARPA) finanziert wurde. Was unter dem Namen ARPANET als experimentelles Netzwerk begann, wurde im Jahre 1975 in den normalen Betrieb übernommen, nachdem es sich als erfolgreich erwiesen hatte.

1983 wurde die neue TCP/IP-Protokollfamilie als Standard übernommen. Alle Hosts im Netzwerk mussten es von nun an einsetzen. Während ARPANET schließlich zum Internet wurde (wobei das ARPANET im Jahre 1990 aufhörte zu existieren), hatte sich TCP/IP schon auf Netzwerken außerhalb des Internet ausgebreitet. Viele Firmen verfügen mittlerweile über Unternehmensnetzwerke auf der Grundlage von TCP/IP, und das Internet ist inzwischen so groß geworden, dass es für viele Verbraucher zu einem Stück Alltag wurde. Man findet kaum noch eine Zeitung oder eine Zeitschrift ohne Verweise auf das Internet. Fast jeder kann es heutzutage benutzen.

Als konkretes Beispiel zur Erläuterung von TCP/IP in den folgenden Abschnitten führen wir die irgendwo in Freedonien ansässige Groucho-Marx-Universität (GMU) ein. Die meisten Institute betreiben ihr eigenes lokales Netzwerk, während andere eines gemeinsam benutzen und wieder andere gleich mehrere betreiben. Alle sind miteinander verbunden und haben über eine gemeinsame Hochgeschwindigkeitsleitung Zugang zum Internet.

Stellen Sie sich vor, Ihre Linux-Kiste ist mit einem LAN von Unix-Hosts im mathematischen Institut verbunden (nennen wir sie einfach einmal erdos). Um nun auf einen Host im physikalischen Institut, sagen wir auf quark, zugreifen zu können, müssen Sie folgenden Befehl eingeben:

$ ssh quark.school.edu
Enter password:
Last login: Wed Dec 3 18:21:25 2003 from 10.10.0.1
quark$

Am Prompt geben Sie Ihr Kennwort ein. Dann wird eine Shell2 auf quark gestartet, in der Sie arbeiten können, als würden Sie an der Konsole des Systems sitzen. Sobald Sie die Shell verlassen, erscheint wieder der Prompt Ihrer eigenen Maschine. Sie haben gerade eine der grundlegenden interaktiven Anwendungen verwendet, die TCP/IP zur Verfügung stellt: Secure Shell.

Während Sie in quark eingeloggt sind, möchten Sie vielleicht eine Anwendung mit grafischer Benutzeroberfläche ausführen, wie etwa eine Textverarbeitung, ein Grafikprogramm oder einen Webbrowser. Das X Window System ist eine vollständig netzwerkorientierte grafische Benutzerumgebung, die es für viele unterschiedliche Computersysteme gibt. Um dieser Anwendung mitzuteilen, dass ihre Ausgaben auf dem Bildschirm Ihres Hosts erscheinen sollen, müssen Sie sicherstellen, dass der von Ihnen benutzte SSH-Server und -Client in der Lage ist, X zu tunneln. Überprüfen Sie dazu die Datei sshd_config auf dem System. Diese Datei sollte etwa folgende Zeile enthalten:

X11Forwarding yes

Wenn Sie nun Ihre Anwendung starten, werden die Anwendungen Ihres X Window Systems getunnelt, so dass sie auf Ihrem X-Server und nicht auf dem von quark angezeigt werden. Das setzt natürlich voraus, dass auf erdos X11 läuft. Entscheidend ist hier, dass TCP/IP quark und erdos erlaubt, X11-Pakete hin und her zu schicken, wodurch bei Ihnen der Eindruck entsteht, dass Sie auf einem einzigen System arbeiten. Das Netzwerk erscheint hier nahezu transparent.

Das sind natürlich nur Beispiele dafür, was Sie mit TCP/IP-Netzwerken alles machen können. Die Möglichkeiten sind fast grenzenlos. Wir stellen Ihnen in diesem Buch noch einige weitere vor.

Wir werden uns nun etwas genauer anschauen, wie TCP/IP funktioniert. Diese Informationen helfen Ihnen zu verstehen, wie und warum Sie Ihre Maschine konfigurieren müssen. Wir beginnen mit einer Untersuchung der Hardware und arbeiten uns dann langsam vor.

Ethernet

Die in LANs am weitesten verbreitete Hardware wird Ethernet genannt. In ihrer einfachsten Form besteht sie aus einem einzigen Kabel, das zwei Hosts über spezielle Stecker, Anschlüsse oder Transceiver verbindet. Einfache Ethernet-Netzwerke sind in der Installation relativ günstig, was zusammen mit den möglichen Übertragungsraten von 10, 100, 1.000 und inzwischen sogar 10.000 Megabit pro Sekunde (Mbps) sicherlich für ihre große Popularität gesorgt hat.

Ethernet-Netzwerke gibt es in vielen Varianten: Thick, Thin und Twisted Pair. Ältere Ethernet-Typen wie Thin- und Thick-Ethernet, die heutzutage nur noch selten zu finden sind, verwenden beide ein Koaxialkabel, das sich aber jeweils in der Dicke und in der Art und Weise, wie ein Host an dieses Kabel angeschlossen wird, unterscheidet. Thin-Ethernet arbeitet mit einem T-förmigen »BNC«-Steckverbinder, den Sie in das Kabel einfügen und auf einen entsprechenden Stecker an der Rückseite Ihres Computers aufstecken. Bei Thick-Ethernet müssen Sie ein kleines Loch in das Kabel bohren und mit Hilfe einer »Vampirklemme« einen Transceiver anschließen. Mit dem Transceiver können dann ein oder mehrere Hosts verbunden werden. Die maximale Länge für Thin- und Thick-Ethernet-Kabel darf 200 bzw. 500 Meter nicht überschreiten. Diese Ethernet-Typen werden daher auch als 10Base2 und 10Base5 bezeichnet. Das Wort »Base« bezieht sich dabei auf »Basisband-Modulation« und bedeutet einfach nur, dass die Daten ohne irgendein Modem direkt in das Kabel geleitet werden. Die Zahl am Anfang gibt die Geschwindigkeit in Megabit pro Sekunde an, und die Zahl am Ende steht für die maximale Länge des Kabels als Vielfaches von Einhundert (in Metern). Twisted Pair verwendet ein zweiadriges Kupferkabel und erfordert üblicherweise zusätzliche Hardware, so genannte aktive Hubs. Twisted Pair wird auch 10BaseT genannt, wobei das »T« für das Twisted Pair, also die verdrillten Kabelpaare, steht. Die Version mit 100 Mbps ist als 100BaseT bekannt, 1000 Mbps werden als 1000BaseT oder Gigabit-Ethernet bezeichnet.

Um einen Host zu einer Thin-Ethernet-Installation hinzuzufügen, müssen Sie den Netzwerkdienst für wenigstens ein paar Minuten lahm legen, da Sie das Kabel aufschneiden müssen, um den Steckverbinder anzubringen. Obwohl das Hinzufügen eines Hosts zu einem Thick-Ethernet-System ein bisschen komplizierter ist, wird dadurch üblicherweise nicht das Netzwerk gestört. Twisted-Pair-Ethernet ist noch einfacher. Es verwendet ein Gerät namens Hub oder Switch, das als Verbindungsstelle dient. Sie können Hosts zu einem Hub oder Switch hinzufügen oder entfernen, ohne die anderen Benutzer in irgendeiner Form zu stören.

Thick- und Thin-Ethernet-Anlagen treten mittlerweile kaum noch in Erscheinung, da sie meist durch Twisted-Pair-Anordnungen ersetzt wurden. Vermutlich wegen der preiswerten Netzwerkkarten und -kabel ist Twisted Pair zu einem Standard geworden - abgesehen von der Tatsache, dass es fast unmöglich ist, an einem modernen Laptop einen altmodischen BNC-Anschluss zu finden.

Wireless LANs (drahtlose LANs) sind ebenfalls sehr beliebt. Diese bauen auf der 802.11a/b/g-Spezifikation auf und bieten Ethernet per Funkübertragung. Drahtloses Ethernet, das eine ähnliche Funktionalität wie sein drahtgebundenes Gegenstück bereitstellt, ist Gegenstand einer Reihe von Sicherheitsfragen, besonders in Bezug auf Verschlüsselung. Fortschritte in der Protokollspezifikation in Kombination mit unterschiedlichen Verschlüsselungsmethoden helfen jedoch dabei, einige der ernsteren Sicherheitsbedenken auszuräumen. Der drahtlose Netzwerkbetrieb für Linux wird in Kapitel 18 näher behandelt.

Ethernet funktioniert wie ein Bussystem, bei dem ein Host Pakete (oder Frames) von bis zu 1.500 Byte an einen anderen Host im gleichen Ethernet-Netzwerk senden kann. Ein Host wird über eine 6 Byte lange Adresse angesprochen, die fest in die Firmware seiner Ethernet-Netzwerkkarte (Network Interface Card oder NIC) kodiert ist. Diese Adressen werden normalerweise als eine Folge von zweistelligen Hexadezimalzahlen geschrieben, die jeweils durch Doppelpunkte abgetrennt sind: aa:bb:cc:dd:ee:ff.

Ein von einem Rechner ausgesandter Frame wird von allen angeschlossenen Rechnern registriert, aber nur der Ziel-Host liest das Paket und verarbeitet es. Versuchen zwei Stationen zur gleichen Zeit zu senden, tritt eine Kollision auf. Kollisionen in einem Ethernet-Netzwerk werden von der Elektronik auf den Netzwerkkarten sehr schnell erkannt und aufgelöst, indem beide Stationen den Sendevorgang abbrechen, eine zufällige Zeitspanne warten und dann erneut eine Übertragung versuchen. Sie haben vielleicht schon viele Geschichten über die Problematik solcher Kollisionen gehört und dass das Ethernet nur etwa ein Drittel seiner eigentlichen Kapazität ausnutzen kann. Kollisionen in Ethernet-Netzwerken sind ein normales Phänomen. In stark beanspruchten Ethernet-Netzwerken brauchen Sie sich nicht zu wundern, wenn dort Kollisionsraten von bis zu 30 Prozent auftreten. Erst ab einer Auslastung von etwa 60 Prozent müssen Sie sich ernstlich Sorgen machen.3

Andere Arten von Hardware

Bei größeren Installationen oder in älteren Firmenumgebungen wird üblicherweise nicht nur Ethernet benutzt. Dort stehen auch viele andere Protokolle zur Datenkommunikation zur Verfügung. Alle aufgeführten Protokolle werden auch von Linux unterstützt, aus Platzgründen gehen wir aber nur kurz darauf ein. Falls Sie an Protokollen interessiert sind, die wir in diesem Buch nicht ausführlich beschreiben, verweisen wir auf die entsprechenden HOWTO-Dokumente.

Eine ältere und rasch schwindende Technik sind Token Ring-Netzwerke von IBM. Token Ring wird in manchen LAN-Umgebungen als Alternative zu Ethernet eingesetzt, läuft allerdings mit geringerer Geschwindigkeit (4 Mbps oder 16 Mbps). Unter Linux wird die Token Ring-Netzwerkunterstützung praktisch genauso konfiguriert wie Ethernet, so dass wir hier nicht näher darauf eingehen.

Viele nationale Netzwerke, die von Telekommunikationsunternehmen betrieben werden, unterstützen so genannte paketvermittelnde Protokolle (Packet Switching Protocols). Das populärste unter ihnen war früher ein Standard namens X.25. Dieser definiert eine Menge von Netzwerkprotokollen, die beschreiben, wie Datenterminals - etwa ein Host - mit Datenkommunikationseinrichtungen (etwa einem X.25-Switch) kommunizieren. X.25 erfordert eine synchrone Datenverbindung und verlangt daher spezielle synchrone serielle Schnittstellen. Es ist aber auch möglich, normale serielle Schnittstellen zu verwenden, wenn man eine besondere Hardware namens PAD (Packet Assembler Disassembler) einsetzt. Ein PAD ist ein Gerät, das eine synchrone und eine oder mehrere asynchrone Schnittstellen zur Verfügung stellt. Es verwaltet das X.25-Protokoll so, dass auch einfache Terminals X.25-Verbindungen etablieren und akzeptieren können. X.25 wird häufig als Transportmittel für andere Netzwerkprotokolle wie z.B. TCP/IP benutzt. Da IP-Datagramme nicht einfach auf X.25 umgesetzt werden können (und umgekehrt ebenfalls nicht), werden sie in X.25-Pakete »eingepackt« und über das Netzwerk geschickt. Für Linux gibt es eine Implementierung des X.25-Protokolls, die wir hier aber nicht näher behandeln.

Ein Protokoll, das häufig von Telekommunikationsunternehmen verwendet wird, ist das so genannte Frame Relay. Dieses Protokoll hat einige Gemeinsamkeiten mit dem X.25-Protokoll, verhält sich aber eher wie das IP-Protokoll. Wie X.25 erfordert Frame Relay spezielle synchrone serielle Hardware. Aufgrund ihrer Gemeinsamkeiten unterstützen viele Netzwerkkarten beide Protokolle zugleich. Es gibt allerdings auch eine Alternative, die keine besondere interne Hardware verlangt. Sie basiert auf einem externen Gerät, das als Frame Relay Access Device (FRAD) bezeichnet wird und bei der Datenübertragung für die Kapselung der Ethernet-Pakete in Frame Relay-Pakete zuständig ist. Frame Relay eignet sich vorzüglich zur Übertragung von TCP/IP-Paketen zwischen Sites. Linux bietet Treiber, die einige Arten interner Frame Relay-Karten unterstützen.

Falls Sie ein Hochgeschwindigkeitsnetzwerk benötigen, das außer Ihren normalen Daten auch verschiedene Medien wie digitalisierte Sprache und Video übertragen kann, ist vielleicht ATM (Asynchronous Transfer Mode) genau das Richtige für Sie. ATM ist eine neue Netzwerktechnik, die speziell dafür ausgelegt wurde, um Daten mit hoher Geschwindigkeit und geringer Verzögerung zu übertragen und dabei eine gewisse Qualität zu gewährleisten (Quality of Service; QoS). Viele Telekommunikationsunternehmen errichten ganze Infrastrukturen aus ATM-Netzwerken, da sie damit eine Zusammenführung einer Vielzahl verschiedener Netzwerkdienste in einer einzigen Plattform erreichen und sich dadurch eine Reduzierung der Verwaltungs- und Wartungskosten erhoffen. ATM wird oft zum Transport von TCP/IP-Daten benutzt. Das Networking-HOWTO enthält Informationen über die Unterstützung von ATM unter Linux.

Häufig benutzen Amateurfunker ihre Funkgeräte, um ihre Computer zu vernetzen. Diese Technik ist als Packet Radio bekannt. Eines der von Amateurfunkern verwendeten Protokolle wird als AX.25 bezeichnet und ist in gewisser Weise von X.25 abgeleitet. Das AX.25-Protokoll wird ebenfalls zur Übertragung von TCP/IP und anderen Protokollen eingesetzt. AX.25 benötigt wie X.25 synchrone serielle Hardware oder ein externes Gerät, das als Terminal Node Controller bezeichnet wird. Damit werden Datenpakete, die über eine asynchrone serielle Verbindung hereinkommen, in Datenpakete konvertiert, die synchron übertragen werden. Es gibt eine Vielzahl verschiedener Schnittstellenkarten, die im Packet Radio-Modus arbeiten können; diese werden als »Z8530 SCC«-basiert bezeichnet (nach dem am häufigsten verwendeten Kommunikations-Controller). Zwei andere häufig mit AX.25 übertragene Protokolle sind NetRom und Rose, Protokolle der Netzwerkschicht. Da diese Protokolle über AX.25 laufen, haben sie dieselben Hardware-Anforderungen. Linux bietet eine vollständige Unterstützung von AX.25, NetRom und Rose. Das AX25-HOWTO ist eine gute Informationsquelle über die Linux-Implementierungen dieser Protokolle.

Andere Techniken verwenden langsame, aber billige serielle Leitungen für den Internetzugang über Wählleitungen (per Telefon, ISDN usw.). Das erfordert wieder ein anderes Protokoll für die Datenübertragung, zum Beispiel SLIP oder PPP, die wir später beschreiben werden.

Das Internet-Protokoll

Natürlich wollen Sie nicht, dass Ihr Netzwerk auf ein Ethernet oder eine Punkt-zu-Punkt-Verbindung beschränkt ist. Idealerweise sollten Sie mit einem Host-Rechner kommunizieren können, ohne Rücksicht darauf nehmen zu müssen, mit welchem Netzwerktyp er verbunden ist. Beispielsweise finden Sie bei einer größeren Installation wie an der Groucho-Marx-Universität üblicherweise eine ganze Reihe separater Netzwerke, die auf irgendeine Art und Weise miteinander verbunden werden müssen. Am mathematischen Institut der GMU wird mit zwei Ethernet-Netzwerken gearbeitet: einem Netzwerk mit schnellen Maschinen für Professoren und Mitarbeiter und einem Netzwerk mit langsamen Maschinen für die Studenten. Beide Netze hängen am universitätseigenen FDDI-Backbone.

Diese Verbindung wird von einem speziellen Host, einem so genannten Gateway, verwaltet, das ein- und ausgehende Pakete zwischen den beiden Ethernet-Netzwerken und der Glasfaserleitung kopiert. Falls Sie beispielsweise im mathematischen Institut sitzen und von Ihrem Linux-Rechner aus auf quark im LAN des physikalischen Instituts zugreifen wollen, sendet die Netzwerk-Software die Pakete nicht direkt an quark, weil diese Maschine sich nicht in demselben Ethernet-Netzwerk befindet. Die Software muss sich nun also auf ein Gateway verlassen, das das Paket entsprechend weiterleitet. Das Gateway (namens sophus) leitet die Pakete an das Gateway niels im physikalischen Institut weiter. Die Übertragung erfolgt über das Backbone-Netzwerk, und niels liefert die Daten an die Zielmaschine aus. Der Datenfluss zwischen erdos und quark ist in Abbildung 1-1 dargestellt.
Abbildung 1-1
Die drei Schritte beim Senden eines Datagramms von erdos an quark

Dieses Schema der Weiterleitung von Daten an einen entfernten Host wird Routing genannt. Die Datenpakete werden in diesem Kontext häufig als Datagramme bezeichnet. Um die Dinge etwas zu vereinfachen, erfolgt der Datagrammaustausch über ein einziges Protokoll, das von der verwendeten Hardware völlig unabhängig ist: IP oder Internet Protocol. In Kapitel 2 werden wir IP und Routing detaillierter beschreiben.

Der Hauptvorteil von IP besteht darin, dass es physisch verschiedene Netzwerke zu einem scheinbar homogenen Netzwerk zusammenfasst. Das wird als »Internetworking« bezeichnet, und das daraus resultierende »Meta-Netzwerk« wird Internet genannt. Beachten Sie an dieser Stelle den feinen Unterschied zwischen einem Internet und dem Internet. Letzteres ist der offizielle Name eines bestimmten globalen Internets.

Natürlich benötigt IP auch ein hardwareunabhängiges Adressierungsschema. Dies wird dadurch erreicht, dass jedem Host eine eindeutige 32-Bit-Zahl zugewiesen wird, die so genannte IP-Adresse. Dargestellt wird eine IP-Adresse üblicherweise durch vier Dezimalzahlen, eine für jeden 8-Bit-Anteil, die durch Punkte voneinander getrennt sind. Zum Beispiel könnte quark die IP-Adresse 0x954C0C04 besitzen, die Sie dann als 149.76.12.4 schreiben würden. Dieses Format wird auch Dotted-Decimal-Notation oder Dotted-Quad-Notation genannt und tritt neuerdings unter der Bezeichnung IPv4 (Internet Protocol, Version 4) in Erscheinung. Ein neuer Standard namens IPv6 bietet eine wesentlich flexiblere Adressierung und weitere moderne Funktionen. Es wird aber nach Erscheinen dieses Buches mindestens noch ein Jahr dauern, bis IPv6 eingesetzt wird.

Sie werden bemerkt haben, dass wir nun drei verschiedene Arten von Adressen haben: Zum einen haben wir Hostnamen wie z.B. quark, dann gibt es IP-Adressen, und schließlich gibt es noch Hardware-Adressen, wie die 6-Byte-Ethernet-Adresse. Das alles muss irgendwie so zusammenpassen, dass, wenn Sie ssh quark eingeben, der Netzwerk-Software die IP-Adresse von quark übergeben werden kann. Liefert IP irgendwelche Daten an das physikalische Institut, muss es irgendwie herausfinden, welche Ethernet-Adresse zu welcher IP-Adresse passt.

Mit dieser Thematik werden wir uns in Kapitel 2 befassen. Im Moment reicht es, sich zu merken, dass die für das Finden einer Adresse benötigten Schritte als Auflösen des Hostnamens oder Hostname Resolution bezeichnet werden, mit dem Ziel der Abbildung von Hostnamen auf IP-Adressen. Address Resolution ist dagegen der Vorgang, bei dem IP-Adressen auf Hardware-Adressen abgebildet werden.

IP über serielle Leitungen

Bei seriellen Leitungen gibt es einen »De facto«-Standard namens SLIP (Serial Line IP). Eine modifizierte Version von SLIP ist CSLIP oder Compressed SLIP, bei der die IP-Header komprimiert werden, um die relativ geringe Bandbreite von seriellen Verbindungen besser auszunutzen. Ein anderes serielles Protokoll ist PPP (Point-to-Point Protocol). PPP ist moderner als SLIP und bietet eine Reihe von Funktionen, die es gegenüber SLIP attraktiver machen. Der Hauptvorteil im Vergleich zu SLIP liegt darin, dass es nicht auf den Transport von IP-Datagrammen beschränkt ist, sondern mit nahezu jedem Protokoll zurechtkommt. Wir besprechen PPP in Kapitel 6.

Transmission Control Protocol

Mit dem Übertragen von Datagrammen von einem Host zum anderen ist es nicht getan. Wenn Sie sich auf quark anmelden, wollen Sie eine zuverlässige Verbindung zwischen Ihrem ssh-Prozess auf erdos und dem Shell-Prozess auf quark haben. Das bedeutet, dass die übertragenen Informationen vom Sender in Pakete aufgeteilt und vom Empfänger wieder zu einem Zeichenstrom zusammengesetzt werden müssen. So trivial Ihnen das auch vorkommen mag, so beinhaltet dieses Vorgehen jedoch eine Reihe komplizierter Aufgaben.

Eine sehr wichtige Tatsache, die Sie über IP wissen sollten, ist, dass es prinzipiell unzuverlässig ist - und das mit Absicht! Stellen Sie sich vor, dass zehn Leute in Ihrem Ethernet-Netzwerk anfangen, die neueste Version des Quellcodes für den Mozilla-Webbrowser vom FTP-Server der GMU herunterzuladen. Die Menge der zu übertragenden Daten könnte für das Gateway zu viel sein, weil es zu langsam ist und zu wenig Speicher besitzt. Wollen Sie nun ein Paket an quark schicken, könnten die Puffer von sophus gerade voll sein, und der Rechner wäre in diesem Fall nicht in der Lage, das Paket weiterzuleiten. IP löst dieses Problem, indem es das Paket einfach »vergisst«. Das Paket geht unwiederbringlich verloren. Die Verantwortung für die Integritätsprüfung und die Vollständigkeit der Daten liegt daher bei den kommunizierenden Hosts, die entsprechend Sorge dafür tragen müssen, dass Datenpakete im Fehlerfall erneut gesendet werden.

Dies wird wiederum von einem anderen Protokoll namens TCP oder Transmission Control Protocol erledigt, das einen zuverlässigen Dienst auf IP aufbaut. Das Hauptmerkmal von TCP besteht darin, dass es IP verwendet, um bei Ihnen den Eindruck zu erwecken, dass eine einfache Verbindung zwischen den beiden Prozessen auf Ihrem Host und auf der entfernten Maschine existiert. Sie müssen sich also nicht darum kümmern, wie und auf welcher Route die Daten tatsächlich reisen. Eine TCP-Verbindung arbeitet grundsätzlich wie eine Zwei-Wege-Pipe, bei der beide Prozesse schreiben und lesen können. Stellen Sie es sich wie ein einfaches Telefonat vor.

TCP identifiziert die Endpunkte einer solchen Verbindung anhand der IP-Adressen der beiden Hosts und der Nummer eines so genannten Ports auf jedem Host. Ports können Sie sich als eine Art Zugangspunkt für Netzwerkverbindungen vorstellen. Wenn wir bei unserem Telefonbeispiel bleiben und uns vorstellen, dass Städte wie Hosts sind, dann können Sie IP-Adressen mit Vorwahlnummern (Nummern für bestimmte Städte) und Portnummern mit den Telefonnummern der einzelnen Teilnehmer vergleichen. Ein einzelner Host kann viele verschiedene Dienste bieten, die anhand ihrer Portnummern unterschieden werden.

In unserem ssh-Beispiel öffnet die Client-Anwendung (ssh) einen Port auf erdos und stellt eine Verbindung mit Port 22 auf quark her, den der sshd-Server verwendet. Auf diese Weise wird eine TCP-Verbindung aufgebaut. Über diese Verbindung führt sshd zuerst die Autorisierung durch und startet dann die Shell. Die Standardeingabe und -ausgabe der Shell wird in die TCP-Verbindung umgeleitet. Alles, was Sie nun unter ssh auf Ihrer Maschine eingeben, wird über den TCP-Strom geleitet und als Standardeingabe für die Shell benutzt.

User Datagram Protocol

Natürlich ist TCP nicht das einzige bei TCP/IP-Netzwerken verwendete Protokoll. Obwohl für Anwendungen wie ssh geeignet, verbietet sich der Einsatz von TCP wegen des zu verwaltenden Overheads für manche Anwendungen von selbst. Eine solche Anwendung ist NFS. Hier wird das mit TCP verwandte UDP (User Datagram Protocol) benutzt. Genau wie TCP erlaubt auch UDP einer Anwendung, mit einem Dienst auf einem entfernten Rechner über einen bestimmten Port in Kontakt zu treten. Es wird aber keine Verbindung aufgebaut, sondern es werden nur einzelne Pakete an den entsprechenden Dienst gesandt - daher der Name.

Angenommen, Sie wollen eine kleinere Datenmenge von einem Datenbank-Server abfragen. Dafür werden mit TCP mindestens drei Datagramme zum Verbindungsaufbau, weitere drei Datagramme zum Senden jedes Datenpakets (in jede Richtung) und nochmals drei Datagramme zum Schließen der Verbindung benötigt. Dasselbe Ergebnis erzielt UDP mit nur zwei Datagrammen. UDP wird als »verbindungslos« bezeichnet, denn es benötigt keinen Verbindungsaufbau und -abbau. Wir müssen unsere Daten nur in ein Datagramm packen und dieses an den Server schicken. Auf dieselbe Weise schickt der Server seine Antwort zurück. Dieses Verfahren ist für einfache Transaktionen zwar schneller und effizienter als TCP, allerdings kommt UDP im Gegensatz zu TCP nicht mit Datenverlusten zurecht. Es obliegt daher der Anwendung, beispielsweise einem Nameserver, darauf zu achten.

Mehr zu Ports

Sie können sich Ports als Zugangspunkte für Netzwerkverbindungen vorstellen. Will eine Anwendung einen Dienst anbieten, verwendet sie einen bestimmten Port und wartet auf Clients. (Dieses Warten ist auch als »Lauschen« oder Listening am Port bekannt.) Möchte ein Client den Dienst benutzen, bestimmt er einen Port auf seinem lokalen Rechner und baut eine Verbindung zu dem Port des Servers auf dem entfernten Host auf. Derselbe Port kann auf vielen verschiedenen Maschinen geöffnet sein, aber auf jeder Maschine kann immer nur ein Prozess zur gleichen Zeit einen Port öffnen.

Eine wichtige Eigenschaft von Ports besteht darin, dass sich eine weitere Kopie des Servers an den Server-Port anhängen und nach weiteren Clients lauschen kann, wenn erst einmal eine Verbindung zwischen dem Client und dem Server aufgebaut wurde. Das ermöglicht es beispielsweise, dass mehrere externe Logins gleichzeitig den Port 513 auf demselben Host verwenden. TCP ist in der Lage, die verschiedenen Verbindungen voneinander zu unterscheiden, weil sie alle von unterschiedlichen Ports oder Hosts kommen. Falls Sie sich zum Beispiel zweimal von erdos auf quark anmelden, könnte der erste ssh-Client den lokalen Port 6464 und der zweite den Port 4235 verwenden. Beide stellen jedoch eine Verbindung zu Port 513 auf quark her. Die beiden Verbindungen werden anhand der verwendeten Portnummern auf erdos unterschieden.

Dieses Beispiel zeigt den Einsatz von Ports als Treffpunkt, der von Clients angelaufen wird, wenn ein bestimmter Dienst in Anspruch genommen werden soll. Damit ein Client auch die richtige Portnummer anspricht, muss über diese Nummern eine Vereinbarung zwischen den Administratoren beider Systeme getroffen werden. Bei Diensten, die so weit verbreitet sind wie ssh, werden diese Nummern zentral verwaltet. Das erledigt die Internet Engineering Task Force (IETF), die in regelmäßigen Abständen einen RFC namens Assigned Numbers (RFC-1700) veröffentlicht. Dieses Dokument beschreibt unter anderem die Portnummern der bekannten Dienste. Linux verwendet eine Datei namens /etc/services, die Dienstnamen mit Portnummern verbindet.

Anzumerken wäre noch, dass TCP und UDP zwar beide auf Ports aufbauen, diese Nummern aber nicht zu Konflikten führen. Das bedeutet, dass beispielsweise TCP-Port 22 nicht identisch mit UDP-Port 22 ist.

Die Socket Library

Bei Unix-Betriebssystemen ist die Software, die all diese Aufgaben und Protokolle durchführt, üblicherweise direkt in den Kernel integriert, und so ist es auch bei Linux. Die gängigste Programmierschnittstelle in der Unix-Welt ist die Berkeley Socket Library. Der Name stammt von einer bekannten Analogie, die Ports als Steckdosen (Sockets) und den Verbindungsaufbau zu einem Port als Einstecken beschreibt. Die Bibliothek stellt die bind-Funktion bereit, mit der Sie einen entfernten Host, ein Transportprotokoll und einen Dienst angeben können, zu dem ein Programm eine Verbindung herstellen oder an dem es lauschen kann. Zu diesem Zweck stehen die Funktionen connect, listen und accept bereit. Die Socket-Bibliothek ist noch etwas allgemeiner gehalten, denn sie bietet nicht nur eine Klasse von TCP/IP-basierten Sockets (die AF_INET-Sockets), sondern auch eine Klasse (die AF_UNIX-Klasse), die Verbindungen verwaltet, die auf dem lokalen Rechner stattfinden. Einige Implementierungen können auch mit anderen Klassen wie dem XNS-Protokoll (Xerox Networking System) oder X.25 umgehen.

In Linux ist die Socket Library Teil der Standard-C-Bibliothek (libc). Sie unterstützt die Sockets AF_INET und AF_INET6 für TCP/IP und AF_UNIX für Unix Domain Sockets, außerdem AF_IPX für Novell-Netzwerkprotokolle, AF_ X25 für das X.25-Netzwerkprotokoll, AF_ATMPVC und AF_ATMSVC für das ATM-Netzwerkprotokoll und AF_AX25-, AF_NETROM- und AF_ ROSE-Sockets für Amateurfunkprotokolle. Andere Protokollfamilien werden gerade entwickelt und im Laufe der Zeit hinzugefügt.

Netzwerke unter Linux

Als Ergebnis der Bemühungen von Programmierern aus aller Welt wäre Linux ohne das globale Netzwerk nicht denkbar gewesen. Es ist also nicht weiter verwunderlich, dass bereits in den frühen Entwicklungsphasen verschiedene Leute damit begannen, es um Netzwerkfähigkeiten zu erweitern. Eine UUCP-Implementierung lief nahezu von Anfang an unter Linux. Die Arbeit an TCP/IP-basierter Netzwerktechnik begann ungefähr im Herbst 1992, als Ross Biro und andere das entwickelten, was später unter dem Namen Net-1 bekannt wurde.

Nachdem Ross im Mai 1993 mit der aktiven Entwicklung aufhörte, begann Fred van Kempen mit der Arbeit an einer neuen Implementierung, wobei größere Teile des Codes neu geschrieben wurden. Diese Implementierung war unter dem Namen Net-2 bekannt. Das erste öffentliche Release, Net-2d, war im Sommer 1993 verfügbar (als Teil des 0.99.10-Kernel) und wurde seitdem von verschiedenen Leuten (besonders von Alan Cox) verwaltet und erweitert. Alans ursprüngliche Arbeit war als Net-2Debugged bekannt. Nach Behebung vieler Fehler und nach zahlreichen Verbesserungen des Codes änderte er den Namen in Net-3, nachdem Linux 1.0 veröffentlicht wurde. Der Net-3-Code wurde für Linux 1.2 und Linux 2.0 weiterentwickelt. Die Kernel der Version 2.2 und später verwenden den Net-4-Code, der zurzeit als offizieller Standard gilt.

Net-4 bietet eine Vielzahl von Gerätetreibern und modernen Funktionen. Zu den Standard-Net-4-Protokollen gehören SLIP und PPP (zur Übertragung von Daten über serielle Leitungen), PLIP (für parallele Leitungen), IPX (für Novell-kompatible Netzwerke), Appletalk (für Apple-Netzwerke) sowie AX.25, NetRom und Rose (für Amateurfunknetze). Außerdem unterstützt Net-4 Funktionen wie IP-Firewalls (siehe Kapitel 7), IP-Accounting (Kapitel 8) und IP-Masquerading (Kapitel 9). Auch IP-Tunneling und Routing werden in verschiedenen Varianten unterstützt. Des Weiteren gibt es Unterstützung für eine Vielzahl von Ethernet-Karten sowie für FDDI-, Token Ring-, Frame Relay- und ISDN- sowie ATM-Karten.

Darüber hinaus gibt es eine Vielzahl weiterer Funktionen, die die Flexibilität von Linux noch deutlich steigern. Dazu gehören unter anderem die Interoperabilität mit der Microsoft Windows-Umgebung im SMB-Protokoll Samba (siehe Kapitel 16) sowie eine Implementierungvon Novell NCP (NetWare Core Protocol).4

Verschiedene Streiflichter der Entwicklung

Es gab in der Vergangenheit immer wieder Bemühungen, Linux mit den neuesten Netzwerktechniken auszustatten.

Nachdem Net-2Debugged die offizielle Netzwerkimplementierung wurde, setzte Fred van Kempen die Entwicklung zu Net-2e fort, das sich durch ein stark überarbeitetes Design der Netzwerkschicht auszeichnete. Fred arbeitete auf eine standardisierte Gerätetreiber-Schnittstelle (Device Driver Interface; DDI) hin, aber die Arbeit an Net-2e ist mittlerweile beendet.

Eine weitere Implementierung von TCP/IP stammt aus der Feder von Matthias Urlichs. Er schrieb einen ISDN-Treiber für Linux und FreeBSD und integrierte dafür einen Teil des BSD-Netzwerkcodes in den Linux-Kernel. Auch dieses Projekt wird inzwischen nicht mehr fortgeführt.

Im Laufe der Zeit gab es viele kurzfristige Änderungen in den Netzwerkimplementierungen des Linux-Kernels. Solange die Entwicklung fortschreitet, ist auch heute noch stete Weiterentwicklung oberstes Gebot. Manchmal erfordert diese Weiterentwicklung auch Änderungen in der Anwendungssoftware, wie den Werkzeugen zur Netzwerkkonfiguration. Obwohl dies nicht mehr ein so großes Problem darstellt wie einst, erfordert ein Kernel-Upgrade gegebenenfalls immer noch ein Upgrade der Netzwerkkonfigurationswerkzeuge. Zum Glück sind heutzutage viele verschiedene Linux-Distributionen erhältlich, so dass dieses Problem mittlerweile schnell erledigt ist.

Die Net-4-Netzwerksoftware ist inzwischen Standard und wird auf sehr vielen Sites auf der ganzen Welt verwendet. Viel Arbeit und Mühe wurde besonders in die Geschwindigkeitsoptimierung des Net-4-Codes investiert, und es verwundert daher nicht, dass er nun mit den besten Netzwerkimplementierungen mithalten kann, die für die gleichen Hardwareplattformen zur Verfügung stehen. Linux »boomt« besonders im Bereich der Internet-Service-Provider und wird dort häufig zum Aufbau billiger und zuverlässiger WWW-Server, Mailserver und Newsserver benutzt. Linux hat bei den Entwicklern so viel Interesse geweckt, dass es stets mit den neuesten Netzwerktechniken Schritt hält. So bieten die aktuellen Versionen des Linux-Kernels bereits standardmäßig Unterstützung für das Internet-Protokoll von morgen namens IPv6 (siehe Kapitel 13).

Woher Sie den Code bekommen

Es ist schon komisch, wenn man sich daran erinnert, dass man in den frühen Tagen der Entwicklung des Linux-Netzwerkcodes den Standard-Kernel erst durch riesige Patches ergänzen musste, um ihn netzwerkfähig zu machen. Heute ist die Pflege des Netzwerkcodes nur noch ein ganz normaler Bestandteil der weiteren Kernel-Entwicklung. Die neuesten stabilen Kernel finden Sie unter ftp://ftp.kernel.org im Verzeichnis /pub/linux/kernel/v2.x/, wobei das x immer eine gerade Zahl ist. Die neuesten Entwickler-Kernel finden Sie unter ftp://ftp.kernel.org im Verzeichnis /pub/linux/kernel/v2.y/, wobei y immer eine ungerade Zahl ist. Die kernel.org-Distributionen können Sie auch über HTTP von http://www.kernel.org beziehen. Außerdem gibt es auf der ganzen Welt Spiegel-Sites der Linux-Kernel-Quellen.

Wie Sie Ihr System verwalten

In diesem Buch befassen wir uns hauptsächlich mit Fragen der Installation und Konfiguration. Administration bedeutet aber wesentlich mehr als das - nachdem Sie einen Dienst eingerichtet haben, müssen Sie ihn auch am Laufen halten. Den meisten Diensten müssen Sie nicht besonders viel Aufmerksamkeit schenken, während andere wie etwa Mail die Erledigung von Routineaufgaben von Ihnen verlangen, um das System auf dem neuesten Stand zu halten. Diese Aufgaben werden wir in späteren Kapiteln behandeln.

Das absolute Minimum bei der Wartung ist die regelmäßige Überprüfung der System- und Anwendungslogdateien auf Fehler und ungewöhnliche Ereignisse. In der Regel erledigen Sie das durch das Schreiben einer Reihe administrativer Shell-Skripten, die periodisch von cron aus ausgeführt werden. Die Quell-Distributionen einiger bedeutender Anwendungen enthalten solche Skripten. Sie müssen sie nur noch an Ihre Anforderungen und Bedürfnisse anpassen.

Die Ausgabe aller cron-Jobs sollte per E-Mail an einen administrativen Account gesendet werden. Per Voreinstellung senden viele Anwendungen Fehlermeldungen, Benutzungsstatistiken oder Zusammenfassungen von Logdateien an root. Das ist nur dann sinnvoll, wenn Sie sich häufig als root anmelden; es ist besser, die E-Mail von root an Ihren persönlichen Zugang weiterzuleiten, indem Sie einen Mail-Alias einrichten, wie in den Kapiteln 11 und 12 beschrieben.

Unabhängig davon, wie sorgfältig Sie Ihre Site konfiguriert haben, garantiert Murphys Gesetz, dass ein Problem auftauchen wird. Darum bedeutet die Verwaltung eines Systems auch, dass Sie für Beschwerden erreichbar sein müssen. Normalerweise erwarten die Leute, dass der Systemadministrator zumindest als root per E-Mail erreicht werden kann, es existieren aber auch andere Adressen, die häufig verwendet werden, um eine Person zu erreichen, die für einen bestimmten Aspekt der Verwaltung zuständig ist. Beispielsweise werden Beschwerden über eine fehlerhafte Mail-Konfiguration üblicherweise an postmaster adressiert. Probleme mit dem Newssystem werden dem newsmaster oder usenet mitgeteilt. Mail an hostmaster sollte an die Person weitergeleitet werden, die sich um die grundlegenden Netzwerkdienste und den DNS-Dienst kümmert, falls Sie einen Nameserver betreiben.

Systemsicherheit

Ein anderer wichtiger Aspekt der Systemadministration in einer Netzwerkumgebung ist der Schutz Ihres Systems und der Benutzer vor Eindringlingen. Nachlässig verwaltete Systeme bieten böswilligen Zeitgenossen viele Ziele. Die Angriffe reichen von geknackten Kennwörtern bis zum Ausspionieren des Ethernet-Netzwerks, und die verursachten Schäden reichen von gefälschten Mails über Datenverlust bis hin zur Verletzung Ihrer Privatsphäre. Wir werden auf die Probleme im Einzelnen dort eingehen, wo sie auftreten können. Gleichzeitig stellen wir Ihnen einige gängige Schutzmaßnahmen vor.

Dieser Abschnitt beschreibt einige Beispiele und grundlegende Techniken zur Systemsicherheit. Natürlich können die behandelten Aspekte nicht alle Sicherheitsthemen im Detail erläutern, denen Sie begegnen können; sie dienen lediglich dazu, die möglichen Probleme zu verdeutlichen. Aus diesem Grund ist das Lesen eines guten Buchs über die Systemsicherheit ein absolutes Muss, besonders bei einem vernetzten System.

Systemsicherheit beginnt mit einer guten Systemadministration. Das beinhaltet die Überprüfung von Eigentums- und Zugriffsrechten aller aktiven Dateien und Verzeichnisse sowie die Überwachung privilegierter Accounts. Das Programm COPS überprüft zum Beispiel Ihr Dateisystem und gängige Konfigurationsdateien auf ungewöhnliche Rechte oder andere Anomalien. Ein anderes Werkzeug, Bastille Linux, das von Jay Beale entwickelt wurde und unter http://www.bastille-linux.org zu finden ist, enthält eine Reihe von Skripten und Programmen, die verwendet werden können, um ein Linux-System zu sperren. Des Weiteren ist es klug, ein Kennwortprogramm einzusetzen, das den Benutzern bestimmte Regeln beim Anlegen von Passwörtern auferlegt, die das Erraten von Passwörtern erschweren. Das inzwischen standardmäßig eingesetzte Shadow-Passwortsystem verlangt beispielsweise, dass ein Kennwort aus mindestens fünf Zeichen besteht und sowohl groß- als auch kleingeschriebene Zeichen sowie Sonderzeichen enthält.

Wenn Sie einen Dienst über das Netzwerk verfügbar machen, sollten Sie sicherstellen, dass Sie ihm die »geringsten Berechtigungen« zuweisen, d.h. ihm keine Dinge erlauben, die für seine Arbeit nicht benötigt werden. Zum Beispiel dürfen Programme die UID nur dann auf root oder einen anderen privilegierten Account einstellen, wenn es unbedingt erforderlich ist. Wenn ein Dienst nur für eine sehr eingeschränkte Anwendung eingesetzt werden soll, sollten Sie nicht zögern, ihn so restriktiv zu konfigurieren, wie es diese spezielle Anwendung zulässt. Falls Sie es beispielsweise plattenlosen Hosts erlauben wollen, von Ihrer Maschine zu starten, müssen Sie TFTP (Trivial File Transfer Protocol) installieren, damit diese Rechner die grundlegenden Konfigurationsdateien aus dem /boot-Verzeichnis herunterladen können. Wird es nun aber ohne Beschränkungen verwendet, erlaubt TFTP jedem Benutzer auf der ganzen Welt, jede allgemein lesbare Datei von Ihrem System herunterzuziehen. Sollte das nicht in Ihrem Sinne sein, beschränken Sie den TFTP-Dienst auf das Verzeichnis /boot (wir kommen in Kapitel 10 darauf zurück). Bestimmte Dienste wollen Sie vielleicht auf bestimmte Benutzer von bestimmten Hosts, etwa aus Ihrem lokalen Netzwerk, beschränken. In Kapitel 10 stellen wir Ihnen tcpd vor, das dies für viele Netzwerkanwendungen erledigt. Ausgeklügeltere Methoden zur Beschränkung des Zugriffs auf bestimmte Hosts oder Dienste werden in Kapitel 7 erkundet.

Ein weiterer wichtiger Punkt ist die Vermeidung »gefährlicher« Software. Natürlich ist jede Software potenziell gefährlich, weil sie fehlerhaft sein kann, was clevere Leute ausnutzen könnten, um sich Zugang zu Ihrem System zu verschaffen. Solche Dinge kommen vor, und es gibt einfach keinen vollständigen Schutz davor. Dieses Problem betrifft freie und kommerzielle Software gleichermaßen.5 Programme, die besondere Berechtigungen benötigen, sind naturgemäß gefährlicher als andere, weil jedes Schlupfloch drastische Folgen haben kann.6 Wenn Sie einen Netzwerkdienst installieren, der ein setuid-Programm benötigt, müssen Sie doppelt vorsichtig sein, nichts in der Dokumentation zu übersehen, damit Sie nicht versehentlich eine Sicherheitslücke öffnen.

Ein anderer Grund zur Sorge sind Programme, die Logins oder die Ausführung von Befehlen mit begrenzter Authentifizierung ermöglichen. Die Befehle rlogin, rsh und rexec sind zweifellos alle sehr nützlich, bieten der Gegenstelle aber nur eine eingeschränkte Authentifizierung an. Die Authentifizierung beruht auf dem Vertrauen in den aufrufenden Hostnamen, der von einem Nameserver bezogen wird (darauf gehen wir später ein). Dieser Hostname kann jedoch gefälscht sein. Heutzutage sollten die r-Befehle standardmäßig vollständig deaktiviert und durch das ssh-Programmpaket ersetzt werden. Die ssh-Programme verwenden eine verlässlichere Authentifizierungsmethode und bieten außerdem andere Dienste wie Verschlüsselung und Komprimierung.

Sie können niemals ausschließen, dass Ihre Sicherheitsvorkehrungen nicht doch fehlschlagen, egal wie sorgfältig Sie waren. Sie müssen daher sicherstellen, dass Sie Eindringlinge frühzeitig erkennen. Die Überprüfung der Logdateien ist ein guter Ansatzpunkt, allerdings ist der Eindringling möglicherweise so clever und entfernt alle offensichtlichen Spuren. Andererseits existieren Werkzeuge wie tripwire von Gene Kim und Gene Spafford, mit denen Sie überprüfen können, ob bei wichtigen Systemdateien der Inhalt oder die Zugriffsrechte verändert wurden. tripwire berechnet verschiedene Prüfsummen dieser Dateien und speichert sie in einer Datenbank. Bei nachfolgenden Läufen werden die Prüfsummen erneut berechnet und mit den gespeicherten Werten verglichen, um Veränderungen zu erkennen.

Schließlich ist es immer wichtig, bezüglich der Sicherheit selbst die Initiative zu ergreifen. Achten Sie in Mailinglisten auf Hinweise für Updates und Fehlerkorrekturen für die von Ihnen eingesetzten Programme, um mit den neuesten Versionen auf dem aktuellen Stand zu bleiben. Wenn Sie es versäumen, etwa Apache oder OpenSSL zu aktualisieren, sind Sie auf dem besten Weg, Ihr System zu kompromittieren. Ein ziemlich aktuelles Beispiel dafür war der Linux-Slapper-Wurm, der eine OpenSSL-Schwachstelle ausnutzte. Es mag zwar abschreckend und furchtbar zeitaufwändig sein, immer auf dem aktuellen Stand zu bleiben, aber diejenigen Administratoren, die schnell reagiert und ihre OpenSSL-Implementierungen aktualisiert hatten, sparten eine Menge Zeit, da sie ihre kompromittierten Systeme nicht erneuern mussten!

Fussnoten

1Dessen ursprünglicher Geist (siehe oben) ist auch heute noch manchmal erkennbar.
2Die Shell ist eine Kommandozeilenschnittstelle zum Unix-Betriebssystem. Sie ähnelt der DOS-Eingabeaufforderung unter Microsoft Windows, ist dabei aber viel leistungsfähiger.
3Die Ethernet-FAQ unter http://www.faqs.org/faqs/LANs/ethernet-faq/ beschäftigt sich mit dieser Angelegenheit. Eine Menge historischer und technischer Informationen finden Sie auf der Website von Charles Spurgeon unter http://www.ethermanage.com/ethernet/ethernet.htm/.
4NCP ist das Protokoll, auf dem die Novell-Datei- und -Druckdienste basieren.
5Es gab kommerzielle Unix-Systeme (für die Sie eine Menge Geld hinlegen müssen), die ein setuid-root-Shell-Skript enthielten, das es Benutzern ermöglichte, mit Hilfe eines einfachen Tricks root-Rechte zu erlangen.
61988 brachte der RTM-Wurm einen großen Teil des Internet zum Erliegen - zum Teil, weil er ein klaffendes Loch in einigen Programmen, einschließlich des sendmail-Programms, ausnutzte. Diese Sicherheitslücke ist schon lange gestopft worden.

TOC PREV NEXT INDEX


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen
Kontakt | Über O'Reilly | Datenschutz

© 2005, O'Reilly Verlag GmbH & Co. KG